appium 2.0.0-beta.43 → 2.0.0-beta.44

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.
@@ -444,7 +444,7 @@ class ExtensionCommand {
444
444
  let unsafeUpdate = await _support.npm.getLatestVersion(this.config.appiumHome, pkgName);
445
445
  let safeUpdate = await _support.npm.getLatestSafeUpgradeVersion(this.config.appiumHome, pkgName, version);
446
446
 
447
- if (!_support.util.compareVersions(unsafeUpdate, '>', version)) {
447
+ if (unsafeUpdate !== null && !_support.util.compareVersions(unsafeUpdate, '>', version)) {
448
448
  unsafeUpdate = null;
449
449
  safeUpdate = null;
450
450
  }
@@ -532,4 +532,4 @@ class ExtensionCommand {
532
532
  exports.ExtensionCommand = ExtensionCommand;
533
533
  var _default = ExtensionCommand;
534
534
  exports.default = _default;
535
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVUERBVEVfQUxMIiwiTm90VXBkYXRhYmxlRXJyb3IiLCJFcnJvciIsIk5vVXBkYXRlc0F2YWlsYWJsZUVycm9yIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbmZpZyIsImtub3duRXh0ZW5zaW9ucyIsImlzSnNvbk91dHB1dCIsImNvbnN0cnVjdG9yIiwianNvbiIsImxvZyIsImNvbnNvbGUiLCJDbGlDb25zb2xlIiwianNvbk1vZGUiLCJCb29sZWFuIiwidHlwZSIsImV4dGVuc2lvblR5cGUiLCJfY3JlYXRlRmF0YWxFcnJvciIsIm1lc3NhZ2UiLCJkZWNvcmF0ZSIsImV4ZWN1dGUiLCJhcmdzIiwiY21kIiwiXyIsImlzRnVuY3Rpb24iLCJleGVjdXRlQ21kIiwiYmluZCIsImxpc3QiLCJzaG93SW5zdGFsbGVkIiwic2hvd1VwZGF0ZXMiLCJsc01zZyIsImluc3RhbGxlZE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJrbm93bk5hbWVzIiwiZXh0cyIsInJlZHVjZSIsImFjYyIsIm5hbWUiLCJpbmNsdWRlcyIsImluc3RhbGxlZCIsInBrZ05hbWUiLCJzcGluV2l0aCIsImV4dCIsImRhdGEiLCJ0b1BhaXJzIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwidXBkYXRlcyIsImNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlIiwidXBkYXRlVmVyc2lvbiIsInNhZmVVcGRhdGUiLCJ1bnNhZmVVcGRhdGVWZXJzaW9uIiwidW5zYWZlVXBkYXRlIiwidXBUb0RhdGUiLCJsaXN0RGF0YSIsImluc3RhbGxUeHQiLCJncmV5IiwidXBkYXRlVHh0IiwidXBUb0RhdGVUeHQiLCJ1bnNhZmVVcGRhdGVUeHQiLCJpbnN0YWxsU3BlYyIsInZlcnNpb24iLCJ0eXBlVHh0IiwiSU5TVEFMTF9UWVBFX0dJVCIsIklOU1RBTExfVFlQRV9HSVRIVUIiLCJ5ZWxsb3ciLCJJTlNUQUxMX1RZUEVfTE9DQUwiLCJtYWdlbnRhIiwiZ3JlZW4iLCJjeWFuIiwiX2luc3RhbGwiLCJwYWNrYWdlTmFtZSIsImV4dERhdGEiLCJpbnN0YWxsT3B0cyIsInByb2JhYmxlRXh0TmFtZSIsInNwbGl0IiwibGVuZ3RoIiwicmVwbGFjZSIsInBrZ1ZlciIsInBhdGgiLCJpc0Fic29sdXRlIiwicmVzb2x2ZSIsInNwbGl0cyIsIm1zZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc0luc3RhbGxlZCIsImluc3RhbGxWaWFOcG0iLCJleHROYW1lIiwiZXh0TWFuaWZlc3QiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsIkIiLCJhbGwiLCJnZXRQcm9ibGVtcyIsImdldFdhcm5pbmdzIiwiZXJyb3JNYXAiLCJNYXAiLCJ3YXJuaW5nTWFwIiwiZXJyb3JTdW1tYXJpZXMiLCJ3YXJuaW5nU3VtbWFyaWVzIiwiZ2V0VmFsaWRhdGlvblJlc3VsdFN1bW1hcmllcyIsImlzRW1wdHkiLCJqb2luIiwid2FybiIsImFkZEV4dGVuc2lvbiIsImVudiIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJhcHBpdW1Ib21lIiwicGFja2FnZURpZENoYW5nZSIsImluZm8iLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJucG1TcGVjIiwic3BlY01zZyIsInBrZ0pzb25EYXRhIiwibnBtIiwiaW5zdGFsbFBhY2thZ2UiLCJ2YWxpZGF0ZVBhY2thZ2VKc29uIiwiZ2V0RXh0ZW5zaW9uRmllbGRzIiwiZXJyIiwicGtnSnNvbiIsImFwcGl1bSIsInBlZXJEZXBlbmRlbmNpZXMiLCJyZXN1bHQiLCJhcHBpdW1WZXJzaW9uIiwiY3JlYXRlTWlzc2luZ0ZpZWxkRXJyb3IiLCJmaWVsZCIsIlJlZmVyZW5jZUVycm9yIiwidmFsaWRhdGVFeHRlbnNpb25GaWVsZHMiLCJleHRNZXRhZGF0YSIsIl91bmluc3RhbGwiLCJ1bmluc3RhbGxQYWNrYWdlIiwicmVtb3ZlRXh0ZW5zaW9uIiwib2siLCJfdXBkYXRlIiwidW5zYWZlIiwic2hvdWxkVXBkYXRlQWxsIiwiZXh0c1RvVXBkYXRlIiwiZSIsInVwZGF0ZSIsImN1cnJlbnQiLCJ1cGRhdGVWZXIiLCJ1cGRhdGVFeHRlbnNpb24iLCJmcm9tIiwidG8iLCJlcnJvciIsInJlZCIsImdldExhdGVzdFZlcnNpb24iLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwiX3J1biIsInNjcmlwdE5hbWUiLCJleHRyYUFyZ3MiLCJleHRDb25maWciLCJzY3JpcHRzIiwiZXh0U2NyaXB0cyIsImlzUGxhaW5PYmplY3QiLCJoYXMiLCJydW5uZXIiLCJTdWJQcm9jZXNzIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZ2V0SW5zdGFsbFBhdGgiLCJvdXRwdXQiLCJSaW5nQnVmZmVyIiwib24iLCJsaW5lIiwiZW5xdWV1ZSIsInN0YXJ0IiwiZ2V0QnVmZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvZXh0ZW5zaW9uLWNvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtucG0sIHV0aWwsIGVudiwgY29uc29sZX0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7c3BpbldpdGgsIFJpbmdCdWZmZXJ9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtTdWJQcm9jZXNzfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgSU5TVEFMTF9UWVBFX05QTSxcbiAgSU5TVEFMTF9UWVBFX0dJVCxcbiAgSU5TVEFMTF9UWVBFX0dJVEhVQixcbiAgSU5TVEFMTF9UWVBFX0xPQ0FMLFxufSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3BhY2thZ2VEaWRDaGFuZ2V9IGZyb20gJy4uL2V4dGVuc2lvbi9wYWNrYWdlLWNoYW5nZWQnO1xuXG5jb25zdCBVUERBVEVfQUxMID0gJ2luc3RhbGxlZCc7XG5cbmNsYXNzIE5vdFVwZGF0YWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIE5vVXBkYXRlc0F2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqL1xuY2xhc3MgRXh0ZW5zaW9uQ29tbWFuZCB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBgRHJpdmVyQ29uZmlnYCBvciBgUGx1Z2luQ29uZmlnYCwgZGVwZW5kaW5nIG9uIGBFeHRUeXBlYC5cbiAgICogQHR5cGUge0V4dGVuc2lvbkNvbmZpZzxFeHRUeXBlPn1cbiAgICovXG4gIGNvbmZpZztcblxuICAvKipcbiAgICoge0BsaW5rY29kZSBSZWNvcmR9IG9mIG9mZmljaWFsIHBsdWdpbnMgb3IgZHJpdmVycy5cbiAgICogQHR5cGUge0tub3duRXh0ZW5zaW9uczxFeHRUeXBlPn1cbiAgICovXG4gIGtub3duRXh0ZW5zaW9ucztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21tYW5kIG91dHB1dCBoYXMgYmVlbiByZXF1ZXN0ZWQgYXMgSlNPTi5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBpc0pzb25PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEV4dGVuc2lvbkNvbW1hbmRcbiAgICogQHBhcmFtIHtFeHRlbnNpb25Db21tYW5kT3B0aW9uczxFeHRUeXBlPn0gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZywganNvbn0pIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmxvZyA9IG5ldyBjb25zb2xlLkNsaUNvbnNvbGUoe2pzb25Nb2RlOiBqc29ufSk7XG4gICAgdGhpcy5pc0pzb25PdXRwdXQgPSBCb29sZWFuKGpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBkcml2ZXJgIG9yIGBwbHVnaW5gLCBkZXBlbmRpbmcgb24gdGhlIGBFeHRlbnNpb25Db25maWdgLlxuICAgKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4dGVuc2lvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIG1lc3NhZ2UgYW5kIHJldHVybnMgYW4ge0BsaW5rY29kZSBFcnJvcn0gdG8gdGhyb3cuXG4gICAqXG4gICAqIEZvciBUUyB0byB1bmRlcnN0YW5kIHRoYXQgYSBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLCBpdCBtdXN0IGFjdHVhbGx5IHRocm93IGFuIGV4Y2VwdGlvbi0tXG4gICAqIGluIG90aGVyIHdvcmRzLCBfY2FsbGluZ18gYSBmdW5jdGlvbiB3aGljaCBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpcyBub3QgZW5vdWdoLS1cbiAgICogbm9yIGlzIHNvbWV0aGluZyBsaWtlIGBAcmV0dXJucyB7bmV2ZXJ9YCB3aGljaCBkb2VzIG5vdCBpbXBseSBhIHRocm93biBleGNlcHRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJldHVybnMge0Vycm9yfVxuICAgKi9cbiAgX2NyZWF0ZUZhdGFsRXJyb3IobWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IodGhpcy5sb2cuZGVjb3JhdGUobWVzc2FnZSwgJ2Vycm9yJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgYSBDTEkgcGFyc2UgYW5kIHJ1biBhbiBleHRlbnNpb24gY29tbWFuZCBiYXNlZCBvbiBpdHMgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIGEga2V5L3ZhbHVlIG9iamVjdCB3aXRoIENMSSBmbGFncyBhbmQgdmFsdWVzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8b2JqZWN0Pn0gdGhlIHJlc3VsdCBvZiB0aGUgc3BlY2lmaWMgY29tbWFuZCB3aGljaCBpcyBleGVjdXRlZFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShhcmdzKSB7XG4gICAgY29uc3QgY21kID0gYXJnc1tgJHt0aGlzLnR5cGV9Q29tbWFuZGBdO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKHRoaXNbY21kXSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYENhbm5vdCBoYW5kbGUgJHt0aGlzLnR5cGV9IGNvbW1hbmQgJHtjbWR9YCk7XG4gICAgfVxuICAgIGNvbnN0IGV4ZWN1dGVDbWQgPSB0aGlzW2NtZF0uYmluZCh0aGlzKTtcbiAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZUNtZChhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGV4dGVuc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIHtMaXN0T3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dGVuc2lvbkxpc3REYXRhPn0gbWFwIG9mIGV4dGVuc2lvbiBuYW1lcyB0byBleHRlbnNpb24gZGF0YVxuICAgKi9cbiAgYXN5bmMgbGlzdCh7c2hvd0luc3RhbGxlZCwgc2hvd1VwZGF0ZXN9KSB7XG4gICAgY29uc3QgbHNNc2cgPSBgTGlzdGluZyAke3Nob3dJbnN0YWxsZWQgPyAnaW5zdGFsbGVkJyA6ICdhdmFpbGFibGUnfSAke3RoaXMudHlwZX1zYDtcbiAgICBjb25zdCBpbnN0YWxsZWROYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuICAgIGNvbnN0IGtub3duTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmtub3duRXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgZXh0cyA9IFsuLi5pbnN0YWxsZWROYW1lcywgLi4ua25vd25OYW1lc10ucmVkdWNlKFxuICAgICAgKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWFjY1tuYW1lXSkge1xuICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgYWNjW25hbWVdID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW25hbWVdLFxuICAgICAgICAgICAgICBpbnN0YWxsZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3dJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgIGFjY1tuYW1lXSA9IHtwa2dOYW1lOiB0aGlzLmtub3duRXh0ZW5zaW9uc1tuYW1lXSwgaW5zdGFsbGVkOiBmYWxzZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGVpdGhlciB7QGxpbmtjb2RlIFVuaW5zdGFsbGVkRXh0ZW5zaW9uTElzdERhdGF9IF9vcl9cbiAgICAgICAqIHtAbGlua2NvZGUgSW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGF9IHdpdGhvdXQgdXBncmFkZSBpbmZvcm1hdGlvbiAod2hpY2ggaXMgYWRkZWQgYnkgdGhlIGJlbG93IGNvZGUgYmxvY2spXG4gICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxQYXJ0aWFsPEluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhPnxVbmluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhPn1cbiAgICAgICAqLyAoe30pXG4gICAgKTtcblxuICAgIC8vIGlmIHdlIHdhbnQgdG8gc2hvdyB3aGV0aGVyIHVwZGF0ZXMgYXJlIGF2YWlsYWJsZSwgcHV0IHRoYXQgYmVoaW5kIGEgc3Bpbm5lclxuICAgIGF3YWl0IHNwaW5XaXRoKHRoaXMuaXNKc29uT3V0cHV0LCBsc01zZywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzaG93VXBkYXRlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtleHQsIGRhdGFdIG9mIF8udG9QYWlycyhleHRzKSkge1xuICAgICAgICBpZiAoIWRhdGEuaW5zdGFsbGVkIHx8IGRhdGEuaW5zdGFsbFR5cGUgIT09IElOU1RBTExfVFlQRV9OUE0pIHtcbiAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB1cGRhdGVzIG9uIGV4dHMgdGhhdCBhcmVuJ3QgaW5zdGFsbGVkXG4gICAgICAgICAgLy8gYWxzbyBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB1cGRhdGVzIG9uIG5vbi1ucG0gZXh0c1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZXMgPSBhd2FpdCB0aGlzLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKGV4dCk7XG4gICAgICAgIGRhdGEudXBkYXRlVmVyc2lvbiA9IHVwZGF0ZXMuc2FmZVVwZGF0ZTtcbiAgICAgICAgZGF0YS51bnNhZmVVcGRhdGVWZXJzaW9uID0gdXBkYXRlcy51bnNhZmVVcGRhdGU7XG4gICAgICAgIGRhdGEudXBUb0RhdGUgPSB1cGRhdGVzLnNhZmVVcGRhdGUgPT09IG51bGwgJiYgdXBkYXRlcy51bnNhZmVVcGRhdGUgPT09IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0RGF0YSA9IC8qKiBAdHlwZSB7RXh0ZW5zaW9uTGlzdERhdGF9ICovIChleHRzKTtcblxuICAgIC8vIGlmIHdlJ3JlIGp1c3QgZ2V0dGluZyB0aGUgZGF0YSwgc2hvcnQgY2lyY3VpdCByZXR1cm4gaGVyZSBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueVxuICAgIC8vIGZvcm1hdHRpbmcgbG9naWNcbiAgICBpZiAodGhpcy5pc0pzb25PdXRwdXQpIHtcbiAgICAgIHJldHVybiBsaXN0RGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBfLnRvUGFpcnMobGlzdERhdGEpKSB7XG4gICAgICBsZXQgaW5zdGFsbFR4dCA9ICcgW25vdCBpbnN0YWxsZWRdJy5ncmV5O1xuICAgICAgbGV0IHVwZGF0ZVR4dCA9ICcnO1xuICAgICAgbGV0IHVwVG9EYXRlVHh0ID0gJyc7XG4gICAgICBsZXQgdW5zYWZlVXBkYXRlVHh0ID0gJyc7XG4gICAgICBpZiAoZGF0YS5pbnN0YWxsZWQpIHtcbiAgICAgICAgY29uc3Qge2luc3RhbGxUeXBlLCBpbnN0YWxsU3BlYywgdXBkYXRlVmVyc2lvbiwgdW5zYWZlVXBkYXRlVmVyc2lvbiwgdmVyc2lvbiwgdXBUb0RhdGV9ID1cbiAgICAgICAgICBkYXRhO1xuICAgICAgICBsZXQgdHlwZVR4dDtcbiAgICAgICAgc3dpdGNoIChpbnN0YWxsVHlwZSkge1xuICAgICAgICAgIGNhc2UgSU5TVEFMTF9UWVBFX0dJVDpcbiAgICAgICAgICBjYXNlIElOU1RBTExfVFlQRV9HSVRIVUI6XG4gICAgICAgICAgICB0eXBlVHh0ID0gYChjbG9uZWQgZnJvbSAke2luc3RhbGxTcGVjfSlgLnllbGxvdztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSU5TVEFMTF9UWVBFX0xPQ0FMOlxuICAgICAgICAgICAgdHlwZVR4dCA9IGAobGlua2VkIGZyb20gJHtpbnN0YWxsU3BlY30pYC5tYWdlbnRhO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHR5cGVUeHQgPSAnKE5QTSknO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbGxUeHQgPSBgQCR7dmVyc2lvbi55ZWxsb3d9ICR7KCdbaW5zdGFsbGVkICcgKyB0eXBlVHh0ICsgJ10nKS5ncmVlbn1gO1xuXG4gICAgICAgIGlmIChzaG93VXBkYXRlcykge1xuICAgICAgICAgIGlmICh1cGRhdGVWZXJzaW9uKSB7XG4gICAgICAgICAgICB1cGRhdGVUeHQgPSBgIFske3VwZGF0ZVZlcnNpb259IGF2YWlsYWJsZV1gLm1hZ2VudGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1cFRvRGF0ZSkge1xuICAgICAgICAgICAgdXBUb0RhdGVUeHQgPSBgIFtVcCB0byBkYXRlXWAuZ3JlZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bnNhZmVVcGRhdGVWZXJzaW9uKSB7XG4gICAgICAgICAgICB1bnNhZmVVcGRhdGVUeHQgPSBgIFske3Vuc2FmZVVwZGF0ZVZlcnNpb259IGF2YWlsYWJsZSAocG90ZW50aWFsbHkgdW5zYWZlKV1gLmN5YW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmxvZyhgLSAke25hbWUueWVsbG93fSR7aW5zdGFsbFR4dH0ke3VwZGF0ZVR4dH0ke3VwVG9EYXRlVHh0fSR7dW5zYWZlVXBkYXRlVHh0fWApO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxsIGFuIGV4dGVuc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge0luc3RhbGxBcmdzfSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8RXh0UmVjb3JkPEV4dFR5cGU+Pn0gbWFwIG9mIGFsbCBpbnN0YWxsZWQgZXh0ZW5zaW9uIG5hbWVzIHRvIGV4dGVuc2lvbiBkYXRhXG4gICAqL1xuICBhc3luYyBfaW5zdGFsbCh7aW5zdGFsbFNwZWMsIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pIHtcbiAgICAvKiogQHR5cGUge0V4dGVuc2lvbkZpZWxkczxFeHRUeXBlPn0gKi9cbiAgICBsZXQgZXh0RGF0YTtcblxuICAgIGlmIChwYWNrYWdlTmFtZSAmJiBbSU5TVEFMTF9UWVBFX0xPQ0FMLCBJTlNUQUxMX1RZUEVfTlBNXS5pbmNsdWRlcyhpbnN0YWxsVHlwZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYFdoZW4gdXNpbmcgLS1zb3VyY2U9JHtpbnN0YWxsVHlwZX0sIGNhbm5vdCBhbHNvIHVzZSAtLXBhY2thZ2VgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VOYW1lICYmIFtJTlNUQUxMX1RZUEVfR0lULCBJTlNUQUxMX1RZUEVfR0lUSFVCXS5pbmNsdWRlcyhpbnN0YWxsVHlwZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYFdoZW4gdXNpbmcgLS1zb3VyY2U9JHtpbnN0YWxsVHlwZX0sIG11c3QgYWxzbyB1c2UgLS1wYWNrYWdlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0luc3RhbGxWaWFOcG1BcmdzfVxuICAgICAqL1xuICAgIGxldCBpbnN0YWxsT3B0cztcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9iYWJsZSAoPykgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFsbCBzcGVjLlxuICAgICAqXG4gICAgICogSWYgdXNpbmcgYSBsb2NhbCBpbnN0YWxsIHR5cGUsIHRoaXMgd2lsbCByZW1haW4gZW1wdHkuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsZXQgcHJvYmFibGVFeHROYW1lID0gJyc7XG5cbiAgICAvLyBkZXBlbmRpbmcgb24gYGluc3RhbGxUeXBlYCwgYnVpbGQgdGhlIG9wdGlvbnMgdG8gcGFzcyBpbnRvIGBpbnN0YWxsVmlhTnBtYFxuICAgIGlmIChpbnN0YWxsVHlwZSA9PT0gSU5TVEFMTF9UWVBFX0dJVEhVQikge1xuICAgICAgaWYgKGluc3RhbGxTcGVjLnNwbGl0KCcvJykubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgICAgYEdpdGh1YiAke3RoaXMudHlwZX0gc3BlYyAke2luc3RhbGxTcGVjfSBhcHBlYXJlZCB0byBiZSBpbnZhbGlkOyBgICtcbiAgICAgICAgICAgICdpdCBzaG91bGQgYmUgb2YgdGhlIGZvcm0gPG9yZz4vPHJlcG8+J1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaW5zdGFsbE9wdHMgPSB7XG4gICAgICAgIGluc3RhbGxTcGVjLFxuICAgICAgICBwa2dOYW1lOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhY2thZ2VOYW1lKSxcbiAgICAgIH07XG4gICAgICBwcm9iYWJsZUV4dE5hbWUgPSBpbnN0YWxsU3BlYztcbiAgICB9IGVsc2UgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfR0lUKSB7XG4gICAgICAvLyBnaXQgdXJscyBjYW4gaGF2ZSAnLmdpdCcgYXQgdGhlIGVuZCwgYnV0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhbmQgd291bGQgY29tcGxpY2F0ZSB0aGVcbiAgICAgIC8vIHdheSB3ZSBkb3dubG9hZCBhbmQgbmFtZSBkaXJlY3Rvcmllcywgc28gd2UgY2FuIGp1c3QgcmVtb3ZlIGl0XG4gICAgICBpbnN0YWxsU3BlYyA9IGluc3RhbGxTcGVjLnJlcGxhY2UoL1xcLmdpdCQvLCAnJyk7XG4gICAgICBpbnN0YWxsT3B0cyA9IHtcbiAgICAgICAgaW5zdGFsbFNwZWMsXG4gICAgICAgIHBrZ05hbWU6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGFja2FnZU5hbWUpLFxuICAgICAgfTtcbiAgICAgIHByb2JhYmxlRXh0TmFtZSA9IGluc3RhbGxTcGVjO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcGtnTmFtZSwgcGtnVmVyO1xuICAgICAgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfTE9DQUwpIHtcbiAgICAgICAgcGtnTmFtZSA9IHBhdGguaXNBYnNvbHV0ZShpbnN0YWxsU3BlYykgPyBpbnN0YWxsU3BlYyA6IHBhdGgucmVzb2x2ZShpbnN0YWxsU3BlYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGhhdmUgZWl0aGVyIGFuIG5wbSBwYWNrYWdlIG9yIGFuIGFwcGl1bSB2ZXJpZmllZCBleHRlbnNpb25cbiAgICAgICAgLy8gbmFtZSBvciBhIGxvY2FsIHBhdGguIGJvdGggb2Ygd2hpY2ggd2lsbCBiZSBpbnN0YWxsZWQgdmlhIG5wbS5cbiAgICAgICAgLy8gZXh0ZW5zaW9ucyBpbnN0YWxsZWQgdmlhIG5wbSBjYW4gaW5jbHVkZSB2ZXJzaW9ucyBvciB0YWdzIGFmdGVyIHRoZSAnQCdcbiAgICAgICAgLy8gc2lnbiwgc28gY2hlY2sgZm9yIHRoYXQuIFdlIGFsc28gbmVlZCB0byBiZSBjYXJlZnVsIHRoYXQgcGFja2FnZSBuYW1lcyB0aGVtc2VsdmVzIGNhblxuICAgICAgICAvLyBjb250YWluIHRoZSAnQCcgc3ltYm9sLCBhcyBpbiBgbnBtIGluc3RhbGwgQGFwcGl1bS9mYWtlLWRyaXZlckAxLjIuMGBcbiAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgIGNvbnN0IHNwbGl0cyA9IGluc3RhbGxTcGVjLnNwbGl0KCdAJyk7XG4gICAgICAgIGlmIChpbnN0YWxsU3BlY1swXSA9PT0gJ0AnKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIG5wbSBvcmcgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2UgbmFtZVxuICAgICAgICAgIFtuYW1lLCBwa2dWZXJdID0gW2BAJHtzcGxpdHNbMV19YCwgc3BsaXRzWzJdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBjYXNlIHdpdGhvdXQgYW4gbnBtIG9yZ1xuICAgICAgICAgIFtuYW1lLCBwa2dWZXJdID0gc3BsaXRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfTlBNKSB7XG4gICAgICAgICAgLy8gaWYgd2UncmUgaW5zdGFsbGluZyBhIG5hbWVkIHBhY2thZ2UgZnJvbSBucG0sIHdlIGRvbid0IG5lZWQgdG8gY2hlY2tcbiAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSBhcHBpdW0gZXh0ZW5zaW9uIGxpc3Q7IGp1c3QgdXNlIHRoZSBpbnN0YWxsU3BlYyBhcyBpc1xuICAgICAgICAgIHBrZ05hbWUgPSBuYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIHdlJ3JlIGluc3RhbGxpbmcgYSBuYW1lZCBhcHBpdW0gZHJpdmVyIChsaWtlICd4Y3VpdGVzdCcpIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBkZXJlZmVyZW5jZSB0aGUgYWN0dWFsIG5wbSBwYWNrYWdlICgnYXBwaXVwbS14Y3VpdGVzdC1kcml2ZXInKSwgc29cbiAgICAgICAgICAvLyBjaGVjayBpdCBleGlzdHMgYW5kIGdldCB0aGUgY29ycmVjdCBwYWNrYWdlXG4gICAgICAgICAgY29uc3Qga25vd25OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMua25vd25FeHRlbnNpb25zKTtcbiAgICAgICAgICBpZiAoIV8uaW5jbHVkZXMoa25vd25OYW1lcywgbmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgcmVzb2x2ZSAke3RoaXMudHlwZX07IGFyZSB5b3Ugc3VyZSBpdCdzIGluIHRoZSBsaXN0IGAgK1xuICAgICAgICAgICAgICBgb2Ygc3VwcG9ydGVkICR7dGhpcy50eXBlfXM/ICR7SlNPTi5zdHJpbmdpZnkoa25vd25OYW1lcyl9YDtcbiAgICAgICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvYmFibGVFeHROYW1lID0gbmFtZTtcbiAgICAgICAgICBwa2dOYW1lID0gdGhpcy5rbm93bkV4dGVuc2lvbnNbbmFtZV07XG4gICAgICAgICAgLy8gZ2l2ZW4gdGhhdCB3ZSdsbCB1c2UgdGhlIGluc3RhbGwgdHlwZSBpbiB0aGUgZHJpdmVyIGpzb24sIHN0b3JlIGl0IGFzXG4gICAgICAgICAgLy8gJ25wbScgbm93XG4gICAgICAgICAgaW5zdGFsbFR5cGUgPSBJTlNUQUxMX1RZUEVfTlBNO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnN0YWxsT3B0cyA9IHtpbnN0YWxsU3BlYywgcGtnTmFtZSwgcGtnVmVyfTtcbiAgICB9XG5cbiAgICAvLyBmYWlsIGZhc3QgaGVyZSBpZiB3ZSBjYW5cbiAgICBpZiAocHJvYmFibGVFeHROYW1lICYmIHRoaXMuY29uZmlnLmlzSW5zdGFsbGVkKHByb2JhYmxlRXh0TmFtZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgIGBBICR7dGhpcy50eXBlfSBuYW1lZCBcIiR7cHJvYmFibGVFeHROYW1lfVwiIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBgICtcbiAgICAgICAgICBgRGlkIHlvdSBtZWFuIHRvIHVwZGF0ZT8gUnVuIFwiYXBwaXVtICR7dGhpcy50eXBlfSB1cGRhdGVcIi4gU2VlIGAgK1xuICAgICAgICAgIGBpbnN0YWxsZWQgJHt0aGlzLnR5cGV9cyB3aXRoIFwiYXBwaXVtICR7dGhpcy50eXBlfSBsaXN0IC0taW5zdGFsbGVkXCIuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBleHREYXRhID0gYXdhaXQgdGhpcy5pbnN0YWxsVmlhTnBtKGluc3RhbGxPcHRzKTtcblxuICAgIC8vIHRoaXMgX3Nob3VsZF8gYmUgdGhlIHNhbWUgYXMgYHByb2JhYmx5RXh0TmFtZWAgYXMgdGhlIG9uZSBkZXJpdmVkIGFib3ZlIHVubGVzc1xuICAgIC8vIGluc3RhbGwgdHlwZSBpcyBsb2NhbC5cbiAgICBjb25zdCBleHROYW1lID0gZXh0RGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke3RoaXMudHlwZX1OYW1lYCldO1xuXG4gICAgLy8gY2hlY2sgX2Egc2Vjb25kIHRpbWVfIHdpdGggdGhlIG1vcmUtYWNjdXJhdGUgZXh0TmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5pc0luc3RhbGxlZChleHROYW1lKSkge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYEEgJHt0aGlzLnR5cGV9IG5hbWVkIFwiJHtleHROYW1lfVwiIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBgICtcbiAgICAgICAgICBgRGlkIHlvdSBtZWFuIHRvIHVwZGF0ZT8gUnVuIFwiYXBwaXVtICR7dGhpcy50eXBlfSB1cGRhdGVcIi4gU2VlIGAgK1xuICAgICAgICAgIGBpbnN0YWxsZWQgJHt0aGlzLnR5cGV9cyB3aXRoIFwiYXBwaXVtICR7dGhpcy50eXBlfSBsaXN0IC0taW5zdGFsbGVkXCIuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZpZWxkIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIG1hbmlmZXN0IChpdCdzIHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lIGluc3RlYWQpXG4gICAgLy8gc28gdGhhdCdzIHdoeSBpdCdzIGJlaW5nIHJlbW92ZWQgaGVyZS5cbiAgICBkZWxldGUgZXh0RGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke3RoaXMudHlwZX1OYW1lYCldO1xuXG4gICAgLyoqIEB0eXBlIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gKi9cbiAgICBjb25zdCBleHRNYW5pZmVzdCA9IHsuLi5leHREYXRhLCBpbnN0YWxsVHlwZSwgaW5zdGFsbFNwZWN9O1xuICAgIGNvbnN0IFtlcnJvcnMsIHdhcm5pbmdzXSA9IGF3YWl0IEIuYWxsKFtcbiAgICAgIHRoaXMuY29uZmlnLmdldFByb2JsZW1zKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICAgIHRoaXMuY29uZmlnLmdldFdhcm5pbmdzKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICBdKTtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXAoW1tleHROYW1lLCBlcnJvcnNdXSk7XG4gICAgY29uc3Qgd2FybmluZ01hcCA9IG5ldyBNYXAoW1tleHROYW1lLCB3YXJuaW5nc11dKTtcbiAgICBjb25zdCB7ZXJyb3JTdW1tYXJpZXMsIHdhcm5pbmdTdW1tYXJpZXN9ID0gdGhpcy5jb25maWcuZ2V0VmFsaWRhdGlvblJlc3VsdFN1bW1hcmllcyhcbiAgICAgIGVycm9yTWFwLFxuICAgICAgd2FybmluZ01hcFxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShlcnJvclN1bW1hcmllcykpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoZXJyb3JTdW1tYXJpZXMuam9pbignXFxuJykpO1xuICAgIH1cblxuICAgIC8vIG5vdGUgdGhhdCB3ZSB3b24ndCBzaG93IGFueSB3YXJuaW5ncyBpZiB0aGVyZSB3ZXJlIGVycm9ycy5cbiAgICBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3VtbWFyaWVzKSkge1xuICAgICAgdGhpcy5sb2cud2Fybih3YXJuaW5nU3VtbWFyaWVzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5hZGRFeHRlbnNpb24oZXh0TmFtZSwgZXh0TWFuaWZlc3QpO1xuXG4gICAgLy8gdXBkYXRlIHRoZSBpZiB3ZSd2ZSBjaGFuZ2VkIHRoZSBsb2NhbCBgcGFja2FnZS5qc29uYFxuICAgIGlmIChhd2FpdCBlbnYuaGFzQXBwaXVtRGVwZW5kZW5jeSh0aGlzLmNvbmZpZy5hcHBpdW1Ib21lKSkge1xuICAgICAgYXdhaXQgcGFja2FnZURpZENoYW5nZSh0aGlzLmNvbmZpZy5hcHBpdW1Ib21lKTtcbiAgICB9XG5cbiAgICAvLyBsb2cgaW5mbyBmb3IgdGhlIHVzZXJcbiAgICB0aGlzLmxvZy5pbmZvKHRoaXMuZ2V0UG9zdEluc3RhbGxUZXh0KHtleHROYW1lLCBleHREYXRhfSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCBhbiBleHRlbnNpb24gdmlhIE5QTVxuICAgKlxuICAgKiBAcGFyYW0ge0luc3RhbGxWaWFOcG1BcmdzfSBhcmdzXG4gICAqL1xuICBhc3luYyBpbnN0YWxsVmlhTnBtKHtpbnN0YWxsU3BlYywgcGtnTmFtZSwgcGtnVmVyfSkge1xuICAgIGNvbnN0IG5wbVNwZWMgPSBgJHtwa2dOYW1lfSR7cGtnVmVyID8gJ0AnICsgcGtnVmVyIDogJyd9YDtcbiAgICBjb25zdCBzcGVjTXNnID0gbnBtU3BlYyA9PT0gaW5zdGFsbFNwZWMgPyAnJyA6IGAgdXNpbmcgTlBNIGluc3RhbGwgc3BlYyAnJHtucG1TcGVjfSdgO1xuICAgIGNvbnN0IG1zZyA9IGBJbnN0YWxsaW5nICcke2luc3RhbGxTcGVjfScke3NwZWNNc2d9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnSnNvbkRhdGEgPSBhd2FpdCBzcGluV2l0aCh0aGlzLmlzSnNvbk91dHB1dCwgbXNnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBrZ0pzb25EYXRhID0gYXdhaXQgbnBtLmluc3RhbGxQYWNrYWdlKHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsIHBrZ05hbWUsIHtcbiAgICAgICAgICBwa2dWZXIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZhbGlkYXRlUGFja2FnZUpzb24ocGtnSnNvbkRhdGEsIGluc3RhbGxTcGVjKTtcbiAgICAgICAgcmV0dXJuIHBrZ0pzb25EYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldEV4dGVuc2lvbkZpZWxkcyhwa2dKc29uRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKGBFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGVuIGluc3RhbGxpbmcgcGFja2FnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0ZXh0IHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYWZ0ZXIgYW4gZXh0ZW5zaW9uIGhhcyBiZWVuIGluc3RhbGxlZC4gVGhpc1xuICAgKiBpcyBkZXNpZ25lZCB0byBiZSBvdmVycmlkZGVuIGJ5IGRyaXZlcnMvcGx1Z2lucyB3aXRoIHRoZWlyIG93biBwYXJ0aWN1bGFyIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldFBvc3RJbnN0YWxsVGV4dChhcmdzKSB7XG4gICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcignTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBmaW5hbCBjbGFzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgYW4gTlBNIG1vZHVsZSdzIHBhY2thZ2UuanNvbiBhbmQgZXh0cmFjdCBBcHBpdW0gZHJpdmVyIGluZm9ybWF0aW9uIGZyb20gYSBzcGVjaWFsXG4gICAqICdhcHBpdW0nIGZpZWxkIGluIHRoZSBKU09OIGRhdGEuIFdlIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiB0byBlLmcuIGRldGVybWluZSB3aGljaCBjbGFzcyB0b1xuICAgKiBsb2FkIGFzIHRoZSBtYWluIGRyaXZlciBjbGFzcywgb3IgdG8gYmUgYWJsZSB0byBkZXRlY3QgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiBkcml2ZXIgYW5kXG4gICAqIGFwcGl1bSB2ZXJzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn0gcGtnSnNvbiAtIHRoZSBwYWNrYWdlLmpzb24gZGF0YSBmb3IgYSBkcml2ZXIgbW9kdWxlLCBhcyBpZiBpdCBoYWQgYmVlbiBzdHJhaWdodGZvcndhcmRseSAncmVxdWlyZSdkXG4gICAqIEByZXR1cm5zIHtFeHRlbnNpb25GaWVsZHM8RXh0VHlwZT59XG4gICAqL1xuICBnZXRFeHRlbnNpb25GaWVsZHMocGtnSnNvbikge1xuICAgIGNvbnN0IHthcHBpdW0sIG5hbWUsIHZlcnNpb24sIHBlZXJEZXBlbmRlbmNpZXN9ID0gcGtnSnNvbjtcblxuICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5hcHBpdW0sXG4gICAgICBwa2dOYW1lOiBuYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGFwcGl1bVZlcnNpb246IHBlZXJEZXBlbmRlbmNpZXM/LmFwcGl1bSxcbiAgICB9O1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4dGVuc2lvbkZpZWxkczxFeHRUeXBlPn0gKi8gKHJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBfcmVxdWlyZWRfIHJvb3QgZmllbGRzIG9mIGFuIGV4dGVuc2lvbidzIGBwYWNrYWdlLmpzb25gIGZpbGUuXG4gICAqXG4gICAqIFRoZXNlIHJlcXVpcmVkIGZpZWxkcyBhcmU6XG4gICAqIC0gYG5hbWVgXG4gICAqIC0gYHZlcnNpb25gXG4gICAqIC0gYGFwcGl1bWBcbiAgICogQHBhcmFtIHtpbXBvcnQoJ3R5cGUtZmVzdCcpLlBhY2thZ2VKc29ufSBwa2dKc29uIC0gYHBhY2thZ2UuanNvbmAgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIEV4dGVuc2lvbiBuYW1lL3NwZWNcbiAgICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IElmIGBwYWNrYWdlLmpzb25gIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBmaWVsZFxuICAgKiBAcmV0dXJucyB7cGtnSnNvbiBpcyBFeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn1cbiAgICovXG4gIHZhbGlkYXRlUGFja2FnZUpzb24ocGtnSnNvbiwgaW5zdGFsbFNwZWMpIHtcbiAgICBjb25zdCB7YXBwaXVtLCBuYW1lLCB2ZXJzaW9ufSA9IC8qKiBAdHlwZSB7RXh0UGFja2FnZUpzb248RXh0VHlwZT59ICovIChwa2dKc29uKTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gICAgICogQHJldHVybnMge1JlZmVyZW5jZUVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yID0gKGZpZWxkKSA9PlxuICAgICAgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICBgJHt0aGlzLnR5cGV9IFwiJHtpbnN0YWxsU3BlY31cIiBpbnZhbGlkOyBtaXNzaW5nIGEgXFxgJHtmaWVsZH1cXGAgZmllbGQgb2YgaXRzIFxcYHBhY2thZ2UuanNvblxcYGBcbiAgICAgICk7XG5cbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yKCduYW1lJyk7XG4gICAgfVxuICAgIGlmICghdmVyc2lvbikge1xuICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0ZpZWxkRXJyb3IoJ3ZlcnNpb24nKTtcbiAgICB9XG4gICAgaWYgKCFhcHBpdW0pIHtcbiAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yKCdhcHBpdW0nKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzKGFwcGl1bSwgaW5zdGFsbFNwZWMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIGFueSBgcGFja2FnZS5qc29uYCBmaWVsZHMgd2hpY2ggYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZXh0ZW5zaW9uIHJlcXVpcmVzLCB2YWxpZGF0ZSB0aGVcbiAgICogcHJlc2VuY2UgYW5kIGZvcm0gb2YgdGhvc2UgZmllbGRzIG9uIHRoZSBgcGFja2FnZS5qc29uYCBkYXRhLCB0aHJvd2luZyBhbiBlcnJvciBpZiBhbnl0aGluZyBpc1xuICAgKiBhbWlzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRNZXRhZGF0YTxFeHRUeXBlPn0gZXh0TWV0YWRhdGEgLSB0aGUgZGF0YSBpbiB0aGUgXCJhcHBpdW1cIiBmaWVsZCBvZiBgcGFja2FnZS5qc29uYCBmb3IgYW4gZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIEV4dGVuc2lvbiBuYW1lL3NwZWNcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyhleHRNZXRhZGF0YSwgaW5zdGFsbFNwZWMpIHtcbiAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKCdNdXN0IGJlIGltcGxlbWVudGVkIGluIGZpbmFsIGNsYXNzJyk7XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIGFuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogRmlyc3QgdHJpZXMgdG8gZG8gdGhpcyB2aWEgYG5wbSB1bmluc3RhbGxgLCBidXQgaWYgdGhhdCBmYWlscywganVzdCBgcm0gLXJmYCdzIHRoZSBleHRlbnNpb24gZGlyLlxuICAgKlxuICAgKiBXaWxsIG9ubHkgcmVtb3ZlIHRoZSBleHRlbnNpb24gZnJvbSB0aGUgbWFuaWZlc3QgaWYgaXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VW5pbnN0YWxsT3B0c30gb3B0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dFJlY29yZDxFeHRUeXBlPj59IG1hcCBvZiBhbGwgaW5zdGFsbGVkIGV4dGVuc2lvbiBuYW1lcyB0byBleHRlbnNpb24gZGF0YSAod2l0aG91dCB0aGUgZXh0ZW5zaW9uIGp1c3QgdW5pbnN0YWxsZWQpXG4gICAqL1xuICBhc3luYyBfdW5pbnN0YWxsKHtpbnN0YWxsU3BlY30pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzSW5zdGFsbGVkKGluc3RhbGxTcGVjKSkge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYENhbid0IHVuaW5zdGFsbCAke3RoaXMudHlwZX0gJyR7aW5zdGFsbFNwZWN9JzsgaXQgaXMgbm90IGluc3RhbGxlZGBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBrZ05hbWUgPSB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW2luc3RhbGxTcGVjXS5wa2dOYW1lO1xuICAgIGF3YWl0IG5wbS51bmluc3RhbGxQYWNrYWdlKHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlbW92ZUV4dGVuc2lvbihpbnN0YWxsU3BlYyk7XG4gICAgdGhpcy5sb2cub2soYFN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCAke3RoaXMudHlwZX0gJyR7aW5zdGFsbFNwZWN9J2AuZ3JlZW4pO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXBkYXRlIG9uZSBvciBtb3JlIGRyaXZlcnMgdXNpbmcgTlBNXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVXBkYXRlT3B0c30gdXBkYXRlU3BlY1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dGVuc2lvblVwZGF0ZVJlc3VsdD59XG4gICAqL1xuICBhc3luYyBfdXBkYXRlKHtpbnN0YWxsU3BlYywgdW5zYWZlfSkge1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZUFsbCA9IGluc3RhbGxTcGVjID09PSBVUERBVEVfQUxMO1xuICAgIC8vIGlmIHdlJ3JlIHNwZWNpZmljYWxseSByZXF1ZXN0aW5nIGFuIHVwZGF0ZSBmb3IgYW4gZXh0ZW5zaW9uLCBtYWtlIHN1cmUgaXQncyBpbnN0YWxsZWRcbiAgICBpZiAoIXNob3VsZFVwZGF0ZUFsbCAmJiAhdGhpcy5jb25maWcuaXNJbnN0YWxsZWQoaW5zdGFsbFNwZWMpKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKFxuICAgICAgICBgVGhlICR7dGhpcy50eXBlfSBcIiR7aW5zdGFsbFNwZWN9XCIgd2FzIG5vdCBpbnN0YWxsZWQsIHNvIGNhbid0IGJlIHVwZGF0ZWRgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBleHRzVG9VcGRhdGUgPSBzaG91bGRVcGRhdGVBbGxcbiAgICAgID8gT2JqZWN0LmtleXModGhpcy5jb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgIDogW2luc3RhbGxTcGVjXTtcblxuICAgIC8vICdlcnJvcnMnIHdpbGwgaGF2ZSBleHQgbmFtZXMgYXMga2V5cyBhbmQgZXJyb3Igb2JqZWN0cyBhcyB2YWx1ZXNcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsRXJyb3I+fSAqL1xuICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuXG4gICAgLy8gJ3VwZGF0ZXMnIHdpbGwgaGF2ZSBleHQgbmFtZXMgYXMga2V5cyBhbmQgdXBkYXRlIG9iamVjdHMgYXMgdmFsdWVzLCB3aGVyZSBhbiB1cGRhdGVcbiAgICAvLyBvYmplY3QgaXMgb2YgdGhlIGZvcm0ge2Zyb206IHZlcnNpb25TdHJpbmcsIHRvOiB2ZXJzaW9uU3RyaW5nfVxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxVcGRhdGVSZXBvcnQ+fSAqL1xuICAgIGNvbnN0IHVwZGF0ZXMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZSBvZiBleHRzVG9VcGRhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNwaW5XaXRoKHRoaXMuaXNKc29uT3V0cHV0LCBgQ2hlY2tpbmcgaWYgJHt0aGlzLnR5cGV9ICcke2V9JyBpcyB1cGRhdGFibGVgLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnNbZV0uaW5zdGFsbFR5cGUgIT09IElOU1RBTExfVFlQRV9OUE0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RVcGRhdGFibGVFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHNwaW5XaXRoKFxuICAgICAgICAgIHRoaXMuaXNKc29uT3V0cHV0LFxuICAgICAgICAgIGBDaGVja2luZyBpZiAke3RoaXMudHlwZX0gJyR7ZX0nIG5lZWRzIGFuIHVwZGF0ZWAsXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5jaGVja0ZvckV4dGVuc2lvblVwZGF0ZShlKTtcbiAgICAgICAgICAgIGlmICghKHVwZGF0ZS5zYWZlVXBkYXRlIHx8IHVwZGF0ZS51bnNhZmVVcGRhdGUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBOb1VwZGF0ZXNBdmFpbGFibGVFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghdW5zYWZlICYmICF1cGRhdGUuc2FmZVVwZGF0ZSkge1xuICAgICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgICAgICBgVGhlICR7dGhpcy50eXBlfSAnJHtlfScgaGFzIGEgbWFqb3IgcmV2aXNpb24gdXBkYXRlIGAgK1xuICAgICAgICAgICAgICBgKCR7dXBkYXRlLmN1cnJlbnR9ID0+ICR7dXBkYXRlLnVuc2FmZVVwZGF0ZX0pLCB3aGljaCBjb3VsZCBpbmNsdWRlIGAgK1xuICAgICAgICAgICAgICBgYnJlYWtpbmcgY2hhbmdlcy4gSWYgeW91IHdhbnQgdG8gYXBwbHkgdGhpcyB1cGRhdGUsIHJlLXJ1biB3aXRoIC0tdW5zYWZlYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlVmVyID0gdW5zYWZlICYmIHVwZGF0ZS51bnNhZmVVcGRhdGUgPyB1cGRhdGUudW5zYWZlVXBkYXRlIDogdXBkYXRlLnNhZmVVcGRhdGU7XG4gICAgICAgIGF3YWl0IHNwaW5XaXRoKFxuICAgICAgICAgIHRoaXMuaXNKc29uT3V0cHV0LFxuICAgICAgICAgIGBVcGRhdGluZyBkcml2ZXIgJyR7ZX0nIGZyb20gJHt1cGRhdGUuY3VycmVudH0gdG8gJHt1cGRhdGVWZXJ9YCxcbiAgICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnVwZGF0ZUV4dGVuc2lvbihlLCB1cGRhdGVWZXIpXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZXNbZV0gPSB7ZnJvbTogdXBkYXRlLmN1cnJlbnQsIHRvOiB1cGRhdGVWZXJ9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9yc1tlXSA9IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdVcGRhdGUgcmVwb3J0OicpO1xuXG4gICAgZm9yIChjb25zdCBbZSwgdXBkYXRlXSBvZiBfLnRvUGFpcnModXBkYXRlcykpIHtcbiAgICAgIHRoaXMubG9nLm9rKGAgIC0gJHt0aGlzLnR5cGV9ICR7ZX0gdXBkYXRlZDogJHt1cGRhdGUuZnJvbX0gPT4gJHt1cGRhdGUudG99YC5ncmVlbik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZSwgZXJyXSBvZiBfLnRvUGFpcnMoZXJyb3JzKSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdFVwZGF0YWJsZUVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXG4gICAgICAgICAgYCAgLSAnJHtlfScgd2FzIG5vdCBpbnN0YWxsZWQgdmlhIG5wbSwgc28gd2UgY291bGQgbm90IGNoZWNrIGAgKyBgZm9yIHVwZGF0ZXNgLnllbGxvd1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBOb1VwZGF0ZXNBdmFpbGFibGVFcnJvcikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAgIC0gJyR7ZX0nIGhhZCBubyB1cGRhdGVzIGF2YWlsYWJsZWAueWVsbG93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgbWFrZSBpdCBwb3Agd2l0aCByZWQhXG4gICAgICAgIHRoaXMubG9nLmVycm9yKGAgIC0gJyR7ZX0nIGZhaWxlZCB0byB1cGRhdGU6ICR7ZXJyfWAucmVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt1cGRhdGVzLCBlcnJvcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIGV4dGVuc2lvbiBuYW1lLCBmaWd1cmUgb3V0IHdoYXQgaXRzIGhpZ2hlc3QgcG9zc2libGUgdmVyc2lvbiB1cGdyYWRlIGlzLCBhbmQgYWxzbyB0aGVcbiAgICogaGlnaGVzdCBwb3NzaWJsZSBzYWZlIHVwZ3JhZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHQgLSBuYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBvc3NpYmxlVXBkYXRlcz59XG4gICAqL1xuICBhc3luYyBjaGVja0ZvckV4dGVuc2lvblVwZGF0ZShleHQpIHtcbiAgICAvLyBUT0RPIGRlY2lkZSBob3cgd2Ugd2FudCB0byBoYW5kbGUgYmV0YSB2ZXJzaW9ucz9cbiAgICAvLyB0aGlzIGlzIGEgaGVscGVyIG1ldGhvZCwgJ2V4dCcgaXMgYXNzdW1lZCB0byBhbHJlYWR5IGJlIGluc3RhbGxlZCBoZXJlLCBhbmQgb2YgdGhlIG5wbVxuICAgIC8vIGluc3RhbGwgdHlwZVxuICAgIGNvbnN0IHt2ZXJzaW9uLCBwa2dOYW1lfSA9IHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0XTtcbiAgICBsZXQgdW5zYWZlVXBkYXRlID0gYXdhaXQgbnBtLmdldExhdGVzdFZlcnNpb24odGhpcy5jb25maWcuYXBwaXVtSG9tZSwgcGtnTmFtZSk7XG4gICAgbGV0IHNhZmVVcGRhdGUgPSBhd2FpdCBucG0uZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKFxuICAgICAgdGhpcy5jb25maWcuYXBwaXVtSG9tZSxcbiAgICAgIHBrZ05hbWUsXG4gICAgICB2ZXJzaW9uXG4gICAgKTtcbiAgICBpZiAoIXV0aWwuY29tcGFyZVZlcnNpb25zKHVuc2FmZVVwZGF0ZSwgJz4nLCB2ZXJzaW9uKSkge1xuICAgICAgLy8gdGhlIGxhdGVzdCB2ZXJzaW9uIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwgc28gdGhlcmUncyBubyBwb3NzaWJsZSB1cGRhdGVcbiAgICAgIHVuc2FmZVVwZGF0ZSA9IG51bGw7XG4gICAgICBzYWZlVXBkYXRlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHVuc2FmZVVwZGF0ZSAmJiB1bnNhZmVVcGRhdGUgPT09IHNhZmVVcGRhdGUpIHtcbiAgICAgIC8vIHRoZSBsYXRlc3QgdXBkYXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBzYWZlIHVwZGF0ZSwgd2hpY2ggbWVhbnMgaXQncyBub3QgYWN0dWFsbHkgdW5zYWZlXG4gICAgICB1bnNhZmVVcGRhdGUgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoc2FmZVVwZGF0ZSAmJiAhdXRpbC5jb21wYXJlVmVyc2lvbnMoc2FmZVVwZGF0ZSwgJz4nLCB2ZXJzaW9uKSkge1xuICAgICAgLy8gZXZlbiB0aGUgc2FmZSB1cGRhdGUgaXMgbm90IGxhdGVyIHRoYW4gdGhlIGN1cnJlbnQsIHNvIGl0IGlzIG5vdCBhY3R1YWxseSBhbiB1cGRhdGVcbiAgICAgIHNhZmVVcGRhdGUgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge2N1cnJlbnQ6IHZlcnNpb24sIHNhZmVVcGRhdGUsIHVuc2FmZVVwZGF0ZX07XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsbHkgdXBkYXRlIGFuIGV4dGVuc2lvbiBpbnN0YWxsZWQgYnkgTlBNLCB1c2luZyB0aGUgTlBNIGNsaS4gQW5kIHVwZGF0ZSB0aGUgaW5zdGFsbGF0aW9uXG4gICAqIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5zdGFsbFNwZWMgLSBuYW1lIG9mIGV4dGVuc2lvbiB0byB1cGRhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSB2ZXJzaW9uIHN0cmluZyBpZGVudGlmaWVyIHRvIHVwZGF0ZSBleHRlbnNpb24gdG9cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB1cGRhdGVFeHRlbnNpb24oaW5zdGFsbFNwZWMsIHZlcnNpb24pIHtcbiAgICBjb25zdCB7cGtnTmFtZX0gPSB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW2luc3RhbGxTcGVjXTtcbiAgICBjb25zdCBleHREYXRhID0gYXdhaXQgdGhpcy5pbnN0YWxsVmlhTnBtKHtcbiAgICAgIGluc3RhbGxTcGVjLFxuICAgICAgcGtnTmFtZSxcbiAgICAgIHBrZ1ZlcjogdmVyc2lvbixcbiAgICB9KTtcbiAgICBkZWxldGUgZXh0RGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke3RoaXMudHlwZX1OYW1lYCldO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnVwZGF0ZUV4dGVuc2lvbihpbnN0YWxsU3BlYywgZXh0RGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIHNjcmlwdCBjYWNoZWQgaW5zaWRlIHRoZSBcInNjcmlwdHNcIiBmaWVsZCB1bmRlciBcImFwcGl1bVwiXG4gICAqIGluc2lkZSBvZiB0aGUgZHJpdmVyL3BsdWdpbnMgXCJwYWNrYWdlLmpzb25cIiBmaWxlLiBXaWxsIHRocm93XG4gICAqIGFuIGVycm9yIGlmIHRoZSBkcml2ZXIvcGx1Z2luIGRvZXMgbm90IGNvbnRhaW4gYSBcInNjcmlwdHNcIiBmaWVsZFxuICAgKiB1bmRlcm5lYXRoIHRoZSBcImFwcGl1bVwiIGZpZWxkIGluIGl0cyBwYWNrYWdlLmpzb24sIGlmIHRoZVxuICAgKiBcInNjcmlwdHNcIiBmaWVsZCBpcyBub3QgYSBwbGFpbiBvYmplY3QsIG9yIGlmIHRoZSBzY3JpcHROYW1lIGlzXG4gICAqIG5vdCBmb3VuZCB3aXRoaW4gXCJzY3JpcHRzXCIgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1J1bk9wdGlvbnN9IG9wdHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSdW5PdXRwdXQ+fVxuICAgKi9cbiAgYXN5bmMgX3J1bih7aW5zdGFsbFNwZWMsIHNjcmlwdE5hbWUsIGV4dHJhQXJncyA9IFtdfSkge1xuICAgIGlmICghdGhpcy5jb25maWcuaXNJbnN0YWxsZWQoaW5zdGFsbFNwZWMpKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKGBUaGUgJHt0aGlzLnR5cGV9IFwiJHtpbnN0YWxsU3BlY31cIiBpcyBub3QgaW5zdGFsbGVkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0Q29uZmlnID0gdGhpcy5jb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9uc1tpbnN0YWxsU3BlY107XG5cbiAgICAvLyBub3RlOiBUUyBjYW5ub3QgdW5kZXJzdGFuZCB0aGF0IF8uaGFzKCkgaXMgYSB0eXBlIGd1YXJkXG4gICAgaWYgKCFleHRDb25maWcuc2NyaXB0cykge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYFRoZSAke3RoaXMudHlwZX0gbmFtZWQgJyR7aW5zdGFsbFNwZWN9JyBkb2VzIG5vdCBjb250YWluIHRoZSBgICtcbiAgICAgICAgICBgXCJzY3JpcHRzXCIgZmllbGQgdW5kZXJuZWF0aCB0aGUgXCJhcHBpdW1cIiBmaWVsZCBpbiBpdHMgcGFja2FnZS5qc29uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRTY3JpcHRzID0gZXh0Q29uZmlnLnNjcmlwdHM7XG5cbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChleHRTY3JpcHRzKSkge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYFRoZSAke3RoaXMudHlwZX0gbmFtZWQgJyR7aW5zdGFsbFNwZWN9JyBcInNjcmlwdHNcIiBmaWVsZCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaGFzKGV4dFNjcmlwdHMsIHNjcmlwdE5hbWUpKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKFxuICAgICAgICBgVGhlICR7dGhpcy50eXBlfSBuYW1lZCAnJHtpbnN0YWxsU3BlY30nIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNjcmlwdDogJyR7c2NyaXB0TmFtZX0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5uZXIgPSBuZXcgU3ViUHJvY2Vzcyhwcm9jZXNzLmV4ZWNQYXRoLCBbZXh0U2NyaXB0c1tzY3JpcHROYW1lXSwgLi4uZXh0cmFBcmdzXSwge1xuICAgICAgY3dkOiB0aGlzLmNvbmZpZy5nZXRJbnN0YWxsUGF0aChpbnN0YWxsU3BlYyksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgUmluZ0J1ZmZlcig1MCk7XG5cbiAgICBydW5uZXIub24oJ3N0cmVhbS1saW5lJywgKGxpbmUpID0+IHtcbiAgICAgIG91dHB1dC5lbnF1ZXVlKGxpbmUpO1xuICAgICAgdGhpcy5sb2cubG9nKGxpbmUpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgcnVubmVyLnN0YXJ0KDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bm5lci5qb2luKCk7XG4gICAgICB0aGlzLmxvZy5vayhgJHtzY3JpcHROYW1lfSBzdWNjZXNzZnVsbHkgcmFuYC5ncmVlbik7XG4gICAgICByZXR1cm4ge291dHB1dDogb3V0cHV0LmdldEJ1ZmYoKX07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgRW5jb3VudGVyZWQgYW4gZXJyb3Igd2hlbiBydW5uaW5nICcke3NjcmlwdE5hbWV9JzogJHtlcnIubWVzc2FnZX1gLnJlZCk7XG4gICAgICByZXR1cm4ge2Vycm9yOiBlcnIubWVzc2FnZSwgb3V0cHV0OiBvdXRwdXQuZ2V0QnVmZigpfTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5zaW9uQ29tbWFuZDtcbmV4cG9ydCB7RXh0ZW5zaW9uQ29tbWFuZH07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZH0gY29uc3RydWN0b3JcbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYgRXh0ZW5zaW9uQ29tbWFuZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7RXh0ZW5zaW9uQ29uZmlnPEV4dFR5cGU+fSBjb25maWcgLSB0aGUgYERyaXZlckNvbmZpZ2Agb3IgYFBsdWdpbkNvbmZpZ2AgaW5zdGFuY2UgdXNlZCBmb3IgdGhpcyBjb21tYW5kXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kIHNob3VsZCBiZSBKU09OIG9yIHRleHRcbiAqL1xuXG4vKipcbiAqIEV4dHJhIHN0dWZmIGFib3V0IGV4dGVuc2lvbnM7IHVzZWQgaW5kaXJlY3RseSBieSB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQubGlzdH0uXG4gKlxuICogQHR5cGVkZWYgRXh0ZW5zaW9uTWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW5zdGFsbGVkIC0gSWYgYHRydWVgLCB0aGUgZXh0ZW5zaW9uIGlzIGluc3RhbGxlZFxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB1cGRhdGVWZXJzaW9uIC0gSWYgdGhlIGV4dGVuc2lvbiBpcyBpbnN0YWxsZWQsIHRoZSB2ZXJzaW9uIGl0IGNhbiBiZSB1cGRhdGVkIHRvXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHVuc2FmZVVwZGF0ZVZlcnNpb24gLSBTYW1lIGFzIGFib3ZlLCBidXQgYSBtYWpvciB2ZXJzaW9uIGJ1bXBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXBUb0RhdGUgLSBJZiB0aGUgZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCBhbmQgdGhlIGxhdGVzdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRSZWNvcmQ8RXh0VHlwZT59IEV4dFJlY29yZFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkNvbmZpZzxFeHRUeXBlPn0gRXh0ZW5zaW9uQ29uZmlnXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPEV4dFR5cGU+fSBFeHRNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRNYW5pZmVzdDxFeHRUeXBlPn0gRXh0TWFuaWZlc3RcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0UGFja2FnZUpzb248RXh0VHlwZT59IEV4dFBhY2thZ2VKc29uXG4gKi9cblxuLyoqXG4gKiBQb3NzaWJsZSByZXR1cm4gdmFsdWUgZm9yIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5saXN0fVxuICogQHR5cGVkZWYgVW5pbnN0YWxsZWRFeHRlbnNpb25MaXN0RGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBrZ05hbWVcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGluc3RhbGxlZFxuICovXG5cbi8qKlxuICogUG9zc2libGUgcmV0dXJuIHZhbHVlIGZvciB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQubGlzdH1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkludGVybmFsTWV0YWRhdGEgJiBFeHRlbnNpb25NZXRhZGF0YX0gSW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGFcbiAqL1xuXG4vKipcbiAqIFJldHVybiB2YWx1ZSBvZiB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQubGlzdH0uXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxJbnN0YWxsZWRFeHRlbnNpb25MaXN0RGF0YXxVbmluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhPn0gRXh0ZW5zaW9uTGlzdERhdGFcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5fcnVufS5cbiAqIEB0eXBlZGVmIFJ1bk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0byBydW4gYSBzY3JpcHQgZnJvbVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjcmlwdE5hbWUgLSBuYW1lIG9mIHRoZSBzY3JpcHQgdG8gcnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZXh0cmFBcmdzXSAtIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBzY3JpcHRcbiAqL1xuXG4vKipcbiAqIFJldHVybiB2YWx1ZSBvZiB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX3J1bn1cbiAqXG4gKiBAdHlwZWRlZiBSdW5PdXRwdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXJyb3JdIC0gZXJyb3IgbWVzc2FnZSBpZiBzY3JpcHQgcmFuIHVuc3VjY2Vzc2Z1bGx5LCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBvdXRwdXQgLSBzY3JpcHQgb3V0cHV0XG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX3VwZGF0ZX0uXG4gKiBAdHlwZWRlZiBFeHRlbnNpb25VcGRhdGVPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5zdGFsbFNwZWMgLSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRvIHVwZGF0ZVxuICogQHByb3BlcnR5IHtib29sZWFufSB1bnNhZmUgLSBpZiB0cnVlLCB3aWxsIHBlcmZvcm0gdW5zYWZlIHVwZGF0ZXMgcGFzdCBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdmFsdWUgb2Yge0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLl91cGRhdGV9LlxuICogQHR5cGVkZWYgRXh0ZW5zaW9uVXBkYXRlUmVzdWx0XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsRXJyb3I+fSBlcnJvcnMgLSBtYXAgb2YgZXh0IG5hbWVzIHRvIGVycm9yIG9iamVjdHNcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZyxVcGRhdGVSZXBvcnQ+fSB1cGRhdGVzIC0gbWFwIG9mIGV4dCBuYW1lcyB0byB7QGxpbmtjb2RlIFVwZGF0ZVJlcG9ydH1zXG4gKi9cblxuLyoqXG4gKiBQYXJ0IG9mIHJlc3VsdCBvZiB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX3VwZGF0ZX0uXG4gKiBAdHlwZWRlZiBVcGRhdGVSZXBvcnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmcm9tIC0gdmVyc2lvbiB0aGUgZXh0ZW5zaW9uIHdhcyB1cGRhdGVkIGZyb21cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0byAtIHZlcnNpb24gdGhlIGV4dGVuc2lvbiB3YXMgdXBkYXRlZCB0b1xuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLl91bmluc3RhbGx9LlxuICogQHR5cGVkZWYgVW5pbnN0YWxsT3B0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbGxTcGVjIC0gdGhlIG5hbWUgb3Igc3BlYyBvZiBhbiBleHRlbnNpb24gdG8gdW5pbnN0YWxsXG4gKi9cblxuLyoqXG4gKiBVc2VkIGJ5IHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5nZXRQb3N0SW5zdGFsbFRleHR9XG4gKiBAdHlwZWRlZiBFeHRlbnNpb25BcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0TmFtZSAtIHRoZSBuYW1lIG9mIGFuIGV4dGVuc2lvblxuICogQHByb3BlcnR5IHtvYmplY3R9IGV4dERhdGEgLSB0aGUgZGF0YSBmb3IgYW4gaW5zdGFsbGVkIGV4dGVuc2lvblxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLmluc3RhbGxWaWFOcG19XG4gKiBAdHlwZWRlZiBJbnN0YWxsVmlhTnBtQXJnc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbGxTcGVjIC0gdGhlIG5hbWUgb3Igc3BlYyBvZiBhbiBleHRlbnNpb24gdG8gaW5zdGFsbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBrZ05hbWUgLSB0aGUgTlBNIHBhY2thZ2UgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BrZ1Zlcl0gLSB0aGUgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgTlBNIHBhY2thZ2VcbiAqL1xuXG4vKipcbiAqIE9iamVjdCByZXR1cm5lZCBieSB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuY2hlY2tGb3JFeHRlbnNpb25VcGRhdGV9XG4gKiBAdHlwZWRlZiBQb3NzaWJsZVVwZGF0ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjdXJyZW50IC0gY3VycmVudCB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHNhZmVVcGRhdGUgLSB2ZXJzaW9uIHdlIGNhbiBzYWZlbHkgdXBkYXRlIHRvIGlmIGl0IGV4aXN0cywgb3IgbnVsbFxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB1bnNhZmVVcGRhdGUgLSB2ZXJzaW9uIHdlIGNhbiB1bnNhZmVseSB1cGRhdGUgdG8gaWYgaXQgZXhpc3RzLCBvciBudWxsXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX2luc3RhbGx9XG4gKiBAdHlwZWRlZiBJbnN0YWxsQXJnc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbGxTcGVjIC0gdGhlIG5hbWUgb3Igc3BlYyBvZiBhbiBleHRlbnNpb24gdG8gaW5zdGFsbFxuICogQHByb3BlcnR5IHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkluc3RhbGxUeXBlfSBpbnN0YWxsVHlwZSAtIGhvdyB0byBpbnN0YWxsIHRoaXMgZXh0ZW5zaW9uLiBPbmUgb2YgdGhlIElOU1RBTExfVFlQRVNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFja2FnZU5hbWVdIC0gZm9yIGdpdC9naXRodWIgaW5zdGFsbHMsIHRoZSBleHRlbnNpb24gbm9kZSBwYWNrYWdlIG5hbWVcbiAqL1xuXG4vKipcbiAqIFJldHVybmVkIGJ5IHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5nZXRFeHRlbnNpb25GaWVsZHN9XG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtFeHRNZXRhZGF0YTxFeHRUeXBlPiAmIHsgcGtnTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIGFwcGl1bVZlcnNpb246IHN0cmluZyB9ICYgaW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5Db21tb25FeHRNZXRhZGF0YX0gRXh0ZW5zaW9uRmllbGRzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtFeHRUeXBlIGV4dGVuZHMgRHJpdmVyVHlwZSA/IHR5cGVvZiBpbXBvcnQoJy4uL2NvbnN0YW50cycpLktOT1dOX0RSSVZFUlMgOiBFeHRUeXBlIGV4dGVuZHMgUGx1Z2luVHlwZSA/IHR5cGVvZiBpbXBvcnQoJy4uL2NvbnN0YW50cycpLktOT1dOX1BMVUdJTlMgOiBuZXZlcn0gS25vd25FeHRlbnNpb25zXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBzaG93SW5zdGFsbGVkIC0gd2hldGhlciBzaG91bGQgc2hvdyBvbmx5IGluc3RhbGxlZCBleHRlbnNpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNob3dVcGRhdGVzIC0gd2hldGhlciBzaG91bGQgc2hvdyBhdmFpbGFibGUgdXBkYXRlc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFdBQW5COztBQUVBLE1BQU1DLGlCQUFOLFNBQWdDQyxLQUFoQyxDQUFz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
535
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVUERBVEVfQUxMIiwiTm90VXBkYXRhYmxlRXJyb3IiLCJFcnJvciIsIk5vVXBkYXRlc0F2YWlsYWJsZUVycm9yIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbmZpZyIsImtub3duRXh0ZW5zaW9ucyIsImlzSnNvbk91dHB1dCIsImNvbnN0cnVjdG9yIiwianNvbiIsImxvZyIsImNvbnNvbGUiLCJDbGlDb25zb2xlIiwianNvbk1vZGUiLCJCb29sZWFuIiwidHlwZSIsImV4dGVuc2lvblR5cGUiLCJfY3JlYXRlRmF0YWxFcnJvciIsIm1lc3NhZ2UiLCJkZWNvcmF0ZSIsImV4ZWN1dGUiLCJhcmdzIiwiY21kIiwiXyIsImlzRnVuY3Rpb24iLCJleGVjdXRlQ21kIiwiYmluZCIsImxpc3QiLCJzaG93SW5zdGFsbGVkIiwic2hvd1VwZGF0ZXMiLCJsc01zZyIsImluc3RhbGxlZE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJrbm93bk5hbWVzIiwiZXh0cyIsInJlZHVjZSIsImFjYyIsIm5hbWUiLCJpbmNsdWRlcyIsImluc3RhbGxlZCIsInBrZ05hbWUiLCJzcGluV2l0aCIsImV4dCIsImRhdGEiLCJ0b1BhaXJzIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwidXBkYXRlcyIsImNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlIiwidXBkYXRlVmVyc2lvbiIsInNhZmVVcGRhdGUiLCJ1bnNhZmVVcGRhdGVWZXJzaW9uIiwidW5zYWZlVXBkYXRlIiwidXBUb0RhdGUiLCJsaXN0RGF0YSIsImluc3RhbGxUeHQiLCJncmV5IiwidXBkYXRlVHh0IiwidXBUb0RhdGVUeHQiLCJ1bnNhZmVVcGRhdGVUeHQiLCJpbnN0YWxsU3BlYyIsInZlcnNpb24iLCJ0eXBlVHh0IiwiSU5TVEFMTF9UWVBFX0dJVCIsIklOU1RBTExfVFlQRV9HSVRIVUIiLCJ5ZWxsb3ciLCJJTlNUQUxMX1RZUEVfTE9DQUwiLCJtYWdlbnRhIiwiZ3JlZW4iLCJjeWFuIiwiX2luc3RhbGwiLCJwYWNrYWdlTmFtZSIsImV4dERhdGEiLCJpbnN0YWxsT3B0cyIsInByb2JhYmxlRXh0TmFtZSIsInNwbGl0IiwibGVuZ3RoIiwicmVwbGFjZSIsInBrZ1ZlciIsInBhdGgiLCJpc0Fic29sdXRlIiwicmVzb2x2ZSIsInNwbGl0cyIsIm1zZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc0luc3RhbGxlZCIsImluc3RhbGxWaWFOcG0iLCJleHROYW1lIiwiZXh0TWFuaWZlc3QiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsIkIiLCJhbGwiLCJnZXRQcm9ibGVtcyIsImdldFdhcm5pbmdzIiwiZXJyb3JNYXAiLCJNYXAiLCJ3YXJuaW5nTWFwIiwiZXJyb3JTdW1tYXJpZXMiLCJ3YXJuaW5nU3VtbWFyaWVzIiwiZ2V0VmFsaWRhdGlvblJlc3VsdFN1bW1hcmllcyIsImlzRW1wdHkiLCJqb2luIiwid2FybiIsImFkZEV4dGVuc2lvbiIsImVudiIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJhcHBpdW1Ib21lIiwicGFja2FnZURpZENoYW5nZSIsImluZm8iLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJucG1TcGVjIiwic3BlY01zZyIsInBrZ0pzb25EYXRhIiwibnBtIiwiaW5zdGFsbFBhY2thZ2UiLCJ2YWxpZGF0ZVBhY2thZ2VKc29uIiwiZ2V0RXh0ZW5zaW9uRmllbGRzIiwiZXJyIiwicGtnSnNvbiIsImFwcGl1bSIsInBlZXJEZXBlbmRlbmNpZXMiLCJyZXN1bHQiLCJhcHBpdW1WZXJzaW9uIiwiY3JlYXRlTWlzc2luZ0ZpZWxkRXJyb3IiLCJmaWVsZCIsIlJlZmVyZW5jZUVycm9yIiwidmFsaWRhdGVFeHRlbnNpb25GaWVsZHMiLCJleHRNZXRhZGF0YSIsIl91bmluc3RhbGwiLCJ1bmluc3RhbGxQYWNrYWdlIiwicmVtb3ZlRXh0ZW5zaW9uIiwib2siLCJfdXBkYXRlIiwidW5zYWZlIiwic2hvdWxkVXBkYXRlQWxsIiwiZXh0c1RvVXBkYXRlIiwiZSIsInVwZGF0ZSIsImN1cnJlbnQiLCJ1cGRhdGVWZXIiLCJ1cGRhdGVFeHRlbnNpb24iLCJmcm9tIiwidG8iLCJlcnJvciIsInJlZCIsImdldExhdGVzdFZlcnNpb24iLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwiX3J1biIsInNjcmlwdE5hbWUiLCJleHRyYUFyZ3MiLCJleHRDb25maWciLCJzY3JpcHRzIiwiZXh0U2NyaXB0cyIsImlzUGxhaW5PYmplY3QiLCJoYXMiLCJydW5uZXIiLCJTdWJQcm9jZXNzIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZ2V0SW5zdGFsbFBhdGgiLCJvdXRwdXQiLCJSaW5nQnVmZmVyIiwib24iLCJsaW5lIiwiZW5xdWV1ZSIsInN0YXJ0IiwiZ2V0QnVmZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvZXh0ZW5zaW9uLWNvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtucG0sIHV0aWwsIGVudiwgY29uc29sZX0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7c3BpbldpdGgsIFJpbmdCdWZmZXJ9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtTdWJQcm9jZXNzfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgSU5TVEFMTF9UWVBFX05QTSxcbiAgSU5TVEFMTF9UWVBFX0dJVCxcbiAgSU5TVEFMTF9UWVBFX0dJVEhVQixcbiAgSU5TVEFMTF9UWVBFX0xPQ0FMLFxufSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3BhY2thZ2VEaWRDaGFuZ2V9IGZyb20gJy4uL2V4dGVuc2lvbi9wYWNrYWdlLWNoYW5nZWQnO1xuXG5jb25zdCBVUERBVEVfQUxMID0gJ2luc3RhbGxlZCc7XG5cbmNsYXNzIE5vdFVwZGF0YWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIE5vVXBkYXRlc0F2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqL1xuY2xhc3MgRXh0ZW5zaW9uQ29tbWFuZCB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBgRHJpdmVyQ29uZmlnYCBvciBgUGx1Z2luQ29uZmlnYCwgZGVwZW5kaW5nIG9uIGBFeHRUeXBlYC5cbiAgICogQHR5cGUge0V4dGVuc2lvbkNvbmZpZzxFeHRUeXBlPn1cbiAgICovXG4gIGNvbmZpZztcblxuICAvKipcbiAgICoge0BsaW5rY29kZSBSZWNvcmR9IG9mIG9mZmljaWFsIHBsdWdpbnMgb3IgZHJpdmVycy5cbiAgICogQHR5cGUge0tub3duRXh0ZW5zaW9uczxFeHRUeXBlPn1cbiAgICovXG4gIGtub3duRXh0ZW5zaW9ucztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21tYW5kIG91dHB1dCBoYXMgYmVlbiByZXF1ZXN0ZWQgYXMgSlNPTi5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBpc0pzb25PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEV4dGVuc2lvbkNvbW1hbmRcbiAgICogQHBhcmFtIHtFeHRlbnNpb25Db21tYW5kT3B0aW9uczxFeHRUeXBlPn0gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZywganNvbn0pIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmxvZyA9IG5ldyBjb25zb2xlLkNsaUNvbnNvbGUoe2pzb25Nb2RlOiBqc29ufSk7XG4gICAgdGhpcy5pc0pzb25PdXRwdXQgPSBCb29sZWFuKGpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBkcml2ZXJgIG9yIGBwbHVnaW5gLCBkZXBlbmRpbmcgb24gdGhlIGBFeHRlbnNpb25Db25maWdgLlxuICAgKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4dGVuc2lvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIG1lc3NhZ2UgYW5kIHJldHVybnMgYW4ge0BsaW5rY29kZSBFcnJvcn0gdG8gdGhyb3cuXG4gICAqXG4gICAqIEZvciBUUyB0byB1bmRlcnN0YW5kIHRoYXQgYSBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLCBpdCBtdXN0IGFjdHVhbGx5IHRocm93IGFuIGV4Y2VwdGlvbi0tXG4gICAqIGluIG90aGVyIHdvcmRzLCBfY2FsbGluZ18gYSBmdW5jdGlvbiB3aGljaCBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpcyBub3QgZW5vdWdoLS1cbiAgICogbm9yIGlzIHNvbWV0aGluZyBsaWtlIGBAcmV0dXJucyB7bmV2ZXJ9YCB3aGljaCBkb2VzIG5vdCBpbXBseSBhIHRocm93biBleGNlcHRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJldHVybnMge0Vycm9yfVxuICAgKi9cbiAgX2NyZWF0ZUZhdGFsRXJyb3IobWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IodGhpcy5sb2cuZGVjb3JhdGUobWVzc2FnZSwgJ2Vycm9yJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgYSBDTEkgcGFyc2UgYW5kIHJ1biBhbiBleHRlbnNpb24gY29tbWFuZCBiYXNlZCBvbiBpdHMgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIGEga2V5L3ZhbHVlIG9iamVjdCB3aXRoIENMSSBmbGFncyBhbmQgdmFsdWVzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8b2JqZWN0Pn0gdGhlIHJlc3VsdCBvZiB0aGUgc3BlY2lmaWMgY29tbWFuZCB3aGljaCBpcyBleGVjdXRlZFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShhcmdzKSB7XG4gICAgY29uc3QgY21kID0gYXJnc1tgJHt0aGlzLnR5cGV9Q29tbWFuZGBdO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKHRoaXNbY21kXSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYENhbm5vdCBoYW5kbGUgJHt0aGlzLnR5cGV9IGNvbW1hbmQgJHtjbWR9YCk7XG4gICAgfVxuICAgIGNvbnN0IGV4ZWN1dGVDbWQgPSB0aGlzW2NtZF0uYmluZCh0aGlzKTtcbiAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZUNtZChhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGV4dGVuc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIHtMaXN0T3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dGVuc2lvbkxpc3REYXRhPn0gbWFwIG9mIGV4dGVuc2lvbiBuYW1lcyB0byBleHRlbnNpb24gZGF0YVxuICAgKi9cbiAgYXN5bmMgbGlzdCh7c2hvd0luc3RhbGxlZCwgc2hvd1VwZGF0ZXN9KSB7XG4gICAgY29uc3QgbHNNc2cgPSBgTGlzdGluZyAke3Nob3dJbnN0YWxsZWQgPyAnaW5zdGFsbGVkJyA6ICdhdmFpbGFibGUnfSAke3RoaXMudHlwZX1zYDtcbiAgICBjb25zdCBpbnN0YWxsZWROYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuICAgIGNvbnN0IGtub3duTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmtub3duRXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgZXh0cyA9IFsuLi5pbnN0YWxsZWROYW1lcywgLi4ua25vd25OYW1lc10ucmVkdWNlKFxuICAgICAgKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWFjY1tuYW1lXSkge1xuICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgYWNjW25hbWVdID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW25hbWVdLFxuICAgICAgICAgICAgICBpbnN0YWxsZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3dJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgIGFjY1tuYW1lXSA9IHtwa2dOYW1lOiB0aGlzLmtub3duRXh0ZW5zaW9uc1tuYW1lXSwgaW5zdGFsbGVkOiBmYWxzZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGVpdGhlciB7QGxpbmtjb2RlIFVuaW5zdGFsbGVkRXh0ZW5zaW9uTElzdERhdGF9IF9vcl9cbiAgICAgICAqIHtAbGlua2NvZGUgSW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGF9IHdpdGhvdXQgdXBncmFkZSBpbmZvcm1hdGlvbiAod2hpY2ggaXMgYWRkZWQgYnkgdGhlIGJlbG93IGNvZGUgYmxvY2spXG4gICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxQYXJ0aWFsPEluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhPnxVbmluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhPn1cbiAgICAgICAqLyAoe30pXG4gICAgKTtcblxuICAgIC8vIGlmIHdlIHdhbnQgdG8gc2hvdyB3aGV0aGVyIHVwZGF0ZXMgYXJlIGF2YWlsYWJsZSwgcHV0IHRoYXQgYmVoaW5kIGEgc3Bpbm5lclxuICAgIGF3YWl0IHNwaW5XaXRoKHRoaXMuaXNKc29uT3V0cHV0LCBsc01zZywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzaG93VXBkYXRlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtleHQsIGRhdGFdIG9mIF8udG9QYWlycyhleHRzKSkge1xuICAgICAgICBpZiAoIWRhdGEuaW5zdGFsbGVkIHx8IGRhdGEuaW5zdGFsbFR5cGUgIT09IElOU1RBTExfVFlQRV9OUE0pIHtcbiAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB1cGRhdGVzIG9uIGV4dHMgdGhhdCBhcmVuJ3QgaW5zdGFsbGVkXG4gICAgICAgICAgLy8gYWxzbyBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB1cGRhdGVzIG9uIG5vbi1ucG0gZXh0c1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZXMgPSBhd2FpdCB0aGlzLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKGV4dCk7XG4gICAgICAgIGRhdGEudXBkYXRlVmVyc2lvbiA9IHVwZGF0ZXMuc2FmZVVwZGF0ZTtcbiAgICAgICAgZGF0YS51bnNhZmVVcGRhdGVWZXJzaW9uID0gdXBkYXRlcy51bnNhZmVVcGRhdGU7XG4gICAgICAgIGRhdGEudXBUb0RhdGUgPSB1cGRhdGVzLnNhZmVVcGRhdGUgPT09IG51bGwgJiYgdXBkYXRlcy51bnNhZmVVcGRhdGUgPT09IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0RGF0YSA9IC8qKiBAdHlwZSB7RXh0ZW5zaW9uTGlzdERhdGF9ICovIChleHRzKTtcblxuICAgIC8vIGlmIHdlJ3JlIGp1c3QgZ2V0dGluZyB0aGUgZGF0YSwgc2hvcnQgY2lyY3VpdCByZXR1cm4gaGVyZSBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueVxuICAgIC8vIGZvcm1hdHRpbmcgbG9naWNcbiAgICBpZiAodGhpcy5pc0pzb25PdXRwdXQpIHtcbiAgICAgIHJldHVybiBsaXN0RGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBfLnRvUGFpcnMobGlzdERhdGEpKSB7XG4gICAgICBsZXQgaW5zdGFsbFR4dCA9ICcgW25vdCBpbnN0YWxsZWRdJy5ncmV5O1xuICAgICAgbGV0IHVwZGF0ZVR4dCA9ICcnO1xuICAgICAgbGV0IHVwVG9EYXRlVHh0ID0gJyc7XG4gICAgICBsZXQgdW5zYWZlVXBkYXRlVHh0ID0gJyc7XG4gICAgICBpZiAoZGF0YS5pbnN0YWxsZWQpIHtcbiAgICAgICAgY29uc3Qge2luc3RhbGxUeXBlLCBpbnN0YWxsU3BlYywgdXBkYXRlVmVyc2lvbiwgdW5zYWZlVXBkYXRlVmVyc2lvbiwgdmVyc2lvbiwgdXBUb0RhdGV9ID1cbiAgICAgICAgICBkYXRhO1xuICAgICAgICBsZXQgdHlwZVR4dDtcbiAgICAgICAgc3dpdGNoIChpbnN0YWxsVHlwZSkge1xuICAgICAgICAgIGNhc2UgSU5TVEFMTF9UWVBFX0dJVDpcbiAgICAgICAgICBjYXNlIElOU1RBTExfVFlQRV9HSVRIVUI6XG4gICAgICAgICAgICB0eXBlVHh0ID0gYChjbG9uZWQgZnJvbSAke2luc3RhbGxTcGVjfSlgLnllbGxvdztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSU5TVEFMTF9UWVBFX0xPQ0FMOlxuICAgICAgICAgICAgdHlwZVR4dCA9IGAobGlua2VkIGZyb20gJHtpbnN0YWxsU3BlY30pYC5tYWdlbnRhO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHR5cGVUeHQgPSAnKE5QTSknO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbGxUeHQgPSBgQCR7dmVyc2lvbi55ZWxsb3d9ICR7KCdbaW5zdGFsbGVkICcgKyB0eXBlVHh0ICsgJ10nKS5ncmVlbn1gO1xuXG4gICAgICAgIGlmIChzaG93VXBkYXRlcykge1xuICAgICAgICAgIGlmICh1cGRhdGVWZXJzaW9uKSB7XG4gICAgICAgICAgICB1cGRhdGVUeHQgPSBgIFske3VwZGF0ZVZlcnNpb259IGF2YWlsYWJsZV1gLm1hZ2VudGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1cFRvRGF0ZSkge1xuICAgICAgICAgICAgdXBUb0RhdGVUeHQgPSBgIFtVcCB0byBkYXRlXWAuZ3JlZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bnNhZmVVcGRhdGVWZXJzaW9uKSB7XG4gICAgICAgICAgICB1bnNhZmVVcGRhdGVUeHQgPSBgIFske3Vuc2FmZVVwZGF0ZVZlcnNpb259IGF2YWlsYWJsZSAocG90ZW50aWFsbHkgdW5zYWZlKV1gLmN5YW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmxvZyhgLSAke25hbWUueWVsbG93fSR7aW5zdGFsbFR4dH0ke3VwZGF0ZVR4dH0ke3VwVG9EYXRlVHh0fSR7dW5zYWZlVXBkYXRlVHh0fWApO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxsIGFuIGV4dGVuc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge0luc3RhbGxBcmdzfSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8RXh0UmVjb3JkPEV4dFR5cGU+Pn0gbWFwIG9mIGFsbCBpbnN0YWxsZWQgZXh0ZW5zaW9uIG5hbWVzIHRvIGV4dGVuc2lvbiBkYXRhXG4gICAqL1xuICBhc3luYyBfaW5zdGFsbCh7aW5zdGFsbFNwZWMsIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pIHtcbiAgICAvKiogQHR5cGUge0V4dGVuc2lvbkZpZWxkczxFeHRUeXBlPn0gKi9cbiAgICBsZXQgZXh0RGF0YTtcblxuICAgIGlmIChwYWNrYWdlTmFtZSAmJiBbSU5TVEFMTF9UWVBFX0xPQ0FMLCBJTlNUQUxMX1RZUEVfTlBNXS5pbmNsdWRlcyhpbnN0YWxsVHlwZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYFdoZW4gdXNpbmcgLS1zb3VyY2U9JHtpbnN0YWxsVHlwZX0sIGNhbm5vdCBhbHNvIHVzZSAtLXBhY2thZ2VgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VOYW1lICYmIFtJTlNUQUxMX1RZUEVfR0lULCBJTlNUQUxMX1RZUEVfR0lUSFVCXS5pbmNsdWRlcyhpbnN0YWxsVHlwZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYFdoZW4gdXNpbmcgLS1zb3VyY2U9JHtpbnN0YWxsVHlwZX0sIG11c3QgYWxzbyB1c2UgLS1wYWNrYWdlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0luc3RhbGxWaWFOcG1BcmdzfVxuICAgICAqL1xuICAgIGxldCBpbnN0YWxsT3B0cztcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9iYWJsZSAoPykgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFsbCBzcGVjLlxuICAgICAqXG4gICAgICogSWYgdXNpbmcgYSBsb2NhbCBpbnN0YWxsIHR5cGUsIHRoaXMgd2lsbCByZW1haW4gZW1wdHkuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsZXQgcHJvYmFibGVFeHROYW1lID0gJyc7XG5cbiAgICAvLyBkZXBlbmRpbmcgb24gYGluc3RhbGxUeXBlYCwgYnVpbGQgdGhlIG9wdGlvbnMgdG8gcGFzcyBpbnRvIGBpbnN0YWxsVmlhTnBtYFxuICAgIGlmIChpbnN0YWxsVHlwZSA9PT0gSU5TVEFMTF9UWVBFX0dJVEhVQikge1xuICAgICAgaWYgKGluc3RhbGxTcGVjLnNwbGl0KCcvJykubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgICAgYEdpdGh1YiAke3RoaXMudHlwZX0gc3BlYyAke2luc3RhbGxTcGVjfSBhcHBlYXJlZCB0byBiZSBpbnZhbGlkOyBgICtcbiAgICAgICAgICAgICdpdCBzaG91bGQgYmUgb2YgdGhlIGZvcm0gPG9yZz4vPHJlcG8+J1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaW5zdGFsbE9wdHMgPSB7XG4gICAgICAgIGluc3RhbGxTcGVjLFxuICAgICAgICBwa2dOYW1lOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhY2thZ2VOYW1lKSxcbiAgICAgIH07XG4gICAgICBwcm9iYWJsZUV4dE5hbWUgPSBpbnN0YWxsU3BlYztcbiAgICB9IGVsc2UgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfR0lUKSB7XG4gICAgICAvLyBnaXQgdXJscyBjYW4gaGF2ZSAnLmdpdCcgYXQgdGhlIGVuZCwgYnV0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhbmQgd291bGQgY29tcGxpY2F0ZSB0aGVcbiAgICAgIC8vIHdheSB3ZSBkb3dubG9hZCBhbmQgbmFtZSBkaXJlY3Rvcmllcywgc28gd2UgY2FuIGp1c3QgcmVtb3ZlIGl0XG4gICAgICBpbnN0YWxsU3BlYyA9IGluc3RhbGxTcGVjLnJlcGxhY2UoL1xcLmdpdCQvLCAnJyk7XG4gICAgICBpbnN0YWxsT3B0cyA9IHtcbiAgICAgICAgaW5zdGFsbFNwZWMsXG4gICAgICAgIHBrZ05hbWU6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGFja2FnZU5hbWUpLFxuICAgICAgfTtcbiAgICAgIHByb2JhYmxlRXh0TmFtZSA9IGluc3RhbGxTcGVjO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcGtnTmFtZSwgcGtnVmVyO1xuICAgICAgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfTE9DQUwpIHtcbiAgICAgICAgcGtnTmFtZSA9IHBhdGguaXNBYnNvbHV0ZShpbnN0YWxsU3BlYykgPyBpbnN0YWxsU3BlYyA6IHBhdGgucmVzb2x2ZShpbnN0YWxsU3BlYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGhhdmUgZWl0aGVyIGFuIG5wbSBwYWNrYWdlIG9yIGFuIGFwcGl1bSB2ZXJpZmllZCBleHRlbnNpb25cbiAgICAgICAgLy8gbmFtZSBvciBhIGxvY2FsIHBhdGguIGJvdGggb2Ygd2hpY2ggd2lsbCBiZSBpbnN0YWxsZWQgdmlhIG5wbS5cbiAgICAgICAgLy8gZXh0ZW5zaW9ucyBpbnN0YWxsZWQgdmlhIG5wbSBjYW4gaW5jbHVkZSB2ZXJzaW9ucyBvciB0YWdzIGFmdGVyIHRoZSAnQCdcbiAgICAgICAgLy8gc2lnbiwgc28gY2hlY2sgZm9yIHRoYXQuIFdlIGFsc28gbmVlZCB0byBiZSBjYXJlZnVsIHRoYXQgcGFja2FnZSBuYW1lcyB0aGVtc2VsdmVzIGNhblxuICAgICAgICAvLyBjb250YWluIHRoZSAnQCcgc3ltYm9sLCBhcyBpbiBgbnBtIGluc3RhbGwgQGFwcGl1bS9mYWtlLWRyaXZlckAxLjIuMGBcbiAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgIGNvbnN0IHNwbGl0cyA9IGluc3RhbGxTcGVjLnNwbGl0KCdAJyk7XG4gICAgICAgIGlmIChpbnN0YWxsU3BlY1swXSA9PT0gJ0AnKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIG5wbSBvcmcgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2UgbmFtZVxuICAgICAgICAgIFtuYW1lLCBwa2dWZXJdID0gW2BAJHtzcGxpdHNbMV19YCwgc3BsaXRzWzJdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBjYXNlIHdpdGhvdXQgYW4gbnBtIG9yZ1xuICAgICAgICAgIFtuYW1lLCBwa2dWZXJdID0gc3BsaXRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbGxUeXBlID09PSBJTlNUQUxMX1RZUEVfTlBNKSB7XG4gICAgICAgICAgLy8gaWYgd2UncmUgaW5zdGFsbGluZyBhIG5hbWVkIHBhY2thZ2UgZnJvbSBucG0sIHdlIGRvbid0IG5lZWQgdG8gY2hlY2tcbiAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSBhcHBpdW0gZXh0ZW5zaW9uIGxpc3Q7IGp1c3QgdXNlIHRoZSBpbnN0YWxsU3BlYyBhcyBpc1xuICAgICAgICAgIHBrZ05hbWUgPSBuYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIHdlJ3JlIGluc3RhbGxpbmcgYSBuYW1lZCBhcHBpdW0gZHJpdmVyIChsaWtlICd4Y3VpdGVzdCcpIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBkZXJlZmVyZW5jZSB0aGUgYWN0dWFsIG5wbSBwYWNrYWdlICgnYXBwaXVwbS14Y3VpdGVzdC1kcml2ZXInKSwgc29cbiAgICAgICAgICAvLyBjaGVjayBpdCBleGlzdHMgYW5kIGdldCB0aGUgY29ycmVjdCBwYWNrYWdlXG4gICAgICAgICAgY29uc3Qga25vd25OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMua25vd25FeHRlbnNpb25zKTtcbiAgICAgICAgICBpZiAoIV8uaW5jbHVkZXMoa25vd25OYW1lcywgbmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgcmVzb2x2ZSAke3RoaXMudHlwZX07IGFyZSB5b3Ugc3VyZSBpdCdzIGluIHRoZSBsaXN0IGAgK1xuICAgICAgICAgICAgICBgb2Ygc3VwcG9ydGVkICR7dGhpcy50eXBlfXM/ICR7SlNPTi5zdHJpbmdpZnkoa25vd25OYW1lcyl9YDtcbiAgICAgICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvYmFibGVFeHROYW1lID0gbmFtZTtcbiAgICAgICAgICBwa2dOYW1lID0gdGhpcy5rbm93bkV4dGVuc2lvbnNbbmFtZV07XG4gICAgICAgICAgLy8gZ2l2ZW4gdGhhdCB3ZSdsbCB1c2UgdGhlIGluc3RhbGwgdHlwZSBpbiB0aGUgZHJpdmVyIGpzb24sIHN0b3JlIGl0IGFzXG4gICAgICAgICAgLy8gJ25wbScgbm93XG4gICAgICAgICAgaW5zdGFsbFR5cGUgPSBJTlNUQUxMX1RZUEVfTlBNO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnN0YWxsT3B0cyA9IHtpbnN0YWxsU3BlYywgcGtnTmFtZSwgcGtnVmVyfTtcbiAgICB9XG5cbiAgICAvLyBmYWlsIGZhc3QgaGVyZSBpZiB3ZSBjYW5cbiAgICBpZiAocHJvYmFibGVFeHROYW1lICYmIHRoaXMuY29uZmlnLmlzSW5zdGFsbGVkKHByb2JhYmxlRXh0TmFtZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgIGBBICR7dGhpcy50eXBlfSBuYW1lZCBcIiR7cHJvYmFibGVFeHROYW1lfVwiIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBgICtcbiAgICAgICAgICBgRGlkIHlvdSBtZWFuIHRvIHVwZGF0ZT8gUnVuIFwiYXBwaXVtICR7dGhpcy50eXBlfSB1cGRhdGVcIi4gU2VlIGAgK1xuICAgICAgICAgIGBpbnN0YWxsZWQgJHt0aGlzLnR5cGV9cyB3aXRoIFwiYXBwaXVtICR7dGhpcy50eXBlfSBsaXN0IC0taW5zdGFsbGVkXCIuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBleHREYXRhID0gYXdhaXQgdGhpcy5pbnN0YWxsVmlhTnBtKGluc3RhbGxPcHRzKTtcblxuICAgIC8vIHRoaXMgX3Nob3VsZF8gYmUgdGhlIHNhbWUgYXMgYHByb2JhYmx5RXh0TmFtZWAgYXMgdGhlIG9uZSBkZXJpdmVkIGFib3ZlIHVubGVzc1xuICAgIC8vIGluc3RhbGwgdHlwZSBpcyBsb2NhbC5cbiAgICBjb25zdCBleHROYW1lID0gZXh0RGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke3RoaXMudHlwZX1OYW1lYCldO1xuXG4gICAgLy8gY2hlY2sgX2Egc2Vjb25kIHRpbWVfIHdpdGggdGhlIG1vcmUtYWNjdXJhdGUgZXh0TmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5pc0luc3RhbGxlZChleHROYW1lKSkge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYEEgJHt0aGlzLnR5cGV9IG5hbWVkIFwiJHtleHROYW1lfVwiIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBgICtcbiAgICAgICAgICBgRGlkIHlvdSBtZWFuIHRvIHVwZGF0ZT8gUnVuIFwiYXBwaXVtICR7dGhpcy50eXBlfSB1cGRhdGVcIi4gU2VlIGAgK1xuICAgICAgICAgIGBpbnN0YWxsZWQgJHt0aGlzLnR5cGV9cyB3aXRoIFwiYXBwaXVtICR7dGhpcy50eXBlfSBsaXN0IC0taW5zdGFsbGVkXCIuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZpZWxkIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIG1hbmlmZXN0IChpdCdzIHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lIGluc3RlYWQpXG4gICAgLy8gc28gdGhhdCdzIHdoeSBpdCdzIGJlaW5nIHJlbW92ZWQgaGVyZS5cbiAgICBkZWxldGUgZXh0RGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke3RoaXMudHlwZX1OYW1lYCldO1xuXG4gICAgLyoqIEB0eXBlIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gKi9cbiAgICBjb25zdCBleHRNYW5pZmVzdCA9IHsuLi5leHREYXRhLCBpbnN0YWxsVHlwZSwgaW5zdGFsbFNwZWN9O1xuICAgIGNvbnN0IFtlcnJvcnMsIHdhcm5pbmdzXSA9IGF3YWl0IEIuYWxsKFtcbiAgICAgIHRoaXMuY29uZmlnLmdldFByb2JsZW1zKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICAgIHRoaXMuY29uZmlnLmdldFdhcm5pbmdzKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICBdKTtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXAoW1tleHROYW1lLCBlcnJvcnNdXSk7XG4gICAgY29uc3Qgd2FybmluZ01hcCA9IG5ldyBNYXAoW1tleHROYW1lLCB3YXJuaW5nc11dKTtcbiAgICBjb25zdCB7ZXJyb3JTdW1tYXJpZXMsIHdhcm5pbmdTdW1tYXJpZXN9ID0gdGhpcy5jb25maWcuZ2V0VmFsaWRhdGlvblJlc3VsdFN1bW1hcmllcyhcbiAgICAgIGVycm9yTWFwLFxuICAgICAgd2FybmluZ01hcFxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShlcnJvclN1bW1hcmllcykpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoZXJyb3JTdW1tYXJpZXMuam9pbignXFxuJykpO1xuICAgIH1cblxuICAgIC8vIG5vdGUgdGhhdCB3ZSB3b24ndCBzaG93IGFueSB3YXJuaW5ncyBpZiB0aGVyZSB3ZXJlIGVycm9ycy5cbiAgICBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3VtbWFyaWVzKSkge1xuICAgICAgdGhpcy5sb2cud2Fybih3YXJuaW5nU3VtbWFyaWVzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5hZGRFeHRlbnNpb24oZXh0TmFtZSwgZXh0TWFuaWZlc3QpO1xuXG4gICAgLy8gdXBkYXRlIHRoZSBpZiB3ZSd2ZSBjaGFuZ2VkIHRoZSBsb2NhbCBgcGFja2FnZS5qc29uYFxuICAgIGlmIChhd2FpdCBlbnYuaGFzQXBwaXVtRGVwZW5kZW5jeSh0aGlzLmNvbmZpZy5hcHBpdW1Ib21lKSkge1xuICAgICAgYXdhaXQgcGFja2FnZURpZENoYW5nZSh0aGlzLmNvbmZpZy5hcHBpdW1Ib21lKTtcbiAgICB9XG5cbiAgICAvLyBsb2cgaW5mbyBmb3IgdGhlIHVzZXJcbiAgICB0aGlzLmxvZy5pbmZvKHRoaXMuZ2V0UG9zdEluc3RhbGxUZXh0KHtleHROYW1lLCBleHREYXRhfSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCBhbiBleHRlbnNpb24gdmlhIE5QTVxuICAgKlxuICAgKiBAcGFyYW0ge0luc3RhbGxWaWFOcG1BcmdzfSBhcmdzXG4gICAqL1xuICBhc3luYyBpbnN0YWxsVmlhTnBtKHtpbnN0YWxsU3BlYywgcGtnTmFtZSwgcGtnVmVyfSkge1xuICAgIGNvbnN0IG5wbVNwZWMgPSBgJHtwa2dOYW1lfSR7cGtnVmVyID8gJ0AnICsgcGtnVmVyIDogJyd9YDtcbiAgICBjb25zdCBzcGVjTXNnID0gbnBtU3BlYyA9PT0gaW5zdGFsbFNwZWMgPyAnJyA6IGAgdXNpbmcgTlBNIGluc3RhbGwgc3BlYyAnJHtucG1TcGVjfSdgO1xuICAgIGNvbnN0IG1zZyA9IGBJbnN0YWxsaW5nICcke2luc3RhbGxTcGVjfScke3NwZWNNc2d9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnSnNvbkRhdGEgPSBhd2FpdCBzcGluV2l0aCh0aGlzLmlzSnNvbk91dHB1dCwgbXNnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBrZ0pzb25EYXRhID0gYXdhaXQgbnBtLmluc3RhbGxQYWNrYWdlKHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsIHBrZ05hbWUsIHtcbiAgICAgICAgICBwa2dWZXIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZhbGlkYXRlUGFja2FnZUpzb24ocGtnSnNvbkRhdGEsIGluc3RhbGxTcGVjKTtcbiAgICAgICAgcmV0dXJuIHBrZ0pzb25EYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldEV4dGVuc2lvbkZpZWxkcyhwa2dKc29uRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKGBFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGVuIGluc3RhbGxpbmcgcGFja2FnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0ZXh0IHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYWZ0ZXIgYW4gZXh0ZW5zaW9uIGhhcyBiZWVuIGluc3RhbGxlZC4gVGhpc1xuICAgKiBpcyBkZXNpZ25lZCB0byBiZSBvdmVycmlkZGVuIGJ5IGRyaXZlcnMvcGx1Z2lucyB3aXRoIHRoZWlyIG93biBwYXJ0aWN1bGFyIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldFBvc3RJbnN0YWxsVGV4dChhcmdzKSB7XG4gICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcignTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBmaW5hbCBjbGFzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgYW4gTlBNIG1vZHVsZSdzIHBhY2thZ2UuanNvbiBhbmQgZXh0cmFjdCBBcHBpdW0gZHJpdmVyIGluZm9ybWF0aW9uIGZyb20gYSBzcGVjaWFsXG4gICAqICdhcHBpdW0nIGZpZWxkIGluIHRoZSBKU09OIGRhdGEuIFdlIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiB0byBlLmcuIGRldGVybWluZSB3aGljaCBjbGFzcyB0b1xuICAgKiBsb2FkIGFzIHRoZSBtYWluIGRyaXZlciBjbGFzcywgb3IgdG8gYmUgYWJsZSB0byBkZXRlY3QgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiBkcml2ZXIgYW5kXG4gICAqIGFwcGl1bSB2ZXJzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn0gcGtnSnNvbiAtIHRoZSBwYWNrYWdlLmpzb24gZGF0YSBmb3IgYSBkcml2ZXIgbW9kdWxlLCBhcyBpZiBpdCBoYWQgYmVlbiBzdHJhaWdodGZvcndhcmRseSAncmVxdWlyZSdkXG4gICAqIEByZXR1cm5zIHtFeHRlbnNpb25GaWVsZHM8RXh0VHlwZT59XG4gICAqL1xuICBnZXRFeHRlbnNpb25GaWVsZHMocGtnSnNvbikge1xuICAgIGNvbnN0IHthcHBpdW0sIG5hbWUsIHZlcnNpb24sIHBlZXJEZXBlbmRlbmNpZXN9ID0gcGtnSnNvbjtcblxuICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5hcHBpdW0sXG4gICAgICBwa2dOYW1lOiBuYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGFwcGl1bVZlcnNpb246IHBlZXJEZXBlbmRlbmNpZXM/LmFwcGl1bSxcbiAgICB9O1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4dGVuc2lvbkZpZWxkczxFeHRUeXBlPn0gKi8gKHJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBfcmVxdWlyZWRfIHJvb3QgZmllbGRzIG9mIGFuIGV4dGVuc2lvbidzIGBwYWNrYWdlLmpzb25gIGZpbGUuXG4gICAqXG4gICAqIFRoZXNlIHJlcXVpcmVkIGZpZWxkcyBhcmU6XG4gICAqIC0gYG5hbWVgXG4gICAqIC0gYHZlcnNpb25gXG4gICAqIC0gYGFwcGl1bWBcbiAgICogQHBhcmFtIHtpbXBvcnQoJ3R5cGUtZmVzdCcpLlBhY2thZ2VKc29ufSBwa2dKc29uIC0gYHBhY2thZ2UuanNvbmAgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIEV4dGVuc2lvbiBuYW1lL3NwZWNcbiAgICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IElmIGBwYWNrYWdlLmpzb25gIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBmaWVsZFxuICAgKiBAcmV0dXJucyB7cGtnSnNvbiBpcyBFeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn1cbiAgICovXG4gIHZhbGlkYXRlUGFja2FnZUpzb24ocGtnSnNvbiwgaW5zdGFsbFNwZWMpIHtcbiAgICBjb25zdCB7YXBwaXVtLCBuYW1lLCB2ZXJzaW9ufSA9IC8qKiBAdHlwZSB7RXh0UGFja2FnZUpzb248RXh0VHlwZT59ICovIChwa2dKc29uKTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXG4gICAgICogQHJldHVybnMge1JlZmVyZW5jZUVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yID0gKGZpZWxkKSA9PlxuICAgICAgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICBgJHt0aGlzLnR5cGV9IFwiJHtpbnN0YWxsU3BlY31cIiBpbnZhbGlkOyBtaXNzaW5nIGEgXFxgJHtmaWVsZH1cXGAgZmllbGQgb2YgaXRzIFxcYHBhY2thZ2UuanNvblxcYGBcbiAgICAgICk7XG5cbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yKCduYW1lJyk7XG4gICAgfVxuICAgIGlmICghdmVyc2lvbikge1xuICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0ZpZWxkRXJyb3IoJ3ZlcnNpb24nKTtcbiAgICB9XG4gICAgaWYgKCFhcHBpdW0pIHtcbiAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdGaWVsZEVycm9yKCdhcHBpdW0nKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzKGFwcGl1bSwgaW5zdGFsbFNwZWMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIGFueSBgcGFja2FnZS5qc29uYCBmaWVsZHMgd2hpY2ggYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZXh0ZW5zaW9uIHJlcXVpcmVzLCB2YWxpZGF0ZSB0aGVcbiAgICogcHJlc2VuY2UgYW5kIGZvcm0gb2YgdGhvc2UgZmllbGRzIG9uIHRoZSBgcGFja2FnZS5qc29uYCBkYXRhLCB0aHJvd2luZyBhbiBlcnJvciBpZiBhbnl0aGluZyBpc1xuICAgKiBhbWlzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRNZXRhZGF0YTxFeHRUeXBlPn0gZXh0TWV0YWRhdGEgLSB0aGUgZGF0YSBpbiB0aGUgXCJhcHBpdW1cIiBmaWVsZCBvZiBgcGFja2FnZS5qc29uYCBmb3IgYW4gZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIEV4dGVuc2lvbiBuYW1lL3NwZWNcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyhleHRNZXRhZGF0YSwgaW5zdGFsbFNwZWMpIHtcbiAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKCdNdXN0IGJlIGltcGxlbWVudGVkIGluIGZpbmFsIGNsYXNzJyk7XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIGFuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogRmlyc3QgdHJpZXMgdG8gZG8gdGhpcyB2aWEgYG5wbSB1bmluc3RhbGxgLCBidXQgaWYgdGhhdCBmYWlscywganVzdCBgcm0gLXJmYCdzIHRoZSBleHRlbnNpb24gZGlyLlxuICAgKlxuICAgKiBXaWxsIG9ubHkgcmVtb3ZlIHRoZSBleHRlbnNpb24gZnJvbSB0aGUgbWFuaWZlc3QgaWYgaXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VW5pbnN0YWxsT3B0c30gb3B0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dFJlY29yZDxFeHRUeXBlPj59IG1hcCBvZiBhbGwgaW5zdGFsbGVkIGV4dGVuc2lvbiBuYW1lcyB0byBleHRlbnNpb24gZGF0YSAod2l0aG91dCB0aGUgZXh0ZW5zaW9uIGp1c3QgdW5pbnN0YWxsZWQpXG4gICAqL1xuICBhc3luYyBfdW5pbnN0YWxsKHtpbnN0YWxsU3BlY30pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzSW5zdGFsbGVkKGluc3RhbGxTcGVjKSkge1xuICAgICAgdGhyb3cgdGhpcy5fY3JlYXRlRmF0YWxFcnJvcihcbiAgICAgICAgYENhbid0IHVuaW5zdGFsbCAke3RoaXMudHlwZX0gJyR7aW5zdGFsbFNwZWN9JzsgaXQgaXMgbm90IGluc3RhbGxlZGBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBrZ05hbWUgPSB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW2luc3RhbGxTcGVjXS5wa2dOYW1lO1xuICAgIGF3YWl0IG5wbS51bmluc3RhbGxQYWNrYWdlKHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlbW92ZUV4dGVuc2lvbihpbnN0YWxsU3BlYyk7XG4gICAgdGhpcy5sb2cub2soYFN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCAke3RoaXMudHlwZX0gJyR7aW5zdGFsbFNwZWN9J2AuZ3JlZW4pO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXBkYXRlIG9uZSBvciBtb3JlIGRyaXZlcnMgdXNpbmcgTlBNXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVXBkYXRlT3B0c30gdXBkYXRlU3BlY1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEV4dGVuc2lvblVwZGF0ZVJlc3VsdD59XG4gICAqL1xuICBhc3luYyBfdXBkYXRlKHtpbnN0YWxsU3BlYywgdW5zYWZlfSkge1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZUFsbCA9IGluc3RhbGxTcGVjID09PSBVUERBVEVfQUxMO1xuICAgIC8vIGlmIHdlJ3JlIHNwZWNpZmljYWxseSByZXF1ZXN0aW5nIGFuIHVwZGF0ZSBmb3IgYW4gZXh0ZW5zaW9uLCBtYWtlIHN1cmUgaXQncyBpbnN0YWxsZWRcbiAgICBpZiAoIXNob3VsZFVwZGF0ZUFsbCAmJiAhdGhpcy5jb25maWcuaXNJbnN0YWxsZWQoaW5zdGFsbFNwZWMpKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKFxuICAgICAgICBgVGhlICR7dGhpcy50eXBlfSBcIiR7aW5zdGFsbFNwZWN9XCIgd2FzIG5vdCBpbnN0YWxsZWQsIHNvIGNhbid0IGJlIHVwZGF0ZWRgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBleHRzVG9VcGRhdGUgPSBzaG91bGRVcGRhdGVBbGxcbiAgICAgID8gT2JqZWN0LmtleXModGhpcy5jb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgIDogW2luc3RhbGxTcGVjXTtcblxuICAgIC8vICdlcnJvcnMnIHdpbGwgaGF2ZSBleHQgbmFtZXMgYXMga2V5cyBhbmQgZXJyb3Igb2JqZWN0cyBhcyB2YWx1ZXNcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsRXJyb3I+fSAqL1xuICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuXG4gICAgLy8gJ3VwZGF0ZXMnIHdpbGwgaGF2ZSBleHQgbmFtZXMgYXMga2V5cyBhbmQgdXBkYXRlIG9iamVjdHMgYXMgdmFsdWVzLCB3aGVyZSBhbiB1cGRhdGVcbiAgICAvLyBvYmplY3QgaXMgb2YgdGhlIGZvcm0ge2Zyb206IHZlcnNpb25TdHJpbmcsIHRvOiB2ZXJzaW9uU3RyaW5nfVxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxVcGRhdGVSZXBvcnQ+fSAqL1xuICAgIGNvbnN0IHVwZGF0ZXMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZSBvZiBleHRzVG9VcGRhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNwaW5XaXRoKHRoaXMuaXNKc29uT3V0cHV0LCBgQ2hlY2tpbmcgaWYgJHt0aGlzLnR5cGV9ICcke2V9JyBpcyB1cGRhdGFibGVgLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnNbZV0uaW5zdGFsbFR5cGUgIT09IElOU1RBTExfVFlQRV9OUE0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RVcGRhdGFibGVFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHNwaW5XaXRoKFxuICAgICAgICAgIHRoaXMuaXNKc29uT3V0cHV0LFxuICAgICAgICAgIGBDaGVja2luZyBpZiAke3RoaXMudHlwZX0gJyR7ZX0nIG5lZWRzIGFuIHVwZGF0ZWAsXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5jaGVja0ZvckV4dGVuc2lvblVwZGF0ZShlKTtcbiAgICAgICAgICAgIGlmICghKHVwZGF0ZS5zYWZlVXBkYXRlIHx8IHVwZGF0ZS51bnNhZmVVcGRhdGUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBOb1VwZGF0ZXNBdmFpbGFibGVFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghdW5zYWZlICYmICF1cGRhdGUuc2FmZVVwZGF0ZSkge1xuICAgICAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgICAgICBgVGhlICR7dGhpcy50eXBlfSAnJHtlfScgaGFzIGEgbWFqb3IgcmV2aXNpb24gdXBkYXRlIGAgK1xuICAgICAgICAgICAgICBgKCR7dXBkYXRlLmN1cnJlbnR9ID0+ICR7dXBkYXRlLnVuc2FmZVVwZGF0ZX0pLCB3aGljaCBjb3VsZCBpbmNsdWRlIGAgK1xuICAgICAgICAgICAgICBgYnJlYWtpbmcgY2hhbmdlcy4gSWYgeW91IHdhbnQgdG8gYXBwbHkgdGhpcyB1cGRhdGUsIHJlLXJ1biB3aXRoIC0tdW5zYWZlYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlVmVyID0gdW5zYWZlICYmIHVwZGF0ZS51bnNhZmVVcGRhdGUgPyB1cGRhdGUudW5zYWZlVXBkYXRlIDogdXBkYXRlLnNhZmVVcGRhdGU7XG4gICAgICAgIGF3YWl0IHNwaW5XaXRoKFxuICAgICAgICAgIHRoaXMuaXNKc29uT3V0cHV0LFxuICAgICAgICAgIGBVcGRhdGluZyBkcml2ZXIgJyR7ZX0nIGZyb20gJHt1cGRhdGUuY3VycmVudH0gdG8gJHt1cGRhdGVWZXJ9YCxcbiAgICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnVwZGF0ZUV4dGVuc2lvbihlLCB1cGRhdGVWZXIpXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZXNbZV0gPSB7ZnJvbTogdXBkYXRlLmN1cnJlbnQsIHRvOiB1cGRhdGVWZXJ9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9yc1tlXSA9IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdVcGRhdGUgcmVwb3J0OicpO1xuXG4gICAgZm9yIChjb25zdCBbZSwgdXBkYXRlXSBvZiBfLnRvUGFpcnModXBkYXRlcykpIHtcbiAgICAgIHRoaXMubG9nLm9rKGAgIC0gJHt0aGlzLnR5cGV9ICR7ZX0gdXBkYXRlZDogJHt1cGRhdGUuZnJvbX0gPT4gJHt1cGRhdGUudG99YC5ncmVlbik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZSwgZXJyXSBvZiBfLnRvUGFpcnMoZXJyb3JzKSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdFVwZGF0YWJsZUVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXG4gICAgICAgICAgYCAgLSAnJHtlfScgd2FzIG5vdCBpbnN0YWxsZWQgdmlhIG5wbSwgc28gd2UgY291bGQgbm90IGNoZWNrIGAgKyBgZm9yIHVwZGF0ZXNgLnllbGxvd1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBOb1VwZGF0ZXNBdmFpbGFibGVFcnJvcikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAgIC0gJyR7ZX0nIGhhZCBubyB1cGRhdGVzIGF2YWlsYWJsZWAueWVsbG93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgbWFrZSBpdCBwb3Agd2l0aCByZWQhXG4gICAgICAgIHRoaXMubG9nLmVycm9yKGAgIC0gJyR7ZX0nIGZhaWxlZCB0byB1cGRhdGU6ICR7ZXJyfWAucmVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt1cGRhdGVzLCBlcnJvcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIGV4dGVuc2lvbiBuYW1lLCBmaWd1cmUgb3V0IHdoYXQgaXRzIGhpZ2hlc3QgcG9zc2libGUgdmVyc2lvbiB1cGdyYWRlIGlzLCBhbmQgYWxzbyB0aGVcbiAgICogaGlnaGVzdCBwb3NzaWJsZSBzYWZlIHVwZ3JhZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHQgLSBuYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBvc3NpYmxlVXBkYXRlcz59XG4gICAqL1xuICBhc3luYyBjaGVja0ZvckV4dGVuc2lvblVwZGF0ZShleHQpIHtcbiAgICAvLyBUT0RPIGRlY2lkZSBob3cgd2Ugd2FudCB0byBoYW5kbGUgYmV0YSB2ZXJzaW9ucz9cbiAgICAvLyB0aGlzIGlzIGEgaGVscGVyIG1ldGhvZCwgJ2V4dCcgaXMgYXNzdW1lZCB0byBhbHJlYWR5IGJlIGluc3RhbGxlZCBoZXJlLCBhbmQgb2YgdGhlIG5wbVxuICAgIC8vIGluc3RhbGwgdHlwZVxuICAgIGNvbnN0IHt2ZXJzaW9uLCBwa2dOYW1lfSA9IHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0XTtcbiAgICAvKiogQHR5cGUge3N0cmluZz99ICovXG4gICAgbGV0IHVuc2FmZVVwZGF0ZSA9IGF3YWl0IG5wbS5nZXRMYXRlc3RWZXJzaW9uKHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuICAgIGxldCBzYWZlVXBkYXRlID0gYXdhaXQgbnBtLmdldExhdGVzdFNhZmVVcGdyYWRlVmVyc2lvbihcbiAgICAgIHRoaXMuY29uZmlnLmFwcGl1bUhvbWUsXG4gICAgICBwa2dOYW1lLFxuICAgICAgdmVyc2lvblxuICAgICk7XG4gICAgaWYgKHVuc2FmZVVwZGF0ZSAhPT0gbnVsbCAmJiAhdXRpbC5jb21wYXJlVmVyc2lvbnModW5zYWZlVXBkYXRlLCAnPicsIHZlcnNpb24pKSB7XG4gICAgICAvLyB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2ZXJzaW9uLCBzbyB0aGVyZSdzIG5vIHBvc3NpYmxlIHVwZGF0ZVxuICAgICAgdW5zYWZlVXBkYXRlID0gbnVsbDtcbiAgICAgIHNhZmVVcGRhdGUgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodW5zYWZlVXBkYXRlICYmIHVuc2FmZVVwZGF0ZSA9PT0gc2FmZVVwZGF0ZSkge1xuICAgICAgLy8gdGhlIGxhdGVzdCB1cGRhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIHNhZmUgdXBkYXRlLCB3aGljaCBtZWFucyBpdCdzIG5vdCBhY3R1YWxseSB1bnNhZmVcbiAgICAgIHVuc2FmZVVwZGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChzYWZlVXBkYXRlICYmICF1dGlsLmNvbXBhcmVWZXJzaW9ucyhzYWZlVXBkYXRlLCAnPicsIHZlcnNpb24pKSB7XG4gICAgICAvLyBldmVuIHRoZSBzYWZlIHVwZGF0ZSBpcyBub3QgbGF0ZXIgdGhhbiB0aGUgY3VycmVudCwgc28gaXQgaXMgbm90IGFjdHVhbGx5IGFuIHVwZGF0ZVxuICAgICAgc2FmZVVwZGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7Y3VycmVudDogdmVyc2lvbiwgc2FmZVVwZGF0ZSwgdW5zYWZlVXBkYXRlfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxseSB1cGRhdGUgYW4gZXh0ZW5zaW9uIGluc3RhbGxlZCBieSBOUE0sIHVzaW5nIHRoZSBOUE0gY2xpLiBBbmQgdXBkYXRlIHRoZSBpbnN0YWxsYXRpb25cbiAgICogbWFuaWZlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIG5hbWUgb2YgZXh0ZW5zaW9uIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIHZlcnNpb24gc3RyaW5nIGlkZW50aWZpZXIgdG8gdXBkYXRlIGV4dGVuc2lvbiB0b1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUV4dGVuc2lvbihpbnN0YWxsU3BlYywgdmVyc2lvbikge1xuICAgIGNvbnN0IHtwa2dOYW1lfSA9IHRoaXMuY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnNbaW5zdGFsbFNwZWNdO1xuICAgIGNvbnN0IGV4dERhdGEgPSBhd2FpdCB0aGlzLmluc3RhbGxWaWFOcG0oe1xuICAgICAgaW5zdGFsbFNwZWMsXG4gICAgICBwa2dOYW1lLFxuICAgICAgcGtnVmVyOiB2ZXJzaW9uLFxuICAgIH0pO1xuICAgIGRlbGV0ZSBleHREYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7dGhpcy50eXBlfU5hbWVgKV07XG4gICAgYXdhaXQgdGhpcy5jb25maWcudXBkYXRlRXh0ZW5zaW9uKGluc3RhbGxTcGVjLCBleHREYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgc2NyaXB0IGNhY2hlZCBpbnNpZGUgdGhlIFwic2NyaXB0c1wiIGZpZWxkIHVuZGVyIFwiYXBwaXVtXCJcbiAgICogaW5zaWRlIG9mIHRoZSBkcml2ZXIvcGx1Z2lucyBcInBhY2thZ2UuanNvblwiIGZpbGUuIFdpbGwgdGhyb3dcbiAgICogYW4gZXJyb3IgaWYgdGhlIGRyaXZlci9wbHVnaW4gZG9lcyBub3QgY29udGFpbiBhIFwic2NyaXB0c1wiIGZpZWxkXG4gICAqIHVuZGVybmVhdGggdGhlIFwiYXBwaXVtXCIgZmllbGQgaW4gaXRzIHBhY2thZ2UuanNvbiwgaWYgdGhlXG4gICAqIFwic2NyaXB0c1wiIGZpZWxkIGlzIG5vdCBhIHBsYWluIG9iamVjdCwgb3IgaWYgdGhlIHNjcmlwdE5hbWUgaXNcbiAgICogbm90IGZvdW5kIHdpdGhpbiBcInNjcmlwdHNcIiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UnVuT3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJ1bk91dHB1dD59XG4gICAqL1xuICBhc3luYyBfcnVuKHtpbnN0YWxsU3BlYywgc2NyaXB0TmFtZSwgZXh0cmFBcmdzID0gW119KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5pc0luc3RhbGxlZChpbnN0YWxsU3BlYykpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoYFRoZSAke3RoaXMudHlwZX0gXCIke2luc3RhbGxTcGVjfVwiIGlzIG5vdCBpbnN0YWxsZWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRDb25maWcgPSB0aGlzLmNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zW2luc3RhbGxTcGVjXTtcblxuICAgIC8vIG5vdGU6IFRTIGNhbm5vdCB1bmRlcnN0YW5kIHRoYXQgXy5oYXMoKSBpcyBhIHR5cGUgZ3VhcmRcbiAgICBpZiAoIWV4dENvbmZpZy5zY3JpcHRzKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKFxuICAgICAgICBgVGhlICR7dGhpcy50eXBlfSBuYW1lZCAnJHtpbnN0YWxsU3BlY30nIGRvZXMgbm90IGNvbnRhaW4gdGhlIGAgK1xuICAgICAgICAgIGBcInNjcmlwdHNcIiBmaWVsZCB1bmRlcm5lYXRoIHRoZSBcImFwcGl1bVwiIGZpZWxkIGluIGl0cyBwYWNrYWdlLmpzb25gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dFNjcmlwdHMgPSBleHRDb25maWcuc2NyaXB0cztcblxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGV4dFNjcmlwdHMpKSB7XG4gICAgICB0aHJvdyB0aGlzLl9jcmVhdGVGYXRhbEVycm9yKFxuICAgICAgICBgVGhlICR7dGhpcy50eXBlfSBuYW1lZCAnJHtpbnN0YWxsU3BlY30nIFwic2NyaXB0c1wiIGZpZWxkIG11c3QgYmUgYSBwbGFpbiBvYmplY3RgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghXy5oYXMoZXh0U2NyaXB0cywgc2NyaXB0TmFtZSkpIHtcbiAgICAgIHRocm93IHRoaXMuX2NyZWF0ZUZhdGFsRXJyb3IoXG4gICAgICAgIGBUaGUgJHt0aGlzLnR5cGV9IG5hbWVkICcke2luc3RhbGxTcGVjfScgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2NyaXB0OiAnJHtzY3JpcHROYW1lfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBTdWJQcm9jZXNzKHByb2Nlc3MuZXhlY1BhdGgsIFtleHRTY3JpcHRzW3NjcmlwdE5hbWVdLCAuLi5leHRyYUFyZ3NdLCB7XG4gICAgICBjd2Q6IHRoaXMuY29uZmlnLmdldEluc3RhbGxQYXRoKGluc3RhbGxTcGVjKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBSaW5nQnVmZmVyKDUwKTtcblxuICAgIHJ1bm5lci5vbignc3RyZWFtLWxpbmUnLCAobGluZSkgPT4ge1xuICAgICAgb3V0cHV0LmVucXVldWUobGluZSk7XG4gICAgICB0aGlzLmxvZy5sb2cobGluZSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBydW5uZXIuc3RhcnQoMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVubmVyLmpvaW4oKTtcbiAgICAgIHRoaXMubG9nLm9rKGAke3NjcmlwdE5hbWV9IHN1Y2Nlc3NmdWxseSByYW5gLmdyZWVuKTtcbiAgICAgIHJldHVybiB7b3V0cHV0OiBvdXRwdXQuZ2V0QnVmZigpfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGVuIHJ1bm5pbmcgJyR7c2NyaXB0TmFtZX0nOiAke2Vyci5tZXNzYWdlfWAucmVkKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGVyci5tZXNzYWdlLCBvdXRwdXQ6IG91dHB1dC5nZXRCdWZmKCl9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFeHRlbnNpb25Db21tYW5kO1xuZXhwb3J0IHtFeHRlbnNpb25Db21tYW5kfTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUge0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kfSBjb25zdHJ1Y3RvclxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKiBAdHlwZWRlZiBFeHRlbnNpb25Db21tYW5kT3B0aW9uc1xuICogQHByb3BlcnR5IHtFeHRlbnNpb25Db25maWc8RXh0VHlwZT59IGNvbmZpZyAtIHRoZSBgRHJpdmVyQ29uZmlnYCBvciBgUGx1Z2luQ29uZmlnYCBpbnN0YW5jZSB1c2VkIGZvciB0aGlzIGNvbW1hbmRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ganNvbiAtIHdoZXRoZXIgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgc2hvdWxkIGJlIEpTT04gb3IgdGV4dFxuICovXG5cbi8qKlxuICogRXh0cmEgc3R1ZmYgYWJvdXQgZXh0ZW5zaW9uczsgdXNlZCBpbmRpcmVjdGx5IGJ5IHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5saXN0fS5cbiAqXG4gKiBAdHlwZWRlZiBFeHRlbnNpb25NZXRhZGF0YVxuICogQHByb3BlcnR5IHtib29sZWFufSBpbnN0YWxsZWQgLSBJZiBgdHJ1ZWAsIHRoZSBleHRlbnNpb24gaXMgaW5zdGFsbGVkXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHVwZGF0ZVZlcnNpb24gLSBJZiB0aGUgZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCwgdGhlIHZlcnNpb24gaXQgY2FuIGJlIHVwZGF0ZWQgdG9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gdW5zYWZlVXBkYXRlVmVyc2lvbiAtIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIG1ham9yIHZlcnNpb24gYnVtcFxuICogQHByb3BlcnR5IHtib29sZWFufSB1cFRvRGF0ZSAtIElmIHRoZSBleHRlbnNpb24gaXMgaW5zdGFsbGVkIGFuZCB0aGUgbGF0ZXN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFJlY29yZDxFeHRUeXBlPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9leHRlbnNpb24tY29uZmlnJykuRXh0ZW5zaW9uQ29uZmlnPEV4dFR5cGU+fSBFeHRlbnNpb25Db25maWdcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWV0YWRhdGE8RXh0VHlwZT59IEV4dE1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PEV4dFR5cGU+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn0gRXh0UGFja2FnZUpzb25cbiAqL1xuXG4vKipcbiAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZSBmb3Ige0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLmxpc3R9XG4gKiBAdHlwZWRlZiBVbmluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnTmFtZVxuICogQHByb3BlcnR5IHtmYWxzZX0gaW5zdGFsbGVkXG4gKi9cblxuLyoqXG4gKiBQb3NzaWJsZSByZXR1cm4gdmFsdWUgZm9yIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5saXN0fVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YSAmIEV4dGVuc2lvbk1ldGFkYXRhfSBJbnN0YWxsZWRFeHRlbnNpb25MaXN0RGF0YVxuICovXG5cbi8qKlxuICogUmV0dXJuIHZhbHVlIG9mIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5saXN0fS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLEluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhfFVuaW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGE+fSBFeHRlbnNpb25MaXN0RGF0YVxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLl9ydW59LlxuICogQHR5cGVkZWYgUnVuT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbGxTcGVjIC0gbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRvIHJ1biBhIHNjcmlwdCBmcm9tXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2NyaXB0TmFtZSAtIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtleHRyYUFyZ3NdIC0gYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHNjcmlwdFxuICovXG5cbi8qKlxuICogUmV0dXJuIHZhbHVlIG9mIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5fcnVufVxuICpcbiAqIEB0eXBlZGVmIFJ1bk91dHB1dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlcnJvcl0gLSBlcnJvciBtZXNzYWdlIGlmIHNjcmlwdCByYW4gdW5zdWNjZXNzZnVsbHksIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG91dHB1dCAtIHNjcmlwdCBvdXRwdXRcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5fdXBkYXRlfS5cbiAqIEB0eXBlZGVmIEV4dGVuc2lvblVwZGF0ZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YWxsU3BlYyAtIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdG8gdXBkYXRlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2FmZSAtIGlmIHRydWUsIHdpbGwgcGVyZm9ybSB1bnNhZmUgdXBkYXRlcyBwYXN0IG1ham9yIHJldmlzaW9uIGJvdW5kYXJpZXNcbiAqL1xuXG4vKipcbiAqIFJldHVybiB2YWx1ZSBvZiB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX3VwZGF0ZX0uXG4gKiBAdHlwZWRlZiBFeHRlbnNpb25VcGRhdGVSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZyxFcnJvcj59IGVycm9ycyAtIG1hcCBvZiBleHQgbmFtZXMgdG8gZXJyb3Igb2JqZWN0c1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLFVwZGF0ZVJlcG9ydD59IHVwZGF0ZXMgLSBtYXAgb2YgZXh0IG5hbWVzIHRvIHtAbGlua2NvZGUgVXBkYXRlUmVwb3J0fXNcbiAqL1xuXG4vKipcbiAqIFBhcnQgb2YgcmVzdWx0IG9mIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5fdXBkYXRlfS5cbiAqIEB0eXBlZGVmIFVwZGF0ZVJlcG9ydFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZyb20gLSB2ZXJzaW9uIHRoZSBleHRlbnNpb24gd2FzIHVwZGF0ZWQgZnJvbVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRvIC0gdmVyc2lvbiB0aGUgZXh0ZW5zaW9uIHdhcyB1cGRhdGVkIHRvXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuX3VuaW5zdGFsbH0uXG4gKiBAdHlwZWRlZiBVbmluc3RhbGxPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5zdGFsbFNwZWMgLSB0aGUgbmFtZSBvciBzcGVjIG9mIGFuIGV4dGVuc2lvbiB0byB1bmluc3RhbGxcbiAqL1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLmdldFBvc3RJbnN0YWxsVGV4dH1cbiAqIEB0eXBlZGVmIEV4dGVuc2lvbkFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHROYW1lIC0gdGhlIG5hbWUgb2YgYW4gZXh0ZW5zaW9uXG4gKiBAcHJvcGVydHkge29iamVjdH0gZXh0RGF0YSAtIHRoZSBkYXRhIGZvciBhbiBpbnN0YWxsZWQgZXh0ZW5zaW9uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIEV4dGVuc2lvbkNvbW1hbmQuaW5zdGFsbFZpYU5wbX1cbiAqIEB0eXBlZGVmIEluc3RhbGxWaWFOcG1BcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5zdGFsbFNwZWMgLSB0aGUgbmFtZSBvciBzcGVjIG9mIGFuIGV4dGVuc2lvbiB0byBpbnN0YWxsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnTmFtZSAtIHRoZSBOUE0gcGFja2FnZSBuYW1lIG9mIHRoZSBleHRlbnNpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBOUE0gcGFja2FnZVxuICovXG5cbi8qKlxuICogT2JqZWN0IHJldHVybmVkIGJ5IHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5jaGVja0ZvckV4dGVuc2lvblVwZGF0ZX1cbiAqIEB0eXBlZGVmIFBvc3NpYmxlVXBkYXRlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnJlbnQgLSBjdXJyZW50IHZlcnNpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gc2FmZVVwZGF0ZSAtIHZlcnNpb24gd2UgY2FuIHNhZmVseSB1cGRhdGUgdG8gaWYgaXQgZXhpc3RzLCBvciBudWxsXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHVuc2FmZVVwZGF0ZSAtIHZlcnNpb24gd2UgY2FuIHVuc2FmZWx5IHVwZGF0ZSB0byBpZiBpdCBleGlzdHMsIG9yIG51bGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29tbWFuZC5faW5zdGFsbH1cbiAqIEB0eXBlZGVmIEluc3RhbGxBcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5zdGFsbFNwZWMgLSB0aGUgbmFtZSBvciBzcGVjIG9mIGFuIGV4dGVuc2lvbiB0byBpbnN0YWxsXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW5zdGFsbFR5cGV9IGluc3RhbGxUeXBlIC0gaG93IHRvIGluc3RhbGwgdGhpcyBleHRlbnNpb24uIE9uZSBvZiB0aGUgSU5TVEFMTF9UWVBFU1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYWNrYWdlTmFtZV0gLSBmb3IgZ2l0L2dpdGh1YiBpbnN0YWxscywgdGhlIGV4dGVuc2lvbiBub2RlIHBhY2thZ2UgbmFtZVxuICovXG5cbi8qKlxuICogUmV0dXJuZWQgYnkge0BsaW5rY29kZSBFeHRlbnNpb25Db21tYW5kLmdldEV4dGVuc2lvbkZpZWxkc31cbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYge0V4dE1ldGFkYXRhPEV4dFR5cGU+ICYgeyBwa2dOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYXBwaXVtVmVyc2lvbjogc3RyaW5nIH0gJiBpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNvbW1vbkV4dE1ldGFkYXRhfSBFeHRlbnNpb25GaWVsZHNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYge0V4dFR5cGUgZXh0ZW5kcyBEcml2ZXJUeXBlID8gdHlwZW9mIGltcG9ydCgnLi4vY29uc3RhbnRzJykuS05PV05fRFJJVkVSUyA6IEV4dFR5cGUgZXh0ZW5kcyBQbHVnaW5UeXBlID8gdHlwZW9mIGltcG9ydCgnLi4vY29uc3RhbnRzJykuS05PV05fUExVR0lOUyA6IG5ldmVyfSBLbm93bkV4dGVuc2lvbnNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNob3dJbnN0YWxsZWQgLSB3aGV0aGVyIHNob3VsZCBzaG93IG9ubHkgaW5zdGFsbGVkIGV4dGVuc2lvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2hvd1VwZGF0ZXMgLSB3aGV0aGVyIHNob3VsZCBzaG93IGF2YWlsYWJsZSB1cGRhdGVzXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQTs7QUFFQSxNQUFN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
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;yBAyYa,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;0BACnC,OAAO,eAAe,EAAE,WAAW;mCACnC,OAAO,cAAc,EAAE,oBAAoB;4BAC3C,OAAO,aAAa,EAAE,aAAa;4BACnC,OAAO,aAAa,EAAE,aAAa;;;;mCAKlC,EAAE;;;;;kBAKF,OAAO,UAAU,EAAE,YAAY;;;;gBAC/B,OAAO,cAAc,EAAE,UAAU;;+BAIlC,cAAc,GAAG,OAAO,aAAa,EAAE,gBAAgB;oEAKvD,OAAO,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;0EAK9B,OAAO,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;AAnJjD;;;;;;GAMG;AACH,mGAFa,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,SAAS,CAAC,CAgGnE;AA/ND;;;;;;;;;;;;;;;GAeG;AACH,mGAPa,QAAQ,gBAAgB,GAAG,oBAAoB,CAAC,CA+G5D"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;yBA2Ya,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;0BACnC,OAAO,eAAe,EAAE,WAAW;mCACnC,OAAO,cAAc,EAAE,oBAAoB;4BAC3C,OAAO,aAAa,EAAE,aAAa;4BACnC,OAAO,aAAa,EAAE,aAAa;;;;mCAKlC,EAAE;;;;;kBAKF,OAAO,UAAU,EAAE,YAAY;;;;gBAC/B,OAAO,cAAc,EAAE,UAAU;;+BAIlC,cAAc,GAAG,OAAO,aAAa,EAAE,gBAAgB;oEAKvD,OAAO,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;0EAK9B,OAAO,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;AAnJjD;;;;;;GAMG;AACH,mGAFa,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,SAAS,CAAC,CAgGnE;AAjOD;;;;;;;;;;;;;;;GAeG;AACH,mGAPa,QAAQ,gBAAgB,GAAG,oBAAoB,CAAC,CAiH5D"}
package/build/lib/main.js CHANGED
@@ -159,6 +159,7 @@ function areServerCommandArgs(args) {
159
159
 
160
160
  async function init(args) {
161
161
  const appiumHome = (args === null || args === void 0 ? void 0 : args.appiumHome) ?? (await resolveAppiumHome());
162
+ (0, _utils.adjustNodePath)();
162
163
  const {
163
164
  driverConfig,
164
165
  pluginConfig
@@ -332,4 +333,4 @@ async function main(args) {
332
333
  if (require.main === module) {
333
334
  (0, _asyncbox.asyncify)(main);
334
335
  }
335
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlQXBwaXVtSG9tZSIsImVudiIsInByZWZsaWdodENoZWNrcyIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJjaGVja05vZGVPayIsImNoZWNrTnBtT2siLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dCdWlsZEluZm8iLCJwcm9jZXNzIiwiZXhpdCIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwidmFsaWRhdGUiLCJ0bXBEaXIiLCJ2YWxpZGF0ZVRtcERpciIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsInJlZCIsImxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyIsImluZm8iLCJpbnNwZWN0IiwibG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmciLCJjYXBzIiwibG9nU3RhcnR1cEluZm8iLCJ3ZWxjb21lIiwiQVBQSVVNX1ZFUiIsImFwcGl1bVJldiIsImdldEdpdFJldiIsInNob3dBcmdzIiwiZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MiLCJfIiwic2l6ZSIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwibG9nU2VydmVyUG9ydCIsImFkZHJlc3MiLCJwb3J0IiwibG9nTWVzc2FnZSIsImdldFNlcnZlclVwZGF0ZXJzIiwiZHJpdmVyQ2xhc3NlcyIsInBsdWdpbkNsYXNzZXMiLCJjb21wYWN0IiwibWFwIiwia2V5cyIsImdldEV4dHJhTWV0aG9kTWFwIiwicmVkdWNlIiwia2xhc3MiLCJuZXdNZXRob2RNYXAiLCJhcmVTZXJ2ZXJDb21tYW5kQXJncyIsInN1YmNvbW1hbmQiLCJTRVJWRVJfU1VCQ09NTUFORCIsImluaXQiLCJhcHBpdW1Ib21lIiwiZHJpdmVyQ29uZmlnIiwicGx1Z2luQ29uZmlnIiwibG9hZEV4dGVuc2lvbnMiLCJwYXJzZXIiLCJnZXRQYXJzZXIiLCJwcmVDb25maWdBcmdzIiwicGFyc2VBcmdzIiwiY29uZmlnUmVzdWx0IiwicmVhZENvbmZpZ0ZpbGUiLCJjb25maWdGaWxlIiwiZXJyb3JzIiwiRXJyb3IiLCJmaWxlcGF0aCIsInJlYXNvbiIsImRlZmF1bHRzIiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiLCJzZXJ2ZXJBcmdzIiwiZGVmYXVsdHNEZWVwIiwiY29uZmlnIiwic2VydmVyIiwic2hvd0NvbmZpZyIsImxvZ3NpbmtJbml0IiwibG9nRmlsdGVycyIsImlzc3VlcyIsInJ1bGVzIiwibG9nRmFjdG9yeSIsImxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwid2FybiIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJhcHBpdW1Ecml2ZXIiLCJBcHBpdW1Ecml2ZXIiLCJwYXJzZWRBcmdzIiwiZXh0ZW5zaW9uQ29tbWFuZEFyZ3MiLCJEUklWRVJfVFlQRSIsInJ1bkV4dGVuc2lvbkNvbW1hbmQiLCJQTFVHSU5fVFlQRSIsIm1haW4iLCJnZXRBY3RpdmVQbHVnaW5zIiwidXNlUGx1Z2lucyIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsIm1ha2VSb3V0ZXIiLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsInNlcnZlclVwZGF0ZXJzIiwiZXh0cmFNZXRob2RNYXAiLCJzZXJ2ZXJPcHRzIiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJiYXNlUGF0aCIsImNsaUFyZ3MiLCJrZWVwQWxpdmVUaW1lb3V0IiwiYmFzZVNlcnZlciIsImRlYnVnIiwic3RhY2siLCJub2RlY29uZmlnIiwicmVnaXN0ZXJOb2RlIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwiZSIsInByaW50IiwidmFsdWVzIiwibW9kdWxlIiwiYXN5bmNpZnkiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbWFpbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7aW5pdCBhcyBsb2dzaW5rSW5pdH0gZnJvbSAnLi9sb2dzaW5rJzsgLy8gdGhpcyBpbXBvcnQgbmVlZHMgdG8gY29tZSBmaXJzdCBzaW5jZSBpdCBzZXRzIHVwIGdsb2JhbCBucG1sb2dcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInOyAvLyBsb2dnZXIgbmVlZHMgdG8gcmVtYWluIHNlY29uZFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciwgc2VydmVyIGFzIGJhc2VTZXJ2ZXJ9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtsb2dnZXIgYXMgbG9nRmFjdG9yeSwgdXRpbCwgZW52fSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHthc3luY2lmeX0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7QXBwaXVtRHJpdmVyfSBmcm9tICcuL2FwcGl1bSc7XG5pbXBvcnQge3J1bkV4dGVuc2lvbkNvbW1hbmR9IGZyb20gJy4vY2xpL2V4dGVuc2lvbic7XG5pbXBvcnQge2dldFBhcnNlcn0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7XG4gIEFQUElVTV9WRVIsXG4gIGNoZWNrTm9kZU9rLFxuICBnZXRHaXRSZXYsXG4gIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLFxuICBzaG93Q29uZmlnLFxuICBzaG93QnVpbGRJbmZvLFxuICB2YWxpZGF0ZVRtcERpcixcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsXG4gIGNoZWNrTnBtT2ssXG59IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7cmVhZENvbmZpZ0ZpbGV9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHtsb2FkRXh0ZW5zaW9ucywgZ2V0QWN0aXZlUGx1Z2lucywgZ2V0QWN0aXZlRHJpdmVyc30gZnJvbSAnLi9leHRlbnNpb24nO1xuaW1wb3J0IHtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUsIFNFUlZFUl9TVUJDT01NQU5EfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgcmVnaXN0ZXJOb2RlIGZyb20gJy4vZ3JpZC1yZWdpc3Rlcic7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yU2NoZW1hLCB2YWxpZGF0ZX0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7aW5zcGVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IHtyZXNvbHZlQXBwaXVtSG9tZX0gPSBlbnY7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7UGFyc2VkQXJnc30gYXJnc1xuICogQHBhcmFtIHtib29sZWFufSBbdGhyb3dJbnN0ZWFkT2ZFeGl0XVxuICovXG5hc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRDaGVja3MoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGF3YWl0IGNoZWNrTnBtT2soKTtcbiAgICBpZiAoYXJncy5sb25nU3RhY2t0cmFjZSkge1xuICAgICAgcmVxdWlyZSgnbG9uZ2pvaG4nKS5hc3luY190cmFjZV9saW1pdCA9IC0xO1xuICAgIH1cbiAgICBpZiAoYXJncy5zaG93QnVpbGRJbmZvKSB7XG4gICAgICBhd2FpdCBzaG93QnVpbGRJbmZvKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIHdhcm5Ob2RlRGVwcmVjYXRpb25zKCk7XG5cbiAgICB2YWxpZGF0ZShhcmdzKTtcblxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgYXdhaXQgdmFsaWRhdGVUbXBEaXIoYXJncy50bXBEaXIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLnJlZCk7XG4gICAgaWYgKHRocm93SW5zdGVhZE9mRXhpdCkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJnc30gYXJnc1xuICovXG5mdW5jdGlvbiBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcmdzWydkZWZhdWx0Q2FwYWJpbGl0aWVzJ119IGNhcHNcbiAqL1xuZnVuY3Rpb24gbG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmcoY2Fwcykge1xuICBsb2dnZXIuaW5mbyhcbiAgICAnRGVmYXVsdCBjYXBhYmlsaXRpZXMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaCByZXF1ZXN0ICcgK1xuICAgICAgJ3VubGVzcyBvdmVycmlkZGVuIGJ5IGRlc2lyZWQgY2FwYWJpbGl0aWVzOidcbiAgKTtcbiAgaW5zcGVjdChjYXBzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IGFyZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8oYXJncykge1xuICBsZXQgd2VsY29tZSA9IGBXZWxjb21lIHRvIEFwcGl1bSB2JHtBUFBJVU1fVkVSfWA7XG4gIGxldCBhcHBpdW1SZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgaWYgKGFwcGl1bVJldikge1xuICAgIHdlbGNvbWUgKz0gYCAoUkVWICR7YXBwaXVtUmV2fSlgO1xuICB9XG4gIGxvZ2dlci5pbmZvKHdlbGNvbWUpO1xuXG4gIGxldCBzaG93QXJncyA9IGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKGFyZ3MpO1xuICBpZiAoXy5zaXplKHNob3dBcmdzKSkge1xuICAgIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyhzaG93QXJncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gIH1cbiAgLy8gVE9ETzogYnJpbmcgYmFjayBsb2dsZXZlbCByZXBvcnRpbmcgYmVsb3cgb25jZSBsb2dnZXIgaXMgZmx1c2hlZCBvdXRcbiAgLy8gbG9nZ2VyLmluZm8oJ0NvbnNvbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5jb25zb2xlLmxldmVsKTtcbiAgLy8gaWYgKGxvZ2dlci50cmFuc3BvcnRzLmZpbGUpIHtcbiAgLy8gICBsb2dnZXIuaW5mbygnRmlsZSBMb2dMZXZlbDogJyArIGxvZ2dlci50cmFuc3BvcnRzLmZpbGUubGV2ZWwpO1xuICAvLyB9XG59XG5cbi8qKlxuICogTG9ncyB0aGUgYWRkcmVzcyBhbmQgcG9ydCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvblxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBBZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFBvcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0KGFkZHJlc3MsIHBvcnQpIHtcbiAgbGV0IGxvZ01lc3NhZ2UgPSBgQXBwaXVtIFJFU1QgaHR0cCBpbnRlcmZhY2UgbGlzdGVuZXIgc3RhcnRlZCBvbiBgICsgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldHMgYSBsaXN0IG9mIGB1cGRhdGVTZXJ2ZXJgIGZ1bmN0aW9ucyBmcm9tIGFsbCBleHRlbnNpb25zXG4gKiBAcGFyYW0ge0RyaXZlck5hbWVNYXB9IGRyaXZlckNsYXNzZXNcbiAqIEBwYXJhbSB7UGx1Z2luTmFtZU1hcH0gcGx1Z2luQ2xhc3Nlc1xuICogQHJldHVybnMge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlVwZGF0ZVNlcnZlckNhbGxiYWNrW119XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIF8uY29tcGFjdChfLm1hcChbLi4uZHJpdmVyQ2xhc3Nlcy5rZXlzKCksIC4uLnBsdWdpbkNsYXNzZXMua2V5cygpXSwgJ3VwZGF0ZVNlcnZlcicpKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGJpZyBgTWV0aG9kTWFwYCBmcm9tIGFsbCB0aGUgbGl0dGxlIGBNZXRob2RNYXBgcyBpbiB0aGUgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJOYW1lTWFwfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbk5hbWVNYXB9IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5NZXRob2RNYXB9XG4gKi9cbmZ1bmN0aW9uIGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIFsuLi5kcml2ZXJDbGFzc2VzLmtleXMoKSwgLi4ucGx1Z2luQ2xhc3Nlcy5rZXlzKCldLnJlZHVjZShcbiAgICAobWFwLCBrbGFzcykgPT4gKHtcbiAgICAgIC4uLm1hcCxcbiAgICAgIC4uLihrbGFzcy5uZXdNZXRob2RNYXAgPz8ge30pLFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHBhcmFtIHtBcmdzPFQ+fSBhcmdzXG4gKiBAcmV0dXJucyB7YXJncyBpcyBBcmdzPFdpdGhTZXJ2ZXJTdWJjb21tYW5kPn1cbiAqL1xuZnVuY3Rpb24gYXJlU2VydmVyQ29tbWFuZEFyZ3MoYXJncykge1xuICByZXR1cm4gYXJncy5zdWJjb21tYW5kID09PSBTRVJWRVJfU1VCQ09NTUFORDtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBBcHBpdW0sIGJ1dCBkb2VzIG5vdCBzdGFydCB0aGUgc2VydmVyLlxuICpcbiAqIFVzZSB0aGlzIHRvIGdldCBhdCB0aGUgY29uZmlndXJhdGlvbiBzY2hlbWEuXG4gKlxuICogSWYgYGFyZ3NgIGNvbnRhaW5zIGEgbm9uLWVtcHR5IGBzdWJjb21tYW5kYCB3aGljaCBpcyBub3QgYHNlcnZlcmAsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gW2FyZ3NdIC0gUGFydGlhbCBhcmdzIChwcm9nYW1tYXRpYyB1c2FnZSBvbmx5KVxuICogQHJldHVybnMge1Byb21pc2U8U2VydmVySW5pdFJlc3VsdCB8IEV4dENvbW1hbmRJbml0UmVzdWx0Pn1cbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2luaXQsIGdldFNjaGVtYX0gZnJvbSAnYXBwaXVtJztcbiAqIGNvbnN0IG9wdGlvbnMgPSB7fTsgLy8gY29uZmlnIG9iamVjdFxuICogYXdhaXQgaW5pdChvcHRpb25zKTtcbiAqIGNvbnN0IHNjaGVtYSA9IGdldFNjaGVtYSgpOyAvLyBlbnRpcmUgY29uZmlnIHNjaGVtYSBpbmNsdWRpbmcgcGx1Z2lucyBhbmQgZHJpdmVyc1xuICovXG5hc3luYyBmdW5jdGlvbiBpbml0KGFyZ3MpIHtcbiAgY29uc3QgYXBwaXVtSG9tZSA9IGFyZ3M/LmFwcGl1bUhvbWUgPz8gKGF3YWl0IHJlc29sdmVBcHBpdW1Ib21lKCkpO1xuXG4gIGNvbnN0IHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ30gPSBhd2FpdCBsb2FkRXh0ZW5zaW9ucyhhcHBpdW1Ib21lKTtcblxuICBjb25zdCBwYXJzZXIgPSBnZXRQYXJzZXIoKTtcbiAgbGV0IHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlO1xuICAvKiogQHR5cGUge0FyZ3M8VD59ICovXG4gIGxldCBwcmVDb25maWdBcmdzO1xuXG4gIGlmIChhcmdzKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gICAgcHJlQ29uZmlnQXJncyA9IHsuLi5hcmdzLCBzdWJjb21tYW5kOiBhcmdzLnN1YmNvbW1hbmQgPz8gU0VSVkVSX1NVQkNPTU1BTkR9O1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSBwYXJzZSBmcm9tIENMSVxuICAgIHByZUNvbmZpZ0FyZ3MgPSAvKiogQHR5cGUge0FyZ3M8VD59ICovIChwYXJzZXIucGFyc2VBcmdzKCkpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnUmVzdWx0ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGUocHJlQ29uZmlnQXJncy5jb25maWdGaWxlKTtcblxuICBpZiAoIV8uaXNFbXB0eShjb25maWdSZXN1bHQuZXJyb3JzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvcnMgaW4gY29uZmlnIGZpbGUgJHtjb25maWdSZXN1bHQuZmlsZXBhdGh9OlxcbiAke1xuICAgICAgICBjb25maWdSZXN1bHQucmVhc29uID8/IGNvbmZpZ1Jlc3VsdC5lcnJvcnNcbiAgICAgIH1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIG1lcmdlIGNvbmZpZyBhbmQgYXBwbHkgZGVmYXVsdHMuXG4gIC8vIHRoZSBvcmRlciBvZiBwcmVjZW5kZWNlIGlzOlxuICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnc1xuICAvLyAyLiBjb25maWcgZmlsZVxuICAvLyAzLiBkZWZhdWx0cyBmcm9tIGNvbmZpZyBmaWxlLlxuICBpZiAoYXJlU2VydmVyQ29tbWFuZEFyZ3MocHJlQ29uZmlnQXJncykpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGdldERlZmF1bHRzRm9yU2NoZW1hKGZhbHNlKTtcblxuICAgIC8qKiBAdHlwZSB7UGFyc2VkQXJnc30gKi9cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gXy5kZWZhdWx0c0RlZXAocHJlQ29uZmlnQXJncywgY29uZmlnUmVzdWx0LmNvbmZpZz8uc2VydmVyLCBkZWZhdWx0cyk7XG5cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zaG93Q29uZmlnKSB7XG4gICAgICBzaG93Q29uZmlnKGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKHByZUNvbmZpZ0FyZ3MpLCBjb25maWdSZXN1bHQsIGRlZmF1bHRzLCBzZXJ2ZXJBcmdzKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBhd2FpdCBsb2dzaW5rSW5pdChzZXJ2ZXJBcmdzKTtcblxuICAgIGlmIChzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhcbiAgICAgICAgc2VydmVyQXJncy5sb2dGaWx0ZXJzXG4gICAgICApO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoaXNzdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSBsb2cgZmlsdGVyaW5nIHJ1bGVzIGNvbmZpZyAnJHtzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnN9JyBoYXMgaXNzdWVzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlzc3VlcywgbnVsbCwgMilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkocnVsZXMpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBGb3VuZCBubyBsb2cgZmlsdGVyaW5nIHJ1bGVzIGluICcke3NlcnZlckFyZ3MubG9nRmlsdGVyc30nLiBJcyB0aGF0IGV4cGVjdGVkP2BcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBMb2FkZWQgJHt1dGlsLnBsdXJhbGl6ZSgnZmlsdGVyaW5nIHJ1bGUnLCBydWxlcy5sZW5ndGgsIHRydWUpfSBmcm9tICcke1xuICAgICAgICAgICAgc2VydmVyQXJncy5sb2dGaWx0ZXJzXG4gICAgICAgICAgfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwaXVtRHJpdmVyID0gbmV3IEFwcGl1bURyaXZlcihzZXJ2ZXJBcmdzKTtcbiAgICAvLyBzZXQgdGhlIGNvbmZpZyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiBtYXRjaCBkcml2ZXJzIHRvIGNhcHNcbiAgICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICAgIGF3YWl0IHByZWZsaWdodENoZWNrcyhzZXJ2ZXJBcmdzLCB0aHJvd0luc3RlYWRPZkV4aXQpO1xuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2VydmVySW5pdFJlc3VsdH0gKi8gKHtcbiAgICAgIGFwcGl1bURyaXZlcixcbiAgICAgIHBhcnNlZEFyZ3M6IHNlcnZlckFyZ3MsXG4gICAgICBkcml2ZXJDb25maWcsXG4gICAgICBwbHVnaW5Db25maWcsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29tbWFuZEFyZ3MgPSAvKiogQHR5cGUge0FyZ3M8aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5XaXRoRXh0U3ViY29tbWFuZD59ICovIChcbiAgICAgIHByZUNvbmZpZ0FyZ3NcbiAgICApO1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhlICdkcml2ZXInIENMSSwgZG9uJ3QgcnVuIHRoZSBub3JtYWwgc2VydmVyLFxuICAgIC8vIGJ1dCBpbnN0ZWFkIHBhc3MgY29udHJvbCB0byB0aGUgZHJpdmVyIENMSVxuICAgIGlmIChwcmVDb25maWdBcmdzLnN1YmNvbW1hbmQgPT09IERSSVZFUl9UWVBFKSB7XG4gICAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKGV4dGVuc2lvbkNvbW1hbmRBcmdzLCBkcml2ZXJDb25maWcpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zdWJjb21tYW5kID09PSBQTFVHSU5fVFlQRSkge1xuICAgICAgYXdhaXQgcnVuRXh0ZW5zaW9uQ29tbWFuZChleHRlbnNpb25Db21tYW5kQXJncywgcGx1Z2luQ29uZmlnKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4ge307IC8vIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgfVxufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIEFwcGl1bSdzIGNvbmZpZy4gIFN0YXJ0cyBzZXJ2ZXIgaWYgYXBwcm9wcmlhdGUgYW5kIHJlc29sdmVzIHRoZVxuICogc2VydmVyIGluc3RhbmNlIGlmIHNvOyBvdGhlcndpc2UgcmVzb2x2ZXMgdy8gYHVuZGVmaW5lZGAuXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAcGFyYW0ge0FyZ3M8VD59IFthcmdzXSAtIEFyZ3VtZW50cyBmcm9tIENMSSBvciBvdGhlcndpc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcnx1bmRlZmluZWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBtYWluKGFyZ3MpIHtcbiAgY29uc3Qge2FwcGl1bURyaXZlciwgcGFyc2VkQXJncywgcGx1Z2luQ29uZmlnLCBkcml2ZXJDb25maWd9ID0gLyoqIEB0eXBlIHtTZXJ2ZXJJbml0UmVzdWx0fSAqLyAoXG4gICAgYXdhaXQgaW5pdChhcmdzKVxuICApO1xuXG4gIGlmICghYXBwaXVtRHJpdmVyIHx8ICFwYXJzZWRBcmdzIHx8ICFwbHVnaW5Db25maWcgfHwgIWRyaXZlckNvbmZpZykge1xuICAgIC8vIGlmIHRoaXMgYnJhbmNoIGlzIHRha2VuLCB3ZSd2ZSBydW4gYSBkaWZmZXJlbnQgc3ViY29tbWFuZCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgLy8gbGVmdCB0byBkbyBoZXJlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbkNsYXNzZXMgPSBnZXRBY3RpdmVQbHVnaW5zKHBsdWdpbkNvbmZpZywgcGFyc2VkQXJncy51c2VQbHVnaW5zKTtcbiAgLy8gc2V0IHRoZSBhY3RpdmUgcGx1Z2lucyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiB1c2UgdGhlbSBmb3IgY29tbWFuZHNcbiAgYXBwaXVtRHJpdmVyLnBsdWdpbkNsYXNzZXMgPSBwbHVnaW5DbGFzc2VzO1xuXG4gIGF3YWl0IGxvZ1N0YXJ0dXBJbmZvKHBhcnNlZEFyZ3MpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihhcHBpdW1Ecml2ZXIpO1xuXG4gIGNvbnN0IGRyaXZlckNsYXNzZXMgPSBnZXRBY3RpdmVEcml2ZXJzKGRyaXZlckNvbmZpZywgcGFyc2VkQXJncy51c2VEcml2ZXJzKTtcbiAgY29uc3Qgc2VydmVyVXBkYXRlcnMgPSBnZXRTZXJ2ZXJVcGRhdGVycyhkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcbiAgY29uc3QgZXh0cmFNZXRob2RNYXAgPSBnZXRFeHRyYU1ldGhvZE1hcChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcblxuICAvKiogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS9iYXNlLWRyaXZlcicpLlNlcnZlck9wdHN9ICovXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQ6IHBhcnNlZEFyZ3MucG9ydCxcbiAgICBob3N0bmFtZTogcGFyc2VkQXJncy5hZGRyZXNzLFxuICAgIGFsbG93Q29yczogcGFyc2VkQXJncy5hbGxvd0NvcnMsXG4gICAgYmFzZVBhdGg6IHBhcnNlZEFyZ3MuYmFzZVBhdGgsXG4gICAgc2VydmVyVXBkYXRlcnMsXG4gICAgZXh0cmFNZXRob2RNYXAsXG4gICAgY2xpQXJnczogcGFyc2VkQXJncyxcbiAgfTtcbiAgaWYgKHBhcnNlZEFyZ3Mua2VlcEFsaXZlVGltZW91dCkge1xuICAgIHNlcnZlck9wdHMua2VlcEFsaXZlVGltZW91dCA9IHBhcnNlZEFyZ3Mua2VlcEFsaXZlVGltZW91dCAqIDEwMDA7XG4gIH1cbiAgbGV0IHNlcnZlcjtcbiAgdHJ5IHtcbiAgICBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHNlcnZlck9wdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBgQ291bGQgbm90IGNvbmZpZ3VyZSBBcHBpdW0gc2VydmVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgYSBkcml2ZXIgb3IgcGx1Z2luIHRyaWVkIGAgK1xuICAgICAgICBgdG8gdXBkYXRlIHRoZSBzZXJ2ZXIgYW5kIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgbG9nZ2VyLmRlYnVnKGVyci5zdGFjayk7XG4gICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChwYXJzZWRBcmdzLmFsbG93Q29ycykge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ1lvdSBoYXZlIGVuYWJsZWQgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBob3N0LiBCZSBjYXJlZnVsIG5vdCAnICtcbiAgICAgICAgJ3RvIHZpc2l0IHNpdGVzIHdoaWNoIGNvdWxkIG1hbGljaW91c2x5IHRyeSB0byBzdGFydCBBcHBpdW0gJyArXG4gICAgICAgICdzZXNzaW9ucyBvbiB5b3VyIG1hY2hpbmUnXG4gICAgKTtcbiAgfVxuICBhcHBpdW1Ecml2ZXIuc2VydmVyID0gc2VydmVyO1xuICB0cnkge1xuICAgIC8vIGNvbmZpZ3VyZSBhcyBub2RlIG9uIGdyaWQsIGlmIG5lY2Vzc2FyeVxuICAgIC8vIGZhbHN5IHZhbHVlcyBzaG91bGQgbm90IGNhdXNlIHRoaXMgdG8gcnVuXG4gICAgaWYgKHBhcnNlZEFyZ3Mubm9kZWNvbmZpZykge1xuICAgICAgYXdhaXQgcmVnaXN0ZXJOb2RlKFxuICAgICAgICBwYXJzZWRBcmdzLm5vZGVjb25maWcsXG4gICAgICAgIHBhcnNlZEFyZ3MuYWRkcmVzcyxcbiAgICAgICAgcGFyc2VkQXJncy5wb3J0LFxuICAgICAgICBwYXJzZWRBcmdzLmJhc2VQYXRoXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydTSUdJTlQnLCAnU0lHVEVSTSddKSB7XG4gICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgYXN5bmMgZnVuY3Rpb24gb25TaWduYWwoKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVjZWl2ZWQgJHtzaWduYWx9IC0gc2h1dHRpbmcgZG93bmApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwaXVtRHJpdmVyLmRlbGV0ZUFsbFNlc3Npb25zKHtcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICByZWFzb246IGBUaGUgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgJHtzaWduYWx9IHNpZ25hbGAsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9nU2VydmVyUG9ydChwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCk7XG4gIGRyaXZlckNvbmZpZy5wcmludCgpO1xuICBwbHVnaW5Db25maWcucHJpbnQoWy4uLnBsdWdpbkNsYXNzZXMudmFsdWVzKCldKTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuXG4vLyBOT1RFOiB0aGlzIGlzIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXQgZm9yIGFueSBzY3JpcHRzIHJlZmVyZW5jaW5nIGBtYWluLmpzYCBkaXJlY3RseVxuLy8gKG1vcmUgc3BlY2lmaWNhbGx5LCBgYnVpbGQvbGliL21haW4uanNgKVxuLy8gdGhlIGV4ZWN1dGFibGUgaXMgbm93IGAuLi9pbmRleC5qc2AsIHNvIHRoYXQgbW9kdWxlIHdpbGwgdHlwaWNhbGx5IGJlIGByZXF1aXJlLm1haW5gLlxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG4vLyBldmVyeXRoaW5nIGJlbG93IGhlcmUgaXMgaW50ZW5kZWQgdG8gYmUgYSBwdWJsaWMgQVBJLlxuZXhwb3J0IHtyZWFkQ29uZmlnRmlsZX0gZnJvbSAnLi9jb25maWctZmlsZSc7XG5leHBvcnQge2ZpbmFsaXplU2NoZW1hLCBnZXRTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuZXhwb3J0IHttYWluLCBpbml0LCByZXNvbHZlQXBwaXVtSG9tZX07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyQ2xhc3N9IERyaXZlckNsYXNzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luQ2xhc3N9IFBsdWdpbkNsYXNzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5XaXRoU2VydmVyU3ViY29tbWFuZH0gV2l0aFNlcnZlclN1YmNvbW1hbmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vZXh0ZW5zaW9uJykuRHJpdmVyTmFtZU1hcH0gRHJpdmVyTmFtZU1hcFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHRlbnNpb24nKS5QbHVnaW5OYW1lTWFwfSBQbHVnaW5OYW1lTWFwXG4gKi9cblxuLyoqXG4gKiBMaXRlcmFsbHkgYW4gZW1wdHkgb2JqZWN0XG4gKiBAdHlwZWRlZiB7IHt9IH0gRXh0Q29tbWFuZEluaXRSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlcnZlckluaXREYXRhXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9hcHBpdW0nKS5BcHBpdW1Ecml2ZXJ9IGFwcGl1bURyaXZlciAtIFRoZSBBcHBpdW0gZHJpdmVyXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuUGFyc2VkQXJnc30gcGFyc2VkQXJncyAtIFRoZSBwYXJzZWQgYXJndW1lbnRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7U2VydmVySW5pdERhdGEgJiBpbXBvcnQoJy4vZXh0ZW5zaW9uJykuRXh0ZW5zaW9uQ29uZmlnc30gU2VydmVySW5pdFJlc3VsdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuQXJnczxUPn0gQXJnc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuUGFyc2VkQXJnczxUPn0gUGFyc2VkQXJnc1xuICovXG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVB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
336
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlQXBwaXVtSG9tZSIsImVudiIsInByZWZsaWdodENoZWNrcyIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJjaGVja05vZGVPayIsImNoZWNrTnBtT2siLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dCdWlsZEluZm8iLCJwcm9jZXNzIiwiZXhpdCIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwidmFsaWRhdGUiLCJ0bXBEaXIiLCJ2YWxpZGF0ZVRtcERpciIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsInJlZCIsImxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyIsImluZm8iLCJpbnNwZWN0IiwibG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmciLCJjYXBzIiwibG9nU3RhcnR1cEluZm8iLCJ3ZWxjb21lIiwiQVBQSVVNX1ZFUiIsImFwcGl1bVJldiIsImdldEdpdFJldiIsInNob3dBcmdzIiwiZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MiLCJfIiwic2l6ZSIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwibG9nU2VydmVyUG9ydCIsImFkZHJlc3MiLCJwb3J0IiwibG9nTWVzc2FnZSIsImdldFNlcnZlclVwZGF0ZXJzIiwiZHJpdmVyQ2xhc3NlcyIsInBsdWdpbkNsYXNzZXMiLCJjb21wYWN0IiwibWFwIiwia2V5cyIsImdldEV4dHJhTWV0aG9kTWFwIiwicmVkdWNlIiwia2xhc3MiLCJuZXdNZXRob2RNYXAiLCJhcmVTZXJ2ZXJDb21tYW5kQXJncyIsInN1YmNvbW1hbmQiLCJTRVJWRVJfU1VCQ09NTUFORCIsImluaXQiLCJhcHBpdW1Ib21lIiwiYWRqdXN0Tm9kZVBhdGgiLCJkcml2ZXJDb25maWciLCJwbHVnaW5Db25maWciLCJsb2FkRXh0ZW5zaW9ucyIsInBhcnNlciIsImdldFBhcnNlciIsInByZUNvbmZpZ0FyZ3MiLCJwYXJzZUFyZ3MiLCJjb25maWdSZXN1bHQiLCJyZWFkQ29uZmlnRmlsZSIsImNvbmZpZ0ZpbGUiLCJlcnJvcnMiLCJFcnJvciIsImZpbGVwYXRoIiwicmVhc29uIiwiZGVmYXVsdHMiLCJnZXREZWZhdWx0c0ZvclNjaGVtYSIsInNlcnZlckFyZ3MiLCJkZWZhdWx0c0RlZXAiLCJjb25maWciLCJzZXJ2ZXIiLCJzaG93Q29uZmlnIiwibG9nc2lua0luaXQiLCJsb2dGaWx0ZXJzIiwiaXNzdWVzIiwicnVsZXMiLCJsb2dGYWN0b3J5IiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3YXJuIiwidXRpbCIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImFwcGl1bURyaXZlciIsIkFwcGl1bURyaXZlciIsInBhcnNlZEFyZ3MiLCJleHRlbnNpb25Db21tYW5kQXJncyIsIkRSSVZFUl9UWVBFIiwicnVuRXh0ZW5zaW9uQ29tbWFuZCIsIlBMVUdJTl9UWVBFIiwibWFpbiIsImdldEFjdGl2ZVBsdWdpbnMiLCJ1c2VQbHVnaW5zIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwibWFrZVJvdXRlciIsImdldEFjdGl2ZURyaXZlcnMiLCJ1c2VEcml2ZXJzIiwic2VydmVyVXBkYXRlcnMiLCJleHRyYU1ldGhvZE1hcCIsInNlcnZlck9wdHMiLCJob3N0bmFtZSIsImFsbG93Q29ycyIsImJhc2VQYXRoIiwiY2xpQXJncyIsImtlZXBBbGl2ZVRpbWVvdXQiLCJiYXNlU2VydmVyIiwiZGVidWciLCJzdGFjayIsIm5vZGVjb25maWciLCJyZWdpc3Rlck5vZGUiLCJjbG9zZSIsInNpZ25hbCIsIm9uY2UiLCJvblNpZ25hbCIsImRlbGV0ZUFsbFNlc3Npb25zIiwiZm9yY2UiLCJlIiwicHJpbnQiLCJ2YWx1ZXMiLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHtpbml0IGFzIGxvZ3NpbmtJbml0fSBmcm9tICcuL2xvZ3NpbmsnOyAvLyB0aGlzIGltcG9ydCBuZWVkcyB0byBjb21lIGZpcnN0IHNpbmNlIGl0IHNldHMgdXAgZ2xvYmFsIG5wbWxvZ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7IC8vIGxvZ2dlciBuZWVkcyB0byByZW1haW4gc2Vjb25kXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQge3JvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyLCBzZXJ2ZXIgYXMgYmFzZVNlcnZlcn0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQge2xvZ2dlciBhcyBsb2dGYWN0b3J5LCB1dGlsLCBlbnZ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2FzeW5jaWZ5fSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtBcHBpdW1Ecml2ZXJ9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCB7cnVuRXh0ZW5zaW9uQ29tbWFuZH0gZnJvbSAnLi9jbGkvZXh0ZW5zaW9uJztcbmltcG9ydCB7Z2V0UGFyc2VyfSBmcm9tICcuL2NsaS9wYXJzZXInO1xuaW1wb3J0IHtcbiAgQVBQSVVNX1ZFUixcbiAgY2hlY2tOb2RlT2ssXG4gIGdldEdpdFJldixcbiAgZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MsXG4gIHNob3dDb25maWcsXG4gIHNob3dCdWlsZEluZm8sXG4gIHZhbGlkYXRlVG1wRGlyLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucyxcbiAgY2hlY2tOcG1Payxcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtyZWFkQ29uZmlnRmlsZX0gZnJvbSAnLi9jb25maWctZmlsZSc7XG5pbXBvcnQge2xvYWRFeHRlbnNpb25zLCBnZXRBY3RpdmVQbHVnaW5zLCBnZXRBY3RpdmVEcml2ZXJzfSBmcm9tICcuL2V4dGVuc2lvbic7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSwgU0VSVkVSX1NVQkNPTU1BTkR9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCByZWdpc3Rlck5vZGUgZnJvbSAnLi9ncmlkLXJlZ2lzdGVyJztcbmltcG9ydCB7Z2V0RGVmYXVsdHNGb3JTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHtpbnNwZWN0LCBhZGp1c3ROb2RlUGF0aH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IHtyZXNvbHZlQXBwaXVtSG9tZX0gPSBlbnY7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7UGFyc2VkQXJnc30gYXJnc1xuICogQHBhcmFtIHtib29sZWFufSBbdGhyb3dJbnN0ZWFkT2ZFeGl0XVxuICovXG5hc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRDaGVja3MoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGF3YWl0IGNoZWNrTnBtT2soKTtcbiAgICBpZiAoYXJncy5sb25nU3RhY2t0cmFjZSkge1xuICAgICAgcmVxdWlyZSgnbG9uZ2pvaG4nKS5hc3luY190cmFjZV9saW1pdCA9IC0xO1xuICAgIH1cbiAgICBpZiAoYXJncy5zaG93QnVpbGRJbmZvKSB7XG4gICAgICBhd2FpdCBzaG93QnVpbGRJbmZvKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIHdhcm5Ob2RlRGVwcmVjYXRpb25zKCk7XG5cbiAgICB2YWxpZGF0ZShhcmdzKTtcblxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgYXdhaXQgdmFsaWRhdGVUbXBEaXIoYXJncy50bXBEaXIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLnJlZCk7XG4gICAgaWYgKHRocm93SW5zdGVhZE9mRXhpdCkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJnc30gYXJnc1xuICovXG5mdW5jdGlvbiBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcmdzWydkZWZhdWx0Q2FwYWJpbGl0aWVzJ119IGNhcHNcbiAqL1xuZnVuY3Rpb24gbG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmcoY2Fwcykge1xuICBsb2dnZXIuaW5mbyhcbiAgICAnRGVmYXVsdCBjYXBhYmlsaXRpZXMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaCByZXF1ZXN0ICcgK1xuICAgICAgJ3VubGVzcyBvdmVycmlkZGVuIGJ5IGRlc2lyZWQgY2FwYWJpbGl0aWVzOidcbiAgKTtcbiAgaW5zcGVjdChjYXBzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IGFyZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8oYXJncykge1xuICBsZXQgd2VsY29tZSA9IGBXZWxjb21lIHRvIEFwcGl1bSB2JHtBUFBJVU1fVkVSfWA7XG4gIGxldCBhcHBpdW1SZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgaWYgKGFwcGl1bVJldikge1xuICAgIHdlbGNvbWUgKz0gYCAoUkVWICR7YXBwaXVtUmV2fSlgO1xuICB9XG4gIGxvZ2dlci5pbmZvKHdlbGNvbWUpO1xuXG4gIGxldCBzaG93QXJncyA9IGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKGFyZ3MpO1xuICBpZiAoXy5zaXplKHNob3dBcmdzKSkge1xuICAgIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyhzaG93QXJncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gIH1cbiAgLy8gVE9ETzogYnJpbmcgYmFjayBsb2dsZXZlbCByZXBvcnRpbmcgYmVsb3cgb25jZSBsb2dnZXIgaXMgZmx1c2hlZCBvdXRcbiAgLy8gbG9nZ2VyLmluZm8oJ0NvbnNvbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5jb25zb2xlLmxldmVsKTtcbiAgLy8gaWYgKGxvZ2dlci50cmFuc3BvcnRzLmZpbGUpIHtcbiAgLy8gICBsb2dnZXIuaW5mbygnRmlsZSBMb2dMZXZlbDogJyArIGxvZ2dlci50cmFuc3BvcnRzLmZpbGUubGV2ZWwpO1xuICAvLyB9XG59XG5cbi8qKlxuICogTG9ncyB0aGUgYWRkcmVzcyBhbmQgcG9ydCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvblxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBBZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFBvcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0KGFkZHJlc3MsIHBvcnQpIHtcbiAgbGV0IGxvZ01lc3NhZ2UgPSBgQXBwaXVtIFJFU1QgaHR0cCBpbnRlcmZhY2UgbGlzdGVuZXIgc3RhcnRlZCBvbiBgICsgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldHMgYSBsaXN0IG9mIGB1cGRhdGVTZXJ2ZXJgIGZ1bmN0aW9ucyBmcm9tIGFsbCBleHRlbnNpb25zXG4gKiBAcGFyYW0ge0RyaXZlck5hbWVNYXB9IGRyaXZlckNsYXNzZXNcbiAqIEBwYXJhbSB7UGx1Z2luTmFtZU1hcH0gcGx1Z2luQ2xhc3Nlc1xuICogQHJldHVybnMge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlVwZGF0ZVNlcnZlckNhbGxiYWNrW119XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIF8uY29tcGFjdChfLm1hcChbLi4uZHJpdmVyQ2xhc3Nlcy5rZXlzKCksIC4uLnBsdWdpbkNsYXNzZXMua2V5cygpXSwgJ3VwZGF0ZVNlcnZlcicpKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGJpZyBgTWV0aG9kTWFwYCBmcm9tIGFsbCB0aGUgbGl0dGxlIGBNZXRob2RNYXBgcyBpbiB0aGUgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJOYW1lTWFwfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbk5hbWVNYXB9IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5NZXRob2RNYXB9XG4gKi9cbmZ1bmN0aW9uIGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIFsuLi5kcml2ZXJDbGFzc2VzLmtleXMoKSwgLi4ucGx1Z2luQ2xhc3Nlcy5rZXlzKCldLnJlZHVjZShcbiAgICAobWFwLCBrbGFzcykgPT4gKHtcbiAgICAgIC4uLm1hcCxcbiAgICAgIC4uLihrbGFzcy5uZXdNZXRob2RNYXAgPz8ge30pLFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHBhcmFtIHtBcmdzPFQ+fSBhcmdzXG4gKiBAcmV0dXJucyB7YXJncyBpcyBBcmdzPFdpdGhTZXJ2ZXJTdWJjb21tYW5kPn1cbiAqL1xuZnVuY3Rpb24gYXJlU2VydmVyQ29tbWFuZEFyZ3MoYXJncykge1xuICByZXR1cm4gYXJncy5zdWJjb21tYW5kID09PSBTRVJWRVJfU1VCQ09NTUFORDtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBBcHBpdW0sIGJ1dCBkb2VzIG5vdCBzdGFydCB0aGUgc2VydmVyLlxuICpcbiAqIFVzZSB0aGlzIHRvIGdldCBhdCB0aGUgY29uZmlndXJhdGlvbiBzY2hlbWEuXG4gKlxuICogSWYgYGFyZ3NgIGNvbnRhaW5zIGEgbm9uLWVtcHR5IGBzdWJjb21tYW5kYCB3aGljaCBpcyBub3QgYHNlcnZlcmAsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gW2FyZ3NdIC0gUGFydGlhbCBhcmdzIChwcm9nYW1tYXRpYyB1c2FnZSBvbmx5KVxuICogQHJldHVybnMge1Byb21pc2U8U2VydmVySW5pdFJlc3VsdCB8IEV4dENvbW1hbmRJbml0UmVzdWx0Pn1cbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2luaXQsIGdldFNjaGVtYX0gZnJvbSAnYXBwaXVtJztcbiAqIGNvbnN0IG9wdGlvbnMgPSB7fTsgLy8gY29uZmlnIG9iamVjdFxuICogYXdhaXQgaW5pdChvcHRpb25zKTtcbiAqIGNvbnN0IHNjaGVtYSA9IGdldFNjaGVtYSgpOyAvLyBlbnRpcmUgY29uZmlnIHNjaGVtYSBpbmNsdWRpbmcgcGx1Z2lucyBhbmQgZHJpdmVyc1xuICovXG5hc3luYyBmdW5jdGlvbiBpbml0KGFyZ3MpIHtcbiAgY29uc3QgYXBwaXVtSG9tZSA9IGFyZ3M/LmFwcGl1bUhvbWUgPz8gKGF3YWl0IHJlc29sdmVBcHBpdW1Ib21lKCkpO1xuXG4gIGFkanVzdE5vZGVQYXRoKCk7XG5cbiAgY29uc3Qge2RyaXZlckNvbmZpZywgcGx1Z2luQ29uZmlnfSA9IGF3YWl0IGxvYWRFeHRlbnNpb25zKGFwcGl1bUhvbWUpO1xuXG4gIGNvbnN0IHBhcnNlciA9IGdldFBhcnNlcigpO1xuICBsZXQgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7QXJnczxUPn0gKi9cbiAgbGV0IHByZUNvbmZpZ0FyZ3M7XG5cbiAgaWYgKGFyZ3MpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgY29udGFpbmluZyBwYWNrYWdlIGluc3RlYWQgb2YgcnVubmluZyBhcyBhIENMSSBwcm9jZXNzLFxuICAgIC8vIHRoYXQgcGFja2FnZSBtaWdodCBub3QgYXBwcmVjaWF0ZSB1cyBjYWxsaW5nICdwcm9jZXNzLmV4aXQnIHdpbGx5LVxuICAgIC8vIG5pbGx5LCBzbyBnaXZlIGl0IHRoZSBvcHRpb24gdG8gaGF2ZSB1cyB0aHJvdyBpbnN0ZWFkIG9mIGV4aXRcbiAgICBpZiAoYXJncy50aHJvd0luc3RlYWRPZkV4aXQpIHtcbiAgICAgIHRocm93SW5zdGVhZE9mRXhpdCA9IHRydWU7XG4gICAgICAvLyBidXQgcmVtb3ZlIGl0IHNpbmNlIGl0J3Mgbm90IGEgcmVhbCBzZXJ2ZXIgYXJnIHBlciBzZVxuICAgICAgZGVsZXRlIGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0O1xuICAgIH1cbiAgICBwcmVDb25maWdBcmdzID0gey4uLmFyZ3MsIHN1YmNvbW1hbmQ6IGFyZ3Muc3ViY29tbWFuZCA/PyBTRVJWRVJfU1VCQ09NTUFORH07XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHBhcnNlIGZyb20gQ0xJXG4gICAgcHJlQ29uZmlnQXJncyA9IC8qKiBAdHlwZSB7QXJnczxUPn0gKi8gKHBhcnNlci5wYXJzZUFyZ3MoKSk7XG4gIH1cblxuICBjb25zdCBjb25maWdSZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShwcmVDb25maWdBcmdzLmNvbmZpZ0ZpbGUpO1xuXG4gIGlmICghXy5pc0VtcHR5KGNvbmZpZ1Jlc3VsdC5lcnJvcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9ycyBpbiBjb25maWcgZmlsZSAke2NvbmZpZ1Jlc3VsdC5maWxlcGF0aH06XFxuICR7XG4gICAgICAgIGNvbmZpZ1Jlc3VsdC5yZWFzb24gPz8gY29uZmlnUmVzdWx0LmVycm9yc1xuICAgICAgfWBcbiAgICApO1xuICB9XG5cbiAgLy8gbWVyZ2UgY29uZmlnIGFuZCBhcHBseSBkZWZhdWx0cy5cbiAgLy8gdGhlIG9yZGVyIG9mIHByZWNlbmRlY2UgaXM6XG4gIC8vIDEuIGNvbW1hbmQgbGluZSBhcmdzXG4gIC8vIDIuIGNvbmZpZyBmaWxlXG4gIC8vIDMuIGRlZmF1bHRzIGZyb20gY29uZmlnIGZpbGUuXG4gIGlmIChhcmVTZXJ2ZXJDb21tYW5kQXJncyhwcmVDb25maWdBcmdzKSkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gZ2V0RGVmYXVsdHNGb3JTY2hlbWEoZmFsc2UpO1xuXG4gICAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICAgIGNvbnN0IHNlcnZlckFyZ3MgPSBfLmRlZmF1bHRzRGVlcChwcmVDb25maWdBcmdzLCBjb25maWdSZXN1bHQuY29uZmlnPy5zZXJ2ZXIsIGRlZmF1bHRzKTtcblxuICAgIGlmIChwcmVDb25maWdBcmdzLnNob3dDb25maWcpIHtcbiAgICAgIHNob3dDb25maWcoZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MocHJlQ29uZmlnQXJncyksIGNvbmZpZ1Jlc3VsdCwgZGVmYXVsdHMsIHNlcnZlckFyZ3MpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGF3YWl0IGxvZ3NpbmtJbml0KHNlcnZlckFyZ3MpO1xuXG4gICAgaWYgKHNlcnZlckFyZ3MubG9nRmlsdGVycykge1xuICAgICAgY29uc3Qge2lzc3VlcywgcnVsZXN9ID0gYXdhaXQgbG9nRmFjdG9yeS5sb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzKFxuICAgICAgICBzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnNcbiAgICAgICk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShpc3N1ZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGxvZyBmaWx0ZXJpbmcgcnVsZXMgY29uZmlnICcke3NlcnZlckFyZ3MubG9nRmlsdGVyc30nIGhhcyBpc3N1ZXM6IGAgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaXNzdWVzLCBudWxsLCAyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNFbXB0eShydWxlcykpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgYEZvdW5kIG5vIGxvZyBmaWx0ZXJpbmcgcnVsZXMgaW4gJyR7c2VydmVyQXJncy5sb2dGaWx0ZXJzfScuIElzIHRoYXQgZXhwZWN0ZWQ/YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYExvYWRlZCAke3V0aWwucGx1cmFsaXplKCdmaWx0ZXJpbmcgcnVsZScsIHJ1bGVzLmxlbmd0aCwgdHJ1ZSl9IGZyb20gJyR7XG4gICAgICAgICAgICBzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnNcbiAgICAgICAgICB9J2BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcHBpdW1Ecml2ZXIgPSBuZXcgQXBwaXVtRHJpdmVyKHNlcnZlckFyZ3MpO1xuICAgIC8vIHNldCB0aGUgY29uZmlnIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIG1hdGNoIGRyaXZlcnMgdG8gY2Fwc1xuICAgIGFwcGl1bURyaXZlci5kcml2ZXJDb25maWcgPSBkcml2ZXJDb25maWc7XG4gICAgYXdhaXQgcHJlZmxpZ2h0Q2hlY2tzKHNlcnZlckFyZ3MsIHRocm93SW5zdGVhZE9mRXhpdCk7XG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTZXJ2ZXJJbml0UmVzdWx0fSAqLyAoe1xuICAgICAgYXBwaXVtRHJpdmVyLFxuICAgICAgcGFyc2VkQXJnczogc2VydmVyQXJncyxcbiAgICAgIGRyaXZlckNvbmZpZyxcbiAgICAgIHBsdWdpbkNvbmZpZyxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleHRlbnNpb25Db21tYW5kQXJncyA9IC8qKiBAdHlwZSB7QXJnczxpbXBvcnQoJ2FwcGl1bS90eXBlcycpLldpdGhFeHRTdWJjb21tYW5kPn0gKi8gKFxuICAgICAgcHJlQ29uZmlnQXJnc1xuICAgICk7XG4gICAgLy8gaWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0aGUgJ2RyaXZlcicgQ0xJLCBkb24ndCBydW4gdGhlIG5vcm1hbCBzZXJ2ZXIsXG4gICAgLy8gYnV0IGluc3RlYWQgcGFzcyBjb250cm9sIHRvIHRoZSBkcml2ZXIgQ0xJXG4gICAgaWYgKHByZUNvbmZpZ0FyZ3Muc3ViY29tbWFuZCA9PT0gRFJJVkVSX1RZUEUpIHtcbiAgICAgIGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQoZXh0ZW5zaW9uQ29tbWFuZEFyZ3MsIGRyaXZlckNvbmZpZyk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChwcmVDb25maWdBcmdzLnN1YmNvbW1hbmQgPT09IFBMVUdJTl9UWVBFKSB7XG4gICAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKGV4dGVuc2lvbkNvbW1hbmRBcmdzLCBwbHVnaW5Db25maWcpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtJ3MgY29uZmlnLiAgU3RhcnRzIHNlcnZlciBpZiBhcHByb3ByaWF0ZSBhbmQgcmVzb2x2ZXMgdGhlXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgaWYgc287IG90aGVyd2lzZSByZXNvbHZlcyB3LyBgdW5kZWZpbmVkYC5cbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gW2FyZ3NdIC0gQXJndW1lbnRzIGZyb20gQ0xJIG9yIG90aGVyd2lzZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfHVuZGVmaW5lZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1haW4oYXJncykge1xuICBjb25zdCB7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBwbHVnaW5Db25maWcsIGRyaXZlckNvbmZpZ30gPSAvKiogQHR5cGUge1NlcnZlckluaXRSZXN1bHR9ICovIChcbiAgICBhd2FpdCBpbml0KGFyZ3MpXG4gICk7XG5cbiAgaWYgKCFhcHBpdW1Ecml2ZXIgfHwgIXBhcnNlZEFyZ3MgfHwgIXBsdWdpbkNvbmZpZyB8fCAhZHJpdmVyQ29uZmlnKSB7XG4gICAgLy8gaWYgdGhpcyBicmFuY2ggaXMgdGFrZW4sIHdlJ3ZlIHJ1biBhIGRpZmZlcmVudCBzdWJjb21tYW5kLCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAvLyBsZWZ0IHRvIGRvIGhlcmUuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luQ2xhc3NlcyA9IGdldEFjdGl2ZVBsdWdpbnMocGx1Z2luQ29uZmlnLCBwYXJzZWRBcmdzLnVzZVBsdWdpbnMpO1xuICAvLyBzZXQgdGhlIGFjdGl2ZSBwbHVnaW5zIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtIGZvciBjb21tYW5kc1xuICBhcHBpdW1Ecml2ZXIucGx1Z2luQ2xhc3NlcyA9IHBsdWdpbkNsYXNzZXM7XG5cbiAgYXdhaXQgbG9nU3RhcnR1cEluZm8ocGFyc2VkQXJncyk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGFwcGl1bURyaXZlcik7XG5cbiAgY29uc3QgZHJpdmVyQ2xhc3NlcyA9IGdldEFjdGl2ZURyaXZlcnMoZHJpdmVyQ29uZmlnLCBwYXJzZWRBcmdzLnVzZURyaXZlcnMpO1xuICBjb25zdCBzZXJ2ZXJVcGRhdGVycyA9IGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuICBjb25zdCBleHRyYU1ldGhvZE1hcCA9IGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL2Jhc2UtZHJpdmVyJykuU2VydmVyT3B0c30gKi9cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sXG4gICAgcG9ydDogcGFyc2VkQXJncy5wb3J0LFxuICAgIGhvc3RuYW1lOiBwYXJzZWRBcmdzLmFkZHJlc3MsXG4gICAgYWxsb3dDb3JzOiBwYXJzZWRBcmdzLmFsbG93Q29ycyxcbiAgICBiYXNlUGF0aDogcGFyc2VkQXJncy5iYXNlUGF0aCxcbiAgICBzZXJ2ZXJVcGRhdGVycyxcbiAgICBleHRyYU1ldGhvZE1hcCxcbiAgICBjbGlBcmdzOiBwYXJzZWRBcmdzLFxuICB9O1xuICBpZiAocGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0KSB7XG4gICAgc2VydmVyT3B0cy5rZWVwQWxpdmVUaW1lb3V0ID0gcGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0ICogMTAwMDtcbiAgfVxuICBsZXQgc2VydmVyO1xuICB0cnkge1xuICAgIHNlcnZlciA9IGF3YWl0IGJhc2VTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihcbiAgICAgIGBDb3VsZCBub3QgY29uZmlndXJlIEFwcGl1bSBzZXJ2ZXIuIEl0J3MgcG9zc2libGUgdGhhdCBhIGRyaXZlciBvciBwbHVnaW4gdHJpZWQgYCArXG4gICAgICAgIGB0byB1cGRhdGUgdGhlIHNlcnZlciBhbmQgZmFpbGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoZXJyLnN0YWNrKTtcbiAgICByZXR1cm4gcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgaWYgKHBhcnNlZEFyZ3MuYWxsb3dDb3JzKSB7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnWW91IGhhdmUgZW5hYmxlZCBDT1JTIHJlcXVlc3RzIGZyb20gYW55IGhvc3QuIEJlIGNhcmVmdWwgbm90ICcgK1xuICAgICAgICAndG8gdmlzaXQgc2l0ZXMgd2hpY2ggY291bGQgbWFsaWNpb3VzbHkgdHJ5IHRvIHN0YXJ0IEFwcGl1bSAnICtcbiAgICAgICAgJ3Nlc3Npb25zIG9uIHlvdXIgbWFjaGluZSdcbiAgICApO1xuICB9XG4gIGFwcGl1bURyaXZlci5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgLy8gY29uZmlndXJlIGFzIG5vZGUgb24gZ3JpZCwgaWYgbmVjZXNzYXJ5XG4gICAgLy8gZmFsc3kgdmFsdWVzIHNob3VsZCBub3QgY2F1c2UgdGhpcyB0byBydW5cbiAgICBpZiAocGFyc2VkQXJncy5ub2RlY29uZmlnKSB7XG4gICAgICBhd2FpdCByZWdpc3Rlck5vZGUoXG4gICAgICAgIHBhcnNlZEFyZ3Mubm9kZWNvbmZpZyxcbiAgICAgICAgcGFyc2VkQXJncy5hZGRyZXNzLFxuICAgICAgICBwYXJzZWRBcmdzLnBvcnQsXG4gICAgICAgIHBhcnNlZEFyZ3MuYmFzZVBhdGhcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJ10pIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCBhc3luYyBmdW5jdGlvbiBvblNpZ25hbCgpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBSZWNlaXZlZCAke3NpZ25hbH0gLSBzaHV0dGluZyBkb3duYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcHBpdW1Ecml2ZXIuZGVsZXRlQWxsU2Vzc2lvbnMoe1xuICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgIHJlYXNvbjogYFRoZSBwcm9jZXNzIGhhcyByZWNlaXZlZCAke3NpZ25hbH0gc2lnbmFsYCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGUpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2dTZXJ2ZXJQb3J0KHBhcnNlZEFyZ3MuYWRkcmVzcywgcGFyc2VkQXJncy5wb3J0KTtcbiAgZHJpdmVyQ29uZmlnLnByaW50KCk7XG4gIHBsdWdpbkNvbmZpZy5wcmludChbLi4ucGx1Z2luQ2xhc3Nlcy52YWx1ZXMoKV0pO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdCBmb3IgYW55IHNjcmlwdHMgcmVmZXJlbmNpbmcgYG1haW4uanNgIGRpcmVjdGx5XG4vLyAobW9yZSBzcGVjaWZpY2FsbHksIGBidWlsZC9saWIvbWFpbi5qc2ApXG4vLyB0aGUgZXhlY3V0YWJsZSBpcyBub3cgYC4uL2luZGV4LmpzYCwgc28gdGhhdCBtb2R1bGUgd2lsbCB0eXBpY2FsbHkgYmUgYHJlcXVpcmUubWFpbmAuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbi8vIGV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBBUEkuXG5leHBvcnQge3JlYWRDb25maWdGaWxlfSBmcm9tICcuL2NvbmZpZy1maWxlJztcbmV4cG9ydCB7ZmluYWxpemVTY2hlbWEsIGdldFNjaGVtYSwgdmFsaWRhdGV9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5leHBvcnQge21haW4sIGluaXQsIHJlc29sdmVBcHBpdW1Ib21lfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyVHlwZX0gRHJpdmVyVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW5DbGFzc30gUGx1Z2luQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLldpdGhTZXJ2ZXJTdWJjb21tYW5kfSBXaXRoU2VydmVyU3ViY29tbWFuZFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHRlbnNpb24nKS5Ecml2ZXJOYW1lTWFwfSBEcml2ZXJOYW1lTWFwXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbicpLlBsdWdpbk5hbWVNYXB9IFBsdWdpbk5hbWVNYXBcbiAqL1xuXG4vKipcbiAqIExpdGVyYWxseSBhbiBlbXB0eSBvYmplY3RcbiAqIEB0eXBlZGVmIHsge30gfSBFeHRDb21tYW5kSW5pdFJlc3VsdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VydmVySW5pdERhdGFcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuL2FwcGl1bScpLkFwcGl1bURyaXZlcn0gYXBwaXVtRHJpdmVyIC0gVGhlIEFwcGl1bSBkcml2ZXJcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5QYXJzZWRBcmdzfSBwYXJzZWRBcmdzIC0gVGhlIHBhcnNlZCBhcmd1bWVudHNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtTZXJ2ZXJJbml0RGF0YSAmIGltcG9ydCgnLi9leHRlbnNpb24nKS5FeHRlbnNpb25Db25maWdzfSBTZXJ2ZXJJbml0UmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5BcmdzPFQ+fSBBcmdzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5QYXJzZWRBcmdzPFQ+fSBQYXJzZWRBcmdzXG4gKi9cbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBV0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTTtFQUFDQTtBQUFELElBQXNCQyxZQUE1Qjs7O0FBT0EsZUFBZUMsZUFBZixDQUErQkMsSUFBL0IsRUFBcUNDLGtCQUFrQixHQUFHLEtBQTFELEVBQWlFO0VBQy9ELElBQUk7SUFDRixJQUFBQyxtQkFBQTtJQUNBLE1BQU0sSUFBQUMsa0JBQUEsR0FBTjs7SUFDQSxJQUFJSCxJQUFJLENBQUNJLGNBQVQsRUFBeUI7TUFDdkJDLE9BQU8sQ0FBQyxVQUFELENBQVAsQ0FBb0JDLGlCQUFwQixHQUF3QyxDQUFDLENBQXpDO0lBQ0Q7O0lBQ0QsSUFBSU4sSUFBSSxDQUFDTyxhQUFULEVBQXdCO01BQ3RCLE1BQU0sSUFBQUEscUJBQUEsR0FBTjtNQUNBQyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiO0lBQ0Q7O0lBQ0QsSUFBQUMsNEJBQUE7SUFFQSxJQUFBQyxnQkFBQSxFQUFTWCxJQUFUOztJQUVBLElBQUlBLElBQUksQ0FBQ1ksTUFBVCxFQUFpQjtNQUNmLE1BQU0sSUFBQUMsc0JBQUEsRUFBZWIsSUFBSSxDQUFDWSxNQUFwQixDQUFOO0lBQ0Q7RUFDRixDQWpCRCxDQWlCRSxPQUFPRSxHQUFQLEVBQVk7SUFDWkMsZUFBQSxDQUFPQyxLQUFQLENBQWFGLEdBQUcsQ0FBQ0csT0FBSixDQUFZQyxHQUF6Qjs7SUFDQSxJQUFJakIsa0JBQUosRUFBd0I7TUFDdEIsTUFBTWEsR0FBTjtJQUNEOztJQUVETixPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiO0VBQ0Q7QUFDRjs7QUFLRCxTQUFTVSx3QkFBVCxDQUFrQ25CLElBQWxDLEVBQXdDO0VBQ3RDZSxlQUFBLENBQU9LLElBQVAsQ0FBWSwwQkFBWjs7RUFDQSxJQUFBQyxjQUFBLEVBQVFyQixJQUFSO0FBQ0Q7O0FBS0QsU0FBU3NCLDZCQUFULENBQXVDQyxJQUF2QyxFQUE2QztFQUMzQ1IsZUFBQSxDQUFPSyxJQUFQLENBQ0UsK0RBQ0UsNENBRko7O0VBSUEsSUFBQUMsY0FBQSxFQUFRRSxJQUFSO0FBQ0Q7O0FBS0QsZUFBZUMsY0FBZixDQUE4QnhCLElBQTlCLEVBQW9DO0VBQ2xDLElBQUl5QixPQUFPLEdBQUksc0JBQXFCQyxrQkFBVyxFQUEvQztFQUNBLElBQUlDLFNBQVMsR0FBRyxNQUFNLElBQUFDLGlCQUFBLEdBQXRCOztFQUNBLElBQUlELFNBQUosRUFBZTtJQUNiRixPQUFPLElBQUssU0FBUUUsU0FBVSxHQUE5QjtFQUNEOztFQUNEWixlQUFBLENBQU9LLElBQVAsQ0FBWUssT0FBWjs7RUFFQSxJQUFJSSxRQUFRLEdBQUcsSUFBQUMsK0JBQUEsRUFBd0I5QixJQUF4QixDQUFmOztFQUNBLElBQUkrQixlQUFBLENBQUVDLElBQUYsQ0FBT0gsUUFBUCxDQUFKLEVBQXNCO0lBQ3BCVix3QkFBd0IsQ0FBQ1UsUUFBRCxDQUF4QjtFQUNEOztFQUNELElBQUksQ0FBQ0UsZUFBQSxDQUFFRSxPQUFGLENBQVVqQyxJQUFJLENBQUNrQyxtQkFBZixDQUFMLEVBQTBDO0lBQ3hDWiw2QkFBNkIsQ0FBQ3RCLElBQUksQ0FBQ2tDLG1CQUFOLENBQTdCO0VBQ0Q7QUFNRjs7QUFRRCxTQUFTQyxhQUFULENBQXVCQyxPQUF2QixFQUFnQ0MsSUFBaEMsRUFBc0M7RUFDcEMsSUFBSUMsVUFBVSxHQUFJLGlEQUFELEdBQXFELEdBQUVGLE9BQVEsSUFBR0MsSUFBSyxFQUF4Rjs7RUFDQXRCLGVBQUEsQ0FBT0ssSUFBUCxDQUFZa0IsVUFBWjtBQUNEOztBQVFELFNBQVNDLGlCQUFULENBQTJCQyxhQUEzQixFQUEwQ0MsYUFBMUMsRUFBeUQ7RUFDdkQsT0FBT1YsZUFBQSxDQUFFVyxPQUFGLENBQVVYLGVBQUEsQ0FBRVksR0FBRixDQUFNLENBQUMsR0FBR0gsYUFBYSxDQUFDSSxJQUFkLEVBQUosRUFBMEIsR0FBR0gsYUFBYSxDQUFDRyxJQUFkLEVBQTdCLENBQU4sRUFBMEQsY0FBMUQsQ0FBVixDQUFQO0FBQ0Q7O0FBUUQsU0FBU0MsaUJBQVQsQ0FBMkJMLGFBQTNCLEVBQTBDQyxhQUExQyxFQUF5RDtFQUN2RCxPQUFPLENBQUMsR0FBR0QsYUFBYSxDQUFDSSxJQUFkLEVBQUosRUFBMEIsR0FBR0gsYUFBYSxDQUFDRyxJQUFkLEVBQTdCLEVBQW1ERSxNQUFuRCxDQUNMLENBQUNILEdBQUQsRUFBTUksS0FBTixNQUFpQixFQUNmLEdBQUdKLEdBRFk7SUFFZixJQUFJSSxLQUFLLENBQUNDLFlBQU4sSUFBc0IsRUFBMUI7RUFGZSxDQUFqQixDQURLLEVBS0wsRUFMSyxDQUFQO0FBT0Q7O0FBT0QsU0FBU0Msb0JBQVQsQ0FBOEJqRCxJQUE5QixFQUFvQztFQUNsQyxPQUFPQSxJQUFJLENBQUNrRCxVQUFMLEtBQW9CQyw0QkFBM0I7QUFDRDs7QUFrQkQsZUFBZUMsSUFBZixDQUFvQnBELElBQXBCLEVBQTBCO0VBQ3hCLE1BQU1xRCxVQUFVLEdBQUcsQ0FBQXJELElBQUksU0FBSixJQUFBQSxJQUFJLFdBQUosWUFBQUEsSUFBSSxDQUFFcUQsVUFBTixNQUFxQixNQUFNeEQsaUJBQWlCLEVBQTVDLENBQW5CO0VBRUEsSUFBQXlELHFCQUFBO0VBRUEsTUFBTTtJQUFDQyxZQUFEO0lBQWVDO0VBQWYsSUFBK0IsTUFBTSxJQUFBQywwQkFBQSxFQUFlSixVQUFmLENBQTNDO0VBRUEsTUFBTUssTUFBTSxHQUFHLElBQUFDLGlCQUFBLEdBQWY7RUFDQSxJQUFJMUQsa0JBQWtCLEdBQUcsS0FBekI7RUFFQSxJQUFJMkQsYUFBSjs7RUFFQSxJQUFJNUQsSUFBSixFQUFVO0lBSVIsSUFBSUEsSUFBSSxDQUFDQyxrQkFBVCxFQUE2QjtNQUMzQkEsa0JBQWtCLEdBQUcsSUFBckI7TUFFQSxPQUFPRCxJQUFJLENBQUNDLGtCQUFaO0lBQ0Q7O0lBQ0QyRCxhQUFhLEdBQUcsRUFBQyxHQUFHNUQsSUFBSjtNQUFVa0QsVUFBVSxFQUFFbEQsSUFBSSxDQUFDa0QsVUFBTCxJQUFtQkM7SUFBekMsQ0FBaEI7RUFDRCxDQVZELE1BVU87SUFFTFMsYUFBYSxHQUEyQkYsTUFBTSxDQUFDRyxTQUFQLEVBQXhDO0VBQ0Q7O0VBRUQsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBQUMsMEJBQUEsRUFBZUgsYUFBYSxDQUFDSSxVQUE3QixDQUEzQjs7RUFFQSxJQUFJLENBQUNqQyxlQUFBLENBQUVFLE9BQUYsQ0FBVTZCLFlBQVksQ0FBQ0csTUFBdkIsQ0FBTCxFQUFxQztJQUNuQyxNQUFNLElBQUlDLEtBQUosQ0FDSCx5QkFBd0JKLFlBQVksQ0FBQ0ssUUFBUyxPQUM3Q0wsWUFBWSxDQUFDTSxNQUFiLElBQXVCTixZQUFZLENBQUNHLE1BQ3JDLEVBSEcsQ0FBTjtFQUtEOztFQU9ELElBQUloQixvQkFBb0IsQ0FBQ1csYUFBRCxDQUF4QixFQUF5QztJQUFBOztJQUN2QyxNQUFNUyxRQUFRLEdBQUcsSUFBQUMsNEJBQUEsRUFBcUIsS0FBckIsQ0FBakI7O0lBR0EsTUFBTUMsVUFBVSxHQUFHeEMsZUFBQSxDQUFFeUMsWUFBRixDQUFlWixhQUFmLDBCQUE4QkUsWUFBWSxDQUFDVyxNQUEzQyx5REFBOEIscUJBQXFCQyxNQUFuRCxFQUEyREwsUUFBM0QsQ0FBbkI7O0lBRUEsSUFBSVQsYUFBYSxDQUFDZSxVQUFsQixFQUE4QjtNQUM1QixJQUFBQSxrQkFBQSxFQUFXLElBQUE3QywrQkFBQSxFQUF3QjhCLGFBQXhCLENBQVgsRUFBbURFLFlBQW5ELEVBQWlFTyxRQUFqRSxFQUEyRUUsVUFBM0U7TUFDQSxPQUFPLEVBQVA7SUFDRDs7SUFFRCxNQUFNLElBQUFLLGFBQUEsRUFBWUwsVUFBWixDQUFOOztJQUVBLElBQUlBLFVBQVUsQ0FBQ00sVUFBZixFQUEyQjtNQUN6QixNQUFNO1FBQUNDLE1BQUQ7UUFBU0M7TUFBVCxJQUFrQixNQUFNQyxlQUFBLENBQVdDLGtDQUFYLENBQzVCVixVQUFVLENBQUNNLFVBRGlCLENBQTlCOztNQUdBLElBQUksQ0FBQzlDLGVBQUEsQ0FBRUUsT0FBRixDQUFVNkMsTUFBVixDQUFMLEVBQXdCO1FBQ3RCLE1BQU0sSUFBSVosS0FBSixDQUNILG1DQUFrQ0ssVUFBVSxDQUFDTSxVQUFXLGdCQUF6RCxHQUNFSyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsTUFBZixFQUF1QixJQUF2QixFQUE2QixDQUE3QixDQUZFLENBQU47TUFJRDs7TUFDRCxJQUFJL0MsZUFBQSxDQUFFRSxPQUFGLENBQVU4QyxLQUFWLENBQUosRUFBc0I7UUFDcEJoRSxlQUFBLENBQU9xRSxJQUFQLENBQ0csb0NBQW1DYixVQUFVLENBQUNNLFVBQVcsc0JBRDVEO01BR0QsQ0FKRCxNQUlPO1FBQ0w5RCxlQUFBLENBQU9LLElBQVAsQ0FDRyxVQUFTaUUsYUFBQSxDQUFLQyxTQUFMLENBQWUsZ0JBQWYsRUFBaUNQLEtBQUssQ0FBQ1EsTUFBdkMsRUFBK0MsSUFBL0MsQ0FBcUQsVUFDN0RoQixVQUFVLENBQUNNLFVBQ1osR0FISDtNQUtEO0lBQ0Y7O0lBRUQsTUFBTVcsWUFBWSxHQUFHLElBQUlDLG9CQUFKLENBQWlCbEIsVUFBakIsQ0FBckI7SUFFQWlCLFlBQVksQ0FBQ2pDLFlBQWIsR0FBNEJBLFlBQTVCO0lBQ0EsTUFBTXhELGVBQWUsQ0FBQ3dFLFVBQUQsRUFBYXRFLGtCQUFiLENBQXJCO0lBRUEsT0FBd0M7TUFDdEN1RixZQURzQztNQUV0Q0UsVUFBVSxFQUFFbkIsVUFGMEI7TUFHdENoQixZQUhzQztNQUl0Q0M7SUFKc0MsQ0FBeEM7RUFNRCxDQS9DRCxNQStDTztJQUNMLE1BQU1tQyxvQkFBb0IsR0FDeEIvQixhQURGOztJQUtBLElBQUlBLGFBQWEsQ0FBQ1YsVUFBZCxLQUE2QjBDLHNCQUFqQyxFQUE4QztNQUM1QyxNQUFNLElBQUFDLDhCQUFBLEVBQW9CRixvQkFBcEIsRUFBMENwQyxZQUExQyxDQUFOO01BQ0EsT0FBTyxFQUFQO0lBQ0Q7O0lBQ0QsSUFBSUssYUFBYSxDQUFDVixVQUFkLEtBQTZCNEMsc0JBQWpDLEVBQThDO01BQzVDLE1BQU0sSUFBQUQsOEJBQUEsRUFBb0JGLG9CQUFwQixFQUEwQ25DLFlBQTFDLENBQU47TUFDQSxPQUFPLEVBQVA7SUFDRDs7SUFFRCxPQUFPLEVBQVA7RUFDRDtBQUNGOztBQVNELGVBQWV1QyxJQUFmLENBQW9CL0YsSUFBcEIsRUFBMEI7RUFDeEIsTUFBTTtJQUFDd0YsWUFBRDtJQUFlRSxVQUFmO0lBQTJCbEMsWUFBM0I7SUFBeUNEO0VBQXpDLElBQ0osTUFBTUgsSUFBSSxDQUFDcEQsSUFBRCxDQURaOztFQUlBLElBQUksQ0FBQ3dGLFlBQUQsSUFBaUIsQ0FBQ0UsVUFBbEIsSUFBZ0MsQ0FBQ2xDLFlBQWpDLElBQWlELENBQUNELFlBQXRELEVBQW9FO0lBR2xFO0VBQ0Q7O0VBRUQsTUFBTWQsYUFBYSxHQUFHLElBQUF1RCw0QkFBQSxFQUFpQnhDLFlBQWpCLEVBQStCa0MsVUFBVSxDQUFDTyxVQUExQyxDQUF0QjtFQUVBVCxZQUFZLENBQUMvQyxhQUFiLEdBQTZCQSxhQUE3QjtFQUVBLE1BQU1qQixjQUFjLENBQUNrRSxVQUFELENBQXBCO0VBQ0EsSUFBSVEsd0JBQXdCLEdBQUcsSUFBQUMsb0NBQUEsRUFBV1gsWUFBWCxDQUEvQjtFQUVBLE1BQU1oRCxhQUFhLEdBQUcsSUFBQTRELDRCQUFBLEVBQWlCN0MsWUFBakIsRUFBK0JtQyxVQUFVLENBQUNXLFVBQTFDLENBQXRCO0VBQ0EsTUFBTUMsY0FBYyxHQUFHL0QsaUJBQWlCLENBQUNDLGFBQUQsRUFBZ0JDLGFBQWhCLENBQXhDO0VBQ0EsTUFBTThELGNBQWMsR0FBRzFELGlCQUFpQixDQUFDTCxhQUFELEVBQWdCQyxhQUFoQixDQUF4QztFQUdBLE1BQU0rRCxVQUFVLEdBQUc7SUFDakJOLHdCQURpQjtJQUVqQjdELElBQUksRUFBRXFELFVBQVUsQ0FBQ3JELElBRkE7SUFHakJvRSxRQUFRLEVBQUVmLFVBQVUsQ0FBQ3RELE9BSEo7SUFJakJzRSxTQUFTLEVBQUVoQixVQUFVLENBQUNnQixTQUpMO0lBS2pCQyxRQUFRLEVBQUVqQixVQUFVLENBQUNpQixRQUxKO0lBTWpCTCxjQU5pQjtJQU9qQkMsY0FQaUI7SUFRakJLLE9BQU8sRUFBRWxCO0VBUlEsQ0FBbkI7O0VBVUEsSUFBSUEsVUFBVSxDQUFDbUIsZ0JBQWYsRUFBaUM7SUFDL0JMLFVBQVUsQ0FBQ0ssZ0JBQVgsR0FBOEJuQixVQUFVLENBQUNtQixnQkFBWCxHQUE4QixJQUE1RDtFQUNEOztFQUNELElBQUluQyxNQUFKOztFQUNBLElBQUk7SUFDRkEsTUFBTSxHQUFHLE1BQU0sSUFBQW9DLGtCQUFBLEVBQVdOLFVBQVgsQ0FBZjtFQUNELENBRkQsQ0FFRSxPQUFPMUYsR0FBUCxFQUFZO0lBQ1pDLGVBQUEsQ0FBT0MsS0FBUCxDQUNHLGlGQUFELEdBQ0csb0RBQW1ERixHQUFHLENBQUNHLE9BQVEsRUFGcEU7O0lBSUFGLGVBQUEsQ0FBT2dHLEtBQVAsQ0FBYWpHLEdBQUcsQ0FBQ2tHLEtBQWpCOztJQUNBLE9BQU94RyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQVA7RUFDRDs7RUFFRCxJQUFJaUYsVUFBVSxDQUFDZ0IsU0FBZixFQUEwQjtJQUN4QjNGLGVBQUEsQ0FBT3FFLElBQVAsQ0FDRSxrRUFDRSw2REFERixHQUVFLDBCQUhKO0VBS0Q7O0VBQ0RJLFlBQVksQ0FBQ2QsTUFBYixHQUFzQkEsTUFBdEI7O0VBQ0EsSUFBSTtJQUdGLElBQUlnQixVQUFVLENBQUN1QixVQUFmLEVBQTJCO01BQ3pCLE1BQU0sSUFBQUMscUJBQUEsRUFDSnhCLFVBQVUsQ0FBQ3VCLFVBRFAsRUFFSnZCLFVBQVUsQ0FBQ3RELE9BRlAsRUFHSnNELFVBQVUsQ0FBQ3JELElBSFAsRUFJSnFELFVBQVUsQ0FBQ2lCLFFBSlAsQ0FBTjtJQU1EO0VBQ0YsQ0FYRCxDQVdFLE9BQU83RixHQUFQLEVBQVk7SUFDWixNQUFNNEQsTUFBTSxDQUFDeUMsS0FBUCxFQUFOO0lBQ0EsTUFBTXJHLEdBQU47RUFDRDs7RUFFRCxLQUFLLE1BQU1zRyxNQUFYLElBQXFCLENBQUMsUUFBRCxFQUFXLFNBQVgsQ0FBckIsRUFBNEM7SUFDMUM1RyxPQUFPLENBQUM2RyxJQUFSLENBQWFELE1BQWIsRUFBcUIsZUFBZUUsUUFBZixHQUEwQjtNQUM3Q3ZHLGVBQUEsQ0FBT0ssSUFBUCxDQUFhLFlBQVdnRyxNQUFPLGtCQUEvQjs7TUFDQSxJQUFJO1FBQ0YsTUFBTTVCLFlBQVksQ0FBQytCLGlCQUFiLENBQStCO1VBQ25DQyxLQUFLLEVBQUUsSUFENEI7VUFFbkNwRCxNQUFNLEVBQUcsNEJBQTJCZ0QsTUFBTztRQUZSLENBQS9CLENBQU47UUFJQSxNQUFNMUMsTUFBTSxDQUFDeUMsS0FBUCxFQUFOO1FBQ0EzRyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiO01BQ0QsQ0FQRCxDQU9FLE9BQU9nSCxDQUFQLEVBQVU7UUFDVjFHLGVBQUEsQ0FBT3FFLElBQVAsQ0FBWXFDLENBQVo7O1FBQ0FqSCxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiO01BQ0Q7SUFDRixDQWJEO0VBY0Q7O0VBRUQwQixhQUFhLENBQUN1RCxVQUFVLENBQUN0RCxPQUFaLEVBQXFCc0QsVUFBVSxDQUFDckQsSUFBaEMsQ0FBYjtFQUNBa0IsWUFBWSxDQUFDbUUsS0FBYjtFQUNBbEUsWUFBWSxDQUFDa0UsS0FBYixDQUFtQixDQUFDLEdBQUdqRixhQUFhLENBQUNrRixNQUFkLEVBQUosQ0FBbkI7RUFFQSxPQUFPakQsTUFBUDtBQUNEOztBQUtELElBQUlyRSxPQUFPLENBQUMwRixJQUFSLEtBQWlCNkIsTUFBckIsRUFBNkI7RUFDM0IsSUFBQUMsa0JBQUEsRUFBUzlCLElBQVQ7QUFDRCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"cli-transformers.d.ts","sourceRoot":"","sources":["../../../lib/schema/cli-transformers.js"],"names":[],"mappings":";IA4DO,sCAiBJ;IAOK,uCA6BL"}
1
+ {"version":3,"file":"cli-transformers.d.ts","sourceRoot":"","sources":["../../../lib/schema/cli-transformers.js"],"names":[],"mappings":";IA4DO,sCAiBJ;IAOK,uCA8BL"}
@@ -49,7 +49,7 @@ const transformers = {
49
49
  json = (0, _fs.readFileSync)(jsonOrPath, 'utf8');
50
50
  loadedFromFile = true;
51
51
  } catch (err) {
52
- if (err.code !== 'ENOENT') {
52
+ if (err.code !== 'ENOENT' && err.code !== 'ENAMETOOLONG') {
53
53
  throw err;
54
54
  }
55
55
  }
@@ -71,4 +71,4 @@ const transformers = {
71
71
  }
72
72
  };
73
73
  exports.transformers = transformers;
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUNzdkxpbmUiLCJ2YWx1ZSIsInNwbGl0IiwibWFwIiwidiIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwicGFyc2VDc3ZGaWxlIiwiZmxhdE1hcCIsInRyYW5zZm9ybWVycyIsImNzdiIsImJvZHkiLCJyZWFkRmlsZVN5bmMiLCJlcnIiLCJjb2RlIiwiQXJndW1lbnRUeXBlRXJyb3IiLCJtZXNzYWdlIiwianNvbiIsImpzb25PclBhdGgiLCJsb2FkZWRGcm9tRmlsZSIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiRXJyb3IiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImUiLCJtc2ciLCJUeXBlRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2NoZW1hL2NsaS10cmFuc2Zvcm1lcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmd1bWVudFR5cGVFcnJvcn0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY3VzdG9tIGtleXdvcmRzIGZvciBBcHBpdW0gc2NoZW1hcywgYXMgd2VsbCBhc1xuICogXCJ0cmFuc2Zvcm1lcnNcIiAoc2VlIGBhcmdUcmFuc2Zvcm1lcnNgIGJlbG93KS5cbiAqXG4gKiBDdXN0b20ga2V5d29yZHMgYXJlIGp1c3QgcHJvcGVydGllcyB0aGF0IHdpbGwgYXBwZWFyIGluIGEgc2NoZW1hIChlLmcuLFxuICogYGFwcGl1bS1jb25maWctc2NoZW1hLmpzYCkgYmV5b25kIHdoYXQgdGhlIEpTT04gU2NoZW1hIHNwZWMgb2ZmZXJzLiAgVGhlc2VcbiAqIGFyZSB1c2FibGUgYnkgZXh0ZW5zaW9ucywgYXMgd2VsbC5cbiAqL1xuXG4vKipcbiAqIFNwbGl0cyBhIENTViBzdHJpbmcgaW50byBhbiBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3N2TGluZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8qKlxuICogU3BsaXQgYSBmaWxlIGJ5IG5ld2xpbmUgdGhlbiBjYWxscyB7QGxpbmsgcGFyc2VDc3ZMaW5lfSBvbiBlYWNoIGxpbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDc3ZGaWxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgvXFxyP1xcbi8pXG4gICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5mbGF0TWFwKHBhcnNlQ3N2TGluZSk7XG59XG5cbi8qKlxuICogTmFtZXNwYWNlIGNvbnRhaW5pbmcgX3RyYW5zZm9ybWVyc18gZm9yIENMSSBhcmd1bWVudHMuICBcIlZhbGlkYXRvcnNcIiBhbmRcbiAqIFwiZm9ybWF0dGVyc1wiIGRvIG5vdCBhY3R1YWxseSBtb2RpZnkgdGhlIHZhbHVlLCBidXQgdGhlc2UgZG8uXG4gKlxuICogVXNlIGNhc2UgaXMgZm9yIHdoZW4gdGhlIGNvbmZpZyBmaWxlIGNhbiBhY2NlcHQgZS5nLiwgYSBgc3RyaW5nW11gLCBidXQgdGhlXG4gKiBDTEkgY2FuIG9ubHkgdGFrZSBhIGBzdHJpbmdgIChhcyBgYXJncGFyc2VgIHNlZW1zIHRvIGJlIGxpbWl0ZWQgaW4gdGhhdFxuICogZmFzaGlvbjsgaXQgYWxzbyBjYW5ub3QgdW5kZXJzdGFuZCBhbiBhcmd1bWVudCBoYXZpbmcgbXVsdGlwbGUgdHlwZXMpLlxuICpcbiAqIEZvciBleGFtcGxlLCB0aGUgYGNzdmAgdHJhbnNmb3JtIHRha2VzIGEgYHN0cmluZ2AgYW5kIHJldHVybnMgYSBgc3RyaW5nW11gIGJ5XG4gKiBzcGxpdHRpbmcgaXQgYnkgY29tbWEtLV9vcl8gaWYgdGhhdCBgc3RyaW5nYCBoYXBwZW5zIHRvIGJlIGFcbiAqIGZpbGVwYXRoLS1yZWFkaW5nIHRoZSBmaWxlIGFzIGEgYC5jc3ZgLlxuICpcbiAqIFRoaXMgY29udGFpbnMgc29tZSBjb3B5LXBhc3RlZCBjb2RlIGZyb20gYGxpYi9jbGkvcGFyc2VyLWhlbHBlcnMuanNgLCB3aGljaCB3YXNcbiAqIG9ibGl0ZXJhdGVkLlxuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtZXJzID0ge1xuICAvKipcbiAgICogR2l2ZW4gYSBDU1Ytc3R5bGUgc3RyaW5nIG9yIHBhdGhuYW1lLCBwYXJzZSBpdCBpbnRvIGFuIGFycmF5LlxuICAgKiBUaGUgZmlsZSBjYW4gYWxzbyBiZSBzcGxpdCBvbiBuZXdsaW5lcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGNzdjogKHZhbHVlKSA9PiB7XG4gICAgbGV0IGJvZHk7XG4gICAgLy8gc2luY2UgdGhpcyB2YWx1ZSBjb3VsZCBiZSBhIHNpbmdsZSBzdHJpbmcgKG5vIGNvbW1hcykgX29yXyBhIHBhdGhuYW1lLCB3ZSB3aWxsIG5lZWRcbiAgICAvLyB0byBhdHRlbXB0IHRvIHBhcnNlIGl0IGFzIGEgZmlsZSBfZmlyc3RfLlxuICAgIHRyeSB7XG4gICAgICBib2R5ID0gcmVhZEZpbGVTeW5jKHZhbHVlLCAndXRmOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRUeXBlRXJyb3IoYENvdWxkIG5vdCByZWFkIGZpbGUgJHtib2R5fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJvZHkgPyBwYXJzZUNzdkZpbGUoYm9keSkgOiBwYXJzZUNzdkxpbmUodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50VHlwZUVycm9yKCdNdXN0IGJlIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgZS5nLiwgXCJmb28sYmFyLGJhelwiJyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyB3aGljaCBjb3VsZCBiZSBhIHBhdGggdG8gYSBKU09OIGZpbGUgb3IgYSBKU09OIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGpzb25PclBhdGhcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGpzb246IChqc29uT3JQYXRoKSA9PiB7XG4gICAgbGV0IGpzb24gPSBqc29uT3JQYXRoO1xuICAgIGxldCBsb2FkZWRGcm9tRmlsZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyB1c2Ugc3luY2hyb25vdXMgZmlsZSBhY2Nlc3MsIGFzIGBhcmdwYXJzZWAgcHJvdmlkZXMgbm8gd2F5IG9mIGVpdGhlclxuICAgICAgLy8gYXdhaXRpbmcgb3IgdXNpbmcgY2FsbGJhY2tzLiBUaGlzIHN0ZXAgaGFwcGVucyBpbiBzdGFydHVwLCBpbiB3aGF0IGlzXG4gICAgICAvLyBlZmZlY3RpdmVseSBjb21tYW5kLWxpbmUgY29kZSwgc28gbm90aGluZyBpcyBibG9ja2VkIGluIHRlcm1zIG9mXG4gICAgICAvLyBzZXNzaW9ucywgc28gaG9sZGluZyB1cCB0aGUgZXZlbnQgbG9vcCBkb2VzIG5vdCBpbmN1ciB0aGUgdXN1YWxcbiAgICAgIC8vIGRyYXdiYWNrcy5cbiAgICAgIGpzb24gPSByZWFkRmlsZVN5bmMoanNvbk9yUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGxvYWRlZEZyb21GaWxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHVucmVhZGFibGUgZmlsZXMgZG9uJ3QgY291bnQuLi4gYnV0IG90aGVyIHByb2JsZW1zIGRvLlxuICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke18udHJ1bmNhdGUocmVzdWx0LCB7bGVuZ3RoOiAxMDB9KX0nIGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gbG9hZGVkRnJvbUZpbGVcbiAgICAgICAgPyBgVGhlIHByb3ZpZGVkIHZhbHVlIG9mICcke2pzb25PclBhdGh9JyBtdXN0IGJlIGEgdmFsaWQgSlNPTmBcbiAgICAgICAgOiBgVGhlIHByb3ZpZGVkIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKU09OYDtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bXNnfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBZ0JBLFNBQVNBLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCO0VBQzNCLE9BQU9BLEtBQUssQ0FDVEMsS0FESSxDQUNFLEdBREYsRUFFSkMsR0FGSSxDQUVDQyxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUZQLEVBR0pDLE1BSEksQ0FHR0MsT0FISCxDQUFQO0FBSUQ7O0FBT0QsU0FBU0MsWUFBVCxDQUFzQlAsS0FBdEIsRUFBNkI7RUFDM0IsT0FBT0EsS0FBSyxDQUNUQyxLQURJLENBQ0UsT0FERixFQUVKQyxHQUZJLENBRUNDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxJQUFGLEVBRlAsRUFHSkMsTUFISSxDQUdHQyxPQUhILEVBSUpFLE9BSkksQ0FJSVQsWUFKSixDQUFQO0FBS0Q7O0FBaUJNLE1BQU1VLFlBQVksR0FBRztFQU8xQkMsR0FBRyxFQUFHVixLQUFELElBQVc7SUFDZCxJQUFJVyxJQUFKOztJQUdBLElBQUk7TUFDRkEsSUFBSSxHQUFHLElBQUFDLGdCQUFBLEVBQWFaLEtBQWIsRUFBb0IsTUFBcEIsQ0FBUDtJQUNELENBRkQsQ0FFRSxPQUFPYSxHQUFQLEVBQVk7TUFDWixJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtRQUN6QixNQUFNLElBQUlDLDJCQUFKLENBQXVCLHVCQUFzQkosSUFBSyxLQUFJRSxHQUFHLENBQUNHLE9BQVEsRUFBbEUsQ0FBTjtNQUNEO0lBQ0Y7O0lBRUQsSUFBSTtNQUNGLE9BQU9MLElBQUksR0FBR0osWUFBWSxDQUFDSSxJQUFELENBQWYsR0FBd0JaLFlBQVksQ0FBQ0MsS0FBRCxDQUEvQztJQUNELENBRkQsQ0FFRSxPQUFPYSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlFLDJCQUFKLENBQXNCLHVEQUF0QixDQUFOO0lBQ0Q7RUFDRixDQXhCeUI7RUErQjFCRSxJQUFJLEVBQUdDLFVBQUQsSUFBZ0I7SUFDcEIsSUFBSUQsSUFBSSxHQUFHQyxVQUFYO0lBQ0EsSUFBSUMsY0FBYyxHQUFHLEtBQXJCOztJQUNBLElBQUk7TUFNRkYsSUFBSSxHQUFHLElBQUFMLGdCQUFBLEVBQWFNLFVBQWIsRUFBeUIsTUFBekIsQ0FBUDtNQUNBQyxjQUFjLEdBQUcsSUFBakI7SUFDRCxDQVJELENBUUUsT0FBT04sR0FBUCxFQUFZO01BRVosSUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBakIsRUFBMkI7UUFDekIsTUFBTUQsR0FBTjtNQUNEO0lBQ0Y7O0lBQ0QsSUFBSTtNQUNGLE1BQU1PLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVdMLElBQVgsQ0FBZjs7TUFDQSxJQUFJLENBQUNNLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkosTUFBaEIsQ0FBTCxFQUE4QjtRQUM1QixNQUFNLElBQUlLLEtBQUosQ0FBVyxJQUFHRixlQUFBLENBQUVHLFFBQUYsQ0FBV04sTUFBWCxFQUFtQjtVQUFDTyxNQUFNLEVBQUU7UUFBVCxDQUFuQixDQUFrQyxvQkFBaEQsQ0FBTjtNQUNEOztNQUNELE9BQU9QLE1BQVA7SUFDRCxDQU5ELENBTUUsT0FBT1EsQ0FBUCxFQUFVO01BQ1YsTUFBTUMsR0FBRyxHQUFHVixjQUFjLEdBQ3JCLDBCQUF5QkQsVUFBVyx3QkFEZixHQUVyQix5Q0FGTDtNQUdBLE1BQU0sSUFBSVksU0FBSixDQUFlLEdBQUVELEdBQUkscUJBQW9CRCxDQUFDLENBQUNaLE9BQVEsRUFBbkQsQ0FBTjtJQUNEO0VBQ0Y7QUE1RHlCLENBQXJCIn0=
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUNzdkxpbmUiLCJ2YWx1ZSIsInNwbGl0IiwibWFwIiwidiIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwicGFyc2VDc3ZGaWxlIiwiZmxhdE1hcCIsInRyYW5zZm9ybWVycyIsImNzdiIsImJvZHkiLCJyZWFkRmlsZVN5bmMiLCJlcnIiLCJjb2RlIiwiQXJndW1lbnRUeXBlRXJyb3IiLCJtZXNzYWdlIiwianNvbiIsImpzb25PclBhdGgiLCJsb2FkZWRGcm9tRmlsZSIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiRXJyb3IiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImUiLCJtc2ciLCJUeXBlRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2NoZW1hL2NsaS10cmFuc2Zvcm1lcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmd1bWVudFR5cGVFcnJvcn0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY3VzdG9tIGtleXdvcmRzIGZvciBBcHBpdW0gc2NoZW1hcywgYXMgd2VsbCBhc1xuICogXCJ0cmFuc2Zvcm1lcnNcIiAoc2VlIGBhcmdUcmFuc2Zvcm1lcnNgIGJlbG93KS5cbiAqXG4gKiBDdXN0b20ga2V5d29yZHMgYXJlIGp1c3QgcHJvcGVydGllcyB0aGF0IHdpbGwgYXBwZWFyIGluIGEgc2NoZW1hIChlLmcuLFxuICogYGFwcGl1bS1jb25maWctc2NoZW1hLmpzYCkgYmV5b25kIHdoYXQgdGhlIEpTT04gU2NoZW1hIHNwZWMgb2ZmZXJzLiAgVGhlc2VcbiAqIGFyZSB1c2FibGUgYnkgZXh0ZW5zaW9ucywgYXMgd2VsbC5cbiAqL1xuXG4vKipcbiAqIFNwbGl0cyBhIENTViBzdHJpbmcgaW50byBhbiBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3N2TGluZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8qKlxuICogU3BsaXQgYSBmaWxlIGJ5IG5ld2xpbmUgdGhlbiBjYWxscyB7QGxpbmsgcGFyc2VDc3ZMaW5lfSBvbiBlYWNoIGxpbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDc3ZGaWxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgvXFxyP1xcbi8pXG4gICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5mbGF0TWFwKHBhcnNlQ3N2TGluZSk7XG59XG5cbi8qKlxuICogTmFtZXNwYWNlIGNvbnRhaW5pbmcgX3RyYW5zZm9ybWVyc18gZm9yIENMSSBhcmd1bWVudHMuICBcIlZhbGlkYXRvcnNcIiBhbmRcbiAqIFwiZm9ybWF0dGVyc1wiIGRvIG5vdCBhY3R1YWxseSBtb2RpZnkgdGhlIHZhbHVlLCBidXQgdGhlc2UgZG8uXG4gKlxuICogVXNlIGNhc2UgaXMgZm9yIHdoZW4gdGhlIGNvbmZpZyBmaWxlIGNhbiBhY2NlcHQgZS5nLiwgYSBgc3RyaW5nW11gLCBidXQgdGhlXG4gKiBDTEkgY2FuIG9ubHkgdGFrZSBhIGBzdHJpbmdgIChhcyBgYXJncGFyc2VgIHNlZW1zIHRvIGJlIGxpbWl0ZWQgaW4gdGhhdFxuICogZmFzaGlvbjsgaXQgYWxzbyBjYW5ub3QgdW5kZXJzdGFuZCBhbiBhcmd1bWVudCBoYXZpbmcgbXVsdGlwbGUgdHlwZXMpLlxuICpcbiAqIEZvciBleGFtcGxlLCB0aGUgYGNzdmAgdHJhbnNmb3JtIHRha2VzIGEgYHN0cmluZ2AgYW5kIHJldHVybnMgYSBgc3RyaW5nW11gIGJ5XG4gKiBzcGxpdHRpbmcgaXQgYnkgY29tbWEtLV9vcl8gaWYgdGhhdCBgc3RyaW5nYCBoYXBwZW5zIHRvIGJlIGFcbiAqIGZpbGVwYXRoLS1yZWFkaW5nIHRoZSBmaWxlIGFzIGEgYC5jc3ZgLlxuICpcbiAqIFRoaXMgY29udGFpbnMgc29tZSBjb3B5LXBhc3RlZCBjb2RlIGZyb20gYGxpYi9jbGkvcGFyc2VyLWhlbHBlcnMuanNgLCB3aGljaCB3YXNcbiAqIG9ibGl0ZXJhdGVkLlxuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtZXJzID0ge1xuICAvKipcbiAgICogR2l2ZW4gYSBDU1Ytc3R5bGUgc3RyaW5nIG9yIHBhdGhuYW1lLCBwYXJzZSBpdCBpbnRvIGFuIGFycmF5LlxuICAgKiBUaGUgZmlsZSBjYW4gYWxzbyBiZSBzcGxpdCBvbiBuZXdsaW5lcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGNzdjogKHZhbHVlKSA9PiB7XG4gICAgbGV0IGJvZHk7XG4gICAgLy8gc2luY2UgdGhpcyB2YWx1ZSBjb3VsZCBiZSBhIHNpbmdsZSBzdHJpbmcgKG5vIGNvbW1hcykgX29yXyBhIHBhdGhuYW1lLCB3ZSB3aWxsIG5lZWRcbiAgICAvLyB0byBhdHRlbXB0IHRvIHBhcnNlIGl0IGFzIGEgZmlsZSBfZmlyc3RfLlxuICAgIHRyeSB7XG4gICAgICBib2R5ID0gcmVhZEZpbGVTeW5jKHZhbHVlLCAndXRmOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRUeXBlRXJyb3IoYENvdWxkIG5vdCByZWFkIGZpbGUgJHtib2R5fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJvZHkgPyBwYXJzZUNzdkZpbGUoYm9keSkgOiBwYXJzZUNzdkxpbmUodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50VHlwZUVycm9yKCdNdXN0IGJlIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgZS5nLiwgXCJmb28sYmFyLGJhelwiJyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyB3aGljaCBjb3VsZCBiZSBhIHBhdGggdG8gYSBKU09OIGZpbGUgb3IgYSBKU09OIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGpzb25PclBhdGhcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGpzb246IChqc29uT3JQYXRoKSA9PiB7XG4gICAgbGV0IGpzb24gPSBqc29uT3JQYXRoO1xuICAgIGxldCBsb2FkZWRGcm9tRmlsZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyB1c2Ugc3luY2hyb25vdXMgZmlsZSBhY2Nlc3MsIGFzIGBhcmdwYXJzZWAgcHJvdmlkZXMgbm8gd2F5IG9mIGVpdGhlclxuICAgICAgLy8gYXdhaXRpbmcgb3IgdXNpbmcgY2FsbGJhY2tzLiBUaGlzIHN0ZXAgaGFwcGVucyBpbiBzdGFydHVwLCBpbiB3aGF0IGlzXG4gICAgICAvLyBlZmZlY3RpdmVseSBjb21tYW5kLWxpbmUgY29kZSwgc28gbm90aGluZyBpcyBibG9ja2VkIGluIHRlcm1zIG9mXG4gICAgICAvLyBzZXNzaW9ucywgc28gaG9sZGluZyB1cCB0aGUgZXZlbnQgbG9vcCBkb2VzIG5vdCBpbmN1ciB0aGUgdXN1YWxcbiAgICAgIC8vIGRyYXdiYWNrcy5cbiAgICAgIGpzb24gPSByZWFkRmlsZVN5bmMoanNvbk9yUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGxvYWRlZEZyb21GaWxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHVucmVhZGFibGUgZmlsZXMgZG9uJ3QgY291bnQuXG4gICAgICAvLyBhbHNvIGBFTkFNRVRPT0xPTkdgIGNhbiBoYXBwZW4gaWYgd2UgdHJ5IHRvIG9wZW4gYSBmaWxlIHRoYXQncyBhIGh1Z2UgSlNPTiBzdHJpbmcuXG4gICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnICYmIGVyci5jb2RlICE9PSAnRU5BTUVUT09MT05HJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke18udHJ1bmNhdGUocmVzdWx0LCB7bGVuZ3RoOiAxMDB9KX0nIGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gbG9hZGVkRnJvbUZpbGVcbiAgICAgICAgPyBgVGhlIHByb3ZpZGVkIHZhbHVlIG9mICcke2pzb25PclBhdGh9JyBtdXN0IGJlIGEgdmFsaWQgSlNPTmBcbiAgICAgICAgOiBgVGhlIHByb3ZpZGVkIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKU09OYDtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bXNnfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBZ0JBLFNBQVNBLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCO0VBQzNCLE9BQU9BLEtBQUssQ0FDVEMsS0FESSxDQUNFLEdBREYsRUFFSkMsR0FGSSxDQUVDQyxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUZQLEVBR0pDLE1BSEksQ0FHR0MsT0FISCxDQUFQO0FBSUQ7O0FBT0QsU0FBU0MsWUFBVCxDQUFzQlAsS0FBdEIsRUFBNkI7RUFDM0IsT0FBT0EsS0FBSyxDQUNUQyxLQURJLENBQ0UsT0FERixFQUVKQyxHQUZJLENBRUNDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxJQUFGLEVBRlAsRUFHSkMsTUFISSxDQUdHQyxPQUhILEVBSUpFLE9BSkksQ0FJSVQsWUFKSixDQUFQO0FBS0Q7O0FBaUJNLE1BQU1VLFlBQVksR0FBRztFQU8xQkMsR0FBRyxFQUFHVixLQUFELElBQVc7SUFDZCxJQUFJVyxJQUFKOztJQUdBLElBQUk7TUFDRkEsSUFBSSxHQUFHLElBQUFDLGdCQUFBLEVBQWFaLEtBQWIsRUFBb0IsTUFBcEIsQ0FBUDtJQUNELENBRkQsQ0FFRSxPQUFPYSxHQUFQLEVBQVk7TUFDWixJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtRQUN6QixNQUFNLElBQUlDLDJCQUFKLENBQXVCLHVCQUFzQkosSUFBSyxLQUFJRSxHQUFHLENBQUNHLE9BQVEsRUFBbEUsQ0FBTjtNQUNEO0lBQ0Y7O0lBRUQsSUFBSTtNQUNGLE9BQU9MLElBQUksR0FBR0osWUFBWSxDQUFDSSxJQUFELENBQWYsR0FBd0JaLFlBQVksQ0FBQ0MsS0FBRCxDQUEvQztJQUNELENBRkQsQ0FFRSxPQUFPYSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlFLDJCQUFKLENBQXNCLHVEQUF0QixDQUFOO0lBQ0Q7RUFDRixDQXhCeUI7RUErQjFCRSxJQUFJLEVBQUdDLFVBQUQsSUFBZ0I7SUFDcEIsSUFBSUQsSUFBSSxHQUFHQyxVQUFYO0lBQ0EsSUFBSUMsY0FBYyxHQUFHLEtBQXJCOztJQUNBLElBQUk7TUFNRkYsSUFBSSxHQUFHLElBQUFMLGdCQUFBLEVBQWFNLFVBQWIsRUFBeUIsTUFBekIsQ0FBUDtNQUNBQyxjQUFjLEdBQUcsSUFBakI7SUFDRCxDQVJELENBUUUsT0FBT04sR0FBUCxFQUFZO01BR1osSUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBYixJQUF5QkQsR0FBRyxDQUFDQyxJQUFKLEtBQWEsY0FBMUMsRUFBMEQ7UUFDeEQsTUFBTUQsR0FBTjtNQUNEO0lBQ0Y7O0lBQ0QsSUFBSTtNQUNGLE1BQU1PLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVdMLElBQVgsQ0FBZjs7TUFDQSxJQUFJLENBQUNNLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkosTUFBaEIsQ0FBTCxFQUE4QjtRQUM1QixNQUFNLElBQUlLLEtBQUosQ0FBVyxJQUFHRixlQUFBLENBQUVHLFFBQUYsQ0FBV04sTUFBWCxFQUFtQjtVQUFDTyxNQUFNLEVBQUU7UUFBVCxDQUFuQixDQUFrQyxvQkFBaEQsQ0FBTjtNQUNEOztNQUNELE9BQU9QLE1BQVA7SUFDRCxDQU5ELENBTUUsT0FBT1EsQ0FBUCxFQUFVO01BQ1YsTUFBTUMsR0FBRyxHQUFHVixjQUFjLEdBQ3JCLDBCQUF5QkQsVUFBVyx3QkFEZixHQUVyQix5Q0FGTDtNQUdBLE1BQU0sSUFBSVksU0FBSixDQUFlLEdBQUVELEdBQUkscUJBQW9CRCxDQUFDLENBQUNaLE9BQVEsRUFBbkQsQ0FBTjtJQUNEO0VBQ0Y7QUE3RHlCLENBQXJCIn0=
@@ -63,4 +63,12 @@ export function pullSettings(caps: any | null): any;
63
63
  * @returns {Capabilities}
64
64
  */
65
65
  export function removeAppiumPrefixes(caps: AppiumW3CCapabilities): Capabilities;
66
+ /**
67
+ * Adjusts NODE_PATH environment variable,
68
+ * so drivers and plugins could load their peer dependencies.
69
+ * Read https://nodejs.org/api/modules.html#loading-from-the-global-folders
70
+ * for more details.
71
+ * @returns {void}
72
+ */
73
+ export function adjustNodePath(): void;
66
74
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBAiQc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AApQ1D;;;;GAIG;AACH,wCAQE;AAEF;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CAgHxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AAED;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AA5DD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBA6Tc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AA9T1D;;;;GAIG;AACH,wCAQE;AAEF;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CAgHxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AA2DD;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AArHD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB;AAYD;;;;;;GAMG;AACH,kCAFa,IAAI,CAkDhB"}