From 2e19e9c9ae7497642a636c07d818adfe25d454c2 Mon Sep 17 00:00:00 2001 From: SunriseFox Date: Thu, 27 Sep 2018 11:10:50 +0800 Subject: [PATCH] [Workaround] no longer reject promises while enqueueCommand. --- README.md | 1 + dist/client.js | 24 ++++++++++++++++++++++-- dist/command-parser.js | 2 +- dist/compression.js | 2 +- dist/imap.js | 15 +++++++++++---- dist/index.js | 2 +- dist/logger.js | 2 +- res/compression.worker.blob | 2 +- src/client.js | 5 ++++- src/imap.js | 9 ++++++++- 10 files changed, 51 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index eec94cc..e891f37 100644 --- a/README.md +++ b/README.md @@ -677,6 +677,7 @@ The IMAP client has several events you can attach to by setting a listener ### Handling fatal error event The invocation of `onerror` indicates an irrecoverable error. When `onerror` is fired, the connection is already closed, hence there's no need for further cleanup. +if no `onerror` callback is set, it will throw the error. ## Get your hands dirty diff --git a/dist/client.js b/dist/client.js index 8f58d9b..59e20b0 100644 --- a/dist/client.js +++ b/dist/client.js @@ -106,7 +106,10 @@ const DEFAULT_CLIENT_ID = exports.DEFAULT_CLIENT_ID = { clearTimeout(this._idleTimeout); // propagate the error upwards - this.onerror && this.onerror(err); + if (!this.onerror) { + throw err; + } + this.onerror(err); } // @@ -400,6 +403,23 @@ const DEFAULT_CLIENT_ID = exports.DEFAULT_CLIENT_ID = { })(); } + /** + * Delete a mailbox with the given path. + * + * DELETE details: + * https://tools.ietf.org/html/rfc3501#section-6.3.4 + * + * @param {String} path + * The path of the mailbox you would like to delete. This method will + * handle utf7 encoding for you. + * @returns {Promise} + * Promise resolves if mailbox was deleted. + */ + deleteMailbox(path) { + this.logger.debug('Deleting mailbox', path, '...'); + return this.exec({ command: 'DELETE', attributes: [(0, _emailjsUtf.imapEncode)(path)] }); + } + /** * Runs FETCH command * @@ -1032,4 +1052,4 @@ const DEFAULT_CLIENT_ID = exports.DEFAULT_CLIENT_ID = { } } exports.default = Client; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQuanMiXSwibmFtZXMiOlsiVElNRU9VVF9DT05ORUNUSU9OIiwiVElNRU9VVF9OT09QIiwiVElNRU9VVF9JRExFIiwiU1RBVEVfQ09OTkVDVElORyIsIlNUQVRFX05PVF9BVVRIRU5USUNBVEVEIiwiU1RBVEVfQVVUSEVOVElDQVRFRCIsIlNUQVRFX1NFTEVDVEVEIiwiU1RBVEVfTE9HT1VUIiwiREVGQVVMVF9DTElFTlRfSUQiLCJuYW1lIiwiQ2xpZW50IiwiY29uc3RydWN0b3IiLCJob3N0IiwicG9ydCIsIm9wdGlvbnMiLCJ0aW1lb3V0Q29ubmVjdGlvbiIsInRpbWVvdXROb29wIiwidGltZW91dElkbGUiLCJzZXJ2ZXJJZCIsIm9uY2VydCIsIm9udXBkYXRlIiwib25zZWxlY3RtYWlsYm94Iiwib25jbG9zZW1haWxib3giLCJfaG9zdCIsIl9jbGllbnRJZCIsIl9zdGF0ZSIsIl9hdXRoZW50aWNhdGVkIiwiX2NhcGFiaWxpdHkiLCJfc2VsZWN0ZWRNYWlsYm94IiwiX2VudGVyZWRJZGxlIiwiX2lkbGVUaW1lb3V0IiwiX2VuYWJsZUNvbXByZXNzaW9uIiwiZW5hYmxlQ29tcHJlc3Npb24iLCJfYXV0aCIsImF1dGgiLCJfcmVxdWlyZVRMUyIsInJlcXVpcmVUTFMiLCJfaWdub3JlVExTIiwiaWdub3JlVExTIiwiY2xpZW50Iiwib25lcnJvciIsIl9vbkVycm9yIiwiYmluZCIsImNlcnQiLCJvbmlkbGUiLCJfb25JZGxlIiwic2V0SGFuZGxlciIsInJlc3BvbnNlIiwiX3VudGFnZ2VkQ2FwYWJpbGl0eUhhbmRsZXIiLCJfdW50YWdnZWRPa0hhbmRsZXIiLCJfdW50YWdnZWRFeGlzdHNIYW5kbGVyIiwiX3VudGFnZ2VkRXhwdW5nZUhhbmRsZXIiLCJfdW50YWdnZWRGZXRjaEhhbmRsZXIiLCJjcmVhdGVMb2dnZXIiLCJsb2dMZXZlbCIsImVyciIsImNsZWFyVGltZW91dCIsImNvbm5lY3QiLCJfb3BlbkNvbm5lY3Rpb24iLCJfY2hhbmdlU3RhdGUiLCJ1cGRhdGVDYXBhYmlsaXR5IiwidXBncmFkZUNvbm5lY3Rpb24iLCJ1cGRhdGVJZCIsImxvZ2dlciIsIndhcm4iLCJtZXNzYWdlIiwibG9naW4iLCJjb21wcmVzc0Nvbm5lY3Rpb24iLCJkZWJ1ZyIsImVycm9yIiwiY2xvc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvbm5lY3Rpb25UaW1lb3V0Iiwic2V0VGltZW91dCIsIkVycm9yIiwidGhlbiIsIm9ucmVhZHkiLCJjYXRjaCIsImxvZ291dCIsImlkIiwiaW5kZXhPZiIsImNvbW1hbmQiLCJhdHRyaWJ1dGVzIiwiT2JqZWN0IiwiZW50cmllcyIsImV4ZWMiLCJsaXN0IiwibWFwIiwidmFsdWVzIiwia2V5cyIsImZpbHRlciIsIl8iLCJpIiwiX3Nob3VsZFNlbGVjdE1haWxib3giLCJwYXRoIiwiY3R4IiwicHJldmlvdXNTZWxlY3QiLCJnZXRQcmV2aW91c2x5UXVldWVkIiwicmVxdWVzdCIsInBhdGhBdHRyaWJ1dGUiLCJmaW5kIiwiYXR0cmlidXRlIiwidHlwZSIsInZhbHVlIiwic2VsZWN0TWFpbGJveCIsInF1ZXJ5IiwicmVhZE9ubHkiLCJjb25kc3RvcmUiLCJwdXNoIiwibWFpbGJveEluZm8iLCJsaXN0TmFtZXNwYWNlcyIsImxpc3RNYWlsYm94ZXMiLCJ0cmVlIiwicm9vdCIsImNoaWxkcmVuIiwibGlzdFJlc3BvbnNlIiwiZm9yRWFjaCIsImF0dHIiLCJpdGVtIiwibGVuZ3RoIiwiZGVsaW0iLCJicmFuY2giLCJfZW5zdXJlUGF0aCIsImZsYWdzIiwibGlzdGVkIiwibHN1YlJlc3BvbnNlIiwibHN1YiIsImZsYWciLCJzdWJzY3JpYmVkIiwiY3JlYXRlTWFpbGJveCIsImNvZGUiLCJsaXN0TWVzc2FnZXMiLCJzZXF1ZW5jZSIsIml0ZW1zIiwiZmFzdCIsInByZWNoZWNrIiwic2VhcmNoIiwic2V0RmxhZ3MiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJhZGQiLCJzZXQiLCJyZW1vdmUiLCJzdG9yZSIsImFjdGlvbiIsInVwbG9hZCIsImRlc3RpbmF0aW9uIiwiZGVsZXRlTWVzc2FnZXMiLCJ1c2VVaWRQbHVzIiwiYnlVaWQiLCJ1aWRFeHB1bmdlQ29tbWFuZCIsImNtZCIsImNvcHlNZXNzYWdlcyIsImh1bWFuUmVhZGFibGUiLCJtb3ZlTWVzc2FnZXMiLCJjb21wcmVzc2VkIiwieG9hdXRoMiIsInVzZXIiLCJzZW5zaXRpdmUiLCJlcnJvclJlc3BvbnNlRXhwZWN0c0VtcHR5TGluZSIsInBhc3MiLCJjYXBhYmlsaXR5IiwicGF5bG9hZCIsIkNBUEFCSUxJVFkiLCJwb3AiLCJjYXBhIiwidG9VcHBlckNhc2UiLCJ0cmltIiwiYWNjZXB0VW50YWdnZWQiLCJicmVha0lkbGUiLCJlbnF1ZXVlQ29tbWFuZCIsImVudGVySWRsZSIsInNlbmQiLCJzZWN1cmVNb2RlIiwidXBncmFkZSIsImZvcmNlZCIsImhhc0NhcGFiaWxpdHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm5yIiwiRkVUQ0giLCJzaGlmdCIsIm5ld1N0YXRlIiwiZGVsaW1pdGVyIiwibmFtZXMiLCJzcGxpdCIsImZvdW5kIiwiaiIsIl9jb21wYXJlTWFpbGJveE5hbWVzIiwic2xpY2UiLCJqb2luIiwiYSIsImIiLCJjcmVhdG9yIiwibXNncyIsImluZm8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFNQTs7QUFPQTs7OztBQUNBOzs7O0FBQ0E7O0FBUUE7Ozs7OztBQUlPLE1BQU1BLGtEQUFxQixLQUFLLElBQWhDLEMsQ0FBcUM7QUFDckMsTUFBTUMsc0NBQWUsS0FBSyxJQUExQixDLENBQStCO0FBQy9CLE1BQU1DLHNDQUFlLEtBQUssSUFBMUIsQyxDQUErQjs7QUFFL0IsTUFBTUMsOENBQW1CLENBQXpCO0FBQ0EsTUFBTUMsNERBQTBCLENBQWhDO0FBQ0EsTUFBTUMsb0RBQXNCLENBQTVCO0FBQ0EsTUFBTUMsMENBQWlCLENBQXZCO0FBQ0EsTUFBTUMsc0NBQWUsQ0FBckI7O0FBRUEsTUFBTUMsZ0RBQW9C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V0FBRixPQUFvQixPQUFwQixHQUE4QixPQUE5QixHQUF3Q3lCLENBQXpGLENBQVA7QUFDRDs7QUFFRDlJLGVBQWMrSSwwQkFBZCxFQUE2QztBQUMzQyxVQUFNckksU0FBU3FJLFFBQVEsQ0FBQyxLQUFLbkssS0FBTCxJQUFjLEVBQWYsRUFBbUJnSSxJQUFuQixJQUEyQixFQUFuQyxFQUF1QyxLQUFLMUksS0FBNUMsQ0FBZjtBQUNBLFNBQUt3QyxNQUFMLEdBQWMsS0FBS3hCLE1BQUwsQ0FBWXdCLE1BQVosR0FBcUI7QUFDakNLLGFBQU8sQ0FBQyxHQUFHaUksSUFBSixLQUFhO0FBQUUsWUFBSSwyQkFBbUIsS0FBSy9JLFFBQTVCLEVBQXNDO0FBQUVTLGlCQUFPSyxLQUFQLENBQWFpSSxJQUFiO0FBQW9CO0FBQUUsT0FEbkQ7QUFFakNDLFlBQU0sQ0FBQyxHQUFHRCxJQUFKLEtBQWE7QUFBRSxZQUFJLDBCQUFrQixLQUFLL0ksUUFBM0IsRUFBcUM7QUFBRVMsaUJBQU91SSxJQUFQLENBQVlELElBQVo7QUFBbUI7QUFBRSxPQUZoRDtBQUdqQ3JJLFlBQU0sQ0FBQyxHQUFHcUksSUFBSixLQUFhO0FBQUUsWUFBSSwwQkFBa0IsS0FBSy9JLFFBQTNCLEVBQXFDO0FBQUVTLGlCQUFPQyxJQUFQLENBQVlxSSxJQUFaO0FBQW1CO0FBQUUsT0FIaEQ7QUFJakNoSSxhQUFPLENBQUMsR0FBR2dJLElBQUosS0FBYTtBQUFFLFlBQUksMkJBQW1CLEtBQUsvSSxRQUE1QixFQUFzQztBQUFFUyxpQkFBT00sS0FBUCxDQUFhZ0ksSUFBYjtBQUFvQjtBQUFFO0FBSm5ELEtBQW5DO0FBTUQ7QUFuM0J5QjtrQkFBUDNMLE0iLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwLCBwaXBlLCB1bmlvbiwgemlwLCBmcm9tUGFpcnMsIHByb3BPciwgcGF0aE9yLCBmbGF0dGVuIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgeyBpbWFwRW5jb2RlLCBpbWFwRGVjb2RlIH0gZnJvbSAnZW1haWxqcy11dGY3J1xuaW1wb3J0IHtcbiAgcGFyc2VOQU1FU1BBQ0UsXG4gIHBhcnNlU0VMRUNULFxuICBwYXJzZUZFVENILFxuICBwYXJzZVNFQVJDSFxufSBmcm9tICcuL2NvbW1hbmQtcGFyc2VyJ1xuaW1wb3J0IHtcbiAgYnVpbGRGRVRDSENvbW1hbmQsXG4gIGJ1aWxkWE9BdXRoMlRva2VuLFxuICBidWlsZFNFQVJDSENvbW1hbmQsXG4gIGJ1aWxkU1RPUkVDb21tYW5kXG59IGZyb20gJy4vY29tbWFuZC1idWlsZGVyJ1xuXG5pbXBvcnQgY3JlYXRlRGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcidcbmltcG9ydCBJbWFwQ2xpZW50IGZyb20gJy4vaW1hcCdcbmltcG9ydCB7XG4gIExPR19MRVZFTF9FUlJPUixcbiAgTE9HX0xFVkVMX1dBUk4sXG4gIExPR19MRVZFTF9JTkZPLFxuICBMT0dfTEVWRUxfREVCVUcsXG4gIExPR19MRVZFTF9BTExcbn0gZnJvbSAnLi9jb21tb24nXG5cbmltcG9ydCB7XG4gIGNoZWNrU3BlY2lhbFVzZVxufSBmcm9tICcuL3NwZWNpYWwtdXNlJ1xuXG5leHBvcnQgY29uc3QgVElNRU9VVF9DT05ORUNUSU9OID0gOTAgKiAxMDAwIC8vIE1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgSU1BUCBncmVldGluZyBmcm9tIHRoZSBzZXJ2ZXJcbmV4cG9ydCBjb25zdCBUSU1FT1VUX05PT1AgPSA2MCAqIDEwMDAgLy8gTWlsbGlzZWNvbmRzIGJldHdlZW4gTk9PUCBjb21tYW5kcyB3aGlsZSBpZGxpbmdcbmV4cG9ydCBjb25zdCBUSU1FT1VUX0lETEUgPSA2MCAqIDEwMDAgLy8gTWlsbGlzZWNvbmRzIHVudGlsIElETEUgY29tbWFuZCBpcyBjYW5jZWxsZWRcblxuZXhwb3J0IGNvbnN0IFNUQVRFX0NPTk5FQ1RJTkcgPSAxXG5leHBvcnQgY29uc3QgU1RBVEVfTk9UX0FVVEhFTlRJQ0FURUQgPSAyXG5leHBvcnQgY29uc3QgU1RBVEVfQVVUSEVOVElDQVRFRCA9IDNcbmV4cG9ydCBjb25zdCBTVEFURV9TRUxFQ1RFRCA9IDRcbmV4cG9ydCBjb25zdCBTVEFURV9MT0dPVVQgPSA1XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSUVOVF9JRCA9IHtcbiAgbmFtZTogJ2VtYWlsanMtaW1hcC1jbGllbnQnXG59XG5cbi8qKlxuICogZW1haWxqcyBJTUFQIGNsaWVudFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbaG9zdD0nbG9jYWxob3N0J10gSG9zdG5hbWUgdG8gY29uZW5jdCB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3J0PTE0M10gUG9ydCBudW1iZXIgdG8gY29ubmVjdCB0b1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAoaG9zdCwgcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy50aW1lb3V0Q29ubmVjdGlvbiA9IFRJTUVPVVRfQ09OTkVDVElPTlxuICAgIHRoaXMudGltZW91dE5vb3AgPSBUSU1FT1VUX05PT1BcbiAgICB0aGlzLnRpbWVvdXRJZGxlID0gVElNRU9VVF9JRExFXG5cbiAgICB0aGlzLnNlcnZlcklkID0gZmFsc2UgLy8gUkZDIDI5NzEgU2VydmVyIElEIGFzIGtleSB2YWx1ZSBwYWlyc1xuXG4gICAgLy8gRXZlbnQgcGxhY2Vob2xkZXJzXG4gICAgdGhpcy5vbmNlcnQgPSBudWxsXG4gICAgdGhpcy5vbnVwZGF0ZSA9IG51bGxcbiAgICB0aGlzLm9uc2VsZWN0bWFpbGJveCA9IG51bGxcbiAgICB0aGlzLm9uY2xvc2VtYWlsYm94ID0gbnVsbFxuXG4gICAgdGhpcy5faG9zdCA9IGhvc3RcbiAgICB0aGlzLl9jbGllbnRJZCA9IHByb3BPcihERUZBVUxUX0NMSUVOVF9JRCwgJ2lkJywgb3B0aW9ucylcbiAgICB0aGlzLl9zdGF0ZSA9IGZhbHNlIC8vIEN1cnJlbnQgc3RhdGVcbiAgICB0aGlzLl9hdXRoZW50aWNhdGVkID0gZmFsc2UgLy8gSXMgdGhlIGNvbm5lY3Rpb24gYXV0aGVudGljYXRlZFxuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBbXSAvLyBMaXN0IG9mIGV4dGVuc2lvbnMgdGhlIHNlcnZlciBzdXBwb3J0c1xuICAgIHRoaXMuX3NlbGVjdGVkTWFpbGJveCA9IGZhbHNlIC8vIFNlbGVjdGVkIG1haWxib3hcbiAgICB0aGlzLl9lbnRlcmVkSWRsZSA9IGZhbHNlXG4gICAgdGhpcy5faWRsZVRpbWVvdXQgPSBmYWxzZVxuICAgIHRoaXMuX2VuYWJsZUNvbXByZXNzaW9uID0gISFvcHRpb25zLmVuYWJsZUNvbXByZXNzaW9uXG4gICAgdGhpcy5fYXV0aCA9IG9wdGlvbnMuYXV0aFxuICAgIHRoaXMuX3JlcXVpcmVUTFMgPSAhIW9wdGlvbnMucmVxdWlyZVRMU1xuICAgIHRoaXMuX2lnbm9yZVRMUyA9ICEhb3B0aW9ucy5pZ25vcmVUTFNcblxuICAgIHRoaXMuY2xpZW50ID0gbmV3IEltYXBDbGllbnQoaG9zdCwgcG9ydCwgb3B0aW9ucykgLy8gSU1BUCBjbGllbnQgb2JqZWN0XG5cbiAgICAvLyBFdmVudCBIYW5kbGVyc1xuICAgIHRoaXMuY2xpZW50Lm9uZXJyb3IgPSB0aGlzLl9vbkVycm9yLmJpbmQodGhpcylcbiAgICB0aGlzLmNsaWVudC5vbmNlcnQgPSAoY2VydCkgPT4gKHRoaXMub25jZXJ0ICYmIHRoaXMub25jZXJ0KGNlcnQpKSAvLyBhbGxvd3MgY2VydGlmaWNhdGUgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3L28gbmF0aXZlIHRscyBzdXBwb3J0XG4gICAgdGhpcy5jbGllbnQub25pZGxlID0gKCkgPT4gdGhpcy5fb25JZGxlKCkgLy8gc3RhcnQgaWRsaW5nXG5cbiAgICAvLyBEZWZhdWx0IGhhbmRsZXJzIGZvciB1bnRhZ2dlZCByZXNwb25zZXNcbiAgICB0aGlzLmNsaWVudC5zZXRIYW5kbGVyKCdjYXBhYmlsaXR5JywgKHJlc3BvbnNlKSA9PiB0aGlzLl91bnRhZ2dlZENhcGFiaWxpdHlIYW5kbGVyKHJlc3BvbnNlKSkgLy8gY2FwYWJpbGl0eSB1cGRhdGVzXG4gICAgdGhpcy5jbGllbnQuc2V0SGFuZGxlcignb2snLCAocmVzcG9uc2UpID0+IHRoaXMuX3VudGFnZ2VkT2tIYW5kbGVyKHJlc3BvbnNlKSkgLy8gbm90aWZpY2F0aW9uc1xuICAgIHRoaXMuY2xpZW50LnNldEhhbmRsZXIoJ2V4aXN0cycsIChyZXNwb25zZSkgPT4gdGhpcy5fdW50YWdnZWRFeGlzdHNIYW5kbGVyKHJlc3BvbnNlKSkgLy8gbWVzc2FnZSBjb3VudCBoYXMgY2hhbmdlZFxuICAgIHRoaXMuY2xpZW50LnNldEhhbmRsZXIoJ2V4cHVuZ2UnLCAocmVzcG9uc2UpID0+IHRoaXMuX3VudGFnZ2VkRXhwdW5nZUhhbmRsZXIocmVzcG9uc2UpKSAvLyBtZXNzYWdlIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICB0aGlzLmNsaWVudC5zZXRIYW5kbGVyKCdmZXRjaCcsIChyZXNwb25zZSkgPT4gdGhpcy5fdW50YWdnZWRGZXRjaEhhbmRsZXIocmVzcG9uc2UpKSAvLyBtZXNzYWdlIGhhcyBiZWVuIHVwZGF0ZWQgKGVnLiBmbGFnIGNoYW5nZSlcblxuICAgIC8vIEFjdGl2YXRlIGxvZ2dpbmdcbiAgICB0aGlzLmNyZWF0ZUxvZ2dlcigpXG4gICAgdGhpcy5sb2dMZXZlbCA9IHByb3BPcihMT0dfTEVWRUxfQUxMLCAnbG9nTGV2ZWwnLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBpZiB0aGUgbG93ZXItbGV2ZWwgSW1hcENsaWVudCBoYXMgZW5jb3VudGVyZWQgYW4gdW5yZWNvdmVyYWJsZVxuICAgKiBlcnJvciBkdXJpbmcgb3BlcmF0aW9uLiBDbGVhbnMgdXAgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHVwd2FyZHMuXG4gICAqL1xuICBfb25FcnJvciAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIG5vIGlkbGUgdGltZW91dCBpcyBwZW5kaW5nIGFueW1vcmVcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpXG5cbiAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIHVwd2FyZHNcbiAgICB0aGlzLm9uZXJyb3IgJiYgdGhpcy5vbmVycm9yKGVycilcbiAgfVxuXG4gIC8vXG4gIC8vXG4gIC8vIFBVQkxJQyBBUElcbiAgLy9cbiAgLy9cblxuICAvKipcbiAgICogSW5pdGlhdGUgY29ubmVjdGlvbiB0byB0aGUgSU1BUCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hlbiBsb2dpbiBwcm9jZWR1cmUgaXMgY29tcGxldGVcbiAgICovXG4gIGFzeW5jIGNvbm5lY3QgKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuQ29ubmVjdGlvbigpXG4gICAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9OT1RfQVVUSEVOVElDQVRFRClcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FwYWJpbGl0eSgpXG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVDb25uZWN0aW9uKClcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlSWQodGhpcy5fY2xpZW50SWQpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIHVwZGF0ZSBzZXJ2ZXIgaWQhJywgZXJyLm1lc3NhZ2UpXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMubG9naW4odGhpcy5fYXV0aClcbiAgICAgIGF3YWl0IHRoaXMuY29tcHJlc3NDb25uZWN0aW9uKClcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDb25uZWN0aW9uIGVzdGFibGlzaGVkLCByZWFkeSB0byByb2xsIScpXG4gICAgICB0aGlzLmNsaWVudC5vbmVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyJywgZXJyKVxuICAgICAgdGhpcy5jbG9zZShlcnIpIC8vIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoZXRoZXIgdGhpcyB3b3JrcyBvciBub3RcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIF9vcGVuQ29ubmVjdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBjb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVGltZW91dCBjb25uZWN0aW5nIHRvIHNlcnZlcicpKSwgdGhpcy50aW1lb3V0Q29ubmVjdGlvbilcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDb25uZWN0aW5nIHRvJywgdGhpcy5jbGllbnQuaG9zdCwgJzonLCB0aGlzLmNsaWVudC5wb3J0KVxuICAgICAgdGhpcy5fY2hhbmdlU3RhdGUoU1RBVEVfQ09OTkVDVElORylcbiAgICAgIHRoaXMuY2xpZW50LmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NvY2tldCBvcGVuZWQsIHdhaXRpbmcgZm9yIGdyZWV0aW5nIGZyb20gdGhlIHNlcnZlci4uLicpXG5cbiAgICAgICAgdGhpcy5jbGllbnQub25yZWFkeSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQpXG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWVudC5vbmVycm9yID0gKGVycikgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dClcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChyZWplY3QpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dvdXRcbiAgICpcbiAgICogU2VuZCBMT0dPVVQsIHRvIHdoaWNoIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgYnkgY2xvc2luZyB0aGUgY29ubmVjdGlvbi5cbiAgICogVXNlIGlzIGRpc2NvdXJhZ2VkIGlmIG5ldHdvcmsgc3RhdHVzIGlzIHVuY2xlYXIhIElmIG5ldHdvcmtzIHN0YXR1cyBpc1xuICAgKiB1bmNsZWFyLCBwbGVhc2UgdXNlICNjbG9zZSBpbnN0ZWFkIVxuICAgKlxuICAgKiBMT0dPVVQgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMS4zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNlcnZlciBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBhc3luYyBsb2dvdXQgKCkge1xuICAgIHRoaXMuX2NoYW5nZVN0YXRlKFNUQVRFX0xPR09VVClcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9nZ2luZyBvdXQuLi4nKVxuICAgIGF3YWl0IHRoaXMuY2xpZW50LmxvZ291dCgpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlLWNsb3NlcyB0aGUgY3VycmVudCBjb25uZWN0aW9uIGJ5IGNsb3NpbmcgdGhlIFRDUCBzb2NrZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNvY2tldCBpcyBjbG9zZWRcbiAgICovXG4gIGFzeW5jIGNsb3NlIChlcnIpIHtcbiAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9MT0dPVVQpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDbG9zaW5nIGNvbm5lY3Rpb24uLi4nKVxuICAgIGF3YWl0IHRoaXMuY2xpZW50LmNsb3NlKGVycilcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBJRCBjb21tYW5kLCBwYXJzZXMgSUQgcmVzcG9uc2UsIHNldHMgdGhpcy5zZXJ2ZXJJZFxuICAgKlxuICAgKiBJRCBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI5NzFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGlkIElEIGFzIEpTT04gb2JqZWN0LiBTZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjk3MSNzZWN0aW9uLTMuMyBmb3IgcG9zc2libGUgdmFsdWVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHJlc3BvbnNlIGhhcyBiZWVuIHBhcnNlZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlSWQgKGlkKSB7XG4gICAgaWYgKHRoaXMuX2NhcGFiaWxpdHkuaW5kZXhPZignSUQnKSA8IDApIHJldHVyblxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1VwZGF0aW5nIGlkLi4uJylcblxuICAgIGNvbnN0IGNvbW1hbmQgPSAnSUQnXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGlkID8gWyBmbGF0dGVuKE9iamVjdC5lbnRyaWVzKGlkKSkgXSA6IFsgbnVsbCBdXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kLCBhdHRyaWJ1dGVzIH0sICdJRCcpXG4gICAgY29uc3QgbGlzdCA9IGZsYXR0ZW4ocGF0aE9yKFtdLCBbJ3BheWxvYWQnLCAnSUQnLCAnMCcsICdhdHRyaWJ1dGVzJywgJzAnXSwgcmVzcG9uc2UpLm1hcChPYmplY3QudmFsdWVzKSlcbiAgICBjb25zdCBrZXlzID0gbGlzdC5maWx0ZXIoKF8sIGkpID0+IGkgJSAyID09PSAwKVxuICAgIGNvbnN0IHZhbHVlcyA9IGxpc3QuZmlsdGVyKChfLCBpKSA9PiBpICUgMiA9PT0gMSlcbiAgICB0aGlzLnNlcnZlcklkID0gZnJvbVBhaXJzKHppcChrZXlzLCB2YWx1ZXMpKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTZXJ2ZXIgaWQgdXBkYXRlZCEnLCB0aGlzLnNlcnZlcklkKVxuICB9XG5cbiAgX3Nob3VsZFNlbGVjdE1haWxib3ggKHBhdGgsIGN0eCkge1xuICAgIGlmICghY3R4KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ID0gdGhpcy5jbGllbnQuZ2V0UHJldmlvdXNseVF1ZXVlZChbJ1NFTEVDVCcsICdFWEFNSU5FJ10sIGN0eClcbiAgICBpZiAocHJldmlvdXNTZWxlY3QgJiYgcHJldmlvdXNTZWxlY3QucmVxdWVzdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBwYXRoQXR0cmlidXRlID0gcHJldmlvdXNTZWxlY3QucmVxdWVzdC5hdHRyaWJ1dGVzLmZpbmQoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLnR5cGUgPT09ICdTVFJJTkcnKVxuICAgICAgaWYgKHBhdGhBdHRyaWJ1dGUpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhBdHRyaWJ1dGUudmFsdWUgIT09IHBhdGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRNYWlsYm94ICE9PSBwYXRoXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTRUxFQ1Qgb3IgRVhBTUlORSB0byBvcGVuIGEgbWFpbGJveFxuICAgKlxuICAgKiBTRUxFQ1QgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4zLjFcbiAgICogRVhBTUlORSBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjMuMlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBGdWxsIHBhdGggdG8gbWFpbGJveFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGVkIG1haWxib3hcbiAgICovXG4gIGFzeW5jIHNlbGVjdE1haWxib3ggKHBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgIGNvbW1hbmQ6IG9wdGlvbnMucmVhZE9ubHkgPyAnRVhBTUlORScgOiAnU0VMRUNUJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFt7IHR5cGU6ICdTVFJJTkcnLCB2YWx1ZTogcGF0aCB9XVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvbmRzdG9yZSAmJiB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ0NPTkRTVE9SRScpID49IDApIHtcbiAgICAgIHF1ZXJ5LmF0dHJpYnV0ZXMucHVzaChbeyB0eXBlOiAnQVRPTScsIHZhbHVlOiAnQ09ORFNUT1JFJyB9XSlcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnT3BlbmluZycsIHBhdGgsICcuLi4nKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKHF1ZXJ5LCBbJ0VYSVNUUycsICdGTEFHUycsICdPSyddLCB7IGN0eDogb3B0aW9ucy5jdHggfSlcbiAgICBsZXQgbWFpbGJveEluZm8gPSBwYXJzZVNFTEVDVChyZXNwb25zZSlcblxuICAgIHRoaXMuX2NoYW5nZVN0YXRlKFNUQVRFX1NFTEVDVEVEKVxuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkTWFpbGJveCAhPT0gcGF0aCAmJiB0aGlzLm9uY2xvc2VtYWlsYm94KSB7XG4gICAgICBhd2FpdCB0aGlzLm9uY2xvc2VtYWlsYm94KHRoaXMuX3NlbGVjdGVkTWFpbGJveClcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRNYWlsYm94ID0gcGF0aFxuICAgIGlmICh0aGlzLm9uc2VsZWN0bWFpbGJveCkge1xuICAgICAgYXdhaXQgdGhpcy5vbnNlbGVjdG1haWxib3gocGF0aCwgbWFpbGJveEluZm8pXG4gICAgfVxuXG4gICAgcmV0dXJuIG1haWxib3hJbmZvXG4gIH1cblxuICAvKipcbiAgICogUnVucyBOQU1FU1BBQ0UgY29tbWFuZFxuICAgKlxuICAgKiBOQU1FU1BBQ0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM0MlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIG5hbWVzcGFjZSBvYmplY3RcbiAgICovXG4gIGFzeW5jIGxpc3ROYW1lc3BhY2VzICgpIHtcbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdOQU1FU1BBQ0UnKSA8IDApIHJldHVybiBmYWxzZVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xpc3RpbmcgbmFtZXNwYWNlcy4uLicpXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoJ05BTUVTUEFDRScsICdOQU1FU1BBQ0UnKVxuICAgIHJldHVybiBwYXJzZU5BTUVTUEFDRShyZXNwb25zZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIExJU1QgYW5kIExTVUIgY29tbWFuZHMuIFJldHJpZXZlcyBhIHRyZWUgb2YgYXZhaWxhYmxlIG1haWxib3hlc1xuICAgKlxuICAgKiBMSVNUIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy44XG4gICAqIExTVUIgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4zLjlcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCBsaXN0IG9mIG1haWxib3hlc1xuICAgKi9cbiAgYXN5bmMgbGlzdE1haWxib3hlcyAoKSB7XG4gICAgY29uc3QgdHJlZSA9IHsgcm9vdDogdHJ1ZSwgY2hpbGRyZW46IFtdIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMaXN0aW5nIG1haWxib3hlcy4uLicpXG4gICAgY29uc3QgbGlzdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogJ0xJU1QnLCBhdHRyaWJ1dGVzOiBbJycsICcqJ10gfSwgJ0xJU1QnKVxuICAgIGNvbnN0IGxpc3QgPSBwYXRoT3IoW10sIFsncGF5bG9hZCcsICdMSVNUJ10sIGxpc3RSZXNwb25zZSlcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gcHJvcE9yKFtdLCAnYXR0cmlidXRlcycsIGl0ZW0pXG4gICAgICBpZiAoYXR0ci5sZW5ndGggPCAzKSByZXR1cm5cblxuICAgICAgY29uc3QgcGF0aCA9IHBhdGhPcignJywgWycyJywgJ3ZhbHVlJ10sIGF0dHIpXG4gICAgICBjb25zdCBkZWxpbSA9IHBhdGhPcignLycsIFsnMScsICd2YWx1ZSddLCBhdHRyKVxuICAgICAgY29uc3QgYnJhbmNoID0gdGhpcy5fZW5zdXJlUGF0aCh0cmVlLCBwYXRoLCBkZWxpbSlcbiAgICAgIGJyYW5jaC5mbGFncyA9IHByb3BPcihbXSwgJzAnLCBhdHRyKS5tYXAoKHt2YWx1ZX0pID0+IHZhbHVlIHx8ICcnKVxuICAgICAgYnJhbmNoLmxpc3RlZCA9IHRydWVcbiAgICAgIGNoZWNrU3BlY2lhbFVzZShicmFuY2gpXG4gICAgfSlcblxuICAgIGNvbnN0IGxzdWJSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyh7IGNvbW1hbmQ6ICdMU1VCJywgYXR0cmlidXRlczogWycnLCAnKiddIH0sICdMU1VCJylcbiAgICBjb25zdCBsc3ViID0gcGF0aE9yKFtdLCBbJ3BheWxvYWQnLCAnTFNVQiddLCBsc3ViUmVzcG9uc2UpXG4gICAgbHN1Yi5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gcHJvcE9yKFtdLCAnYXR0cmlidXRlcycsIGl0ZW0pXG4gICAgICBpZiAoYXR0ci5sZW5ndGggPCAzKSByZXR1cm5cblxuICAgICAgY29uc3QgcGF0aCA9IHBhdGhPcignJywgWycyJywgJ3ZhbHVlJ10sIGF0dHIpXG4gICAgICBjb25zdCBkZWxpbSA9IHBhdGhPcignLycsIFsnMScsICd2YWx1ZSddLCBhdHRyKVxuICAgICAgY29uc3QgYnJhbmNoID0gdGhpcy5fZW5zdXJlUGF0aCh0cmVlLCBwYXRoLCBkZWxpbSlcbiAgICAgIHByb3BPcihbXSwgJzAnLCBhdHRyKS5tYXAoKGZsYWcgPSAnJykgPT4geyBicmFuY2guZmxhZ3MgPSB1bmlvbihicmFuY2guZmxhZ3MsIFtmbGFnXSkgfSlcbiAgICAgIGJyYW5jaC5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJlZVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1haWxib3ggd2l0aCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICpcbiAgICogQ1JFQVRFIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy4zXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gICAqICAgICBUaGUgcGF0aCBvZiB0aGUgbWFpbGJveCB5b3Ugd291bGQgbGlrZSB0byBjcmVhdGUuICBUaGlzIG1ldGhvZCB3aWxsXG4gICAqICAgICBoYW5kbGUgdXRmNyBlbmNvZGluZyBmb3IgeW91LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogICAgIFByb21pc2UgcmVzb2x2ZXMgaWYgbWFpbGJveCB3YXMgY3JlYXRlZC5cbiAgICogICAgIEluIHRoZSBldmVudCB0aGUgc2VydmVyIHNheXMgTk8gW0FMUkVBRFlFWElTVFNdLCB3ZSB0cmVhdCB0aGF0IGFzIHN1Y2Nlc3MuXG4gICAqL1xuICBhc3luYyBjcmVhdGVNYWlsYm94IChwYXRoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIG1haWxib3gnLCBwYXRoLCAnLi4uJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogJ0NSRUFURScsIGF0dHJpYnV0ZXM6IFtpbWFwRW5jb2RlKHBhdGgpXSB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ0FMUkVBRFlFWElTVFMnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgRkVUQ0ggY29tbWFuZFxuICAgKlxuICAgKiBGRVRDSCBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjQuNVxuICAgKiBDSEFOR0VEU0lOQ0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDU1MSNzZWN0aW9uLTMuM1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgcGF0aCBmb3IgdGhlIG1haWxib3ggd2hpY2ggc2hvdWxkIGJlIHNlbGVjdGVkIGZvciB0aGUgY29tbWFuZC4gU2VsZWN0cyBtYWlsYm94IGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VxdWVuY2UgU2VxdWVuY2Ugc2V0LCBlZyAxOiogZm9yIGFsbCBtZXNzYWdlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW2l0ZW1zXSBNZXNzYWdlIGRhdGEgaXRlbSBuYW1lcyBvciBtYWNyb1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBmZXRjaGVkIG1lc3NhZ2UgaW5mb1xuICAgKi9cbiAgYXN5bmMgbGlzdE1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgaXRlbXMgPSBbeyBmYXN0OiB0cnVlIH1dLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2Zyb20nLCBwYXRoLCAnLi4uJylcbiAgICBjb25zdCBjb21tYW5kID0gYnVpbGRGRVRDSENvbW1hbmQoc2VxdWVuY2UsIGl0ZW1zLCBvcHRpb25zKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKGNvbW1hbmQsICdGRVRDSCcsIHtcbiAgICAgIHByZWNoZWNrOiAoY3R4KSA9PiB0aGlzLl9zaG91bGRTZWxlY3RNYWlsYm94KHBhdGgsIGN0eCkgPyB0aGlzLnNlbGVjdE1haWxib3gocGF0aCwgeyBjdHggfSkgOiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0pXG4gICAgcmV0dXJuIHBhcnNlRkVUQ0gocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTRUFSQ0ggY29tbWFuZFxuICAgKlxuICAgKiBTRUFSQ0ggZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IFNlYXJjaCB0ZXJtc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBhcnJheSBvZiBtYXRjaGluZyBzZXEuIG9yIHVpZCBudW1iZXJzXG4gICAqL1xuICBhc3luYyBzZWFyY2ggKHBhdGgsIHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2VhcmNoaW5nIGluJywgcGF0aCwgJy4uLicpXG4gICAgY29uc3QgY29tbWFuZCA9IGJ1aWxkU0VBUkNIQ29tbWFuZChxdWVyeSwgb3B0aW9ucylcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyhjb21tYW5kLCAnU0VBUkNIJywge1xuICAgICAgcHJlY2hlY2s6IChjdHgpID0+IHRoaXMuX3Nob3VsZFNlbGVjdE1haWxib3gocGF0aCwgY3R4KSA/IHRoaXMuc2VsZWN0TWFpbGJveChwYXRoLCB7IGN0eCB9KSA6IFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gcGFyc2VTRUFSQ0gocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTVE9SRSBjb21tYW5kXG4gICAqXG4gICAqIFNUT1JFIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuNC42XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIGZvciB0aGUgbWFpbGJveCB3aGljaCBzaG91bGQgYmUgc2VsZWN0ZWQgZm9yIHRoZSBjb21tYW5kLiBTZWxlY3RzIG1haWxib3ggaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXF1ZW5jZSBNZXNzYWdlIHNlbGVjdG9yIHdoaWNoIHRoZSBmbGFnIGNoYW5nZSBpcyBhcHBsaWVkIHRvXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZsYWdzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgbW9kaWZpZXJzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdGhlIGFycmF5IG9mIG1hdGNoaW5nIHNlcS4gb3IgdWlkIG51bWJlcnNcbiAgICovXG4gIHNldEZsYWdzIChwYXRoLCBzZXF1ZW5jZSwgZmxhZ3MsIG9wdGlvbnMpIHtcbiAgICBsZXQga2V5ID0gJydcbiAgICBsZXQgbGlzdCA9IFtdXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbGFncykgfHwgdHlwZW9mIGZsYWdzICE9PSAnb2JqZWN0Jykge1xuICAgICAgbGlzdCA9IFtdLmNvbmNhdChmbGFncyB8fCBbXSlcbiAgICAgIGtleSA9ICcnXG4gICAgfSBlbHNlIGlmIChmbGFncy5hZGQpIHtcbiAgICAgIGxpc3QgPSBbXS5jb25jYXQoZmxhZ3MuYWRkIHx8IFtdKVxuICAgICAga2V5ID0gJysnXG4gICAgfSBlbHNlIGlmIChmbGFncy5zZXQpIHtcbiAgICAgIGtleSA9ICcnXG4gICAgICBsaXN0ID0gW10uY29uY2F0KGZsYWdzLnNldCB8fCBbXSlcbiAgICB9IGVsc2UgaWYgKGZsYWdzLnJlbW92ZSkge1xuICAgICAga2V5ID0gJy0nXG4gICAgICBsaXN0ID0gW10uY29uY2F0KGZsYWdzLnJlbW92ZSB8fCBbXSlcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2V0dGluZyBmbGFncyBvbicsIHNlcXVlbmNlLCAnaW4nLCBwYXRoLCAnLi4uJylcbiAgICByZXR1cm4gdGhpcy5zdG9yZShwYXRoLCBzZXF1ZW5jZSwga2V5ICsgJ0ZMQUdTJywgbGlzdCwgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIFNUT1JFIGNvbW1hbmRcbiAgICpcbiAgICogU1RPUkUgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjZcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2Ugc2VsZWN0b3Igd2hpY2ggdGhlIGZsYWcgY2hhbmdlIGlzIGFwcGxpZWQgdG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbiBTVE9SRSBtZXRob2QgdG8gY2FsbCwgZWcgXCIrRkxBR1NcIlxuICAgKiBAcGFyYW0ge0FycmF5fSBmbGFnc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBhcnJheSBvZiBtYXRjaGluZyBzZXEuIG9yIHVpZCBudW1iZXJzXG4gICAqL1xuICBhc3luYyBzdG9yZSAocGF0aCwgc2VxdWVuY2UsIGFjdGlvbiwgZmxhZ3MsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBidWlsZFNUT1JFQ29tbWFuZChzZXF1ZW5jZSwgYWN0aW9uLCBmbGFncywgb3B0aW9ucylcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyhjb21tYW5kLCAnRkVUQ0gnLCB7XG4gICAgICBwcmVjaGVjazogKGN0eCkgPT4gdGhpcy5fc2hvdWxkU2VsZWN0TWFpbGJveChwYXRoLCBjdHgpID8gdGhpcy5zZWxlY3RNYWlsYm94KHBhdGgsIHsgY3R4IH0pIDogUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9KVxuICAgIHJldHVybiBwYXJzZUZFVENIKHJlc3BvbnNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQVBQRU5EIGNvbW1hbmRcbiAgICpcbiAgICogQVBQRU5EIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy4xMVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGVzdGluYXRpb24gVGhlIG1haWxib3ggd2hlcmUgdG8gYXBwZW5kIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZFxuICAgKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zLmZsYWdzIEFueSBmbGFncyB5b3Ugd2FudCB0byBzZXQgb24gdGhlIHVwbG9hZGVkIG1lc3NhZ2UuIERlZmF1bHRzIHRvIFtcXFNlZW5dLiAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdGhlIGFycmF5IG9mIG1hdGNoaW5nIHNlcS4gb3IgdWlkIG51bWJlcnNcbiAgICovXG4gIHVwbG9hZCAoZGVzdGluYXRpb24sIG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBmbGFncyA9IHByb3BPcihbJ1xcXFxTZWVuJ10sICdmbGFncycsIG9wdGlvbnMpLm1hcCh2YWx1ZSA9PiAoeyB0eXBlOiAnYXRvbScsIHZhbHVlIH0pKVxuICAgIGxldCBjb21tYW5kID0ge1xuICAgICAgY29tbWFuZDogJ0FQUEVORCcsXG4gICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgIHsgdHlwZTogJ2F0b20nLCB2YWx1ZTogZGVzdGluYXRpb24gfSxcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogbWVzc2FnZSB9XG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1VwbG9hZGluZyBtZXNzYWdlIHRvJywgZGVzdGluYXRpb24sICcuLi4nKVxuICAgIHJldHVybiB0aGlzLmV4ZWMoY29tbWFuZClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIG1lc3NhZ2VzIGZyb20gYSBzZWxlY3RlZCBtYWlsYm94XG4gICAqXG4gICAqIEVYUFVOR0UgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjNcbiAgICogVUlEIEVYUFVOR0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDMxNSNzZWN0aW9uLTIuMVxuICAgKlxuICAgKiBJZiBwb3NzaWJsZSAoYnlVaWQ6dHJ1ZSBhbmQgVUlEUExVUyBleHRlbnNpb24gc3VwcG9ydGVkKSwgdXNlcyBVSUQgRVhQVU5HRVxuICAgKiBjb21tYW5kIHRvIGRlbGV0ZSBhIHJhbmdlIG9mIG1lc3NhZ2VzLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBFWFBVTkdFLlxuICAgKlxuICAgKiBOQiEgVGhpcyBtZXRob2QgbWlnaHQgYmUgZGVzdHJ1Y3RpdmUgLSBpZiBFWFBVTkdFIGlzIHVzZWQsIHRoZW4gYW55IG1lc3NhZ2VzXG4gICAqIHdpdGggXFxEZWxldGVkIGZsYWcgc2V0IGFyZSBkZWxldGVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIGZvciB0aGUgbWFpbGJveCB3aGljaCBzaG91bGQgYmUgc2VsZWN0ZWQgZm9yIHRoZSBjb21tYW5kLiBTZWxlY3RzIG1haWxib3ggaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXF1ZW5jZSBNZXNzYWdlIHJhbmdlIHRvIGJlIGRlbGV0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBtb2RpZmllcnNcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2VcbiAgICovXG4gIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gYWRkIFxcRGVsZXRlZCBmbGFnIHRvIHRoZSBtZXNzYWdlcyBhbmQgcnVuIEVYUFVOR0Ugb3IgVUlEIEVYUFVOR0VcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2luJywgcGF0aCwgJy4uLicpXG4gICAgY29uc3QgdXNlVWlkUGx1cyA9IG9wdGlvbnMuYnlVaWQgJiYgdGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdVSURQTFVTJykgPj0gMFxuICAgIGNvbnN0IHVpZEV4cHVuZ2VDb21tYW5kID0geyBjb21tYW5kOiAnVUlEIEVYUFVOR0UnLCBhdHRyaWJ1dGVzOiBbeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfV0gfVxuICAgIGF3YWl0IHRoaXMuc2V0RmxhZ3MocGF0aCwgc2VxdWVuY2UsIHsgYWRkOiAnXFxcXERlbGV0ZWQnIH0sIG9wdGlvbnMpXG4gICAgY29uc3QgY21kID0gdXNlVWlkUGx1cyA/IHVpZEV4cHVuZ2VDb21tYW5kIDogJ0VYUFVOR0UnXG4gICAgcmV0dXJuIHRoaXMuZXhlYyhjbWQsIG51bGwsIHtcbiAgICAgIHByZWNoZWNrOiAoY3R4KSA9PiB0aGlzLl9zaG91bGRTZWxlY3RNYWlsYm94KHBhdGgsIGN0eCkgPyB0aGlzLnNlbGVjdE1haWxib3gocGF0aCwgeyBjdHggfSkgOiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIGEgcmFuZ2Ugb2YgbWVzc2FnZXMgZnJvbSB0aGUgYWN0aXZlIG1haWxib3ggdG8gdGhlIGRlc3RpbmF0aW9uIG1haWxib3guXG4gICAqIFNpbGVudCBtZXRob2QgKHVubGVzcyBhbiBlcnJvciBvY2N1cnMpLCBieSBkZWZhdWx0IHJldHVybnMgbm8gaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIENPUFkgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjdcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2UgcmFuZ2UgdG8gYmUgY29waWVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkZXN0aW5hdGlvbiBEZXN0aW5hdGlvbiBtYWlsYm94IHBhdGhcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBtb2RpZmllcnNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ieVVpZF0gSWYgdHJ1ZSwgdXNlcyBVSUQgQ09QWSBpbnN0ZWFkIG9mIENPUFlcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2VcbiAgICovXG4gIGFzeW5jIGNvcHlNZXNzYWdlcyAocGF0aCwgc2VxdWVuY2UsIGRlc3RpbmF0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ29weWluZyBtZXNzYWdlcycsIHNlcXVlbmNlLCAnZnJvbScsIHBhdGgsICd0bycsIGRlc3RpbmF0aW9uLCAnLi4uJylcbiAgICBjb25zdCB7IGh1bWFuUmVhZGFibGUgfSA9IGF3YWl0IHRoaXMuZXhlYyh7XG4gICAgICBjb21tYW5kOiBvcHRpb25zLmJ5VWlkID8gJ1VJRCBDT1BZJyA6ICdDT1BZJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfSxcbiAgICAgICAgeyB0eXBlOiAnYXRvbScsIHZhbHVlOiBkZXN0aW5hdGlvbiB9XG4gICAgICBdXG4gICAgfSwgbnVsbCwge1xuICAgICAgcHJlY2hlY2s6IChjdHgpID0+IHRoaXMuX3Nob3VsZFNlbGVjdE1haWxib3gocGF0aCwgY3R4KSA/IHRoaXMuc2VsZWN0TWFpbGJveChwYXRoLCB7IGN0eCB9KSA6IFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gaHVtYW5SZWFkYWJsZSB8fCAnQ09QWSBjb21wbGV0ZWQnXG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYSByYW5nZSBvZiBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgbWFpbGJveCB0byB0aGUgZGVzdGluYXRpb24gbWFpbGJveC5cbiAgICogUHJlZmVycyB0aGUgTU9WRSBleHRlbnNpb24gYnV0IGlmIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2sgdG9cbiAgICogQ09QWSArIEVYUFVOR0VcbiAgICpcbiAgICogTU9WRSBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY4NTFcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2UgcmFuZ2UgdG8gYmUgbW92ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlc3RpbmF0aW9uIERlc3RpbmF0aW9uIG1haWxib3ggcGF0aFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZVxuICAgKi9cbiAgYXN5bmMgbW92ZU1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgZGVzdGluYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNb3ZpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2Zyb20nLCBwYXRoLCAndG8nLCBkZXN0aW5hdGlvbiwgJy4uLicpXG5cbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdNT1ZFJykgPT09IC0xKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byBDT1BZICsgRVhQVU5HRVxuICAgICAgYXdhaXQgdGhpcy5jb3B5TWVzc2FnZXMocGF0aCwgc2VxdWVuY2UsIGRlc3RpbmF0aW9uLCBvcHRpb25zKVxuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlTWVzc2FnZXMocGF0aCwgc2VxdWVuY2UsIG9wdGlvbnMpXG4gICAgfVxuXG4gICAgLy8gSWYgcG9zc2libGUsIHVzZSBNT1ZFXG4gICAgcmV0dXJuIHRoaXMuZXhlYyh7XG4gICAgICBjb21tYW5kOiBvcHRpb25zLmJ5VWlkID8gJ1VJRCBNT1ZFJyA6ICdNT1ZFJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfSxcbiAgICAgICAgeyB0eXBlOiAnYXRvbScsIHZhbHVlOiBkZXN0aW5hdGlvbiB9XG4gICAgICBdXG4gICAgfSwgWydPSyddLCB7XG4gICAgICBwcmVjaGVjazogKGN0eCkgPT4gdGhpcy5fc2hvdWxkU2VsZWN0TWFpbGJveChwYXRoLCBjdHgpID8gdGhpcy5zZWxlY3RNYWlsYm94KHBhdGgsIHsgY3R4IH0pIDogUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ09NUFJFU1MgY29tbWFuZFxuICAgKlxuICAgKiBDT01QUkVTUyBkZXRhaWxzOlxuICAgKiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTc4XG4gICAqL1xuICBhc3luYyBjb21wcmVzc0Nvbm5lY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fZW5hYmxlQ29tcHJlc3Npb24gfHwgdGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdDT01QUkVTUz1ERUZMQVRFJykgPCAwIHx8IHRoaXMuY2xpZW50LmNvbXByZXNzZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFbmFibGluZyBjb21wcmVzc2lvbi4uLicpXG4gICAgYXdhaXQgdGhpcy5leGVjKHtcbiAgICAgIGNvbW1hbmQ6ICdDT01QUkVTUycsXG4gICAgICBhdHRyaWJ1dGVzOiBbe1xuICAgICAgICB0eXBlOiAnQVRPTScsXG4gICAgICAgIHZhbHVlOiAnREVGTEFURSdcbiAgICAgIH1dXG4gICAgfSlcbiAgICB0aGlzLmNsaWVudC5lbmFibGVDb21wcmVzc2lvbigpXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NvbXByZXNzaW9uIGVuYWJsZWQsIGFsbCBkYXRhIHNlbnQgYW5kIHJlY2VpdmVkIGlzIGRlZmxhdGVkIScpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBMT0dJTiBvciBBVVRIRU5USUNBVEUgWE9BVVRIMiBjb21tYW5kXG4gICAqXG4gICAqIExPR0lOIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMi4zXG4gICAqIFhPQVVUSDIgZGV0YWlsczpcbiAgICogICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9nbWFpbC94b2F1dGgyX3Byb3RvY29sI2ltYXBfcHJvdG9jb2xfZXhjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGgudXNlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aC5wYXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoLnhvYXV0aDJcbiAgICovXG4gIGFzeW5jIGxvZ2luIChhdXRoKSB7XG4gICAgbGV0IGNvbW1hbmRcbiAgICBsZXQgb3B0aW9ucyA9IHt9XG5cbiAgICBpZiAoIWF1dGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gbm90IHByb3ZpZGVkJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdBVVRIPVhPQVVUSDInKSA+PSAwICYmIGF1dGggJiYgYXV0aC54b2F1dGgyKSB7XG4gICAgICBjb21tYW5kID0ge1xuICAgICAgICBjb21tYW5kOiAnQVVUSEVOVElDQVRFJyxcbiAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgIHsgdHlwZTogJ0FUT00nLCB2YWx1ZTogJ1hPQVVUSDInIH0sXG4gICAgICAgICAgeyB0eXBlOiAnQVRPTScsIHZhbHVlOiBidWlsZFhPQXV0aDJUb2tlbihhdXRoLnVzZXIsIGF1dGgueG9hdXRoMiksIHNlbnNpdGl2ZTogdHJ1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5lcnJvclJlc3BvbnNlRXhwZWN0c0VtcHR5TGluZSA9IHRydWUgLy8gKyB0YWdnZWQgZXJyb3IgcmVzcG9uc2UgZXhwZWN0cyBhbiBlbXB0eSBsaW5lIGluIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBjb21tYW5kID0ge1xuICAgICAgICBjb21tYW5kOiAnbG9naW4nLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnU1RSSU5HJywgdmFsdWU6IGF1dGgudXNlciB8fCAnJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ1NUUklORycsIHZhbHVlOiBhdXRoLnBhc3MgfHwgJycsIHNlbnNpdGl2ZTogdHJ1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9nZ2luZyBpbi4uLicpXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoY29tbWFuZCwgJ2NhcGFiaWxpdHknLCBvcHRpb25zKVxuICAgIC8qXG4gICAgICogdXBkYXRlIHBvc3QtYXV0aCBjYXBhYmlsaXRlc1xuICAgICAqIGNhcGFiaWxpdHkgbGlzdCBzaG91bGRuJ3QgY29udGFpbiBhdXRoIHJlbGF0ZWQgc3R1ZmYgYW55bW9yZVxuICAgICAqIGJ1dCBzb21lIG5ldyBleHRlbnNpb25zIG1pZ2h0IGhhdmUgcG9wcGVkIHVwIHRoYXQgZG8gbm90XG4gICAgICogbWFrZSBtdWNoIHNlbnNlIGluIHRoZSBub24tYXV0aCBzdGF0ZVxuICAgICAqL1xuICAgIGlmIChyZXNwb25zZS5jYXBhYmlsaXR5ICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkubGVuZ3RoKSB7XG4gICAgICAvLyBjYXBhYmlsaXRlcyB3ZXJlIGxpc3RlZCB3aXRoIHRoZSBPSyBbQ0FQQUJJTElUWSAuLi5dIHJlc3BvbnNlXG4gICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gcmVzcG9uc2UuY2FwYWJpbGl0eVxuICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucGF5bG9hZCAmJiByZXNwb25zZS5wYXlsb2FkLkNBUEFCSUxJVFkgJiYgcmVzcG9uc2UucGF5bG9hZC5DQVBBQklMSVRZLmxlbmd0aCkge1xuICAgICAgLy8gY2FwYWJpbGl0ZXMgd2VyZSBsaXN0ZWQgd2l0aCAqIENBUEFCSUxJVFkgLi4uIHJlc3BvbnNlXG4gICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gcmVzcG9uc2UucGF5bG9hZC5DQVBBQklMSVRZLnBvcCgpLmF0dHJpYnV0ZXMubWFwKChjYXBhID0gJycpID0+IGNhcGEudmFsdWUudG9VcHBlckNhc2UoKS50cmltKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhcGFiaWxpdGllcyB3ZXJlIG5vdCBhdXRvbWF0aWNhbGx5IGxpc3RlZCwgcmVsb2FkXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhcGFiaWxpdHkodHJ1ZSlcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9BVVRIRU5USUNBVEVEKVxuICAgIHRoaXMuX2F1dGhlbnRpY2F0ZWQgPSB0cnVlXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvZ2luIHN1Y2Nlc3NmdWwsIHBvc3QtYXV0aCBjYXBhYmlsaXRlcyB1cGRhdGVkIScsIHRoaXMuX2NhcGFiaWxpdHkpXG4gIH1cblxuICAvKipcbiAgICogUnVuIGFuIElNQVAgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgU3RydWN0dXJlZCByZXF1ZXN0IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fSBhY2NlcHRVbnRhZ2dlZCBhIGxpc3Qgb2YgdW50YWdnZWQgcmVzcG9uc2VzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiAncGF5bG9hZCcgcHJvcGVydHlcbiAgICovXG4gIGFzeW5jIGV4ZWMgKHJlcXVlc3QsIGFjY2VwdFVudGFnZ2VkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5icmVha0lkbGUoKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZW5xdWV1ZUNvbW1hbmQocmVxdWVzdCwgYWNjZXB0VW50YWdnZWQsIG9wdGlvbnMpXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSByZXNwb25zZS5jYXBhYmlsaXR5XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIGlzIGlkbGluZy4gU2VuZHMgYSBOT09QIG9yIElETEUgY29tbWFuZFxuICAgKlxuICAgKiBJRExFIGRldGFpbHM6XG4gICAqICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIxNzdcbiAgICovXG4gIGVudGVySWRsZSAoKSB7XG4gICAgaWYgKHRoaXMuX2VudGVyZWRJZGxlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZW50ZXJlZElkbGUgPSB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ0lETEUnKSA+PSAwID8gJ0lETEUnIDogJ05PT1AnXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0VudGVyaW5nIGlkbGUgd2l0aCAnICsgdGhpcy5fZW50ZXJlZElkbGUpXG5cbiAgICBpZiAodGhpcy5fZW50ZXJlZElkbGUgPT09ICdOT09QJykge1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NlbmRpbmcgTk9PUCcpXG4gICAgICAgIHRoaXMuZXhlYygnTk9PUCcpXG4gICAgICB9LCB0aGlzLnRpbWVvdXROb29wKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fZW50ZXJlZElkbGUgPT09ICdJRExFJykge1xuICAgICAgdGhpcy5jbGllbnQuZW5xdWV1ZUNvbW1hbmQoe1xuICAgICAgICBjb21tYW5kOiAnSURMRSdcbiAgICAgIH0pXG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudC5zZW5kKCdET05FXFxyXFxuJylcbiAgICAgICAgdGhpcy5fZW50ZXJlZElkbGUgPSBmYWxzZVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSWRsZSB0ZXJtaW5hdGVkJylcbiAgICAgIH0sIHRoaXMudGltZW91dElkbGUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIGFjdGlvbnMgcmVsYXRlZCBpZGxpbmcsIGlmIElETEUgaXMgc3VwcG9ydGVkLCBzZW5kcyBET05FIHRvIHN0b3AgaXRcbiAgICovXG4gIGJyZWFrSWRsZSAoKSB7XG4gICAgaWYgKCF0aGlzLl9lbnRlcmVkSWRsZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICAgIGlmICh0aGlzLl9lbnRlcmVkSWRsZSA9PT0gJ0lETEUnKSB7XG4gICAgICB0aGlzLmNsaWVudC5zZW5kKCdET05FXFxyXFxuJylcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJZGxlIHRlcm1pbmF0ZWQnKVxuICAgIH1cbiAgICB0aGlzLl9lbnRlcmVkSWRsZSA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTVEFSVFRMUyBjb21tYW5kIGlmIG5lZWRlZFxuICAgKlxuICAgKiBTVEFSVFRMUyBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjIuMVxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZWRdIEJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgaXMgbm90IHJ1biBpZiBjYXBhYmlsaXR5IGlzIGFscmVhZHkgbGlzdGVkLiBTZXQgdG8gdHJ1ZSB0byBza2lwIHRoaXMgdmFsaWRhdGlvblxuICAgKi9cbiAgYXN5bmMgdXBncmFkZUNvbm5lY3Rpb24gKCkge1xuICAgIC8vIHNraXAgcmVxdWVzdCwgaWYgYWxyZWFkeSBzZWN1cmVkXG4gICAgaWYgKHRoaXMuY2xpZW50LnNlY3VyZU1vZGUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIHNraXAgaWYgU1RBUlRUTFMgbm90IGF2YWlsYWJsZSBvciBzdGFydHRscyBzdXBwb3J0IGRpc2FibGVkXG4gICAgaWYgKCh0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ1NUQVJUVExTJykgPCAwIHx8IHRoaXMuX2lnbm9yZVRMUykgJiYgIXRoaXMuX3JlcXVpcmVUTFMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFbmNyeXB0aW5nIGNvbm5lY3Rpb24uLi4nKVxuICAgIGF3YWl0IHRoaXMuZXhlYygnU1RBUlRUTFMnKVxuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBbXVxuICAgIHRoaXMuY2xpZW50LnVwZ3JhZGUoKVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhcGFiaWxpdHkoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0FQQUJJTElUWSBjb21tYW5kXG4gICAqXG4gICAqIENBUEFCSUxJVFkgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4xLjFcbiAgICpcbiAgICogRG9lc24ndCByZWdpc3RlciB1bnRhZ2dlZCBDQVBBQklMSVRZIGhhbmRsZXIgYXMgdGhpcyBpcyBhbHJlYWR5XG4gICAqIGhhbmRsZWQgYnkgZ2xvYmFsIGhhbmRsZXJcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VkXSBCeSBkZWZhdWx0IHRoZSBjb21tYW5kIGlzIG5vdCBydW4gaWYgY2FwYWJpbGl0eSBpcyBhbHJlYWR5IGxpc3RlZC4gU2V0IHRvIHRydWUgdG8gc2tpcCB0aGlzIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUNhcGFiaWxpdHkgKGZvcmNlZCkge1xuICAgIC8vIHNraXAgcmVxdWVzdCwgaWYgbm90IGZvcmNlZCB1cGRhdGUgYW5kIGNhcGFiaWxpdGllcyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICBpZiAoIWZvcmNlZCAmJiB0aGlzLl9jYXBhYmlsaXR5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgU1RBUlRUTFMgaXMgcmVxdWlyZWQgdGhlbiBza2lwIGNhcGFiaWxpdHkgbGlzdGluZyBhcyB3ZSBhcmUgZ29pbmcgdG8gdHJ5XG4gICAgLy8gU1RBUlRUTFMgYW55d2F5IGFuZCB3ZSByZS1jaGVjayBjYXBhYmlsaXRpZXMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBzZWN1cmVkXG4gICAgaWYgKCF0aGlzLmNsaWVudC5zZWN1cmVNb2RlICYmIHRoaXMuX3JlcXVpcmVUTFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdVcGRhdGluZyBjYXBhYmlsaXR5Li4uJylcbiAgICByZXR1cm4gdGhpcy5leGVjKCdDQVBBQklMSVRZJylcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHkgKGNhcGEgPSAnJykge1xuICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoY2FwYS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgPj0gMFxuICB9XG5cbiAgLy8gRGVmYXVsdCBoYW5kbGVycyBmb3IgdW50YWdnZWQgcmVzcG9uc2VzXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiB1bnRhZ2dlZCBPSyBpbmNsdWRlcyBbQ0FQQUJJTElUWV0gdGFnIGFuZCB1cGRhdGVzIGNhcGFiaWxpdHkgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBQYXJzZWQgc2VydmVyIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHQgVW50aWwgY2FsbGVkLCBzZXJ2ZXIgcmVzcG9uc2VzIGFyZSBub3QgcHJvY2Vzc2VkXG4gICAqL1xuICBfdW50YWdnZWRPa0hhbmRsZXIgKHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSByZXNwb25zZS5jYXBhYmlsaXR5XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgY2FwYWJpbGl0eSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFBhcnNlZCBzZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dCBVbnRpbCBjYWxsZWQsIHNlcnZlciByZXNwb25zZXMgYXJlIG5vdCBwcm9jZXNzZWRcbiAgICovXG4gIF91bnRhZ2dlZENhcGFiaWxpdHlIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBwaXBlKFxuICAgICAgcHJvcE9yKFtdLCAnYXR0cmlidXRlcycpLFxuICAgICAgbWFwKCh7dmFsdWV9KSA9PiAodmFsdWUgfHwgJycpLnRvVXBwZXJDYXNlKCkudHJpbSgpKVxuICAgICkocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBleGlzdGluZyBtZXNzYWdlIGNvdW50XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBQYXJzZWQgc2VydmVyIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHQgVW50aWwgY2FsbGVkLCBzZXJ2ZXIgcmVzcG9uc2VzIGFyZSBub3QgcHJvY2Vzc2VkXG4gICAqL1xuICBfdW50YWdnZWRFeGlzdHNIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnbnInKSkge1xuICAgICAgdGhpcy5vbnVwZGF0ZSAmJiB0aGlzLm9udXBkYXRlKHRoaXMuX3NlbGVjdGVkTWFpbGJveCwgJ2V4aXN0cycsIHJlc3BvbnNlLm5yKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgYSBtZXNzYWdlIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFBhcnNlZCBzZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dCBVbnRpbCBjYWxsZWQsIHNlcnZlciByZXNwb25zZXMgYXJlIG5vdCBwcm9jZXNzZWRcbiAgICovXG4gIF91bnRhZ2dlZEV4cHVuZ2VIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnbnInKSkge1xuICAgICAgdGhpcy5vbnVwZGF0ZSAmJiB0aGlzLm9udXBkYXRlKHRoaXMuX3NlbGVjdGVkTWFpbGJveCwgJ2V4cHVuZ2UnLCByZXNwb25zZS5ucilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgZmxhZ3MgaGF2ZSBiZWVuIHVwZGF0ZWQgZm9yIGEgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgUGFyc2VkIHNlcnZlciByZXNwb25zZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0IFVudGlsIGNhbGxlZCwgc2VydmVyIHJlc3BvbnNlcyBhcmUgbm90IHByb2Nlc3NlZFxuICAgKi9cbiAgX3VudGFnZ2VkRmV0Y2hIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIHRoaXMub251cGRhdGUgJiYgdGhpcy5vbnVwZGF0ZSh0aGlzLl9zZWxlY3RlZE1haWxib3gsICdmZXRjaCcsIFtdLmNvbmNhdChwYXJzZUZFVENIKHsgcGF5bG9hZDogeyBGRVRDSDogW3Jlc3BvbnNlXSB9IH0pIHx8IFtdKS5zaGlmdCgpKVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXJzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjb25uZWN0aW9uIHN0YXJ0ZWQgaWRsaW5nLiBJbml0aWF0ZXMgYSBjeWNsZVxuICAgKiBvZiBOT09QcyBvciBJRExFcyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgYWJvdXQgdXBkYXRlcyBpbiB0aGUgc2VydmVyXG4gICAqL1xuICBfb25JZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuX2F1dGhlbnRpY2F0ZWQgfHwgdGhpcy5fZW50ZXJlZElkbGUpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gSURMRSB3aGVuIG5vdCBsb2dnZWQgaW4gb3IgYWxyZWFkeSBpZGxpbmdcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDbGllbnQgc3RhcnRlZCBpZGxpbmcnKVxuICAgIHRoaXMuZW50ZXJJZGxlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBJTUFQIHN0YXRlIHZhbHVlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuZXdTdGF0ZSBUaGUgc3RhdGUgeW91IHdhbnQgdG8gY2hhbmdlIHRvXG4gICAqL1xuICBfY2hhbmdlU3RhdGUgKG5ld1N0YXRlKSB7XG4gICAgaWYgKG5ld1N0YXRlID09PSB0aGlzLl9zdGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0VudGVyaW5nIHN0YXRlOiAnICsgbmV3U3RhdGUpXG5cbiAgICAvLyBpZiBhIG1haWxib3ggd2FzIG9wZW5lZCwgZW1pdCBvbmNsb3NlbWFpbGJveCBhbmQgY2xlYXIgc2VsZWN0ZWRNYWlsYm94IHZhbHVlXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTVEFURV9TRUxFQ1RFRCAmJiB0aGlzLl9zZWxlY3RlZE1haWxib3gpIHtcbiAgICAgIHRoaXMub25jbG9zZW1haWxib3ggJiYgdGhpcy5vbmNsb3NlbWFpbGJveCh0aGlzLl9zZWxlY3RlZE1haWxib3gpXG4gICAgICB0aGlzLl9zZWxlY3RlZE1haWxib3ggPSBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gbmV3U3RhdGVcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgcGF0aCBleGlzdHMgaW4gdGhlIE1haWxib3ggdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdHJlZSBNYWlsYm94IHRyZWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlbGltaXRlclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGJyYW5jaCBmb3IgdXNlZCBwYXRoXG4gICAqL1xuICBfZW5zdXJlUGF0aCAodHJlZSwgcGF0aCwgZGVsaW1pdGVyKSB7XG4gICAgY29uc3QgbmFtZXMgPSBwYXRoLnNwbGl0KGRlbGltaXRlcilcbiAgICBsZXQgYnJhbmNoID0gdHJlZVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYnJhbmNoLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wYXJlTWFpbGJveE5hbWVzKGJyYW5jaC5jaGlsZHJlbltqXS5uYW1lLCBpbWFwRGVjb2RlKG5hbWVzW2ldKSkpIHtcbiAgICAgICAgICBicmFuY2ggPSBicmFuY2guY2hpbGRyZW5bal1cbiAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIGJyYW5jaC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpbWFwRGVjb2RlKG5hbWVzW2ldKSxcbiAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgICAgICBwYXRoOiBuYW1lcy5zbGljZSgwLCBpICsgMSkuam9pbihkZWxpbWl0ZXIpLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9KVxuICAgICAgICBicmFuY2ggPSBicmFuY2guY2hpbGRyZW5bYnJhbmNoLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBicmFuY2hcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0d28gbWFpbGJveCBuYW1lcy4gQ2FzZSBpbnNlbnNpdGl2ZSBpbiBjYXNlIG9mIElOQk9YLCBvdGhlcndpc2UgY2FzZSBzZW5zaXRpdmVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGEgTWFpbGJveCBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiIE1haWxib3ggbmFtZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgZm9sZGVyIG5hbWVzIG1hdGNoXG4gICAqL1xuICBfY29tcGFyZU1haWxib3hOYW1lcyAoYSwgYikge1xuICAgIHJldHVybiAoYS50b1VwcGVyQ2FzZSgpID09PSAnSU5CT1gnID8gJ0lOQk9YJyA6IGEpID09PSAoYi50b1VwcGVyQ2FzZSgpID09PSAnSU5CT1gnID8gJ0lOQk9YJyA6IGIpXG4gIH1cblxuICBjcmVhdGVMb2dnZXIgKGNyZWF0b3IgPSBjcmVhdGVEZWZhdWx0TG9nZ2VyKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gY3JlYXRvcigodGhpcy5fYXV0aCB8fCB7fSkudXNlciB8fCAnJywgdGhpcy5faG9zdClcbiAgICB0aGlzLmxvZ2dlciA9IHRoaXMuY2xpZW50LmxvZ2dlciA9IHtcbiAgICAgIGRlYnVnOiAoLi4ubXNncykgPT4geyBpZiAoTE9HX0xFVkVMX0RFQlVHID49IHRoaXMubG9nTGV2ZWwpIHsgbG9nZ2VyLmRlYnVnKG1zZ3MpIH0gfSxcbiAgICAgIGluZm86ICguLi5tc2dzKSA9PiB7IGlmIChMT0dfTEVWRUxfSU5GTyA+PSB0aGlzLmxvZ0xldmVsKSB7IGxvZ2dlci5pbmZvKG1zZ3MpIH0gfSxcbiAgICAgIHdhcm46ICguLi5tc2dzKSA9PiB7IGlmIChMT0dfTEVWRUxfV0FSTiA+PSB0aGlzLmxvZ0xldmVsKSB7IGxvZ2dlci53YXJuKG1zZ3MpIH0gfSxcbiAgICAgIGVycm9yOiAoLi4ubXNncykgPT4geyBpZiAoTE9HX0xFVkVMX0VSUk9SID49IHRoaXMubG9nTGV2ZWwpIHsgbG9nZ2VyLmVycm9yKG1zZ3MpIH0gfVxuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQuanMiXSwibmFtZXMiOlsiVElNRU9VVF9DT05ORUNUSU9OIiwiVElNRU9VVF9OT09QIiwiVElNRU9VVF9JRExFIiwiU1RBVEVfQ09OTkVDVElORyIsIlNUQVRFX05PVF9BVVRIRU5USUNBVEVEIiwiU1RBVEVfQVVUSEVOVElDQVRFRCIsIlNUQVRFX1NFTEVDVEVEIiwiU1RBVEVfTE9HT1VUIiwiREVGQVVMVF9DTElFTlRfSUQiLCJuYW1lIiwiQ2xpZW50IiwiY29uc3RydWN0b3IiLCJob3N0IiwicG9ydCIsIm9wdGlvbnMiLCJ0aW1lb3V0Q29ubmVjdGlvbiIsInRpbWVvdXROb29wIiwidGltZW91dElkbGUiLCJzZXJ2ZXJJZCIsIm9uY2VydCIsIm9udXBkYXRlIiwib25zZWxlY3RtYWlsYm94Iiwib25jbG9zZW1haWxib3giLCJfaG9zdCIsIl9jbGllbnRJZCIsIl9zdGF0ZSIsIl9hdXRoZW50aWNhdGVkIiwiX2NhcGFiaWxpdHkiLCJfc2VsZWN0ZWRNYWlsYm94IiwiX2VudGVyZWRJZGxlIiwiX2lkbGVUaW1lb3V0IiwiX2VuYWJsZUNvbXByZXNzaW9uIiwiZW5hYmxlQ29tcHJlc3Npb24iLCJfYXV0aCIsImF1dGgiLCJfcmVxdWlyZVRMUyIsInJlcXVpcmVUTFMiLCJfaWdub3JlVExTIiwiaWdub3JlVExTIiwiY2xpZW50IiwiSW1hcENsaWVudCIsIm9uZXJyb3IiLCJfb25FcnJvciIsImJpbmQiLCJjZXJ0Iiwib25pZGxlIiwiX29uSWRsZSIsInNldEhhbmRsZXIiLCJyZXNwb25zZSIsIl91bnRhZ2dlZENhcGFiaWxpdHlIYW5kbGVyIiwiX3VudGFnZ2VkT2tIYW5kbGVyIiwiX3VudGFnZ2VkRXhpc3RzSGFuZGxlciIsIl91bnRhZ2dlZEV4cHVuZ2VIYW5kbGVyIiwiX3VudGFnZ2VkRmV0Y2hIYW5kbGVyIiwiY3JlYXRlTG9nZ2VyIiwibG9nTGV2ZWwiLCJMT0dfTEVWRUxfQUxMIiwiZXJyIiwiY2xlYXJUaW1lb3V0IiwiY29ubmVjdCIsIl9vcGVuQ29ubmVjdGlvbiIsIl9jaGFuZ2VTdGF0ZSIsInVwZGF0ZUNhcGFiaWxpdHkiLCJ1cGdyYWRlQ29ubmVjdGlvbiIsInVwZGF0ZUlkIiwibG9nZ2VyIiwid2FybiIsIm1lc3NhZ2UiLCJsb2dpbiIsImNvbXByZXNzQ29ubmVjdGlvbiIsImRlYnVnIiwiZXJyb3IiLCJjbG9zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29ubmVjdGlvblRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJ0aGVuIiwib25yZWFkeSIsImNhdGNoIiwibG9nb3V0IiwiaWQiLCJpbmRleE9mIiwiY29tbWFuZCIsImF0dHJpYnV0ZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZXhlYyIsImxpc3QiLCJtYXAiLCJ2YWx1ZXMiLCJrZXlzIiwiZmlsdGVyIiwiXyIsImkiLCJfc2hvdWxkU2VsZWN0TWFpbGJveCIsInBhdGgiLCJjdHgiLCJwcmV2aW91c1NlbGVjdCIsImdldFByZXZpb3VzbHlRdWV1ZWQiLCJyZXF1ZXN0IiwicGF0aEF0dHJpYnV0ZSIsImZpbmQiLCJhdHRyaWJ1dGUiLCJ0eXBlIiwidmFsdWUiLCJzZWxlY3RNYWlsYm94IiwicXVlcnkiLCJyZWFkT25seSIsImNvbmRzdG9yZSIsInB1c2giLCJtYWlsYm94SW5mbyIsImxpc3ROYW1lc3BhY2VzIiwibGlzdE1haWxib3hlcyIsInRyZWUiLCJyb290IiwiY2hpbGRyZW4iLCJsaXN0UmVzcG9uc2UiLCJmb3JFYWNoIiwiYXR0ciIsIml0ZW0iLCJsZW5ndGgiLCJkZWxpbSIsImJyYW5jaCIsIl9lbnN1cmVQYXRoIiwiZmxhZ3MiLCJsaXN0ZWQiLCJsc3ViUmVzcG9uc2UiLCJsc3ViIiwiZmxhZyIsInN1YnNjcmliZWQiLCJjcmVhdGVNYWlsYm94IiwiY29kZSIsImRlbGV0ZU1haWxib3giLCJsaXN0TWVzc2FnZXMiLCJzZXF1ZW5jZSIsIml0ZW1zIiwiZmFzdCIsInByZWNoZWNrIiwic2VhcmNoIiwic2V0RmxhZ3MiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJhZGQiLCJzZXQiLCJyZW1vdmUiLCJzdG9yZSIsImFjdGlvbiIsInVwbG9hZCIsImRlc3RpbmF0aW9uIiwiZGVsZXRlTWVzc2FnZXMiLCJ1c2VVaWRQbHVzIiwiYnlVaWQiLCJ1aWRFeHB1bmdlQ29tbWFuZCIsImNtZCIsImNvcHlNZXNzYWdlcyIsImh1bWFuUmVhZGFibGUiLCJtb3ZlTWVzc2FnZXMiLCJjb21wcmVzc2VkIiwieG9hdXRoMiIsInVzZXIiLCJzZW5zaXRpdmUiLCJlcnJvclJlc3BvbnNlRXhwZWN0c0VtcHR5TGluZSIsInBhc3MiLCJjYXBhYmlsaXR5IiwicGF5bG9hZCIsIkNBUEFCSUxJVFkiLCJwb3AiLCJjYXBhIiwidG9VcHBlckNhc2UiLCJ0cmltIiwiYWNjZXB0VW50YWdnZWQiLCJicmVha0lkbGUiLCJlbnF1ZXVlQ29tbWFuZCIsImVudGVySWRsZSIsInNlbmQiLCJzZWN1cmVNb2RlIiwidXBncmFkZSIsImZvcmNlZCIsImhhc0NhcGFiaWxpdHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm5yIiwiRkVUQ0giLCJzaGlmdCIsIm5ld1N0YXRlIiwiZGVsaW1pdGVyIiwibmFtZXMiLCJzcGxpdCIsImZvdW5kIiwiaiIsIl9jb21wYXJlTWFpbGJveE5hbWVzIiwic2xpY2UiLCJqb2luIiwiYSIsImIiLCJjcmVhdG9yIiwiY3JlYXRlRGVmYXVsdExvZ2dlciIsIm1zZ3MiLCJMT0dfTEVWRUxfREVCVUciLCJpbmZvIiwiTE9HX0xFVkVMX0lORk8iLCJMT0dfTEVWRUxfV0FSTiIsIkxPR19MRVZFTF9FUlJPUiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQU1BOztBQU9BOzs7O0FBQ0E7Ozs7QUFDQTs7QUFRQTs7Ozs7O0FBSU8sTUFBTUEsa0RBQXFCLEtBQUssSUFBaEMsQyxDQUFxQztBQUNyQyxNQUFNQyxzQ0FBZSxLQUFLLElBQTFCLEMsQ0FBK0I7QUFDL0IsTUFBTUMsc0NBQWUsS0FBSyxJQUExQixDLENBQStCOztB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LFlBQU0sQ0FBQyxHQUFHdUksSUFBSixLQUFhO0FBQUUsWUFBSUksMEJBQWtCLEtBQUt0SixRQUEzQixFQUFxQztBQUFFVSxpQkFBT0MsSUFBUCxDQUFZdUksSUFBWjtBQUFtQjtBQUFFLE9BSGhEO0FBSWpDbEksYUFBTyxDQUFDLEdBQUdrSSxJQUFKLEtBQWE7QUFBRSxZQUFJSywyQkFBbUIsS0FBS3ZKLFFBQTVCLEVBQXNDO0FBQUVVLGlCQUFPTSxLQUFQLENBQWFrSSxJQUFiO0FBQW9CO0FBQUU7QUFKbkQsS0FBbkM7QUFNRDtBQXY0QnlCO2tCQUFQL0wsTSIsImZpbGUiOiJjbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAsIHBpcGUsIHVuaW9uLCB6aXAsIGZyb21QYWlycywgcHJvcE9yLCBwYXRoT3IsIGZsYXR0ZW4gfSBmcm9tICdyYW1kYSdcbmltcG9ydCB7IGltYXBFbmNvZGUsIGltYXBEZWNvZGUgfSBmcm9tICdlbWFpbGpzLXV0ZjcnXG5pbXBvcnQge1xuICBwYXJzZU5BTUVTUEFDRSxcbiAgcGFyc2VTRUxFQ1QsXG4gIHBhcnNlRkVUQ0gsXG4gIHBhcnNlU0VBUkNIXG59IGZyb20gJy4vY29tbWFuZC1wYXJzZXInXG5pbXBvcnQge1xuICBidWlsZEZFVENIQ29tbWFuZCxcbiAgYnVpbGRYT0F1dGgyVG9rZW4sXG4gIGJ1aWxkU0VBUkNIQ29tbWFuZCxcbiAgYnVpbGRTVE9SRUNvbW1hbmRcbn0gZnJvbSAnLi9jb21tYW5kLWJ1aWxkZXInXG5cbmltcG9ydCBjcmVhdGVEZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJ1xuaW1wb3J0IEltYXBDbGllbnQgZnJvbSAnLi9pbWFwJ1xuaW1wb3J0IHtcbiAgTE9HX0xFVkVMX0VSUk9SLFxuICBMT0dfTEVWRUxfV0FSTixcbiAgTE9HX0xFVkVMX0lORk8sXG4gIExPR19MRVZFTF9ERUJVRyxcbiAgTE9HX0xFVkVMX0FMTFxufSBmcm9tICcuL2NvbW1vbidcblxuaW1wb3J0IHtcbiAgY2hlY2tTcGVjaWFsVXNlXG59IGZyb20gJy4vc3BlY2lhbC11c2UnXG5cbmV4cG9ydCBjb25zdCBUSU1FT1VUX0NPTk5FQ1RJT04gPSA5MCAqIDEwMDAgLy8gTWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBJTUFQIGdyZWV0aW5nIGZyb20gdGhlIHNlcnZlclxuZXhwb3J0IGNvbnN0IFRJTUVPVVRfTk9PUCA9IDYwICogMTAwMCAvLyBNaWxsaXNlY29uZHMgYmV0d2VlbiBOT09QIGNvbW1hbmRzIHdoaWxlIGlkbGluZ1xuZXhwb3J0IGNvbnN0IFRJTUVPVVRfSURMRSA9IDYwICogMTAwMCAvLyBNaWxsaXNlY29uZHMgdW50aWwgSURMRSBjb21tYW5kIGlzIGNhbmNlbGxlZFxuXG5leHBvcnQgY29uc3QgU1RBVEVfQ09OTkVDVElORyA9IDFcbmV4cG9ydCBjb25zdCBTVEFURV9OT1RfQVVUSEVOVElDQVRFRCA9IDJcbmV4cG9ydCBjb25zdCBTVEFURV9BVVRIRU5USUNBVEVEID0gM1xuZXhwb3J0IGNvbnN0IFNUQVRFX1NFTEVDVEVEID0gNFxuZXhwb3J0IGNvbnN0IFNUQVRFX0xPR09VVCA9IDVcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0xJRU5UX0lEID0ge1xuICBuYW1lOiAnZW1haWxqcy1pbWFwLWNsaWVudCdcbn1cblxuLyoqXG4gKiBlbWFpbGpzIElNQVAgY2xpZW50XG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtob3N0PSdsb2NhbGhvc3QnXSBIb3N0bmFtZSB0byBjb25lbmN0IHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW3BvcnQ9MTQzXSBQb3J0IG51bWJlciB0byBjb25uZWN0IHRvXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChob3N0LCBwb3J0LCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLnRpbWVvdXRDb25uZWN0aW9uID0gVElNRU9VVF9DT05ORUNUSU9OXG4gICAgdGhpcy50aW1lb3V0Tm9vcCA9IFRJTUVPVVRfTk9PUFxuICAgIHRoaXMudGltZW91dElkbGUgPSBUSU1FT1VUX0lETEVcblxuICAgIHRoaXMuc2VydmVySWQgPSBmYWxzZSAvLyBSRkMgMjk3MSBTZXJ2ZXIgSUQgYXMga2V5IHZhbHVlIHBhaXJzXG5cbiAgICAvLyBFdmVudCBwbGFjZWhvbGRlcnNcbiAgICB0aGlzLm9uY2VydCA9IG51bGxcbiAgICB0aGlzLm9udXBkYXRlID0gbnVsbFxuICAgIHRoaXMub25zZWxlY3RtYWlsYm94ID0gbnVsbFxuICAgIHRoaXMub25jbG9zZW1haWxib3ggPSBudWxsXG5cbiAgICB0aGlzLl9ob3N0ID0gaG9zdFxuICAgIHRoaXMuX2NsaWVudElkID0gcHJvcE9yKERFRkFVTFRfQ0xJRU5UX0lELCAnaWQnLCBvcHRpb25zKVxuICAgIHRoaXMuX3N0YXRlID0gZmFsc2UgLy8gQ3VycmVudCBzdGF0ZVxuICAgIHRoaXMuX2F1dGhlbnRpY2F0ZWQgPSBmYWxzZSAvLyBJcyB0aGUgY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkXG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9IFtdIC8vIExpc3Qgb2YgZXh0ZW5zaW9ucyB0aGUgc2VydmVyIHN1cHBvcnRzXG4gICAgdGhpcy5fc2VsZWN0ZWRNYWlsYm94ID0gZmFsc2UgLy8gU2VsZWN0ZWQgbWFpbGJveFxuICAgIHRoaXMuX2VudGVyZWRJZGxlID0gZmFsc2VcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGZhbHNlXG4gICAgdGhpcy5fZW5hYmxlQ29tcHJlc3Npb24gPSAhIW9wdGlvbnMuZW5hYmxlQ29tcHJlc3Npb25cbiAgICB0aGlzLl9hdXRoID0gb3B0aW9ucy5hdXRoXG4gICAgdGhpcy5fcmVxdWlyZVRMUyA9ICEhb3B0aW9ucy5yZXF1aXJlVExTXG4gICAgdGhpcy5faWdub3JlVExTID0gISFvcHRpb25zLmlnbm9yZVRMU1xuXG4gICAgdGhpcy5jbGllbnQgPSBuZXcgSW1hcENsaWVudChob3N0LCBwb3J0LCBvcHRpb25zKSAvLyBJTUFQIGNsaWVudCBvYmplY3RcblxuICAgIC8vIEV2ZW50IEhhbmRsZXJzXG4gICAgdGhpcy5jbGllbnQub25lcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKVxuICAgIHRoaXMuY2xpZW50Lm9uY2VydCA9IChjZXJ0KSA9PiAodGhpcy5vbmNlcnQgJiYgdGhpcy5vbmNlcnQoY2VydCkpIC8vIGFsbG93cyBjZXJ0aWZpY2F0ZSBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHcvbyBuYXRpdmUgdGxzIHN1cHBvcnRcbiAgICB0aGlzLmNsaWVudC5vbmlkbGUgPSAoKSA9PiB0aGlzLl9vbklkbGUoKSAvLyBzdGFydCBpZGxpbmdcblxuICAgIC8vIERlZmF1bHQgaGFuZGxlcnMgZm9yIHVudGFnZ2VkIHJlc3BvbnNlc1xuICAgIHRoaXMuY2xpZW50LnNldEhhbmRsZXIoJ2NhcGFiaWxpdHknLCAocmVzcG9uc2UpID0+IHRoaXMuX3VudGFnZ2VkQ2FwYWJpbGl0eUhhbmRsZXIocmVzcG9uc2UpKSAvLyBjYXBhYmlsaXR5IHVwZGF0ZXNcbiAgICB0aGlzLmNsaWVudC5zZXRIYW5kbGVyKCdvaycsIChyZXNwb25zZSkgPT4gdGhpcy5fdW50YWdnZWRPa0hhbmRsZXIocmVzcG9uc2UpKSAvLyBub3RpZmljYXRpb25zXG4gICAgdGhpcy5jbGllbnQuc2V0SGFuZGxlcignZXhpc3RzJywgKHJlc3BvbnNlKSA9PiB0aGlzLl91bnRhZ2dlZEV4aXN0c0hhbmRsZXIocmVzcG9uc2UpKSAvLyBtZXNzYWdlIGNvdW50IGhhcyBjaGFuZ2VkXG4gICAgdGhpcy5jbGllbnQuc2V0SGFuZGxlcignZXhwdW5nZScsIChyZXNwb25zZSkgPT4gdGhpcy5fdW50YWdnZWRFeHB1bmdlSGFuZGxlcihyZXNwb25zZSkpIC8vIG1lc3NhZ2UgaGFzIGJlZW4gZGVsZXRlZFxuICAgIHRoaXMuY2xpZW50LnNldEhhbmRsZXIoJ2ZldGNoJywgKHJlc3BvbnNlKSA9PiB0aGlzLl91bnRhZ2dlZEZldGNoSGFuZGxlcihyZXNwb25zZSkpIC8vIG1lc3NhZ2UgaGFzIGJlZW4gdXBkYXRlZCAoZWcuIGZsYWcgY2hhbmdlKVxuXG4gICAgLy8gQWN0aXZhdGUgbG9nZ2luZ1xuICAgIHRoaXMuY3JlYXRlTG9nZ2VyKClcbiAgICB0aGlzLmxvZ0xldmVsID0gcHJvcE9yKExPR19MRVZFTF9BTEwsICdsb2dMZXZlbCcsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGlmIHRoZSBsb3dlci1sZXZlbCBJbWFwQ2xpZW50IGhhcyBlbmNvdW50ZXJlZCBhbiB1bnJlY292ZXJhYmxlXG4gICAqIGVycm9yIGR1cmluZyBvcGVyYXRpb24uIENsZWFucyB1cCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdXB3YXJkcy5cbiAgICovXG4gIF9vbkVycm9yIChlcnIpIHtcbiAgICAvLyBtYWtlIHN1cmUgbm8gaWRsZSB0aW1lb3V0IGlzIHBlbmRpbmcgYW55bW9yZVxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZW91dClcblxuICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdXB3YXJkc1xuICAgIGlmICghdGhpcy5vbmVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgdGhpcy5vbmVycm9yKGVycilcbiAgfVxuXG4gIC8vXG4gIC8vXG4gIC8vIFBVQkxJQyBBUElcbiAgLy9cbiAgLy9cblxuICAvKipcbiAgICogSW5pdGlhdGUgY29ubmVjdGlvbiB0byB0aGUgSU1BUCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hlbiBsb2dpbiBwcm9jZWR1cmUgaXMgY29tcGxldGVcbiAgICovXG4gIGFzeW5jIGNvbm5lY3QgKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9vcGVuQ29ubmVjdGlvbigpXG4gICAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9OT1RfQVVUSEVOVElDQVRFRClcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FwYWJpbGl0eSgpXG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVDb25uZWN0aW9uKClcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlSWQodGhpcy5fY2xpZW50SWQpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIHVwZGF0ZSBzZXJ2ZXIgaWQhJywgZXJyLm1lc3NhZ2UpXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMubG9naW4odGhpcy5fYXV0aClcbiAgICAgIGF3YWl0IHRoaXMuY29tcHJlc3NDb25uZWN0aW9uKClcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDb25uZWN0aW9uIGVzdGFibGlzaGVkLCByZWFkeSB0byByb2xsIScpXG4gICAgICB0aGlzLmNsaWVudC5vbmVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyJywgZXJyKVxuICAgICAgdGhpcy5jbG9zZShlcnIpIC8vIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoZXRoZXIgdGhpcyB3b3JrcyBvciBub3RcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIF9vcGVuQ29ubmVjdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBjb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVGltZW91dCBjb25uZWN0aW5nIHRvIHNlcnZlcicpKSwgdGhpcy50aW1lb3V0Q29ubmVjdGlvbilcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDb25uZWN0aW5nIHRvJywgdGhpcy5jbGllbnQuaG9zdCwgJzonLCB0aGlzLmNsaWVudC5wb3J0KVxuICAgICAgdGhpcy5fY2hhbmdlU3RhdGUoU1RBVEVfQ09OTkVDVElORylcbiAgICAgIHRoaXMuY2xpZW50LmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NvY2tldCBvcGVuZWQsIHdhaXRpbmcgZm9yIGdyZWV0aW5nIGZyb20gdGhlIHNlcnZlci4uLicpXG5cbiAgICAgICAgdGhpcy5jbGllbnQub25yZWFkeSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQpXG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWVudC5vbmVycm9yID0gKGVycikgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dClcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChyZWplY3QpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dvdXRcbiAgICpcbiAgICogU2VuZCBMT0dPVVQsIHRvIHdoaWNoIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgYnkgY2xvc2luZyB0aGUgY29ubmVjdGlvbi5cbiAgICogVXNlIGlzIGRpc2NvdXJhZ2VkIGlmIG5ldHdvcmsgc3RhdHVzIGlzIHVuY2xlYXIhIElmIG5ldHdvcmtzIHN0YXR1cyBpc1xuICAgKiB1bmNsZWFyLCBwbGVhc2UgdXNlICNjbG9zZSBpbnN0ZWFkIVxuICAgKlxuICAgKiBMT0dPVVQgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMS4zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNlcnZlciBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBhc3luYyBsb2dvdXQgKCkge1xuICAgIHRoaXMuX2NoYW5nZVN0YXRlKFNUQVRFX0xPR09VVClcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9nZ2luZyBvdXQuLi4nKVxuICAgIGF3YWl0IHRoaXMuY2xpZW50LmxvZ291dCgpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlLWNsb3NlcyB0aGUgY3VycmVudCBjb25uZWN0aW9uIGJ5IGNsb3NpbmcgdGhlIFRDUCBzb2NrZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNvY2tldCBpcyBjbG9zZWRcbiAgICovXG4gIGFzeW5jIGNsb3NlIChlcnIpIHtcbiAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9MT0dPVVQpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDbG9zaW5nIGNvbm5lY3Rpb24uLi4nKVxuICAgIGF3YWl0IHRoaXMuY2xpZW50LmNsb3NlKGVycilcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBJRCBjb21tYW5kLCBwYXJzZXMgSUQgcmVzcG9uc2UsIHNldHMgdGhpcy5zZXJ2ZXJJZFxuICAgKlxuICAgKiBJRCBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI5NzFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGlkIElEIGFzIEpTT04gb2JqZWN0LiBTZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjk3MSNzZWN0aW9uLTMuMyBmb3IgcG9zc2libGUgdmFsdWVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHJlc3BvbnNlIGhhcyBiZWVuIHBhcnNlZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlSWQgKGlkKSB7XG4gICAgaWYgKHRoaXMuX2NhcGFiaWxpdHkuaW5kZXhPZignSUQnKSA8IDApIHJldHVyblxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1VwZGF0aW5nIGlkLi4uJylcblxuICAgIGNvbnN0IGNvbW1hbmQgPSAnSUQnXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGlkID8gWyBmbGF0dGVuKE9iamVjdC5lbnRyaWVzKGlkKSkgXSA6IFsgbnVsbCBdXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kLCBhdHRyaWJ1dGVzIH0sICdJRCcpXG4gICAgY29uc3QgbGlzdCA9IGZsYXR0ZW4ocGF0aE9yKFtdLCBbJ3BheWxvYWQnLCAnSUQnLCAnMCcsICdhdHRyaWJ1dGVzJywgJzAnXSwgcmVzcG9uc2UpLm1hcChPYmplY3QudmFsdWVzKSlcbiAgICBjb25zdCBrZXlzID0gbGlzdC5maWx0ZXIoKF8sIGkpID0+IGkgJSAyID09PSAwKVxuICAgIGNvbnN0IHZhbHVlcyA9IGxpc3QuZmlsdGVyKChfLCBpKSA9PiBpICUgMiA9PT0gMSlcbiAgICB0aGlzLnNlcnZlcklkID0gZnJvbVBhaXJzKHppcChrZXlzLCB2YWx1ZXMpKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTZXJ2ZXIgaWQgdXBkYXRlZCEnLCB0aGlzLnNlcnZlcklkKVxuICB9XG5cbiAgX3Nob3VsZFNlbGVjdE1haWxib3ggKHBhdGgsIGN0eCkge1xuICAgIGlmICghY3R4KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ID0gdGhpcy5jbGllbnQuZ2V0UHJldmlvdXNseVF1ZXVlZChbJ1NFTEVDVCcsICdFWEFNSU5FJ10sIGN0eClcbiAgICBpZiAocHJldmlvdXNTZWxlY3QgJiYgcHJldmlvdXNTZWxlY3QucmVxdWVzdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBwYXRoQXR0cmlidXRlID0gcHJldmlvdXNTZWxlY3QucmVxdWVzdC5hdHRyaWJ1dGVzLmZpbmQoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLnR5cGUgPT09ICdTVFJJTkcnKVxuICAgICAgaWYgKHBhdGhBdHRyaWJ1dGUpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhBdHRyaWJ1dGUudmFsdWUgIT09IHBhdGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRNYWlsYm94ICE9PSBwYXRoXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTRUxFQ1Qgb3IgRVhBTUlORSB0byBvcGVuIGEgbWFpbGJveFxuICAgKlxuICAgKiBTRUxFQ1QgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4zLjFcbiAgICogRVhBTUlORSBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjMuMlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBGdWxsIHBhdGggdG8gbWFpbGJveFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGVkIG1haWxib3hcbiAgICovXG4gIGFzeW5jIHNlbGVjdE1haWxib3ggKHBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgIGNvbW1hbmQ6IG9wdGlvbnMucmVhZE9ubHkgPyAnRVhBTUlORScgOiAnU0VMRUNUJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFt7IHR5cGU6ICdTVFJJTkcnLCB2YWx1ZTogcGF0aCB9XVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvbmRzdG9yZSAmJiB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ0NPTkRTVE9SRScpID49IDApIHtcbiAgICAgIHF1ZXJ5LmF0dHJpYnV0ZXMucHVzaChbeyB0eXBlOiAnQVRPTScsIHZhbHVlOiAnQ09ORFNUT1JFJyB9XSlcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnT3BlbmluZycsIHBhdGgsICcuLi4nKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKHF1ZXJ5LCBbJ0VYSVNUUycsICdGTEFHUycsICdPSyddLCB7IGN0eDogb3B0aW9ucy5jdHggfSlcbiAgICBsZXQgbWFpbGJveEluZm8gPSBwYXJzZVNFTEVDVChyZXNwb25zZSlcblxuICAgIHRoaXMuX2NoYW5nZVN0YXRlKFNUQVRFX1NFTEVDVEVEKVxuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkTWFpbGJveCAhPT0gcGF0aCAmJiB0aGlzLm9uY2xvc2VtYWlsYm94KSB7XG4gICAgICBhd2FpdCB0aGlzLm9uY2xvc2VtYWlsYm94KHRoaXMuX3NlbGVjdGVkTWFpbGJveClcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRNYWlsYm94ID0gcGF0aFxuICAgIGlmICh0aGlzLm9uc2VsZWN0bWFpbGJveCkge1xuICAgICAgYXdhaXQgdGhpcy5vbnNlbGVjdG1haWxib3gocGF0aCwgbWFpbGJveEluZm8pXG4gICAgfVxuXG4gICAgcmV0dXJuIG1haWxib3hJbmZvXG4gIH1cblxuICAvKipcbiAgICogUnVucyBOQU1FU1BBQ0UgY29tbWFuZFxuICAgKlxuICAgKiBOQU1FU1BBQ0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM0MlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIG5hbWVzcGFjZSBvYmplY3RcbiAgICovXG4gIGFzeW5jIGxpc3ROYW1lc3BhY2VzICgpIHtcbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdOQU1FU1BBQ0UnKSA8IDApIHJldHVybiBmYWxzZVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xpc3RpbmcgbmFtZXNwYWNlcy4uLicpXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoJ05BTUVTUEFDRScsICdOQU1FU1BBQ0UnKVxuICAgIHJldHVybiBwYXJzZU5BTUVTUEFDRShyZXNwb25zZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIExJU1QgYW5kIExTVUIgY29tbWFuZHMuIFJldHJpZXZlcyBhIHRyZWUgb2YgYXZhaWxhYmxlIG1haWxib3hlc1xuICAgKlxuICAgKiBMSVNUIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy44XG4gICAqIExTVUIgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4zLjlcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCBsaXN0IG9mIG1haWxib3hlc1xuICAgKi9cbiAgYXN5bmMgbGlzdE1haWxib3hlcyAoKSB7XG4gICAgY29uc3QgdHJlZSA9IHsgcm9vdDogdHJ1ZSwgY2hpbGRyZW46IFtdIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMaXN0aW5nIG1haWxib3hlcy4uLicpXG4gICAgY29uc3QgbGlzdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogJ0xJU1QnLCBhdHRyaWJ1dGVzOiBbJycsICcqJ10gfSwgJ0xJU1QnKVxuICAgIGNvbnN0IGxpc3QgPSBwYXRoT3IoW10sIFsncGF5bG9hZCcsICdMSVNUJ10sIGxpc3RSZXNwb25zZSlcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gcHJvcE9yKFtdLCAnYXR0cmlidXRlcycsIGl0ZW0pXG4gICAgICBpZiAoYXR0ci5sZW5ndGggPCAzKSByZXR1cm5cblxuICAgICAgY29uc3QgcGF0aCA9IHBhdGhPcignJywgWycyJywgJ3ZhbHVlJ10sIGF0dHIpXG4gICAgICBjb25zdCBkZWxpbSA9IHBhdGhPcignLycsIFsnMScsICd2YWx1ZSddLCBhdHRyKVxuICAgICAgY29uc3QgYnJhbmNoID0gdGhpcy5fZW5zdXJlUGF0aCh0cmVlLCBwYXRoLCBkZWxpbSlcbiAgICAgIGJyYW5jaC5mbGFncyA9IHByb3BPcihbXSwgJzAnLCBhdHRyKS5tYXAoKHt2YWx1ZX0pID0+IHZhbHVlIHx8ICcnKVxuICAgICAgYnJhbmNoLmxpc3RlZCA9IHRydWVcbiAgICAgIGNoZWNrU3BlY2lhbFVzZShicmFuY2gpXG4gICAgfSlcblxuICAgIGNvbnN0IGxzdWJSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyh7IGNvbW1hbmQ6ICdMU1VCJywgYXR0cmlidXRlczogWycnLCAnKiddIH0sICdMU1VCJylcbiAgICBjb25zdCBsc3ViID0gcGF0aE9yKFtdLCBbJ3BheWxvYWQnLCAnTFNVQiddLCBsc3ViUmVzcG9uc2UpXG4gICAgbHN1Yi5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gcHJvcE9yKFtdLCAnYXR0cmlidXRlcycsIGl0ZW0pXG4gICAgICBpZiAoYXR0ci5sZW5ndGggPCAzKSByZXR1cm5cblxuICAgICAgY29uc3QgcGF0aCA9IHBhdGhPcignJywgWycyJywgJ3ZhbHVlJ10sIGF0dHIpXG4gICAgICBjb25zdCBkZWxpbSA9IHBhdGhPcignLycsIFsnMScsICd2YWx1ZSddLCBhdHRyKVxuICAgICAgY29uc3QgYnJhbmNoID0gdGhpcy5fZW5zdXJlUGF0aCh0cmVlLCBwYXRoLCBkZWxpbSlcbiAgICAgIHByb3BPcihbXSwgJzAnLCBhdHRyKS5tYXAoKGZsYWcgPSAnJykgPT4geyBicmFuY2guZmxhZ3MgPSB1bmlvbihicmFuY2guZmxhZ3MsIFtmbGFnXSkgfSlcbiAgICAgIGJyYW5jaC5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJlZVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1haWxib3ggd2l0aCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICpcbiAgICogQ1JFQVRFIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy4zXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gICAqICAgICBUaGUgcGF0aCBvZiB0aGUgbWFpbGJveCB5b3Ugd291bGQgbGlrZSB0byBjcmVhdGUuICBUaGlzIG1ldGhvZCB3aWxsXG4gICAqICAgICBoYW5kbGUgdXRmNyBlbmNvZGluZyBmb3IgeW91LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogICAgIFByb21pc2UgcmVzb2x2ZXMgaWYgbWFpbGJveCB3YXMgY3JlYXRlZC5cbiAgICogICAgIEluIHRoZSBldmVudCB0aGUgc2VydmVyIHNheXMgTk8gW0FMUkVBRFlFWElTVFNdLCB3ZSB0cmVhdCB0aGF0IGFzIHN1Y2Nlc3MuXG4gICAqL1xuICBhc3luYyBjcmVhdGVNYWlsYm94IChwYXRoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIG1haWxib3gnLCBwYXRoLCAnLi4uJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogJ0NSRUFURScsIGF0dHJpYnV0ZXM6IFtpbWFwRW5jb2RlKHBhdGgpXSB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ0FMUkVBRFlFWElTVFMnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIG1haWxib3ggd2l0aCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICpcbiAgICogREVMRVRFIGRldGFpbHM6XG4gICAqICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjMuNFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICAgKiAgICAgVGhlIHBhdGggb2YgdGhlIG1haWxib3ggeW91IHdvdWxkIGxpa2UgdG8gZGVsZXRlLiAgVGhpcyBtZXRob2Qgd2lsbFxuICAgKiAgICAgaGFuZGxlIHV0ZjcgZW5jb2RpbmcgZm9yIHlvdS5cbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqICAgICBQcm9taXNlIHJlc29sdmVzIGlmIG1haWxib3ggd2FzIGRlbGV0ZWQuXG4gICAqL1xuICBkZWxldGVNYWlsYm94IChwYXRoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0RlbGV0aW5nIG1haWxib3gnLCBwYXRoLCAnLi4uJylcbiAgICByZXR1cm4gdGhpcy5leGVjKHsgY29tbWFuZDogJ0RFTEVURScsIGF0dHJpYnV0ZXM6IFtpbWFwRW5jb2RlKHBhdGgpXSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgRkVUQ0ggY29tbWFuZFxuICAgKlxuICAgKiBGRVRDSCBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjQuNVxuICAgKiBDSEFOR0VEU0lOQ0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDU1MSNzZWN0aW9uLTMuM1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgcGF0aCBmb3IgdGhlIG1haWxib3ggd2hpY2ggc2hvdWxkIGJlIHNlbGVjdGVkIGZvciB0aGUgY29tbWFuZC4gU2VsZWN0cyBtYWlsYm94IGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VxdWVuY2UgU2VxdWVuY2Ugc2V0LCBlZyAxOiogZm9yIGFsbCBtZXNzYWdlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW2l0ZW1zXSBNZXNzYWdlIGRhdGEgaXRlbSBuYW1lcyBvciBtYWNyb1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBmZXRjaGVkIG1lc3NhZ2UgaW5mb1xuICAgKi9cbiAgYXN5bmMgbGlzdE1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgaXRlbXMgPSBbeyBmYXN0OiB0cnVlIH1dLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2Zyb20nLCBwYXRoLCAnLi4uJylcbiAgICBjb25zdCBjb21tYW5kID0gYnVpbGRGRVRDSENvbW1hbmQoc2VxdWVuY2UsIGl0ZW1zLCBvcHRpb25zKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjKGNvbW1hbmQsICdGRVRDSCcsIHtcbiAgICAgIHByZWNoZWNrOiAoY3R4KSA9PiB0aGlzLl9zaG91bGRTZWxlY3RNYWlsYm94KHBhdGgsIGN0eCkgPyB0aGlzLnNlbGVjdE1haWxib3gocGF0aCwgeyBjdHggfSkgOiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0pXG4gICAgcmV0dXJuIHBhcnNlRkVUQ0gocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTRUFSQ0ggY29tbWFuZFxuICAgKlxuICAgKiBTRUFSQ0ggZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IFNlYXJjaCB0ZXJtc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBhcnJheSBvZiBtYXRjaGluZyBzZXEuIG9yIHVpZCBudW1iZXJzXG4gICAqL1xuICBhc3luYyBzZWFyY2ggKHBhdGgsIHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2VhcmNoaW5nIGluJywgcGF0aCwgJy4uLicpXG4gICAgY29uc3QgY29tbWFuZCA9IGJ1aWxkU0VBUkNIQ29tbWFuZChxdWVyeSwgb3B0aW9ucylcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyhjb21tYW5kLCAnU0VBUkNIJywge1xuICAgICAgcHJlY2hlY2s6IChjdHgpID0+IHRoaXMuX3Nob3VsZFNlbGVjdE1haWxib3gocGF0aCwgY3R4KSA/IHRoaXMuc2VsZWN0TWFpbGJveChwYXRoLCB7IGN0eCB9KSA6IFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gcGFyc2VTRUFSQ0gocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTVE9SRSBjb21tYW5kXG4gICAqXG4gICAqIFNUT1JFIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuNC42XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIGZvciB0aGUgbWFpbGJveCB3aGljaCBzaG91bGQgYmUgc2VsZWN0ZWQgZm9yIHRoZSBjb21tYW5kLiBTZWxlY3RzIG1haWxib3ggaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXF1ZW5jZSBNZXNzYWdlIHNlbGVjdG9yIHdoaWNoIHRoZSBmbGFnIGNoYW5nZSBpcyBhcHBsaWVkIHRvXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZsYWdzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgbW9kaWZpZXJzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdGhlIGFycmF5IG9mIG1hdGNoaW5nIHNlcS4gb3IgdWlkIG51bWJlcnNcbiAgICovXG4gIHNldEZsYWdzIChwYXRoLCBzZXF1ZW5jZSwgZmxhZ3MsIG9wdGlvbnMpIHtcbiAgICBsZXQga2V5ID0gJydcbiAgICBsZXQgbGlzdCA9IFtdXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbGFncykgfHwgdHlwZW9mIGZsYWdzICE9PSAnb2JqZWN0Jykge1xuICAgICAgbGlzdCA9IFtdLmNvbmNhdChmbGFncyB8fCBbXSlcbiAgICAgIGtleSA9ICcnXG4gICAgfSBlbHNlIGlmIChmbGFncy5hZGQpIHtcbiAgICAgIGxpc3QgPSBbXS5jb25jYXQoZmxhZ3MuYWRkIHx8IFtdKVxuICAgICAga2V5ID0gJysnXG4gICAgfSBlbHNlIGlmIChmbGFncy5zZXQpIHtcbiAgICAgIGtleSA9ICcnXG4gICAgICBsaXN0ID0gW10uY29uY2F0KGZsYWdzLnNldCB8fCBbXSlcbiAgICB9IGVsc2UgaWYgKGZsYWdzLnJlbW92ZSkge1xuICAgICAga2V5ID0gJy0nXG4gICAgICBsaXN0ID0gW10uY29uY2F0KGZsYWdzLnJlbW92ZSB8fCBbXSlcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2V0dGluZyBmbGFncyBvbicsIHNlcXVlbmNlLCAnaW4nLCBwYXRoLCAnLi4uJylcbiAgICByZXR1cm4gdGhpcy5zdG9yZShwYXRoLCBzZXF1ZW5jZSwga2V5ICsgJ0ZMQUdTJywgbGlzdCwgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIFNUT1JFIGNvbW1hbmRcbiAgICpcbiAgICogU1RPUkUgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjZcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2Ugc2VsZWN0b3Igd2hpY2ggdGhlIGZsYWcgY2hhbmdlIGlzIGFwcGxpZWQgdG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbiBTVE9SRSBtZXRob2QgdG8gY2FsbCwgZWcgXCIrRkxBR1NcIlxuICAgKiBAcGFyYW0ge0FycmF5fSBmbGFnc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHRoZSBhcnJheSBvZiBtYXRjaGluZyBzZXEuIG9yIHVpZCBudW1iZXJzXG4gICAqL1xuICBhc3luYyBzdG9yZSAocGF0aCwgc2VxdWVuY2UsIGFjdGlvbiwgZmxhZ3MsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBidWlsZFNUT1JFQ29tbWFuZChzZXF1ZW5jZSwgYWN0aW9uLCBmbGFncywgb3B0aW9ucylcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlYyhjb21tYW5kLCAnRkVUQ0gnLCB7XG4gICAgICBwcmVjaGVjazogKGN0eCkgPT4gdGhpcy5fc2hvdWxkU2VsZWN0TWFpbGJveChwYXRoLCBjdHgpID8gdGhpcy5zZWxlY3RNYWlsYm94KHBhdGgsIHsgY3R4IH0pIDogUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9KVxuICAgIHJldHVybiBwYXJzZUZFVENIKHJlc3BvbnNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQVBQRU5EIGNvbW1hbmRcbiAgICpcbiAgICogQVBQRU5EIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMy4xMVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGVzdGluYXRpb24gVGhlIG1haWxib3ggd2hlcmUgdG8gYXBwZW5kIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZFxuICAgKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zLmZsYWdzIEFueSBmbGFncyB5b3Ugd2FudCB0byBzZXQgb24gdGhlIHVwbG9hZGVkIG1lc3NhZ2UuIERlZmF1bHRzIHRvIFtcXFNlZW5dLiAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdGhlIGFycmF5IG9mIG1hdGNoaW5nIHNlcS4gb3IgdWlkIG51bWJlcnNcbiAgICovXG4gIHVwbG9hZCAoZGVzdGluYXRpb24sIG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBmbGFncyA9IHByb3BPcihbJ1xcXFxTZWVuJ10sICdmbGFncycsIG9wdGlvbnMpLm1hcCh2YWx1ZSA9PiAoeyB0eXBlOiAnYXRvbScsIHZhbHVlIH0pKVxuICAgIGxldCBjb21tYW5kID0ge1xuICAgICAgY29tbWFuZDogJ0FQUEVORCcsXG4gICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgIHsgdHlwZTogJ2F0b20nLCB2YWx1ZTogZGVzdGluYXRpb24gfSxcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogbWVzc2FnZSB9XG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1VwbG9hZGluZyBtZXNzYWdlIHRvJywgZGVzdGluYXRpb24sICcuLi4nKVxuICAgIHJldHVybiB0aGlzLmV4ZWMoY29tbWFuZClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIG1lc3NhZ2VzIGZyb20gYSBzZWxlY3RlZCBtYWlsYm94XG4gICAqXG4gICAqIEVYUFVOR0UgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjNcbiAgICogVUlEIEVYUFVOR0UgZGV0YWlsczpcbiAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDMxNSNzZWN0aW9uLTIuMVxuICAgKlxuICAgKiBJZiBwb3NzaWJsZSAoYnlVaWQ6dHJ1ZSBhbmQgVUlEUExVUyBleHRlbnNpb24gc3VwcG9ydGVkKSwgdXNlcyBVSUQgRVhQVU5HRVxuICAgKiBjb21tYW5kIHRvIGRlbGV0ZSBhIHJhbmdlIG9mIG1lc3NhZ2VzLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBFWFBVTkdFLlxuICAgKlxuICAgKiBOQiEgVGhpcyBtZXRob2QgbWlnaHQgYmUgZGVzdHJ1Y3RpdmUgLSBpZiBFWFBVTkdFIGlzIHVzZWQsIHRoZW4gYW55IG1lc3NhZ2VzXG4gICAqIHdpdGggXFxEZWxldGVkIGZsYWcgc2V0IGFyZSBkZWxldGVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIGZvciB0aGUgbWFpbGJveCB3aGljaCBzaG91bGQgYmUgc2VsZWN0ZWQgZm9yIHRoZSBjb21tYW5kLiBTZWxlY3RzIG1haWxib3ggaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXF1ZW5jZSBNZXNzYWdlIHJhbmdlIHRvIGJlIGRlbGV0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBtb2RpZmllcnNcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2VcbiAgICovXG4gIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gYWRkIFxcRGVsZXRlZCBmbGFnIHRvIHRoZSBtZXNzYWdlcyBhbmQgcnVuIEVYUFVOR0Ugb3IgVUlEIEVYUFVOR0VcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2luJywgcGF0aCwgJy4uLicpXG4gICAgY29uc3QgdXNlVWlkUGx1cyA9IG9wdGlvbnMuYnlVaWQgJiYgdGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdVSURQTFVTJykgPj0gMFxuICAgIGNvbnN0IHVpZEV4cHVuZ2VDb21tYW5kID0geyBjb21tYW5kOiAnVUlEIEVYUFVOR0UnLCBhdHRyaWJ1dGVzOiBbeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfV0gfVxuICAgIGF3YWl0IHRoaXMuc2V0RmxhZ3MocGF0aCwgc2VxdWVuY2UsIHsgYWRkOiAnXFxcXERlbGV0ZWQnIH0sIG9wdGlvbnMpXG4gICAgY29uc3QgY21kID0gdXNlVWlkUGx1cyA/IHVpZEV4cHVuZ2VDb21tYW5kIDogJ0VYUFVOR0UnXG4gICAgcmV0dXJuIHRoaXMuZXhlYyhjbWQsIG51bGwsIHtcbiAgICAgIHByZWNoZWNrOiAoY3R4KSA9PiB0aGlzLl9zaG91bGRTZWxlY3RNYWlsYm94KHBhdGgsIGN0eCkgPyB0aGlzLnNlbGVjdE1haWxib3gocGF0aCwgeyBjdHggfSkgOiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIGEgcmFuZ2Ugb2YgbWVzc2FnZXMgZnJvbSB0aGUgYWN0aXZlIG1haWxib3ggdG8gdGhlIGRlc3RpbmF0aW9uIG1haWxib3guXG4gICAqIFNpbGVudCBtZXRob2QgKHVubGVzcyBhbiBlcnJvciBvY2N1cnMpLCBieSBkZWZhdWx0IHJldHVybnMgbm8gaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIENPUFkgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi40LjdcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2UgcmFuZ2UgdG8gYmUgY29waWVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkZXN0aW5hdGlvbiBEZXN0aW5hdGlvbiBtYWlsYm94IHBhdGhcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBtb2RpZmllcnNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ieVVpZF0gSWYgdHJ1ZSwgdXNlcyBVSUQgQ09QWSBpbnN0ZWFkIG9mIENPUFlcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2VcbiAgICovXG4gIGFzeW5jIGNvcHlNZXNzYWdlcyAocGF0aCwgc2VxdWVuY2UsIGRlc3RpbmF0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ29weWluZyBtZXNzYWdlcycsIHNlcXVlbmNlLCAnZnJvbScsIHBhdGgsICd0bycsIGRlc3RpbmF0aW9uLCAnLi4uJylcbiAgICBjb25zdCB7IGh1bWFuUmVhZGFibGUgfSA9IGF3YWl0IHRoaXMuZXhlYyh7XG4gICAgICBjb21tYW5kOiBvcHRpb25zLmJ5VWlkID8gJ1VJRCBDT1BZJyA6ICdDT1BZJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfSxcbiAgICAgICAgeyB0eXBlOiAnYXRvbScsIHZhbHVlOiBkZXN0aW5hdGlvbiB9XG4gICAgICBdXG4gICAgfSwgbnVsbCwge1xuICAgICAgcHJlY2hlY2s6IChjdHgpID0+IHRoaXMuX3Nob3VsZFNlbGVjdE1haWxib3gocGF0aCwgY3R4KSA/IHRoaXMuc2VsZWN0TWFpbGJveChwYXRoLCB7IGN0eCB9KSA6IFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gaHVtYW5SZWFkYWJsZSB8fCAnQ09QWSBjb21wbGV0ZWQnXG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYSByYW5nZSBvZiBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgbWFpbGJveCB0byB0aGUgZGVzdGluYXRpb24gbWFpbGJveC5cbiAgICogUHJlZmVycyB0aGUgTU9WRSBleHRlbnNpb24gYnV0IGlmIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2sgdG9cbiAgICogQ09QWSArIEVYUFVOR0VcbiAgICpcbiAgICogTU9WRSBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY4NTFcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggZm9yIHRoZSBtYWlsYm94IHdoaWNoIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IgdGhlIGNvbW1hbmQuIFNlbGVjdHMgbWFpbGJveCBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcXVlbmNlIE1lc3NhZ2UgcmFuZ2UgdG8gYmUgbW92ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlc3RpbmF0aW9uIERlc3RpbmF0aW9uIG1haWxib3ggcGF0aFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG1vZGlmaWVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZVxuICAgKi9cbiAgYXN5bmMgbW92ZU1lc3NhZ2VzIChwYXRoLCBzZXF1ZW5jZSwgZGVzdGluYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNb3ZpbmcgbWVzc2FnZXMnLCBzZXF1ZW5jZSwgJ2Zyb20nLCBwYXRoLCAndG8nLCBkZXN0aW5hdGlvbiwgJy4uLicpXG5cbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdNT1ZFJykgPT09IC0xKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byBDT1BZICsgRVhQVU5HRVxuICAgICAgYXdhaXQgdGhpcy5jb3B5TWVzc2FnZXMocGF0aCwgc2VxdWVuY2UsIGRlc3RpbmF0aW9uLCBvcHRpb25zKVxuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlTWVzc2FnZXMocGF0aCwgc2VxdWVuY2UsIG9wdGlvbnMpXG4gICAgfVxuXG4gICAgLy8gSWYgcG9zc2libGUsIHVzZSBNT1ZFXG4gICAgcmV0dXJuIHRoaXMuZXhlYyh7XG4gICAgICBjb21tYW5kOiBvcHRpb25zLmJ5VWlkID8gJ1VJRCBNT1ZFJyA6ICdNT1ZFJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiAnc2VxdWVuY2UnLCB2YWx1ZTogc2VxdWVuY2UgfSxcbiAgICAgICAgeyB0eXBlOiAnYXRvbScsIHZhbHVlOiBkZXN0aW5hdGlvbiB9XG4gICAgICBdXG4gICAgfSwgWydPSyddLCB7XG4gICAgICBwcmVjaGVjazogKGN0eCkgPT4gdGhpcy5fc2hvdWxkU2VsZWN0TWFpbGJveChwYXRoLCBjdHgpID8gdGhpcy5zZWxlY3RNYWlsYm94KHBhdGgsIHsgY3R4IH0pIDogUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ09NUFJFU1MgY29tbWFuZFxuICAgKlxuICAgKiBDT01QUkVTUyBkZXRhaWxzOlxuICAgKiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTc4XG4gICAqL1xuICBhc3luYyBjb21wcmVzc0Nvbm5lY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fZW5hYmxlQ29tcHJlc3Npb24gfHwgdGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdDT01QUkVTUz1ERUZMQVRFJykgPCAwIHx8IHRoaXMuY2xpZW50LmNvbXByZXNzZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFbmFibGluZyBjb21wcmVzc2lvbi4uLicpXG4gICAgYXdhaXQgdGhpcy5leGVjKHtcbiAgICAgIGNvbW1hbmQ6ICdDT01QUkVTUycsXG4gICAgICBhdHRyaWJ1dGVzOiBbe1xuICAgICAgICB0eXBlOiAnQVRPTScsXG4gICAgICAgIHZhbHVlOiAnREVGTEFURSdcbiAgICAgIH1dXG4gICAgfSlcbiAgICB0aGlzLmNsaWVudC5lbmFibGVDb21wcmVzc2lvbigpXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NvbXByZXNzaW9uIGVuYWJsZWQsIGFsbCBkYXRhIHNlbnQgYW5kIHJlY2VpdmVkIGlzIGRlZmxhdGVkIScpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBMT0dJTiBvciBBVVRIRU5USUNBVEUgWE9BVVRIMiBjb21tYW5kXG4gICAqXG4gICAqIExPR0lOIGRldGFpbHM6XG4gICAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTYuMi4zXG4gICAqIFhPQVVUSDIgZGV0YWlsczpcbiAgICogICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9nbWFpbC94b2F1dGgyX3Byb3RvY29sI2ltYXBfcHJvdG9jb2xfZXhjaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGgudXNlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aC5wYXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoLnhvYXV0aDJcbiAgICovXG4gIGFzeW5jIGxvZ2luIChhdXRoKSB7XG4gICAgbGV0IGNvbW1hbmRcbiAgICBsZXQgb3B0aW9ucyA9IHt9XG5cbiAgICBpZiAoIWF1dGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gbm90IHByb3ZpZGVkJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2FwYWJpbGl0eS5pbmRleE9mKCdBVVRIPVhPQVVUSDInKSA+PSAwICYmIGF1dGggJiYgYXV0aC54b2F1dGgyKSB7XG4gICAgICBjb21tYW5kID0ge1xuICAgICAgICBjb21tYW5kOiAnQVVUSEVOVElDQVRFJyxcbiAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgIHsgdHlwZTogJ0FUT00nLCB2YWx1ZTogJ1hPQVVUSDInIH0sXG4gICAgICAgICAgeyB0eXBlOiAnQVRPTScsIHZhbHVlOiBidWlsZFhPQXV0aDJUb2tlbihhdXRoLnVzZXIsIGF1dGgueG9hdXRoMiksIHNlbnNpdGl2ZTogdHJ1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5lcnJvclJlc3BvbnNlRXhwZWN0c0VtcHR5TGluZSA9IHRydWUgLy8gKyB0YWdnZWQgZXJyb3IgcmVzcG9uc2UgZXhwZWN0cyBhbiBlbXB0eSBsaW5lIGluIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBjb21tYW5kID0ge1xuICAgICAgICBjb21tYW5kOiAnbG9naW4nLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnU1RSSU5HJywgdmFsdWU6IGF1dGgudXNlciB8fCAnJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ1NUUklORycsIHZhbHVlOiBhdXRoLnBhc3MgfHwgJycsIHNlbnNpdGl2ZTogdHJ1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9nZ2luZyBpbi4uLicpXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWMoY29tbWFuZCwgJ2NhcGFiaWxpdHknLCBvcHRpb25zKVxuICAgIC8qXG4gICAgICogdXBkYXRlIHBvc3QtYXV0aCBjYXBhYmlsaXRlc1xuICAgICAqIGNhcGFiaWxpdHkgbGlzdCBzaG91bGRuJ3QgY29udGFpbiBhdXRoIHJlbGF0ZWQgc3R1ZmYgYW55bW9yZVxuICAgICAqIGJ1dCBzb21lIG5ldyBleHRlbnNpb25zIG1pZ2h0IGhhdmUgcG9wcGVkIHVwIHRoYXQgZG8gbm90XG4gICAgICogbWFrZSBtdWNoIHNlbnNlIGluIHRoZSBub24tYXV0aCBzdGF0ZVxuICAgICAqL1xuICAgIGlmIChyZXNwb25zZS5jYXBhYmlsaXR5ICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkubGVuZ3RoKSB7XG4gICAgICAvLyBjYXBhYmlsaXRlcyB3ZXJlIGxpc3RlZCB3aXRoIHRoZSBPSyBbQ0FQQUJJTElUWSAuLi5dIHJlc3BvbnNlXG4gICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gcmVzcG9uc2UuY2FwYWJpbGl0eVxuICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucGF5bG9hZCAmJiByZXNwb25zZS5wYXlsb2FkLkNBUEFCSUxJVFkgJiYgcmVzcG9uc2UucGF5bG9hZC5DQVBBQklMSVRZLmxlbmd0aCkge1xuICAgICAgLy8gY2FwYWJpbGl0ZXMgd2VyZSBsaXN0ZWQgd2l0aCAqIENBUEFCSUxJVFkgLi4uIHJlc3BvbnNlXG4gICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gcmVzcG9uc2UucGF5bG9hZC5DQVBBQklMSVRZLnBvcCgpLmF0dHJpYnV0ZXMubWFwKChjYXBhID0gJycpID0+IGNhcGEudmFsdWUudG9VcHBlckNhc2UoKS50cmltKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhcGFiaWxpdGllcyB3ZXJlIG5vdCBhdXRvbWF0aWNhbGx5IGxpc3RlZCwgcmVsb2FkXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhcGFiaWxpdHkodHJ1ZSlcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFuZ2VTdGF0ZShTVEFURV9BVVRIRU5USUNBVEVEKVxuICAgIHRoaXMuX2F1dGhlbnRpY2F0ZWQgPSB0cnVlXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvZ2luIHN1Y2Nlc3NmdWwsIHBvc3QtYXV0aCBjYXBhYmlsaXRlcyB1cGRhdGVkIScsIHRoaXMuX2NhcGFiaWxpdHkpXG4gIH1cblxuICAvKipcbiAgICogUnVuIGFuIElNQVAgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgU3RydWN0dXJlZCByZXF1ZXN0IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fSBhY2NlcHRVbnRhZ2dlZCBhIGxpc3Qgb2YgdW50YWdnZWQgcmVzcG9uc2VzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiAncGF5bG9hZCcgcHJvcGVydHlcbiAgICovXG4gIGFzeW5jIGV4ZWMgKHJlcXVlc3QsIGFjY2VwdFVudGFnZ2VkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5icmVha0lkbGUoKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZW5xdWV1ZUNvbW1hbmQocmVxdWVzdCwgYWNjZXB0VW50YWdnZWQsIG9wdGlvbnMpXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSByZXNwb25zZS5jYXBhYmlsaXR5XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIGlzIGlkbGluZy4gU2VuZHMgYSBOT09QIG9yIElETEUgY29tbWFuZFxuICAgKlxuICAgKiBJRExFIGRldGFpbHM6XG4gICAqICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIxNzdcbiAgICovXG4gIGVudGVySWRsZSAoKSB7XG4gICAgaWYgKHRoaXMuX2VudGVyZWRJZGxlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZW50ZXJlZElkbGUgPSB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ0lETEUnKSA+PSAwID8gJ0lETEUnIDogJ05PT1AnXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0VudGVyaW5nIGlkbGUgd2l0aCAnICsgdGhpcy5fZW50ZXJlZElkbGUpXG5cbiAgICBpZiAodGhpcy5fZW50ZXJlZElkbGUgPT09ICdOT09QJykge1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NlbmRpbmcgTk9PUCcpXG4gICAgICAgIHRoaXMuZXhlYygnTk9PUCcpXG4gICAgICB9LCB0aGlzLnRpbWVvdXROb29wKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fZW50ZXJlZElkbGUgPT09ICdJRExFJykge1xuICAgICAgdGhpcy5jbGllbnQuZW5xdWV1ZUNvbW1hbmQoe1xuICAgICAgICBjb21tYW5kOiAnSURMRSdcbiAgICAgIH0pXG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudC5zZW5kKCdET05FXFxyXFxuJylcbiAgICAgICAgdGhpcy5fZW50ZXJlZElkbGUgPSBmYWxzZVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSWRsZSB0ZXJtaW5hdGVkJylcbiAgICAgIH0sIHRoaXMudGltZW91dElkbGUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIGFjdGlvbnMgcmVsYXRlZCBpZGxpbmcsIGlmIElETEUgaXMgc3VwcG9ydGVkLCBzZW5kcyBET05FIHRvIHN0b3AgaXRcbiAgICovXG4gIGJyZWFrSWRsZSAoKSB7XG4gICAgaWYgKCF0aGlzLl9lbnRlcmVkSWRsZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KVxuICAgIGlmICh0aGlzLl9lbnRlcmVkSWRsZSA9PT0gJ0lETEUnKSB7XG4gICAgICB0aGlzLmNsaWVudC5zZW5kKCdET05FXFxyXFxuJylcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJZGxlIHRlcm1pbmF0ZWQnKVxuICAgIH1cbiAgICB0aGlzLl9lbnRlcmVkSWRsZSA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUnVucyBTVEFSVFRMUyBjb21tYW5kIGlmIG5lZWRlZFxuICAgKlxuICAgKiBTVEFSVFRMUyBkZXRhaWxzOlxuICAgKiAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi02LjIuMVxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZWRdIEJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgaXMgbm90IHJ1biBpZiBjYXBhYmlsaXR5IGlzIGFscmVhZHkgbGlzdGVkLiBTZXQgdG8gdHJ1ZSB0byBza2lwIHRoaXMgdmFsaWRhdGlvblxuICAgKi9cbiAgYXN5bmMgdXBncmFkZUNvbm5lY3Rpb24gKCkge1xuICAgIC8vIHNraXAgcmVxdWVzdCwgaWYgYWxyZWFkeSBzZWN1cmVkXG4gICAgaWYgKHRoaXMuY2xpZW50LnNlY3VyZU1vZGUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIHNraXAgaWYgU1RBUlRUTFMgbm90IGF2YWlsYWJsZSBvciBzdGFydHRscyBzdXBwb3J0IGRpc2FibGVkXG4gICAgaWYgKCh0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoJ1NUQVJUVExTJykgPCAwIHx8IHRoaXMuX2lnbm9yZVRMUykgJiYgIXRoaXMuX3JlcXVpcmVUTFMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFbmNyeXB0aW5nIGNvbm5lY3Rpb24uLi4nKVxuICAgIGF3YWl0IHRoaXMuZXhlYygnU1RBUlRUTFMnKVxuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBbXVxuICAgIHRoaXMuY2xpZW50LnVwZ3JhZGUoKVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhcGFiaWxpdHkoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgQ0FQQUJJTElUWSBjb21tYW5kXG4gICAqXG4gICAqIENBUEFCSUxJVFkgZGV0YWlsczpcbiAgICogICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNi4xLjFcbiAgICpcbiAgICogRG9lc24ndCByZWdpc3RlciB1bnRhZ2dlZCBDQVBBQklMSVRZIGhhbmRsZXIgYXMgdGhpcyBpcyBhbHJlYWR5XG4gICAqIGhhbmRsZWQgYnkgZ2xvYmFsIGhhbmRsZXJcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VkXSBCeSBkZWZhdWx0IHRoZSBjb21tYW5kIGlzIG5vdCBydW4gaWYgY2FwYWJpbGl0eSBpcyBhbHJlYWR5IGxpc3RlZC4gU2V0IHRvIHRydWUgdG8gc2tpcCB0aGlzIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUNhcGFiaWxpdHkgKGZvcmNlZCkge1xuICAgIC8vIHNraXAgcmVxdWVzdCwgaWYgbm90IGZvcmNlZCB1cGRhdGUgYW5kIGNhcGFiaWxpdGllcyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICBpZiAoIWZvcmNlZCAmJiB0aGlzLl9jYXBhYmlsaXR5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgU1RBUlRUTFMgaXMgcmVxdWlyZWQgdGhlbiBza2lwIGNhcGFiaWxpdHkgbGlzdGluZyBhcyB3ZSBhcmUgZ29pbmcgdG8gdHJ5XG4gICAgLy8gU1RBUlRUTFMgYW55d2F5IGFuZCB3ZSByZS1jaGVjayBjYXBhYmlsaXRpZXMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBzZWN1cmVkXG4gICAgaWYgKCF0aGlzLmNsaWVudC5zZWN1cmVNb2RlICYmIHRoaXMuX3JlcXVpcmVUTFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdVcGRhdGluZyBjYXBhYmlsaXR5Li4uJylcbiAgICByZXR1cm4gdGhpcy5leGVjKCdDQVBBQklMSVRZJylcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHkgKGNhcGEgPSAnJykge1xuICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LmluZGV4T2YoY2FwYS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgPj0gMFxuICB9XG5cbiAgLy8gRGVmYXVsdCBoYW5kbGVycyBmb3IgdW50YWdnZWQgcmVzcG9uc2VzXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiB1bnRhZ2dlZCBPSyBpbmNsdWRlcyBbQ0FQQUJJTElUWV0gdGFnIGFuZCB1cGRhdGVzIGNhcGFiaWxpdHkgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBQYXJzZWQgc2VydmVyIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHQgVW50aWwgY2FsbGVkLCBzZXJ2ZXIgcmVzcG9uc2VzIGFyZSBub3QgcHJvY2Vzc2VkXG4gICAqL1xuICBfdW50YWdnZWRPa0hhbmRsZXIgKHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSByZXNwb25zZS5jYXBhYmlsaXR5XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgY2FwYWJpbGl0eSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFBhcnNlZCBzZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dCBVbnRpbCBjYWxsZWQsIHNlcnZlciByZXNwb25zZXMgYXJlIG5vdCBwcm9jZXNzZWRcbiAgICovXG4gIF91bnRhZ2dlZENhcGFiaWxpdHlIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSBwaXBlKFxuICAgICAgcHJvcE9yKFtdLCAnYXR0cmlidXRlcycpLFxuICAgICAgbWFwKCh7dmFsdWV9KSA9PiAodmFsdWUgfHwgJycpLnRvVXBwZXJDYXNlKCkudHJpbSgpKVxuICAgICkocmVzcG9uc2UpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBleGlzdGluZyBtZXNzYWdlIGNvdW50XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBQYXJzZWQgc2VydmVyIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHQgVW50aWwgY2FsbGVkLCBzZXJ2ZXIgcmVzcG9uc2VzIGFyZSBub3QgcHJvY2Vzc2VkXG4gICAqL1xuICBfdW50YWdnZWRFeGlzdHNIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnbnInKSkge1xuICAgICAgdGhpcy5vbnVwZGF0ZSAmJiB0aGlzLm9udXBkYXRlKHRoaXMuX3NlbGVjdGVkTWFpbGJveCwgJ2V4aXN0cycsIHJlc3BvbnNlLm5yKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgYSBtZXNzYWdlIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFBhcnNlZCBzZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dCBVbnRpbCBjYWxsZWQsIHNlcnZlciByZXNwb25zZXMgYXJlIG5vdCBwcm9jZXNzZWRcbiAgICovXG4gIF91bnRhZ2dlZEV4cHVuZ2VIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnbnInKSkge1xuICAgICAgdGhpcy5vbnVwZGF0ZSAmJiB0aGlzLm9udXBkYXRlKHRoaXMuX3NlbGVjdGVkTWFpbGJveCwgJ2V4cHVuZ2UnLCByZXNwb25zZS5ucilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgZmxhZ3MgaGF2ZSBiZWVuIHVwZGF0ZWQgZm9yIGEgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgUGFyc2VkIHNlcnZlciByZXNwb25zZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0IFVudGlsIGNhbGxlZCwgc2VydmVyIHJlc3BvbnNlcyBhcmUgbm90IHByb2Nlc3NlZFxuICAgKi9cbiAgX3VudGFnZ2VkRmV0Y2hIYW5kbGVyIChyZXNwb25zZSkge1xuICAgIHRoaXMub251cGRhdGUgJiYgdGhpcy5vbnVwZGF0ZSh0aGlzLl9zZWxlY3RlZE1haWxib3gsICdmZXRjaCcsIFtdLmNvbmNhdChwYXJzZUZFVENIKHsgcGF5bG9hZDogeyBGRVRDSDogW3Jlc3BvbnNlXSB9IH0pIHx8IFtdKS5zaGlmdCgpKVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXJzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjb25uZWN0aW9uIHN0YXJ0ZWQgaWRsaW5nLiBJbml0aWF0ZXMgYSBjeWNsZVxuICAgKiBvZiBOT09QcyBvciBJRExFcyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgYWJvdXQgdXBkYXRlcyBpbiB0aGUgc2VydmVyXG4gICAqL1xuICBfb25JZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuX2F1dGhlbnRpY2F0ZWQgfHwgdGhpcy5fZW50ZXJlZElkbGUpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gSURMRSB3aGVuIG5vdCBsb2dnZWQgaW4gb3IgYWxyZWFkeSBpZGxpbmdcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDbGllbnQgc3RhcnRlZCBpZGxpbmcnKVxuICAgIHRoaXMuZW50ZXJJZGxlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBJTUFQIHN0YXRlIHZhbHVlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuZXdTdGF0ZSBUaGUgc3RhdGUgeW91IHdhbnQgdG8gY2hhbmdlIHRvXG4gICAqL1xuICBfY2hhbmdlU3RhdGUgKG5ld1N0YXRlKSB7XG4gICAgaWYgKG5ld1N0YXRlID09PSB0aGlzLl9zdGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0VudGVyaW5nIHN0YXRlOiAnICsgbmV3U3RhdGUpXG5cbiAgICAvLyBpZiBhIG1haWxib3ggd2FzIG9wZW5lZCwgZW1pdCBvbmNsb3NlbWFpbGJveCBhbmQgY2xlYXIgc2VsZWN0ZWRNYWlsYm94IHZhbHVlXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTVEFURV9TRUxFQ1RFRCAmJiB0aGlzLl9zZWxlY3RlZE1haWxib3gpIHtcbiAgICAgIHRoaXMub25jbG9zZW1haWxib3ggJiYgdGhpcy5vbmNsb3NlbWFpbGJveCh0aGlzLl9zZWxlY3RlZE1haWxib3gpXG4gICAgICB0aGlzLl9zZWxlY3RlZE1haWxib3ggPSBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gbmV3U3RhdGVcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgcGF0aCBleGlzdHMgaW4gdGhlIE1haWxib3ggdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdHJlZSBNYWlsYm94IHRyZWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlbGltaXRlclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGJyYW5jaCBmb3IgdXNlZCBwYXRoXG4gICAqL1xuICBfZW5zdXJlUGF0aCAodHJlZSwgcGF0aCwgZGVsaW1pdGVyKSB7XG4gICAgY29uc3QgbmFtZXMgPSBwYXRoLnNwbGl0KGRlbGltaXRlcilcbiAgICBsZXQgYnJhbmNoID0gdHJlZVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYnJhbmNoLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wYXJlTWFpbGJveE5hbWVzKGJyYW5jaC5jaGlsZHJlbltqXS5uYW1lLCBpbWFwRGVjb2RlKG5hbWVzW2ldKSkpIHtcbiAgICAgICAgICBicmFuY2ggPSBicmFuY2guY2hpbGRyZW5bal1cbiAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIGJyYW5jaC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpbWFwRGVjb2RlKG5hbWVzW2ldKSxcbiAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgICAgICBwYXRoOiBuYW1lcy5zbGljZSgwLCBpICsgMSkuam9pbihkZWxpbWl0ZXIpLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9KVxuICAgICAgICBicmFuY2ggPSBicmFuY2guY2hpbGRyZW5bYnJhbmNoLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBicmFuY2hcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0d28gbWFpbGJveCBuYW1lcy4gQ2FzZSBpbnNlbnNpdGl2ZSBpbiBjYXNlIG9mIElOQk9YLCBvdGhlcndpc2UgY2FzZSBzZW5zaXRpdmVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGEgTWFpbGJveCBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiIE1haWxib3ggbmFtZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgZm9sZGVyIG5hbWVzIG1hdGNoXG4gICAqL1xuICBfY29tcGFyZU1haWxib3hOYW1lcyAoYSwgYikge1xuICAgIHJldHVybiAoYS50b1VwcGVyQ2FzZSgpID09PSAnSU5CT1gnID8gJ0lOQk9YJyA6IGEpID09PSAoYi50b1VwcGVyQ2FzZSgpID09PSAnSU5CT1gnID8gJ0lOQk9YJyA6IGIpXG4gIH1cblxuICBjcmVhdGVMb2dnZXIgKGNyZWF0b3IgPSBjcmVhdGVEZWZhdWx0TG9nZ2VyKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gY3JlYXRvcigodGhpcy5fYXV0aCB8fCB7fSkudXNlciB8fCAnJywgdGhpcy5faG9zdClcbiAgICB0aGlzLmxvZ2dlciA9IHRoaXMuY2xpZW50LmxvZ2dlciA9IHtcbiAgICAgIGRlYnVnOiAoLi4ubXNncykgPT4geyBpZiAoTE9HX0xFVkVMX0RFQlVHID49IHRoaXMubG9nTGV2ZWwpIHsgbG9nZ2VyLmRlYnVnKG1zZ3MpIH0gfSxcbiAgICAgIGluZm86ICguLi5tc2dzKSA9PiB7IGlmIChMT0dfTEVWRUxfSU5GTyA+PSB0aGlzLmxvZ0xldmVsKSB7IGxvZ2dlci5pbmZvKG1zZ3MpIH0gfSxcbiAgICAgIHdhcm46ICguLi5tc2dzKSA9PiB7IGlmIChMT0dfTEVWRUxfV0FSTiA+PSB0aGlzLmxvZ0xldmVsKSB7IGxvZ2dlci53YXJuKG1zZ3MpIH0gfSxcbiAgICAgIGVycm9yOiAoLi4ubXNncykgPT4geyBpZiAoTE9HX0xFVkVMX0VSUk9SID49IHRoaXMubG9nTGV2ZWwpIHsgbG9nZ2VyLmVycm9yKG1zZ3MpIH0gfVxuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/command-parser.js b/dist/command-parser.js index 2202db8..c2650a2 100644 --- a/dist/command-parser.js +++ b/dist/command-parser.js @@ -461,4 +461,4 @@ function parseFetchValue(key, value) { function parseSEARCH(response) { return (0, _ramda.pipe)((0, _ramda.pathOr)([], ['payload', 'SEARCH']), (0, _ramda.map)(x => x.attributes || []), _ramda.flatten, (0, _ramda.map)(nr => Number((0, _ramda.propOr)(nr || 0, 'value', nr)) || 0), (0, _ramda.sort)((a, b) => a > b))(response); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kLXBhcnNlci5qcyJdLCJuYW1lcyI6WyJwYXJzZU5BTUVTUEFDRSIsInBhcnNlTkFNRVNQQUNFRWxlbWVudCIsInBhcnNlU0VMRUNUIiwicGFyc2VFTlZFTE9QRSIsInBhcnNlQk9EWVNUUlVDVFVSRSIsInBhcnNlRkVUQ0giLCJwYXJzZVNFQVJDSCIsInJlc3BvbnNlIiwicGF5bG9hZCIsIk5BTUVTUEFDRSIsImxlbmd0aCIsImF0dHJpYnV0ZXMiLCJjb25jYXQiLCJwb3AiLCJwZXJzb25hbCIsInVzZXJzIiwic2hhcmVkIiwiZWxlbWVudCIsIm1hcCIsIm5zIiwicHJlZml4IiwidmFsdWUiLCJkZWxpbWl0ZXIiLCJtYWlsYm94IiwicmVhZE9ubHkiLCJjb2RlIiwiZXhpc3RzUmVzcG9uc2UiLCJFWElTVFMiLCJmbGFnc1Jlc3BvbnNlIiwiRkxBR1MiLCJva1Jlc3BvbnNlIiwiT0siLCJleGlzdHMiLCJuciIsImZsYWdzIiwiZmxhZyIsInRvU3RyaW5nIiwidHJpbSIsImZvckVhY2giLCJvayIsInBlcm1hbmVudEZsYWdzIiwicGVybWFuZW50ZmxhZ3MiLCJ1aWRWYWxpZGl0eSIsIk51bWJlciIsInVpZHZhbGlkaXR5IiwidWlkTmV4dCIsInVpZG5leHQiLCJoaWdoZXN0TW9kc2VxIiwiaGlnaGVzdG1vZHNlcSIsIm5vTW9kc2VxIiwiZW52ZWxvcGUiLCJkYXRlIiwic3ViamVjdCIsImZyb20iLCJwcm9jZXNzQWRkcmVzc2VzIiwic2VuZGVyIiwidG8iLCJjYyIsImJjYyIsImxpc3QiLCJhZGRyIiwibmFtZSIsImFkZHJlc3MiLCJmb3JtYXR0ZWQiLCJlbmNvZGVBZGRyZXNzTmFtZSIsInBhcnNlZCIsInNoaWZ0IiwidGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJub2RlIiwicGF0aCIsImN1ck5vZGUiLCJpIiwicGFydCIsImpvaW4iLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZE5vZGVzIiwicHVzaCIsInR5cGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlcnMiLCJhdHRyaWJ1dGVzVG9PYmplY3QiLCJpZCIsImRlc2NyaXB0aW9uIiwiZW5jb2RpbmciLCJzaXplIiwibGluZUNvdW50IiwibWQ1IiwiZGlzcG9zaXRpb24iLCJkaXNwb3NpdGlvblBhcmFtZXRlcnMiLCJsYW5ndWFnZSIsInZhbCIsImxvY2F0aW9uIiwiYXR0cnMiLCJrZXlUcmFuc2Zvcm0iLCJ2YWx1ZVRyYW5zZm9ybSIsInZhbHMiLCJrZXlzIiwiZmlsdGVyIiwiXyIsInZhbHVlcyIsIkZFVENIIiwibWVzc2FnZXMiLCJpdGVtIiwicGFyYW1zIiwibWVzc2FnZSIsImxlbiIsImtleSIsInJlcGxhY2UiLCJwYXJzZUZldGNoVmFsdWUiLCJ4IiwiYSIsImIiXSwibWFwcGluZ3MiOiI7Ozs7O1FBV2dCQSxjLEdBQUFBLGM7UUF1QkFDLHFCLEdBQUFBLHFCO1FBd0JBQyxXLEdBQUFBLFc7UUFtREFDLGEsR0FBQUEsYTtRQXdGQUMsa0IsR0FBQUEsa0I7UUE4SkFDLFUsR0FBQUEsVTtRQXVGQUMsVyxHQUFBQSxXOztBQTFiaEI7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBOzs7Ozs7QUFNTyxTQUFTTixjQUFULENBQXlCTyxRQUF6QixFQUFtQztBQUN4QyxNQUFJLENBQUNBLFNBQVNDLE9BQVYsSUFBcUIsQ0FBQ0QsU0FBU0MsT0FBVCxDQUFpQkMsU0FBdkMsSUFBb0QsQ0FBQ0YsU0FBU0MsT0FBVCxDQUFpQkMsU0FBakIsQ0FBMkJDLE1BQXBGLEVBQTRGO0FBQzFGLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQUlDLGFBQWEsR0FBR0MsTUFBSCxDQUFVTCxTQUFTQyxPQUFULENBQWlCQyxTQUFqQixDQUEyQkksR0FBM0IsR0FBaUNGLFVBQWpDLElBQStDLEVBQXpELENBQWpCO0FBQ0EsTUFBSSxDQUFDQSxXQUFXRCxNQUFoQixFQUF3QjtBQUN0QixXQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFPO0FBQ0xJLGNBQVViLHNCQUFzQlUsV0FBVyxDQUFYLENBQXRCLENBREw7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QUFKLEtBQVVELElBQUlDLENBQW5CLENBTEssRUFNTDNHLFFBTkssQ0FBUDtBQU9EIiwiZmlsZSI6ImNvbW1hbmQtcGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlQWRkcmVzcyBmcm9tICdlbWFpbGpzLWFkZHJlc3NwYXJzZXInXG5pbXBvcnQgeyBjb21waWxlciB9IGZyb20gJ2VtYWlsanMtaW1hcC1oYW5kbGVyJ1xuaW1wb3J0IHsgc29ydCwgbWFwLCBwaXBlLCB6aXAsIGZyb21QYWlycywgcHJvcCwgcGF0aE9yLCBwcm9wT3IsIGZsYXR0ZW4sIHRvTG93ZXIgfSBmcm9tICdyYW1kYSdcbmltcG9ydCB7IG1pbWVXb3JkRW5jb2RlLCBtaW1lV29yZHNEZWNvZGUgfSBmcm9tICdlbWFpbGpzLW1pbWUtY29kZWMnXG5cbi8qKlxuICogUGFyc2VzIE5BTUVTUEFDRSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZVxuICogQHJldHVybiB7T2JqZWN0fSBOYW1lc3BhY2VzIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOQU1FU1BBQ0UgKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UucGF5bG9hZCB8fCAhcmVzcG9uc2UucGF5bG9hZC5OQU1FU1BBQ0UgfHwgIXJlc3BvbnNlLnBheWxvYWQuTkFNRVNQQUNFLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGV0IGF0dHJpYnV0ZXMgPSBbXS5jb25jYXQocmVzcG9uc2UucGF5bG9hZC5OQU1FU1BBQ0UucG9wKCkuYXR0cmlidXRlcyB8fCBbXSlcbiAgaWYgKCFhdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJzb25hbDogcGFyc2VOQU1FU1BBQ0VFbGVtZW50KGF0dHJpYnV0ZXNbMF0pLFxuICAgIHVzZXJzOiBwYXJzZU5BTUVTUEFDRUVsZW1lbnQoYXR0cmlidXRlc1sxXSksXG4gICAgc2hhcmVkOiBwYXJzZU5BTUVTUEFDRUVsZW1lbnQoYXR0cmlidXRlc1syXSlcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIE5BTUVTUEFDRSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gTmFtZXNwYWNlcyBlbGVtZW50IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOQU1FU1BBQ0VFbGVtZW50IChlbGVtZW50KSB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZWxlbWVudCA9IFtdLmNvbmNhdChlbGVtZW50IHx8IFtdKVxuICByZXR1cm4gZWxlbWVudC5tYXAoKG5zKSA9PiB7XG4gICAgaWYgKCFucyB8fCAhbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4OiBuc1swXS52YWx1ZSxcbiAgICAgIGRlbGltaXRlcjogbnNbMV0gJiYgbnNbMV0udmFsdWUgLy8gVGhlIGRlbGltaXRlciBjYW4gbGVnYWxseSBiZSBOSUwgd2hpY2ggbWFwcyB0byBudWxsXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIFBhcnNlcyBTRUxFQ1QgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2VcbiAqIEByZXR1cm4ge09iamVjdH0gTWFpbGJveCBpbmZvcm1hdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0VMRUNUIChyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgbWFpbGJveCA9IHtcbiAgICByZWFkT25seTogcmVzcG9uc2UuY29kZSA9PT0gJ1JFQUQtT05MWSdcbiAgfVxuICBsZXQgZXhpc3RzUmVzcG9uc2UgPSByZXNwb25zZS5wYXlsb2FkLkVYSVNUUyAmJiByZXNwb25zZS5wYXlsb2FkLkVYSVNUUy5wb3AoKVxuICBsZXQgZmxhZ3NSZXNwb25zZSA9IHJlc3BvbnNlLnBheWxvYWQuRkxBR1MgJiYgcmVzcG9uc2UucGF5bG9hZC5GTEFHUy5wb3AoKVxuICBsZXQgb2tSZXNwb25zZSA9IHJlc3BvbnNlLnBheWxvYWQuT0tcblxuICBpZiAoZXhpc3RzUmVzcG9uc2UpIHtcbiAgICBtYWlsYm94LmV4aXN0cyA9IGV4aXN0c1Jlc3BvbnNlLm5yIHx8IDBcbiAgfVxuXG4gIGlmIChmbGFnc1Jlc3BvbnNlICYmIGZsYWdzUmVzcG9uc2UuYXR0cmlidXRlcyAmJiBmbGFnc1Jlc3BvbnNlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgbWFpbGJveC5mbGFncyA9IGZsYWdzUmVzcG9uc2UuYXR0cmlidXRlc1swXS5tYXAoKGZsYWcpID0+IChmbGFnLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKSlcbiAgfVxuXG4gIFtdLmNvbmNhdChva1Jlc3BvbnNlIHx8IFtdKS5mb3JFYWNoKChvaykgPT4ge1xuICAgIHN3aXRjaCAob2sgJiYgb2suY29kZSkge1xuICAgICAgY2FzZSAnUEVSTUFORU5URkxBR1MnOlxuICAgICAgICBtYWlsYm94LnBlcm1hbmVudEZsYWdzID0gW10uY29uY2F0KG9rLnBlcm1hbmVudGZsYWdzIHx8IFtdKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnVUlEVkFMSURJVFknOlxuICAgICAgICBtYWlsYm94LnVpZFZhbGlkaXR5ID0gTnVtYmVyKG9rLnVpZHZhbGlkaXR5KSB8fCAwXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdVSURORVhUJzpcbiAgICAgICAgbWFpbGJveC51aWROZXh0ID0gTnVtYmVyKG9rLnVpZG5leHQpIHx8IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ0hJR0hFU1RNT0RTRVEnOlxuICAgICAgICBtYWlsYm94LmhpZ2hlc3RNb2RzZXEgPSBvay5oaWdoZXN0bW9kc2VxIHx8ICcwJyAvLyBrZWVwIDY0Yml0IHVpbnQgYXMgYSBzdHJpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ05PTU9EU0VRJzpcbiAgICAgICAgbWFpbGJveC5ub01vZHNlcSA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG1haWxib3hcbn1cblxuLyoqXG4gKiBQYXJzZXMgbWVzc2FnZSBlbnZlbG9wZSBmcm9tIEZFVENIIHJlc3BvbnNlLiBBbGwga2V5cyBpbiB0aGUgcmVzdWx0aW5nXG4gKiBvYmplY3QgYXJlIGxvd2VyY2FzZS4gQWRkcmVzcyBmaWVsZHMgYXJlIGFsbCBhcnJheXMgd2l0aCB7bmFtZTosIGFkZHJlc3M6fVxuICogc3RydWN0dXJlZCB2YWx1ZXMuIFVuaWNvZGUgc3RyaW5ncyBhcmUgYXV0b21hdGljYWxseSBkZWNvZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlIEVudmVsb3BlIGFycmF5XG4gKiBAcGFyYW0ge09iamVjdH0gRW52ZWxvcGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVOVkVMT1BFICh2YWx1ZSkge1xuICBsZXQgZW52ZWxvcGUgPSB7fVxuXG4gIGlmICh2YWx1ZVswXSAmJiB2YWx1ZVswXS52YWx1ZSkge1xuICAgIGVudmVsb3BlLmRhdGUgPSB2YWx1ZVswXS52YWx1ZVxuICB9XG5cbiAgaWYgKHZhbHVlWzFdICYmIHZhbHVlWzFdLnZhbHVlKSB7XG4gICAgZW52ZWxvcGUuc3ViamVjdCA9IG1pbWVXb3Jkc0RlY29kZSh2YWx1ZVsxXSAmJiB2YWx1ZVsxXS52YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZVsyXSAmJiB2YWx1ZVsyXS5sZW5ndGgpIHtcbiAgICBlbnZlbG9wZS5mcm9tID0gcHJvY2Vzc0FkZHJlc3Nlcyh2YWx1ZVsyXSlcbiAgfVxuXG4gIGlmICh2YWx1ZVszXSAmJiB2YWx1ZVszXS5sZW5ndGgpIHtcbiAgICBlbnZlbG9wZS5zZW5kZXIgPSBwcm9jZXNzQWRkcmVzc2VzKHZhbHVlWzNdKVxuICB9XG5cbiAgaWYgKHZhbHVlWzRdICYmIHZhbHVlWzRdLmxlbmd0aCkge1xuICAgIGVudmVsb3BlWydyZXBseS10byddID0gcHJvY2Vzc0FkZHJlc3Nlcyh2YWx1ZVs0XSlcbiAgfVxuXG4gIGlmICh2YWx1ZVs1XSAmJiB2YWx1ZVs1XS5sZW5ndGgpIHtcbiAgICBlbnZlbG9wZS50byA9IHByb2Nlc3NBZGRyZXNzZXModmFsdWVbNV0pXG4gIH1cblxuICBpZiAodmFsdWVbNl0gJiYgdmFsdWVbNl0ubGVuZ3RoKSB7XG4gICAgZW52ZWxvcGUuY2MgPSBwcm9jZXNzQWRkcmVzc2VzKHZhbHVlWzZdKVxuICB9XG5cbiAgaWYgKHZhbHVlWzddICYmIHZhbHVlWzddLmxlbmd0aCkge1xuICAgIGVudmVsb3BlLmJjYyA9IHByb2Nlc3NBZGRyZXNzZXModmFsdWVbN10pXG4gIH1cblxuICBpZiAodmFsdWVbOF0gJiYgdmFsdWVbOF0udmFsdWUpIHtcbiAgICBlbnZlbG9wZVsnaW4tcmVwbHktdG8nXSA9IHZhbHVlWzhdLnZhbHVlXG4gIH1cblxuICBpZiAodmFsdWVbOV0gJiYgdmFsdWVbOV0udmFsdWUpIHtcbiAgICBlbnZlbG9wZVsnbWVzc2FnZS1pZCddID0gdmFsdWVbOV0udmFsdWVcbiAgfVxuXG4gIHJldHVybiBlbnZlbG9wZVxufVxuXG4vKlxuICogRU5WRUxPUEUgbGlzdHMgYWRkcmVzc2VzIGFzIFtuYW1lLXBhcnQsIHNvdXJjZS1yb3V0ZSwgdXNlcm5hbWUsIGhvc3RuYW1lXVxuICogd2hlcmUgc291cmNlLXJvdXRlIGlzIG5vdCB1c2VkIGFueW1vcmUgYW5kIGNhbiBiZSBpZ25vcmVkLlxuICogVG8gZ2V0IGNvbXBhcmFibGUgcmVzdWx0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBlbWFpbC5qcyBzdGFja1xuICogYnJvd3NlcmJveCBmZWVkcyB0aGUgcGFyc2VkIGFkZHJlc3MgdmFsdWVzIGZyb20gRU5WRUxPUEVcbiAqIHRvIGFkZHJlc3NwYXJzZXIgYW5kIHVzZXMgcmVzdWx0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZVxuICogcHJlLXBhcnNlZCBhZGRyZXNzZXNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0FkZHJlc3NlcyAobGlzdCA9IFtdKSB7XG4gIHJldHVybiBsaXN0Lm1hcCgoYWRkcikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSAocGF0aE9yKCcnLCBbJzAnLCAndmFsdWUnXSwgYWRkcikpLnRyaW0oKVxuICAgIGNvbnN0IGFkZHJlc3MgPSAocGF0aE9yKCcnLCBbJzInLCAndmFsdWUnXSwgYWRkcikpICsgJ0AnICsgKHBhdGhPcignJywgWyczJywgJ3ZhbHVlJ10sIGFkZHIpKVxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IG5hbWUgPyAoZW5jb2RlQWRkcmVzc05hbWUobmFtZSkgKyAnIDwnICsgYWRkcmVzcyArICc+JykgOiBhZGRyZXNzXG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlQWRkcmVzcyhmb3JtYXR0ZWQpLnNoaWZ0KCkgLy8gdGhlcmUgc2hvdWxkIGJlIGp1c3QgYSBzaW5nbGUgYWRkcmVzc1xuICAgIHBhcnNlZC5uYW1lID0gbWltZVdvcmRzRGVjb2RlKHBhcnNlZC5uYW1lKVxuICAgIHJldHVybiBwYXJzZWRcbiAgfSlcbn1cblxuLyoqXG4gKiBJZiBuZWVkZWQsIGVuY2xvc2VzIHdpdGggcXVvdGVzIG9yIG1pbWUgZW5jb2RlcyB0aGUgbmFtZSBwYXJ0IG9mIGFuIGUtbWFpbCBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBwYXJ0IG9mIGFuIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtTdHJpbmd9IE1pbWUgd29yZCBlbmNvZGVkIG9yIHF1b3RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZW5jb2RlQWRkcmVzc05hbWUgKG5hbWUpIHtcbiAgaWYgKCEvXltcXHcgJ10qJC8udGVzdChuYW1lKSkge1xuICAgIGlmICgvXltcXHgyMC1cXHg3ZV0qJC8udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5hbWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaW1lV29yZEVuY29kZShuYW1lLCAnUScsIDUyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZVxufVxuXG4vKipcbiAqIFBhcnNlcyBtZXNzYWdlIGJvZHkgc3RydWN0dXJlIGZyb20gRkVUQ0ggcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWUgQk9EWVNUUlVDVFVSRSBhcnJheVxuICogQHBhcmFtIHtPYmplY3R9IEVudmVsb3BlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCT0RZU1RSVUNUVVJFIChub2RlLCBwYXRoID0gW10pIHtcbiAgbGV0IGN1ck5vZGUgPSB7fVxuICBsZXQgaSA9IDBcbiAgbGV0IHBhcnQgPSAwXG5cbiAgaWYgKHBhdGgubGVuZ3RoKSB7XG4gICAgY3VyTm9kZS5wYXJ0ID0gcGF0aC5qb2luKCcuJylcbiAgfVxuXG4gIC8vIG11bHRpcGFydFxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlWzBdKSkge1xuICAgIGN1ck5vZGUuY2hpbGROb2RlcyA9IFtdXG4gICAgd2hpbGUgKEFycmF5LmlzQXJyYXkobm9kZVtpXSkpIHtcbiAgICAgIGN1ck5vZGUuY2hpbGROb2Rlcy5wdXNoKHBhcnNlQk9EWVNUUlVDVFVSRShub2RlW2ldLCBwYXRoLmNvbmNhdCgrK3BhcnQpKSlcbiAgICAgIGkrK1xuICAgIH1cblxuICAgIC8vIG11bHRpcGFydCB0eXBlXG4gICAgY3VyTm9kZS50eXBlID0gJ211bHRpcGFydC8nICsgKChub2RlW2krK10gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIGV4dGVuc2lvbiBkYXRhIChub3QgYXZhaWxhYmxlIGZvciBCT0RZIHJlcXVlc3RzKVxuXG4gICAgLy8gYm9keSBwYXJhbWV0ZXIgcGFyZW50aGVzaXplZCBsaXN0XG4gICAgaWYgKGkgPCBub2RlLmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChub2RlW2ldKSB7XG4gICAgICAgIGN1ck5vZGUucGFyYW1ldGVycyA9IGF0dHJpYnV0ZXNUb09iamVjdChub2RlW2ldKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbnRlbnQgdHlwZVxuICAgIGN1ck5vZGUudHlwZSA9IFtcbiAgICAgICgobm9kZVtpKytdIHx8IHt9KS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLCAoKG5vZGVbaSsrXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIF0uam9pbignLycpXG5cbiAgICAvLyBib2R5IHBhcmFtZXRlciBwYXJlbnRoZXNpemVkIGxpc3RcbiAgICBpZiAobm9kZVtpXSkge1xuICAgICAgY3VyTm9kZS5wYXJhbWV0ZXJzID0gYXR0cmlidXRlc1RvT2JqZWN0KG5vZGVbaV0pXG4gICAgfVxuICAgIGkrK1xuXG4gICAgLy8gaWRcbiAgICBpZiAobm9kZVtpXSkge1xuICAgICAgY3VyTm9kZS5pZCA9ICgobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKClcbiAgICB9XG4gICAgaSsrXG5cbiAgICAvLyBkZXNjcmlwdGlvblxuICAgIGlmIChub2RlW2ldKSB7XG4gICAgICBjdXJOb2RlLmRlc2NyaXB0aW9uID0gKChub2RlW2ldIHx8IHt9KS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKVxuICAgIH1cbiAgICBpKytcblxuICAgIC8vIGVuY29kaW5nXG4gICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgIGN1ck5vZGUuZW5jb2RpbmcgPSAoKG5vZGVbaV0gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICB9XG4gICAgaSsrXG5cbiAgICAvLyBzaXplXG4gICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgIGN1ck5vZGUuc2l6ZSA9IE51bWJlcigobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgMCkgfHwgMFxuICAgIH1cbiAgICBpKytcblxuICAgIGlmIChjdXJOb2RlLnR5cGUgPT09ICdtZXNzYWdlL3JmYzgyMicpIHtcbiAgICAgIC8vIG1lc3NhZ2UvcmZjIGFkZHMgYWRkaXRpb25hbCBlbnZlbG9wZSwgYm9keXN0cnVjdHVyZSBhbmQgbGluZSBjb3VudCB2YWx1ZXNcblxuICAgICAgLy8gZW52ZWxvcGVcbiAgICAgIGlmIChub2RlW2ldKSB7XG4gICAgICAgIGN1ck5vZGUuZW52ZWxvcGUgPSBwYXJzZUVOVkVMT1BFKFtdLmNvbmNhdChub2RlW2ldIHx8IFtdKSlcbiAgICAgIH1cbiAgICAgIGkrK1xuXG4gICAgICBpZiAobm9kZVtpXSkge1xuICAgICAgICBjdXJOb2RlLmNoaWxkTm9kZXMgPSBbXG4gICAgICAgICAgLy8gcmZjODIyIGJvZHlwYXJ0cyBzaGFyZSB0aGUgc2FtZSBwYXRoLCBkaWZmZXJlbmNlIGlzIGJldHdlZW4gTUlNRSBhbmQgSEVBREVSXG4gICAgICAgICAgLy8gcGF0aC5NSU1FIHJldHVybnMgbWVzc2FnZS9yZmM4MjIgaGVhZGVyXG4gICAgICAgICAgLy8gcGF0aC5IRUFERVIgcmV0dXJucyBpbmxpbmVkIG1lc3NhZ2UgaGVhZGVyXG4gICAgICAgICAgcGFyc2VCT0RZU1RSVUNUVVJFKG5vZGVbaV0sIHBhdGgpXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIGkrK1xuXG4gICAgICAvLyBsaW5lIGNvdW50XG4gICAgICBpZiAobm9kZVtpXSkge1xuICAgICAgICBjdXJOb2RlLmxpbmVDb3VudCA9IE51bWJlcigobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgMCkgfHwgMFxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmICgvXnRleHRcXC8vLnRlc3QoY3VyTm9kZS50eXBlKSkge1xuICAgICAgLy8gdGV4dC8qIGFkZHMgYWRkaXRpb25hbCBsaW5lIGNvdW50IHZhbHVlc1xuXG4gICAgICAvLyBsaW5lIGNvdW50XG4gICAgICBpZiAobm9kZVtpXSkge1xuICAgICAgICBjdXJOb2RlLmxpbmVDb3VudCA9IE51bWJlcigobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgMCkgfHwgMFxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfVxuXG4gICAgLy8gZXh0ZW5zaW9uIGRhdGEgKG5vdCBhdmFpbGFibGUgZm9yIEJPRFkgcmVxdWVzdHMpXG5cbiAgICAvLyBtZDVcbiAgICBpZiAoaSA8IG5vZGUubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgICAgY3VyTm9kZS5tZDUgPSAoKG5vZGVbaV0gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cbiAgICAgIGkrK1xuICAgIH1cbiAgfVxuXG4gIC8vIHRoZSBmb2xsb3dpbmcgYXJlIHNoYXJlZCBleHRlbnNpb24gdmFsdWVzIChmb3IgYm90aCBtdWx0aXBhcnQgYW5kIG5vbi1tdWx0aXBhcnQgcGFydHMpXG4gIC8vIG5vdCBhdmFpbGFibGUgZm9yIEJPRFkgcmVxdWVzdHNcblxuICAvLyBib2R5IGRpc3Bvc2l0aW9uXG4gIGlmIChpIDwgbm9kZS5sZW5ndGggLSAxKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZVtpXSkgJiYgbm9kZVtpXS5sZW5ndGgpIHtcbiAgICAgIGN1ck5vZGUuZGlzcG9zaXRpb24gPSAoKG5vZGVbaV1bMF0gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGVbaV1bMV0pKSB7XG4gICAgICAgIGN1ck5vZGUuZGlzcG9zaXRpb25QYXJhbWV0ZXJzID0gYXR0cmlidXRlc1RvT2JqZWN0KG5vZGVbaV1bMV0pXG4gICAgICB9XG4gICAgfVxuICAgIGkrK1xuICB9XG5cbiAgLy8gYm9keSBsYW5ndWFnZVxuICBpZiAoaSA8IG5vZGUubGVuZ3RoIC0gMSkge1xuICAgIGlmIChub2RlW2ldKSB7XG4gICAgICBjdXJOb2RlLmxhbmd1YWdlID0gW10uY29uY2F0KG5vZGVbaV0pLm1hcCgodmFsKSA9PiBwcm9wT3IoJycsICd2YWx1ZScsIHZhbCkudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaSsrXG4gIH1cblxuICAvLyBib2R5IGxvY2F0aW9uXG4gIC8vIE5CISBkZWZpbmVkIGFzIGEgXCJzdHJpbmcgbGlzdFwiIGluIFJGQzM1MDEgYnV0IHJlcGxhY2VkIGluIGVycmF0YSBkb2N1bWVudCB3aXRoIFwic3RyaW5nXCJcbiAgLy8gRXJyYXRhOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL2VycmF0YV9zZWFyY2gucGhwP3JmYz0zNTAxXG4gIGlmIChpIDwgbm9kZS5sZW5ndGggLSAxKSB7XG4gICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgIGN1ck5vZGUubG9jYXRpb24gPSAoKG5vZGVbaV0gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpXG4gICAgfVxuICAgIGkrK1xuICB9XG5cbiAgcmV0dXJuIGN1ck5vZGVcbn1cblxuZnVuY3Rpb24gYXR0cmlidXRlc1RvT2JqZWN0IChhdHRycyA9IFtdLCBrZXlUcmFuc2Zvcm0gPSB0b0xvd2VyLCB2YWx1ZVRyYW5zZm9ybSA9IG1pbWVXb3Jkc0RlY29kZSkge1xuICBjb25zdCB2YWxzID0gYXR0cnMubWFwKHByb3AoJ3ZhbHVlJykpXG4gIGNvbnN0IGtleXMgPSB2YWxzLmZpbHRlcigoXywgaSkgPT4gaSAlIDIgPT09IDApLm1hcChrZXlUcmFuc2Zvcm0pXG4gIGNvbnN0IHZhbHVlcyA9IHZhbHMuZmlsdGVyKChfLCBpKSA9PiBpICUgMiA9PT0gMSkubWFwKHZhbHVlVHJhbnNmb3JtKVxuICByZXR1cm4gZnJvbVBhaXJzKHppcChrZXlzLCB2YWx1ZXMpKVxufVxuXG4vKipcbiAqIFBhcnNlcyBGRVRDSCByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZVxuICogQHJldHVybiB7T2JqZWN0fSBNZXNzYWdlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGRVRDSCAocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UucGF5bG9hZCB8fCAhcmVzcG9uc2UucGF5bG9hZC5GRVRDSCB8fCAhcmVzcG9uc2UucGF5bG9hZC5GRVRDSC5sZW5ndGgpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGxldCBsaXN0ID0gW11cbiAgbGV0IG1lc3NhZ2VzID0ge31cblxuICByZXNwb25zZS5wYXlsb2FkLkZFVENILmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBsZXQgcGFyYW1zID0gW10uY29uY2F0KFtdLmNvbmNhdChpdGVtLmF0dHJpYnV0ZXMgfHwgW10pWzBdIHx8IFtdKSAvLyBlbnN1cmUgdGhlIGZpcnN0IHZhbHVlIGlzIGFuIGFycmF5XG4gICAgbGV0IG1lc3NhZ2VcbiAgICBsZXQgaSwgbGVuLCBrZXlcblxuICAgIGlmIChtZXNzYWdlc1tpdGVtLm5yXSkge1xuICAgICAgLy8gc2FtZSBzZXF1ZW5jZSBudW1iZXIgaXMgYWxyZWFkeSB1c2VkLCBzbyBtZXJnZSB2YWx1ZXMgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBtZXNzYWdlIG9iamVjdFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzW2l0ZW0ubnJdXG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2VzW2l0ZW0ubnJdID0gbWVzc2FnZSA9IHtcbiAgICAgICAgJyMnOiBpdGVtLm5yXG4gICAgICB9XG4gICAgICBsaXN0LnB1c2gobWVzc2FnZSlcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpICUgMiA9PT0gMCkge1xuICAgICAgICBrZXkgPSBjb21waWxlcih7XG4gICAgICAgICAgYXR0cmlidXRlczogW3BhcmFtc1tpXV1cbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC88XFxkKz4kLywgJycpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBtZXNzYWdlW2tleV0gPSBwYXJzZUZldGNoVmFsdWUoa2V5LCBwYXJhbXNbaV0pXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBsaXN0XG59XG5cbi8qKlxuICogUGFyc2VzIGEgc2luZ2xlIHZhbHVlIGZyb20gdGhlIEZFVENIIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgS2V5IG5hbWUgKHVwcGVyY2FzZSlcbiAqIEBwYXJhbSB7TWl6ZWR9IHZhbHVlIFZhbHVlIGZvciB0aGUga2V5XG4gKiBAcmV0dXJuIHtNaXhlZH0gUHJvY2Vzc2VkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmV0Y2hWYWx1ZSAoa2V5LCB2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAndWlkJzpcbiAgICAgIGNhc2UgJ3JmYzgyMi5zaXplJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZS52YWx1ZSkgfHwgMFxuICAgICAgY2FzZSAnbW9kc2VxJzogLy8gZG8gbm90IGNhc3QgNjQgYml0IHVpbnQgdG8gYSBudW1iZXJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlIHx8ICcwJ1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUudmFsdWVcbiAgfVxuXG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnZmxhZ3MnOlxuICAgIGNhc2UgJ3gtZ20tbGFiZWxzJzpcbiAgICAgIHZhbHVlID0gW10uY29uY2F0KHZhbHVlKS5tYXAoKGZsYWcpID0+IChmbGFnLnZhbHVlIHx8ICcnKSlcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnZW52ZWxvcGUnOlxuICAgICAgdmFsdWUgPSBwYXJzZUVOVkVMT1BFKFtdLmNvbmNhdCh2YWx1ZSB8fCBbXSkpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2JvZHlzdHJ1Y3R1cmUnOlxuICAgICAgdmFsdWUgPSBwYXJzZUJPRFlTVFJVQ1RVUkUoW10uY29uY2F0KHZhbHVlIHx8IFtdKSlcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW9kc2VxJzpcbiAgICAgIHZhbHVlID0gKHZhbHVlLnNoaWZ0KCkgfHwge30pLnZhbHVlIHx8ICcwJ1xuICAgICAgYnJlYWtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFBhcnNlcyBTRUFSQ0ggcmVzcG9uc2UuIEdhdGhlcnMgYWxsIHVudGFnZ2VkIFNFQVJDSCByZXNwb25zZXMsIGZldGNoZWQgc2VxLi91aWQgbnVtYmVyc1xuICogYW5kIGNvbXBpbGVzIHRoZXNlIGludG8gYSBzb3J0ZWQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBTb3J0ZWQgU2VxLi9VSUQgbnVtYmVyIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0VBUkNIIChyZXNwb25zZSkge1xuICByZXR1cm4gcGlwZShcbiAgICBwYXRoT3IoW10sIFsncGF5bG9hZCcsICdTRUFSQ0gnXSksXG4gICAgbWFwKHggPT4geC5hdHRyaWJ1dGVzIHx8IFtdKSxcbiAgICBmbGF0dGVuLFxuICAgIG1hcChuciA9PiBOdW1iZXIocHJvcE9yKG5yIHx8IDAsICd2YWx1ZScsIG5yKSkgfHwgMCksXG4gICAgc29ydCgoYSwgYikgPT4gYSA+IGIpXG4gICkocmVzcG9uc2UpXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kLXBhcnNlci5qcyJdLCJuYW1lcyI6WyJwYXJzZU5BTUVTUEFDRSIsInBhcnNlTkFNRVNQQUNFRWxlbWVudCIsInBhcnNlU0VMRUNUIiwicGFyc2VFTlZFTE9QRSIsInBhcnNlQk9EWVNUUlVDVFVSRSIsInBhcnNlRkVUQ0giLCJwYXJzZVNFQVJDSCIsInJlc3BvbnNlIiwicGF5bG9hZCIsIk5BTUVTUEFDRSIsImxlbmd0aCIsImF0dHJpYnV0ZXMiLCJjb25jYXQiLCJwb3AiLCJwZXJzb25hbCIsInVzZXJzIiwic2hhcmVkIiwiZWxlbWVudCIsIm1hcCIsIm5zIiwicHJlZml4IiwidmFsdWUiLCJkZWxpbWl0ZXIiLCJtYWlsYm94IiwicmVhZE9ubHkiLCJjb2RlIiwiZXhpc3RzUmVzcG9uc2UiLCJFWElTVFMiLCJmbGFnc1Jlc3BvbnNlIiwiRkxBR1MiLCJva1Jlc3BvbnNlIiwiT0siLCJleGlzdHMiLCJuciIsImZsYWdzIiwiZmxhZyIsInRvU3RyaW5nIiwidHJpbSIsImZvckVhY2giLCJvayIsInBlcm1hbmVudEZsYWdzIiwicGVybWFuZW50ZmxhZ3MiLCJ1aWRWYWxpZGl0eSIsIk51bWJlciIsInVpZHZhbGlkaXR5IiwidWlkTmV4dCIsInVpZG5leHQiLCJoaWdoZXN0TW9kc2VxIiwiaGlnaGVzdG1vZHNlcSIsIm5vTW9kc2VxIiwiZW52ZWxvcGUiLCJkYXRlIiwic3ViamVjdCIsImZyb20iLCJwcm9jZXNzQWRkcmVzc2VzIiwic2VuZGVyIiwidG8iLCJjYyIsImJjYyIsImxpc3QiLCJhZGRyIiwibmFtZSIsImFkZHJlc3MiLCJmb3JtYXR0ZWQiLCJlbmNvZGVBZGRyZXNzTmFtZSIsInBhcnNlZCIsInNoaWZ0IiwidGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJub2RlIiwicGF0aCIsImN1ck5vZGUiLCJpIiwicGFydCIsImpvaW4iLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZE5vZGVzIiwicHVzaCIsInR5cGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlcnMiLCJhdHRyaWJ1dGVzVG9PYmplY3QiLCJpZCIsImRlc2NyaXB0aW9uIiwiZW5jb2RpbmciLCJzaXplIiwibGluZUNvdW50IiwibWQ1IiwiZGlzcG9zaXRpb24iLCJkaXNwb3NpdGlvblBhcmFtZXRlcnMiLCJsYW5ndWFnZSIsInZhbCIsImxvY2F0aW9uIiwiYXR0cnMiLCJrZXlUcmFuc2Zvcm0iLCJ0b0xvd2VyIiwidmFsdWVUcmFuc2Zvcm0iLCJtaW1lV29yZHNEZWNvZGUiLCJ2YWxzIiwia2V5cyIsImZpbHRlciIsIl8iLCJ2YWx1ZXMiLCJGRVRDSCIsIm1lc3NhZ2VzIiwiaXRlbSIsInBhcmFtcyIsIm1lc3NhZ2UiLCJsZW4iLCJrZXkiLCJyZXBsYWNlIiwicGFyc2VGZXRjaFZhbHVlIiwieCIsImZsYXR0ZW4iLCJhIiwiYiJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFXZ0JBLGMsR0FBQUEsYztRQXVCQUMscUIsR0FBQUEscUI7UUF3QkFDLFcsR0FBQUEsVztRQW1EQUMsYSxHQUFBQSxhO1FBd0ZBQyxrQixHQUFBQSxrQjtRQThKQUMsVSxHQUFBQSxVO1FBdUZBQyxXLEdBQUFBLFc7O0FBMWJoQjs7OztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUE7Ozs7OztBQU1PLFNBQVNOLGNBQVQsQ0FBeUJPLFFBQXpCLEVBQW1DO0FBQ3hDLE1BQUksQ0FBQ0EsU0FBU0MsT0FBVixJQUFxQixDQUFDRCxTQUFTQyxPQUFULENBQWlCQyxTQUF2QyxJQUFvRCxDQUFDRixTQUFTQyxPQUFULENBQWlCQyxTQUFqQixDQUEyQkMsTUFBcEYsRUFBNEY7QUFDMUYsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSUMsYUFBYSxHQUFHQyxNQUFILENBQVVMLFNBQVNDLE9BQVQsQ0FBaUJDLFNBQWpCLENBQTJCSSxHQUEzQixHQUFpQ0YsVUFBakMsSUFBK0MsRUFBekQsQ0FBakI7QUFDQSxNQUFJLENBQUNBLFdBQVdELE1BQWhCLEVBQXdCO0FBQ3RCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU87QUFD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eUJBLEVBQXpCLENBQVAsS0FBd0MsQ0FBbEQsQ0FKSyxFQUtMLGlCQUFLLENBQUNtRixDQUFELEVBQUlDLENBQUosS0FBVUQsSUFBSUMsQ0FBbkIsQ0FMSyxFQU1MOUcsUUFOSyxDQUFQO0FBT0QiLCJmaWxlIjoiY29tbWFuZC1wYXJzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VBZGRyZXNzIGZyb20gJ2VtYWlsanMtYWRkcmVzc3BhcnNlcidcbmltcG9ydCB7IGNvbXBpbGVyIH0gZnJvbSAnZW1haWxqcy1pbWFwLWhhbmRsZXInXG5pbXBvcnQgeyBzb3J0LCBtYXAsIHBpcGUsIHppcCwgZnJvbVBhaXJzLCBwcm9wLCBwYXRoT3IsIHByb3BPciwgZmxhdHRlbiwgdG9Mb3dlciB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IHsgbWltZVdvcmRFbmNvZGUsIG1pbWVXb3Jkc0RlY29kZSB9IGZyb20gJ2VtYWlsanMtbWltZS1jb2RlYydcblxuLyoqXG4gKiBQYXJzZXMgTkFNRVNQQUNFIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IE5hbWVzcGFjZXMgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU5BTUVTUEFDRSAocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5wYXlsb2FkIHx8ICFyZXNwb25zZS5wYXlsb2FkLk5BTUVTUEFDRSB8fCAhcmVzcG9uc2UucGF5bG9hZC5OQU1FU1BBQ0UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsZXQgYXR0cmlidXRlcyA9IFtdLmNvbmNhdChyZXNwb25zZS5wYXlsb2FkLk5BTUVTUEFDRS5wb3AoKS5hdHRyaWJ1dGVzIHx8IFtdKVxuICBpZiAoIWF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcnNvbmFsOiBwYXJzZU5BTUVTUEFDRUVsZW1lbnQoYXR0cmlidXRlc1swXSksXG4gICAgdXNlcnM6IHBhcnNlTkFNRVNQQUNFRWxlbWVudChhdHRyaWJ1dGVzWzFdKSxcbiAgICBzaGFyZWQ6IHBhcnNlTkFNRVNQQUNFRWxlbWVudChhdHRyaWJ1dGVzWzJdKVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIGEgTkFNRVNQQUNFIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybiB7T2JqZWN0fSBOYW1lc3BhY2VzIGVsZW1lbnQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU5BTUVTUEFDRUVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBlbGVtZW50ID0gW10uY29uY2F0KGVsZW1lbnQgfHwgW10pXG4gIHJldHVybiBlbGVtZW50Lm1hcCgobnMpID0+IHtcbiAgICBpZiAoIW5zIHx8ICFucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXg6IG5zWzBdLnZhbHVlLFxuICAgICAgZGVsaW1pdGVyOiBuc1sxXSAmJiBuc1sxXS52YWx1ZSAvLyBUaGUgZGVsaW1pdGVyIGNhbiBsZWdhbGx5IGJlIE5JTCB3aGljaCBtYXBzIHRvIG51bGxcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUGFyc2VzIFNFTEVDVCByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZVxuICogQHJldHVybiB7T2JqZWN0fSBNYWlsYm94IGluZm9ybWF0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRUxFQ1QgKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLnBheWxvYWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBtYWlsYm94ID0ge1xuICAgIHJlYWRPbmx5OiByZXNwb25zZS5jb2RlID09PSAnUkVBRC1PTkxZJ1xuICB9XG4gIGxldCBleGlzdHNSZXNwb25zZSA9IHJlc3BvbnNlLnBheWxvYWQuRVhJU1RTICYmIHJlc3BvbnNlLnBheWxvYWQuRVhJU1RTLnBvcCgpXG4gIGxldCBmbGFnc1Jlc3BvbnNlID0gcmVzcG9uc2UucGF5bG9hZC5GTEFHUyAmJiByZXNwb25zZS5wYXlsb2FkLkZMQUdTLnBvcCgpXG4gIGxldCBva1Jlc3BvbnNlID0gcmVzcG9uc2UucGF5bG9hZC5PS1xuXG4gIGlmIChleGlzdHNSZXNwb25zZSkge1xuICAgIG1haWxib3guZXhpc3RzID0gZXhpc3RzUmVzcG9uc2UubnIgfHwgMFxuICB9XG5cbiAgaWYgKGZsYWdzUmVzcG9uc2UgJiYgZmxhZ3NSZXNwb25zZS5hdHRyaWJ1dGVzICYmIGZsYWdzUmVzcG9uc2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICBtYWlsYm94LmZsYWdzID0gZmxhZ3NSZXNwb25zZS5hdHRyaWJ1dGVzWzBdLm1hcCgoZmxhZykgPT4gKGZsYWcudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpKVxuICB9XG5cbiAgW10uY29uY2F0KG9rUmVzcG9uc2UgfHwgW10pLmZvckVhY2goKG9rKSA9PiB7XG4gICAgc3dpdGNoIChvayAmJiBvay5jb2RlKSB7XG4gICAgICBjYXNlICdQRVJNQU5FTlRGTEFHUyc6XG4gICAgICAgIG1haWxib3gucGVybWFuZW50RmxhZ3MgPSBbXS5jb25jYXQob2sucGVybWFuZW50ZmxhZ3MgfHwgW10pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdVSURWQUxJRElUWSc6XG4gICAgICAgIG1haWxib3gudWlkVmFsaWRpdHkgPSBOdW1iZXIob2sudWlkdmFsaWRpdHkpIHx8IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ1VJRE5FWFQnOlxuICAgICAgICBtYWlsYm94LnVpZE5leHQgPSBOdW1iZXIob2sudWlkbmV4dCkgfHwgMFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnSElHSEVTVE1PRFNFUSc6XG4gICAgICAgIG1haWxib3guaGlnaGVzdE1vZHNlcSA9IG9rLmhpZ2hlc3Rtb2RzZXEgfHwgJzAnIC8vIGtlZXAgNjRiaXQgdWludCBhcyBhIHN0cmluZ1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnTk9NT0RTRVEnOlxuICAgICAgICBtYWlsYm94Lm5vTW9kc2VxID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWFpbGJveFxufVxuXG4vKipcbiAqIFBhcnNlcyBtZXNzYWdlIGVudmVsb3BlIGZyb20gRkVUQ0ggcmVzcG9uc2UuIEFsbCBrZXlzIGluIHRoZSByZXN1bHRpbmdcbiAqIG9iamVjdCBhcmUgbG93ZXJjYXNlLiBBZGRyZXNzIGZpZWxkcyBhcmUgYWxsIGFycmF5cyB3aXRoIHtuYW1lOiwgYWRkcmVzczp9XG4gKiBzdHJ1Y3R1cmVkIHZhbHVlcy4gVW5pY29kZSBzdHJpbmdzIGFyZSBhdXRvbWF0aWNhbGx5IGRlY29kZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWUgRW52ZWxvcGUgYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSBFbnZlbG9wZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRU5WRUxPUEUgKHZhbHVlKSB7XG4gIGxldCBlbnZlbG9wZSA9IHt9XG5cbiAgaWYgKHZhbHVlWzBdICYmIHZhbHVlWzBdLnZhbHVlKSB7XG4gICAgZW52ZWxvcGUuZGF0ZSA9IHZhbHVlWzBdLnZhbHVlXG4gIH1cblxuICBpZiAodmFsdWVbMV0gJiYgdmFsdWVbMV0udmFsdWUpIHtcbiAgICBlbnZlbG9wZS5zdWJqZWN0ID0gbWltZVdvcmRzRGVjb2RlKHZhbHVlWzFdICYmIHZhbHVlWzFdLnZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlWzJdICYmIHZhbHVlWzJdLmxlbmd0aCkge1xuICAgIGVudmVsb3BlLmZyb20gPSBwcm9jZXNzQWRkcmVzc2VzKHZhbHVlWzJdKVxuICB9XG5cbiAgaWYgKHZhbHVlWzNdICYmIHZhbHVlWzNdLmxlbmd0aCkge1xuICAgIGVudmVsb3BlLnNlbmRlciA9IHByb2Nlc3NBZGRyZXNzZXModmFsdWVbM10pXG4gIH1cblxuICBpZiAodmFsdWVbNF0gJiYgdmFsdWVbNF0ubGVuZ3RoKSB7XG4gICAgZW52ZWxvcGVbJ3JlcGx5LXRvJ10gPSBwcm9jZXNzQWRkcmVzc2VzKHZhbHVlWzRdKVxuICB9XG5cbiAgaWYgKHZhbHVlWzVdICYmIHZhbHVlWzVdLmxlbmd0aCkge1xuICAgIGVudmVsb3BlLnRvID0gcHJvY2Vzc0FkZHJlc3Nlcyh2YWx1ZVs1XSlcbiAgfVxuXG4gIGlmICh2YWx1ZVs2XSAmJiB2YWx1ZVs2XS5sZW5ndGgpIHtcbiAgICBlbnZlbG9wZS5jYyA9IHByb2Nlc3NBZGRyZXNzZXModmFsdWVbNl0pXG4gIH1cblxuICBpZiAodmFsdWVbN10gJiYgdmFsdWVbN10ubGVuZ3RoKSB7XG4gICAgZW52ZWxvcGUuYmNjID0gcHJvY2Vzc0FkZHJlc3Nlcyh2YWx1ZVs3XSlcbiAgfVxuXG4gIGlmICh2YWx1ZVs4XSAmJiB2YWx1ZVs4XS52YWx1ZSkge1xuICAgIGVudmVsb3BlWydpbi1yZXBseS10byddID0gdmFsdWVbOF0udmFsdWVcbiAgfVxuXG4gIGlmICh2YWx1ZVs5XSAmJiB2YWx1ZVs5XS52YWx1ZSkge1xuICAgIGVudmVsb3BlWydtZXNzYWdlLWlkJ10gPSB2YWx1ZVs5XS52YWx1ZVxuICB9XG5cbiAgcmV0dXJuIGVudmVsb3BlXG59XG5cbi8qXG4gKiBFTlZFTE9QRSBsaXN0cyBhZGRyZXNzZXMgYXMgW25hbWUtcGFydCwgc291cmNlLXJvdXRlLCB1c2VybmFtZSwgaG9zdG5hbWVdXG4gKiB3aGVyZSBzb3VyY2Utcm91dGUgaXMgbm90IHVzZWQgYW55bW9yZSBhbmQgY2FuIGJlIGlnbm9yZWQuXG4gKiBUbyBnZXQgY29tcGFyYWJsZSByZXN1bHRzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGVtYWlsLmpzIHN0YWNrXG4gKiBicm93c2VyYm94IGZlZWRzIHRoZSBwYXJzZWQgYWRkcmVzcyB2YWx1ZXMgZnJvbSBFTlZFTE9QRVxuICogdG8gYWRkcmVzc3BhcnNlciBhbmQgdXNlcyByZXN1bHRpbmcgdmFsdWVzIGluc3RlYWQgb2YgdGhlXG4gKiBwcmUtcGFyc2VkIGFkZHJlc3Nlc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQWRkcmVzc2VzIChsaXN0ID0gW10pIHtcbiAgcmV0dXJuIGxpc3QubWFwKChhZGRyKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IChwYXRoT3IoJycsIFsnMCcsICd2YWx1ZSddLCBhZGRyKSkudHJpbSgpXG4gICAgY29uc3QgYWRkcmVzcyA9IChwYXRoT3IoJycsIFsnMicsICd2YWx1ZSddLCBhZGRyKSkgKyAnQCcgKyAocGF0aE9yKCcnLCBbJzMnLCAndmFsdWUnXSwgYWRkcikpXG4gICAgY29uc3QgZm9ybWF0dGVkID0gbmFtZSA/IChlbmNvZGVBZGRyZXNzTmFtZShuYW1lKSArICcgPCcgKyBhZGRyZXNzICsgJz4nKSA6IGFkZHJlc3NcbiAgICBsZXQgcGFyc2VkID0gcGFyc2VBZGRyZXNzKGZvcm1hdHRlZCkuc2hpZnQoKSAvLyB0aGVyZSBzaG91bGQgYmUganVzdCBhIHNpbmdsZSBhZGRyZXNzXG4gICAgcGFyc2VkLm5hbWUgPSBtaW1lV29yZHNEZWNvZGUocGFyc2VkLm5hbWUpXG4gICAgcmV0dXJuIHBhcnNlZFxuICB9KVxufVxuXG4vKipcbiAqIElmIG5lZWRlZCwgZW5jbG9zZXMgd2l0aCBxdW90ZXMgb3IgbWltZSBlbmNvZGVzIHRoZSBuYW1lIHBhcnQgb2YgYW4gZS1tYWlsIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIHBhcnQgb2YgYW4gYWRkcmVzc1xuICogQHJldHVybnMge1N0cmluZ30gTWltZSB3b3JkIGVuY29kZWQgb3IgcXVvdGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlbmNvZGVBZGRyZXNzTmFtZSAobmFtZSkge1xuICBpZiAoIS9eW1xcdyAnXSokLy50ZXN0KG5hbWUpKSB7XG4gICAgaWYgKC9eW1xceDIwLVxceDdlXSokLy50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobmFtZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pbWVXb3JkRW5jb2RlKG5hbWUsICdRJywgNTIpXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogUGFyc2VzIG1lc3NhZ2UgYm9keSBzdHJ1Y3R1cmUgZnJvbSBGRVRDSCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZSBCT0RZU1RSVUNUVVJFIGFycmF5XG4gKiBAcGFyYW0ge09iamVjdH0gRW52ZWxvcGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJPRFlTVFJVQ1RVUkUgKG5vZGUsIHBhdGggPSBbXSkge1xuICBsZXQgY3VyTm9kZSA9IHt9XG4gIGxldCBpID0gMFxuICBsZXQgcGFydCA9IDBcblxuICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICBjdXJOb2RlLnBhcnQgPSBwYXRoLmpvaW4oJy4nKVxuICB9XG5cbiAgLy8gbXVsdGlwYXJ0XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGVbMF0pKSB7XG4gICAgY3VyTm9kZS5jaGlsZE5vZGVzID0gW11cbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShub2RlW2ldKSkge1xuICAgICAgY3VyTm9kZS5jaGlsZE5vZGVzLnB1c2gocGFyc2VCT0RZU1RSVUNUVVJFKG5vZGVbaV0sIHBhdGguY29uY2F0KCsrcGFydCkpKVxuICAgICAgaSsrXG4gICAgfVxuXG4gICAgLy8gbXVsdGlwYXJ0IHR5cGVcbiAgICBjdXJOb2RlLnR5cGUgPSAnbXVsdGlwYXJ0LycgKyAoKG5vZGVbaSsrXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gZXh0ZW5zaW9uIGRhdGEgKG5vdCBhdmFpbGFibGUgZm9yIEJPRFkgcmVxdWVzdHMpXG5cbiAgICAvLyBib2R5IHBhcmFtZXRlciBwYXJlbnRoZXNpemVkIGxpc3RcbiAgICBpZiAoaSA8IG5vZGUubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgICAgY3VyTm9kZS5wYXJhbWV0ZXJzID0gYXR0cmlidXRlc1RvT2JqZWN0KG5vZGVbaV0pXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY29udGVudCB0eXBlXG4gICAgY3VyTm9kZS50eXBlID0gW1xuICAgICAgKChub2RlW2krK10gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksICgobm9kZVtpKytdIHx8IHt9KS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXG4gICAgXS5qb2luKCcvJylcblxuICAgIC8vIGJvZHkgcGFyYW1ldGVyIHBhcmVudGhlc2l6ZWQgbGlzdFxuICAgIGlmIChub2RlW2ldKSB7XG4gICAgICBjdXJOb2RlLnBhcmFtZXRlcnMgPSBhdHRyaWJ1dGVzVG9PYmplY3Qobm9kZVtpXSlcbiAgICB9XG4gICAgaSsrXG5cbiAgICAvLyBpZFxuICAgIGlmIChub2RlW2ldKSB7XG4gICAgICBjdXJOb2RlLmlkID0gKChub2RlW2ldIHx8IHt9KS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKVxuICAgIH1cbiAgICBpKytcblxuICAgIC8vIGRlc2NyaXB0aW9uXG4gICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgIGN1ck5vZGUuZGVzY3JpcHRpb24gPSAoKG5vZGVbaV0gfHwge30pLnZhbHVlIHx8ICcnKS50b1N0cmluZygpXG4gICAgfVxuICAgIGkrK1xuXG4gICAgLy8gZW5jb2RpbmdcbiAgICBpZiAobm9kZVtpXSkge1xuICAgICAgY3VyTm9kZS5lbmNvZGluZyA9ICgobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgICBpKytcblxuICAgIC8vIHNpemVcbiAgICBpZiAobm9kZVtpXSkge1xuICAgICAgY3VyTm9kZS5zaXplID0gTnVtYmVyKChub2RlW2ldIHx8IHt9KS52YWx1ZSB8fCAwKSB8fCAwXG4gICAgfVxuICAgIGkrK1xuXG4gICAgaWYgKGN1ck5vZGUudHlwZSA9PT0gJ21lc3NhZ2UvcmZjODIyJykge1xuICAgICAgLy8gbWVzc2FnZS9yZmMgYWRkcyBhZGRpdGlvbmFsIGVudmVsb3BlLCBib2R5c3RydWN0dXJlIGFuZCBsaW5lIGNvdW50IHZhbHVlc1xuXG4gICAgICAvLyBlbnZlbG9wZVxuICAgICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgICAgY3VyTm9kZS5lbnZlbG9wZSA9IHBhcnNlRU5WRUxPUEUoW10uY29uY2F0KG5vZGVbaV0gfHwgW10pKVxuICAgICAgfVxuICAgICAgaSsrXG5cbiAgICAgIGlmIChub2RlW2ldKSB7XG4gICAgICAgIGN1ck5vZGUuY2hpbGROb2RlcyA9IFtcbiAgICAgICAgICAvLyByZmM4MjIgYm9keXBhcnRzIHNoYXJlIHRoZSBzYW1lIHBhdGgsIGRpZmZlcmVuY2UgaXMgYmV0d2VlbiBNSU1FIGFuZCBIRUFERVJcbiAgICAgICAgICAvLyBwYXRoLk1JTUUgcmV0dXJucyBtZXNzYWdlL3JmYzgyMiBoZWFkZXJcbiAgICAgICAgICAvLyBwYXRoLkhFQURFUiByZXR1cm5zIGlubGluZWQgbWVzc2FnZSBoZWFkZXJcbiAgICAgICAgICBwYXJzZUJPRFlTVFJVQ1RVUkUobm9kZVtpXSwgcGF0aClcbiAgICAgICAgXVxuICAgICAgfVxuICAgICAgaSsrXG5cbiAgICAgIC8vIGxpbmUgY291bnRcbiAgICAgIGlmIChub2RlW2ldKSB7XG4gICAgICAgIGN1ck5vZGUubGluZUNvdW50ID0gTnVtYmVyKChub2RlW2ldIHx8IHt9KS52YWx1ZSB8fCAwKSB8fCAwXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKC9edGV4dFxcLy8udGVzdChjdXJOb2RlLnR5cGUpKSB7XG4gICAgICAvLyB0ZXh0LyogYWRkcyBhZGRpdGlvbmFsIGxpbmUgY291bnQgdmFsdWVzXG5cbiAgICAgIC8vIGxpbmUgY291bnRcbiAgICAgIGlmIChub2RlW2ldKSB7XG4gICAgICAgIGN1ck5vZGUubGluZUNvdW50ID0gTnVtYmVyKChub2RlW2ldIHx8IHt9KS52YWx1ZSB8fCAwKSB8fCAwXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9XG5cbiAgICAvLyBleHRlbnNpb24gZGF0YSAobm90IGF2YWlsYWJsZSBmb3IgQk9EWSByZXF1ZXN0cylcblxuICAgIC8vIG1kNVxuICAgIGlmIChpIDwgbm9kZS5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAobm9kZVtpXSkge1xuICAgICAgICBjdXJOb2RlLm1kNSA9ICgobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfVxuICB9XG5cbiAgLy8gdGhlIGZvbGxvd2luZyBhcmUgc2hhcmVkIGV4dGVuc2lvbiB2YWx1ZXMgKGZvciBib3RoIG11bHRpcGFydCBhbmQgbm9uLW11bHRpcGFydCBwYXJ0cylcbiAgLy8gbm90IGF2YWlsYWJsZSBmb3IgQk9EWSByZXF1ZXN0c1xuXG4gIC8vIGJvZHkgZGlzcG9zaXRpb25cbiAgaWYgKGkgPCBub2RlLmxlbmd0aCAtIDEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlW2ldKSAmJiBub2RlW2ldLmxlbmd0aCkge1xuICAgICAgY3VyTm9kZS5kaXNwb3NpdGlvbiA9ICgobm9kZVtpXVswXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZVtpXVsxXSkpIHtcbiAgICAgICAgY3VyTm9kZS5kaXNwb3NpdGlvblBhcmFtZXRlcnMgPSBhdHRyaWJ1dGVzVG9PYmplY3Qobm9kZVtpXVsxXSlcbiAgICAgIH1cbiAgICB9XG4gICAgaSsrXG4gIH1cblxuICAvLyBib2R5IGxhbmd1YWdlXG4gIGlmIChpIDwgbm9kZS5sZW5ndGggLSAxKSB7XG4gICAgaWYgKG5vZGVbaV0pIHtcbiAgICAgIGN1ck5vZGUubGFuZ3VhZ2UgPSBbXS5jb25jYXQobm9kZVtpXSkubWFwKCh2YWwpID0+IHByb3BPcignJywgJ3ZhbHVlJywgdmFsKS50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpKytcbiAgfVxuXG4gIC8vIGJvZHkgbG9jYXRpb25cbiAgLy8gTkIhIGRlZmluZWQgYXMgYSBcInN0cmluZyBsaXN0XCIgaW4gUkZDMzUwMSBidXQgcmVwbGFjZWQgaW4gZXJyYXRhIGRvY3VtZW50IHdpdGggXCJzdHJpbmdcIlxuICAvLyBFcnJhdGE6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvZXJyYXRhX3NlYXJjaC5waHA/cmZjPTM1MDFcbiAgaWYgKGkgPCBub2RlLmxlbmd0aCAtIDEpIHtcbiAgICBpZiAobm9kZVtpXSkge1xuICAgICAgY3VyTm9kZS5sb2NhdGlvbiA9ICgobm9kZVtpXSB8fCB7fSkudmFsdWUgfHwgJycpLnRvU3RyaW5nKClcbiAgICB9XG4gICAgaSsrXG4gIH1cblxuICByZXR1cm4gY3VyTm9kZVxufVxuXG5mdW5jdGlvbiBhdHRyaWJ1dGVzVG9PYmplY3QgKGF0dHJzID0gW10sIGtleVRyYW5zZm9ybSA9IHRvTG93ZXIsIHZhbHVlVHJhbnNmb3JtID0gbWltZVdvcmRzRGVjb2RlKSB7XG4gIGNvbnN0IHZhbHMgPSBhdHRycy5tYXAocHJvcCgndmFsdWUnKSlcbiAgY29uc3Qga2V5cyA9IHZhbHMuZmlsdGVyKChfLCBpKSA9PiBpICUgMiA9PT0gMCkubWFwKGtleVRyYW5zZm9ybSlcbiAgY29uc3QgdmFsdWVzID0gdmFscy5maWx0ZXIoKF8sIGkpID0+IGkgJSAyID09PSAxKS5tYXAodmFsdWVUcmFuc2Zvcm0pXG4gIHJldHVybiBmcm9tUGFpcnMoemlwKGtleXMsIHZhbHVlcykpXG59XG5cbi8qKlxuICogUGFyc2VzIEZFVENIIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IE1lc3NhZ2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZFVENIIChyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5wYXlsb2FkIHx8ICFyZXNwb25zZS5wYXlsb2FkLkZFVENIIHx8ICFyZXNwb25zZS5wYXlsb2FkLkZFVENILmxlbmd0aCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgbGV0IGxpc3QgPSBbXVxuICBsZXQgbWVzc2FnZXMgPSB7fVxuXG4gIHJlc3BvbnNlLnBheWxvYWQuRkVUQ0guZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGxldCBwYXJhbXMgPSBbXS5jb25jYXQoW10uY29uY2F0KGl0ZW0uYXR0cmlidXRlcyB8fCBbXSlbMF0gfHwgW10pIC8vIGVuc3VyZSB0aGUgZmlyc3QgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICBsZXQgbWVzc2FnZVxuICAgIGxldCBpLCBsZW4sIGtleVxuXG4gICAgaWYgKG1lc3NhZ2VzW2l0ZW0ubnJdKSB7XG4gICAgICAvLyBzYW1lIHNlcXVlbmNlIG51bWJlciBpcyBhbHJlYWR5IHVzZWQsIHNvIG1lcmdlIHZhbHVlcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0XG4gICAgICBtZXNzYWdlID0gbWVzc2FnZXNbaXRlbS5ucl1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZXNbaXRlbS5ucl0gPSBtZXNzYWdlID0ge1xuICAgICAgICAnIyc6IGl0ZW0ubnJcbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChtZXNzYWdlKVxuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkgJSAyID09PSAwKSB7XG4gICAgICAgIGtleSA9IGNvbXBpbGVyKHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBbcGFyYW1zW2ldXVxuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzxcXGQrPiQvLCAnJylcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2Vba2V5XSA9IHBhcnNlRmV0Y2hWYWx1ZShrZXksIHBhcmFtc1tpXSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGxpc3Rcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgRkVUQ0ggcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgbmFtZSAodXBwZXJjYXNlKVxuICogQHBhcmFtIHtNaXplZH0gdmFsdWUgVmFsdWUgZm9yIHRoZSBrZXlcbiAqIEByZXR1cm4ge01peGVkfSBQcm9jZXNzZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gcGFyc2VGZXRjaFZhbHVlIChrZXksIHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICd1aWQnOlxuICAgICAgY2FzZSAncmZjODIyLnNpemUnOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnZhbHVlKSB8fCAwXG4gICAgICBjYXNlICdtb2RzZXEnOiAvLyBkbyBub3QgY2FzdCA2NCBiaXQgdWludCB0byBhIG51bWJlclxuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUgfHwgJzAnXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS52YWx1ZVxuICB9XG5cbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdmbGFncyc6XG4gICAgY2FzZSAneC1nbS1sYWJlbHMnOlxuICAgICAgdmFsdWUgPSBbXS5jb25jYXQodmFsdWUpLm1hcCgoZmxhZykgPT4gKGZsYWcudmFsdWUgfHwgJycpKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdlbnZlbG9wZSc6XG4gICAgICB2YWx1ZSA9IHBhcnNlRU5WRUxPUEUoW10uY29uY2F0KHZhbHVlIHx8IFtdKSlcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYm9keXN0cnVjdHVyZSc6XG4gICAgICB2YWx1ZSA9IHBhcnNlQk9EWVNUUlVDVFVSRShbXS5jb25jYXQodmFsdWUgfHwgW10pKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb2RzZXEnOlxuICAgICAgdmFsdWUgPSAodmFsdWUuc2hpZnQoKSB8fCB7fSkudmFsdWUgfHwgJzAnXG4gICAgICBicmVha1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUGFyc2VzIFNFQVJDSCByZXNwb25zZS4gR2F0aGVycyBhbGwgdW50YWdnZWQgU0VBUkNIIHJlc3BvbnNlcywgZmV0Y2hlZCBzZXEuL3VpZCBudW1iZXJzXG4gKiBhbmQgY29tcGlsZXMgdGhlc2UgaW50byBhIHNvcnRlZCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2VcbiAqIEByZXR1cm4ge09iamVjdH0gTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXl9IFNvcnRlZCBTZXEuL1VJRCBudW1iZXIgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRUFSQ0ggKHJlc3BvbnNlKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIHBhdGhPcihbXSwgWydwYXlsb2FkJywgJ1NFQVJDSCddKSxcbiAgICBtYXAoeCA9PiB4LmF0dHJpYnV0ZXMgfHwgW10pLFxuICAgIGZsYXR0ZW4sXG4gICAgbWFwKG5yID0+IE51bWJlcihwcm9wT3IobnIgfHwgMCwgJ3ZhbHVlJywgbnIpKSB8fCAwKSxcbiAgICBzb3J0KChhLCBiKSA9PiBhID4gYilcbiAgKShyZXNwb25zZSlcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/compression.js b/dist/compression.js index 2d63519..79a5de0 100644 --- a/dist/compression.js +++ b/dist/compression.js @@ -141,4 +141,4 @@ function inflater(emit) { return ret; }; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wcmVzc2lvbi5qcyJdLCJuYW1lcyI6WyJDb21wcmVzc29yIiwiQ0hVTktfU0laRSIsIldJTkRPV19CSVRTIiwiaW5mbGF0ZWRSZWFkeSIsImRlZmxhdGVkUmVhZHkiLCJfaW5mbGF0ZSIsImluZmxhdGVyIiwiY2h1bmsiLCJidWZmZXIiLCJzbGljZSIsImJ5dGVPZmZzZXQiLCJsZW5ndGgiLCJfZGVmbGF0ZSIsImRlZmxhdGVyIiwicHJvdG90eXBlIiwiaW5mbGF0ZSIsIlVpbnQ4QXJyYXkiLCJkZWZsYXRlIiwiZW1pdCIsInN0cmVhbSIsInN0YXR1cyIsIkVycm9yIiwiZGF0YSIsInVuZGVmaW5lZCIsImlucHV0IiwibmV4dF9pbiIsImF2YWlsX2luIiwib3V0cHV0Iiwic3RhcnQiLCJyZXQiLCJhdmFpbF9vdXQiLCJuZXh0X291dCIsInN1YmFycmF5Il0sIm1hcHBpbmdzIjoiOzs7OztrQkFrQndCQSxVOztBQWxCeEI7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBTUEsTUFBTUMsYUFBYSxLQUFuQjtBQUNBLE1BQU1DLGNBQWMsRUFBcEI7O0FBRUE7Ozs7O0FBS2UsU0FBU0YsVUFBVCxDQUFxQkcsYUFBckIsRUFBb0NDLGFBQXBDLEVBQW1EO0FBQ2hFLE9BQUtELGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsT0FBS0MsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxPQUFLQyxRQUFMLEdBQWdCQyxTQUFTQyxTQUFTLEtBQUtKLGFBQUwsQ0FBbUJJLE1BQU1DLE1BQU4sQ0FBYUMsS0FBYixDQUFtQkYsTUFBTUcsVUFBekIsRUFBcUNILE1BQU1HLFVBQU4sR0FBbUJILE1BQU1JLE1BQTlELENBQW5CLENBQWxCLENBQWhCO0FBQ0EsT0FBS0MsUUFBTCxHQUFnQkMsU0FBU04sU0FBUyxLQUFLSCxhQUFMLENBQW1CRyxNQUFNQyxNQUFOLENBQWFDLEtBQWIsQ0FBbUJGLE1BQU1HLFVBQXpCLEVBQXFDSCxNQUFNRyxVQUFOLEdBQW1CSCxNQUFNSSxNQUE5RCxDQUFuQixDQUFsQixDQUFoQjtBQUNEOztBQUVEWCxXQUFXYyxTQUFYLENBQXFCQyxPQUFyQixHQUErQixVQUFVUCxNQUFWLEVBQWtCO0FBQy9DLE9BQUtILFFBQUwsQ0FBYyxJQUFJVyxVQUFKLENBQWVSLE1BQWYsQ0FBZDtBQUNELENBRkQ7O0FBSUFSLFdBQVdjLFNBQVgsQ0FBcUJHLE9BQXJCLEdBQStCLFVBQVVULE1BQVYsRUFBa0I7QUFDL0MsT0FBS0ksUUFBTCxDQUFjLElBQUlJLFVBQUosQ0FBZVIsTUFBZixDQUFkO0FBQ0QsQ0FGRDs7QUFJQSxTQUFTSyxRQUFULENBQW1CSyxJQUFuQixFQUF5QjtBQUN2QixRQUFNQyxTQUFTLHVCQUFmO0FBQ0EsTUFBSUMsU0FBUywyQkFBYUQsTUFBYiwyREFBd0RqQixXQUF4RCxFQUFxRSxDQUFyRSxnQ0FBYjtBQUNBLE1BQUlrQiwwQkFBSixFQUFxQjtBQUNuQixVQUFNLElBQUlDLEtBQUosQ0FBVSwwQ0FBMEMsbUJBQVNELE1BQVQsQ0FBcEQsQ0FBTjtBQUNEOztBQUVELFNBQU8sVUFBVUUsSUFBVixFQUFnQjtBQUNyQixRQUFJQSxTQUFTQyxTQUFiLEVBQXdCLE9BQU9MLE1BQVA7O0FBRXhCO0FBQ0FDLFdBQU9LLEtBQVAsR0FBZUYsSUFBZjtBQUNBSCxXQUFPTSxPQUFQLEdBQWlCLENBQWpCO0FBQ0FOLFdBQU9PLFFBQVAsR0FBa0JQLE9BQU9LLEtBQVAsQ0FBYWIsTUFBL0I7O0FBRUEsUUFBSVMsTUFBSjtBQUNBLFFBQUlPLE1BQUo7QUFDQSxRQUFJQyxLQUFKO0FBQ0EsUUFBSUMsTUFBTSxJQUFWOztBQUVBLE9BQUc7QUFDRDtBQUNBLFVBQUlWLE9BQU9XLFNBQVAsS0FBcUIsQ0FBekIsRUFBNEI7QUFDMUJYLGVBQU9RLE1BQVAsR0FBZ0IsSUFBSVgsVUFBSixDQUFlZixVQUFmLENBQWhCO0FBQ0EyQixnQkFBUVQsT0FBT1ksUUFBUCxHQUFrQixDQUExQjtBQUNBWixlQUFPVyxTQUFQLEdBQW1CN0IsVUFBbkI7QUFDRDs7QUFFRDtBQUNBbUIsZUFBUyxzQkFBUUQsTUFBUiwwQkFBVDtBQUNBLFVBQUlDLHNDQUEyQkEsMEJBQS9CLEVBQWdEO0FBQzlDLGNBQU0sSUFBSUMsS0FBSixDQUFVLHNCQUFzQixtQkFBU0QsTUFBVCxDQUFoQyxDQUFOO0FBQ0Q7O0FBRUQ7QUFDQSxVQUFJRCxPQUFPVyxTQUFQLEtBQXFCLENBQXJCLElBQTBCWCxPQUFPWSxRQUFQLEdBQWtCSCxLQUFoRCxFQUF1RDtBQUNyREQsaUJBQVNSLE9BQU9RLE1BQVAsQ0FBY0ssUUFBZCxDQUF1QkosS0FBdkIsRUFBOEJBLFFBQVFULE9BQU9ZLFFBQTdDLENBQVQ7QUFDQUYsY0FBTVgsS0FBS1MsTUFBTCxDQUFOO0FBQ0Q7QUFDRixLQW5CRCxRQW1CUyxDQUFDUixPQUFPTyxRQUFQLEdBQWtCLENBQWxCLElBQXVCUCxPQUFPVyxTQUFQLEtBQXFCLENBQTdDLEtBQW1EVixrQ0FuQjVEOztBQXFCQTtBQUNBLFFBQUlELE9BQU9ZLFFBQVAsR0FBa0JILEtBQXRCLEVBQTZCO0FBQzNCRCxlQUFTUixPQUFPUSxNQUFQLENBQWNLLFFBQWQsQ0FBdUJKLEtBQXZCLEVBQThCQSxRQUFRVCxPQUFPWSxRQUE3QyxDQUFUO0FBQ0FGLFlBQU1YLEtBQUtTLE1BQUwsQ0FBTjtBQUNEO0FBQ0QsV0FBT0UsR0FBUDtBQUNELEdBeENEO0FBeUNEOztBQUVELFNBQVN2QixRQUFULENBQW1CWSxJQUFuQixFQUF5QjtBQUN2QixNQUFJQyxTQUFTLHVCQUFiOztBQUVBLFFBQU1DLFNBQVMsMkJBQWFELE1BQWIsRUFBcUJqQixXQUFyQixDQUFmO0FBQ0EsTUFBSWtCLDBCQUFKLEVBQXFCO0FBQ25CLFVBQU0sSUFBSUMsS0FBSixDQUFVLDBDQUEwQyxtQkFBU0QsTUFBVCxDQUFwRCxDQUFOO0FBQ0Q7O0FBRUQsU0FBTyxVQUFVRSxJQUFWLEVBQWdCO0FBQ3JCLFFBQUlBLFNBQVNDLFNBQWIsRUFBd0IsT0FBT0wsTUFBUDs7QUFFeEIsUUFBSVUsS0FBSjtBQUNBVCxXQUFPSyxLQUFQLEdBQWVGLElBQWY7QUFDQUgsV0FBT00sT0FBUCxHQUFpQixDQUFqQjtBQUNBTixXQUFPTyxRQUFQLEdBQWtCUCxPQUFPSyxLQUFQLENBQWFiLE1BQS9COztBQUVBLFFBQUlTLE1BQUosRUFBWU8sTUFBWjtBQUNBLFFBQUlFLE1BQU0sSUFBVjs7QUFFQSxPQUFHO0FBQ0QsVUFBSVYsT0FBT1csU0FBUCxLQUFxQixDQUF6QixFQUE0QjtBQUMxQlgsZUFBT1EsTUFBUCxHQUFnQixJQUFJWCxVQUFKLENBQWVmLFVBQWYsQ0FBaEI7QUFDQTJCLGdCQUFRVCxPQUFPWSxRQUFQLEdBQWtCLENBQTFCO0FBQ0FaLGVBQU9XLFNBQVAsR0FBbUI3QixVQUFuQjtBQUNEOztBQUVEbUIsZUFBUyxzQkFBUUQsTUFBUix3QkFBVDtBQUNBLFVBQUlDLHNDQUEyQkEsMEJBQS9CLEVBQWdEO0FBQzlDLGNBQU0sSUFBSUMsS0FBSixDQUFVLHNCQUFzQixtQkFBU0QsTUFBVCxDQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsVUFBSUQsT0FBT1ksUUFBWCxFQUFxQjtBQUNuQixZQUFJWixPQUFPVyxTQUFQLEtBQXFCLENBQXJCLElBQTBCVixrQ0FBOUIsRUFBdUQ7QUFDckRPLG1CQUFTUixPQUFPUSxNQUFQLENBQWNLLFFBQWQsQ0FBdUJKLEtBQXZCLEVBQThCQSxRQUFRVCxPQUFPWSxRQUE3QyxDQUFUO0FBQ0FGLGdCQUFNWCxLQUFLUyxNQUFMLENBQU47QUFDRDtBQUNGO0FBQ0YsS0FsQkQsUUFrQlVSLE9BQU9PLFFBQVAsR0FBa0IsQ0FBbkIsSUFBeUJOLGtDQWxCbEM7O0FBb0JBLFFBQUlELE9BQU9ZLFFBQVAsR0FBa0JILEtBQXRCLEVBQTZCO0FBQzNCRCxlQUFTUixPQUFPUSxNQUFQLENBQWNLLFFBQWQsQ0FBdUJKLEtBQXZCLEVBQThCQSxRQUFRVCxPQUFPWSxRQUE3QyxDQUFUO0FBQ0FGLFlBQU1YLEtBQUtTLE1BQUwsQ0FBTjtBQUNEOztBQUVELFdBQU9FLEdBQVA7QUFDRCxHQXJDRDtBQXNDRCIsImZpbGUiOiJjb21wcmVzc2lvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBaU3RyZWFtIGZyb20gJ3Bha28vbGliL3psaWIvenN0cmVhbSdcbmltcG9ydCB7IGRlZmxhdGVJbml0MiwgZGVmbGF0ZSB9IGZyb20gJ3Bha28vbGliL3psaWIvZGVmbGF0ZSdcbmltcG9ydCB7IGluZmxhdGUsIGluZmxhdGVJbml0MiB9IGZyb20gJ3Bha28vbGliL3psaWIvaW5mbGF0ZSdcbmltcG9ydCBtZXNzYWdlcyBmcm9tICdwYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHtcbiAgWl9OT19GTFVTSCwgWl9TWU5DX0ZMVVNILCBaX09LLFxuICBaX1NUUkVBTV9FTkQsIFpfREVGQVVMVF9DT01QUkVTU0lPTixcbiAgWl9ERUZBVUxUX1NUUkFURUdZLCBaX0RFRkxBVEVEXG59IGZyb20gJ3Bha28vbGliL3psaWIvY29uc3RhbnRzJ1xuXG5jb25zdCBDSFVOS19TSVpFID0gMTYzODRcbmNvbnN0IFdJTkRPV19CSVRTID0gMTVcblxuLyoqXG4gKiBIYW5kbGVzIGRlLS9jb21wcmVzc2lvbiB2aWEgI2luZmxhdGUoKSBhbmQgI2RlZmxhdGUoKSwgY2FsbHMgeW91IGJhY2sgdmlhICNkZWZsYXRlZFJlYWR5KCkgYW5kICNpbmZsYXRlZFJlYWR5KCkuXG4gKiBUaGUgY2h1bmsgd2UgZ2V0IGZyb20gZGVmbGF0ZXIgaXMgYWN0dWFsbHkgYSB2aWV3IG9mIGEgMTZrQiBhcnJheWJ1ZmZlciwgc28gd2UgbmVlZCB0byBjb3B5IHRoZSByZWxldmFudCBwYXJ0c1xuICogbWVtb3J5IHRvIGEgbmV3IGFycmF5YnVmZmVyLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21wcmVzc29yIChpbmZsYXRlZFJlYWR5LCBkZWZsYXRlZFJlYWR5KSB7XG4gIHRoaXMuaW5mbGF0ZWRSZWFkeSA9IGluZmxhdGVkUmVhZHlcbiAgdGhpcy5kZWZsYXRlZFJlYWR5ID0gZGVmbGF0ZWRSZWFkeVxuICB0aGlzLl9pbmZsYXRlID0gaW5mbGF0ZXIoY2h1bmsgPT4gdGhpcy5pbmZsYXRlZFJlYWR5KGNodW5rLmJ1ZmZlci5zbGljZShjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlT2Zmc2V0ICsgY2h1bmsubGVuZ3RoKSkpXG4gIHRoaXMuX2RlZmxhdGUgPSBkZWZsYXRlcihjaHVuayA9PiB0aGlzLmRlZmxhdGVkUmVhZHkoY2h1bmsuYnVmZmVyLnNsaWNlKGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVPZmZzZXQgKyBjaHVuay5sZW5ndGgpKSlcbn1cblxuQ29tcHJlc3Nvci5wcm90b3R5cGUuaW5mbGF0ZSA9IGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgdGhpcy5faW5mbGF0ZShuZXcgVWludDhBcnJheShidWZmZXIpKVxufVxuXG5Db21wcmVzc29yLnByb3RvdHlwZS5kZWZsYXRlID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuICB0aGlzLl9kZWZsYXRlKG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpXG59XG5cbmZ1bmN0aW9uIGRlZmxhdGVyIChlbWl0KSB7XG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBaU3RyZWFtKClcbiAgbGV0IHN0YXR1cyA9IGRlZmxhdGVJbml0MihzdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgWl9ERUZMQVRFRCwgV0lORE9XX0JJVFMsIDgsIFpfREVGQVVMVF9TVFJBVEVHWSlcbiAgaWYgKHN0YXR1cyAhPT0gWl9PSykge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvYmxlbSBpbml0aWFsaXppbmcgZGVmbGF0ZSBzdHJlYW06ICcgKyBtZXNzYWdlc1tzdGF0dXNdKVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVtaXQoKVxuXG4gICAgLy8gQXR0YWNoIHRoZSBpbnB1dCBkYXRhXG4gICAgc3RyZWFtLmlucHV0ID0gZGF0YVxuICAgIHN0cmVhbS5uZXh0X2luID0gMFxuICAgIHN0cmVhbS5hdmFpbF9pbiA9IHN0cmVhbS5pbnB1dC5sZW5ndGhcblxuICAgIGxldCBzdGF0dXNcbiAgICBsZXQgb3V0cHV0XG4gICAgbGV0IHN0YXJ0XG4gICAgbGV0IHJldCA9IHRydWVcblxuICAgIGRvIHtcbiAgICAgIC8vIFdoZW4gdGhlIHN0cmVhbSBnZXRzIGZ1bGwsIHdlIG5lZWQgdG8gY3JlYXRlIG5ldyBzcGFjZS5cbiAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5vdXRwdXQgPSBuZXcgVWludDhBcnJheShDSFVOS19TSVpFKVxuICAgICAgICBzdGFydCA9IHN0cmVhbS5uZXh0X291dCA9IDBcbiAgICAgICAgc3RyZWFtLmF2YWlsX291dCA9IENIVU5LX1NJWkVcbiAgICAgIH1cblxuICAgICAgLy8gUGVyZm9ybSB0aGUgZGVmbGF0ZVxuICAgICAgc3RhdHVzID0gZGVmbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSClcbiAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWZsYXRlIHByb2JsZW06ICcgKyBtZXNzYWdlc1tzdGF0dXNdKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgb3V0cHV0IGJ1ZmZlciBnb3QgZnVsbCwgZmx1c2ggdGhlIGRhdGEuXG4gICAgICBpZiAoc3RyZWFtLmF2YWlsX291dCA9PT0gMCAmJiBzdHJlYW0ubmV4dF9vdXQgPiBzdGFydCkge1xuICAgICAgICBvdXRwdXQgPSBzdHJlYW0ub3V0cHV0LnN1YmFycmF5KHN0YXJ0LCBzdGFydCA9IHN0cmVhbS5uZXh0X291dClcbiAgICAgICAgcmV0ID0gZW1pdChvdXRwdXQpXG4gICAgICB9XG4gICAgfSB3aGlsZSAoKHN0cmVhbS5hdmFpbF9pbiA+IDAgfHwgc3RyZWFtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQpXG5cbiAgICAvLyBFbWl0IHdoYXRldmVyIGlzIGxlZnQgaW4gb3V0cHV0LlxuICAgIGlmIChzdHJlYW0ubmV4dF9vdXQgPiBzdGFydCkge1xuICAgICAgb3V0cHV0ID0gc3RyZWFtLm91dHB1dC5zdWJhcnJheShzdGFydCwgc3RhcnQgPSBzdHJlYW0ubmV4dF9vdXQpXG4gICAgICByZXQgPSBlbWl0KG91dHB1dClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVyIChlbWl0KSB7XG4gIGxldCBzdHJlYW0gPSBuZXcgWlN0cmVhbSgpXG5cbiAgY29uc3Qgc3RhdHVzID0gaW5mbGF0ZUluaXQyKHN0cmVhbSwgV0lORE9XX0JJVFMpXG4gIGlmIChzdGF0dXMgIT09IFpfT0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JsZW0gaW5pdGlhbGl6aW5nIGluZmxhdGUgc3RyZWFtOiAnICsgbWVzc2FnZXNbc3RhdHVzXSlcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBlbWl0KClcblxuICAgIGxldCBzdGFydFxuICAgIHN0cmVhbS5pbnB1dCA9IGRhdGFcbiAgICBzdHJlYW0ubmV4dF9pbiA9IDBcbiAgICBzdHJlYW0uYXZhaWxfaW4gPSBzdHJlYW0uaW5wdXQubGVuZ3RoXG5cbiAgICBsZXQgc3RhdHVzLCBvdXRwdXRcbiAgICBsZXQgcmV0ID0gdHJ1ZVxuXG4gICAgZG8ge1xuICAgICAgaWYgKHN0cmVhbS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLm91dHB1dCA9IG5ldyBVaW50OEFycmF5KENIVU5LX1NJWkUpXG4gICAgICAgIHN0YXJ0ID0gc3RyZWFtLm5leHRfb3V0ID0gMFxuICAgICAgICBzdHJlYW0uYXZhaWxfb3V0ID0gQ0hVTktfU0laRVxuICAgICAgfVxuXG4gICAgICBzdGF0dXMgPSBpbmZsYXRlKHN0cmVhbSwgWl9OT19GTFVTSClcbiAgICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbmZsYXRlIHByb2JsZW06ICcgKyBtZXNzYWdlc1tzdGF0dXNdKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLm5leHRfb3V0KSB7XG4gICAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gWl9TVFJFQU1fRU5EKSB7XG4gICAgICAgICAgb3V0cHV0ID0gc3RyZWFtLm91dHB1dC5zdWJhcnJheShzdGFydCwgc3RhcnQgPSBzdHJlYW0ubmV4dF9vdXQpXG4gICAgICAgICAgcmV0ID0gZW1pdChvdXRwdXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICgoc3RyZWFtLmF2YWlsX2luID4gMCkgJiYgc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQpXG5cbiAgICBpZiAoc3RyZWFtLm5leHRfb3V0ID4gc3RhcnQpIHtcbiAgICAgIG91dHB1dCA9IHN0cmVhbS5vdXRwdXQuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ID0gc3RyZWFtLm5leHRfb3V0KVxuICAgICAgcmV0ID0gZW1pdChvdXRwdXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wcmVzc2lvbi5qcyJdLCJuYW1lcyI6WyJDb21wcmVzc29yIiwiQ0hVTktfU0laRSIsIldJTkRPV19CSVRTIiwiaW5mbGF0ZWRSZWFkeSIsImRlZmxhdGVkUmVhZHkiLCJfaW5mbGF0ZSIsImluZmxhdGVyIiwiY2h1bmsiLCJidWZmZXIiLCJzbGljZSIsImJ5dGVPZmZzZXQiLCJsZW5ndGgiLCJfZGVmbGF0ZSIsImRlZmxhdGVyIiwicHJvdG90eXBlIiwiaW5mbGF0ZSIsIlVpbnQ4QXJyYXkiLCJkZWZsYXRlIiwiZW1pdCIsInN0cmVhbSIsIlpTdHJlYW0iLCJzdGF0dXMiLCJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCJaX0RFRkxBVEVEIiwiWl9ERUZBVUxUX1NUUkFURUdZIiwiWl9PSyIsIkVycm9yIiwibWVzc2FnZXMiLCJkYXRhIiwidW5kZWZpbmVkIiwiaW5wdXQiLCJuZXh0X2luIiwiYXZhaWxfaW4iLCJvdXRwdXQiLCJzdGFydCIsInJldCIsImF2YWlsX291dCIsIm5leHRfb3V0IiwiWl9TWU5DX0ZMVVNIIiwiWl9TVFJFQU1fRU5EIiwic3ViYXJyYXkiLCJaX05PX0ZMVVNIIl0sIm1hcHBpbmdzIjoiOzs7OztrQkFrQndCQSxVOztBQWxCeEI7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBTUEsTUFBTUMsYUFBYSxLQUFuQjtBQUNBLE1BQU1DLGNBQWMsRUFBcEI7O0FBRUE7Ozs7O0FBS2UsU0FBU0YsVUFBVCxDQUFxQkcsYUFBckIsRUFBb0NDLGFBQXBDLEVBQW1EO0FBQ2hFLE9BQUtELGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsT0FBS0MsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxPQUFLQyxRQUFMLEdBQWdCQyxTQUFTQyxTQUFTLEtBQUtKLGFBQUwsQ0FBbUJJLE1BQU1DLE1BQU4sQ0FBYUMsS0FBYixDQUFtQkYsTUFBTUcsVUFBekIsRUFBcUNILE1BQU1HLFVBQU4sR0FBbUJILE1BQU1JLE1BQTlELENBQW5CLENB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UUFBN0MsQ0FBVDtBQUNBRixnQkFBTWpCLEtBQUtlLE1BQUwsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixLQWxCRCxRQWtCVWQsT0FBT2EsUUFBUCxHQUFrQixDQUFuQixJQUF5QlgsV0FBV2tCLHVCQWxCN0M7O0FBb0JBLFFBQUlwQixPQUFPa0IsUUFBUCxHQUFrQkgsS0FBdEIsRUFBNkI7QUFDM0JELGVBQVNkLE9BQU9jLE1BQVAsQ0FBY08sUUFBZCxDQUF1Qk4sS0FBdkIsRUFBOEJBLFFBQVFmLE9BQU9rQixRQUE3QyxDQUFUO0FBQ0FGLFlBQU1qQixLQUFLZSxNQUFMLENBQU47QUFDRDs7QUFFRCxXQUFPRSxHQUFQO0FBQ0QsR0FyQ0Q7QUFzQ0QiLCJmaWxlIjoiY29tcHJlc3Npb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgWlN0cmVhbSBmcm9tICdwYWtvL2xpYi96bGliL3pzdHJlYW0nXG5pbXBvcnQgeyBkZWZsYXRlSW5pdDIsIGRlZmxhdGUgfSBmcm9tICdwYWtvL2xpYi96bGliL2RlZmxhdGUnXG5pbXBvcnQgeyBpbmZsYXRlLCBpbmZsYXRlSW5pdDIgfSBmcm9tICdwYWtvL2xpYi96bGliL2luZmxhdGUnXG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAncGFrby9saWIvemxpYi9tZXNzYWdlcy5qcydcbmltcG9ydCB7XG4gIFpfTk9fRkxVU0gsIFpfU1lOQ19GTFVTSCwgWl9PSyxcbiAgWl9TVFJFQU1fRU5ELCBaX0RFRkFVTFRfQ09NUFJFU1NJT04sXG4gIFpfREVGQVVMVF9TVFJBVEVHWSwgWl9ERUZMQVRFRFxufSBmcm9tICdwYWtvL2xpYi96bGliL2NvbnN0YW50cydcblxuY29uc3QgQ0hVTktfU0laRSA9IDE2Mzg0XG5jb25zdCBXSU5ET1dfQklUUyA9IDE1XG5cbi8qKlxuICogSGFuZGxlcyBkZS0vY29tcHJlc3Npb24gdmlhICNpbmZsYXRlKCkgYW5kICNkZWZsYXRlKCksIGNhbGxzIHlvdSBiYWNrIHZpYSAjZGVmbGF0ZWRSZWFkeSgpIGFuZCAjaW5mbGF0ZWRSZWFkeSgpLlxuICogVGhlIGNodW5rIHdlIGdldCBmcm9tIGRlZmxhdGVyIGlzIGFjdHVhbGx5IGEgdmlldyBvZiBhIDE2a0IgYXJyYXlidWZmZXIsIHNvIHdlIG5lZWQgdG8gY29weSB0aGUgcmVsZXZhbnQgcGFydHNcbiAqIG1lbW9yeSB0byBhIG5ldyBhcnJheWJ1ZmZlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29tcHJlc3NvciAoaW5mbGF0ZWRSZWFkeSwgZGVmbGF0ZWRSZWFkeSkge1xuICB0aGlzLmluZmxhdGVkUmVhZHkgPSBpbmZsYXRlZFJlYWR5XG4gIHRoaXMuZGVmbGF0ZWRSZWFkeSA9IGRlZmxhdGVkUmVhZHlcbiAgdGhpcy5faW5mbGF0ZSA9IGluZmxhdGVyKGNodW5rID0+IHRoaXMuaW5mbGF0ZWRSZWFkeShjaHVuay5idWZmZXIuc2xpY2UoY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZU9mZnNldCArIGNodW5rLmxlbmd0aCkpKVxuICB0aGlzLl9kZWZsYXRlID0gZGVmbGF0ZXIoY2h1bmsgPT4gdGhpcy5kZWZsYXRlZFJlYWR5KGNodW5rLmJ1ZmZlci5zbGljZShjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlT2Zmc2V0ICsgY2h1bmsubGVuZ3RoKSkpXG59XG5cbkNvbXByZXNzb3IucHJvdG90eXBlLmluZmxhdGUgPSBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gIHRoaXMuX2luZmxhdGUobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSlcbn1cblxuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGVmbGF0ZSA9IGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgdGhpcy5fZGVmbGF0ZShuZXcgVWludDhBcnJheShidWZmZXIpKVxufVxuXG5mdW5jdGlvbiBkZWZsYXRlciAoZW1pdCkge1xuICBjb25zdCBzdHJlYW0gPSBuZXcgWlN0cmVhbSgpXG4gIGxldCBzdGF0dXMgPSBkZWZsYXRlSW5pdDIoc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIFpfREVGTEFURUQsIFdJTkRPV19CSVRTLCA4LCBaX0RFRkFVTFRfU1RSQVRFR1kpXG4gIGlmIChzdGF0dXMgIT09IFpfT0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JsZW0gaW5pdGlhbGl6aW5nIGRlZmxhdGUgc3RyZWFtOiAnICsgbWVzc2FnZXNbc3RhdHVzXSlcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBlbWl0KClcblxuICAgIC8vIEF0dGFjaCB0aGUgaW5wdXQgZGF0YVxuICAgIHN0cmVhbS5pbnB1dCA9IGRhdGFcbiAgICBzdHJlYW0ubmV4dF9pbiA9IDBcbiAgICBzdHJlYW0uYXZhaWxfaW4gPSBzdHJlYW0uaW5wdXQubGVuZ3RoXG5cbiAgICBsZXQgc3RhdHVzXG4gICAgbGV0IG91dHB1dFxuICAgIGxldCBzdGFydFxuICAgIGxldCByZXQgPSB0cnVlXG5cbiAgICBkbyB7XG4gICAgICAvLyBXaGVuIHRoZSBzdHJlYW0gZ2V0cyBmdWxsLCB3ZSBuZWVkIHRvIGNyZWF0ZSBuZXcgc3BhY2UuXG4gICAgICBpZiAoc3RyZWFtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICBzdHJlYW0ub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoQ0hVTktfU0laRSlcbiAgICAgICAgc3RhcnQgPSBzdHJlYW0ubmV4dF9vdXQgPSAwXG4gICAgICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBDSFVOS19TSVpFXG4gICAgICB9XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGRlZmxhdGVcbiAgICAgIHN0YXR1cyA9IGRlZmxhdGUoc3RyZWFtLCBaX1NZTkNfRkxVU0gpXG4gICAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGVmbGF0ZSBwcm9ibGVtOiAnICsgbWVzc2FnZXNbc3RhdHVzXSlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIG91dHB1dCBidWZmZXIgZ290IGZ1bGwsIGZsdXNoIHRoZSBkYXRhLlxuICAgICAgaWYgKHN0cmVhbS5hdmFpbF9vdXQgPT09IDAgJiYgc3RyZWFtLm5leHRfb3V0ID4gc3RhcnQpIHtcbiAgICAgICAgb3V0cHV0ID0gc3RyZWFtLm91dHB1dC5zdWJhcnJheShzdGFydCwgc3RhcnQgPSBzdHJlYW0ubmV4dF9vdXQpXG4gICAgICAgIHJldCA9IGVtaXQob3V0cHV0KVxuICAgICAgfVxuICAgIH0gd2hpbGUgKChzdHJlYW0uYXZhaWxfaW4gPiAwIHx8IHN0cmVhbS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gWl9TVFJFQU1fRU5EKVxuXG4gICAgLy8gRW1pdCB3aGF0ZXZlciBpcyBsZWZ0IGluIG91dHB1dC5cbiAgICBpZiAoc3RyZWFtLm5leHRfb3V0ID4gc3RhcnQpIHtcbiAgICAgIG91dHB1dCA9IHN0cmVhbS5vdXRwdXQuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ID0gc3RyZWFtLm5leHRfb3V0KVxuICAgICAgcmV0ID0gZW1pdChvdXRwdXQpXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmZsYXRlciAoZW1pdCkge1xuICBsZXQgc3RyZWFtID0gbmV3IFpTdHJlYW0oKVxuXG4gIGNvbnN0IHN0YXR1cyA9IGluZmxhdGVJbml0MihzdHJlYW0sIFdJTkRPV19CSVRTKVxuICBpZiAoc3RhdHVzICE9PSBaX09LKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm9ibGVtIGluaXRpYWxpemluZyBpbmZsYXRlIHN0cmVhbTogJyArIG1lc3NhZ2VzW3N0YXR1c10pXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZW1pdCgpXG5cbiAgICBsZXQgc3RhcnRcbiAgICBzdHJlYW0uaW5wdXQgPSBkYXRhXG4gICAgc3RyZWFtLm5leHRfaW4gPSAwXG4gICAgc3RyZWFtLmF2YWlsX2luID0gc3RyZWFtLmlucHV0Lmxlbmd0aFxuXG4gICAgbGV0IHN0YXR1cywgb3V0cHV0XG4gICAgbGV0IHJldCA9IHRydWVcblxuICAgIGRvIHtcbiAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5vdXRwdXQgPSBuZXcgVWludDhBcnJheShDSFVOS19TSVpFKVxuICAgICAgICBzdGFydCA9IHN0cmVhbS5uZXh0X291dCA9IDBcbiAgICAgICAgc3RyZWFtLmF2YWlsX291dCA9IENIVU5LX1NJWkVcbiAgICAgIH1cblxuICAgICAgc3RhdHVzID0gaW5mbGF0ZShzdHJlYW0sIFpfTk9fRkxVU0gpXG4gICAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW5mbGF0ZSBwcm9ibGVtOiAnICsgbWVzc2FnZXNbc3RhdHVzXSlcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5uZXh0X291dCkge1xuICAgICAgICBpZiAoc3RyZWFtLmF2YWlsX291dCA9PT0gMCB8fCBzdGF0dXMgPT09IFpfU1RSRUFNX0VORCkge1xuICAgICAgICAgIG91dHB1dCA9IHN0cmVhbS5vdXRwdXQuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ID0gc3RyZWFtLm5leHRfb3V0KVxuICAgICAgICAgIHJldCA9IGVtaXQob3V0cHV0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoKHN0cmVhbS5hdmFpbF9pbiA+IDApICYmIHN0YXR1cyAhPT0gWl9TVFJFQU1fRU5EKVxuXG4gICAgaWYgKHN0cmVhbS5uZXh0X291dCA+IHN0YXJ0KSB7XG4gICAgICBvdXRwdXQgPSBzdHJlYW0ub3V0cHV0LnN1YmFycmF5KHN0YXJ0LCBzdGFydCA9IHN0cmVhbS5uZXh0X291dClcbiAgICAgIHJldCA9IGVtaXQob3V0cHV0KVxuICAgIH1cblxuICAgIHJldHVybiByZXRcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/imap.js b/dist/imap.js index c985642..8b7f40c 100644 --- a/dist/imap.js +++ b/dist/imap.js @@ -20,7 +20,7 @@ var _compression2 = _interopRequireDefault(_compression); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/* babel-plugin-inline-import '../res/compression.worker.blob' */const CompressionBlob = '!function(e){var t={};function a(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=12)}([function(e,t,a){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var n in a)i(a,n)&&(e[n]=a[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,a,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(a,a+n),i);else for(var r=0;r>>1:e>>>1;t[a]=e}return t}();e.exports=function(e,t,a,i){var r=n,s=i+a;e^=-1;for(var l=i;l>>8^r[255&(e^t[l])];return-1^e}},function(e,t,a){"use strict";e.exports=function(e,t,a,n){for(var i=65535&e|0,r=e>>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(i=i+t[n++]|0)|0}while(--s);i%=65521,r%=65521}return i|r<<16|0}},function(e,t,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,a){"use strict";var n=a(0),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],r=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],l=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(e,t,a,o,h,d,_,f){var u,c,b,g,m,w,p,v,k,x=f.bits,y=0,z=0,E=0,A=0,S=0,Z=0,R=0,O=0,B=0,T=0,N=null,D=0,U=new n.Buf16(16),I=new n.Buf16(16),F=null,L=0;for(y=0;y<=15;y++)U[y]=0;for(z=0;z=1&&0===U[A];A--);if(S>A&&(S=A),0===A)return h[d++]=20971520,h[d++]=20971520,f.bits=1,0;for(E=1;E0&&(0===e||1!==A))return-1;for(I[1]=0,y=1;y<15;y++)I[y+1]=I[y]+U[y];for(z=0;z852||2===e&&B>592)return 1;for(;;){p=y-R,_[z]w?(v=F[L+_[z]],k=N[D+_[z]]):(v=96,k=0),u=1<>R)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<>=1;if(0!==u?(T&=u-1,T+=u):T=0,z++,0==--U[y]){if(y===A)break;y=t[a+_[z]]}if(y>S&&(T&g)!==b){for(0===R&&(R=S),m+=E,O=1<<(Z=y-R);Z+R852||2===e&&B>592)return 1;h[b=T&g]=S<<24|Z<<16|m-d|0}}return 0!==T&&(h[m+T]=y-R<<24|64<<16|0),f.bits=S,0}},function(e,t,a){"use strict";e.exports=function(e,t){var a,n,i,r,s,l,o,h,d,_,f,u,c,b,g,m,w,p,v,k,x,y,z,E,A;a=e.state,n=e.next_in,E=e.input,i=n+(e.avail_in-5),r=e.next_out,A=e.output,s=r-(t-e.avail_out),l=r+(e.avail_out-257),o=a.dmax,h=a.wsize,d=a.whave,_=a.wnext,f=a.window,u=a.hold,c=a.bits,b=a.lencode,g=a.distcode,m=(1<>>=v=p>>>24,c-=v,0===(v=p>>>16&255))A[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<>>=v,c-=v),c<15&&(u+=E[n++]<>>=v=p>>>24,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<o){e.msg="invalid distance too far back",a.mode=30;break e}if(u>>>=v,c-=v,x>(v=r-s)){if((v=x-v)>d&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(y=0,z=f,0===_){if(y+=h-v,v2;)A[r++]=z[y++],A[r++]=z[y++],A[r++]=z[y++],k-=3;k&&(A[r++]=z[y++],k>1&&(A[r++]=z[y++]))}else{y=r-x;do{A[r++]=A[y++],A[r++]=A[y++],A[r++]=A[y++],k-=3}while(k>2);k&&(A[r++]=A[y++],k>1&&(A[r++]=A[y++]))}break}}break}}while(n>3,u&=(1<<(c-=k<<3))-1,e.next_in=n,e.next_out=r,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=x,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,c):m}function re(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):m}function se(e,t){var a,n;return e&&e.state?(n=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?m:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,re(e))):m}function le(e,t){var a,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(a=se(e,t))!==c&&(e.state=null),a):m}var oe,he,de=!0;function _e(e){if(de){var t;for(oe=new n.Buf32(512),he=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(l(h,e.lens,0,288,oe,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;l(d,e.lens,0,32,he,0,e.work,{bits:5}),de=!1}e.lencode=oe,e.lenbits=9,e.distcode=he,e.distbits=5}function fe(e,t,a,i){var r,s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(n.arraySet(s.window,t,a-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>i&&(r=i),n.arraySet(s.window,t,a-i,r,s.wnext),(i-=r)?(n.arraySet(s.window,t,a-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,a.check=r(a.check,Se,2,0),le=0,oe=0,a.mode=y;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&le)<<8)+(le>>8))%31){e.msg="incorrect header check",a.mode=Q;break}if((15&le)!==k){e.msg="unknown compression method",a.mode=Q;break}if(oe-=4,xe=8+(15&(le>>>=4)),0===a.wbits)a.wbits=xe;else if(xe>a.wbits){e.msg="invalid window size",a.mode=Q;break}a.dmax=1<>8&1),512&a.flags&&(Se[0]=255&le,Se[1]=le>>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0,a.mode=z;case z:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,Se[2]=le>>>16&255,Se[3]=le>>>24&255,a.check=r(a.check,Se,4,0)),le=0,oe=0,a.mode=E;case E:for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>8),512&a.flags&&(Se[0]=255&le,Se[1]=le>>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0,a.mode=A;case A:if(1024&a.flags){for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0}else a.head&&(a.head.extra=null);a.mode=S;case S:if(1024&a.flags&&((ue=a.length)>re&&(ue=re),ue&&(a.head&&(xe=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),n.arraySet(a.head.extra,ee,ae,ue,xe)),512&a.flags&&(a.check=r(a.check,ee,ue,ae)),re-=ue,ae+=ue,a.length-=ue),a.length))break e;a.length=0,a.mode=Z;case Z:if(2048&a.flags){if(0===re)break e;ue=0;do{xe=ee[ae+ue++],a.head&&xe&&a.length<65536&&(a.head.name+=String.fromCharCode(xe))}while(xe&&ue>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=N;break;case B:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>=7&oe,oe-=7&oe,a.mode=W;break}for(;oe<3;){if(0===re)break e;re--,le+=ee[ae++]<>>=1)){case 0:a.mode=U;break;case 1:if(_e(a),a.mode=P,t===u){le>>>=2,oe-=2;break e}break;case 2:a.mode=L;break;case 3:e.msg="invalid block type",a.mode=Q}le>>>=2,oe-=2;break;case U:for(le>>>=7&oe,oe-=7&oe;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=Q;break}if(a.length=65535&le,le=0,oe=0,a.mode=I,t===u)break e;case I:a.mode=F;case F:if(ue=a.length){if(ue>re&&(ue=re),ue>se&&(ue=se),0===ue)break e;n.arraySet(te,ee,ae,ue,ie),re-=ue,ae+=ue,se-=ue,ie+=ue,a.length-=ue;break}a.mode=N;break;case L:for(;oe<14;){if(0===re)break e;re--,le+=ee[ae++]<>>=5,oe-=5,a.ndist=1+(31&le),le>>>=5,oe-=5,a.ncode=4+(15&le),le>>>=4,oe-=4,a.nlen>286||a.ndist>30){e.msg="too many length or distance symbols",a.mode=Q;break}a.have=0,a.mode=M;case M:for(;a.have>>=3,oe-=3}for(;a.have<19;)a.lens[Ze[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,ze={bits:a.lenbits},ye=l(o,a.lens,0,19,a.lencode,0,a.work,ze),a.lenbits=ze.bits,ye){e.msg="invalid code lengths set",a.mode=Q;break}a.have=0,a.mode=C;case C:for(;a.have>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=ge,oe-=ge,a.lens[a.have++]=we;else{if(16===we){for(Ee=ge+2;oe>>=ge,oe-=ge,0===a.have){e.msg="invalid bit length repeat",a.mode=Q;break}xe=a.lens[a.have-1],ue=3+(3&le),le>>>=2,oe-=2}else if(17===we){for(Ee=ge+3;oe>>=ge)),le>>>=3,oe-=3}else{for(Ee=ge+7;oe>>=ge)),le>>>=7,oe-=7}if(a.have+ue>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=Q;break}for(;ue--;)a.lens[a.have++]=xe}}if(a.mode===Q)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=Q;break}if(a.lenbits=9,ze={bits:a.lenbits},ye=l(h,a.lens,0,a.nlen,a.lencode,0,a.work,ze),a.lenbits=ze.bits,ye){e.msg="invalid literal/lengths set",a.mode=Q;break}if(a.distbits=6,a.distcode=a.distdyn,ze={bits:a.distbits},ye=l(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,ze),a.distbits=ze.bits,ye){e.msg="invalid distances set",a.mode=Q;break}if(a.mode=P,t===u)break e;case P:a.mode=H;case H:if(re>=6&&se>=258){e.next_out=ie,e.avail_out=se,e.next_in=ae,e.avail_in=re,a.hold=le,a.bits=oe,s(e,de),ie=e.next_out,te=e.output,se=e.avail_out,ae=e.next_in,ee=e.input,re=e.avail_in,le=a.hold,oe=a.bits,a.mode===N&&(a.back=-1);break}for(a.back=0;me=(Ae=a.lencode[le&(1<>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ae,!(pe+(ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,a.length=we,0===me){a.mode=X;break}if(32&me){a.back=-1,a.mode=N;break}if(64&me){e.msg="invalid literal/length code",a.mode=Q;break}a.extra=15&me,a.mode=j;case j:if(a.extra){for(Ee=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=K;case K:for(;me=(Ae=a.distcode[le&(1<>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ae,!(pe+(ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,64&me){e.msg="invalid distance code",a.mode=Q;break}a.offset=we,a.extra=15&me,a.mode=Y;case Y:if(a.extra){for(Ee=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=Q;break}a.mode=G;case G:if(0===se)break e;if(ue=de-se,a.offset>ue){if((ue=a.offset-ue)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=Q;break}ue>a.wnext?(ue-=a.wnext,ce=a.wsize-ue):ce=a.wnext-ue,ue>a.length&&(ue=a.length),be=a.window}else be=te,ce=ie-a.offset,ue=a.length;ue>se&&(ue=se),se-=ue,a.length-=ue;do{te[ie++]=be[ce++]}while(--ue);0===a.length&&(a.mode=H);break;case X:if(0===se)break e;te[ie++]=a.length,se--,a.mode=H;break;case W:if(a.wrap){for(;oe<32;){if(0===re)break e;re--,le|=ee[ae++]<=0;)e[t]=0}var h=0,d=1,_=2,f=29,u=256,c=u+1+f,b=30,g=19,m=2*c+1,w=15,p=16,v=7,k=256,x=16,y=17,z=18,E=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],R=new Array(2*(c+2));o(R);var O=new Array(2*b);o(O);var B=new Array(512);o(B);var T=new Array(256);o(T);var N=new Array(f);o(N);var D,U,I,F=new Array(b);function L(e,t,a,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=a,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function M(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function C(e){return e<256?B[e]:B[256+(e>>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function H(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1}while(--t>0);return a>>>1}function Y(e,t,a){var n,i,r=new Array(w+1),s=0;for(n=1;n<=w;n++)r[n]=s=s+a[n-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=K(r[l]++,l))}}function G(e){var t;for(t=0;t8?P(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function W(e,t,a,n){var i=2*t,r=2*a;return e[i]>1;a>=1;a--)q(e,r,a);i=o;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],q(e,r,1),n=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=n,r[2*i]=r[2*a]+r[2*n],e.depth[i]=(e.depth[a]>=e.depth[n]?e.depth[a]:e.depth[n])+1,r[2*a+1]=r[2*n+1]=i,e.heap[1]=i++,q(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,n,i,r,s,l,o=t.dyn_tree,h=t.max_code,d=t.stat_desc.static_tree,_=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,u=t.stat_desc.extra_base,c=t.stat_desc.max_length,b=0;for(r=0;r<=w;r++)e.bl_count[r]=0;for(o[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;ac&&(r=c,b++),o[2*n+1]=r,n>h||(e.bl_count[r]++,s=0,n>=u&&(s=f[n-u]),l=o[2*n],e.opt_len+=l*(r+s),_&&(e.static_len+=l*(d[2*n+1]+s)));if(0!==b){do{for(r=c-1;0===e.bl_count[r];)r--;e.bl_count[r]--,e.bl_count[r+1]+=2,e.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(n=e.bl_count[r];0!==n;)(i=e.heap[--a])>h||(o[2*i+1]!==r&&(e.opt_len+=(r-o[2*i+1])*o[2*i],o[2*i+1]=r),n--)}}(e,t),Y(r,h,e.bl_count)}function V(e,t,a){var n,i,r=-1,s=t[1],l=0,o=7,h=4;for(0===s&&(o=138,h=3),t[2*(a+1)+1]=65535,n=0;n<=a;n++)i=s,s=t[2*(n+1)+1],++l>=7;n0?(e.strm.data_type===l&&(e.strm.data_type=function(e){var t,a=4093624447;for(t=0;t<=31;t++,a>>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return r;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t=3&&0===e.bl_tree[2*Z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(h=e.static_len+3+7>>>3)<=o&&(o=h)):o=h=a+5,a+4<=o&&-1!==t?te(e,t,a,n):e.strategy===i||h===o?(H(e,(d<<1)+(n?1:0),3),J(e,R,O)):(H(e,(_<<1)+(n?1:0),3),function(e,t,a,n){var i;for(H(e,t-257,5),H(e,a-1,5),H(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(T[a]+u+1)]++,e.dyn_dtree[2*C(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){H(e,d<<1,3),j(e,k,R),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,a){"use strict";var n,i=a(0),r=a(8),s=a(3),l=a(2),o=a(1),h=0,d=1,_=3,f=4,u=5,c=0,b=1,g=-2,m=-3,w=-5,p=-1,v=1,k=2,x=3,y=4,z=0,E=2,A=8,S=9,Z=15,R=8,O=286,B=30,T=19,N=2*O+1,D=15,U=3,I=258,F=I+U+1,L=32,M=42,C=69,P=73,H=91,j=103,K=113,Y=666,G=1,X=2,W=3,q=4,J=3;function Q(e,t){return e.msg=o[t],t}function V(e){return(e<<1)-(e>4?9:0)}function $(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,a=t.pending;a>e.avail_out&&(a=e.avail_out),0!==a&&(i.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function te(e,t){r._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function ae(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var a,n,i=e.max_chain_length,r=e.strstart,s=e.prev_length,l=e.nice_match,o=e.strstart>e.w_size-F?e.strstart-(e.w_size-F):0,h=e.window,d=e.w_mask,_=e.prev,f=e.strstart+I,u=h[r+s-1],c=h[r+s];e.prev_length>=e.good_match&&(i>>=2),l>e.lookahead&&(l=e.lookahead);do{if(h[(a=t)+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do{}while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&rs){if(e.match_start=t,s=n,n>=l)break;u=h[r+s-1],c=h[r+s]}}}while((t=_[t&d])>o&&0!=--i);return s<=e.lookahead?s:e.lookahead}function re(e){var t,a,n,r,o,h,d,_,f,u,c=e.w_size;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=c+(c-F)){i.arraySet(e.window,e.window,c,c,0),e.match_start-=c,e.strstart-=c,e.block_start-=c,t=a=e.hash_size;do{n=e.head[--t],e.head[t]=n>=c?n-c:0}while(--a);t=a=c;do{n=e.prev[--t],e.prev[t]=n>=c?n-c:0}while(--a);r+=c}if(0===e.strm.avail_in)break;if(h=e.strm,d=e.window,_=e.strstart+e.lookahead,f=r,u=void 0,(u=h.avail_in)>f&&(u=f),a=0===u?0:(h.avail_in-=u,i.arraySet(d,h.input,h.next_in,u,_),1===h.state.wrap?h.adler=s(h.adler,d,u,_):2===h.state.wrap&&(h.adler=l(h.adler,d,u,_)),h.next_in+=u,h.total_in+=u,u),e.lookahead+=a,e.lookahead+e.insert>=U)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<=U)if(n=r._tr_tally(e,e.strstart-e.match_start,e.match_length-U),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=U){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=U-1)),e.prev_length>=U&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-U,n=r._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-U),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(l=2,n-=16),r<1||r>S||a!==A||n<8||n>15||t<0||t>9||s<0||s>y)return Q(e,g);8===n&&(n=9);var o=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*N),this.dyn_dtree=new i.Buf16(2*(2*B+1)),this.bl_tree=new i.Buf16(2*(2*T+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(D+1),this.heap=new i.Buf16(2*O+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=o,o.strm=e,o.wrap=l,o.gzhead=null,o.w_bits=n,o.w_size=1<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(re(e),0===e.lookahead&&t===h)return G;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+a;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return G;if(e.strstart-e.block_start>=e.w_size-F&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),G)}),new oe(4,4,8,4,se),new oe(4,5,16,8,se),new oe(4,6,32,32,se),new oe(4,4,16,16,le),new oe(8,16,32,32,le),new oe(8,16,128,128,le),new oe(8,32,128,256,le),new oe(32,128,258,1024,le),new oe(32,258,258,4096,le)],t.deflateInit=function(e,t){return _e(e,t,A,Z,R,z)},t.deflateInit2=_e,t.deflateReset=de,t.deflateResetKeep=he,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?g:(e.state.gzhead=t,c):g},t.deflate=function(e,t){var a,i,s,o;if(!e||!e.state||t>u||t<0)return e?Q(e,g):g;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Y&&t!==f)return Q(e,0===e.avail_out?w:g);if(i.strm=e,a=i.last_flush,i.last_flush=t,i.status===M)if(2===i.wrap)e.adler=0,ae(i,31),ae(i,139),ae(i,8),i.gzhead?(ae(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ae(i,255&i.gzhead.time),ae(i,i.gzhead.time>>8&255),ae(i,i.gzhead.time>>16&255),ae(i,i.gzhead.time>>24&255),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ae(i,255&i.gzhead.extra.length),ae(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=l(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=C):(ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,J),i.status=K);else{var m=A+(i.w_bits-8<<4)<<8;m|=(i.strategy>=k||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(m|=L),m+=31-m%31,i.status=K,ne(i,m),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===C)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending!==i.pending_buf_size));)ae(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=P)}else i.status=P;if(i.status===P)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.gzindex=0,i.status=H)}else i.status=H;if(i.status===H)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.status=j)}else i.status=j;if(i.status===j&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(ae(i,255&e.adler),ae(i,e.adler>>8&255),e.adler=0,i.status=K)):i.status=K),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,c}else if(0===e.avail_in&&V(t)<=V(a)&&t!==f)return Q(e,w);if(i.status===Y&&0!==e.avail_in)return Q(e,w);if(0!==e.avail_in||0!==i.lookahead||t!==h&&i.status!==Y){var p=i.strategy===k?function(e,t){for(var a;;){if(0===e.lookahead&&(re(e),0===e.lookahead)){if(t===h)return G;break}if(e.match_length=0,a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):i.strategy===x?function(e,t){for(var a,n,i,s,l=e.window;;){if(e.lookahead<=I){if(re(e),e.lookahead<=I&&t===h)return G;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=U&&e.strstart>0&&(n=l[i=e.strstart-1])===l[++i]&&n===l[++i]&&n===l[++i]){s=e.strstart+I;do{}while(n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=U?(a=r._tr_tally(e,1,e.match_length-U),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):n[i.level].func(i,t);if(p!==W&&p!==q||(i.status=Y),p===G||p===W)return 0===e.avail_out&&(i.last_flush=-1),c;if(p===X&&(t===d?r._tr_align(i):t!==u&&(r._tr_stored_block(i,0,0,!1),t===_&&($(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,c}return t!==f?c:i.wrap<=0?b:(2===i.wrap?(ae(i,255&e.adler),ae(i,e.adler>>8&255),ae(i,e.adler>>16&255),ae(i,e.adler>>24&255),ae(i,255&e.total_in),ae(i,e.total_in>>8&255),ae(i,e.total_in>>16&255),ae(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?c:b)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==M&&t!==C&&t!==P&&t!==H&&t!==j&&t!==K&&t!==Y?Q(e,g):(e.state=null,t===K?Q(e,m):c):g},t.deflateSetDictionary=function(e,t){var a,n,r,l,o,h,d,_,f=t.length;if(!e||!e.state)return g;if(2===(l=(a=e.state).wrap)||1===l&&a.status!==M||a.lookahead)return g;for(1===l&&(e.adler=s(e.adler,t,f,0)),a.wrap=0,f>=a.w_size&&(0===l&&($(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new i.Buf8(a.w_size),i.arraySet(_,t,f-a.w_size,a.w_size,0),t=_,f=a.w_size),o=e.avail_in,h=e.next_in,d=e.input,e.avail_in=f,e.next_in=0,e.input=t,re(a);a.lookahead>=U;){n=a.strstart,r=a.lookahead-(U-1);do{a.ins_h=(a.ins_h<0&&i!==l.Z_STREAM_END);return t.next_out>n&&(o=t.output.subarray(n,n=t.next_out),d=e(o)),d}}(function(e){return a.inflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))}),this._deflate=function(e){var t=new n.default,a=(0,i.deflateInit2)(t,l.Z_DEFAULT_COMPRESSION,l.Z_DEFLATED,d,8,l.Z_DEFAULT_STRATEGY);if(a!==l.Z_OK)throw new Error("Problem initializing deflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();t.input=a,t.next_in=0,t.avail_in=t.input.length;var n=void 0,r=void 0,o=void 0,d=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(h),o=t.next_out=0,t.avail_out=h),(n=(0,i.deflate)(t,l.Z_SYNC_FLUSH))!==l.Z_STREAM_END&&n!==l.Z_OK)throw new Error("Deflate problem: "+s.default[n]);0===t.avail_out&&t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),d=e(r))}while((t.avail_in>0||0===t.avail_out)&&n!==l.Z_STREAM_END);return t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),d=e(r)),d}}(function(e){return a.deflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))})}_.prototype.inflate=function(e){this._inflate(new Uint8Array(e))},_.prototype.deflate=function(e){this._deflate(new Uint8Array(e))}},function(e,t,a){"use strict";var n,i=a(11);var r=function(e,t){return{message:e,buffer:t}},s=new((n=i)&&n.__esModule?n:{default:n}).default(function(e){return self.postMessage(r("inflated_ready",e),[e])},function(e){return self.postMessage(r("deflated_ready",e),[e])});self.onmessage=function(e){var t=e.data.message,a=e.data.buffer;switch(t){case"start":break;case"inflate":s.inflate(a);break;case"deflate":s.deflate(a)}}}]);'; +/* babel-plugin-inline-import '../res/compression.worker.blob' */const CompressionBlob = '!function(e){var t={};function a(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)a.d(n,i,function(t){return e[t]}.bind(null,i));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=4)}([function(e,t,a){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var n in a)i(a,n)&&(e[n]=a[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,a,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(a,a+n),i);else for(var r=0;r>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(i=i+t[n++]|0)|0}while(--s);i%=65521,r%=65521}return i|r<<16|0}},function(e,t,a){"use strict";var n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();e.exports=function(e,t,a,i){var r=n,s=i+a;e^=-1;for(var l=i;l>>8^r[255&(e^t[l])];return-1^e}},function(e,t,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},function(e,t,a){"use strict";var n=function(e,t){return{message:e,buffer:t}},i=new(function(e){return e&&e.__esModule?e:{default:e}}(a(5)).default)(function(e){return self.postMessage(n("inflated_ready",e),[e])},function(e){return self.postMessage(n("deflated_ready",e),[e])});self.onmessage=function(e){var t=e.data.message,a=e.data.buffer;switch(t){case"start":break;case"inflate":i.inflate(a);break;case"deflate":i.deflate(a)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=_;var n=o(a(6)),i=a(7),r=a(9),s=o(a(3)),l=a(12);function o(e){return e&&e.__esModule?e:{default:e}}var d=16384,h=15;function _(e,t){var a=this;this.inflatedReady=e,this.deflatedReady=t,this._inflate=function(e){var t=new n.default,a=(0,r.inflateInit2)(t,h);if(a!==l.Z_OK)throw new Error("Problem initializing inflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();var n=void 0;t.input=a,t.next_in=0,t.avail_in=t.input.length;var i=void 0,o=void 0,h=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(d),n=t.next_out=0,t.avail_out=d),(i=(0,r.inflate)(t,l.Z_NO_FLUSH))!==l.Z_STREAM_END&&i!==l.Z_OK)throw new Error("inflate problem: "+s.default[i]);t.next_out&&(0!==t.avail_out&&i!==l.Z_STREAM_END||(o=t.output.subarray(n,n=t.next_out),h=e(o)))}while(t.avail_in>0&&i!==l.Z_STREAM_END);return t.next_out>n&&(o=t.output.subarray(n,n=t.next_out),h=e(o)),h}}(function(e){return a.inflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))}),this._deflate=function(e){var t=new n.default,a=(0,i.deflateInit2)(t,l.Z_DEFAULT_COMPRESSION,l.Z_DEFLATED,h,8,l.Z_DEFAULT_STRATEGY);if(a!==l.Z_OK)throw new Error("Problem initializing deflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();t.input=a,t.next_in=0,t.avail_in=t.input.length;var n=void 0,r=void 0,o=void 0,h=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(d),o=t.next_out=0,t.avail_out=d),(n=(0,i.deflate)(t,l.Z_SYNC_FLUSH))!==l.Z_STREAM_END&&n!==l.Z_OK)throw new Error("Deflate problem: "+s.default[n]);0===t.avail_out&&t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),h=e(r))}while((t.avail_in>0||0===t.avail_out)&&n!==l.Z_STREAM_END);return t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),h=e(r)),h}}(function(e){return a.deflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))})}_.prototype.inflate=function(e){this._inflate(new Uint8Array(e))},_.prototype.deflate=function(e){this._deflate(new Uint8Array(e))}},function(e,t,a){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},function(e,t,a){"use strict";var n,i=a(0),r=a(8),s=a(1),l=a(2),o=a(3),d=0,h=1,_=3,f=4,u=5,c=0,b=1,g=-2,m=-3,w=-5,p=-1,v=1,k=2,y=3,x=4,z=0,S=2,E=8,A=9,Z=15,R=8,O=286,B=30,T=19,N=2*O+1,D=15,U=3,I=258,M=I+U+1,F=32,L=42,C=69,P=73,j=91,H=103,K=113,Y=666,G=1,X=2,W=3,q=4,J=3;function Q(e,t){return e.msg=o[t],t}function V(e){return(e<<1)-(e>4?9:0)}function $(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,a=t.pending;a>e.avail_out&&(a=e.avail_out),0!==a&&(i.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function te(e,t){r._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function ae(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t,a,n){var r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,i.arraySet(t,e.input,e.next_in,r,a),1===e.state.wrap?e.adler=s(e.adler,t,r,a):2===e.state.wrap&&(e.adler=l(e.adler,t,r,a)),e.next_in+=r,e.total_in+=r,r)}function re(e,t){var a,n,i=e.max_chain_length,r=e.strstart,s=e.prev_length,l=e.nice_match,o=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,d=e.window,h=e.w_mask,_=e.prev,f=e.strstart+I,u=d[r+s-1],c=d[r+s];e.prev_length>=e.good_match&&(i>>=2),l>e.lookahead&&(l=e.lookahead);do{if(d[(a=t)+s]===c&&d[a+s-1]===u&&d[a]===d[r]&&d[++a]===d[r+1]){r+=2,a++;do{}while(d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&rs){if(e.match_start=t,s=n,n>=l)break;u=d[r+s-1],c=d[r+s]}}}while((t=_[t&h])>o&&0!=--i);return s<=e.lookahead?s:e.lookahead}function se(e){var t,a,n,r,s,l=e.w_size;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=l+(l-M)){i.arraySet(e.window,e.window,l,l,0),e.match_start-=l,e.strstart-=l,e.block_start-=l,t=a=e.hash_size;do{n=e.head[--t],e.head[t]=n>=l?n-l:0}while(--a);t=a=l;do{n=e.prev[--t],e.prev[t]=n>=l?n-l:0}while(--a);r+=l}if(0===e.strm.avail_in)break;if(a=ie(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=a,e.lookahead+e.insert>=U)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<=U)if(n=r._tr_tally(e,e.strstart-e.match_start,e.match_length-U),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=U){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=U-1)),e.prev_length>=U&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-U,n=r._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-U),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(l=2,n-=16),r<1||r>A||a!==E||n<8||n>15||t<0||t>9||s<0||s>x)return Q(e,g);8===n&&(n=9);var o=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=E,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*N),this.dyn_dtree=new i.Buf16(2*(2*B+1)),this.bl_tree=new i.Buf16(2*(2*T+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(D+1),this.heap=new i.Buf16(2*O+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=o,o.strm=e,o.wrap=l,o.gzhead=null,o.w_bits=n,o.w_size=1<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(se(e),0===e.lookahead&&t===d)return G;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+a;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return G;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),G)}),new de(4,4,8,4,le),new de(4,5,16,8,le),new de(4,6,32,32,le),new de(4,4,16,16,oe),new de(8,16,32,32,oe),new de(8,16,128,128,oe),new de(8,32,128,256,oe),new de(32,128,258,1024,oe),new de(32,258,258,4096,oe)],t.deflateInit=function(e,t){return fe(e,t,E,Z,R,z)},t.deflateInit2=fe,t.deflateReset=_e,t.deflateResetKeep=he,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?g:(e.state.gzhead=t,c):g},t.deflate=function(e,t){var a,i,s,o;if(!e||!e.state||t>u||t<0)return e?Q(e,g):g;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Y&&t!==f)return Q(e,0===e.avail_out?w:g);if(i.strm=e,a=i.last_flush,i.last_flush=t,i.status===L)if(2===i.wrap)e.adler=0,ae(i,31),ae(i,139),ae(i,8),i.gzhead?(ae(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ae(i,255&i.gzhead.time),ae(i,i.gzhead.time>>8&255),ae(i,i.gzhead.time>>16&255),ae(i,i.gzhead.time>>24&255),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ae(i,255&i.gzhead.extra.length),ae(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=l(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=C):(ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,J),i.status=K);else{var m=E+(i.w_bits-8<<4)<<8;m|=(i.strategy>=k||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(m|=F),m+=31-m%31,i.status=K,ne(i,m),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===C)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending!==i.pending_buf_size));)ae(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=P)}else i.status=P;if(i.status===P)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.status=H)}else i.status=H;if(i.status===H&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(ae(i,255&e.adler),ae(i,e.adler>>8&255),e.adler=0,i.status=K)):i.status=K),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,c}else if(0===e.avail_in&&V(t)<=V(a)&&t!==f)return Q(e,w);if(i.status===Y&&0!==e.avail_in)return Q(e,w);if(0!==e.avail_in||0!==i.lookahead||t!==d&&i.status!==Y){var p=i.strategy===k?function(e,t){for(var a;;){if(0===e.lookahead&&(se(e),0===e.lookahead)){if(t===d)return G;break}if(e.match_length=0,a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):i.strategy===y?function(e,t){for(var a,n,i,s,l=e.window;;){if(e.lookahead<=I){if(se(e),e.lookahead<=I&&t===d)return G;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=U&&e.strstart>0&&(n=l[i=e.strstart-1])===l[++i]&&n===l[++i]&&n===l[++i]){s=e.strstart+I;do{}while(n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=U?(a=r._tr_tally(e,1,e.match_length-U),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):n[i.level].func(i,t);if(p!==W&&p!==q||(i.status=Y),p===G||p===W)return 0===e.avail_out&&(i.last_flush=-1),c;if(p===X&&(t===h?r._tr_align(i):t!==u&&(r._tr_stored_block(i,0,0,!1),t===_&&($(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,c}return t!==f?c:i.wrap<=0?b:(2===i.wrap?(ae(i,255&e.adler),ae(i,e.adler>>8&255),ae(i,e.adler>>16&255),ae(i,e.adler>>24&255),ae(i,255&e.total_in),ae(i,e.total_in>>8&255),ae(i,e.total_in>>16&255),ae(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?c:b)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==L&&t!==C&&t!==P&&t!==j&&t!==H&&t!==K&&t!==Y?Q(e,g):(e.state=null,t===K?Q(e,m):c):g},t.deflateSetDictionary=function(e,t){var a,n,r,l,o,d,h,_,f=t.length;if(!e||!e.state)return g;if(2===(l=(a=e.state).wrap)||1===l&&a.status!==L||a.lookahead)return g;for(1===l&&(e.adler=s(e.adler,t,f,0)),a.wrap=0,f>=a.w_size&&(0===l&&($(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new i.Buf8(a.w_size),i.arraySet(_,t,f-a.w_size,a.w_size,0),t=_,f=a.w_size),o=e.avail_in,d=e.next_in,h=e.input,e.avail_in=f,e.next_in=0,e.input=t,se(a);a.lookahead>=U;){n=a.strstart,r=a.lookahead-(U-1);do{a.ins_h=(a.ins_h<=0;)e[t]=0}var d=0,h=1,_=2,f=29,u=256,c=u+1+f,b=30,g=19,m=2*c+1,w=15,p=16,v=7,k=256,y=16,x=17,z=18,S=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],E=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],A=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],R=new Array(2*(c+2));o(R);var O=new Array(2*b);o(O);var B=new Array(512);o(B);var T=new Array(256);o(T);var N=new Array(f);o(N);var D,U,I,M=new Array(b);function F(e,t,a,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=a,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function L(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function C(e){return e<256?B[e]:B[256+(e>>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function j(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1}while(--t>0);return a>>>1}function Y(e,t,a){var n,i,r=new Array(w+1),s=0;for(n=1;n<=w;n++)r[n]=s=s+a[n-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=K(r[l]++,l))}}function G(e){var t;for(t=0;t8?P(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function W(e,t,a,n){var i=2*t,r=2*a;return e[i]>1;a>=1;a--)q(e,r,a);i=o;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],q(e,r,1),n=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=n,r[2*i]=r[2*a]+r[2*n],e.depth[i]=(e.depth[a]>=e.depth[n]?e.depth[a]:e.depth[n])+1,r[2*a+1]=r[2*n+1]=i,e.heap[1]=i++,q(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,n,i,r,s,l,o=t.dyn_tree,d=t.max_code,h=t.stat_desc.static_tree,_=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,u=t.stat_desc.extra_base,c=t.stat_desc.max_length,b=0;for(r=0;r<=w;r++)e.bl_count[r]=0;for(o[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;ac&&(r=c,b++),o[2*n+1]=r,n>d||(e.bl_count[r]++,s=0,n>=u&&(s=f[n-u]),l=o[2*n],e.opt_len+=l*(r+s),_&&(e.static_len+=l*(h[2*n+1]+s)));if(0!==b){do{for(r=c-1;0===e.bl_count[r];)r--;e.bl_count[r]--,e.bl_count[r+1]+=2,e.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(n=e.bl_count[r];0!==n;)(i=e.heap[--a])>d||(o[2*i+1]!==r&&(e.opt_len+=(r-o[2*i+1])*o[2*i],o[2*i+1]=r),n--)}}(e,t),Y(r,d,e.bl_count)}function V(e,t,a){var n,i,r=-1,s=t[1],l=0,o=7,d=4;for(0===s&&(o=138,d=3),t[2*(a+1)+1]=65535,n=0;n<=a;n++)i=s,s=t[2*(n+1)+1],++l>=7;n0?(e.strm.data_type===l&&(e.strm.data_type=function(e){var t,a=4093624447;for(t=0;t<=31;t++,a>>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return r;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t=3&&0===e.bl_tree[2*Z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(d=e.static_len+3+7>>>3)<=o&&(o=d)):o=d=a+5,a+4<=o&&-1!==t?te(e,t,a,n):e.strategy===i||d===o?(j(e,(h<<1)+(n?1:0),3),J(e,R,O)):(j(e,(_<<1)+(n?1:0),3),function(e,t,a,n){var i;for(j(e,t-257,5),j(e,a-1,5),j(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(T[a]+u+1)]++,e.dyn_dtree[2*C(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){j(e,h<<1,3),H(e,k,R),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,a){"use strict";var n=a(0),i=a(1),r=a(2),s=a(10),l=a(11),o=0,d=1,h=2,_=4,f=5,u=6,c=0,b=1,g=2,m=-2,w=-3,p=-4,v=-5,k=8,y=1,x=2,z=3,S=4,E=5,A=6,Z=7,R=8,O=9,B=10,T=11,N=12,D=13,U=14,I=15,M=16,F=17,L=18,C=19,P=20,j=21,H=22,K=23,Y=24,G=25,X=26,W=27,q=28,J=29,Q=30,V=31,$=32,ee=852,te=592,ae=15;function ne(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=y,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,c):m}function re(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):m}function se(e,t){var a,n;return e&&e.state?(n=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?m:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,re(e))):m}function le(e,t){var a,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(a=se(e,t))!==c&&(e.state=null),a):m}var oe,de,he=!0;function _e(e){if(he){var t;for(oe=new n.Buf32(512),de=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(l(d,e.lens,0,288,oe,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;l(h,e.lens,0,32,de,0,e.work,{bits:5}),he=!1}e.lencode=oe,e.lenbits=9,e.distcode=de,e.distbits=5}function fe(e,t,a,i){var r,s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(n.arraySet(s.window,t,a-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>i&&(r=i),n.arraySet(s.window,t,a-i,r,s.wnext),(i-=r)?(n.arraySet(s.window,t,a-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,a.check=r(a.check,Ae,2,0),le=0,oe=0,a.mode=x;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&le)<<8)+(le>>8))%31){e.msg="incorrect header check",a.mode=Q;break}if((15&le)!==k){e.msg="unknown compression method",a.mode=Q;break}if(oe-=4,ye=8+(15&(le>>>=4)),0===a.wbits)a.wbits=ye;else if(ye>a.wbits){e.msg="invalid window size",a.mode=Q;break}a.dmax=1<>8&1),512&a.flags&&(Ae[0]=255&le,Ae[1]=le>>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0,a.mode=z;case z:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,Ae[2]=le>>>16&255,Ae[3]=le>>>24&255,a.check=r(a.check,Ae,4,0)),le=0,oe=0,a.mode=S;case S:for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>8),512&a.flags&&(Ae[0]=255&le,Ae[1]=le>>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0,a.mode=E;case E:if(1024&a.flags){for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0}else a.head&&(a.head.extra=null);a.mode=A;case A:if(1024&a.flags&&((ue=a.length)>re&&(ue=re),ue&&(a.head&&(ye=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),n.arraySet(a.head.extra,ee,ae,ue,ye)),512&a.flags&&(a.check=r(a.check,ee,ue,ae)),re-=ue,ae+=ue,a.length-=ue),a.length))break e;a.length=0,a.mode=Z;case Z:if(2048&a.flags){if(0===re)break e;ue=0;do{ye=ee[ae+ue++],a.head&&ye&&a.length<65536&&(a.head.name+=String.fromCharCode(ye))}while(ye&&ue>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=N;break;case B:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>=7&oe,oe-=7&oe,a.mode=W;break}for(;oe<3;){if(0===re)break e;re--,le+=ee[ae++]<>>=1)){case 0:a.mode=U;break;case 1:if(_e(a),a.mode=P,t===u){le>>>=2,oe-=2;break e}break;case 2:a.mode=F;break;case 3:e.msg="invalid block type",a.mode=Q}le>>>=2,oe-=2;break;case U:for(le>>>=7&oe,oe-=7&oe;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=Q;break}if(a.length=65535&le,le=0,oe=0,a.mode=I,t===u)break e;case I:a.mode=M;case M:if(ue=a.length){if(ue>re&&(ue=re),ue>se&&(ue=se),0===ue)break e;n.arraySet(te,ee,ae,ue,ie),re-=ue,ae+=ue,se-=ue,ie+=ue,a.length-=ue;break}a.mode=N;break;case F:for(;oe<14;){if(0===re)break e;re--,le+=ee[ae++]<>>=5,oe-=5,a.ndist=1+(31&le),le>>>=5,oe-=5,a.ncode=4+(15&le),le>>>=4,oe-=4,a.nlen>286||a.ndist>30){e.msg="too many length or distance symbols",a.mode=Q;break}a.have=0,a.mode=L;case L:for(;a.have>>=3,oe-=3}for(;a.have<19;)a.lens[Ze[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,ze={bits:a.lenbits},xe=l(o,a.lens,0,19,a.lencode,0,a.work,ze),a.lenbits=ze.bits,xe){e.msg="invalid code lengths set",a.mode=Q;break}a.have=0,a.mode=C;case C:for(;a.have>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=ge,oe-=ge,a.lens[a.have++]=we;else{if(16===we){for(Se=ge+2;oe>>=ge,oe-=ge,0===a.have){e.msg="invalid bit length repeat",a.mode=Q;break}ye=a.lens[a.have-1],ue=3+(3&le),le>>>=2,oe-=2}else if(17===we){for(Se=ge+3;oe>>=ge)),le>>>=3,oe-=3}else{for(Se=ge+7;oe>>=ge)),le>>>=7,oe-=7}if(a.have+ue>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=Q;break}for(;ue--;)a.lens[a.have++]=ye}}if(a.mode===Q)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=Q;break}if(a.lenbits=9,ze={bits:a.lenbits},xe=l(d,a.lens,0,a.nlen,a.lencode,0,a.work,ze),a.lenbits=ze.bits,xe){e.msg="invalid literal/lengths set",a.mode=Q;break}if(a.distbits=6,a.distcode=a.distdyn,ze={bits:a.distbits},xe=l(h,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,ze),a.distbits=ze.bits,xe){e.msg="invalid distances set",a.mode=Q;break}if(a.mode=P,t===u)break e;case P:a.mode=j;case j:if(re>=6&&se>=258){e.next_out=ie,e.avail_out=se,e.next_in=ae,e.avail_in=re,a.hold=le,a.bits=oe,s(e,he),ie=e.next_out,te=e.output,se=e.avail_out,ae=e.next_in,ee=e.input,re=e.avail_in,le=a.hold,oe=a.bits,a.mode===N&&(a.back=-1);break}for(a.back=0;me=(Ee=a.lencode[le&(1<>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ee,!(pe+(ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,a.length=we,0===me){a.mode=X;break}if(32&me){a.back=-1,a.mode=N;break}if(64&me){e.msg="invalid literal/length code",a.mode=Q;break}a.extra=15&me,a.mode=H;case H:if(a.extra){for(Se=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=K;case K:for(;me=(Ee=a.distcode[le&(1<>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ee,!(pe+(ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,64&me){e.msg="invalid distance code",a.mode=Q;break}a.offset=we,a.extra=15&me,a.mode=Y;case Y:if(a.extra){for(Se=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=Q;break}a.mode=G;case G:if(0===se)break e;if(ue=he-se,a.offset>ue){if((ue=a.offset-ue)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=Q;break}ue>a.wnext?(ue-=a.wnext,ce=a.wsize-ue):ce=a.wnext-ue,ue>a.length&&(ue=a.length),be=a.window}else be=te,ce=ie-a.offset,ue=a.length;ue>se&&(ue=se),se-=ue,a.length-=ue;do{te[ie++]=be[ce++]}while(--ue);0===a.length&&(a.mode=j);break;case X:if(0===se)break e;te[ie++]=a.length,se--,a.mode=j;break;case W:if(a.wrap){for(;oe<32;){if(0===re)break e;re--,le|=ee[ae++]<>>=v=p>>>24,c-=v,0===(v=p>>>16&255))E[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<>>=v,c-=v),c<15&&(u+=S[n++]<>>=v=p>>>24,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<o){e.msg="invalid distance too far back",a.mode=30;break e}if(u>>>=v,c-=v,y>(v=r-s)){if((v=y-v)>h&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(x=0,z=f,0===_){if(x+=d-v,v2;)E[r++]=z[x++],E[r++]=z[x++],E[r++]=z[x++],k-=3;k&&(E[r++]=z[x++],k>1&&(E[r++]=z[x++]))}else{x=r-y;do{E[r++]=E[x++],E[r++]=E[x++],E[r++]=E[x++],k-=3}while(k>2);k&&(E[r++]=E[x++],k>1&&(E[r++]=E[x++]))}break}}break}}while(n>3,u&=(1<<(c-=k<<3))-1,e.next_in=n,e.next_out=r,e.avail_in=n=1&&0===U[E];E--);if(A>E&&(A=E),0===E)return d[h++]=20971520,d[h++]=20971520,f.bits=1,0;for(S=1;S0&&(0===e||1!==E))return-1;for(I[1]=0,x=1;x<15;x++)I[x+1]=I[x]+U[x];for(z=0;z852||2===e&&B>592)return 1;for(;;){p=x-R,_[z]w?(v=M[F+_[z]],k=N[D+_[z]]):(v=96,k=0),u=1<>R)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<>=1;if(0!==u?(T&=u-1,T+=u):T=0,z++,0==--U[x]){if(x===E)break;x=t[a+_[z]]}if(x>A&&(T&g)!==b){for(0===R&&(R=A),m+=S,O=1<<(Z=x-R);Z+R852||2===e&&B>592)return 1;d[b=T&g]=A<<24|Z<<16|m-h|0}}return 0!==T&&(d[m+T]=x-R<<24|64<<16|0),f.bits=A,0}},function(e,t,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}}]);'; // // constants used for communication with the worker @@ -154,7 +154,7 @@ class Imap { } catch (E) {} // Connection closing unexpected is an error - this.socket.onclose = () => this._onError(new Error('Socket closed unexceptedly!')); + this.socket.onclose = () => this._onError(new Error('Socket closed unexpectedly!')); this.socket.ondata = evt => { try { this._onData(evt); @@ -182,6 +182,10 @@ class Imap { * @returns {Promise} Resolves when the socket is closed */ close(error) { + if (this._enteredClosingState) { + return Promise.resolve(); + } + this._enteredClosingState = true; return new Promise(resolve => { var tearDown = () => { // fulfill pending promises @@ -277,7 +281,10 @@ class Imap { var tag = 'W' + ++this._tagCounter; request.tag = tag; - return new Promise((resolve, reject) => { + return new Promise(resolve => { + var reject = error => { + return resolve(this.close(error)); + }; var data = { tag: tag, request: request, @@ -870,4 +877,4 @@ class Imap { exports.default = Imap; const createMessage = (message, buffer) => ({ message, buffer }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbWFwLmpzIl0sIm5hbWVzIjpbIk1FU1NBR0VfSU5JVElBTElaRV9XT1JLRVIiLCJNRVNTQUdFX0lORkxBVEUiLCJNRVNTQUdFX0lORkxBVEVEX0RBVEFfUkVBRFkiLCJNRVNTQUdFX0RFRkxBVEUiLCJNRVNTQUdFX0RFRkxBVEVEX0RBVEFfUkVBRFkiLCJFT0wiLCJMSU5FX0ZFRUQiLCJDQVJSSUFHRV9SRVRVUk4iLCJMRUZUX0NVUkxZX0JSQUNLRVQiLCJSSUdIVF9DVVJMWV9CUkFDS0VUIiwiQVNDSUlfUExVUyIsIkJVRkZFUl9TVEFURV9MSVRFUkFMIiwiQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzEiLCJCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMiIsIkJVRkZFUl9TVEFURV9ERUZBVUxUIiwiVElNRU9VVF9FTlRFUl9JRExFIiwiVElNRU9VVF9TT0NLRVRfTE9XRVJfQk9VTkQiLCJUSU1FT1VUX1NPQ0tFVF9NVUxUSVBMSUVSIiwiSW1hcCIsImNvbnN0cnVjdG9yIiwiaG9zdCIsInBvcnQiLCJvcHRpb25zIiwidGltZW91dEVudGVySWRsZSIsInRpbWVvdXRTb2NrZXRMb3dlckJvdW5kIiwidGltZW91dFNvY2tldE11bHRpcGxpZXIiLCJ1c2VTZWN1cmVUcmFuc3BvcnQiLCJzZWN1cmVNb2RlIiwiX2Nvbm5lY3Rpb25SZWFkeSIsIl9nbG9iYWxBY2NlcHRVbnRhZ2dlZCIsIl9jbGllbnRRdWV1ZSIsIl9jYW5TZW5kIiwiX3RhZ0NvdW50ZXIiLCJfY3VycmVudENvbW1hbmQiLCJfaWRsZVRpbWVyIiwiX3NvY2tldFRpbWVvdXRUaW1lciIsImNvbXByZXNzZWQiLCJfaW5jb21pbmdCdWZmZXJzIiwiX2J1ZmZlclN0YXRlIiwiX2xpdGVyYWxSZW1haW5pbmciLCJvbmNlcnQiLCJvbmVycm9yIiwib25yZWFkeSIsIm9uaWRsZSIsImNvbm5lY3QiLCJTb2NrZXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNvY2tldCIsIm9wZW4iLCJiaW5hcnlUeXBlIiwiY2EiLCJjZXJ0IiwiRSIsIm9uY2xvc2UiLCJfb25FcnJvciIsIkVycm9yIiwib25kYXRhIiwiZXZ0IiwiX29uRGF0YSIsImVyciIsImUiLCJkYXRhIiwibWVzc2FnZSIsIm9ub3BlbiIsImNsb3NlIiwiZXJyb3IiLCJ0ZWFyRG93biIsImZvckVhY2giLCJjbWQiLCJjYWxsYmFjayIsImNsZWFyVGltZW91dCIsIl9kaXNhYmxlQ29tcHJlc3Npb24iLCJyZWFkeVN0YXRlIiwibG9nb3V0IiwidGhlbiIsImNhdGNoIiwiZW5xdWV1ZUNvbW1hbmQiLCJ1cGdyYWRlIiwidXBncmFkZVRvU2VjdXJlIiwicmVxdWVzdCIsImFjY2VwdFVudGFnZ2VkIiwiY29tbWFuZCIsImNvbmNhdCIsIm1hcCIsInVudGFnZ2VkIiwidG9TdHJpbmciLCJ0b1VwcGVyQ2FzZSIsInRyaW0iLCJ0YWciLCJwYXlsb2FkIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicmVzcG9uc2UiLCJpc0Vycm9yIiwiaW5kZXhPZiIsImh1bWFuUmVhZGFibGUiLCJjb2RlIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImluZGV4IiwiY3R4Iiwic3BsaWNlIiwicHVzaCIsIl9zZW5kUmVxdWVzdCIsImdldFByZXZpb3VzbHlRdWV1ZWQiLCJjb21tYW5kcyIsInN0YXJ0SW5kZXgiLCJpIiwiaXNNYXRjaCIsInNlbmQiLCJzdHIiLCJidWZmZXIiLCJ0aW1lb3V0IiwiTWF0aCIsImZsb29yIiwiYnl0ZUxlbmd0aCIsInNldFRpbWVvdXQiLCJfc2VuZENvbXByZXNzZWQiLCJzZXRIYW5kbGVyIiwibG9nZ2VyIiwiVWludDhBcnJheSIsIl9wYXJzZUluY29taW5nQ29tbWFuZHMiLCJfaXRlcmF0ZUluY29taW5nQnVmZmVyIiwiYnVmIiwiZGlmZiIsIm1pbiIsIk51bWJlciIsIl9sZW5ndGhCdWZmZXIiLCJzdGFydCIsImxhdGVzdCIsInN1YmFycmF5IiwicHJldkJ1ZiIsInNldCIsImxlZnRJZHgiLCJsZWZ0T2ZMZWZ0Q3VybHkiLCJMRmlkeCIsImNvbW1hbmRMZW5ndGgiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInVpbnQ4QXJyYXkiLCJzaGlmdCIsInJlbWFpbmluZ0xlbmd0aCIsImV4Y2Vzc0xlbmd0aCIsIl9jbGVhcklkbGUiLCJjaHVuayIsImVycm9yUmVzcG9uc2VFeHBlY3RzRW1wdHlMaW5lIiwidmFsdWVBc1N0cmluZyIsImRlYnVnIiwiX3Byb2Nlc3NSZXNwb25zZSIsIl9oYW5kbGVSZXNwb25zZSIsIl9lbnRlcklkbGUiLCJfcmVzdGFydFF1ZXVlIiwicHJlY2hlY2siLCJjb250ZXh0Iiwid2FpdERyYWluIiwiYXR0cmlidXRlcyIsInRlc3QiLCJ0eXBlIiwibnIiLCJ2YWx1ZSIsInNlY3Rpb24iLCJvcHRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJ0b0xvd2VyQ2FzZSIsInByb3RvdHlwZSIsImNhbGwiLCJtYXRjaCIsImVuYWJsZUNvbXByZXNzaW9uIiwiX3NvY2tldE9uRGF0YSIsIndpbmRvdyIsIldvcmtlciIsIl9jb21wcmVzc2lvbldvcmtlciIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJDb21wcmVzc2lvbkJsb2IiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImNyZWF0ZU1lc3NhZ2UiLCJpbmZsYXRlZFJlYWR5IiwiZGVmbGF0ZWRSZWFkeSIsIl9jb21wcmVzc2lvbiIsImluZmxhdGUiLCJ0ZXJtaW5hdGUiLCJkZWZsYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNQSw0QkFBNEIsT0FBbEM7QUFDQSxNQUFNQyxrQkFBa0IsU0FBeEI7QUFDQSxNQUFNQyw4QkFBOEIsZ0JBQXBDO0FBQ0EsTUFBTUMsa0JBQWtCLFNBQXhCO0FBQ0EsTUFBTUMsOEJBQThCLGdCQUFwQzs7QUFFQSxNQUFNQyxNQUFNLE1BQVo7QUFDQSxNQUFNQyxZQUFZLEVB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QXJCOztBQUVBLFFBQUksS0FBS0csa0JBQVQsRUFBNkI7QUFDM0I7QUFDQSxXQUFLQSxrQkFBTCxDQUF3QlksU0FBeEI7QUFDQSxXQUFLWixrQkFBTCxHQUEwQixJQUExQjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBS0F4RCxrQkFBaUJOLE1BQWpCLEVBQXlCO0FBQ3ZCO0FBQ0EsUUFBSSxLQUFLOEQsa0JBQVQsRUFBNkI7QUFDM0IsV0FBS0Esa0JBQUwsQ0FBd0JNLFdBQXhCLENBQW9DQyxjQUFjcEwsZUFBZCxFQUErQitHLE1BQS9CLENBQXBDLEVBQTRFLENBQUNBLE1BQUQsQ0FBNUU7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLd0UsWUFBTCxDQUFrQkcsT0FBbEIsQ0FBMEIzRSxNQUExQjtBQUNEO0FBQ0Y7QUExd0J1Qjs7a0JBQUxoRyxJO0FBNndCckIsTUFBTXFLLGdCQUFnQixDQUFDdkgsT0FBRCxFQUFVa0QsTUFBVixNQUFzQixFQUFFbEQsT0FBRixFQUFXa0QsTUFBWCxFQUF0QixDQUF0QiIsImZpbGUiOiJpbWFwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvcE9yIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgVENQU29ja2V0IGZyb20gJ2VtYWlsanMtdGNwLXNvY2tldCdcbmltcG9ydCB7IHRvVHlwZWRBcnJheSwgZnJvbVR5cGVkQXJyYXkgfSBmcm9tICcuL2NvbW1vbidcbmltcG9ydCB7IHBhcnNlciwgY29tcGlsZXIgfSBmcm9tICdlbWFpbGpzLWltYXAtaGFuZGxlcidcbmltcG9ydCBDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJ1xuaW1wb3J0IENvbXByZXNzaW9uQmxvYiBmcm9tICcuLi9yZXMvY29tcHJlc3Npb24ud29ya2VyLmJsb2InXG5cbi8vXG4vLyBjb25zdGFudHMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB3b3JrZXJcbi8vXG5jb25zdCBNRVNTQUdFX0lOSVRJQUxJWkVfV09SS0VSID0gJ3N0YXJ0J1xuY29uc3QgTUVTU0FHRV9JTkZMQVRFID0gJ2luZmxhdGUnXG5jb25zdCBNRVNTQUdFX0lORkxBVEVEX0RBVEFfUkVBRFkgPSAnaW5mbGF0ZWRfcmVhZHknXG5jb25zdCBNRVNTQUdFX0RFRkxBVEUgPSAnZGVmbGF0ZSdcbmNvbnN0IE1FU1NBR0VfREVGTEFURURfREFUQV9SRUFEWSA9ICdkZWZsYXRlZF9yZWFkeSdcblxuY29uc3QgRU9MID0gJ1xcclxcbidcbmNvbnN0IExJTkVfRkVFRCA9IDEwXG5jb25zdCBDQVJSSUFHRV9SRVRVUk4gPSAxM1xuY29uc3QgTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzXG5jb25zdCBSSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1XG5cbmNvbnN0IEFTQ0lJX1BMVVMgPSA0M1xuXG4vLyBTdGF0ZSB0cmFja2luZyB3aGVuIGNvbnN0cnVjdGluZyBhbiBJTUFQIGNvbW1hbmQgZnJvbSBidWZmZXJzLlxuY29uc3QgQlVGRkVSX1NUQVRFX0xJVEVSQUwgPSAnbGl0ZXJhbCdcbmNvbnN0IEJVRkZFUl9TVEFURV9QT1NTSUJMWV9MSVRFUkFMX0xFTkdUSF8xID0gJ2xpdGVyYWxfbGVuZ3RoXzEnXG5jb25zdCBCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMiA9ICdsaXRlcmFsX2xlbmd0aF8yJ1xuY29uc3QgQlVGRkVSX1NUQVRFX0RFRkFVTFQgPSAnZGVmYXVsdCdcblxuLyoqXG4gKiBIb3cgbXVjaCB0aW1lIHRvIHdhaXQgc2luY2UgdGhlIGxhc3QgcmVzcG9uc2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgY29uc2lkZXJlZCBpZGxpbmdcbiAqL1xuY29uc3QgVElNRU9VVF9FTlRFUl9JRExFID0gMTAwMFxuXG4vKipcbiAqIExvd2VyIEJvdW5kIGZvciBzb2NrZXQgdGltZW91dCB0byB3YWl0IHNpbmNlIHRoZSBsYXN0IGRhdGEgd2FzIHdyaXR0ZW4gdG8gYSBzb2NrZXRcbiAqL1xuY29uc3QgVElNRU9VVF9TT0NLRVRfTE9XRVJfQk9VTkQgPSAxMDAwMFxuXG4vKipcbiAqIE11bHRpcGxpZXIgZm9yIHNvY2tldCB0aW1lb3V0OlxuICpcbiAqIFdlIGFzc3VtZSBhdCBsZWFzdCBhIEdQUlMgY29ubmVjdGlvbiB3aXRoIDExNSBrYi9zID0gMTQsMzc1IGtCL3MgdG9wcywgc28gMTAgS0IvcyB0byBiZSBvblxuICogdGhlIHNhZmUgc2lkZS4gV2UgY2FuIHRpbWVvdXQgYWZ0ZXIgYSBsb3dlciBib3VuZCBvZiAxMHMgKyAobiBLQiAvIDEwIEtCL3MpLiBBIDEgTUIgbWVzc2FnZVxuICogdXBsb2FkIHdvdWxkIGJlIDExMCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB0aW1lb3V0LiAxMCBLQi9zID09PSAwLjEgcy9CXG4gKi9cbmNvbnN0IFRJTUVPVVRfU09DS0VUX01VTFRJUExJRVIgPSAwLjFcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29ubmVjdGlvbiBvYmplY3QgdG8gYW4gSU1BUCBzZXJ2ZXIuIENhbGwgYGNvbm5lY3RgIG1ldGhvZCB0byBpbml0aXRhdGVcbiAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiwgdGhlIGNvbnN0cnVjdG9yIG9ubHkgZGVmaW5lcyB0aGUgcHJvcGVydGllcyBidXQgZG9lcyBub3QgYWN0dWFsbHkgY29ubmVjdC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW2hvc3Q9J2xvY2FsaG9zdCddIEhvc3RuYW1lIHRvIGNvbmVuY3QgdG9cbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9ydD0xNDNdIFBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG9cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlU2VjdXJlVHJhbnNwb3J0XSBTZXQgdG8gdHJ1ZSwgdG8gdXNlIGVuY3J5cHRlZCBjb25uZWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29tcHJlc3Npb25Xb3JrZXJQYXRoXSBvZmZsb2FkcyBkZS0vY29tcHJlc3Npb24gY29tcHV0YXRpb24gdG8gYSB3ZWIgd29ya2VyLCB0aGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBicm93c2VyaWZpZWQgZW1haWxqcy1jb21wcmVzc29yLXdvcmtlci5qc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFwIHtcbiAgY29uc3RydWN0b3IgKGhvc3QsIHBvcnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudGltZW91dEVudGVySWRsZSA9IFRJTUVPVVRfRU5URVJfSURMRVxuICAgIHRoaXMudGltZW91dFNvY2tldExvd2VyQm91bmQgPSBUSU1FT1VUX1NPQ0tFVF9MT1dFUl9CT1VORFxuICAgIHRoaXMudGltZW91dFNvY2tldE11bHRpcGxpZXIgPSBUSU1FT1VUX1NPQ0tFVF9NVUxUSVBMSUVSXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICB0aGlzLnBvcnQgPSBwb3J0IHx8ICh0aGlzLm9wdGlvbnMudXNlU2VjdXJlVHJhbnNwb3J0ID8gOTkzIDogMTQzKVxuICAgIHRoaXMuaG9zdCA9IGhvc3QgfHwgJ2xvY2FsaG9zdCdcblxuICAgIC8vIFVzZSBhIFRMUyBjb25uZWN0aW9uLiBQb3J0IDk5MyBhbHNvIGZvcmNlcyBUTFMuXG4gICAgdGhpcy5vcHRpb25zLnVzZVNlY3VyZVRyYW5zcG9ydCA9ICd1c2VTZWN1cmVUcmFuc3BvcnQnIGluIHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLnVzZVNlY3VyZVRyYW5zcG9ydCA6IHRoaXMucG9ydCA9PT0gOTkzXG5cbiAgICB0aGlzLnNlY3VyZU1vZGUgPSAhIXRoaXMub3B0aW9ucy51c2VTZWN1cmVUcmFuc3BvcnQgLy8gRG9lcyB0aGUgY29ubmVjdGlvbiB1c2UgU1NML1RMU1xuXG4gICAgdGhpcy5fY29ubmVjdGlvblJlYWR5ID0gZmFsc2UgLy8gSXMgdGhlIGNvbmVjdGlvbiBlc3RhYmxpc2hlZCBhbmQgZ3JlZXRpbmcgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG5cbiAgICB0aGlzLl9nbG9iYWxBY2NlcHRVbnRhZ2dlZCA9IHt9IC8vIEdsb2JhbCBoYW5kbGVycyBmb3IgdW5yZWxhdGVkIHJlc3BvbnNlcyAoRVhQVU5HRSwgRVhJU1RTIGV0Yy4pXG5cbiAgICB0aGlzLl9jbGllbnRRdWV1ZSA9IFtdIC8vIFF1ZXVlIG9mIG91dGdvaW5nIGNvbW1hbmRzXG4gICAgdGhpcy5fY2FuU2VuZCA9IGZhbHNlIC8vIElzIGl0IE9LIHRvIHNlbmQgc29tZXRoaW5nIHRvIHRoZSBzZXJ2ZXJcbiAgICB0aGlzLl90YWdDb3VudGVyID0gMCAvLyBDb3VudGVyIHRvIGFsbG93IHVuaXF1ZXVlIGltYXAgdGFnc1xuICAgIHRoaXMuX2N1cnJlbnRDb21tYW5kID0gZmFsc2UgLy8gQ3VycmVudCBjb21tYW5kIHRoYXQgaXMgd2FpdGluZyBmb3IgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG5cbiAgICB0aGlzLl9pZGxlVGltZXIgPSBmYWxzZSAvLyBUaW1lciB3YWl0aW5nIHRvIGVudGVyIGlkbGVcbiAgICB0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIgPSBmYWxzZSAvLyBUaW1lciB3YWl0aW5nIHRvIGRlY2xhcmUgdGhlIHNvY2tldCBkZWFkIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3Qgd3JpdGVcblxuICAgIHRoaXMuY29tcHJlc3NlZCA9IGZhbHNlIC8vIElzIHRoZSBjb25uZWN0aW9uIGNvbXByZXNzZWQgYW5kIG5lZWRzIGluZmxhdGluZy9kZWZsYXRpbmdcblxuICAgIC8vXG4gICAgLy8gSEVMUEVSU1xuICAgIC8vXG5cbiAgICAvLyBBcyB0aGUgc2VydmVyIHNlbmRzIGRhdGEgaW4gY2h1bmtzLCBpdCBuZWVkcyB0byBiZSBzcGxpdCBpbnRvIHNlcGFyYXRlIGxpbmVzLiBIZWxwcyBwYXJzaW5nIHRoZSBpbnB1dC5cbiAgICB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMgPSBbXVxuICAgIHRoaXMuX2J1ZmZlclN0YXRlID0gQlVGRkVSX1NUQVRFX0RFRkFVTFRcbiAgICB0aGlzLl9saXRlcmFsUmVtYWluaW5nID0gMFxuXG4gICAgLy9cbiAgICAvLyBFdmVudCBwbGFjZWhvbGRlcnMsIG1heSBiZSBvdmVycmlkZW4gd2l0aCBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICAvL1xuICAgIHRoaXMub25jZXJ0ID0gbnVsbFxuICAgIHRoaXMub25lcnJvciA9IG51bGwgLy8gSXJyZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZC4gQ29ubmVjdGlvbiB0byB0aGUgc2VydmVyIHdpbGwgYmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkuXG4gICAgdGhpcy5vbnJlYWR5ID0gbnVsbCAvLyBUaGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGVzdGFibGlzaGVkIGFuZCBncmVldGluZyBpcyByZWNlaXZlZFxuICAgIHRoaXMub25pZGxlID0gbnVsbCAvLyBUaGVyZSBhcmUgbm8gbW9yZSBjb21tYW5kcyB0byBwcm9jZXNzXG4gIH1cblxuICAvLyBQVUJMSUMgTUVUSE9EU1xuXG4gIC8qKlxuICAgKiBJbml0aWF0ZSBhIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlci4gV2FpdCBmb3Igb25yZWFkeSBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gU29ja2V0XG4gICAqICAgICBURVNUSU5HIE9OTFkhIFRoZSBUQ1BTb2NrZXQgaGFzIGEgcHJldHR5IG5vbnNlbnNpY2FsIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9yLFxuICAgKiAgICAgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byBtb2NrLiBGb3IgZGVwZW5kZW5jeS1pbmplY3Rpb24gcHVycG9zZXMsIHdlIHVzZSB0aGVcbiAgICogICAgIFNvY2tldCBwYXJhbWV0ZXIgdG8gcGFzcyBpbiBhIG1vY2sgU29ja2V0IGltcGxlbWVudGF0aW9uLiBTaG91bGQgYmUgbGVmdCBibGFua1xuICAgKiAgICAgaW4gcHJvZHVjdGlvbiB1c2UhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNvY2tldCBpcyBvcGVuZWRcbiAgICovXG4gIGNvbm5lY3QgKFNvY2tldCA9IFRDUFNvY2tldCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldCA9IFNvY2tldC5vcGVuKHRoaXMuaG9zdCwgdGhpcy5wb3J0LCB7XG4gICAgICAgIGJpbmFyeVR5cGU6ICdhcnJheWJ1ZmZlcicsXG4gICAgICAgIHVzZVNlY3VyZVRyYW5zcG9ydDogdGhpcy5zZWN1cmVNb2RlLFxuICAgICAgICBjYTogdGhpcy5vcHRpb25zLmNhXG4gICAgICB9KVxuXG4gICAgICAvLyBhbGxvd3MgY2VydGlmaWNhdGUgaGFuZGxpbmcgZm9yIHBsYXRmb3JtIHcvbyBuYXRpdmUgdGxzIHN1cHBvcnRcbiAgICAgIC8vIG9uY2VydCBpcyBub24gc3RhbmRhcmQgc28gc2V0dGluZyBpdCBtaWdodCB0aHJvdyBpZiB0aGUgc29ja2V0IG9iamVjdCBpcyBpbW11dGFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2VydCA9IChjZXJ0KSA9PiB7IHRoaXMub25jZXJ0ICYmIHRoaXMub25jZXJ0KGNlcnQpIH1cbiAgICAgIH0gY2F0Y2ggKEUpIHsgfVxuXG4gICAgICAvLyBDb25uZWN0aW9uIGNsb3NpbmcgdW5leHBlY3RlZCBpcyBhbiBlcnJvclxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHRoaXMuX29uRXJyb3IobmV3IEVycm9yKCdTb2NrZXQgY2xvc2VkIHVuZXhjZXB0ZWRseSEnKSlcbiAgICAgIHRoaXMuc29ja2V0Lm9uZGF0YSA9IChldnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9vbkRhdGEoZXZ0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLl9vbkVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5zIGR1cmluZyBjcmVhdGUgdGltZSwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IG9wZW4gc29ja2V0OiAnICsgZS5kYXRhLm1lc3NhZ2UpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgIC8vIHVzZSBwcm9wZXIgXCJpcnJlY292ZXJhYmxlIGVycm9yLCB0ZWFyIGRvd24gZXZlcnl0aGluZ1wiLWhhbmRsZXIgb25seSBhZnRlciBzb2NrZXQgaXMgb3BlblxuICAgICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKGUpID0+IHRoaXMuX29uRXJyb3IoZSlcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZFxuICAgKi9cbiAgY2xvc2UgKGVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB2YXIgdGVhckRvd24gPSAoKSA9PiB7XG4gICAgICAgIC8vIGZ1bGZpbGwgcGVuZGluZyBwcm9taXNlc1xuICAgICAgICB0aGlzLl9jbGllbnRRdWV1ZS5mb3JFYWNoKGNtZCA9PiBjbWQuY2FsbGJhY2soZXJyb3IpKVxuICAgICAgICBpZiAodGhpcy5fY3VycmVudENvbW1hbmQpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q29tbWFuZC5jYWxsYmFjayhlcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NsaWVudFF1ZXVlID0gW11cbiAgICAgICAgdGhpcy5fY3VycmVudENvbW1hbmQgPSBmYWxzZVxuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZXIpXG4gICAgICAgIHRoaXMuX2lkbGVUaW1lciA9IG51bGxcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc29ja2V0VGltZW91dFRpbWVyKVxuICAgICAgICB0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIgPSBudWxsXG5cbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIGFsbCBsaXN0ZW5lcnNcbiAgICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSBudWxsXG4gICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IG51bGxcbiAgICAgICAgICB0aGlzLnNvY2tldC5vbmRhdGEgPSBudWxsXG4gICAgICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IG51bGxcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jZXJ0ID0gbnVsbFxuICAgICAgICAgIH0gY2F0Y2ggKEUpIHsgfVxuXG4gICAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsXG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGlzYWJsZUNvbXByZXNzaW9uKClcblxuICAgICAgaWYgKCF0aGlzLnNvY2tldCB8fCB0aGlzLnNvY2tldC5yZWFkeVN0YXRlICE9PSAnb3BlbicpIHtcbiAgICAgICAgcmV0dXJuIHRlYXJEb3duKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IHRoaXMuc29ja2V0Lm9uZXJyb3IgPSB0ZWFyRG93biAvLyB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGUgZXJyb3IgaGVyZVxuICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBMT0dPVVQgdG8gdGhlIHNlcnZlci5cbiAgICpcbiAgICogVXNlIGlzIGRpc2NvdXJhZ2VkIVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2hlbiBjb25uZWN0aW9uIGlzIGNsb3NlZCBieSBzZXJ2ZXIuXG4gICAqL1xuICBsb2dvdXQgKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gdGhpcy5zb2NrZXQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgnQ2xpZW50IGxvZ2dpbmcgb3V0JykudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW5xdWV1ZUNvbW1hbmQoJ0xPR09VVCcpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgVExTIGhhbmRzaGFrZVxuICAgKi9cbiAgdXBncmFkZSAoKSB7XG4gICAgdGhpcy5zZWN1cmVNb2RlID0gdHJ1ZVxuICAgIHRoaXMuc29ja2V0LnVwZ3JhZGVUb1NlY3VyZSgpXG4gIH1cblxuICAvKipcbiAgICogU2NoZWR1bGVzIGEgY29tbWFuZCB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1haWxqcy9lbWFpbGpzLWltYXAtaGFuZGxlciBmb3IgcmVxdWVzdCBzdHJ1Y3R1cmUuXG4gICAqIERvIG5vdCBwcm92aWRlIGEgdGFnIHByb3BlcnR5LCBpdCB3aWxsIGJlIHNldCBieSB0aGUgcXVldWUgbWFuYWdlci5cbiAgICpcbiAgICogVG8gY2F0Y2ggdW50YWdnZWQgcmVzcG9uc2VzIHVzZSBhY2NlcHRVbnRhZ2dlZCBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGlmXG4gICAqIHRoZSB2YWx1ZSBmb3IgaXQgaXMgJ0ZFVENIJyB0aGVuIHRoZSByZXBvbnNlIGluY2x1ZGVzICdwYXlsb2FkLkZFVENIJyBwcm9wZXJ0eVxuICAgKiB0aGF0IGlzIGFuIGFycmF5IGluY2x1ZGluZyBhbGwgbGlzdGVkICogRkVUQ0ggcmVzcG9uc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBTdHJ1Y3R1cmVkIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFjY2VwdFVudGFnZ2VkIGEgbGlzdCBvZiB1bnRhZ2dlZCByZXNwb25zZXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluICdwYXlsb2FkJyBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbmFsIGRhdGEgZm9yIHRoZSBjb21tYW5kIHBheWxvYWRcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgKi9cbiAgZW5xdWV1ZUNvbW1hbmQgKHJlcXVlc3QsIGFjY2VwdFVudGFnZ2VkLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVxdWVzdCA9IHtcbiAgICAgICAgY29tbWFuZDogcmVxdWVzdFxuICAgICAgfVxuICAgIH1cblxuICAgIGFjY2VwdFVudGFnZ2VkID0gW10uY29uY2F0KGFjY2VwdFVudGFnZ2VkIHx8IFtdKS5tYXAoKHVudGFnZ2VkKSA9PiAodW50YWdnZWQgfHwgJycpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS50cmltKCkpXG5cbiAgICB2YXIgdGFnID0gJ1cnICsgKCsrdGhpcy5fdGFnQ291bnRlcilcbiAgICByZXF1ZXN0LnRhZyA9IHRhZ1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgICAgcGF5bG9hZDogYWNjZXB0VW50YWdnZWQubGVuZ3RoID8ge30gOiB1bmRlZmluZWQsXG4gICAgICAgIGNhbGxiYWNrOiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc0Vycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXNwb25zZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFsnTk8nLCAnQkFEJ10uaW5kZXhPZihwcm9wT3IoJycsICdjb21tYW5kJywgcmVzcG9uc2UpLnRvVXBwZXJDYXNlKCkudHJpbSgpKSA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IocmVzcG9uc2UuaHVtYW5SZWFkYWJsZSB8fCAnRXJyb3InKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcbiAgICAgICAgICAgICAgZXJyb3IuY29kZSA9IHJlc3BvbnNlLmNvZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBhbnkgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSBjb21tYW5kXG4gICAgICBPYmplY3Qua2V5cyhvcHRpb25zIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHsgZGF0YVtrZXldID0gb3B0aW9uc1trZXldIH0pXG5cbiAgICAgIGFjY2VwdFVudGFnZ2VkLmZvckVhY2goKGNvbW1hbmQpID0+IHsgZGF0YS5wYXlsb2FkW2NvbW1hbmRdID0gW10gfSlcblxuICAgICAgLy8gaWYgd2UncmUgaW4gcHJpb3JpdHkgbW9kZSAoaS5lLiB3ZSByYW4gY29tbWFuZHMgaW4gYSBwcmVjaGVjayksXG4gICAgICAvLyBxdWV1ZSBhbnkgY29tbWFuZHMgQkVGT1JFIHRoZSBjb21tYW5kIHRoYXQgY29udGlhbmVkIHRoZSBwcmVjaGVjayxcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHF1ZXVlIGNvbW1hbmQgYXMgdXN1YWxcbiAgICAgIHZhciBpbmRleCA9IGRhdGEuY3R4ID8gdGhpcy5fY2xpZW50UXVldWUuaW5kZXhPZihkYXRhLmN0eCkgOiAtMVxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgZGF0YS50YWcgKz0gJy5wJ1xuICAgICAgICBkYXRhLnJlcXVlc3QudGFnICs9ICcucCdcbiAgICAgICAgdGhpcy5fY2xpZW50UXVldWUuc3BsaWNlKGluZGV4LCAwLCBkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2xpZW50UXVldWUucHVzaChkYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2FuU2VuZCkge1xuICAgICAgICB0aGlzLl9zZW5kUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZHNcbiAgICogQHBhcmFtIGN0eFxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldFByZXZpb3VzbHlRdWV1ZWQgKGNvbW1hbmRzLCBjdHgpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5fY2xpZW50UXVldWUuaW5kZXhPZihjdHgpIC0gMVxuXG4gICAgLy8gc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGNvbW1hbmRzIGFuZCByZXR1cm4gdGhlIGZpcnN0IGZvdW5kXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoaXNNYXRjaCh0aGlzLl9jbGllbnRRdWV1ZVtpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudFF1ZXVlW2ldXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWxzbyBjaGVjayBjdXJyZW50IGNvbW1hbmQgaWYgbm8gU0VMRUNUIGlzIHF1ZXVlZFxuICAgIGlmIChpc01hdGNoKHRoaXMuX2N1cnJlbnRDb21tYW5kKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDb21tYW5kXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgICBmdW5jdGlvbiBpc01hdGNoIChkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YSAmJiBkYXRhLnJlcXVlc3QgJiYgY29tbWFuZHMuaW5kZXhPZihkYXRhLnJlcXVlc3QuY29tbWFuZCkgPj0gMFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgdG8gdGhlIFRDUCBzb2NrZXRcbiAgICogQXJtcyBhIHRpbWVvdXQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgUGF5bG9hZFxuICAgKi9cbiAgc2VuZCAoc3RyKSB7XG4gICAgY29uc3QgYnVmZmVyID0gdG9UeXBlZEFycmF5KHN0cikuYnVmZmVyXG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMudGltZW91dFNvY2tldExvd2VyQm91bmQgKyBNYXRoLmZsb29yKGJ1ZmZlci5ieXRlTGVuZ3RoICogdGhpcy50aW1lb3V0U29ja2V0TXVsdGlwbGllcilcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIpIC8vIGNsZWFyIHBlbmRpbmcgdGltZW91dHNcbiAgICB0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX29uRXJyb3IobmV3IEVycm9yKCcgU29ja2V0IHRpbWVkIG91dCEnKSksIHRpbWVvdXQpIC8vIGFybSB0aGUgbmV4dCB0aW1lb3V0XG5cbiAgICBpZiAodGhpcy5jb21wcmVzc2VkKSB7XG4gICAgICB0aGlzLl9zZW5kQ29tcHJlc3NlZChidWZmZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoYnVmZmVyKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBnbG9iYWwgaGFuZGxlciBmb3IgYW4gdW50YWdnZWQgcmVzcG9uc2UuIElmIGN1cnJlbnRseSBwcm9jZXNzZWQgY29tbWFuZFxuICAgKiBoYXMgbm90IGxpc3RlZCB1bnRhZ2dlZCBjb21tYW5kIGl0IGlzIGZvcndhcmRlZCB0byB0aGUgZ2xvYmFsIGhhbmRsZXIuIFVzZWZ1bFxuICAgKiB3aXRoIEVYUFVOR0UsIEVYSVNUUyBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFVudGFnZ2VkIGNvbW1hbmQgbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB3aXRoIHJlc3BvbnNlIG9iamVjdCBhbmQgY29udGludWUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIHNldEhhbmRsZXIgKGNvbW1hbmQsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fZ2xvYmFsQWNjZXB0VW50YWdnZWRbY29tbWFuZC50b1VwcGVyQ2FzZSgpLnRyaW0oKV0gPSBjYWxsYmFja1xuICB9XG5cbiAgLy8gSU5URVJOQUwgRVZFTlRTXG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHRoZSBzb2NrZXRcbiAgICpcbiAgICogQGV2ZW50XG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dCBFdmVudCBvYmplY3QuIFNlZSBldnQuZGF0YSBmb3IgdGhlIGVycm9yXG4gICAqL1xuICBfb25FcnJvciAoZXZ0KSB7XG4gICAgdmFyIGVycm9yXG4gICAgaWYgKHRoaXMuaXNFcnJvcihldnQpKSB7XG4gICAgICBlcnJvciA9IGV2dFxuICAgIH0gZWxzZSBpZiAoZXZ0ICYmIHRoaXMuaXNFcnJvcihldnQuZGF0YSkpIHtcbiAgICAgIGVycm9yID0gZXZ0LmRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoKGV2dCAmJiBldnQuZGF0YSAmJiBldnQuZGF0YS5tZXNzYWdlKSB8fCBldnQuZGF0YSB8fCBldnQgfHwgJ0Vycm9yJylcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcilcblxuICAgIC8vIGFsd2F5cyBjYWxsIG9uZXJyb3IgY2FsbGJhY2ssIG5vIG1hdHRlciBpZiBjbG9zZSgpIHN1Y2NlZWRzIG9yIGZhaWxzXG4gICAgdGhpcy5jbG9zZShlcnJvcikudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLm9uZXJyb3IgJiYgdGhpcy5vbmVycm9yKGVycm9yKVxuICAgIH0sICgpID0+IHtcbiAgICAgIHRoaXMub25lcnJvciAmJiB0aGlzLm9uZXJyb3IoZXJyb3IpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciBpbmNvbWluZyBkYXRhIGZyb20gdGhlIHNlcnZlci4gVGhlIGRhdGEgaXMgc2VudCBpbiBhcmJpdHJhcnlcbiAgICogY2h1bmtzIGFuZCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5IHNvIHRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGUgZGF0YVxuICAgKiBpcyBzcGxpdCBpbnRvIGNvbXBsZXRlIGxpbmVzIGJlZm9yZSB0aGUgZGF0YSBpcyBwYXNzZWQgdG8gdGhlIGNvbW1hbmRcbiAgICogaGFuZGxlclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldnRcbiAgICovXG4gIF9vbkRhdGEgKGV2dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIpIC8vIHJlc2V0IHRoZSB0aW1lb3V0IG9uIGVhY2ggZGF0YSBwYWNrZXRcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0U29ja2V0TG93ZXJCb3VuZCArIE1hdGguZmxvb3IoNDA5NiAqIHRoaXMudGltZW91dFNvY2tldE11bHRpcGxpZXIpIC8vIG1heCBwYWNrZXQgc2l6ZSBpcyA0MDk2IGJ5dGVzXG4gICAgdGhpcy5fc29ja2V0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9vbkVycm9yKG5ldyBFcnJvcignIFNvY2tldCB0aW1lZCBvdXQhJykpLCB0aW1lb3V0KVxuXG4gICAgdGhpcy5faW5jb21pbmdCdWZmZXJzLnB1c2gobmV3IFVpbnQ4QXJyYXkoZXZ0LmRhdGEpKSAvLyBhcHBlbmQgdG8gdGhlIGluY29taW5nIGJ1ZmZlclxuICAgIHRoaXMuX3BhcnNlSW5jb21pbmdDb21tYW5kcyh0aGlzLl9pdGVyYXRlSW5jb21pbmdCdWZmZXIoKSkgLy8gQ29uc3VtZSB0aGUgaW5jb21pbmcgYnVmZmVyXG4gIH1cblxuICAqIF9pdGVyYXRlSW5jb21pbmdCdWZmZXIgKCkge1xuICAgIGxldCBidWYgPSB0aGlzLl9pbmNvbWluZ0J1ZmZlcnNbdGhpcy5faW5jb21pbmdCdWZmZXJzLmxlbmd0aCAtIDFdIHx8IFtdXG4gICAgbGV0IGkgPSAwXG5cbiAgICAvLyBsb29wIGludmFyaWFudDpcbiAgICAvLyAgIHRoaXMuX2luY29taW5nQnVmZmVycyBzdGFydHMgd2l0aCB0aGUgYmVnaW5uaW5nIG9mIGluY29taW5nIGNvbW1hbmQuXG4gICAgLy8gICBidWYgaXMgc2hvcnRoYW5kIGZvciBsYXN0IGVsZW1lbnQgb2YgdGhpcy5faW5jb21pbmdCdWZmZXJzLlxuICAgIC8vICAgYnVmWzAuLmktMV0gaXMgcGFydCBvZiBpbmNvbWluZyBjb21tYW5kLlxuICAgIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgICAgc3dpdGNoICh0aGlzLl9idWZmZXJTdGF0ZSkge1xuICAgICAgICBjYXNlIEJVRkZFUl9TVEFURV9MSVRFUkFMOlxuICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gaSwgdGhpcy5fbGl0ZXJhbFJlbWFpbmluZylcbiAgICAgICAgICB0aGlzLl9saXRlcmFsUmVtYWluaW5nIC09IGRpZmZcbiAgICAgICAgICBpICs9IGRpZmZcbiAgICAgICAgICBpZiAodGhpcy5fbGl0ZXJhbFJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU3RhdGUgPSBCVUZGRVJfU1RBVEVfREVGQVVMVFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzI6XG4gICAgICAgICAgaWYgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYnVmW2ldID09PSBDQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgICAgICAgdGhpcy5fbGl0ZXJhbFJlbWFpbmluZyA9IE51bWJlcihmcm9tVHlwZWRBcnJheSh0aGlzLl9sZW5ndGhCdWZmZXIpKSArIDIgLy8gZm9yIENSTEZcbiAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyU3RhdGUgPSBCVUZGRVJfU1RBVEVfTElURVJBTFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyU3RhdGUgPSBCVUZGRVJfU1RBVEVfREVGQVVMVFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xlbmd0aEJ1ZmZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzE6XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBpXG4gICAgICAgICAgd2hpbGUgKGkgPCBidWYubGVuZ3RoICYmIGJ1ZltpXSA+PSA0OCAmJiBidWZbaV0gPD0gNTcpIHsgLy8gZGlnaXRzXG4gICAgICAgICAgICBpKytcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXJ0ICE9PSBpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXRlc3QgPSBidWYuc3ViYXJyYXkoc3RhcnQsIGkpXG4gICAgICAgICAgICBjb25zdCBwcmV2QnVmID0gdGhpcy5fbGVuZ3RoQnVmZmVyXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGhCdWZmZXIgPSBuZXcgVWludDhBcnJheShwcmV2QnVmLmxlbmd0aCArIGxhdGVzdC5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGhCdWZmZXIuc2V0KHByZXZCdWYpXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGhCdWZmZXIuc2V0KGxhdGVzdCwgcHJldkJ1Zi5sZW5ndGgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xlbmd0aEJ1ZmZlci5sZW5ndGggPiAwICYmIGJ1ZltpXSA9PT0gUklHSFRfQ1VSTFlfQlJBQ0tFVCkge1xuICAgICAgICAgICAgICB0aGlzLl9idWZmZXJTdGF0ZSA9IEJVRkZFUl9TVEFURV9QT1NTSUJMWV9MSVRFUkFMX0xFTkdUSF8yXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGVuZ3RoQnVmZmVyXG4gICAgICAgICAgICAgIHRoaXMuX2J1ZmZlclN0YXRlID0gQlVGRkVSX1NUQVRFX0RFRkFVTFRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gZmluZCBsaXRlcmFsIGxlbmd0aFxuICAgICAgICAgIGNvbnN0IGxlZnRJZHggPSBidWYuaW5kZXhPZihMRUZUX0NVUkxZX0JSQUNLRVQsIGkpXG4gICAgICAgICAgaWYgKGxlZnRJZHggPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgbGVmdE9mTGVmdEN1cmx5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgaSwgbGVmdElkeCAtIGkpXG4gICAgICAgICAgICBpZiAobGVmdE9mTGVmdEN1cmx5LmluZGV4T2YoTElORV9GRUVEKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgaSA9IGxlZnRJZHggKyAxXG4gICAgICAgICAgICAgIHRoaXMuX2xlbmd0aEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgICAgICAgIHRoaXMuX2J1ZmZlclN0YXRlID0gQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzFcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBmaW5kIGVuZCBvZiBjb21tYW5kXG4gICAgICAgICAgY29uc3QgTEZpZHggPSBidWYuaW5kZXhPZihMSU5FX0ZFRUQsIGkpXG4gICAgICAgICAgaWYgKExGaWR4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChMRmlkeCA8IGJ1Zi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2luY29taW5nQnVmZmVyc1t0aGlzLl9pbmNvbWluZ0J1ZmZlcnMubGVuZ3RoIC0gMV0gPSBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCAwLCBMRmlkeCArIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTGVuZ3RoID0gdGhpcy5faW5jb21pbmdCdWZmZXJzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIubGVuZ3RoLCAwKSAtIDIgLy8gMiBmb3IgQ1JMRlxuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBVaW50OEFycmF5KGNvbW1hbmRMZW5ndGgpXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5faW5jb21pbmdCdWZmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHVpbnQ4QXJyYXkgPSB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMuc2hpZnQoKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0xlbmd0aCA9IGNvbW1hbmRMZW5ndGggLSBpbmRleFxuICAgICAgICAgICAgICBpZiAodWludDhBcnJheS5sZW5ndGggPiByZW1haW5pbmdMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGNlc3NMZW5ndGggPSB1aW50OEFycmF5Lmxlbmd0aCAtIHJlbWFpbmluZ0xlbmd0aFxuICAgICAgICAgICAgICAgIHVpbnQ4QXJyYXkgPSB1aW50OEFycmF5LnN1YmFycmF5KDAsIC1leGNlc3NMZW5ndGgpXG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5jb21pbmdCdWZmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2luY29taW5nQnVmZmVycyA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbW1hbmQuc2V0KHVpbnQ4QXJyYXksIGluZGV4KVxuICAgICAgICAgICAgICBpbmRleCArPSB1aW50OEFycmF5Lmxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgY29tbWFuZFxuICAgICAgICAgICAgaWYgKExGaWR4IDwgYnVmLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmLnN1YmFycmF5KExGaWR4ICsgMSkpXG4gICAgICAgICAgICAgIHRoaXMuX2luY29taW5nQnVmZmVycy5wdXNoKGJ1ZilcbiAgICAgICAgICAgICAgaSA9IDBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGNsZWFyIHRoZSB0aW1lb3V0IHdoZW4gYW4gZW50aXJlIGNvbW1hbmQgaGFzIGFycml2ZWRcbiAgICAgICAgICAgICAgLy8gYW5kIG5vdCB3YWl0aW5nIG9uIG1vcmUgZGF0YSBmb3IgbmV4dCBjb21tYW5kXG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIpXG4gICAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lciA9IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQUklWQVRFIE1FVEhPRFNcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGEgY29tbWFuZCBmcm9tIHRoZSBxdWV1ZS4gVGhlIGNvbW1hbmQgaXMgcGFyc2VkIGFuZCBmZWVkZWQgdG8gYSBoYW5kbGVyXG4gICAqL1xuICBfcGFyc2VJbmNvbWluZ0NvbW1hbmRzIChjb21tYW5kcykge1xuICAgIGZvciAodmFyIGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIHRoaXMuX2NsZWFySWRsZSgpXG5cbiAgICAgIC8qXG4gICAgICAgKiBUaGUgXCIrXCItdGFnZ2VkIHJlc3BvbnNlIGlzIGEgc3BlY2lhbCBjYXNlOlxuICAgICAgICogRWl0aGVyIHRoZSBzZXJ2ZXIgY2FuIGFza3MgZm9yIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEsIGUuZy4gZm9yIHRoZSBBVVRIRU5USUNBVEUgY29tbWFuZC5cbiAgICAgICAqXG4gICAgICAgKiBPciB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIFhPQVVUSDIgYXV0aGVudGljYXRpb24sIGZvciB3aGljaCBTQVNMIGluaXRpYWwgY2xpZW50IHJlc3BvbnNlIGV4dGVuc2lvblxuICAgICAgICogZGljdGF0ZXMgdGhlIGNsaWVudCBzZW5kcyBhbiBlbXB0eSBFT0wgcmVzcG9uc2UgdG8gdGhlIGNoYWxsZW5nZSBjb250YWluaW5nIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICpcbiAgICAgICAqIERldGFpbHMgb24gXCIrXCItdGFnZ2VkIHJlc3BvbnNlOlxuICAgICAgICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTIuMi4xXG4gICAgICAgKi9cbiAgICAgIC8vXG4gICAgICBpZiAoY29tbWFuZFswXSA9PT0gQVNDSUlfUExVUykge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudENvbW1hbmQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBmZWVkIHRoZSBuZXh0IGNodW5rIG9mIGRhdGFcbiAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jdXJyZW50Q29tbWFuZC5kYXRhLnNoaWZ0KClcbiAgICAgICAgICBjaHVuayArPSAoIXRoaXMuX2N1cnJlbnRDb21tYW5kLmRhdGEubGVuZ3RoID8gRU9MIDogJycpIC8vIEVPTCBpZiB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBzZW5kXG4gICAgICAgICAgdGhpcy5zZW5kKGNodW5rKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRDb21tYW5kLmVycm9yUmVzcG9uc2VFeHBlY3RzRW1wdHlMaW5lKSB7XG4gICAgICAgICAgdGhpcy5zZW5kKEVPTCkgLy8gWE9BVVRIMiBlbXB0eSByZXNwb25zZSwgZXJyb3Igd2lsbCBiZSByZXBvcnRlZCB3aGVuIHNlcnZlciBjb250aW51ZXMgd2l0aCBOTyByZXNwb25zZVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciByZXNwb25zZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWVBc1N0cmluZyA9IHRoaXMuX2N1cnJlbnRDb21tYW5kLnJlcXVlc3QgJiYgdGhpcy5fY3VycmVudENvbW1hbmQucmVxdWVzdC52YWx1ZUFzU3RyaW5nXG4gICAgICAgIHJlc3BvbnNlID0gcGFyc2VyKGNvbW1hbmQsIHsgdmFsdWVBc1N0cmluZyB9KVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUzonLCAoKSA9PiBjb21waWxlcihyZXNwb25zZSwgZmFsc2UsIHRydWUpKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgcGFyc2luZyBpbWFwIGNvbW1hbmQhJywgcmVzcG9uc2UpXG4gICAgICAgIHJldHVybiB0aGlzLl9vbkVycm9yKGUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSlcbiAgICAgIHRoaXMuX2hhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKVxuXG4gICAgICAvLyBmaXJzdCByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIsIGNvbm5lY3Rpb24gaXMgbm93IHVzYWJsZVxuICAgICAgaWYgKCF0aGlzLl9jb25uZWN0aW9uUmVhZHkpIHtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvblJlYWR5ID0gdHJ1ZVxuICAgICAgICB0aGlzLm9ucmVhZHkgJiYgdGhpcy5vbnJlYWR5KClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmVlZHMgYSBwYXJzZWQgcmVzcG9uc2Ugb2JqZWN0IHRvIGFuIGFwcHJvcHJpYXRlIGhhbmRsZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFBhcnNlZCBjb21tYW5kIG9iamVjdFxuICAgKi9cbiAgX2hhbmRsZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAgIHZhciBjb21tYW5kID0gcHJvcE9yKCcnLCAnY29tbWFuZCcsIHJlc3BvbnNlKS50b1VwcGVyQ2FzZSgpLnRyaW0oKVxuXG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Q29tbWFuZCkge1xuICAgICAgLy8gdW5zb2xpY2l0ZWQgdW50YWdnZWQgcmVzcG9uc2VcbiAgICAgIGlmIChyZXNwb25zZS50YWcgPT09ICcqJyAmJiBjb21tYW5kIGluIHRoaXMuX2dsb2JhbEFjY2VwdFVudGFnZ2VkKSB7XG4gICAgICAgIHRoaXMuX2dsb2JhbEFjY2VwdFVudGFnZ2VkW2NvbW1hbmRdKHJlc3BvbnNlKVxuICAgICAgICB0aGlzLl9jYW5TZW5kID0gdHJ1ZVxuICAgICAgICB0aGlzLl9zZW5kUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jdXJyZW50Q29tbWFuZC5wYXlsb2FkICYmIHJlc3BvbnNlLnRhZyA9PT0gJyonICYmIGNvbW1hbmQgaW4gdGhpcy5fY3VycmVudENvbW1hbmQucGF5bG9hZCkge1xuICAgICAgLy8gZXhwZWN0ZWQgdW50YWdnZWQgcmVzcG9uc2VcbiAgICAgIHRoaXMuX2N1cnJlbnRDb21tYW5kLnBheWxvYWRbY29tbWFuZF0ucHVzaChyZXNwb25zZSlcbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnRhZyA9PT0gJyonICYmIGNvbW1hbmQgaW4gdGhpcy5fZ2xvYmFsQWNjZXB0VW50YWdnZWQpIHtcbiAgICAgIC8vIHVuZXhwZWN0ZWQgdW50YWdnZWQgcmVzcG9uc2VcbiAgICAgIHRoaXMuX2dsb2JhbEFjY2VwdFVudGFnZ2VkW2NvbW1hbmRdKHJlc3BvbnNlKVxuICAgIH0gZWxzZSBpZiAocmVzcG9uc2UudGFnID09PSB0aGlzLl9jdXJyZW50Q29tbWFuZC50YWcpIHtcbiAgICAgIC8vIHRhZ2dlZCByZXNwb25zZVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDb21tYW5kLnBheWxvYWQgJiYgT2JqZWN0LmtleXModGhpcy5fY3VycmVudENvbW1hbmQucGF5bG9hZCkubGVuZ3RoKSB7XG4gICAgICAgIHJlc3BvbnNlLnBheWxvYWQgPSB0aGlzLl9jdXJyZW50Q29tbWFuZC5wYXlsb2FkXG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50Q29tbWFuZC5jYWxsYmFjayhyZXNwb25zZSlcbiAgICAgIHRoaXMuX2NhblNlbmQgPSB0cnVlXG4gICAgICB0aGlzLl9zZW5kUmVxdWVzdCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgY29tbWFuZCBmcm9tIGNsaWVudCBxdWV1ZSB0byB0aGUgc2VydmVyLlxuICAgKi9cbiAgX3NlbmRSZXF1ZXN0ICgpIHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VudGVySWRsZSgpXG4gICAgfVxuICAgIHRoaXMuX2NsZWFySWRsZSgpXG5cbiAgICAvLyBhbiBvcGVyYXRpb24gd2FzIG1hZGUgaW4gdGhlIHByZWNoZWNrLCBubyBuZWVkIHRvIHJlc3RhcnQgdGhlIHF1ZXVlIG1hbnVhbGx5XG4gICAgdGhpcy5fcmVzdGFydFF1ZXVlID0gZmFsc2VcblxuICAgIHZhciBjb21tYW5kID0gdGhpcy5fY2xpZW50UXVldWVbMF1cbiAgICBpZiAodHlwZW9mIGNvbW1hbmQucHJlY2hlY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIHJlbWVtYmVyIHRoZSBjb250ZXh0XG4gICAgICB2YXIgY29udGV4dCA9IGNvbW1hbmRcbiAgICAgIHZhciBwcmVjaGVjayA9IGNvbnRleHQucHJlY2hlY2tcbiAgICAgIGRlbGV0ZSBjb250ZXh0LnByZWNoZWNrXG5cbiAgICAgIC8vIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgcXVldWUgaGFuZGxpbmcgaWYgbm8gb3BlcmF0aW9uIHdhcyBtYWRlIGluIHRoZSBwcmVjaGVja1xuICAgICAgdGhpcy5fcmVzdGFydFF1ZXVlID0gdHJ1ZVxuXG4gICAgICAvLyBpbnZva2UgdGhlIHByZWNoZWNrIGNvbW1hbmQgYW5kIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uIGFmdGVyIHRoZSBwcm9taXNlIHJlc29sdmVzXG4gICAgICBwcmVjaGVjayhjb250ZXh0KS50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gd2UncmUgZG9uZSB3aXRoIHRoZSBwcmVjaGVja1xuICAgICAgICBpZiAodGhpcy5fcmVzdGFydFF1ZXVlKSB7XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBxdWV1ZSBoYW5kbGluZ1xuICAgICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KClcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAvLyBwcmVjaGVjayBmYWlsZWQsIHNvIHdlIHJlbW92ZSB0aGUgaW5pdGlhbCBjb21tYW5kXG4gICAgICAgIC8vIGZyb20gdGhlIHF1ZXVlLCBpbnZva2UgaXRzIGNhbGxiYWNrIGFuZCByZXN1bWUgbm9ybWFsIG9wZXJhdGlvblxuICAgICAgICBsZXQgY21kXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY2xpZW50UXVldWUuaW5kZXhPZihjb250ZXh0KVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGNtZCA9IHRoaXMuX2NsaWVudFF1ZXVlLnNwbGljZShpbmRleCwgMSlbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY21kICYmIGNtZC5jYWxsYmFjaykge1xuICAgICAgICAgIGNtZC5jYWxsYmFjayhlcnIpXG4gICAgICAgICAgdGhpcy5fY2FuU2VuZCA9IHRydWVcbiAgICAgICAgICB0aGlzLl9wYXJzZUluY29taW5nQ29tbWFuZHModGhpcy5faXRlcmF0ZUluY29taW5nQnVmZmVyKCkpIC8vIENvbnN1bWUgdGhlIHJlc3Qgb2YgdGhlIGluY29taW5nIGJ1ZmZlclxuICAgICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KCkgLy8gY29udGludWUgc2VuZGluZ1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY2FuU2VuZCA9IGZhbHNlXG4gICAgdGhpcy5fY3VycmVudENvbW1hbmQgPSB0aGlzLl9jbGllbnRRdWV1ZS5zaGlmdCgpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fY3VycmVudENvbW1hbmQuZGF0YSA9IGNvbXBpbGVyKHRoaXMuX2N1cnJlbnRDb21tYW5kLnJlcXVlc3QsIHRydWUpXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQzonLCAoKSA9PiBjb21waWxlcih0aGlzLl9jdXJyZW50Q29tbWFuZC5yZXF1ZXN0LCBmYWxzZSwgdHJ1ZSkpIC8vIGV4Y2x1ZGVzIHBhc3N3b3JkcyBldGMuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGNvbXBpbGluZyBpbWFwIGNvbW1hbmQhJywgdGhpcy5fY3VycmVudENvbW1hbmQucmVxdWVzdClcbiAgICAgIHJldHVybiB0aGlzLl9vbkVycm9yKG5ldyBFcnJvcignRXJyb3IgY29tcGlsaW5nIGltYXAgY29tbWFuZCEnKSlcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuX2N1cnJlbnRDb21tYW5kLmRhdGEuc2hpZnQoKVxuXG4gICAgdGhpcy5zZW5kKGRhdGEgKyAoIXRoaXMuX2N1cnJlbnRDb21tYW5kLmRhdGEubGVuZ3RoID8gRU9MIDogJycpKVxuICAgIHJldHVybiB0aGlzLndhaXREcmFpblxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIG9uaWRsZSwgbm90aW5nIHRvIGRvIGN1cnJlbnRseVxuICAgKi9cbiAgX2VudGVySWRsZSAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lcilcbiAgICB0aGlzLl9pZGxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm9uaWRsZSAmJiB0aGlzLm9uaWRsZSgpKSwgdGhpcy50aW1lb3V0RW50ZXJJZGxlKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBpZGxlIHRpbWVyXG4gICAqL1xuICBfY2xlYXJJZGxlICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVyKVxuICAgIHRoaXMuX2lkbGVUaW1lciA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgcHJvY2Vzc2VzIGEgcmVzcG9uc2UgaW50byBhbiBlYXNpZXIgdG8gaGFuZGxlIGZvcm1hdC5cbiAgICogQWRkIHVudGFnZ2VkIG51bWJlcmVkIHJlc3BvbnNlcyAoZS5nLiBGRVRDSCkgaW50byBhIG5pY2VseSBmZWFzaWJsZSBmb3JtXG4gICAqIENoZWNrcyBpZiBhIHJlc3BvbnNlIGluY2x1ZGVzIG9wdGlvbmFsIHJlc3BvbnNlIGNvZGVzXG4gICAqIGFuZCBjb3BpZXMgdGhlc2UgaW50byBzZXBhcmF0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSB0aGVcbiAgICogZm9sbG93aW5nIHJlc3BvbnNlIGluY2x1ZGVzIGEgY2FwYWJpbGl0eSBsaXN0aW5nIGFuZCBhIGh1bWFuXG4gICAqIHJlYWRhYmxlIG1lc3NhZ2U6XG4gICAqXG4gICAqICAgICAqIE9LIFtDQVBBQklMSVRZIElEIE5BTUVTUEFDRV0gQWxsIHJlYWR5XG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFkZHMgYSAnY2FwYWJpbGl0eScgcHJvcGVydHkgd2l0aCBhbiBhcnJheSB2YWx1ZSBbJ0lEJywgJ05BTUVTUEFDRSddXG4gICAqIHRvIHRoZSByZXNwb25zZSBvYmplY3QuIEFkZGl0aW9uYWxseSAnQWxsIHJlYWR5JyBpcyBhZGRlZCBhcyAnaHVtYW5SZWFkYWJsZScgcHJvcGVydHkuXG4gICAqXG4gICAqIFNlZSBwb3NzaWJsZW0gSU1BUCBSZXNwb25zZSBDb2RlcyBhdCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTUzMFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgUGFyc2VkIHJlc3BvbnNlIG9iamVjdFxuICAgKi9cbiAgX3Byb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICBsZXQgY29tbWFuZCA9IHByb3BPcignJywgJ2NvbW1hbmQnLCByZXNwb25zZSkudG9VcHBlckNhc2UoKS50cmltKClcblxuICAgIC8vIG5vIGF0dHJpYnV0ZXNcbiAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5hdHRyaWJ1dGVzIHx8ICFyZXNwb25zZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW50YWdnZWQgcmVzcG9uc2VzIHcvIHNlcXVlbmNlIG51bWJlcnNcbiAgICBpZiAocmVzcG9uc2UudGFnID09PSAnKicgJiYgL15cXGQrJC8udGVzdChyZXNwb25zZS5jb21tYW5kKSAmJiByZXNwb25zZS5hdHRyaWJ1dGVzWzBdLnR5cGUgPT09ICdBVE9NJykge1xuICAgICAgcmVzcG9uc2UubnIgPSBOdW1iZXIocmVzcG9uc2UuY29tbWFuZClcbiAgICAgIHJlc3BvbnNlLmNvbW1hbmQgPSAocmVzcG9uc2UuYXR0cmlidXRlcy5zaGlmdCgpLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkudHJpbSgpXG4gICAgfVxuXG4gICAgLy8gbm8gb3B0aW9uYWwgcmVzcG9uc2UgY29kZVxuICAgIGlmIChbJ09LJywgJ05PJywgJ0JBRCcsICdCWUUnLCAnUFJFQVVUSCddLmluZGV4T2YoY29tbWFuZCkgPCAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBsYXN0IGVsZW1lbnQgb2YgdGhlIHJlc3BvbnNlIGlzIFRFWFQgdGhlbiB0aGlzIGlzIGZvciBodW1hbnNcbiAgICBpZiAocmVzcG9uc2UuYXR0cmlidXRlc1tyZXNwb25zZS5hdHRyaWJ1dGVzLmxlbmd0aCAtIDFdLnR5cGUgPT09ICdURVhUJykge1xuICAgICAgcmVzcG9uc2UuaHVtYW5SZWFkYWJsZSA9IHJlc3BvbnNlLmF0dHJpYnV0ZXNbcmVzcG9uc2UuYXR0cmlidXRlcy5sZW5ndGggLSAxXS52YWx1ZVxuICAgIH1cblxuICAgIC8vIFBhcnNlIGFuZCBmb3JtYXQgQVRPTSB2YWx1ZXNcbiAgICBpZiAocmVzcG9uc2UuYXR0cmlidXRlc1swXS50eXBlID09PSAnQVRPTScgJiYgcmVzcG9uc2UuYXR0cmlidXRlc1swXS5zZWN0aW9uKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSByZXNwb25zZS5hdHRyaWJ1dGVzWzBdLnNlY3Rpb24ubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGtleS5tYXAoKGtleSkgPT4gKGtleS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIChrZXkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLnNoaWZ0KClcbiAgICAgIHJlc3BvbnNlLmNvZGUgPSBrZXlcblxuICAgICAgaWYgKG9wdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVzcG9uc2Vba2V5LnRvTG93ZXJDYXNlKCldID0gb3B0aW9uWzBdXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJlc3BvbnNlW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9wdGlvblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhbiBFcnJvciBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgVmFsdWUgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIEVycm9yXG4gICAqL1xuICBpc0Vycm9yICh2YWx1ZSkge1xuICAgIHJldHVybiAhIU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkubWF0Y2goL0Vycm9yXFxdJC8pXG4gIH1cblxuICAvLyBDT01QUkVTU0lPTiBSRUxBVEVEIE1FVEhPRFNcblxuICAvKipcbiAgICogU2V0cyB1cCBkZWZsYXRlL2luZmxhdGUgZm9yIHRoZSBJT1xuICAgKi9cbiAgZW5hYmxlQ29tcHJlc3Npb24gKCkge1xuICAgIHRoaXMuX3NvY2tldE9uRGF0YSA9IHRoaXMuc29ja2V0Lm9uZGF0YVxuICAgIHRoaXMuY29tcHJlc3NlZCA9IHRydWVcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuV29ya2VyKSB7XG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlciA9IG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbQ29tcHJlc3Npb25CbG9iXSkpKVxuICAgICAgdGhpcy5fY29tcHJlc3Npb25Xb3JrZXIub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBlLmRhdGEubWVzc2FnZVxuICAgICAgICB2YXIgZGF0YSA9IGUuZGF0YS5idWZmZXJcblxuICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHtcbiAgICAgICAgICBjYXNlIE1FU1NBR0VfSU5GTEFURURfREFUQV9SRUFEWTpcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldE9uRGF0YSh7IGRhdGEgfSlcbiAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlIE1FU1NBR0VfREVGTEFURURfREFUQV9SRUFEWTpcbiAgICAgICAgICAgIHRoaXMud2FpdERyYWluID0gdGhpcy5zb2NrZXQuc2VuZChkYXRhKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5fb25FcnJvcihuZXcgRXJyb3IoJ0Vycm9yIGhhbmRsaW5nIGNvbXByZXNzaW9uIHdlYiB3b3JrZXI6ICcgKyBlLm1lc3NhZ2UpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci5wb3N0TWVzc2FnZShjcmVhdGVNZXNzYWdlKE1FU1NBR0VfSU5JVElBTElaRV9XT1JLRVIpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmZsYXRlZFJlYWR5ID0gKGJ1ZmZlcikgPT4geyB0aGlzLl9zb2NrZXRPbkRhdGEoeyBkYXRhOiBidWZmZXIgfSkgfVxuICAgICAgY29uc3QgZGVmbGF0ZWRSZWFkeSA9IChidWZmZXIpID0+IHsgdGhpcy53YWl0RHJhaW4gPSB0aGlzLnNvY2tldC5zZW5kKGJ1ZmZlcikgfVxuICAgICAgdGhpcy5fY29tcHJlc3Npb24gPSBuZXcgQ29tcHJlc3Npb24oaW5mbGF0ZWRSZWFkeSwgZGVmbGF0ZWRSZWFkeSlcbiAgICB9XG5cbiAgICAvLyBvdmVycmlkZSBkYXRhIGhhbmRsZXIsIGRlY29tcHJlc3MgaW5jb21pbmcgZGF0YVxuICAgIHRoaXMuc29ja2V0Lm9uZGF0YSA9IChldnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb21wcmVzc2VkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29tcHJlc3Npb25Xb3JrZXIpIHtcbiAgICAgICAgdGhpcy5fY29tcHJlc3Npb25Xb3JrZXIucG9zdE1lc3NhZ2UoY3JlYXRlTWVzc2FnZShNRVNTQUdFX0lORkxBVEUsIGV2dC5kYXRhKSwgW2V2dC5kYXRhXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NvbXByZXNzaW9uLmluZmxhdGUoZXZ0LmRhdGEpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuZG9lcyBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIGNvbXByZXNzaW9uLiBUaGlzIG9ubHkgYmUgY2FsbGVkIHdoZW4gY2xvc2luZyB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgX2Rpc2FibGVDb21wcmVzc2lvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmNvbXByZXNzZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29tcHJlc3NlZCA9IGZhbHNlXG4gICAgdGhpcy5zb2NrZXQub25kYXRhID0gdGhpcy5fc29ja2V0T25EYXRhXG4gICAgdGhpcy5fc29ja2V0T25EYXRhID0gbnVsbFxuXG4gICAgaWYgKHRoaXMuX2NvbXByZXNzaW9uV29ya2VyKSB7XG4gICAgICAvLyB0ZXJtaW5hdGUgdGhlIHdvcmtlclxuICAgICAgdGhpcy5fY29tcHJlc3Npb25Xb3JrZXIudGVybWluYXRlKClcbiAgICAgIHRoaXMuX2NvbXByZXNzaW9uV29ya2VyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRnb2luZyBwYXlsb2FkIG5lZWRzIHRvIGJlIGNvbXByZXNzZWQgYW5kIHNlbnQgdG8gc29ja2V0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlciBPdXRnb2luZyB1bmNvbXByZXNzZWQgYXJyYXlidWZmZXJcbiAgICovXG4gIF9zZW5kQ29tcHJlc3NlZCAoYnVmZmVyKSB7XG4gICAgLy8gZGVmbGF0ZVxuICAgIGlmICh0aGlzLl9jb21wcmVzc2lvbldvcmtlcikge1xuICAgICAgdGhpcy5fY29tcHJlc3Npb25Xb3JrZXIucG9zdE1lc3NhZ2UoY3JlYXRlTWVzc2FnZShNRVNTQUdFX0RFRkxBVEUsIGJ1ZmZlciksIFtidWZmZXJdKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb21wcmVzc2lvbi5kZWZsYXRlKGJ1ZmZlcilcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgY3JlYXRlTWVzc2FnZSA9IChtZXNzYWdlLCBidWZmZXIpID0+ICh7IG1lc3NhZ2UsIGJ1ZmZlciB9KVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbWFwLmpzIl0sIm5hbWVzIjpbIk1FU1NBR0VfSU5JVElBTElaRV9XT1JLRVIiLCJNRVNTQUdFX0lORkxBVEUiLCJNRVNTQUdFX0lORkxBVEVEX0RBVEFfUkVBRFkiLCJNRVNTQUdFX0RFRkxBVEUiLCJNRVNTQUdFX0RFRkxBVEVEX0RBVEFfUkVBRFkiLCJFT0wiLCJMSU5FX0ZFRUQiLCJDQVJSSUFHRV9SRVRVUk4iLCJMRUZUX0NVUkxZX0JSQUNLRVQiLCJSSUdIVF9DVVJMWV9CUkFDS0VUIiwiQVNDSUlfUExVUyIsIkJVRkZFUl9TVEFURV9MSVRFUkFMIiwiQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzEiLCJCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMiIsIkJVRkZFUl9TVEFURV9ERUZBVUxUIiwiVElNRU9VVF9FTlRFUl9JRExFIiwiVElNRU9VVF9TT0NLRVRfTE9XRVJfQk9VTkQiLCJUSU1FT1VUX1NPQ0tFVF9NVUxUSVBMSUVSIiwiSW1hcCIsImNvbnN0cnVjdG9yIiwiaG9zdCIsInBvcnQiLCJvcHRpb25zIiwidGltZW91dEVudGVySWRsZSIsInRpbWVvdXRTb2NrZXRMb3dlckJvdW5kIiwidGltZW91dFNvY2tldE11bHRpcGxpZXIiLCJ1c2VTZWN1cmVUcmFuc3BvcnQiLCJzZWN1cmVNb2RlIiwiX2Nvbm5lY3Rpb25SZWFkeSIsIl9nbG9iYWxBY2NlcHRVbnRhZ2dlZCIsIl9jbGllbnRRdWV1ZSIsIl9jYW5TZW5kIiwiX3RhZ0NvdW50ZXIiLCJfY3VycmVudENvbW1hbmQiLCJfaWRsZVRpbWVyIiwiX3NvY2tldFRpbWVvdXRUaW1lciIsImNvbXByZXNzZWQiLCJfaW5jb21pbmdCdWZmZXJzIiwiX2J1ZmZlclN0YXRlIiwiX2xpdGVyYWxSZW1haW5pbmciLCJvbmNlcnQiLCJvbmVycm9yIiwib25yZWFkeSIsIm9uaWRsZSIsImNvbm5lY3QiLCJTb2NrZXQiLCJUQ1BTb2NrZXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNvY2tldCIsIm9wZW4iLCJiaW5hcnlUeXBlIiwiY2EiLCJjZXJ0IiwiRSIsIm9uY2xvc2UiLCJfb25FcnJvciIsIkVycm9yIiwib25kYXRhIiwiZXZ0IiwiX29uRGF0YSIsImVyciIsImUiLCJkYXRhIiwibWVzc2FnZSIsIm9ub3BlbiIsImNsb3NlIiwiZXJyb3IiLCJfZW50ZXJlZENsb3NpbmdTdGF0ZSIsInRlYXJEb3duIiwiZm9yRWFjaCIsImNtZCIsImNhbGxiYWNrIiwiY2xlYXJUaW1lb3V0IiwiX2Rpc2FibGVDb21wcmVzc2lvbiIsInJlYWR5U3RhdGUiLCJsb2dvdXQiLCJ0aGVuIiwiY2F0Y2giLCJlbnF1ZXVlQ29tbWFuZCIsInVwZ3JhZGUiLCJ1cGdyYWRlVG9TZWN1cmUiLCJyZXF1ZXN0IiwiYWNjZXB0VW50YWdnZWQiLCJjb21tYW5kIiwiY29uY2F0IiwibWFwIiwidW50YWdnZWQiLCJ0b1N0cmluZyIsInRvVXBwZXJDYXNlIiwidHJpbSIsInRhZyIsInBheWxvYWQiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJyZXNwb25zZSIsImlzRXJyb3IiLCJpbmRleE9mIiwiaHVtYW5SZWFkYWJsZSIsImNvZGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiaW5kZXgiLCJjdHgiLCJzcGxpY2UiLCJwdXNoIiwiX3NlbmRSZXF1ZXN0IiwiZ2V0UHJldmlvdXNseVF1ZXVlZCIsImNvbW1hbmRzIiwic3RhcnRJbmRleCIsImkiLCJpc01hdGNoIiwic2VuZCIsInN0ciIsImJ1ZmZlciIsInRpbWVvdXQiLCJNYXRoIiwiZmxvb3IiLCJieXRlTGVuZ3RoIiwic2V0VGltZW91dCIsIl9zZW5kQ29tcHJlc3NlZCIsInNldEhhbmRsZXIiLCJsb2dnZXIiLCJVaW50OEFycmF5IiwiX3BhcnNlSW5jb21pbmdDb21tYW5kcyIsIl9pdGVyYXRlSW5jb21pbmdCdWZmZXIiLCJidWYiLCJkaWZmIiwibWluIiwiTnVtYmVyIiwiX2xlbmd0aEJ1ZmZlciIsInN0YXJ0IiwibGF0ZXN0Iiwic3ViYXJyYXkiLCJwcmV2QnVmIiwic2V0IiwibGVmdElkeCIsImxlZnRPZkxlZnRDdXJseSIsIkxGaWR4IiwiY29tbWFuZExlbmd0aCIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwidWludDhBcnJheSIsInNoaWZ0IiwicmVtYWluaW5nTGVuZ3RoIiwiZXhjZXNzTGVuZ3RoIiwiX2NsZWFySWRsZSIsImNodW5rIiwiZXJyb3JSZXNwb25zZUV4cGVjdHNFbXB0eUxpbmUiLCJ2YWx1ZUFzU3RyaW5nIiwiZGVidWciLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiX2hhbmRsZVJlc3BvbnNlIiwiX2VudGVySWRsZSIsIl9yZXN0YXJ0UXVldWUiLCJwcmVjaGVjayIsImNvbnRleHQiLCJ3YWl0RHJhaW4iLCJhdHRyaWJ1dGVzIiwidGVzdCIsInR5cGUiLCJuciIsInZhbHVlIiwic2VjdGlvbiIsIm9wdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsInRvTG93ZXJDYXNlIiwicHJvdG90eXBlIiwiY2FsbCIsIm1hdGNoIiwiZW5hYmxlQ29tcHJlc3Npb24iLCJfc29ja2V0T25EYXRhIiwid2luZG93IiwiV29ya2VyIiwiX2NvbXByZXNzaW9uV29ya2VyIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkNvbXByZXNzaW9uQmxvYiIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiY3JlYXRlTWVzc2FnZSIsImluZmxhdGVkUmVhZHkiLCJkZWZsYXRlZFJlYWR5IiwiX2NvbXByZXNzaW9uIiwiQ29tcHJlc3Npb24iLCJpbmZsYXRlIiwidGVybWluYXRlIiwiZGVmbGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUEsNEJBQTRCLE9BQWxDO0FBQ0EsTUFBTUMsa0JBQWtCLFNBQXhCO0FBQ0EsTUFBTUMsOEJBQThCLGdCQUFwQztBQUNBLE1BQU1DLGtCQUFrQixTQUF4QjtBQUNBLE1BQU1DLDhCQUE4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QUFMLENBQWtCRSxPQUFsQixDQUEwQmxJLElBQUlJLElBQTlCO0FBQ0Q7QUFDRixLQVZEO0FBV0Q7O0FBRUQ7OztBQUdBVyx3QkFBdUI7QUFDckIsUUFBSSxDQUFDLEtBQUt2QyxVQUFWLEVBQXNCO0FBQ3BCO0FBQ0Q7O0FBRUQsU0FBS0EsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtjLE1BQUwsQ0FBWVMsTUFBWixHQUFxQixLQUFLb0gsYUFBMUI7QUFDQSxTQUFLQSxhQUFMLEdBQXFCLElBQXJCOztBQUVBLFFBQUksS0FBS0csa0JBQVQsRUFBNkI7QUFDM0I7QUFDQSxXQUFLQSxrQkFBTCxDQUF3QmEsU0FBeEI7QUFDQSxXQUFLYixrQkFBTCxHQUEwQixJQUExQjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBS0F4RCxrQkFBaUJOLE1BQWpCLEVBQXlCO0FBQ3ZCO0FBQ0EsUUFBSSxLQUFLOEQsa0JBQVQsRUFBNkI7QUFDM0IsV0FBS0Esa0JBQUwsQ0FBd0JNLFdBQXhCLENBQW9DQyxjQUFjdEwsZUFBZCxFQUErQmlILE1BQS9CLENBQXBDLEVBQTRFLENBQUNBLE1BQUQsQ0FBNUU7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLd0UsWUFBTCxDQUFrQkksT0FBbEIsQ0FBMEI1RSxNQUExQjtBQUNEO0FBQ0Y7QUFqeEJ1Qjs7a0JBQUxsRyxJO0FBb3hCckIsTUFBTXVLLGdCQUFnQixDQUFDeEgsT0FBRCxFQUFVbUQsTUFBVixNQUFzQixFQUFFbkQsT0FBRixFQUFXbUQsTUFBWCxFQUF0QixDQUF0QiIsImZpbGUiOiJpbWFwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvcE9yIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgVENQU29ja2V0IGZyb20gJ2VtYWlsanMtdGNwLXNvY2tldCdcbmltcG9ydCB7IHRvVHlwZWRBcnJheSwgZnJvbVR5cGVkQXJyYXkgfSBmcm9tICcuL2NvbW1vbidcbmltcG9ydCB7IHBhcnNlciwgY29tcGlsZXIgfSBmcm9tICdlbWFpbGpzLWltYXAtaGFuZGxlcidcbmltcG9ydCBDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJ1xuaW1wb3J0IENvbXByZXNzaW9uQmxvYiBmcm9tICcuLi9yZXMvY29tcHJlc3Npb24ud29ya2VyLmJsb2InXG5cbi8vXG4vLyBjb25zdGFudHMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB3b3JrZXJcbi8vXG5jb25zdCBNRVNTQUdFX0lOSVRJQUxJWkVfV09SS0VSID0gJ3N0YXJ0J1xuY29uc3QgTUVTU0FHRV9JTkZMQVRFID0gJ2luZmxhdGUnXG5jb25zdCBNRVNTQUdFX0lORkxBVEVEX0RBVEFfUkVBRFkgPSAnaW5mbGF0ZWRfcmVhZHknXG5jb25zdCBNRVNTQUdFX0RFRkxBVEUgPSAnZGVmbGF0ZSdcbmNvbnN0IE1FU1NBR0VfREVGTEFURURfREFUQV9SRUFEWSA9ICdkZWZsYXRlZF9yZWFkeSdcblxuY29uc3QgRU9MID0gJ1xcclxcbidcbmNvbnN0IExJTkVfRkVFRCA9IDEwXG5jb25zdCBDQVJSSUFHRV9SRVRVUk4gPSAxM1xuY29uc3QgTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzXG5jb25zdCBSSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1XG5cbmNvbnN0IEFTQ0lJX1BMVVMgPSA0M1xuXG4vLyBTdGF0ZSB0cmFja2luZyB3aGVuIGNvbnN0cnVjdGluZyBhbiBJTUFQIGNvbW1hbmQgZnJvbSBidWZmZXJzLlxuY29uc3QgQlVGRkVSX1NUQVRFX0xJVEVSQUwgPSAnbGl0ZXJhbCdcbmNvbnN0IEJVRkZFUl9TVEFURV9QT1NTSUJMWV9MSVRFUkFMX0xFTkdUSF8xID0gJ2xpdGVyYWxfbGVuZ3RoXzEnXG5jb25zdCBCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMiA9ICdsaXRlcmFsX2xlbmd0aF8yJ1xuY29uc3QgQlVGRkVSX1NUQVRFX0RFRkFVTFQgPSAnZGVmYXVsdCdcblxuLyoqXG4gKiBIb3cgbXVjaCB0aW1lIHRvIHdhaXQgc2luY2UgdGhlIGxhc3QgcmVzcG9uc2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgY29uc2lkZXJlZCBpZGxpbmdcbiAqL1xuY29uc3QgVElNRU9VVF9FTlRFUl9JRExFID0gMTAwMFxuXG4vKipcbiAqIExvd2VyIEJvdW5kIGZvciBzb2NrZXQgdGltZW91dCB0byB3YWl0IHNpbmNlIHRoZSBsYXN0IGRhdGEgd2FzIHdyaXR0ZW4gdG8gYSBzb2NrZXRcbiAqL1xuY29uc3QgVElNRU9VVF9TT0NLRVRfTE9XRVJfQk9VTkQgPSAxMDAwMFxuXG4vKipcbiAqIE11bHRpcGxpZXIgZm9yIHNvY2tldCB0aW1lb3V0OlxuICpcbiAqIFdlIGFzc3VtZSBhdCBsZWFzdCBhIEdQUlMgY29ubmVjdGlvbiB3aXRoIDExNSBrYi9zID0gMTQsMzc1IGtCL3MgdG9wcywgc28gMTAgS0IvcyB0byBiZSBvblxuICogdGhlIHNhZmUgc2lkZS4gV2UgY2FuIHRpbWVvdXQgYWZ0ZXIgYSBsb3dlciBib3VuZCBvZiAxMHMgKyAobiBLQiAvIDEwIEtCL3MpLiBBIDEgTUIgbWVzc2FnZVxuICogdXBsb2FkIHdvdWxkIGJlIDExMCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB0aW1lb3V0LiAxMCBLQi9zID09PSAwLjEgcy9CXG4gKi9cbmNvbnN0IFRJTUVPVVRfU09DS0VUX01VTFRJUExJRVIgPSAwLjFcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29ubmVjdGlvbiBvYmplY3QgdG8gYW4gSU1BUCBzZXJ2ZXIuIENhbGwgYGNvbm5lY3RgIG1ldGhvZCB0byBpbml0aXRhdGVcbiAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiwgdGhlIGNvbnN0cnVjdG9yIG9ubHkgZGVmaW5lcyB0aGUgcHJvcGVydGllcyBidXQgZG9lcyBub3QgYWN0dWFsbHkgY29ubmVjdC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW2hvc3Q9J2xvY2FsaG9zdCddIEhvc3RuYW1lIHRvIGNvbmVuY3QgdG9cbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9ydD0xNDNdIFBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG9cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlU2VjdXJlVHJhbnNwb3J0XSBTZXQgdG8gdHJ1ZSwgdG8gdXNlIGVuY3J5cHRlZCBjb25uZWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29tcHJlc3Npb25Xb3JrZXJQYXRoXSBvZmZsb2FkcyBkZS0vY29tcHJlc3Npb24gY29tcHV0YXRpb24gdG8gYSB3ZWIgd29ya2VyLCB0aGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBicm93c2VyaWZpZWQgZW1haWxqcy1jb21wcmVzc29yLXdvcmtlci5qc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFwIHtcbiAgY29uc3RydWN0b3IgKGhvc3QsIHBvcnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudGltZW91dEVudGVySWRsZSA9IFRJTUVPVVRfRU5URVJfSURMRVxuICAgIHRoaXMudGltZW91dFNvY2tldExvd2VyQm91bmQgPSBUSU1FT1VUX1NPQ0tFVF9MT1dFUl9CT1VORFxuICAgIHRoaXMudGltZW91dFNvY2tldE11bHRpcGxpZXIgPSBUSU1FT1VUX1NPQ0tFVF9NVUxUSVBMSUVSXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICB0aGlzLnBvcnQgPSBwb3J0IHx8ICh0aGlzLm9wdGlvbnMudXNlU2VjdXJlVHJhbnNwb3J0ID8gOTkzIDogMTQzKVxuICAgIHRoaXMuaG9zdCA9IGhvc3QgfHwgJ2xvY2FsaG9zdCdcblxuICAgIC8vIFVzZSBhIFRMUyBjb25uZWN0aW9uLiBQb3J0IDk5MyBhbHNvIGZvcmNlcyBUTFMuXG4gICAgdGhpcy5vcHRpb25zLnVzZVNlY3VyZVRyYW5zcG9ydCA9ICd1c2VTZWN1cmVUcmFuc3BvcnQnIGluIHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLnVzZVNlY3VyZVRyYW5zcG9ydCA6IHRoaXMucG9ydCA9PT0gOTkzXG5cbiAgICB0aGlzLnNlY3VyZU1vZGUgPSAhIXRoaXMub3B0aW9ucy51c2VTZWN1cmVUcmFuc3BvcnQgLy8gRG9lcyB0aGUgY29ubmVjdGlvbiB1c2UgU1NML1RMU1xuXG4gICAgdGhpcy5fY29ubmVjdGlvblJlYWR5ID0gZmFsc2UgLy8gSXMgdGhlIGNvbmVjdGlvbiBlc3RhYmxpc2hlZCBhbmQgZ3JlZXRpbmcgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG5cbiAgICB0aGlzLl9nbG9iYWxBY2NlcHRVbnRhZ2dlZCA9IHt9IC8vIEdsb2JhbCBoYW5kbGVycyBmb3IgdW5yZWxhdGVkIHJlc3BvbnNlcyAoRVhQVU5HRSwgRVhJU1RTIGV0Yy4pXG5cbiAgICB0aGlzLl9jbGllbnRRdWV1ZSA9IFtdIC8vIFF1ZXVlIG9mIG91dGdvaW5nIGNvbW1hbmRzXG4gICAgdGhpcy5fY2FuU2VuZCA9IGZhbHNlIC8vIElzIGl0IE9LIHRvIHNlbmQgc29tZXRoaW5nIHRvIHRoZSBzZXJ2ZXJcbiAgICB0aGlzLl90YWdDb3VudGVyID0gMCAvLyBDb3VudGVyIHRvIGFsbG93IHVuaXF1ZXVlIGltYXAgdGFnc1xuICAgIHRoaXMuX2N1cnJlbnRDb21tYW5kID0gZmFsc2UgLy8gQ3VycmVudCBjb21tYW5kIHRoYXQgaXMgd2FpdGluZyBmb3IgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG5cbiAgICB0aGlzLl9pZGxlVGltZXIgPSBmYWxzZSAvLyBUaW1lciB3YWl0aW5nIHRvIGVudGVyIGlkbGVcbiAgICB0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIgPSBmYWxzZSAvLyBUaW1lciB3YWl0aW5nIHRvIGRlY2xhcmUgdGhlIHNvY2tldCBkZWFkIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3Qgd3JpdGVcblxuICAgIHRoaXMuY29tcHJlc3NlZCA9IGZhbHNlIC8vIElzIHRoZSBjb25uZWN0aW9uIGNvbXByZXNzZWQgYW5kIG5lZWRzIGluZmxhdGluZy9kZWZsYXRpbmdcblxuICAgIC8vXG4gICAgLy8gSEVMUEVSU1xuICAgIC8vXG5cbiAgICAvLyBBcyB0aGUgc2VydmVyIHNlbmRzIGRhdGEgaW4gY2h1bmtzLCBpdCBuZWVkcyB0byBiZSBzcGxpdCBpbnRvIHNlcGFyYXRlIGxpbmVzLiBIZWxwcyBwYXJzaW5nIHRoZSBpbnB1dC5cbiAgICB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMgPSBbXVxuICAgIHRoaXMuX2J1ZmZlclN0YXRlID0gQlVGRkVSX1NUQVRFX0RFRkFVTFRcbiAgICB0aGlzLl9saXRlcmFsUmVtYWluaW5nID0gMFxuXG4gICAgLy9cbiAgICAvLyBFdmVudCBwbGFjZWhvbGRlcnMsIG1heSBiZSBvdmVycmlkZW4gd2l0aCBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICAvL1xuICAgIHRoaXMub25jZXJ0ID0gbnVsbFxuICAgIHRoaXMub25lcnJvciA9IG51bGwgLy8gSXJyZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZC4gQ29ubmVjdGlvbiB0byB0aGUgc2VydmVyIHdpbGwgYmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkuXG4gICAgdGhpcy5vbnJlYWR5ID0gbnVsbCAvLyBUaGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGVzdGFibGlzaGVkIGFuZCBncmVldGluZyBpcyByZWNlaXZlZFxuICAgIHRoaXMub25pZGxlID0gbnVsbCAvLyBUaGVyZSBhcmUgbm8gbW9yZSBjb21tYW5kcyB0byBwcm9jZXNzXG4gIH1cblxuICAvLyBQVUJMSUMgTUVUSE9EU1xuXG4gIC8qKlxuICAgKiBJbml0aWF0ZSBhIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlci4gV2FpdCBmb3Igb25yZWFkeSBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gU29ja2V0XG4gICAqICAgICBURVNUSU5HIE9OTFkhIFRoZSBUQ1BTb2NrZXQgaGFzIGEgcHJldHR5IG5vbnNlbnNpY2FsIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9yLFxuICAgKiAgICAgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byBtb2NrLiBGb3IgZGVwZW5kZW5jeS1pbmplY3Rpb24gcHVycG9zZXMsIHdlIHVzZSB0aGVcbiAgICogICAgIFNvY2tldCBwYXJhbWV0ZXIgdG8gcGFzcyBpbiBhIG1vY2sgU29ja2V0IGltcGxlbWVudGF0aW9uLiBTaG91bGQgYmUgbGVmdCBibGFua1xuICAgKiAgICAgaW4gcHJvZHVjdGlvbiB1c2UhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aGVuIHNvY2tldCBpcyBvcGVuZWRcbiAgICovXG4gIGNvbm5lY3QgKFNvY2tldCA9IFRDUFNvY2tldCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldCA9IFNvY2tldC5vcGVuKHRoaXMuaG9zdCwgdGhpcy5wb3J0LCB7XG4gICAgICAgIGJpbmFyeVR5cGU6ICdhcnJheWJ1ZmZlcicsXG4gICAgICAgIHVzZVNlY3VyZVRyYW5zcG9ydDogdGhpcy5zZWN1cmVNb2RlLFxuICAgICAgICBjYTogdGhpcy5vcHRpb25zLmNhXG4gICAgICB9KVxuXG4gICAgICAvLyBhbGxvd3MgY2VydGlmaWNhdGUgaGFuZGxpbmcgZm9yIHBsYXRmb3JtIHcvbyBuYXRpdmUgdGxzIHN1cHBvcnRcbiAgICAgIC8vIG9uY2VydCBpcyBub24gc3RhbmRhcmQgc28gc2V0dGluZyBpdCBtaWdodCB0aHJvdyBpZiB0aGUgc29ja2V0IG9iamVjdCBpcyBpbW11dGFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2VydCA9IChjZXJ0KSA9PiB7IHRoaXMub25jZXJ0ICYmIHRoaXMub25jZXJ0KGNlcnQpIH1cbiAgICAgIH0gY2F0Y2ggKEUpIHsgfVxuXG4gICAgICAvLyBDb25uZWN0aW9uIGNsb3NpbmcgdW5leHBlY3RlZCBpcyBhbiBlcnJvclxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHRoaXMuX29uRXJyb3IobmV3IEVycm9yKCdTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseSEnKSlcbiAgICAgIHRoaXMuc29ja2V0Lm9uZGF0YSA9IChldnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9vbkRhdGEoZXZ0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLl9vbkVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5zIGR1cmluZyBjcmVhdGUgdGltZSwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IG9wZW4gc29ja2V0OiAnICsgZS5kYXRhLm1lc3NhZ2UpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgIC8vIHVzZSBwcm9wZXIgXCJpcnJlY292ZXJhYmxlIGVycm9yLCB0ZWFyIGRvd24gZXZlcnl0aGluZ1wiLWhhbmRsZXIgb25seSBhZnRlciBzb2NrZXQgaXMgb3BlblxuICAgICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKGUpID0+IHRoaXMuX29uRXJyb3IoZSlcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZFxuICAgKi9cbiAgY2xvc2UgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuX2VudGVyZWRDbG9zaW5nU3RhdGUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cbiAgICB0aGlzLl9lbnRlcmVkQ2xvc2luZ1N0YXRlID0gdHJ1ZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdmFyIHRlYXJEb3duID0gKCkgPT4ge1xuICAgICAgICAvLyBmdWxmaWxsIHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgdGhpcy5fY2xpZW50UXVldWUuZm9yRWFjaChjbWQgPT4gY21kLmNhbGxiYWNrKGVycm9yKSlcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDb21tYW5kKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudENvbW1hbmQuY2FsbGJhY2soZXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGllbnRRdWV1ZSA9IFtdXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDb21tYW5kID0gZmFsc2VcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVyKVxuICAgICAgICB0aGlzLl9pZGxlVGltZXIgPSBudWxsXG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lcilcbiAgICAgICAgdGhpcy5fc29ja2V0VGltZW91dFRpbWVyID0gbnVsbFxuXG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gbnVsbFxuICAgICAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSBudWxsXG4gICAgICAgICAgdGhpcy5zb2NrZXQub25kYXRhID0gbnVsbFxuICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSBudWxsXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uY2VydCA9IG51bGxcbiAgICAgICAgICB9IGNhdGNoIChFKSB7IH1cblxuICAgICAgICAgIHRoaXMuc29ja2V0ID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2Rpc2FibGVDb21wcmVzc2lvbigpXG5cbiAgICAgIGlmICghdGhpcy5zb2NrZXQgfHwgdGhpcy5zb2NrZXQucmVhZHlTdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgICAgIHJldHVybiB0ZWFyRG93bigpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSB0aGlzLnNvY2tldC5vbmVycm9yID0gdGVhckRvd24gLy8gd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIGVycm9yIGhlcmVcbiAgICAgIHRoaXMuc29ja2V0LmNsb3NlKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgTE9HT1VUIHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFVzZSBpcyBkaXNjb3VyYWdlZCFcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdoZW4gY29ubmVjdGlvbiBpcyBjbG9zZWQgYnkgc2VydmVyLlxuICAgKi9cbiAgbG9nb3V0ICgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoJ0NsaWVudCBsb2dnaW5nIG91dCcpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVucXVldWVDb21tYW5kKCdMT0dPVVQnKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIFRMUyBoYW5kc2hha2VcbiAgICovXG4gIHVwZ3JhZGUgKCkge1xuICAgIHRoaXMuc2VjdXJlTW9kZSA9IHRydWVcbiAgICB0aGlzLnNvY2tldC51cGdyYWRlVG9TZWN1cmUoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlcyBhIGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VtYWlsanMvZW1haWxqcy1pbWFwLWhhbmRsZXIgZm9yIHJlcXVlc3Qgc3RydWN0dXJlLlxuICAgKiBEbyBub3QgcHJvdmlkZSBhIHRhZyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSBzZXQgYnkgdGhlIHF1ZXVlIG1hbmFnZXIuXG4gICAqXG4gICAqIFRvIGNhdGNoIHVudGFnZ2VkIHJlc3BvbnNlcyB1c2UgYWNjZXB0VW50YWdnZWQgcHJvcGVydHkuIEZvciBleGFtcGxlLCBpZlxuICAgKiB0aGUgdmFsdWUgZm9yIGl0IGlzICdGRVRDSCcgdGhlbiB0aGUgcmVwb25zZSBpbmNsdWRlcyAncGF5bG9hZC5GRVRDSCcgcHJvcGVydHlcbiAgICogdGhhdCBpcyBhbiBhcnJheSBpbmNsdWRpbmcgYWxsIGxpc3RlZCAqIEZFVENIIHJlc3BvbnNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgU3RydWN0dXJlZCByZXF1ZXN0IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fSBhY2NlcHRVbnRhZ2dlZCBhIGxpc3Qgb2YgdW50YWdnZWQgcmVzcG9uc2VzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiAncGF5bG9hZCcgcHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25hbCBkYXRhIGZvciB0aGUgY29tbWFuZCBwYXlsb2FkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZSB3YXMgcmVjZWl2ZWRcbiAgICovXG4gIGVucXVldWVDb21tYW5kIChyZXF1ZXN0LCBhY2NlcHRVbnRhZ2dlZCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcXVlc3QgPSB7XG4gICAgICAgIGNvbW1hbmQ6IHJlcXVlc3RcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhY2NlcHRVbnRhZ2dlZCA9IFtdLmNvbmNhdChhY2NlcHRVbnRhZ2dlZCB8fCBbXSkubWFwKCh1bnRhZ2dlZCkgPT4gKHVudGFnZ2VkIHx8ICcnKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkudHJpbSgpKVxuXG4gICAgdmFyIHRhZyA9ICdXJyArICgrK3RoaXMuX3RhZ0NvdW50ZXIpXG4gICAgcmVxdWVzdC50YWcgPSB0YWdcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHZhciByZWplY3QgPSBlcnJvciA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuY2xvc2UoZXJyb3IpKVxuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIHRhZzogdGFnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICBwYXlsb2FkOiBhY2NlcHRVbnRhZ2dlZC5sZW5ndGggPyB7fSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FsbGJhY2s6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlc3BvbnNlKVxuICAgICAgICAgIH0gZWxzZSBpZiAoWydOTycsICdCQUQnXS5pbmRleE9mKHByb3BPcignJywgJ2NvbW1hbmQnLCByZXNwb25zZSkudG9VcHBlckNhc2UoKS50cmltKCkpID49IDApIHtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihyZXNwb25zZS5odW1hblJlYWRhYmxlIHx8ICdFcnJvcicpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuY29kZSkge1xuICAgICAgICAgICAgICBlcnJvci5jb2RlID0gcmVzcG9uc2UuY29kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IGFueSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gdGhlIGNvbW1hbmRcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMgfHwge30pLmZvckVhY2goKGtleSkgPT4geyBkYXRhW2tleV0gPSBvcHRpb25zW2tleV0gfSlcblxuICAgICAgYWNjZXB0VW50YWdnZWQuZm9yRWFjaCgoY29tbWFuZCkgPT4geyBkYXRhLnBheWxvYWRbY29tbWFuZF0gPSBbXSB9KVxuXG4gICAgICAvLyBpZiB3ZSdyZSBpbiBwcmlvcml0eSBtb2RlIChpLmUuIHdlIHJhbiBjb21tYW5kcyBpbiBhIHByZWNoZWNrKSxcbiAgICAgIC8vIHF1ZXVlIGFueSBjb21tYW5kcyBCRUZPUkUgdGhlIGNvbW1hbmQgdGhhdCBjb250aWFuZWQgdGhlIHByZWNoZWNrLFxuICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcXVldWUgY29tbWFuZCBhcyB1c3VhbFxuICAgICAgdmFyIGluZGV4ID0gZGF0YS5jdHggPyB0aGlzLl9jbGllbnRRdWV1ZS5pbmRleE9mKGRhdGEuY3R4KSA6IC0xXG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBkYXRhLnRhZyArPSAnLnAnXG4gICAgICAgIGRhdGEucmVxdWVzdC50YWcgKz0gJy5wJ1xuICAgICAgICB0aGlzLl9jbGllbnRRdWV1ZS5zcGxpY2UoaW5kZXgsIDAsIGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jbGllbnRRdWV1ZS5wdXNoKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jYW5TZW5kKSB7XG4gICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kc1xuICAgKiBAcGFyYW0gY3R4XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0UHJldmlvdXNseVF1ZXVlZCAoY29tbWFuZHMsIGN0eCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLl9jbGllbnRRdWV1ZS5pbmRleE9mKGN0eCkgLSAxXG5cbiAgICAvLyBzZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgY29tbWFuZHMgYW5kIHJldHVybiB0aGUgZmlyc3QgZm91bmRcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChpc01hdGNoKHRoaXMuX2NsaWVudFF1ZXVlW2ldKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50UXVldWVbaV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbHNvIGNoZWNrIGN1cnJlbnQgY29tbWFuZCBpZiBubyBTRUxFQ1QgaXMgcXVldWVkXG4gICAgaWYgKGlzTWF0Y2godGhpcy5fY3VycmVudENvbW1hbmQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbW1hbmRcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcblxuICAgIGZ1bmN0aW9uIGlzTWF0Y2ggKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhICYmIGRhdGEucmVxdWVzdCAmJiBjb21tYW5kcy5pbmRleE9mKGRhdGEucmVxdWVzdC5jb21tYW5kKSA+PSAwXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgZGF0YSB0byB0aGUgVENQIHNvY2tldFxuICAgKiBBcm1zIGEgdGltZW91dCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBQYXlsb2FkXG4gICAqL1xuICBzZW5kIChzdHIpIHtcbiAgICBjb25zdCBidWZmZXIgPSB0b1R5cGVkQXJyYXkoc3RyKS5idWZmZXJcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0U29ja2V0TG93ZXJCb3VuZCArIE1hdGguZmxvb3IoYnVmZmVyLmJ5dGVMZW5ndGggKiB0aGlzLnRpbWVvdXRTb2NrZXRNdWx0aXBsaWVyKVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lcikgLy8gY2xlYXIgcGVuZGluZyB0aW1lb3V0c1xuICAgIHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fb25FcnJvcihuZXcgRXJyb3IoJyBTb2NrZXQgdGltZWQgb3V0IScpKSwgdGltZW91dCkgLy8gYXJtIHRoZSBuZXh0IHRpbWVvdXRcblxuICAgIGlmICh0aGlzLmNvbXByZXNzZWQpIHtcbiAgICAgIHRoaXMuX3NlbmRDb21wcmVzc2VkKGJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb2NrZXQuc2VuZChidWZmZXIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGdsb2JhbCBoYW5kbGVyIGZvciBhbiB1bnRhZ2dlZCByZXNwb25zZS4gSWYgY3VycmVudGx5IHByb2Nlc3NlZCBjb21tYW5kXG4gICAqIGhhcyBub3QgbGlzdGVkIHVudGFnZ2VkIGNvbW1hbmQgaXQgaXMgZm9yd2FyZGVkIHRvIHRoZSBnbG9iYWwgaGFuZGxlci4gVXNlZnVsXG4gICAqIHdpdGggRVhQVU5HRSwgRVhJU1RTIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgVW50YWdnZWQgY29tbWFuZCBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHdpdGggcmVzcG9uc2Ugb2JqZWN0IGFuZCBjb250aW51ZSBjYWxsYmFjayBmdW5jdGlvblxuICAgKi9cbiAgc2V0SGFuZGxlciAoY29tbWFuZCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9nbG9iYWxBY2NlcHRVbnRhZ2dlZFtjb21tYW5kLnRvVXBwZXJDYXNlKCkudHJpbSgpXSA9IGNhbGxiYWNrXG4gIH1cblxuICAvLyBJTlRFUk5BTCBFVkVOVFNcblxuICAvKipcbiAgICogRXJyb3IgaGFuZGxlciBmb3IgdGhlIHNvY2tldFxuICAgKlxuICAgKiBAZXZlbnRcbiAgICogQHBhcmFtIHtFdmVudH0gZXZ0IEV2ZW50IG9iamVjdC4gU2VlIGV2dC5kYXRhIGZvciB0aGUgZXJyb3JcbiAgICovXG4gIF9vbkVycm9yIChldnQpIHtcbiAgICB2YXIgZXJyb3JcbiAgICBpZiAodGhpcy5pc0Vycm9yKGV2dCkpIHtcbiAgICAgIGVycm9yID0gZXZ0XG4gICAgfSBlbHNlIGlmIChldnQgJiYgdGhpcy5pc0Vycm9yKGV2dC5kYXRhKSkge1xuICAgICAgZXJyb3IgPSBldnQuZGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcigoZXZ0ICYmIGV2dC5kYXRhICYmIGV2dC5kYXRhLm1lc3NhZ2UpIHx8IGV2dC5kYXRhIHx8IGV2dCB8fCAnRXJyb3InKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKVxuXG4gICAgLy8gYWx3YXlzIGNhbGwgb25lcnJvciBjYWxsYmFjaywgbm8gbWF0dGVyIGlmIGNsb3NlKCkgc3VjY2VlZHMgb3IgZmFpbHNcbiAgICB0aGlzLmNsb3NlKGVycm9yKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMub25lcnJvciAmJiB0aGlzLm9uZXJyb3IoZXJyb3IpXG4gICAgfSwgKCkgPT4ge1xuICAgICAgdGhpcy5vbmVycm9yICYmIHRoaXMub25lcnJvcihlcnJvcilcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgZm9yIGluY29taW5nIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBUaGUgZGF0YSBpcyBzZW50IGluIGFyYml0cmFyeVxuICAgKiBjaHVua3MgYW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgc28gdGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoZSBkYXRhXG4gICAqIGlzIHNwbGl0IGludG8gY29tcGxldGUgbGluZXMgYmVmb3JlIHRoZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgY29tbWFuZFxuICAgKiBoYW5kbGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dFxuICAgKi9cbiAgX29uRGF0YSAoZXZ0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lcikgLy8gcmVzZXQgdGhlIHRpbWVvdXQgb24gZWFjaCBkYXRhIHBhY2tldFxuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLnRpbWVvdXRTb2NrZXRMb3dlckJvdW5kICsgTWF0aC5mbG9vcig0MDk2ICogdGhpcy50aW1lb3V0U29ja2V0TXVsdGlwbGllcikgLy8gbWF4IHBhY2tldCBzaXplIGlzIDQwOTYgYnl0ZXNcbiAgICB0aGlzLl9zb2NrZXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX29uRXJyb3IobmV3IEVycm9yKCcgU29ja2V0IHRpbWVkIG91dCEnKSksIHRpbWVvdXQpXG5cbiAgICB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMucHVzaChuZXcgVWludDhBcnJheShldnQuZGF0YSkpIC8vIGFwcGVuZCB0byB0aGUgaW5jb21pbmcgYnVmZmVyXG4gICAgdGhpcy5fcGFyc2VJbmNvbWluZ0NvbW1hbmRzKHRoaXMuX2l0ZXJhdGVJbmNvbWluZ0J1ZmZlcigpKSAvLyBDb25zdW1lIHRoZSBpbmNvbWluZyBidWZmZXJcbiAgfVxuXG4gICogX2l0ZXJhdGVJbmNvbWluZ0J1ZmZlciAoKSB7XG4gICAgbGV0IGJ1ZiA9IHRoaXMuX2luY29taW5nQnVmZmVyc1t0aGlzLl9pbmNvbWluZ0J1ZmZlcnMubGVuZ3RoIC0gMV0gfHwgW11cbiAgICBsZXQgaSA9IDBcblxuICAgIC8vIGxvb3AgaW52YXJpYW50OlxuICAgIC8vICAgdGhpcy5faW5jb21pbmdCdWZmZXJzIHN0YXJ0cyB3aXRoIHRoZSBiZWdpbm5pbmcgb2YgaW5jb21pbmcgY29tbWFuZC5cbiAgICAvLyAgIGJ1ZiBpcyBzaG9ydGhhbmQgZm9yIGxhc3QgZWxlbWVudCBvZiB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMuXG4gICAgLy8gICBidWZbMC4uaS0xXSBpcyBwYXJ0IG9mIGluY29taW5nIGNvbW1hbmQuXG4gICAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuX2J1ZmZlclN0YXRlKSB7XG4gICAgICAgIGNhc2UgQlVGRkVSX1NUQVRFX0xJVEVSQUw6XG4gICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBpLCB0aGlzLl9saXRlcmFsUmVtYWluaW5nKVxuICAgICAgICAgIHRoaXMuX2xpdGVyYWxSZW1haW5pbmcgLT0gZGlmZlxuICAgICAgICAgIGkgKz0gZGlmZlxuICAgICAgICAgIGlmICh0aGlzLl9saXRlcmFsUmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTdGF0ZSA9IEJVRkZFUl9TVEFURV9ERUZBVUxUXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMjpcbiAgICAgICAgICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT09IENBUlJJQUdFX1JFVFVSTikge1xuICAgICAgICAgICAgICB0aGlzLl9saXRlcmFsUmVtYWluaW5nID0gTnVtYmVyKGZyb21UeXBlZEFycmF5KHRoaXMuX2xlbmd0aEJ1ZmZlcikpICsgMiAvLyBmb3IgQ1JMRlxuICAgICAgICAgICAgICB0aGlzLl9idWZmZXJTdGF0ZSA9IEJVRkZFUl9TVEFURV9MSVRFUkFMXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9idWZmZXJTdGF0ZSA9IEJVRkZFUl9TVEFURV9ERUZBVUxUXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGVuZ3RoQnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMTpcbiAgICAgICAgICBjb25zdCBzdGFydCA9IGlcbiAgICAgICAgICB3aGlsZSAoaSA8IGJ1Zi5sZW5ndGggJiYgYnVmW2ldID49IDQ4ICYmIGJ1ZltpXSA8PSA1NykgeyAvLyBkaWdpdHNcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhcnQgIT09IGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhdGVzdCA9IGJ1Zi5zdWJhcnJheShzdGFydCwgaSlcbiAgICAgICAgICAgIGNvbnN0IHByZXZCdWYgPSB0aGlzLl9sZW5ndGhCdWZmZXJcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHByZXZCdWYubGVuZ3RoICsgbGF0ZXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aEJ1ZmZlci5zZXQocHJldkJ1ZilcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aEJ1ZmZlci5zZXQobGF0ZXN0LCBwcmV2QnVmLmxlbmd0aClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGVuZ3RoQnVmZmVyLmxlbmd0aCA+IDAgJiYgYnVmW2ldID09PSBSSUdIVF9DVVJMWV9CUkFDS0VUKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2J1ZmZlclN0YXRlID0gQlVGRkVSX1NUQVRFX1BPU1NJQkxZX0xJVEVSQUxfTEVOR1RIXzJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sZW5ndGhCdWZmZXJcbiAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyU3RhdGUgPSBCVUZGRVJfU1RBVEVfREVGQVVMVFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBmaW5kIGxpdGVyYWwgbGVuZ3RoXG4gICAgICAgICAgY29uc3QgbGVmdElkeCA9IGJ1Zi5pbmRleE9mKExFRlRfQ1VSTFlfQlJBQ0tFVCwgaSlcbiAgICAgICAgICBpZiAobGVmdElkeCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0T2ZMZWZ0Q3VybHkgPSBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBpLCBsZWZ0SWR4IC0gaSlcbiAgICAgICAgICAgIGlmIChsZWZ0T2ZMZWZ0Q3VybHkuaW5kZXhPZihMSU5FX0ZFRUQpID09PSAtMSkge1xuICAgICAgICAgICAgICBpID0gbGVmdElkeCArIDFcbiAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMClcbiAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyU3RhdGUgPSBCVUZGRVJfU1RBVEVfUE9TU0lCTFlfTElURVJBTF9MRU5HVEhfMVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZpbmQgZW5kIG9mIGNvbW1hbmRcbiAgICAgICAgICBjb25zdCBMRmlkeCA9IGJ1Zi5pbmRleE9mKExJTkVfRkVFRCwgaSlcbiAgICAgICAgICBpZiAoTEZpZHggPiAtMSkge1xuICAgICAgICAgICAgaWYgKExGaWR4IDwgYnVmLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5faW5jb21pbmdCdWZmZXJzW3RoaXMuX2luY29taW5nQnVmZmVycy5sZW5ndGggLSAxXSA9IG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIDAsIExGaWR4ICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRMZW5ndGggPSB0aGlzLl9pbmNvbWluZ0J1ZmZlcnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5sZW5ndGgsIDApIC0gMiAvLyAyIGZvciBDUkxGXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFVpbnQ4QXJyYXkoY29tbWFuZExlbmd0aClcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9pbmNvbWluZ0J1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgdWludDhBcnJheSA9IHRoaXMuX2luY29taW5nQnVmZmVycy5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nTGVuZ3RoID0gY29tbWFuZExlbmd0aCAtIGluZGV4XG4gICAgICAgICAgICAgIGlmICh1aW50OEFycmF5Lmxlbmd0aCA+IHJlbWFpbmluZ0xlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0xlbmd0aCA9IHVpbnQ4QXJyYXkubGVuZ3RoIC0gcmVtYWluaW5nTGVuZ3RoXG4gICAgICAgICAgICAgICAgdWludDhBcnJheSA9IHVpbnQ4QXJyYXkuc3ViYXJyYXkoMCwgLWV4Y2Vzc0xlbmd0aClcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbmNvbWluZ0J1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5faW5jb21pbmdCdWZmZXJzID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29tbWFuZC5zZXQodWludDhBcnJheSwgaW5kZXgpXG4gICAgICAgICAgICAgIGluZGV4ICs9IHVpbnQ4QXJyYXkubGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBjb21tYW5kXG4gICAgICAgICAgICBpZiAoTEZpZHggPCBidWYubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShidWYuc3ViYXJyYXkoTEZpZHggKyAxKSlcbiAgICAgICAgICAgICAgdGhpcy5faW5jb21pbmdCdWZmZXJzLnB1c2goYnVmKVxuICAgICAgICAgICAgICBpID0gMFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHRpbWVvdXQgd2hlbiBhbiBlbnRpcmUgY29tbWFuZCBoYXMgYXJyaXZlZFxuICAgICAgICAgICAgICAvLyBhbmQgbm90IHdhaXRpbmcgb24gbW9yZSBkYXRhIGZvciBuZXh0IGNvbW1hbmRcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NvY2tldFRpbWVvdXRUaW1lcilcbiAgICAgICAgICAgICAgdGhpcy5fc29ja2V0VGltZW91dFRpbWVyID0gbnVsbFxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBSSVZBVEUgTUVUSE9EU1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYSBjb21tYW5kIGZyb20gdGhlIHF1ZXVlLiBUaGUgY29tbWFuZCBpcyBwYXJzZWQgYW5kIGZlZWRlZCB0byBhIGhhbmRsZXJcbiAgICovXG4gIF9wYXJzZUluY29taW5nQ29tbWFuZHMgKGNvbW1hbmRzKSB7XG4gICAgZm9yICh2YXIgY29tbWFuZCBvZiBjb21tYW5kcykge1xuICAgICAgdGhpcy5fY2xlYXJJZGxlKClcblxuICAgICAgLypcbiAgICAgICAqIFRoZSBcIitcIi10YWdnZWQgcmVzcG9uc2UgaXMgYSBzcGVjaWFsIGNhc2U6XG4gICAgICAgKiBFaXRoZXIgdGhlIHNlcnZlciBjYW4gYXNrcyBmb3IgdGhlIG5leHQgY2h1bmsgb2YgZGF0YSwgZS5nLiBmb3IgdGhlIEFVVEhFTlRJQ0FURSBjb21tYW5kLlxuICAgICAgICpcbiAgICAgICAqIE9yIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgWE9BVVRIMiBhdXRoZW50aWNhdGlvbiwgZm9yIHdoaWNoIFNBU0wgaW5pdGlhbCBjbGllbnQgcmVzcG9uc2UgZXh0ZW5zaW9uXG4gICAgICAgKiBkaWN0YXRlcyB0aGUgY2xpZW50IHNlbmRzIGFuIGVtcHR5IEVPTCByZXNwb25zZSB0byB0aGUgY2hhbGxlbmdlIGNvbnRhaW5pbmcgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgKlxuICAgICAgICogRGV0YWlscyBvbiBcIitcIi10YWdnZWQgcmVzcG9uc2U6XG4gICAgICAgKiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tMi4yLjFcbiAgICAgICAqL1xuICAgICAgLy9cbiAgICAgIGlmIChjb21tYW5kWzBdID09PSBBU0NJSV9QTFVTKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q29tbWFuZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIC8vIGZlZWQgdGhlIG5leHQgY2h1bmsgb2YgZGF0YVxuICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2N1cnJlbnRDb21tYW5kLmRhdGEuc2hpZnQoKVxuICAgICAgICAgIGNodW5rICs9ICghdGhpcy5fY3VycmVudENvbW1hbmQuZGF0YS5sZW5ndGggPyBFT0wgOiAnJykgLy8gRU9MIGlmIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIHNlbmRcbiAgICAgICAgICB0aGlzLnNlbmQoY2h1bmspXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudENvbW1hbmQuZXJyb3JSZXNwb25zZUV4cGVjdHNFbXB0eUxpbmUpIHtcbiAgICAgICAgICB0aGlzLnNlbmQoRU9MKSAvLyBYT0FVVEgyIGVtcHR5IHJlc3BvbnNlLCBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gc2VydmVyIGNvbnRpbnVlcyB3aXRoIE5PIHJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2YWx1ZUFzU3RyaW5nID0gdGhpcy5fY3VycmVudENvbW1hbmQucmVxdWVzdCAmJiB0aGlzLl9jdXJyZW50Q29tbWFuZC5yZXF1ZXN0LnZhbHVlQXNTdHJpbmdcbiAgICAgICAgcmVzcG9uc2UgPSBwYXJzZXIoY29tbWFuZCwgeyB2YWx1ZUFzU3RyaW5nIH0pXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTOicsICgpID0+IGNvbXBpbGVyKHJlc3BvbnNlLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBwYXJzaW5nIGltYXAgY29tbWFuZCEnLCByZXNwb25zZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uRXJyb3IoZSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKVxuICAgICAgdGhpcy5faGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpXG5cbiAgICAgIC8vIGZpcnN0IHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgY29ubmVjdGlvbiBpcyBub3cgdXNhYmxlXG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25SZWFkeSkge1xuICAgICAgICB0aGlzLl9jb25uZWN0aW9uUmVhZHkgPSB0cnVlXG4gICAgICAgIHRoaXMub25yZWFkeSAmJiB0aGlzLm9ucmVhZHkoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZWVkcyBhIHBhcnNlZCByZXNwb25zZSBvYmplY3QgdG8gYW4gYXBwcm9wcmlhdGUgaGFuZGxlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgUGFyc2VkIGNvbW1hbmQgb2JqZWN0XG4gICAqL1xuICBfaGFuZGxlUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgdmFyIGNvbW1hbmQgPSBwcm9wT3IoJycsICdjb21tYW5kJywgcmVzcG9uc2UpLnRvVXBwZXJDYXNlKCkudHJpbSgpXG5cbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRDb21tYW5kKSB7XG4gICAgICAvLyB1bnNvbGljaXRlZCB1bnRhZ2dlZCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLnRhZyA9PT0gJyonICYmIGNvbW1hbmQgaW4gdGhpcy5fZ2xvYmFsQWNjZXB0VW50YWdnZWQpIHtcbiAgICAgICAgdGhpcy5fZ2xvYmFsQWNjZXB0VW50YWdnZWRbY29tbWFuZF0ocmVzcG9uc2UpXG4gICAgICAgIHRoaXMuX2NhblNlbmQgPSB0cnVlXG4gICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRDb21tYW5kLnBheWxvYWQgJiYgcmVzcG9uc2UudGFnID09PSAnKicgJiYgY29tbWFuZCBpbiB0aGlzLl9jdXJyZW50Q29tbWFuZC5wYXlsb2FkKSB7XG4gICAgICAvLyBleHBlY3RlZCB1bnRhZ2dlZCByZXNwb25zZVxuICAgICAgdGhpcy5fY3VycmVudENvbW1hbmQucGF5bG9hZFtjb21tYW5kXS5wdXNoKHJlc3BvbnNlKVxuICAgIH0gZWxzZSBpZiAocmVzcG9uc2UudGFnID09PSAnKicgJiYgY29tbWFuZCBpbiB0aGlzLl9nbG9iYWxBY2NlcHRVbnRhZ2dlZCkge1xuICAgICAgLy8gdW5leHBlY3RlZCB1bnRhZ2dlZCByZXNwb25zZVxuICAgICAgdGhpcy5fZ2xvYmFsQWNjZXB0VW50YWdnZWRbY29tbWFuZF0ocmVzcG9uc2UpXG4gICAgfSBlbHNlIGlmIChyZXNwb25zZS50YWcgPT09IHRoaXMuX2N1cnJlbnRDb21tYW5kLnRhZykge1xuICAgICAgLy8gdGFnZ2VkIHJlc3BvbnNlXG4gICAgICBpZiAodGhpcy5fY3VycmVudENvbW1hbmQucGF5bG9hZCAmJiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50Q29tbWFuZC5wYXlsb2FkKS5sZW5ndGgpIHtcbiAgICAgICAgcmVzcG9uc2UucGF5bG9hZCA9IHRoaXMuX2N1cnJlbnRDb21tYW5kLnBheWxvYWRcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnRDb21tYW5kLmNhbGxiYWNrKHJlc3BvbnNlKVxuICAgICAgdGhpcy5fY2FuU2VuZCA9IHRydWVcbiAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBjb21tYW5kIGZyb20gY2xpZW50IHF1ZXVlIHRvIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBfc2VuZFJlcXVlc3QgKCkge1xuICAgIGlmICghdGhpcy5fY2xpZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW50ZXJJZGxlKClcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJZGxlKClcblxuICAgIC8vIGFuIG9wZXJhdGlvbiB3YXMgbWFkZSBpbiB0aGUgcHJlY2hlY2ssIG5vIG5lZWQgdG8gcmVzdGFydCB0aGUgcXVldWUgbWFudWFsbHlcbiAgICB0aGlzLl9yZXN0YXJ0UXVldWUgPSBmYWxzZVxuXG4gICAgdmFyIGNvbW1hbmQgPSB0aGlzLl9jbGllbnRRdWV1ZVswXVxuICAgIGlmICh0eXBlb2YgY29tbWFuZC5wcmVjaGVjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gcmVtZW1iZXIgdGhlIGNvbnRleHRcbiAgICAgIHZhciBjb250ZXh0ID0gY29tbWFuZFxuICAgICAgdmFyIHByZWNoZWNrID0gY29udGV4dC5wcmVjaGVja1xuICAgICAgZGVsZXRlIGNvbnRleHQucHJlY2hlY2tcblxuICAgICAgLy8gd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBxdWV1ZSBoYW5kbGluZyBpZiBubyBvcGVyYXRpb24gd2FzIG1hZGUgaW4gdGhlIHByZWNoZWNrXG4gICAgICB0aGlzLl9yZXN0YXJ0UXVldWUgPSB0cnVlXG5cbiAgICAgIC8vIGludm9rZSB0aGUgcHJlY2hlY2sgY29tbWFuZCBhbmQgcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgIHByZWNoZWNrKGNvbnRleHQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyB3ZSdyZSBkb25lIHdpdGggdGhlIHByZWNoZWNrXG4gICAgICAgIGlmICh0aGlzLl9yZXN0YXJ0UXVldWUpIHtcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHF1ZXVlIGhhbmRsaW5nXG4gICAgICAgICAgdGhpcy5fc2VuZFJlcXVlc3QoKVxuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIC8vIHByZWNoZWNrIGZhaWxlZCwgc28gd2UgcmVtb3ZlIHRoZSBpbml0aWFsIGNvbW1hbmRcbiAgICAgICAgLy8gZnJvbSB0aGUgcXVldWUsIGludm9rZSBpdHMgY2FsbGJhY2sgYW5kIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uXG4gICAgICAgIGxldCBjbWRcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9jbGllbnRRdWV1ZS5pbmRleE9mKGNvbnRleHQpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgY21kID0gdGhpcy5fY2xpZW50UXVldWUuc3BsaWNlKGluZGV4LCAxKVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChjbWQgJiYgY21kLmNhbGxiYWNrKSB7XG4gICAgICAgICAgY21kLmNhbGxiYWNrKGVycilcbiAgICAgICAgICB0aGlzLl9jYW5TZW5kID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuX3BhcnNlSW5jb21pbmdDb21tYW5kcyh0aGlzLl9pdGVyYXRlSW5jb21pbmdCdWZmZXIoKSkgLy8gQ29uc3VtZSB0aGUgcmVzdCBvZiB0aGUgaW5jb21pbmcgYnVmZmVyXG4gICAgICAgICAgdGhpcy5fc2VuZFJlcXVlc3QoKSAvLyBjb250aW51ZSBzZW5kaW5nXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jYW5TZW5kID0gZmFsc2VcbiAgICB0aGlzLl9jdXJyZW50Q29tbWFuZCA9IHRoaXMuX2NsaWVudFF1ZXVlLnNoaWZ0KClcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jdXJyZW50Q29tbWFuZC5kYXRhID0gY29tcGlsZXIodGhpcy5fY3VycmVudENvbW1hbmQucmVxdWVzdCwgdHJ1ZSlcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDOicsICgpID0+IGNvbXBpbGVyKHRoaXMuX2N1cnJlbnRDb21tYW5kLnJlcXVlc3QsIGZhbHNlLCB0cnVlKSkgLy8gZXhjbHVkZXMgcGFzc3dvcmRzIGV0Yy5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgY29tcGlsaW5nIGltYXAgY29tbWFuZCEnLCB0aGlzLl9jdXJyZW50Q29tbWFuZC5yZXF1ZXN0KVxuICAgICAgcmV0dXJuIHRoaXMuX29uRXJyb3IobmV3IEVycm9yKCdFcnJvciBjb21waWxpbmcgaW1hcCBjb21tYW5kIScpKVxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdGhpcy5fY3VycmVudENvbW1hbmQuZGF0YS5zaGlmdCgpXG5cbiAgICB0aGlzLnNlbmQoZGF0YSArICghdGhpcy5fY3VycmVudENvbW1hbmQuZGF0YS5sZW5ndGggPyBFT0wgOiAnJykpXG4gICAgcmV0dXJuIHRoaXMud2FpdERyYWluXG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgb25pZGxlLCBub3RpbmcgdG8gZG8gY3VycmVudGx5XG4gICAqL1xuICBfZW50ZXJJZGxlICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVyKVxuICAgIHRoaXMuX2lkbGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gKHRoaXMub25pZGxlICYmIHRoaXMub25pZGxlKCkpLCB0aGlzLnRpbWVvdXRFbnRlcklkbGUpXG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGlkbGUgdGltZXJcbiAgICovXG4gIF9jbGVhcklkbGUgKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZXIpXG4gICAgdGhpcy5faWRsZVRpbWVyID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBwcm9jZXNzZXMgYSByZXNwb25zZSBpbnRvIGFuIGVhc2llciB0byBoYW5kbGUgZm9ybWF0LlxuICAgKiBBZGQgdW50YWdnZWQgbnVtYmVyZWQgcmVzcG9uc2VzIChlLmcuIEZFVENIKSBpbnRvIGEgbmljZWx5IGZlYXNpYmxlIGZvcm1cbiAgICogQ2hlY2tzIGlmIGEgcmVzcG9uc2UgaW5jbHVkZXMgb3B0aW9uYWwgcmVzcG9uc2UgY29kZXNcbiAgICogYW5kIGNvcGllcyB0aGVzZSBpbnRvIHNlcGFyYXRlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlIHRoZVxuICAgKiBmb2xsb3dpbmcgcmVzcG9uc2UgaW5jbHVkZXMgYSBjYXBhYmlsaXR5IGxpc3RpbmcgYW5kIGEgaHVtYW5cbiAgICogcmVhZGFibGUgbWVzc2FnZTpcbiAgICpcbiAgICogICAgICogT0sgW0NBUEFCSUxJVFkgSUQgTkFNRVNQQUNFXSBBbGwgcmVhZHlcbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWRkcyBhICdjYXBhYmlsaXR5JyBwcm9wZXJ0eSB3aXRoIGFuIGFycmF5IHZhbHVlIFsnSUQnLCAnTkFNRVNQQUNFJ11cbiAgICogdG8gdGhlIHJlc3BvbnNlIG9iamVjdC4gQWRkaXRpb25hbGx5ICdBbGwgcmVhZHknIGlzIGFkZGVkIGFzICdodW1hblJlYWRhYmxlJyBwcm9wZXJ0eS5cbiAgICpcbiAgICogU2VlIHBvc3NpYmxlbSBJTUFQIFJlc3BvbnNlIENvZGVzIGF0IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NTMwXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBQYXJzZWQgcmVzcG9uc2Ugb2JqZWN0XG4gICAqL1xuICBfcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgIGxldCBjb21tYW5kID0gcHJvcE9yKCcnLCAnY29tbWFuZCcsIHJlc3BvbnNlKS50b1VwcGVyQ2FzZSgpLnRyaW0oKVxuXG4gICAgLy8gbm8gYXR0cmlidXRlc1xuICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmF0dHJpYnV0ZXMgfHwgIXJlc3BvbnNlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB1bnRhZ2dlZCByZXNwb25zZXMgdy8gc2VxdWVuY2UgbnVtYmVyc1xuICAgIGlmIChyZXNwb25zZS50YWcgPT09ICcqJyAmJiAvXlxcZCskLy50ZXN0KHJlc3BvbnNlLmNvbW1hbmQpICYmIHJlc3BvbnNlLmF0dHJpYnV0ZXNbMF0udHlwZSA9PT0gJ0FUT00nKSB7XG4gICAgICByZXNwb25zZS5uciA9IE51bWJlcihyZXNwb25zZS5jb21tYW5kKVxuICAgICAgcmVzcG9uc2UuY29tbWFuZCA9IChyZXNwb25zZS5hdHRyaWJ1dGVzLnNoaWZ0KCkudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS50cmltKClcbiAgICB9XG5cbiAgICAvLyBubyBvcHRpb25hbCByZXNwb25zZSBjb2RlXG4gICAgaWYgKFsnT0snLCAnTk8nLCAnQkFEJywgJ0JZRScsICdQUkVBVVRIJ10uaW5kZXhPZihjb21tYW5kKSA8IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGxhc3QgZWxlbWVudCBvZiB0aGUgcmVzcG9uc2UgaXMgVEVYVCB0aGVuIHRoaXMgaXMgZm9yIGh1bWFuc1xuICAgIGlmIChyZXNwb25zZS5hdHRyaWJ1dGVzW3Jlc3BvbnNlLmF0dHJpYnV0ZXMubGVuZ3RoIC0gMV0udHlwZSA9PT0gJ1RFWFQnKSB7XG4gICAgICByZXNwb25zZS5odW1hblJlYWRhYmxlID0gcmVzcG9uc2UuYXR0cmlidXRlc1tyZXNwb25zZS5hdHRyaWJ1dGVzLmxlbmd0aCAtIDFdLnZhbHVlXG4gICAgfVxuXG4gICAgLy8gUGFyc2UgYW5kIGZvcm1hdCBBVE9NIHZhbHVlc1xuICAgIGlmIChyZXNwb25zZS5hdHRyaWJ1dGVzWzBdLnR5cGUgPT09ICdBVE9NJyAmJiByZXNwb25zZS5hdHRyaWJ1dGVzWzBdLnNlY3Rpb24pIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHJlc3BvbnNlLmF0dHJpYnV0ZXNbMF0uc2VjdGlvbi5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5Lm1hcCgoa2V5KSA9PiAoa2V5LnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gKGtleS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBjb25zdCBrZXkgPSBvcHRpb24uc2hpZnQoKVxuICAgICAgcmVzcG9uc2UuY29kZSA9IGtleVxuXG4gICAgICBpZiAob3B0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXNwb25zZVtrZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25bMF1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmVzcG9uc2Vba2V5LnRvTG93ZXJDYXNlKCldID0gb3B0aW9uXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGFuIEVycm9yIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZSBWYWx1ZSB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gRXJyb3JcbiAgICovXG4gIGlzRXJyb3IgKHZhbHVlKSB7XG4gICAgcmV0dXJuICEhT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5tYXRjaCgvRXJyb3JcXF0kLylcbiAgfVxuXG4gIC8vIENPTVBSRVNTSU9OIFJFTEFURUQgTUVUSE9EU1xuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGRlZmxhdGUvaW5mbGF0ZSBmb3IgdGhlIElPXG4gICAqL1xuICBlbmFibGVDb21wcmVzc2lvbiAoKSB7XG4gICAgdGhpcy5fc29ja2V0T25EYXRhID0gdGhpcy5zb2NrZXQub25kYXRhXG4gICAgdGhpcy5jb21wcmVzc2VkID0gdHJ1ZVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5Xb3JrZXIpIHtcbiAgICAgIHRoaXMuX2NvbXByZXNzaW9uV29ya2VyID0gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtDb21wcmVzc2lvbkJsb2JdKSkpXG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IGUuZGF0YS5tZXNzYWdlXG4gICAgICAgIHZhciBkYXRhID0gZS5kYXRhLmJ1ZmZlclxuXG4gICAgICAgIHN3aXRjaCAobWVzc2FnZSkge1xuICAgICAgICAgIGNhc2UgTUVTU0FHRV9JTkZMQVRFRF9EQVRBX1JFQURZOlxuICAgICAgICAgICAgdGhpcy5fc29ja2V0T25EYXRhKHsgZGF0YSB9KVxuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgTUVTU0FHRV9ERUZMQVRFRF9EQVRBX1JFQURZOlxuICAgICAgICAgICAgdGhpcy53YWl0RHJhaW4gPSB0aGlzLnNvY2tldC5zZW5kKGRhdGEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbXByZXNzaW9uV29ya2VyLm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICB0aGlzLl9vbkVycm9yKG5ldyBFcnJvcignRXJyb3IgaGFuZGxpbmcgY29tcHJlc3Npb24gd2ViIHdvcmtlcjogJyArIGUubWVzc2FnZSkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbXByZXNzaW9uV29ya2VyLnBvc3RNZXNzYWdlKGNyZWF0ZU1lc3NhZ2UoTUVTU0FHRV9JTklUSUFMSVpFX1dPUktFUikpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZmxhdGVkUmVhZHkgPSAoYnVmZmVyKSA9PiB7IHRoaXMuX3NvY2tldE9uRGF0YSh7IGRhdGE6IGJ1ZmZlciB9KSB9XG4gICAgICBjb25zdCBkZWZsYXRlZFJlYWR5ID0gKGJ1ZmZlcikgPT4geyB0aGlzLndhaXREcmFpbiA9IHRoaXMuc29ja2V0LnNlbmQoYnVmZmVyKSB9XG4gICAgICB0aGlzLl9jb21wcmVzc2lvbiA9IG5ldyBDb21wcmVzc2lvbihpbmZsYXRlZFJlYWR5LCBkZWZsYXRlZFJlYWR5KVxuICAgIH1cblxuICAgIC8vIG92ZXJyaWRlIGRhdGEgaGFuZGxlciwgZGVjb21wcmVzcyBpbmNvbWluZyBkYXRhXG4gICAgdGhpcy5zb2NrZXQub25kYXRhID0gKGV2dCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbXByZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb21wcmVzc2lvbldvcmtlcikge1xuICAgICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci5wb3N0TWVzc2FnZShjcmVhdGVNZXNzYWdlKE1FU1NBR0VfSU5GTEFURSwgZXZ0LmRhdGEpLCBbZXZ0LmRhdGFdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY29tcHJlc3Npb24uaW5mbGF0ZShldnQuZGF0YSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5kb2VzIGFueSBjaGFuZ2VzIHJlbGF0ZWQgdG8gY29tcHJlc3Npb24uIFRoaXMgb25seSBiZSBjYWxsZWQgd2hlbiBjbG9zaW5nIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBfZGlzYWJsZUNvbXByZXNzaW9uICgpIHtcbiAgICBpZiAoIXRoaXMuY29tcHJlc3NlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5jb21wcmVzc2VkID0gZmFsc2VcbiAgICB0aGlzLnNvY2tldC5vbmRhdGEgPSB0aGlzLl9zb2NrZXRPbkRhdGFcbiAgICB0aGlzLl9zb2NrZXRPbkRhdGEgPSBudWxsXG5cbiAgICBpZiAodGhpcy5fY29tcHJlc3Npb25Xb3JrZXIpIHtcbiAgICAgIC8vIHRlcm1pbmF0ZSB0aGUgd29ya2VyXG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci50ZXJtaW5hdGUoKVxuICAgICAgdGhpcy5fY29tcHJlc3Npb25Xb3JrZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE91dGdvaW5nIHBheWxvYWQgbmVlZHMgdG8gYmUgY29tcHJlc3NlZCBhbmQgc2VudCB0byBzb2NrZXRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYnVmZmVyIE91dGdvaW5nIHVuY29tcHJlc3NlZCBhcnJheWJ1ZmZlclxuICAgKi9cbiAgX3NlbmRDb21wcmVzc2VkIChidWZmZXIpIHtcbiAgICAvLyBkZWZsYXRlXG4gICAgaWYgKHRoaXMuX2NvbXByZXNzaW9uV29ya2VyKSB7XG4gICAgICB0aGlzLl9jb21wcmVzc2lvbldvcmtlci5wb3N0TWVzc2FnZShjcmVhdGVNZXNzYWdlKE1FU1NBR0VfREVGTEFURSwgYnVmZmVyKSwgW2J1ZmZlcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbXByZXNzaW9uLmRlZmxhdGUoYnVmZmVyKVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBjcmVhdGVNZXNzYWdlID0gKG1lc3NhZ2UsIGJ1ZmZlcikgPT4gKHsgbWVzc2FnZSwgYnVmZmVyIH0pXG4iXX0= \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 031320b..72e3977 100644 --- a/dist/index.js +++ b/dist/index.js @@ -51,4 +51,4 @@ var _client2 = _interopRequireDefault(_client); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = _client2.default; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJMT0dfTEVWRUxfTk9ORSIsIkxPR19MRVZFTF9FUlJPUiIsIkxPR19MRVZFTF9XQVJOIiwiTE9HX0xFVkVMX0lORk8iLCJMT0dfTEVWRUxfREVCVUciLCJMT0dfTEVWRUxfQUxMIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7bUJBR0VBLGM7Ozs7OzttQkFDQUMsZTs7Ozs7O21CQUNBQyxjOzs7Ozs7bUJBQ0FDLGM7Ozs7OzttQkFDQUMsZTs7Ozs7O21CQUNBQyxhOzs7O0FBUkYiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW1hcENsaWVudCBmcm9tICcuL2NsaWVudCdcblxuZXhwb3J0IHtcbiAgTE9HX0xFVkVMX05PTkUsXG4gIExPR19MRVZFTF9FUlJPUixcbiAgTE9HX0xFVkVMX1dBUk4sXG4gIExPR19MRVZFTF9JTkZPLFxuICBMT0dfTEVWRUxfREVCVUcsXG4gIExPR19MRVZFTF9BTExcbn0gZnJvbSAnLi9jb21tb24nXG5cbmV4cG9ydCBkZWZhdWx0IEltYXBDbGllbnRcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJMT0dfTEVWRUxfTk9ORSIsIkxPR19MRVZFTF9FUlJPUiIsIkxPR19MRVZFTF9XQVJOIiwiTE9HX0xFVkVMX0lORk8iLCJMT0dfTEVWRUxfREVCVUciLCJMT0dfTEVWRUxfQUxMIiwiSW1hcENsaWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O21CQUdFQSxjOzs7Ozs7bUJBQ0FDLGU7Ozs7OzttQkFDQUMsYzs7Ozs7O21CQUNBQyxjOzs7Ozs7bUJBQ0FDLGU7Ozs7OzttQkFDQUMsYTs7OztBQVJGOzs7Ozs7a0JBV2VDLGdCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEltYXBDbGllbnQgZnJvbSAnLi9jbGllbnQnXG5cbmV4cG9ydCB7XG4gIExPR19MRVZFTF9OT05FLFxuICBMT0dfTEVWRUxfRVJST1IsXG4gIExPR19MRVZFTF9XQVJOLFxuICBMT0dfTEVWRUxfSU5GTyxcbiAgTE9HX0xFVkVMX0RFQlVHLFxuICBMT0dfTEVWRUxfQUxMXG59IGZyb20gJy4vY29tbW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBJbWFwQ2xpZW50XG4iXX0= \ No newline at end of file diff --git a/dist/logger.js b/dist/logger.js index ec47ec9..413b24d 100644 --- a/dist/logger.js +++ b/dist/logger.js @@ -33,4 +33,4 @@ function createDefaultLogger(username, hostname) { error: msgs => log(_common.LOG_LEVEL_ERROR, msgs) }; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dnZXIuanMiXSwibmFtZXMiOlsiY3JlYXRlRGVmYXVsdExvZ2dlciIsIlNFU1NJT05DT1VOVEVSIiwidXNlcm5hbWUiLCJob3N0bmFtZSIsInNlc3Npb24iLCJsb2ciLCJsZXZlbCIsIm1lc3NhZ2VzIiwibWFwIiwibXNnIiwiZGF0ZSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImxvZ01lc3NhZ2UiLCJqb2luIiwiY29uc29sZSIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJkZWJ1ZyIsIm1zZ3MiXSwibWFwcGluZ3MiOiI7Ozs7O2tCQVN3QkEsbUI7O0FBVHhCOztBQU9BLElBQUlDLGlCQUFpQixDQUFyQjs7QUFFZSxTQUFTRCxtQkFBVCxDQUE4QkUsUUFBOUIsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQy9ELFFBQU1DLFVBQVUsRUFBRUgsY0FBbEI7QUFDQSxNQUFJSSxNQUFNLENBQUNDLEtBQUQsRUFBUUMsUUFBUixLQUFxQjtBQUM3QkEsZUFBV0EsU0FBU0MsR0FBVCxDQUFhQyxPQUFPLE9BQU9BLEdBQVAsS0FBZSxVQUFmLEdBQTRCQSxLQUE1QixHQUFvQ0EsR0FBeEQsQ0FBWDtBQUNBLFVBQU1DLE9BQU8sSUFBSUMsSUFBSixHQUFXQyxXQUFYLEVBQWI7QUFDQSxRQUFJQyxhQUFjLElBQUdILElBQUssS0FBSU4sT0FBUSxLQUFJRixRQUFTLEtBQUlDLFFBQVMsS0FBSUksU0FBU08sSUFBVCxDQUFjLEdBQWQsQ0FBbUIsRUFBdkY7QUFDQSxRQUFJUixpQ0FBSixFQUErQjtBQUM3QlMsY0FBUVYsR0FBUixDQUFZLFlBQVlRLFVBQXhCO0FBQ0QsS0FGRCxNQUVPLElBQUlQLGdDQUFKLEVBQThCO0FBQ25DUyxjQUFRQyxJQUFSLENBQWEsV0FBV0gsVUFBeEI7QUFDRCxLQUZNLE1BRUEsSUFBSVAsZ0NBQUosRUFBOEI7QUFDbkNTLGNBQVFFLElBQVIsQ0FBYSxXQUFXSixVQUF4QjtBQUNELEtBRk0sTUFFQSxJQUFJUCxpQ0FBSixFQUErQjtBQUNwQ1MsY0FBUUcsS0FBUixDQUFjLFlBQVlMLFVBQTFCO0FBQ0Q7QUFDRixHQWJEOztBQWVBLFNBQU87QUFDTE0sV0FBT0MsUUFBUWYsNkJBQXFCZSxJQUFyQixDQURWO0FBRUxKLFVBQU1JLFFBQVFmLDRCQUFvQmUsSUFBcEIsQ0FGVDtBQUdMSCxVQUFNRyxRQUFRZiw0QkFBb0JlLElBQXBCLENBSFQ7QUFJTEYsV0FBT0UsUUFBUWYsNkJBQXFCZSxJQUFyQjtBQUpWLEdBQVA7QUFNRCIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBMT0dfTEVWRUxfRVJST1IsXG4gIExPR19MRVZFTF9XQVJOLFxuICBMT0dfTEVWRUxfSU5GTyxcbiAgTE9HX0xFVkVMX0RFQlVHXG59IGZyb20gJy4vY29tbW9uJ1xuXG5sZXQgU0VTU0lPTkNPVU5URVIgPSAwXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRMb2dnZXIgKHVzZXJuYW1lLCBob3N0bmFtZSkge1xuICBjb25zdCBzZXNzaW9uID0gKytTRVNTSU9OQ09VTlRFUlxuICBsZXQgbG9nID0gKGxldmVsLCBtZXNzYWdlcykgPT4ge1xuICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMubWFwKG1zZyA9PiB0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nID8gbXNnKCkgOiBtc2cpXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIGxldCBsb2dNZXNzYWdlID0gYFske2RhdGV9XVske3Nlc3Npb259XVske3VzZXJuYW1lfV1bJHtob3N0bmFtZX1dICR7bWVzc2FnZXMuam9pbignICcpfWBcbiAgICBpZiAobGV2ZWwgPT09IExPR19MRVZFTF9ERUJVRykge1xuICAgICAgY29uc29sZS5sb2coJ1tERUJVR10nICsgbG9nTWVzc2FnZSlcbiAgICB9IGVsc2UgaWYgKGxldmVsID09PSBMT0dfTEVWRUxfSU5GTykge1xuICAgICAgY29uc29sZS5pbmZvKCdbSU5GT10nICsgbG9nTWVzc2FnZSlcbiAgICB9IGVsc2UgaWYgKGxldmVsID09PSBMT0dfTEVWRUxfV0FSTikge1xuICAgICAgY29uc29sZS53YXJuKCdbV0FSTl0nICsgbG9nTWVzc2FnZSlcbiAgICB9IGVsc2UgaWYgKGxldmVsID09PSBMT0dfTEVWRUxfRVJST1IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFUlJPUl0nICsgbG9nTWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRlYnVnOiBtc2dzID0+IGxvZyhMT0dfTEVWRUxfREVCVUcsIG1zZ3MpLFxuICAgIGluZm86IG1zZ3MgPT4gbG9nKExPR19MRVZFTF9JTkZPLCBtc2dzKSxcbiAgICB3YXJuOiBtc2dzID0+IGxvZyhMT0dfTEVWRUxfV0FSTiwgbXNncyksXG4gICAgZXJyb3I6IG1zZ3MgPT4gbG9nKExPR19MRVZFTF9FUlJPUiwgbXNncylcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dnZXIuanMiXSwibmFtZXMiOlsiY3JlYXRlRGVmYXVsdExvZ2dlciIsIlNFU1NJT05DT1VOVEVSIiwidXNlcm5hbWUiLCJob3N0bmFtZSIsInNlc3Npb24iLCJsb2ciLCJsZXZlbCIsIm1lc3NhZ2VzIiwibWFwIiwibXNnIiwiZGF0ZSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImxvZ01lc3NhZ2UiLCJqb2luIiwiTE9HX0xFVkVMX0RFQlVHIiwiY29uc29sZSIsIkxPR19MRVZFTF9JTkZPIiwiaW5mbyIsIkxPR19MRVZFTF9XQVJOIiwid2FybiIsIkxPR19MRVZFTF9FUlJPUiIsImVycm9yIiwiZGVidWciLCJtc2dzIl0sIm1hcHBpbmdzIjoiOzs7OztrQkFTd0JBLG1COztBQVR4Qjs7QUFPQSxJQUFJQyxpQkFBaUIsQ0FBckI7O0FBRWUsU0FBU0QsbUJBQVQsQ0FBOEJFLFFBQTlCLEVBQXdDQyxRQUF4QyxFQUFrRDtBQUMvRCxRQUFNQyxVQUFVLEVBQUVILGNBQWxCO0FBQ0EsTUFBSUksTUFBTSxDQUFDQyxLQUFELEVBQVFDLFFBQVIsS0FBcUI7QUFDN0JBLGVBQVdBLFNBQVNDLEdBQVQsQ0FBYUMsT0FBTyxPQUFPQSxHQUFQLEtBQWUsVUFBZixHQUE0QkEsS0FBNUIsR0FBb0NBLEdBQXhELENBQVg7QUFDQSxVQUFNQyxPQUFPLElBQUlDLElBQUosR0FBV0MsV0FBWCxFQUFiO0FBQ0EsUUFBSUMsYUFBYyxJQUFHSCxJQUFLLEtBQUlOLE9BQVEsS0FBSUYsUUFBUyxLQUFJQyxRQUFTLEtBQUlJLFNBQVNPLElBQVQsQ0FBYyxHQUFkLENBQW1CLEVBQXZGO0FBQ0EsUUFBSVIsVUFBVVMsdUJBQWQsRUFBK0I7QUFDN0JDLGNBQVFYLEdBQVIsQ0FBWSxZQUFZUSxVQUF4QjtBQUNELEtBRkQsTUFFTyxJQUFJUCxVQUFVVyxzQkFBZCxFQUE4QjtBQUNuQ0QsY0FBUUUsSUFBUixDQUFhLFdBQVdMLFVBQXhCO0FBQ0QsS0FGTSxNQUVBLElBQUlQLFVBQVVhLHNCQUFkLEVBQThCO0FBQ25DSCxjQUFRSSxJQUFSLENBQWEsV0FBV1AsVUFBeEI7QUFDRCxLQUZNLE1BRUEsSUFBSVAsVUFBVWUsdUJBQWQsRUFBK0I7QUFDcENMLGNBQVFNLEtBQVIsQ0FBYyxZQUFZVCxVQUExQjtBQUNEO0FBQ0YsR0FiRDs7QUFlQSxTQUFPO0FBQ0xVLFdBQU9DLFFBQVFuQixJQUFJVSx1QkFBSixFQUFxQlMsSUFBckIsQ0FEVjtBQUVMTixVQUFNTSxRQUFRbkIsSUFBSVksc0JBQUosRUFBb0JPLElBQXBCLENBRlQ7QUFHTEosVUFBTUksUUFBUW5CLElBQUljLHNCQUFKLEVBQW9CSyxJQUFwQixDQUhUO0FBSUxGLFdBQU9FLFFBQVFuQixJQUFJZ0IsdUJBQUosRUFBcUJHLElBQXJCO0FBSlYsR0FBUDtBQU1EIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIExPR19MRVZFTF9FUlJPUixcbiAgTE9HX0xFVkVMX1dBUk4sXG4gIExPR19MRVZFTF9JTkZPLFxuICBMT0dfTEVWRUxfREVCVUdcbn0gZnJvbSAnLi9jb21tb24nXG5cbmxldCBTRVNTSU9OQ09VTlRFUiA9IDBcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdExvZ2dlciAodXNlcm5hbWUsIGhvc3RuYW1lKSB7XG4gIGNvbnN0IHNlc3Npb24gPSArK1NFU1NJT05DT1VOVEVSXG4gIGxldCBsb2cgPSAobGV2ZWwsIG1lc3NhZ2VzKSA9PiB7XG4gICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAobXNnID0+IHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicgPyBtc2coKSA6IG1zZylcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgbGV0IGxvZ01lc3NhZ2UgPSBgWyR7ZGF0ZX1dWyR7c2Vzc2lvbn1dWyR7dXNlcm5hbWV9XVske2hvc3RuYW1lfV0gJHttZXNzYWdlcy5qb2luKCcgJyl9YFxuICAgIGlmIChsZXZlbCA9PT0gTE9HX0xFVkVMX0RFQlVHKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0RFQlVHXScgKyBsb2dNZXNzYWdlKVxuICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IExPR19MRVZFTF9JTkZPKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tJTkZPXScgKyBsb2dNZXNzYWdlKVxuICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IExPR19MRVZFTF9XQVJOKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tXQVJOXScgKyBsb2dNZXNzYWdlKVxuICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09IExPR19MRVZFTF9FUlJPUikge1xuICAgICAgY29uc29sZS5lcnJvcignW0VSUk9SXScgKyBsb2dNZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGVidWc6IG1zZ3MgPT4gbG9nKExPR19MRVZFTF9ERUJVRywgbXNncyksXG4gICAgaW5mbzogbXNncyA9PiBsb2coTE9HX0xFVkVMX0lORk8sIG1zZ3MpLFxuICAgIHdhcm46IG1zZ3MgPT4gbG9nKExPR19MRVZFTF9XQVJOLCBtc2dzKSxcbiAgICBlcnJvcjogbXNncyA9PiBsb2coTE9HX0xFVkVMX0VSUk9SLCBtc2dzKVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/res/compression.worker.blob b/res/compression.worker.blob index 803c114..f2d7d54 100644 --- a/res/compression.worker.blob +++ b/res/compression.worker.blob @@ -1 +1 @@ -!function(e){var t={};function a(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=12)}([function(e,t,a){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var n in a)i(a,n)&&(e[n]=a[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,a,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(a,a+n),i);else for(var r=0;r>>1:e>>>1;t[a]=e}return t}();e.exports=function(e,t,a,i){var r=n,s=i+a;e^=-1;for(var l=i;l>>8^r[255&(e^t[l])];return-1^e}},function(e,t,a){"use strict";e.exports=function(e,t,a,n){for(var i=65535&e|0,r=e>>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(i=i+t[n++]|0)|0}while(--s);i%=65521,r%=65521}return i|r<<16|0}},function(e,t,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,a){"use strict";var n=a(0),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],r=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],l=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(e,t,a,o,h,d,_,f){var u,c,b,g,m,w,p,v,k,x=f.bits,y=0,z=0,E=0,A=0,S=0,Z=0,R=0,O=0,B=0,T=0,N=null,D=0,U=new n.Buf16(16),I=new n.Buf16(16),F=null,L=0;for(y=0;y<=15;y++)U[y]=0;for(z=0;z=1&&0===U[A];A--);if(S>A&&(S=A),0===A)return h[d++]=20971520,h[d++]=20971520,f.bits=1,0;for(E=1;E0&&(0===e||1!==A))return-1;for(I[1]=0,y=1;y<15;y++)I[y+1]=I[y]+U[y];for(z=0;z852||2===e&&B>592)return 1;for(;;){p=y-R,_[z]w?(v=F[L+_[z]],k=N[D+_[z]]):(v=96,k=0),u=1<>R)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<>=1;if(0!==u?(T&=u-1,T+=u):T=0,z++,0==--U[y]){if(y===A)break;y=t[a+_[z]]}if(y>S&&(T&g)!==b){for(0===R&&(R=S),m+=E,O=1<<(Z=y-R);Z+R852||2===e&&B>592)return 1;h[b=T&g]=S<<24|Z<<16|m-d|0}}return 0!==T&&(h[m+T]=y-R<<24|64<<16|0),f.bits=S,0}},function(e,t,a){"use strict";e.exports=function(e,t){var a,n,i,r,s,l,o,h,d,_,f,u,c,b,g,m,w,p,v,k,x,y,z,E,A;a=e.state,n=e.next_in,E=e.input,i=n+(e.avail_in-5),r=e.next_out,A=e.output,s=r-(t-e.avail_out),l=r+(e.avail_out-257),o=a.dmax,h=a.wsize,d=a.whave,_=a.wnext,f=a.window,u=a.hold,c=a.bits,b=a.lencode,g=a.distcode,m=(1<>>=v=p>>>24,c-=v,0===(v=p>>>16&255))A[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<>>=v,c-=v),c<15&&(u+=E[n++]<>>=v=p>>>24,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<o){e.msg="invalid distance too far back",a.mode=30;break e}if(u>>>=v,c-=v,x>(v=r-s)){if((v=x-v)>d&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(y=0,z=f,0===_){if(y+=h-v,v2;)A[r++]=z[y++],A[r++]=z[y++],A[r++]=z[y++],k-=3;k&&(A[r++]=z[y++],k>1&&(A[r++]=z[y++]))}else{y=r-x;do{A[r++]=A[y++],A[r++]=A[y++],A[r++]=A[y++],k-=3}while(k>2);k&&(A[r++]=A[y++],k>1&&(A[r++]=A[y++]))}break}}break}}while(n>3,u&=(1<<(c-=k<<3))-1,e.next_in=n,e.next_out=r,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=x,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,c):m}function re(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):m}function se(e,t){var a,n;return e&&e.state?(n=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?m:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,re(e))):m}function le(e,t){var a,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(a=se(e,t))!==c&&(e.state=null),a):m}var oe,he,de=!0;function _e(e){if(de){var t;for(oe=new n.Buf32(512),he=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(l(h,e.lens,0,288,oe,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;l(d,e.lens,0,32,he,0,e.work,{bits:5}),de=!1}e.lencode=oe,e.lenbits=9,e.distcode=he,e.distbits=5}function fe(e,t,a,i){var r,s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(n.arraySet(s.window,t,a-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>i&&(r=i),n.arraySet(s.window,t,a-i,r,s.wnext),(i-=r)?(n.arraySet(s.window,t,a-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,a.check=r(a.check,Se,2,0),le=0,oe=0,a.mode=y;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&le)<<8)+(le>>8))%31){e.msg="incorrect header check",a.mode=Q;break}if((15&le)!==k){e.msg="unknown compression method",a.mode=Q;break}if(oe-=4,xe=8+(15&(le>>>=4)),0===a.wbits)a.wbits=xe;else if(xe>a.wbits){e.msg="invalid window size",a.mode=Q;break}a.dmax=1<>8&1),512&a.flags&&(Se[0]=255&le,Se[1]=le>>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0,a.mode=z;case z:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,Se[2]=le>>>16&255,Se[3]=le>>>24&255,a.check=r(a.check,Se,4,0)),le=0,oe=0,a.mode=E;case E:for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>8),512&a.flags&&(Se[0]=255&le,Se[1]=le>>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0,a.mode=A;case A:if(1024&a.flags){for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,a.check=r(a.check,Se,2,0)),le=0,oe=0}else a.head&&(a.head.extra=null);a.mode=S;case S:if(1024&a.flags&&((ue=a.length)>re&&(ue=re),ue&&(a.head&&(xe=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),n.arraySet(a.head.extra,ee,ae,ue,xe)),512&a.flags&&(a.check=r(a.check,ee,ue,ae)),re-=ue,ae+=ue,a.length-=ue),a.length))break e;a.length=0,a.mode=Z;case Z:if(2048&a.flags){if(0===re)break e;ue=0;do{xe=ee[ae+ue++],a.head&&xe&&a.length<65536&&(a.head.name+=String.fromCharCode(xe))}while(xe&&ue>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=N;break;case B:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>=7&oe,oe-=7&oe,a.mode=W;break}for(;oe<3;){if(0===re)break e;re--,le+=ee[ae++]<>>=1)){case 0:a.mode=U;break;case 1:if(_e(a),a.mode=P,t===u){le>>>=2,oe-=2;break e}break;case 2:a.mode=L;break;case 3:e.msg="invalid block type",a.mode=Q}le>>>=2,oe-=2;break;case U:for(le>>>=7&oe,oe-=7&oe;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=Q;break}if(a.length=65535&le,le=0,oe=0,a.mode=I,t===u)break e;case I:a.mode=F;case F:if(ue=a.length){if(ue>re&&(ue=re),ue>se&&(ue=se),0===ue)break e;n.arraySet(te,ee,ae,ue,ie),re-=ue,ae+=ue,se-=ue,ie+=ue,a.length-=ue;break}a.mode=N;break;case L:for(;oe<14;){if(0===re)break e;re--,le+=ee[ae++]<>>=5,oe-=5,a.ndist=1+(31&le),le>>>=5,oe-=5,a.ncode=4+(15&le),le>>>=4,oe-=4,a.nlen>286||a.ndist>30){e.msg="too many length or distance symbols",a.mode=Q;break}a.have=0,a.mode=M;case M:for(;a.have>>=3,oe-=3}for(;a.have<19;)a.lens[Ze[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,ze={bits:a.lenbits},ye=l(o,a.lens,0,19,a.lencode,0,a.work,ze),a.lenbits=ze.bits,ye){e.msg="invalid code lengths set",a.mode=Q;break}a.have=0,a.mode=C;case C:for(;a.have>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=ge,oe-=ge,a.lens[a.have++]=we;else{if(16===we){for(Ee=ge+2;oe>>=ge,oe-=ge,0===a.have){e.msg="invalid bit length repeat",a.mode=Q;break}xe=a.lens[a.have-1],ue=3+(3&le),le>>>=2,oe-=2}else if(17===we){for(Ee=ge+3;oe>>=ge)),le>>>=3,oe-=3}else{for(Ee=ge+7;oe>>=ge)),le>>>=7,oe-=7}if(a.have+ue>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=Q;break}for(;ue--;)a.lens[a.have++]=xe}}if(a.mode===Q)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=Q;break}if(a.lenbits=9,ze={bits:a.lenbits},ye=l(h,a.lens,0,a.nlen,a.lencode,0,a.work,ze),a.lenbits=ze.bits,ye){e.msg="invalid literal/lengths set",a.mode=Q;break}if(a.distbits=6,a.distcode=a.distdyn,ze={bits:a.distbits},ye=l(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,ze),a.distbits=ze.bits,ye){e.msg="invalid distances set",a.mode=Q;break}if(a.mode=P,t===u)break e;case P:a.mode=H;case H:if(re>=6&&se>=258){e.next_out=ie,e.avail_out=se,e.next_in=ae,e.avail_in=re,a.hold=le,a.bits=oe,s(e,de),ie=e.next_out,te=e.output,se=e.avail_out,ae=e.next_in,ee=e.input,re=e.avail_in,le=a.hold,oe=a.bits,a.mode===N&&(a.back=-1);break}for(a.back=0;me=(Ae=a.lencode[le&(1<>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ae,!(pe+(ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,a.length=we,0===me){a.mode=X;break}if(32&me){a.back=-1,a.mode=N;break}if(64&me){e.msg="invalid literal/length code",a.mode=Q;break}a.extra=15&me,a.mode=j;case j:if(a.extra){for(Ee=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=K;case K:for(;me=(Ae=a.distcode[le&(1<>>16&255,we=65535&Ae,!((ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ae,!(pe+(ge=Ae>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,64&me){e.msg="invalid distance code",a.mode=Q;break}a.offset=we,a.extra=15&me,a.mode=Y;case Y:if(a.extra){for(Ee=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=Q;break}a.mode=G;case G:if(0===se)break e;if(ue=de-se,a.offset>ue){if((ue=a.offset-ue)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=Q;break}ue>a.wnext?(ue-=a.wnext,ce=a.wsize-ue):ce=a.wnext-ue,ue>a.length&&(ue=a.length),be=a.window}else be=te,ce=ie-a.offset,ue=a.length;ue>se&&(ue=se),se-=ue,a.length-=ue;do{te[ie++]=be[ce++]}while(--ue);0===a.length&&(a.mode=H);break;case X:if(0===se)break e;te[ie++]=a.length,se--,a.mode=H;break;case W:if(a.wrap){for(;oe<32;){if(0===re)break e;re--,le|=ee[ae++]<=0;)e[t]=0}var h=0,d=1,_=2,f=29,u=256,c=u+1+f,b=30,g=19,m=2*c+1,w=15,p=16,v=7,k=256,x=16,y=17,z=18,E=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],R=new Array(2*(c+2));o(R);var O=new Array(2*b);o(O);var B=new Array(512);o(B);var T=new Array(256);o(T);var N=new Array(f);o(N);var D,U,I,F=new Array(b);function L(e,t,a,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=a,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function M(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function C(e){return e<256?B[e]:B[256+(e>>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function H(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1}while(--t>0);return a>>>1}function Y(e,t,a){var n,i,r=new Array(w+1),s=0;for(n=1;n<=w;n++)r[n]=s=s+a[n-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=K(r[l]++,l))}}function G(e){var t;for(t=0;t8?P(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function W(e,t,a,n){var i=2*t,r=2*a;return e[i]>1;a>=1;a--)q(e,r,a);i=o;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],q(e,r,1),n=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=n,r[2*i]=r[2*a]+r[2*n],e.depth[i]=(e.depth[a]>=e.depth[n]?e.depth[a]:e.depth[n])+1,r[2*a+1]=r[2*n+1]=i,e.heap[1]=i++,q(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,n,i,r,s,l,o=t.dyn_tree,h=t.max_code,d=t.stat_desc.static_tree,_=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,u=t.stat_desc.extra_base,c=t.stat_desc.max_length,b=0;for(r=0;r<=w;r++)e.bl_count[r]=0;for(o[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;ac&&(r=c,b++),o[2*n+1]=r,n>h||(e.bl_count[r]++,s=0,n>=u&&(s=f[n-u]),l=o[2*n],e.opt_len+=l*(r+s),_&&(e.static_len+=l*(d[2*n+1]+s)));if(0!==b){do{for(r=c-1;0===e.bl_count[r];)r--;e.bl_count[r]--,e.bl_count[r+1]+=2,e.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(n=e.bl_count[r];0!==n;)(i=e.heap[--a])>h||(o[2*i+1]!==r&&(e.opt_len+=(r-o[2*i+1])*o[2*i],o[2*i+1]=r),n--)}}(e,t),Y(r,h,e.bl_count)}function V(e,t,a){var n,i,r=-1,s=t[1],l=0,o=7,h=4;for(0===s&&(o=138,h=3),t[2*(a+1)+1]=65535,n=0;n<=a;n++)i=s,s=t[2*(n+1)+1],++l>=7;n0?(e.strm.data_type===l&&(e.strm.data_type=function(e){var t,a=4093624447;for(t=0;t<=31;t++,a>>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return r;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t=3&&0===e.bl_tree[2*Z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(h=e.static_len+3+7>>>3)<=o&&(o=h)):o=h=a+5,a+4<=o&&-1!==t?te(e,t,a,n):e.strategy===i||h===o?(H(e,(d<<1)+(n?1:0),3),J(e,R,O)):(H(e,(_<<1)+(n?1:0),3),function(e,t,a,n){var i;for(H(e,t-257,5),H(e,a-1,5),H(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(T[a]+u+1)]++,e.dyn_dtree[2*C(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){H(e,d<<1,3),j(e,k,R),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,a){"use strict";var n,i=a(0),r=a(8),s=a(3),l=a(2),o=a(1),h=0,d=1,_=3,f=4,u=5,c=0,b=1,g=-2,m=-3,w=-5,p=-1,v=1,k=2,x=3,y=4,z=0,E=2,A=8,S=9,Z=15,R=8,O=286,B=30,T=19,N=2*O+1,D=15,U=3,I=258,F=I+U+1,L=32,M=42,C=69,P=73,H=91,j=103,K=113,Y=666,G=1,X=2,W=3,q=4,J=3;function Q(e,t){return e.msg=o[t],t}function V(e){return(e<<1)-(e>4?9:0)}function $(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,a=t.pending;a>e.avail_out&&(a=e.avail_out),0!==a&&(i.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function te(e,t){r._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function ae(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var a,n,i=e.max_chain_length,r=e.strstart,s=e.prev_length,l=e.nice_match,o=e.strstart>e.w_size-F?e.strstart-(e.w_size-F):0,h=e.window,d=e.w_mask,_=e.prev,f=e.strstart+I,u=h[r+s-1],c=h[r+s];e.prev_length>=e.good_match&&(i>>=2),l>e.lookahead&&(l=e.lookahead);do{if(h[(a=t)+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do{}while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&rs){if(e.match_start=t,s=n,n>=l)break;u=h[r+s-1],c=h[r+s]}}}while((t=_[t&d])>o&&0!=--i);return s<=e.lookahead?s:e.lookahead}function re(e){var t,a,n,r,o,h,d,_,f,u,c=e.w_size;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=c+(c-F)){i.arraySet(e.window,e.window,c,c,0),e.match_start-=c,e.strstart-=c,e.block_start-=c,t=a=e.hash_size;do{n=e.head[--t],e.head[t]=n>=c?n-c:0}while(--a);t=a=c;do{n=e.prev[--t],e.prev[t]=n>=c?n-c:0}while(--a);r+=c}if(0===e.strm.avail_in)break;if(h=e.strm,d=e.window,_=e.strstart+e.lookahead,f=r,u=void 0,(u=h.avail_in)>f&&(u=f),a=0===u?0:(h.avail_in-=u,i.arraySet(d,h.input,h.next_in,u,_),1===h.state.wrap?h.adler=s(h.adler,d,u,_):2===h.state.wrap&&(h.adler=l(h.adler,d,u,_)),h.next_in+=u,h.total_in+=u,u),e.lookahead+=a,e.lookahead+e.insert>=U)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<=U)if(n=r._tr_tally(e,e.strstart-e.match_start,e.match_length-U),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=U){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=U-1)),e.prev_length>=U&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-U,n=r._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-U),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(l=2,n-=16),r<1||r>S||a!==A||n<8||n>15||t<0||t>9||s<0||s>y)return Q(e,g);8===n&&(n=9);var o=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*N),this.dyn_dtree=new i.Buf16(2*(2*B+1)),this.bl_tree=new i.Buf16(2*(2*T+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(D+1),this.heap=new i.Buf16(2*O+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=o,o.strm=e,o.wrap=l,o.gzhead=null,o.w_bits=n,o.w_size=1<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(re(e),0===e.lookahead&&t===h)return G;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+a;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return G;if(e.strstart-e.block_start>=e.w_size-F&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),G)}),new oe(4,4,8,4,se),new oe(4,5,16,8,se),new oe(4,6,32,32,se),new oe(4,4,16,16,le),new oe(8,16,32,32,le),new oe(8,16,128,128,le),new oe(8,32,128,256,le),new oe(32,128,258,1024,le),new oe(32,258,258,4096,le)],t.deflateInit=function(e,t){return _e(e,t,A,Z,R,z)},t.deflateInit2=_e,t.deflateReset=de,t.deflateResetKeep=he,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?g:(e.state.gzhead=t,c):g},t.deflate=function(e,t){var a,i,s,o;if(!e||!e.state||t>u||t<0)return e?Q(e,g):g;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Y&&t!==f)return Q(e,0===e.avail_out?w:g);if(i.strm=e,a=i.last_flush,i.last_flush=t,i.status===M)if(2===i.wrap)e.adler=0,ae(i,31),ae(i,139),ae(i,8),i.gzhead?(ae(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ae(i,255&i.gzhead.time),ae(i,i.gzhead.time>>8&255),ae(i,i.gzhead.time>>16&255),ae(i,i.gzhead.time>>24&255),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ae(i,255&i.gzhead.extra.length),ae(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=l(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=C):(ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,J),i.status=K);else{var m=A+(i.w_bits-8<<4)<<8;m|=(i.strategy>=k||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(m|=L),m+=31-m%31,i.status=K,ne(i,m),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===C)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending!==i.pending_buf_size));)ae(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=P)}else i.status=P;if(i.status===P)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.gzindex=0,i.status=H)}else i.status=H;if(i.status===H)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.status=j)}else i.status=j;if(i.status===j&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(ae(i,255&e.adler),ae(i,e.adler>>8&255),e.adler=0,i.status=K)):i.status=K),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,c}else if(0===e.avail_in&&V(t)<=V(a)&&t!==f)return Q(e,w);if(i.status===Y&&0!==e.avail_in)return Q(e,w);if(0!==e.avail_in||0!==i.lookahead||t!==h&&i.status!==Y){var p=i.strategy===k?function(e,t){for(var a;;){if(0===e.lookahead&&(re(e),0===e.lookahead)){if(t===h)return G;break}if(e.match_length=0,a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):i.strategy===x?function(e,t){for(var a,n,i,s,l=e.window;;){if(e.lookahead<=I){if(re(e),e.lookahead<=I&&t===h)return G;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=U&&e.strstart>0&&(n=l[i=e.strstart-1])===l[++i]&&n===l[++i]&&n===l[++i]){s=e.strstart+I;do{}while(n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=U?(a=r._tr_tally(e,1,e.match_length-U),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):n[i.level].func(i,t);if(p!==W&&p!==q||(i.status=Y),p===G||p===W)return 0===e.avail_out&&(i.last_flush=-1),c;if(p===X&&(t===d?r._tr_align(i):t!==u&&(r._tr_stored_block(i,0,0,!1),t===_&&($(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,c}return t!==f?c:i.wrap<=0?b:(2===i.wrap?(ae(i,255&e.adler),ae(i,e.adler>>8&255),ae(i,e.adler>>16&255),ae(i,e.adler>>24&255),ae(i,255&e.total_in),ae(i,e.total_in>>8&255),ae(i,e.total_in>>16&255),ae(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?c:b)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==M&&t!==C&&t!==P&&t!==H&&t!==j&&t!==K&&t!==Y?Q(e,g):(e.state=null,t===K?Q(e,m):c):g},t.deflateSetDictionary=function(e,t){var a,n,r,l,o,h,d,_,f=t.length;if(!e||!e.state)return g;if(2===(l=(a=e.state).wrap)||1===l&&a.status!==M||a.lookahead)return g;for(1===l&&(e.adler=s(e.adler,t,f,0)),a.wrap=0,f>=a.w_size&&(0===l&&($(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new i.Buf8(a.w_size),i.arraySet(_,t,f-a.w_size,a.w_size,0),t=_,f=a.w_size),o=e.avail_in,h=e.next_in,d=e.input,e.avail_in=f,e.next_in=0,e.input=t,re(a);a.lookahead>=U;){n=a.strstart,r=a.lookahead-(U-1);do{a.ins_h=(a.ins_h<0&&i!==l.Z_STREAM_END);return t.next_out>n&&(o=t.output.subarray(n,n=t.next_out),d=e(o)),d}}(function(e){return a.inflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))}),this._deflate=function(e){var t=new n.default,a=(0,i.deflateInit2)(t,l.Z_DEFAULT_COMPRESSION,l.Z_DEFLATED,d,8,l.Z_DEFAULT_STRATEGY);if(a!==l.Z_OK)throw new Error("Problem initializing deflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();t.input=a,t.next_in=0,t.avail_in=t.input.length;var n=void 0,r=void 0,o=void 0,d=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(h),o=t.next_out=0,t.avail_out=h),(n=(0,i.deflate)(t,l.Z_SYNC_FLUSH))!==l.Z_STREAM_END&&n!==l.Z_OK)throw new Error("Deflate problem: "+s.default[n]);0===t.avail_out&&t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),d=e(r))}while((t.avail_in>0||0===t.avail_out)&&n!==l.Z_STREAM_END);return t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),d=e(r)),d}}(function(e){return a.deflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))})}_.prototype.inflate=function(e){this._inflate(new Uint8Array(e))},_.prototype.deflate=function(e){this._deflate(new Uint8Array(e))}},function(e,t,a){"use strict";var n,i=a(11);var r=function(e,t){return{message:e,buffer:t}},s=new((n=i)&&n.__esModule?n:{default:n}).default(function(e){return self.postMessage(r("inflated_ready",e),[e])},function(e){return self.postMessage(r("deflated_ready",e),[e])});self.onmessage=function(e){var t=e.data.message,a=e.data.buffer;switch(t){case"start":break;case"inflate":s.inflate(a);break;case"deflate":s.deflate(a)}}}]); \ No newline at end of file +!function(e){var t={};function a(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)a.d(n,i,function(t){return e[t]}.bind(null,i));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=4)}([function(e,t,a){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var n in a)i(a,n)&&(e[n]=a[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var r={arraySet:function(e,t,a,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(a,a+n),i);else for(var r=0;r>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(i=i+t[n++]|0)|0}while(--s);i%=65521,r%=65521}return i|r<<16|0}},function(e,t,a){"use strict";var n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();e.exports=function(e,t,a,i){var r=n,s=i+a;e^=-1;for(var l=i;l>>8^r[255&(e^t[l])];return-1^e}},function(e,t,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},function(e,t,a){"use strict";var n=function(e,t){return{message:e,buffer:t}},i=new(function(e){return e&&e.__esModule?e:{default:e}}(a(5)).default)(function(e){return self.postMessage(n("inflated_ready",e),[e])},function(e){return self.postMessage(n("deflated_ready",e),[e])});self.onmessage=function(e){var t=e.data.message,a=e.data.buffer;switch(t){case"start":break;case"inflate":i.inflate(a);break;case"deflate":i.deflate(a)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=_;var n=o(a(6)),i=a(7),r=a(9),s=o(a(3)),l=a(12);function o(e){return e&&e.__esModule?e:{default:e}}var d=16384,h=15;function _(e,t){var a=this;this.inflatedReady=e,this.deflatedReady=t,this._inflate=function(e){var t=new n.default,a=(0,r.inflateInit2)(t,h);if(a!==l.Z_OK)throw new Error("Problem initializing inflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();var n=void 0;t.input=a,t.next_in=0,t.avail_in=t.input.length;var i=void 0,o=void 0,h=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(d),n=t.next_out=0,t.avail_out=d),(i=(0,r.inflate)(t,l.Z_NO_FLUSH))!==l.Z_STREAM_END&&i!==l.Z_OK)throw new Error("inflate problem: "+s.default[i]);t.next_out&&(0!==t.avail_out&&i!==l.Z_STREAM_END||(o=t.output.subarray(n,n=t.next_out),h=e(o)))}while(t.avail_in>0&&i!==l.Z_STREAM_END);return t.next_out>n&&(o=t.output.subarray(n,n=t.next_out),h=e(o)),h}}(function(e){return a.inflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))}),this._deflate=function(e){var t=new n.default,a=(0,i.deflateInit2)(t,l.Z_DEFAULT_COMPRESSION,l.Z_DEFLATED,h,8,l.Z_DEFAULT_STRATEGY);if(a!==l.Z_OK)throw new Error("Problem initializing deflate stream: "+s.default[a]);return function(a){if(void 0===a)return e();t.input=a,t.next_in=0,t.avail_in=t.input.length;var n=void 0,r=void 0,o=void 0,h=!0;do{if(0===t.avail_out&&(t.output=new Uint8Array(d),o=t.next_out=0,t.avail_out=d),(n=(0,i.deflate)(t,l.Z_SYNC_FLUSH))!==l.Z_STREAM_END&&n!==l.Z_OK)throw new Error("Deflate problem: "+s.default[n]);0===t.avail_out&&t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),h=e(r))}while((t.avail_in>0||0===t.avail_out)&&n!==l.Z_STREAM_END);return t.next_out>o&&(r=t.output.subarray(o,o=t.next_out),h=e(r)),h}}(function(e){return a.deflatedReady(e.buffer.slice(e.byteOffset,e.byteOffset+e.length))})}_.prototype.inflate=function(e){this._inflate(new Uint8Array(e))},_.prototype.deflate=function(e){this._deflate(new Uint8Array(e))}},function(e,t,a){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},function(e,t,a){"use strict";var n,i=a(0),r=a(8),s=a(1),l=a(2),o=a(3),d=0,h=1,_=3,f=4,u=5,c=0,b=1,g=-2,m=-3,w=-5,p=-1,v=1,k=2,y=3,x=4,z=0,S=2,E=8,A=9,Z=15,R=8,O=286,B=30,T=19,N=2*O+1,D=15,U=3,I=258,M=I+U+1,F=32,L=42,C=69,P=73,j=91,H=103,K=113,Y=666,G=1,X=2,W=3,q=4,J=3;function Q(e,t){return e.msg=o[t],t}function V(e){return(e<<1)-(e>4?9:0)}function $(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,a=t.pending;a>e.avail_out&&(a=e.avail_out),0!==a&&(i.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function te(e,t){r._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function ae(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t,a,n){var r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,i.arraySet(t,e.input,e.next_in,r,a),1===e.state.wrap?e.adler=s(e.adler,t,r,a):2===e.state.wrap&&(e.adler=l(e.adler,t,r,a)),e.next_in+=r,e.total_in+=r,r)}function re(e,t){var a,n,i=e.max_chain_length,r=e.strstart,s=e.prev_length,l=e.nice_match,o=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,d=e.window,h=e.w_mask,_=e.prev,f=e.strstart+I,u=d[r+s-1],c=d[r+s];e.prev_length>=e.good_match&&(i>>=2),l>e.lookahead&&(l=e.lookahead);do{if(d[(a=t)+s]===c&&d[a+s-1]===u&&d[a]===d[r]&&d[++a]===d[r+1]){r+=2,a++;do{}while(d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&d[++r]===d[++a]&&rs){if(e.match_start=t,s=n,n>=l)break;u=d[r+s-1],c=d[r+s]}}}while((t=_[t&h])>o&&0!=--i);return s<=e.lookahead?s:e.lookahead}function se(e){var t,a,n,r,s,l=e.w_size;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=l+(l-M)){i.arraySet(e.window,e.window,l,l,0),e.match_start-=l,e.strstart-=l,e.block_start-=l,t=a=e.hash_size;do{n=e.head[--t],e.head[t]=n>=l?n-l:0}while(--a);t=a=l;do{n=e.prev[--t],e.prev[t]=n>=l?n-l:0}while(--a);r+=l}if(0===e.strm.avail_in)break;if(a=ie(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=a,e.lookahead+e.insert>=U)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<=U)if(n=r._tr_tally(e,e.strstart-e.match_start,e.match_length-U),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=U){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=U&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=U-1)),e.prev_length>=U&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-U,n=r._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-U),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(l=2,n-=16),r<1||r>A||a!==E||n<8||n>15||t<0||t>9||s<0||s>x)return Q(e,g);8===n&&(n=9);var o=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=E,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*N),this.dyn_dtree=new i.Buf16(2*(2*B+1)),this.bl_tree=new i.Buf16(2*(2*T+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(D+1),this.heap=new i.Buf16(2*O+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=o,o.strm=e,o.wrap=l,o.gzhead=null,o.w_bits=n,o.w_size=1<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(se(e),0===e.lookahead&&t===d)return G;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+a;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return G;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),G)}),new de(4,4,8,4,le),new de(4,5,16,8,le),new de(4,6,32,32,le),new de(4,4,16,16,oe),new de(8,16,32,32,oe),new de(8,16,128,128,oe),new de(8,32,128,256,oe),new de(32,128,258,1024,oe),new de(32,258,258,4096,oe)],t.deflateInit=function(e,t){return fe(e,t,E,Z,R,z)},t.deflateInit2=fe,t.deflateReset=_e,t.deflateResetKeep=he,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?g:(e.state.gzhead=t,c):g},t.deflate=function(e,t){var a,i,s,o;if(!e||!e.state||t>u||t<0)return e?Q(e,g):g;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Y&&t!==f)return Q(e,0===e.avail_out?w:g);if(i.strm=e,a=i.last_flush,i.last_flush=t,i.status===L)if(2===i.wrap)e.adler=0,ae(i,31),ae(i,139),ae(i,8),i.gzhead?(ae(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ae(i,255&i.gzhead.time),ae(i,i.gzhead.time>>8&255),ae(i,i.gzhead.time>>16&255),ae(i,i.gzhead.time>>24&255),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ae(i,255&i.gzhead.extra.length),ae(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=l(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=C):(ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,0),ae(i,9===i.level?2:i.strategy>=k||i.level<2?4:0),ae(i,J),i.status=K);else{var m=E+(i.w_bits-8<<4)<<8;m|=(i.strategy>=k||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(m|=F),m+=31-m%31,i.status=K,ne(i,m),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===C)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending!==i.pending_buf_size));)ae(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=P)}else i.status=P;if(i.status===P)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),ee(e),s=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexs&&(e.adler=l(e.adler,i.pending_buf,i.pending-s,s)),0===o&&(i.status=H)}else i.status=H;if(i.status===H&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(ae(i,255&e.adler),ae(i,e.adler>>8&255),e.adler=0,i.status=K)):i.status=K),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,c}else if(0===e.avail_in&&V(t)<=V(a)&&t!==f)return Q(e,w);if(i.status===Y&&0!==e.avail_in)return Q(e,w);if(0!==e.avail_in||0!==i.lookahead||t!==d&&i.status!==Y){var p=i.strategy===k?function(e,t){for(var a;;){if(0===e.lookahead&&(se(e),0===e.lookahead)){if(t===d)return G;break}if(e.match_length=0,a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):i.strategy===y?function(e,t){for(var a,n,i,s,l=e.window;;){if(e.lookahead<=I){if(se(e),e.lookahead<=I&&t===d)return G;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=U&&e.strstart>0&&(n=l[i=e.strstart-1])===l[++i]&&n===l[++i]&&n===l[++i]){s=e.strstart+I;do{}while(n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&n===l[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=U?(a=r._tr_tally(e,1,e.match_length-U),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(te(e,!1),0===e.strm.avail_out))return G}return e.insert=0,t===f?(te(e,!0),0===e.strm.avail_out?W:q):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?G:X}(i,t):n[i.level].func(i,t);if(p!==W&&p!==q||(i.status=Y),p===G||p===W)return 0===e.avail_out&&(i.last_flush=-1),c;if(p===X&&(t===h?r._tr_align(i):t!==u&&(r._tr_stored_block(i,0,0,!1),t===_&&($(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,c}return t!==f?c:i.wrap<=0?b:(2===i.wrap?(ae(i,255&e.adler),ae(i,e.adler>>8&255),ae(i,e.adler>>16&255),ae(i,e.adler>>24&255),ae(i,255&e.total_in),ae(i,e.total_in>>8&255),ae(i,e.total_in>>16&255),ae(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?c:b)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==L&&t!==C&&t!==P&&t!==j&&t!==H&&t!==K&&t!==Y?Q(e,g):(e.state=null,t===K?Q(e,m):c):g},t.deflateSetDictionary=function(e,t){var a,n,r,l,o,d,h,_,f=t.length;if(!e||!e.state)return g;if(2===(l=(a=e.state).wrap)||1===l&&a.status!==L||a.lookahead)return g;for(1===l&&(e.adler=s(e.adler,t,f,0)),a.wrap=0,f>=a.w_size&&(0===l&&($(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new i.Buf8(a.w_size),i.arraySet(_,t,f-a.w_size,a.w_size,0),t=_,f=a.w_size),o=e.avail_in,d=e.next_in,h=e.input,e.avail_in=f,e.next_in=0,e.input=t,se(a);a.lookahead>=U;){n=a.strstart,r=a.lookahead-(U-1);do{a.ins_h=(a.ins_h<=0;)e[t]=0}var d=0,h=1,_=2,f=29,u=256,c=u+1+f,b=30,g=19,m=2*c+1,w=15,p=16,v=7,k=256,y=16,x=17,z=18,S=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],E=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],A=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],R=new Array(2*(c+2));o(R);var O=new Array(2*b);o(O);var B=new Array(512);o(B);var T=new Array(256);o(T);var N=new Array(f);o(N);var D,U,I,M=new Array(b);function F(e,t,a,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=a,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function L(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function C(e){return e<256?B[e]:B[256+(e>>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function j(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1}while(--t>0);return a>>>1}function Y(e,t,a){var n,i,r=new Array(w+1),s=0;for(n=1;n<=w;n++)r[n]=s=s+a[n-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=K(r[l]++,l))}}function G(e){var t;for(t=0;t8?P(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function W(e,t,a,n){var i=2*t,r=2*a;return e[i]>1;a>=1;a--)q(e,r,a);i=o;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],q(e,r,1),n=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=n,r[2*i]=r[2*a]+r[2*n],e.depth[i]=(e.depth[a]>=e.depth[n]?e.depth[a]:e.depth[n])+1,r[2*a+1]=r[2*n+1]=i,e.heap[1]=i++,q(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,n,i,r,s,l,o=t.dyn_tree,d=t.max_code,h=t.stat_desc.static_tree,_=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,u=t.stat_desc.extra_base,c=t.stat_desc.max_length,b=0;for(r=0;r<=w;r++)e.bl_count[r]=0;for(o[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;ac&&(r=c,b++),o[2*n+1]=r,n>d||(e.bl_count[r]++,s=0,n>=u&&(s=f[n-u]),l=o[2*n],e.opt_len+=l*(r+s),_&&(e.static_len+=l*(h[2*n+1]+s)));if(0!==b){do{for(r=c-1;0===e.bl_count[r];)r--;e.bl_count[r]--,e.bl_count[r+1]+=2,e.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(n=e.bl_count[r];0!==n;)(i=e.heap[--a])>d||(o[2*i+1]!==r&&(e.opt_len+=(r-o[2*i+1])*o[2*i],o[2*i+1]=r),n--)}}(e,t),Y(r,d,e.bl_count)}function V(e,t,a){var n,i,r=-1,s=t[1],l=0,o=7,d=4;for(0===s&&(o=138,d=3),t[2*(a+1)+1]=65535,n=0;n<=a;n++)i=s,s=t[2*(n+1)+1],++l>=7;n0?(e.strm.data_type===l&&(e.strm.data_type=function(e){var t,a=4093624447;for(t=0;t<=31;t++,a>>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return r;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t=3&&0===e.bl_tree[2*Z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(d=e.static_len+3+7>>>3)<=o&&(o=d)):o=d=a+5,a+4<=o&&-1!==t?te(e,t,a,n):e.strategy===i||d===o?(j(e,(h<<1)+(n?1:0),3),J(e,R,O)):(j(e,(_<<1)+(n?1:0),3),function(e,t,a,n){var i;for(j(e,t-257,5),j(e,a-1,5),j(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(T[a]+u+1)]++,e.dyn_dtree[2*C(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){j(e,h<<1,3),H(e,k,R),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,a){"use strict";var n=a(0),i=a(1),r=a(2),s=a(10),l=a(11),o=0,d=1,h=2,_=4,f=5,u=6,c=0,b=1,g=2,m=-2,w=-3,p=-4,v=-5,k=8,y=1,x=2,z=3,S=4,E=5,A=6,Z=7,R=8,O=9,B=10,T=11,N=12,D=13,U=14,I=15,M=16,F=17,L=18,C=19,P=20,j=21,H=22,K=23,Y=24,G=25,X=26,W=27,q=28,J=29,Q=30,V=31,$=32,ee=852,te=592,ae=15;function ne(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=y,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,c):m}function re(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):m}function se(e,t){var a,n;return e&&e.state?(n=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?m:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,re(e))):m}function le(e,t){var a,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(a=se(e,t))!==c&&(e.state=null),a):m}var oe,de,he=!0;function _e(e){if(he){var t;for(oe=new n.Buf32(512),de=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(l(d,e.lens,0,288,oe,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;l(h,e.lens,0,32,de,0,e.work,{bits:5}),he=!1}e.lencode=oe,e.lenbits=9,e.distcode=de,e.distbits=5}function fe(e,t,a,i){var r,s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(n.arraySet(s.window,t,a-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>i&&(r=i),n.arraySet(s.window,t,a-i,r,s.wnext),(i-=r)?(n.arraySet(s.window,t,a-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,a.check=r(a.check,Ae,2,0),le=0,oe=0,a.mode=x;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&le)<<8)+(le>>8))%31){e.msg="incorrect header check",a.mode=Q;break}if((15&le)!==k){e.msg="unknown compression method",a.mode=Q;break}if(oe-=4,ye=8+(15&(le>>>=4)),0===a.wbits)a.wbits=ye;else if(ye>a.wbits){e.msg="invalid window size",a.mode=Q;break}a.dmax=1<>8&1),512&a.flags&&(Ae[0]=255&le,Ae[1]=le>>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0,a.mode=z;case z:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,Ae[2]=le>>>16&255,Ae[3]=le>>>24&255,a.check=r(a.check,Ae,4,0)),le=0,oe=0,a.mode=S;case S:for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>8),512&a.flags&&(Ae[0]=255&le,Ae[1]=le>>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0,a.mode=E;case E:if(1024&a.flags){for(;oe<16;){if(0===re)break e;re--,le+=ee[ae++]<>>8&255,a.check=r(a.check,Ae,2,0)),le=0,oe=0}else a.head&&(a.head.extra=null);a.mode=A;case A:if(1024&a.flags&&((ue=a.length)>re&&(ue=re),ue&&(a.head&&(ye=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),n.arraySet(a.head.extra,ee,ae,ue,ye)),512&a.flags&&(a.check=r(a.check,ee,ue,ae)),re-=ue,ae+=ue,a.length-=ue),a.length))break e;a.length=0,a.mode=Z;case Z:if(2048&a.flags){if(0===re)break e;ue=0;do{ye=ee[ae+ue++],a.head&&ye&&a.length<65536&&(a.head.name+=String.fromCharCode(ye))}while(ye&&ue>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=N;break;case B:for(;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>=7&oe,oe-=7&oe,a.mode=W;break}for(;oe<3;){if(0===re)break e;re--,le+=ee[ae++]<>>=1)){case 0:a.mode=U;break;case 1:if(_e(a),a.mode=P,t===u){le>>>=2,oe-=2;break e}break;case 2:a.mode=F;break;case 3:e.msg="invalid block type",a.mode=Q}le>>>=2,oe-=2;break;case U:for(le>>>=7&oe,oe-=7&oe;oe<32;){if(0===re)break e;re--,le+=ee[ae++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=Q;break}if(a.length=65535&le,le=0,oe=0,a.mode=I,t===u)break e;case I:a.mode=M;case M:if(ue=a.length){if(ue>re&&(ue=re),ue>se&&(ue=se),0===ue)break e;n.arraySet(te,ee,ae,ue,ie),re-=ue,ae+=ue,se-=ue,ie+=ue,a.length-=ue;break}a.mode=N;break;case F:for(;oe<14;){if(0===re)break e;re--,le+=ee[ae++]<>>=5,oe-=5,a.ndist=1+(31&le),le>>>=5,oe-=5,a.ncode=4+(15&le),le>>>=4,oe-=4,a.nlen>286||a.ndist>30){e.msg="too many length or distance symbols",a.mode=Q;break}a.have=0,a.mode=L;case L:for(;a.have>>=3,oe-=3}for(;a.have<19;)a.lens[Ze[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,ze={bits:a.lenbits},xe=l(o,a.lens,0,19,a.lencode,0,a.work,ze),a.lenbits=ze.bits,xe){e.msg="invalid code lengths set",a.mode=Q;break}a.have=0,a.mode=C;case C:for(;a.have>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=ge,oe-=ge,a.lens[a.have++]=we;else{if(16===we){for(Se=ge+2;oe>>=ge,oe-=ge,0===a.have){e.msg="invalid bit length repeat",a.mode=Q;break}ye=a.lens[a.have-1],ue=3+(3&le),le>>>=2,oe-=2}else if(17===we){for(Se=ge+3;oe>>=ge)),le>>>=3,oe-=3}else{for(Se=ge+7;oe>>=ge)),le>>>=7,oe-=7}if(a.have+ue>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=Q;break}for(;ue--;)a.lens[a.have++]=ye}}if(a.mode===Q)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=Q;break}if(a.lenbits=9,ze={bits:a.lenbits},xe=l(d,a.lens,0,a.nlen,a.lencode,0,a.work,ze),a.lenbits=ze.bits,xe){e.msg="invalid literal/lengths set",a.mode=Q;break}if(a.distbits=6,a.distcode=a.distdyn,ze={bits:a.distbits},xe=l(h,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,ze),a.distbits=ze.bits,xe){e.msg="invalid distances set",a.mode=Q;break}if(a.mode=P,t===u)break e;case P:a.mode=j;case j:if(re>=6&&se>=258){e.next_out=ie,e.avail_out=se,e.next_in=ae,e.avail_in=re,a.hold=le,a.bits=oe,s(e,he),ie=e.next_out,te=e.output,se=e.avail_out,ae=e.next_in,ee=e.input,re=e.avail_in,le=a.hold,oe=a.bits,a.mode===N&&(a.back=-1);break}for(a.back=0;me=(Ee=a.lencode[le&(1<>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ee,!(pe+(ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,a.length=we,0===me){a.mode=X;break}if(32&me){a.back=-1,a.mode=N;break}if(64&me){e.msg="invalid literal/length code",a.mode=Q;break}a.extra=15&me,a.mode=H;case H:if(a.extra){for(Se=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=K;case K:for(;me=(Ee=a.distcode[le&(1<>>16&255,we=65535&Ee,!((ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>pe)])>>>16&255,we=65535&Ee,!(pe+(ge=Ee>>>24)<=oe);){if(0===re)break e;re--,le+=ee[ae++]<>>=pe,oe-=pe,a.back+=pe}if(le>>>=ge,oe-=ge,a.back+=ge,64&me){e.msg="invalid distance code",a.mode=Q;break}a.offset=we,a.extra=15&me,a.mode=Y;case Y:if(a.extra){for(Se=a.extra;oe>>=a.extra,oe-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=Q;break}a.mode=G;case G:if(0===se)break e;if(ue=he-se,a.offset>ue){if((ue=a.offset-ue)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=Q;break}ue>a.wnext?(ue-=a.wnext,ce=a.wsize-ue):ce=a.wnext-ue,ue>a.length&&(ue=a.length),be=a.window}else be=te,ce=ie-a.offset,ue=a.length;ue>se&&(ue=se),se-=ue,a.length-=ue;do{te[ie++]=be[ce++]}while(--ue);0===a.length&&(a.mode=j);break;case X:if(0===se)break e;te[ie++]=a.length,se--,a.mode=j;break;case W:if(a.wrap){for(;oe<32;){if(0===re)break e;re--,le|=ee[ae++]<>>=v=p>>>24,c-=v,0===(v=p>>>16&255))E[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<>>=v,c-=v),c<15&&(u+=S[n++]<>>=v=p>>>24,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<o){e.msg="invalid distance too far back",a.mode=30;break e}if(u>>>=v,c-=v,y>(v=r-s)){if((v=y-v)>h&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(x=0,z=f,0===_){if(x+=d-v,v2;)E[r++]=z[x++],E[r++]=z[x++],E[r++]=z[x++],k-=3;k&&(E[r++]=z[x++],k>1&&(E[r++]=z[x++]))}else{x=r-y;do{E[r++]=E[x++],E[r++]=E[x++],E[r++]=E[x++],k-=3}while(k>2);k&&(E[r++]=E[x++],k>1&&(E[r++]=E[x++]))}break}}break}}while(n>3,u&=(1<<(c-=k<<3))-1,e.next_in=n,e.next_out=r,e.avail_in=n=1&&0===U[E];E--);if(A>E&&(A=E),0===E)return d[h++]=20971520,d[h++]=20971520,f.bits=1,0;for(S=1;S0&&(0===e||1!==E))return-1;for(I[1]=0,x=1;x<15;x++)I[x+1]=I[x]+U[x];for(z=0;z852||2===e&&B>592)return 1;for(;;){p=x-R,_[z]w?(v=M[F+_[z]],k=N[D+_[z]]):(v=96,k=0),u=1<>R)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<>=1;if(0!==u?(T&=u-1,T+=u):T=0,z++,0==--U[x]){if(x===E)break;x=t[a+_[z]]}if(x>A&&(T&g)!==b){for(0===R&&(R=A),m+=S,O=1<<(Z=x-R);Z+R852||2===e&&B>592)return 1;d[b=T&g]=A<<24|Z<<16|m-h|0}}return 0!==T&&(d[m+T]=x-R<<24|64<<16|0),f.bits=A,0}},function(e,t,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}}]); \ No newline at end of file diff --git a/src/client.js b/src/client.js index 8117240..1191d15 100644 --- a/src/client.js +++ b/src/client.js @@ -105,7 +105,10 @@ export default class Client { clearTimeout(this._idleTimeout) // propagate the error upwards - this.onerror && this.onerror(err) + if (!this.onerror) { + throw err + } + this.onerror(err) } // diff --git a/src/imap.js b/src/imap.js index d6e258a..e3295f1 100644 --- a/src/imap.js +++ b/src/imap.js @@ -162,6 +162,10 @@ export default class Imap { * @returns {Promise} Resolves when the socket is closed */ close (error) { + if (this._enteredClosingState) { + return Promise.resolve() + } + this._enteredClosingState = true return new Promise((resolve) => { var tearDown = () => { // fulfill pending promises @@ -257,7 +261,10 @@ export default class Imap { var tag = 'W' + (++this._tagCounter) request.tag = tag - return new Promise((resolve, reject) => { + return new Promise(resolve => { + var reject = error => { + return resolve(this.close(error)) + } var data = { tag: tag, request: request,