parse-server 6.0.0-alpha.6 → 6.0.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Adapters/Cache/RedisCacheAdapter.js +49 -63
- package/lib/Adapters/PubSub/RedisPubSub.js +4 -6
- package/lib/Config.js +7 -3
- package/lib/Options/Definitions.js +3 -3
- package/lib/Options/docs.js +2 -2
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +10 -2
- package/lib/middlewares.js +6 -5
- package/package.json +7 -6
package/lib/middlewares.js
CHANGED
|
@@ -30,6 +30,8 @@ var _MongoStorageAdapter = _interopRequireDefault(require("./Adapters/Storage/Mo
|
|
|
30
30
|
|
|
31
31
|
var _PostgresStorageAdapter = _interopRequireDefault(require("./Adapters/Storage/Postgres/PostgresStorageAdapter"));
|
|
32
32
|
|
|
33
|
+
var _ipRangeCheck = _interopRequireDefault(require("ip-range-check"));
|
|
34
|
+
|
|
33
35
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
34
36
|
|
|
35
37
|
const DEFAULT_ALLOWED_HEADERS = 'X-Parse-Master-Key, X-Parse-REST-API-Key, X-Parse-Javascript-Key, X-Parse-Application-Id, X-Parse-Client-Version, X-Parse-Session-Token, X-Requested-With, X-Parse-Revocable-Session, X-Parse-Request-Id, Content-Type, Pragma, Cache-Control';
|
|
@@ -191,13 +193,12 @@ function handleParseHeaders(req, res, next) {
|
|
|
191
193
|
req.config.headers = req.headers || {};
|
|
192
194
|
req.config.ip = clientIp;
|
|
193
195
|
req.info = info;
|
|
196
|
+
let isMaster = info.masterKey === req.config.masterKey;
|
|
194
197
|
|
|
195
|
-
if (
|
|
196
|
-
|
|
198
|
+
if (isMaster && !(0, _ipRangeCheck.default)(clientIp, req.config.masterKeyIps || [])) {
|
|
199
|
+
isMaster = false;
|
|
197
200
|
}
|
|
198
201
|
|
|
199
|
-
var isMaster = info.masterKey === req.config.masterKey;
|
|
200
|
-
|
|
201
202
|
if (isMaster) {
|
|
202
203
|
req.auth = new _Auth.default.Auth({
|
|
203
204
|
config: req.config,
|
|
@@ -526,4 +527,4 @@ function malformedContext(req, res) {
|
|
|
526
527
|
error: 'Invalid object for context.'
|
|
527
528
|
});
|
|
528
529
|
}
|
|
529
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImNvbnRleHQiLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJlIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiYmFzaWNBdXRoIiwiaHR0cEF1dGgiLCJiYXNpY0F1dGhBcHBJZCIsIkFwcENhY2hlIiwiYm9keSIsIl9ub0JvZHkiLCJmaWxlVmlhSlNPTiIsIkJ1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiX0NvbnRlbnRUeXBlIiwiaGVhZGVycyIsImNsaWVudFNESyIsIkNsaWVudFNESyIsImZyb21TdHJpbmciLCJmaWxlRGF0YSIsImJhc2U2NCIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiYXBwIiwiY29uZmlnIiwiQ29uZmlnIiwiaXAiLCJtYXN0ZXJLZXlJcHMiLCJpbmRleE9mIiwiaXNNYXN0ZXIiLCJhdXRoIiwiQXV0aCIsImlzUmVhZE9ubHlNYXN0ZXIiLCJyZWFkT25seU1hc3RlcktleSIsImlzUmVhZE9ubHkiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJ1c2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjYXRjaCIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsImxvZ2dlckNvbnRyb2xsZXIiLCJVTktOT1dOX0VSUk9SIiwic3BsaXQiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsInNvY2tldCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJhbGxvd09yaWdpbiIsIm1ldGhvZCIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJlcnIiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImh0dHBTdGF0dXMiLCJjb2RlIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiT0JKRUNUX05PVF9GT1VORCIsInN0YXR1cyIsImpzb24iLCJtZXNzYWdlIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJzdGFjayIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJlbmQiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcXVlc3QiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInBhdGgiLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsIkRVUExJQ0FURV9WQUxVRSIsIkRVUExJQ0FURV9SRVFVRVNUIiwiSU5WQUxJRF9KU09OIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdBQ2xDLCtPQURLOzs7QUFHUCxNQUFNQyxrQkFBa0IsR0FBRyxVQUFVQyxHQUFWLEVBQWU7QUFDeEMsUUFBTUMsZUFBZSxHQUFHRCxHQUFHLENBQUNFLFdBQUosQ0FBZ0JDLE1BQWhCLEdBQXlCSCxHQUFHLENBQUNJLEdBQUosQ0FBUUQsTUFBekQ7QUFDQSxRQUFNRSxTQUFTLEdBQUdMLEdBQUcsQ0FBQ0UsV0FBSixDQUFnQkksS0FBaEIsQ0FBc0IsQ0FBdEIsRUFBeUJMLGVBQXpCLENBQWxCO0FBQ0EsU0FBT0QsR0FBRyxDQUFDTyxRQUFKLEdBQWUsS0FBZixHQUF1QlAsR0FBRyxDQUFDUSxHQUFKLENBQVEsTUFBUixDQUF2QixHQUF5Q0gsU0FBaEQ7QUFDRCxDQUpELEMsQ0FNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLGtCQUFULENBQTRCVCxHQUE1QixFQUFpQ1UsR0FBakMsRUFBc0NDLElBQXRDLEVBQTRDO0FBQ2pELE1BQUlDLEtBQUssR0FBR2Isa0JBQWtCLENBQUNDLEdBQUQsQ0FBOUI7QUFFQSxNQUFJYSxPQUFPLEdBQUcsRUFBZDs7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L0IsRUFBb0M7QUFDbENBLEVBQUFBLEdBQUcsQ0FBQ2tILE1BQUosQ0FBVyxHQUFYO0FBQ0FsSCxFQUFBQSxHQUFHLENBQUNtSCxJQUFKLENBQVM7QUFBRUosSUFBQUEsSUFBSSxFQUFFbkMsY0FBTUMsS0FBTixDQUFZMkUsWUFBcEI7QUFBa0M3RSxJQUFBQSxLQUFLLEVBQUU7QUFBekMsR0FBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGF1dGggZnJvbSAnLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi9Db25maWcnO1xuaW1wb3J0IENsaWVudFNESyBmcm9tICcuL0NsaWVudFNESyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL1Bvc3RncmVzL1Bvc3RncmVzU3RvcmFnZUFkYXB0ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgaW5mbyA9IHtcbiAgICBhcHBJZDogcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpLFxuICAgIHNlc3Npb25Ub2tlbjogcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyksXG4gICAgbWFzdGVyS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSxcbiAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICBjbGllbnRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LUtleScpLFxuICAgIGphdmFzY3JpcHRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtSmF2YXNjcmlwdC1LZXknKSxcbiAgICBkb3ROZXRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtV2luZG93cy1LZXknKSxcbiAgICByZXN0QVBJS2V5OiByZXEuZ2V0KCdYLVBhcnNlLVJFU1QtQVBJLUtleScpLFxuICAgIGNsaWVudFZlcnNpb246IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LVZlcnNpb24nKSxcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICB9O1xuXG4gIHZhciBiYXNpY0F1dGggPSBodHRwQXV0aChyZXEpO1xuXG4gIGlmIChiYXNpY0F1dGgpIHtcbiAgICB2YXIgYmFzaWNBdXRoQXBwSWQgPSBiYXNpY0F1dGguYXBwSWQ7XG4gICAgaWYgKEFwcENhY2hlLmdldChiYXNpY0F1dGhBcHBJZCkpIHtcbiAgICAgIGluZm8uYXBwSWQgPSBiYXNpY0F1dGhBcHBJZDtcbiAgICAgIGluZm8ubWFzdGVyS2V5ID0gYmFzaWNBdXRoLm1hc3RlcktleSB8fCBpbmZvLm1hc3RlcktleTtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IGJhc2ljQXV0aC5qYXZhc2NyaXB0S2V5IHx8IGluZm8uamF2YXNjcmlwdEtleTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxLmJvZHkpIHtcbiAgICAvLyBVbml0eSBTREsgc2VuZHMgYSBfbm9Cb2R5IGtleSB3aGljaCBuZWVkcyB0byBiZSByZW1vdmVkLlxuICAgIC8vIFVuY2xlYXIgYXQgdGhpcyBwb2ludCBpZiBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uXG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9ub0JvZHk7XG4gIH1cblxuICB2YXIgZmlsZVZpYUpTT04gPSBmYWxzZTtcblxuICBpZiAoIWluZm8uYXBwSWQgfHwgIUFwcENhY2hlLmdldChpbmZvLmFwcElkKSkge1xuICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgYXBwIGlkIG9uIHRoZSBib2R5LlxuICAgIGlmIChyZXEuYm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICB9XG4gICAgICBmaWxlVmlhSlNPTiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcS5ib2R5KSB7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX1Jldm9jYWJsZVNlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVxLmJvZHkgJiZcbiAgICAgIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkICYmXG4gICAgICBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpICYmXG4gICAgICAoIWluZm8ubWFzdGVyS2V5IHx8IEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkubWFzdGVyS2V5ID09PSBpbmZvLm1hc3RlcktleSlcbiAgICApIHtcbiAgICAgIGluZm8uYXBwSWQgPSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5IHx8ICcnO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5O1xuICAgICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZSBSRVNUIEFQSSBmb3JtYXRzIGdlbmVyYXRlZCBieSB0aGUgb3RoZXJcbiAgICAgIC8vIFNES3MgYXJlIGhhbmRsZWQgb2tcbiAgICAgIGlmIChyZXEuYm9keS5fQ2xpZW50VmVyc2lvbikge1xuICAgICAgICBpbmZvLmNsaWVudFZlcnNpb24gPSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpbmZvLmluc3RhbGxhdGlvbklkID0gcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gPSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fTWFzdGVyS2V5KSB7XG4gICAgICAgIGluZm8ubWFzdGVyS2V5ID0gcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQpIHtcbiAgICAgICAgaWYgKHJlcS5ib2R5Ll9jb250ZXh0IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fQ29udGVudFR5cGUpIHtcbiAgICAgICAgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmZvLnNlc3Npb25Ub2tlbiAmJiB0eXBlb2YgaW5mby5zZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgaW5mby5zZXNzaW9uVG9rZW4gPSBpbmZvLnNlc3Npb25Ub2tlbi50b1N0cmluZygpO1xuICB9XG5cbiAgaWYgKGluZm8uY2xpZW50VmVyc2lvbikge1xuICAgIGluZm8uY2xpZW50U0RLID0gQ2xpZW50U0RLLmZyb21TdHJpbmcoaW5mby5jbGllbnRWZXJzaW9uKTtcbiAgfVxuXG4gIGlmIChmaWxlVmlhSlNPTikge1xuICAgIHJlcS5maWxlRGF0YSA9IHJlcS5ib2R5LmZpbGVEYXRhO1xuICAgIC8vIFdlIG5lZWQgdG8gcmVwb3B1bGF0ZSByZXEuYm9keSB3aXRoIGEgYnVmZmVyXG4gICAgdmFyIGJhc2U2NCA9IHJlcS5ib2R5LmJhc2U2NDtcbiAgICByZXEuYm9keSA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgY29uc3QgY2xpZW50SXAgPSBnZXRDbGllbnRJcChyZXEpO1xuXG4gIGluZm8uYXBwID0gQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpO1xuICByZXEuY29uZmlnID0gQ29uZmlnLmdldChpbmZvLmFwcElkLCBtb3VudCk7XG4gIHJlcS5jb25maWcuaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IHt9O1xuICByZXEuY29uZmlnLmlwID0gY2xpZW50SXA7XG4gIHJlcS5pbmZvID0gaW5mbztcblxuICBpZiAoXG4gICAgaW5mby5tYXN0ZXJLZXkgJiZcbiAgICByZXEuY29uZmlnLm1hc3RlcktleUlwcyAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmluZGV4T2YoY2xpZW50SXApID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgdmFyIGlzTWFzdGVyID0gaW5mby5tYXN0ZXJLZXkgPT09IHJlcS5jb25maWcubWFzdGVyS2V5O1xuXG4gIGlmIChpc01hc3Rlcikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiB0cnVlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaXNSZWFkT25seU1hc3RlciA9IGluZm8ubWFzdGVyS2V5ID09PSByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5O1xuICBpZiAoXG4gICAgdHlwZW9mIHJlcS5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICYmXG4gICAgaXNSZWFkT25seU1hc3RlclxuICApIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogdHJ1ZSxcbiAgICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChyZXEudXJsID09ICcvbG9naW4nKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpbmZvLnNlc3Npb25Ub2tlbikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gaGFuZGxlIHRoZSB1cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uIHBhdGggb24gaXQncyBvd25cbiAgICAgIGlmIChcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gJiZcbiAgICAgICAgcmVxLnVybCA9PT0gJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJyAmJlxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbi5pbmRleE9mKCdyOicpICE9IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbihhdXRoID0+IHtcbiAgICAgIGlmIChhdXRoKSB7XG4gICAgICAgIHJlcS5hdXRoID0gYXV0aDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgZXJyb3Igc2NlbmFyaW8uXG4gICAgICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VTktOT1dOX0VSUk9SLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICBpZiAocmVxLmhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddKSB7XG4gICAgLy8gdHJ5IHRvIGdldCBmcm9tIHgtZm9yd2FyZWQtZm9yIGlmIGl0IHNldCAoYmVoaW5kIHJldmVyc2UgcHJveHkpXG4gICAgcmV0dXJuIHJlcS5oZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXS5zcGxpdCgnLCcpWzBdO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MpIHtcbiAgICAvLyBubyBwcm94eSwgdHJ5IGdldHRpbmcgZnJvbSBjb25uZWN0aW9uLnJlbW90ZUFkZHJlc3NcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcztcbiAgfSBlbHNlIGlmIChyZXEuc29ja2V0KSB7XG4gICAgLy8gdHJ5IHRvIGdldCBpdCBmcm9tIHJlcS5zb2NrZXRcbiAgICByZXR1cm4gcmVxLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnNvY2tldCkge1xuICAgIC8vIHRyeSB0byBnZXQgaXQgZm9ybSB0aGUgY29ubmVjdGlvbi5zb2NrZXRcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24uc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgbm9uIGFib3ZlLCBmYWxsYmFjay5cbiAgICByZXR1cm4gcmVxLmlwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGh0dHBBdXRoKHJlcSkge1xuICBpZiAoIShyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uKSByZXR1cm47XG5cbiAgdmFyIGhlYWRlciA9IChyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICB2YXIgYXBwSWQsIG1hc3RlcktleSwgamF2YXNjcmlwdEtleTtcblxuICAvLyBwYXJzZSBoZWFkZXJcbiAgdmFyIGF1dGhQcmVmaXggPSAnYmFzaWMgJztcblxuICB2YXIgbWF0Y2ggPSBoZWFkZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGF1dGhQcmVmaXgpO1xuXG4gIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgdmFyIGVuY29kZWRBdXRoID0gaGVhZGVyLnN1YnN0cmluZyhhdXRoUHJlZml4Lmxlbmd0aCwgaGVhZGVyLmxlbmd0aCk7XG4gICAgdmFyIGNyZWRlbnRpYWxzID0gZGVjb2RlQmFzZTY0KGVuY29kZWRBdXRoKS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBhcHBJZCA9IGNyZWRlbnRpYWxzWzBdO1xuICAgICAgdmFyIGtleSA9IGNyZWRlbnRpYWxzWzFdO1xuXG4gICAgICB2YXIganNLZXlQcmVmaXggPSAnamF2YXNjcmlwdC1rZXk9JztcblxuICAgICAgdmFyIG1hdGNoS2V5ID0ga2V5LmluZGV4T2YoanNLZXlQcmVmaXgpO1xuICAgICAgaWYgKG1hdGNoS2V5ID09IDApIHtcbiAgICAgICAgamF2YXNjcmlwdEtleSA9IGtleS5zdWJzdHJpbmcoanNLZXlQcmVmaXgubGVuZ3RoLCBrZXkubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hc3RlcktleSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhcHBJZDogYXBwSWQsIG1hc3RlcktleTogbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5OiBqYXZhc2NyaXB0S2V5IH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0Nyb3NzRG9tYWluKGFwcElkKSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBnZXRNb3VudEZvclJlcXVlc3QocmVxKSk7XG4gICAgbGV0IGFsbG93SGVhZGVycyA9IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93SGVhZGVycykge1xuICAgICAgYWxsb3dIZWFkZXJzICs9IGAsICR7Y29uZmlnLmFsbG93SGVhZGVycy5qb2luKCcsICcpfWA7XG4gICAgfVxuICAgIGNvbnN0IGFsbG93T3JpZ2luID0gKGNvbmZpZyAmJiBjb25maWcuYWxsb3dPcmlnaW4pIHx8ICcqJztcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbik7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsUFVULFBPU1QsREVMRVRFLE9QVElPTlMnKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJywgYWxsb3dIZWFkZXJzKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsICdYLVBhcnNlLUpvYi1TdGF0dXMtSWQsIFgtUGFyc2UtUHVzaC1TdGF0dXMtSWQnKTtcbiAgICAvLyBpbnRlcmNlcHQgT1BUSU9OUyBtZXRob2RcbiAgICBpZiAoJ09QVElPTlMnID09IHJlcS5tZXRob2QpIHtcbiAgICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd01ldGhvZE92ZXJyaWRlKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcgJiYgcmVxLmJvZHkuX21ldGhvZCkge1xuICAgIHJlcS5vcmlnaW5hbE1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgcmVxLm1ldGhvZCA9IHJlcS5ib2R5Ll9tZXRob2Q7XG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9tZXRob2Q7XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGxvZy5lcnJvcignUGFyc2UgZXJyb3I6ICcsIGVycik7XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgcmVzLmVuZCgne1wiZXJyb3JcIjpcInVuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZFwifScpO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoXG4gICAgIShcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIgfHxcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIFBvc3RncmVzU3RvcmFnZUFkYXB0ZXJcbiAgICApXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuIl19
|
|
530
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImNvbnRleHQiLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJlIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiYmFzaWNBdXRoIiwiaHR0cEF1dGgiLCJiYXNpY0F1dGhBcHBJZCIsIkFwcENhY2hlIiwiYm9keSIsIl9ub0JvZHkiLCJmaWxlVmlhSlNPTiIsIkJ1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiX0NvbnRlbnRUeXBlIiwiaGVhZGVycyIsImNsaWVudFNESyIsIkNsaWVudFNESyIsImZyb21TdHJpbmciLCJmaWxlRGF0YSIsImJhc2U2NCIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiYXBwIiwiY29uZmlnIiwiQ29uZmlnIiwiaXAiLCJpc01hc3RlciIsIm1hc3RlcktleUlwcyIsImF1dGgiLCJBdXRoIiwiaXNSZWFkT25seU1hc3RlciIsInJlYWRPbmx5TWFzdGVyS2V5IiwiaXNSZWFkT25seSIsImtleXMiLCJvbmVLZXlDb25maWd1cmVkIiwic29tZSIsImtleSIsInVuZGVmaW5lZCIsIm9uZUtleU1hdGNoZXMiLCJ1c2VyRnJvbUpXVCIsInVzZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJpbmRleE9mIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjYXRjaCIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsImxvZ2dlckNvbnRyb2xsZXIiLCJVTktOT1dOX0VSUk9SIiwic3BsaXQiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsInNvY2tldCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJhbGxvd09yaWdpbiIsIm1ldGhvZCIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJlcnIiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImh0dHBTdGF0dXMiLCJjb2RlIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiT0JKRUNUX05PVF9GT1VORCIsInN0YXR1cyIsImpzb24iLCJtZXNzYWdlIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJzdGFjayIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJlbmQiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcXVlc3QiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInBhdGgiLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsIkRVUExJQ0FURV9WQUxVRSIsIkRVUExJQ0FURV9SRVFVRVNUIiwiSU5WQUxJRF9KU09OIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdBQ2xDLCtPQURLOzs7QUFHUCxNQUFNQyxrQkFBa0IsR0FBRyxVQUFVQyxHQUFWLEVBQWU7QUFDeEMsUUFBTUMsZUFBZSxHQUFHRCxHQUFHLENBQUNFLFdBQUosQ0FBZ0JDLE1BQWhCLEdBQXlCSCxHQUFHLENBQUNJLEdBQUosQ0FBUUQsTUFBekQ7QUFDQSxRQUFNRSxTQUFTLEdBQUdMLEdBQUcsQ0FBQ0UsV0FBSixDQUFnQkksS0FBaEIsQ0FBc0IsQ0FBdEIsRUFBeUJMLGVBQXpCLENBQWxCO0FBQ0EsU0FBT0QsR0FBRyxDQUFDTyxRQUFKLEdBQWUsS0FBZixHQUF1QlAsR0FBRyxDQUFDUSxHQUFKLENBQVEsTUFBUixDQUF2QixHQUF5Q0gsU0FBaEQ7QUFDRCxDQUpELEMsQ0FNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLGtCQUFULENBQTRCVCxHQUE1QixFQUFpQ1UsR0FBakMsRUFBc0NDLElBQXRDLEVBQTRDO0FBQ2pELE1BQUlDLEtBQUssR0FBR2Isa0JBQWtCLENBQUNDLEdBQUQsQ0FBOUI7QUFFQSxNQUFJYSxPQUFPLEdBQUcs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QUFZMkUsWUFBcEI7QUFBa0M3RSxJQUFBQSxLQUFLLEVBQUU7QUFBekMsR0FBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGF1dGggZnJvbSAnLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi9Db25maWcnO1xuaW1wb3J0IENsaWVudFNESyBmcm9tICcuL0NsaWVudFNESyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL1Bvc3RncmVzL1Bvc3RncmVzU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IGlwUmFuZ2VDaGVjayBmcm9tICdpcC1yYW5nZS1jaGVjayc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FMTE9XRURfSEVBREVSUyA9XG4gICdYLVBhcnNlLU1hc3Rlci1LZXksIFgtUGFyc2UtUkVTVC1BUEktS2V5LCBYLVBhcnNlLUphdmFzY3JpcHQtS2V5LCBYLVBhcnNlLUFwcGxpY2F0aW9uLUlkLCBYLVBhcnNlLUNsaWVudC1WZXJzaW9uLCBYLVBhcnNlLVNlc3Npb24tVG9rZW4sIFgtUmVxdWVzdGVkLVdpdGgsIFgtUGFyc2UtUmV2b2NhYmxlLVNlc3Npb24sIFgtUGFyc2UtUmVxdWVzdC1JZCwgQ29udGVudC1UeXBlLCBQcmFnbWEsIENhY2hlLUNvbnRyb2wnO1xuXG5jb25zdCBnZXRNb3VudEZvclJlcXVlc3QgPSBmdW5jdGlvbiAocmVxKSB7XG4gIGNvbnN0IG1vdW50UGF0aExlbmd0aCA9IHJlcS5vcmlnaW5hbFVybC5sZW5ndGggLSByZXEudXJsLmxlbmd0aDtcbiAgY29uc3QgbW91bnRQYXRoID0gcmVxLm9yaWdpbmFsVXJsLnNsaWNlKDAsIG1vdW50UGF0aExlbmd0aCk7XG4gIHJldHVybiByZXEucHJvdG9jb2wgKyAnOi8vJyArIHJlcS5nZXQoJ2hvc3QnKSArIG1vdW50UGF0aDtcbn07XG5cbi8vIENoZWNrcyB0aGF0IHRoZSByZXF1ZXN0IGlzIGF1dGhvcml6ZWQgZm9yIHRoaXMgYXBwIGFuZCBjaGVja3MgdXNlclxuLy8gYXV0aCB0b28uXG4vLyBUaGUgYm9keXBhcnNlciBzaG91bGQgcnVuIGJlZm9yZSB0aGlzIG1pZGRsZXdhcmUuXG4vLyBBZGRzIGluZm8gdG8gdGhlIHJlcXVlc3Q6XG4vLyByZXEuY29uZmlnIC0gdGhlIENvbmZpZyBmb3IgdGhpcyBhcHBcbi8vIHJlcS5hdXRoIC0gdGhlIEF1dGggZm9yIHRoaXMgcmVxdWVzdFxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlSGVhZGVycyhyZXEsIHJlcywgbmV4dCkge1xuICB2YXIgbW91bnQgPSBnZXRNb3VudEZvclJlcXVlc3QocmVxKTtcblxuICBsZXQgY29udGV4dCA9IHt9O1xuICBpZiAocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb250ZXh0ID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUNsb3VkLUNvbnRleHQnKSk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG4gIHZhciBpbmZvID0ge1xuICAgIGFwcElkOiByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyksXG4gICAgc2Vzc2lvblRva2VuOiByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKSxcbiAgICBtYXN0ZXJLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpLFxuICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgIGNsaWVudEtleTogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtS2V5JyksXG4gICAgamF2YXNjcmlwdEtleTogcmVxLmdldCgnWC1QYXJzZS1KYXZhc2NyaXB0LUtleScpLFxuICAgIGRvdE5ldEtleTogcmVxLmdldCgnWC1QYXJzZS1XaW5kb3dzLUtleScpLFxuICAgIHJlc3RBUElLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtUkVTVC1BUEktS2V5JyksXG4gICAgY2xpZW50VmVyc2lvbjogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtVmVyc2lvbicpLFxuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gIH07XG5cbiAgdmFyIGJhc2ljQXV0aCA9IGh0dHBBdXRoKHJlcSk7XG5cbiAgaWYgKGJhc2ljQXV0aCkge1xuICAgIHZhciBiYXNpY0F1dGhBcHBJZCA9IGJhc2ljQXV0aC5hcHBJZDtcbiAgICBpZiAoQXBwQ2FjaGUuZ2V0KGJhc2ljQXV0aEFwcElkKSkge1xuICAgICAgaW5mby5hcHBJZCA9IGJhc2ljQXV0aEFwcElkO1xuICAgICAgaW5mby5tYXN0ZXJLZXkgPSBiYXNpY0F1dGgubWFzdGVyS2V5IHx8IGluZm8ubWFzdGVyS2V5O1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gYmFzaWNBdXRoLmphdmFzY3JpcHRLZXkgfHwgaW5mby5qYXZhc2NyaXB0S2V5O1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYm9keSkge1xuICAgIC8vIFVuaXR5IFNESyBzZW5kcyBhIF9ub0JvZHkga2V5IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAgLy8gVW5jbGVhciBhdCB0aGlzIHBvaW50IGlmIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi5cbiAgICBkZWxldGUgcmVxLmJvZHkuX25vQm9keTtcbiAgfVxuXG4gIHZhciBmaWxlVmlhSlNPTiA9IGZhbHNlO1xuXG4gIGlmICghaW5mby5hcHBJZCB8fCAhQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpKSB7XG4gICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBhcHAgaWQgb24gdGhlIGJvZHkuXG4gICAgaWYgKHJlcS5ib2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAvLyBUaGUgb25seSBjaGFuY2UgdG8gZmluZCB0aGUgYXBwIGlkIGlzIGlmIHRoaXMgaXMgYSBmaWxlXG4gICAgICAvLyB1cGxvYWQgdGhhdCBhY3R1YWxseSBpcyBhIEpTT04gYm9keS4gU28gdHJ5IHRvIHBhcnNlIGl0LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzY1ODlcbiAgICAgIC8vIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0aGUgY2xpZW50IGlzIHRyeWluZyB0byB1cGxvYWQgYSBmaWxlIGJ1dCBmb3Jnb3RcbiAgICAgIC8vIHRvIHByb3ZpZGUgeC1wYXJzZS1hcHAtaWQgaW4gaGVhZGVyIGFuZCBwYXJzZSBhIGJpbmFyeSBmaWxlIHdpbGwgZmFpbFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxLmJvZHkgPSBKU09OLnBhcnNlKHJlcS5ib2R5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgaWYgKHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uKSB7XG4gICAgICAgIGluZm8uY2xpZW50VmVyc2lvbiA9IHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0NsaWVudFZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX0luc3RhbGxhdGlvbklkKSB7XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCkge1xuICAgICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICBpbmZvLmNvbnRleHQgPSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5mby5jb250ZXh0ID0gSlNPTi5wYXJzZShyZXEuYm9keS5fY29udGV4dCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGluZm8uY29udGV4dCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgICAgICAgIHRocm93ICdDb250ZXh0IGlzIG5vdCBhbiBvYmplY3QnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10gPSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZm8uc2Vzc2lvblRva2VuICYmIHR5cGVvZiBpbmZvLnNlc3Npb25Ub2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IGluZm8uc2Vzc2lvblRva2VuLnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoaW5mby5jbGllbnRWZXJzaW9uKSB7XG4gICAgaW5mby5jbGllbnRTREsgPSBDbGllbnRTREsuZnJvbVN0cmluZyhpbmZvLmNsaWVudFZlcnNpb24pO1xuICB9XG5cbiAgaWYgKGZpbGVWaWFKU09OKSB7XG4gICAgcmVxLmZpbGVEYXRhID0gcmVxLmJvZHkuZmlsZURhdGE7XG4gICAgLy8gV2UgbmVlZCB0byByZXBvcHVsYXRlIHJlcS5ib2R5IHdpdGggYSBidWZmZXJcbiAgICB2YXIgYmFzZTY0ID0gcmVxLmJvZHkuYmFzZTY0O1xuICAgIHJlcS5ib2R5ID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG5cbiAgaW5mby5hcHAgPSBBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCk7XG4gIHJlcS5jb25maWcgPSBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIGxldCBpc01hc3RlciA9IGluZm8ubWFzdGVyS2V5ID09PSByZXEuY29uZmlnLm1hc3RlcktleTtcbiAgaWYgKGlzTWFzdGVyICYmICFpcFJhbmdlQ2hlY2soY2xpZW50SXAsIHJlcS5jb25maWcubWFzdGVyS2V5SXBzIHx8IFtdKSkge1xuICAgIGlzTWFzdGVyID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNNYXN0ZXIpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogdHJ1ZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGlzUmVhZE9ubHlNYXN0ZXIgPSBpbmZvLm1hc3RlcktleSA9PT0gcmVxLmNvbmZpZy5yZWFkT25seU1hc3RlcktleTtcbiAgaWYgKFxuICAgIHR5cGVvZiByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICE9ICd1bmRlZmluZWQnICYmXG4gICAgcmVxLmNvbmZpZy5yZWFkT25seU1hc3RlcktleSAmJlxuICAgIGlzUmVhZE9ubHlNYXN0ZXJcbiAgKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IHRydWUsXG4gICAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDbGllbnQga2V5cyBhcmUgbm90IHJlcXVpcmVkIGluIHBhcnNlLXNlcnZlciwgYnV0IGlmIGFueSBoYXZlIGJlZW4gY29uZmlndXJlZCBpbiB0aGUgc2VydmVyLCB2YWxpZGF0ZSB0aGVtXG4gIC8vICB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvci5cbiAgY29uc3Qga2V5cyA9IFsnY2xpZW50S2V5JywgJ2phdmFzY3JpcHRLZXknLCAnZG90TmV0S2V5JywgJ3Jlc3RBUElLZXknXTtcbiAgY29uc3Qgb25lS2V5Q29uZmlndXJlZCA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkO1xuICB9KTtcbiAgY29uc3Qgb25lS2V5TWF0Y2hlcyA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkICYmIGluZm9ba2V5XSA9PT0gcmVxLmNvbmZpZ1trZXldO1xuICB9KTtcblxuICBpZiAob25lS2V5Q29uZmlndXJlZCAmJiAhb25lS2V5TWF0Y2hlcykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAocmVxLnVybCA9PSAnL2xvZ2luJykge1xuICAgIGRlbGV0ZSBpbmZvLnNlc3Npb25Ub2tlbjtcbiAgfVxuXG4gIGlmIChyZXEudXNlckZyb21KV1QpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICB1c2VyOiByZXEudXNlckZyb21KV1QsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIGhhbmRsZSB0aGUgdXBncmFkZVRvUmV2b2NhYmxlU2Vzc2lvbiBwYXRoIG9uIGl0J3Mgb3duXG4gICAgICBpZiAoXG4gICAgICAgIGluZm8uc2Vzc2lvblRva2VuICYmXG4gICAgICAgIHJlcS51cmwgPT09ICcvdXBncmFkZVRvUmV2b2NhYmxlU2Vzc2lvbicgJiZcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oYXV0aCA9PiB7XG4gICAgICBpZiAoYXV0aCkge1xuICAgICAgICByZXEuYXV0aCA9IGF1dGg7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGVycm9yIHNjZW5hcmlvLlxuICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoJ2Vycm9yIGdldHRpbmcgYXV0aCBmb3Igc2Vzc2lvblRva2VuJywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRJcChyZXEpIHtcbiAgaWYgKHJlcS5oZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSkge1xuICAgIC8vIHRyeSB0byBnZXQgZnJvbSB4LWZvcndhcmVkLWZvciBpZiBpdCBzZXQgKGJlaGluZCByZXZlcnNlIHByb3h5KVxuICAgIHJldHVybiByZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10uc3BsaXQoJywnKVswXTtcbiAgfSBlbHNlIGlmIChyZXEuY29ubmVjdGlvbiAmJiByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzKSB7XG4gICAgLy8gbm8gcHJveHksIHRyeSBnZXR0aW5nIGZyb20gY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzXG4gICAgcmV0dXJuIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gIH0gZWxzZSBpZiAocmVxLnNvY2tldCkge1xuICAgIC8vIHRyeSB0byBnZXQgaXQgZnJvbSByZXEuc29ja2V0XG4gICAgcmV0dXJuIHJlcS5zb2NrZXQucmVtb3RlQWRkcmVzcztcbiAgfSBlbHNlIGlmIChyZXEuY29ubmVjdGlvbiAmJiByZXEuY29ubmVjdGlvbi5zb2NrZXQpIHtcbiAgICAvLyB0cnkgdG8gZ2V0IGl0IGZvcm0gdGhlIGNvbm5lY3Rpb24uc29ja2V0XG4gICAgcmV0dXJuIHJlcS5jb25uZWN0aW9uLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIG5vbiBhYm92ZSwgZmFsbGJhY2suXG4gICAgcmV0dXJuIHJlcS5pcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBodHRwQXV0aChyZXEpIHtcbiAgaWYgKCEocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgcmV0dXJuO1xuXG4gIHZhciBoZWFkZXIgPSAocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgdmFyIGFwcElkLCBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk7XG5cbiAgLy8gcGFyc2UgaGVhZGVyXG4gIHZhciBhdXRoUHJlZml4ID0gJ2Jhc2ljICc7XG5cbiAgdmFyIG1hdGNoID0gaGVhZGVyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhdXRoUHJlZml4KTtcblxuICBpZiAobWF0Y2ggPT0gMCkge1xuICAgIHZhciBlbmNvZGVkQXV0aCA9IGhlYWRlci5zdWJzdHJpbmcoYXV0aFByZWZpeC5sZW5ndGgsIGhlYWRlci5sZW5ndGgpO1xuICAgIHZhciBjcmVkZW50aWFscyA9IGRlY29kZUJhc2U2NChlbmNvZGVkQXV0aCkuc3BsaXQoJzonKTtcblxuICAgIGlmIChjcmVkZW50aWFscy5sZW5ndGggPT0gMikge1xuICAgICAgYXBwSWQgPSBjcmVkZW50aWFsc1swXTtcbiAgICAgIHZhciBrZXkgPSBjcmVkZW50aWFsc1sxXTtcblxuICAgICAgdmFyIGpzS2V5UHJlZml4ID0gJ2phdmFzY3JpcHQta2V5PSc7XG5cbiAgICAgIHZhciBtYXRjaEtleSA9IGtleS5pbmRleE9mKGpzS2V5UHJlZml4KTtcbiAgICAgIGlmIChtYXRjaEtleSA9PSAwKSB7XG4gICAgICAgIGphdmFzY3JpcHRLZXkgPSBrZXkuc3Vic3RyaW5nKGpzS2V5UHJlZml4Lmxlbmd0aCwga2V5Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXN0ZXJLZXkgPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYXBwSWQ6IGFwcElkLCBtYXN0ZXJLZXk6IG1hc3RlcktleSwgamF2YXNjcmlwdEtleTogamF2YXNjcmlwdEtleSB9O1xufVxuXG5mdW5jdGlvbiBkZWNvZGVCYXNlNjQoc3RyKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShzdHIsICdiYXNlNjQnKS50b1N0cmluZygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dDcm9zc0RvbWFpbihhcHBJZCkge1xuICByZXR1cm4gKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBJZCwgZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSkpO1xuICAgIGxldCBhbGxvd0hlYWRlcnMgPSBERUZBVUxUX0FMTE9XRURfSEVBREVSUztcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hbGxvd0hlYWRlcnMpIHtcbiAgICAgIGFsbG93SGVhZGVycyArPSBgLCAke2NvbmZpZy5hbGxvd0hlYWRlcnMuam9pbignLCAnKX1gO1xuICAgIH1cbiAgICBjb25zdCBhbGxvd09yaWdpbiA9IChjb25maWcgJiYgY29uZmlnLmFsbG93T3JpZ2luKSB8fCAnKic7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgYWxsb3dPcmlnaW4pO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULFBVVCxQT1NULERFTEVURSxPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsIGFsbG93SGVhZGVycyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkLCBYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJyk7XG4gICAgLy8gaW50ZXJjZXB0IE9QVElPTlMgbWV0aG9kXG4gICAgaWYgKCdPUFRJT05TJyA9PSByZXEubWV0aG9kKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dNZXRob2RPdmVycmlkZShyZXEsIHJlcywgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5ib2R5Ll9tZXRob2QpIHtcbiAgICByZXEub3JpZ2luYWxNZXRob2QgPSByZXEubWV0aG9kO1xuICAgIHJlcS5tZXRob2QgPSByZXEuYm9keS5fbWV0aG9kO1xuICAgIGRlbGV0ZSByZXEuYm9keS5fbWV0aG9kO1xuICB9XG4gIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlRXJyb3JzKGVyciwgcmVxLCByZXMsIG5leHQpIHtcbiAgY29uc3QgbG9nID0gKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICBpZiAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgfVxuICAgIGxldCBodHRwU3RhdHVzO1xuICAgIC8vIFRPRE86IGZpbGwgb3V0IHRoaXMgbWFwcGluZ1xuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SOlxuICAgICAgICBodHRwU3RhdHVzID0gNTAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBodHRwU3RhdHVzID0gNDAwO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpO1xuICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBsb2cuZXJyb3IoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICB9IGVsc2UgaWYgKGVyci5zdGF0dXMgJiYgZXJyLm1lc3NhZ2UpIHtcbiAgICByZXMuc3RhdHVzKGVyci5zdGF0dXMpO1xuICAgIHJlcy5qc29uKHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmVycm9yKCdVbmNhdWdodCBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJywgZXJyLCBlcnIuc3RhY2spO1xuICAgIHJlcy5zdGF0dXMoNTAwKTtcbiAgICByZXMuanNvbih7XG4gICAgICBjb2RlOiBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnSW50ZXJuYWwgc2VydmVyIGVycm9yLicsXG4gICAgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXEsIHJlcywgbmV4dCkge1xuICBpZiAoIXJlcS5hdXRoLmlzTWFzdGVyKSB7XG4gICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgIHJlcy5lbmQoJ3tcImVycm9yXCI6XCJ1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWRcIn0nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxdWVzdCkge1xuICBpZiAoIXJlcXVlc3QuYXV0aC5pc01hc3Rlcikge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8qKlxuICogRGVkdXBsaWNhdGVzIGEgcmVxdWVzdCB0byBlbnN1cmUgaWRlbXBvdGVuY3kuIER1cGxpY2F0ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHJlcXVlc3QgSURcbiAqIGluIHRoZSByZXF1ZXN0IGhlYWRlci4gSWYgYSByZXF1ZXN0IGhhcyBubyByZXF1ZXN0IElELCBpdCBpcyBleGVjdXRlZCBhbnl3YXkuXG4gKiBAcGFyYW0geyp9IHJlcSBUaGUgcmVxdWVzdCB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIFByb21pc2U8e30+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kocmVxKSB7XG4gIC8vIEVuYWJsZSBmZWF0dXJlIG9ubHkgZm9yIE1vbmdvREJcbiAgaWYgKFxuICAgICEoXG4gICAgICByZXEuY29uZmlnLmRhdGFiYXNlLmFkYXB0ZXIgaW5zdGFuY2VvZiBNb25nb1N0b3JhZ2VBZGFwdGVyIHx8XG4gICAgICByZXEuY29uZmlnLmRhdGFiYXNlLmFkYXB0ZXIgaW5zdGFuY2VvZiBQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gR2V0IHBhcmFtZXRlcnNcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgY29uc3QgcmVxdWVzdElkID0gKChyZXEgfHwge30pLmhlYWRlcnMgfHwge30pWyd4LXBhcnNlLXJlcXVlc3QtaWQnXTtcbiAgY29uc3QgeyBwYXRocywgdHRsIH0gPSBjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zO1xuICBpZiAoIXJlcXVlc3RJZCB8fCAhY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBSZXF1ZXN0IHBhdGggbWF5IGNvbnRhaW4gdHJhaWxpbmcgc2xhc2hlcywgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCByZXF1ZXN0LCBzbyByZW1vdmVcbiAgLy8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyB0byBtYWtlIGl0IGVhc2llciB0byBzcGVjaWZ5IHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHJlcVBhdGggPSByZXEucGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvLCAnJyk7XG4gIC8vIERldGVybWluZSB3aGV0aGVyIGlkZW1wb3RlbmN5IGlzIGVuYWJsZWQgZm9yIGN1cnJlbnQgcmVxdWVzdCBwYXRoXG4gIGxldCBtYXRjaCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAvLyBBc3N1bWUgb25lIHdhbnRzIGEgcGF0aCB0byBhbHdheXMgbWF0Y2ggZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHByZXZlbnQgYW55IG1pc3Rha2VzXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdGguY2hhckF0KDApID09PSAnXicgPyBwYXRoIDogJ14nICsgcGF0aCk7XG4gICAgaWYgKHJlcVBhdGgubWF0Y2gocmVnZXgpKSB7XG4gICAgICBtYXRjaCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBUcnkgdG8gc3RvcmUgcmVxdWVzdFxuICBjb25zdCBleHBpcnlEYXRlID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXRTZWNvbmRzKG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpICsgdHRsKSk7XG4gIHJldHVybiByZXN0XG4gICAgLmNyZWF0ZShjb25maWcsIGF1dGgubWFzdGVyKGNvbmZpZyksICdfSWRlbXBvdGVuY3knLCB7XG4gICAgICByZXFJZDogcmVxdWVzdElkLFxuICAgICAgZXhwaXJlOiBQYXJzZS5fZW5jb2RlKGV4cGlyeURhdGUpLFxuICAgIH0pXG4gICAgLmNhdGNoKGUgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PSBQYXJzZS5FcnJvci5EVVBMSUNBVEVfVkFMVUUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkRVUExJQ0FURV9SRVFVRVNULCAnRHVwbGljYXRlIHJlcXVlc3QnKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKSB7XG4gIHJlcy5zdGF0dXMoNDAzKTtcbiAgcmVzLmVuZCgne1wiZXJyb3JcIjpcInVuYXV0aG9yaXplZFwifScpO1xufVxuXG5mdW5jdGlvbiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKSB7XG4gIHJlcy5zdGF0dXMoNDAwKTtcbiAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sIGVycm9yOiAnSW52YWxpZCBvYmplY3QgZm9yIGNvbnRleHQuJyB9KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-server",
|
|
3
|
-
"version": "6.0.0-alpha.
|
|
3
|
+
"version": "6.0.0-alpha.8",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
],
|
|
20
20
|
"license": "BSD-3-Clause",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@graphql-yoga/node": "2.6.0",
|
|
23
|
-
"@graphql-tools/utils": "8.12.0",
|
|
24
22
|
"@graphql-tools/merge": "8.3.6",
|
|
25
23
|
"@graphql-tools/schema": "9.0.4",
|
|
24
|
+
"@graphql-tools/utils": "8.12.0",
|
|
25
|
+
"@graphql-yoga/node": "2.6.0",
|
|
26
26
|
"@parse/fs-files-adapter": "1.2.2",
|
|
27
27
|
"@parse/push-adapter": "4.1.2",
|
|
28
28
|
"bcryptjs": "2.4.3",
|
|
@@ -34,9 +34,10 @@
|
|
|
34
34
|
"follow-redirects": "1.15.2",
|
|
35
35
|
"graphql": "16.6.0",
|
|
36
36
|
"graphql-list-fields": "2.0.2",
|
|
37
|
-
"graphql-tag": "2.12.6",
|
|
38
37
|
"graphql-relay": "0.10.0",
|
|
38
|
+
"graphql-tag": "2.12.6",
|
|
39
39
|
"intersect": "1.0.1",
|
|
40
|
+
"ip-range-check": "0.2.0",
|
|
40
41
|
"jsonwebtoken": "8.5.1",
|
|
41
42
|
"jwks-rsa": "2.1.5",
|
|
42
43
|
"ldapjs": "2.3.3",
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"pg-monitor": "1.5.0",
|
|
50
51
|
"pg-promise": "10.12.1",
|
|
51
52
|
"pluralize": "8.0.0",
|
|
52
|
-
"redis": "
|
|
53
|
+
"redis": "4.0.6",
|
|
53
54
|
"semver": "7.3.8",
|
|
54
55
|
"subscriptions-transport-ws": "0.11.0",
|
|
55
56
|
"tv4": "1.3.0",
|
|
@@ -59,7 +60,6 @@
|
|
|
59
60
|
"ws": "8.9.0"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
62
|
-
"graphql-tag": "2.12.6",
|
|
63
63
|
"@actions/core": "1.9.1",
|
|
64
64
|
"@apollo/client": "3.6.1",
|
|
65
65
|
"@babel/cli": "7.10.0",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"eslint-plugin-flowtype": "5.1.3",
|
|
87
87
|
"flow-bin": "0.119.1",
|
|
88
88
|
"form-data": "3.0.0",
|
|
89
|
+
"graphql-tag": "2.12.6",
|
|
89
90
|
"husky": "4.3.8",
|
|
90
91
|
"jasmine": "3.5.0",
|
|
91
92
|
"jasmine-spec-reporter": "7.0.0",
|