parse-server 5.4.0 → 5.4.2
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/Auth/apple.js +4 -14
- package/lib/Adapters/Auth/facebook.js +4 -14
- package/lib/Adapters/Auth/google.js +4 -14
- package/lib/Adapters/Auth/utils.js +22 -0
- package/lib/Options/Definitions.js +7 -1
- package/lib/Options/docs.js +2 -1
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +5 -1
- package/lib/middlewares.js +2 -17
- package/package.json +2 -2
package/lib/middlewares.js
CHANGED
|
@@ -293,22 +293,7 @@ function handleParseHeaders(req, res, next) {
|
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
function getClientIp(req) {
|
|
296
|
-
|
|
297
|
-
// try to get from x-forwared-for if it set (behind reverse proxy)
|
|
298
|
-
return req.headers['x-forwarded-for'].split(',')[0];
|
|
299
|
-
} else if (req.connection && req.connection.remoteAddress) {
|
|
300
|
-
// no proxy, try getting from connection.remoteAddress
|
|
301
|
-
return req.connection.remoteAddress;
|
|
302
|
-
} else if (req.socket) {
|
|
303
|
-
// try to get it from req.socket
|
|
304
|
-
return req.socket.remoteAddress;
|
|
305
|
-
} else if (req.connection && req.connection.socket) {
|
|
306
|
-
// try to get it form the connection.socket
|
|
307
|
-
return req.connection.socket.remoteAddress;
|
|
308
|
-
} else {
|
|
309
|
-
// if non above, fallback.
|
|
310
|
-
return req.ip;
|
|
311
|
-
}
|
|
296
|
+
return req.ip;
|
|
312
297
|
}
|
|
313
298
|
|
|
314
299
|
function httpAuth(req) {
|
|
@@ -526,4 +511,4 @@ function malformedContext(req, res) {
|
|
|
526
511
|
error: 'Invalid object for context.'
|
|
527
512
|
});
|
|
528
513
|
}
|
|
529
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImNvbnRleHQiLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJlIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiYmFzaWNBdXRoIiwiaHR0cEF1dGgiLCJiYXNpY0F1dGhBcHBJZCIsIkFwcENhY2hlIiwiYm9keSIsIl9ub0JvZHkiLCJmaWxlVmlhSlNPTiIsIkJ1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiX0NvbnRlbnRUeXBlIiwiaGVhZGVycyIsImNsaWVudFNESyIsIkNsaWVudFNESyIsImZyb21TdHJpbmciLCJmaWxlRGF0YSIsImJhc2U2NCIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiYXBwIiwiY29uZmlnIiwiQ29uZmlnIiwiaXAiLCJtYXN0ZXJLZXlJcHMiLCJpbmRleE9mIiwiaXNNYXN0ZXIiLCJhdXRoIiwiQXV0aCIsImlzUmVhZE9ubHlNYXN0ZXIiLCJyZWFkT25seU1hc3RlcktleSIsImlzUmVhZE9ubHkiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJ1c2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjYXRjaCIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsImxvZ2dlckNvbnRyb2xsZXIiLCJVTktOT1dOX0VSUk9SIiwic3BsaXQiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsInNvY2tldCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJhbGxvd09yaWdpbiIsIm1ldGhvZCIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJlcnIiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImh0dHBTdGF0dXMiLCJjb2RlIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiT0JKRUNUX05PVF9GT1VORCIsInN0YXR1cyIsImpzb24iLCJtZXNzYWdlIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJzdGFjayIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJlbmQiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcXVlc3QiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInBhdGgiLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsIkRVUExJQ0FURV9WQUxVRSIsIkRVUExJQ0FURV9SRVFVRVNUIiwiSU5WQUxJRF9KU09OIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdBQ2xDLCtPQURLOzs7QUFHUCxNQUFNQyxrQkFBa0IsR0FBRyxVQUFVQyxHQUFWLEVBQWU7QUFDeEMsUUFBTUMsZUFBZSxHQUFHRCxHQUFHLENBQUNFLFdBQUosQ0FBZ0JDLE1BQWhCLEdBQXlCSCxHQUFHLENBQUNJLEdBQUosQ0FBUUQsTUFBekQ7QUFDQSxRQUFNRSxTQUFTLEdBQUdMLEdBQUcsQ0FBQ0UsV0FBSixDQUFnQkksS0FBaEIsQ0FBc0IsQ0FBdEIsRUFBeUJMLGVBQXpCLENBQWxCO0FBQ0EsU0FBT0QsR0FBRyxDQUFDTyxRQUFKLEdBQWUsS0FBZixHQUF1QlAsR0FBRyxDQUFDUSxHQUFKLENBQVEsTUFBUixDQUF2QixHQUF5Q0gsU0FBaEQ7QUFDRCxDQUpELEMsQ0FNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLGtCQUFULENBQTRCVCxHQUE1QixFQUFpQ1UsR0FBakMsRUFBc0NDLElBQXRDLEVBQTRDO0FBQ2pELE1BQUlDLEtBQUssR0FBR2Isa0JBQWtCLENBQUNDLEdBQUQsQ0FBOUI7QUFFQSxNQUFJYSxPQUFPLEdBQUcsRUFBZDs7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L0IsRUFBb0M7QUFDbENBLEVBQUFBLEdBQUcsQ0FBQ2tILE1BQUosQ0FBVyxHQUFYO0FBQ0FsSCxFQUFBQSxHQUFHLENBQUNtSCxJQUFKLENBQVM7QUFBRUosSUFBQUEsSUFBSSxFQUFFbkMsY0FBTUMsS0FBTixDQUFZMkUsWUFBcEI7QUFBa0M3RSxJQUFBQSxLQUFLLEVBQUU7QUFBekMsR0FBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGF1dGggZnJvbSAnLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi9Db25maWcnO1xuaW1wb3J0IENsaWVudFNESyBmcm9tICcuL0NsaWVudFNESyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL1Bvc3RncmVzL1Bvc3RncmVzU3RvcmFnZUFkYXB0ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgaW5mbyA9IHtcbiAgICBhcHBJZDogcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpLFxuICAgIHNlc3Npb25Ub2tlbjogcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyksXG4gICAgbWFzdGVyS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSxcbiAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICBjbGllbnRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LUtleScpLFxuICAgIGphdmFzY3JpcHRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtSmF2YXNjcmlwdC1LZXknKSxcbiAgICBkb3ROZXRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtV2luZG93cy1LZXknKSxcbiAgICByZXN0QVBJS2V5OiByZXEuZ2V0KCdYLVBhcnNlLVJFU1QtQVBJLUtleScpLFxuICAgIGNsaWVudFZlcnNpb246IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LVZlcnNpb24nKSxcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICB9O1xuXG4gIHZhciBiYXNpY0F1dGggPSBodHRwQXV0aChyZXEpO1xuXG4gIGlmIChiYXNpY0F1dGgpIHtcbiAgICB2YXIgYmFzaWNBdXRoQXBwSWQgPSBiYXNpY0F1dGguYXBwSWQ7XG4gICAgaWYgKEFwcENhY2hlLmdldChiYXNpY0F1dGhBcHBJZCkpIHtcbiAgICAgIGluZm8uYXBwSWQgPSBiYXNpY0F1dGhBcHBJZDtcbiAgICAgIGluZm8ubWFzdGVyS2V5ID0gYmFzaWNBdXRoLm1hc3RlcktleSB8fCBpbmZvLm1hc3RlcktleTtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IGJhc2ljQXV0aC5qYXZhc2NyaXB0S2V5IHx8IGluZm8uamF2YXNjcmlwdEtleTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxLmJvZHkpIHtcbiAgICAvLyBVbml0eSBTREsgc2VuZHMgYSBfbm9Cb2R5IGtleSB3aGljaCBuZWVkcyB0byBiZSByZW1vdmVkLlxuICAgIC8vIFVuY2xlYXIgYXQgdGhpcyBwb2ludCBpZiBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uXG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9ub0JvZHk7XG4gIH1cblxuICB2YXIgZmlsZVZpYUpTT04gPSBmYWxzZTtcblxuICBpZiAoIWluZm8uYXBwSWQgfHwgIUFwcENhY2hlLmdldChpbmZvLmFwcElkKSkge1xuICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgYXBwIGlkIG9uIHRoZSBib2R5LlxuICAgIGlmIChyZXEuYm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICB9XG4gICAgICBmaWxlVmlhSlNPTiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcS5ib2R5KSB7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX1Jldm9jYWJsZVNlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVxLmJvZHkgJiZcbiAgICAgIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkICYmXG4gICAgICBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpICYmXG4gICAgICAoIWluZm8ubWFzdGVyS2V5IHx8IEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkubWFzdGVyS2V5ID09PSBpbmZvLm1hc3RlcktleSlcbiAgICApIHtcbiAgICAgIGluZm8uYXBwSWQgPSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5IHx8ICcnO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5O1xuICAgICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZSBSRVNUIEFQSSBmb3JtYXRzIGdlbmVyYXRlZCBieSB0aGUgb3RoZXJcbiAgICAgIC8vIFNES3MgYXJlIGhhbmRsZWQgb2tcbiAgICAgIGlmIChyZXEuYm9keS5fQ2xpZW50VmVyc2lvbikge1xuICAgICAgICBpbmZvLmNsaWVudFZlcnNpb24gPSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpbmZvLmluc3RhbGxhdGlvbklkID0gcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gPSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fTWFzdGVyS2V5KSB7XG4gICAgICAgIGluZm8ubWFzdGVyS2V5ID0gcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQpIHtcbiAgICAgICAgaWYgKHJlcS5ib2R5Ll9jb250ZXh0IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fQ29udGVudFR5cGUpIHtcbiAgICAgICAgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmZvLnNlc3Npb25Ub2tlbiAmJiB0eXBlb2YgaW5mby5zZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgaW5mby5zZXNzaW9uVG9rZW4gPSBpbmZvLnNlc3Npb25Ub2tlbi50b1N0cmluZygpO1xuICB9XG5cbiAgaWYgKGluZm8uY2xpZW50VmVyc2lvbikge1xuICAgIGluZm8uY2xpZW50U0RLID0gQ2xpZW50U0RLLmZyb21TdHJpbmcoaW5mby5jbGllbnRWZXJzaW9uKTtcbiAgfVxuXG4gIGlmIChmaWxlVmlhSlNPTikge1xuICAgIHJlcS5maWxlRGF0YSA9IHJlcS5ib2R5LmZpbGVEYXRhO1xuICAgIC8vIFdlIG5lZWQgdG8gcmVwb3B1bGF0ZSByZXEuYm9keSB3aXRoIGEgYnVmZmVyXG4gICAgdmFyIGJhc2U2NCA9IHJlcS5ib2R5LmJhc2U2NDtcbiAgICByZXEuYm9keSA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgY29uc3QgY2xpZW50SXAgPSBnZXRDbGllbnRJcChyZXEpO1xuXG4gIGluZm8uYXBwID0gQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpO1xuICByZXEuY29uZmlnID0gQ29uZmlnLmdldChpbmZvLmFwcElkLCBtb3VudCk7XG4gIHJlcS5jb25maWcuaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IHt9O1xuICByZXEuY29uZmlnLmlwID0gY2xpZW50SXA7XG4gIHJlcS5pbmZvID0gaW5mbztcblxuICBpZiAoXG4gICAgaW5mby5tYXN0ZXJLZXkgJiZcbiAgICByZXEuY29uZmlnLm1hc3RlcktleUlwcyAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmluZGV4T2YoY2xpZW50SXApID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgdmFyIGlzTWFzdGVyID0gaW5mby5tYXN0ZXJLZXkgPT09IHJlcS5jb25maWcubWFzdGVyS2V5O1xuXG4gIGlmIChpc01hc3Rlcikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiB0cnVlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaXNSZWFkT25seU1hc3RlciA9IGluZm8ubWFzdGVyS2V5ID09PSByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5O1xuICBpZiAoXG4gICAgdHlwZW9mIHJlcS5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICYmXG4gICAgaXNSZWFkT25seU1hc3RlclxuICApIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogdHJ1ZSxcbiAgICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChyZXEudXJsID09ICcvbG9naW4nKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpbmZvLnNlc3Npb25Ub2tlbikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gaGFuZGxlIHRoZSB1cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uIHBhdGggb24gaXQncyBvd25cbiAgICAgIGlmIChcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gJiZcbiAgICAgICAgcmVxLnVybCA9PT0gJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJyAmJlxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbi5pbmRleE9mKCdyOicpICE9IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbihhdXRoID0+IHtcbiAgICAgIGlmIChhdXRoKSB7XG4gICAgICAgIHJlcS5hdXRoID0gYXV0aDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgZXJyb3Igc2NlbmFyaW8uXG4gICAgICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VTktOT1dOX0VSUk9SLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICBpZiAocmVxLmhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddKSB7XG4gICAgLy8gdHJ5IHRvIGdldCBmcm9tIHgtZm9yd2FyZWQtZm9yIGlmIGl0IHNldCAoYmVoaW5kIHJldmVyc2UgcHJveHkpXG4gICAgcmV0dXJuIHJlcS5oZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXS5zcGxpdCgnLCcpWzBdO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MpIHtcbiAgICAvLyBubyBwcm94eSwgdHJ5IGdldHRpbmcgZnJvbSBjb25uZWN0aW9uLnJlbW90ZUFkZHJlc3NcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcztcbiAgfSBlbHNlIGlmIChyZXEuc29ja2V0KSB7XG4gICAgLy8gdHJ5IHRvIGdldCBpdCBmcm9tIHJlcS5zb2NrZXRcbiAgICByZXR1cm4gcmVxLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnNvY2tldCkge1xuICAgIC8vIHRyeSB0byBnZXQgaXQgZm9ybSB0aGUgY29ubmVjdGlvbi5zb2NrZXRcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24uc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgbm9uIGFib3ZlLCBmYWxsYmFjay5cbiAgICByZXR1cm4gcmVxLmlwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGh0dHBBdXRoKHJlcSkge1xuICBpZiAoIShyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uKSByZXR1cm47XG5cbiAgdmFyIGhlYWRlciA9IChyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICB2YXIgYXBwSWQsIG1hc3RlcktleSwgamF2YXNjcmlwdEtleTtcblxuICAvLyBwYXJzZSBoZWFkZXJcbiAgdmFyIGF1dGhQcmVmaXggPSAnYmFzaWMgJztcblxuICB2YXIgbWF0Y2ggPSBoZWFkZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGF1dGhQcmVmaXgpO1xuXG4gIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgdmFyIGVuY29kZWRBdXRoID0gaGVhZGVyLnN1YnN0cmluZyhhdXRoUHJlZml4Lmxlbmd0aCwgaGVhZGVyLmxlbmd0aCk7XG4gICAgdmFyIGNyZWRlbnRpYWxzID0gZGVjb2RlQmFzZTY0KGVuY29kZWRBdXRoKS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBhcHBJZCA9IGNyZWRlbnRpYWxzWzBdO1xuICAgICAgdmFyIGtleSA9IGNyZWRlbnRpYWxzWzFdO1xuXG4gICAgICB2YXIganNLZXlQcmVmaXggPSAnamF2YXNjcmlwdC1rZXk9JztcblxuICAgICAgdmFyIG1hdGNoS2V5ID0ga2V5LmluZGV4T2YoanNLZXlQcmVmaXgpO1xuICAgICAgaWYgKG1hdGNoS2V5ID09IDApIHtcbiAgICAgICAgamF2YXNjcmlwdEtleSA9IGtleS5zdWJzdHJpbmcoanNLZXlQcmVmaXgubGVuZ3RoLCBrZXkubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hc3RlcktleSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhcHBJZDogYXBwSWQsIG1hc3RlcktleTogbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5OiBqYXZhc2NyaXB0S2V5IH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0Nyb3NzRG9tYWluKGFwcElkKSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBnZXRNb3VudEZvclJlcXVlc3QocmVxKSk7XG4gICAgbGV0IGFsbG93SGVhZGVycyA9IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93SGVhZGVycykge1xuICAgICAgYWxsb3dIZWFkZXJzICs9IGAsICR7Y29uZmlnLmFsbG93SGVhZGVycy5qb2luKCcsICcpfWA7XG4gICAgfVxuICAgIGNvbnN0IGFsbG93T3JpZ2luID0gKGNvbmZpZyAmJiBjb25maWcuYWxsb3dPcmlnaW4pIHx8ICcqJztcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbik7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsUFVULFBPU1QsREVMRVRFLE9QVElPTlMnKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJywgYWxsb3dIZWFkZXJzKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsICdYLVBhcnNlLUpvYi1TdGF0dXMtSWQsIFgtUGFyc2UtUHVzaC1TdGF0dXMtSWQnKTtcbiAgICAvLyBpbnRlcmNlcHQgT1BUSU9OUyBtZXRob2RcbiAgICBpZiAoJ09QVElPTlMnID09IHJlcS5tZXRob2QpIHtcbiAgICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd01ldGhvZE92ZXJyaWRlKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcgJiYgcmVxLmJvZHkuX21ldGhvZCkge1xuICAgIHJlcS5vcmlnaW5hbE1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgcmVxLm1ldGhvZCA9IHJlcS5ib2R5Ll9tZXRob2Q7XG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9tZXRob2Q7XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGxvZy5lcnJvcignUGFyc2UgZXJyb3I6ICcsIGVycik7XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgcmVzLmVuZCgne1wiZXJyb3JcIjpcInVuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZFwifScpO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoXG4gICAgIShcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIgfHxcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIFBvc3RncmVzU3RvcmFnZUFkYXB0ZXJcbiAgICApXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuIl19
|
|
514
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImNvbnRleHQiLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJlIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiYmFzaWNBdXRoIiwiaHR0cEF1dGgiLCJiYXNpY0F1dGhBcHBJZCIsIkFwcENhY2hlIiwiYm9keSIsIl9ub0JvZHkiLCJmaWxlVmlhSlNPTiIsIkJ1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiX0NvbnRlbnRUeXBlIiwiaGVhZGVycyIsImNsaWVudFNESyIsIkNsaWVudFNESyIsImZyb21TdHJpbmciLCJmaWxlRGF0YSIsImJhc2U2NCIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiYXBwIiwiY29uZmlnIiwiQ29uZmlnIiwiaXAiLCJtYXN0ZXJLZXlJcHMiLCJpbmRleE9mIiwiaXNNYXN0ZXIiLCJhdXRoIiwiQXV0aCIsImlzUmVhZE9ubHlNYXN0ZXIiLCJyZWFkT25seU1hc3RlcktleSIsImlzUmVhZE9ubHkiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJ1c2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjYXRjaCIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsImxvZ2dlckNvbnRyb2xsZXIiLCJVTktOT1dOX0VSUk9SIiwiYXV0aG9yaXphdGlvbiIsImhlYWRlciIsImF1dGhQcmVmaXgiLCJtYXRjaCIsInRvTG93ZXJDYXNlIiwiZW5jb2RlZEF1dGgiLCJzdWJzdHJpbmciLCJjcmVkZW50aWFscyIsImRlY29kZUJhc2U2NCIsInNwbGl0IiwianNLZXlQcmVmaXgiLCJtYXRjaEtleSIsInN0ciIsImFsbG93Q3Jvc3NEb21haW4iLCJhbGxvd0hlYWRlcnMiLCJqb2luIiwiYWxsb3dPcmlnaW4iLCJtZXRob2QiLCJzZW5kU3RhdHVzIiwiYWxsb3dNZXRob2RPdmVycmlkZSIsIl9tZXRob2QiLCJvcmlnaW5hbE1ldGhvZCIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZXJyIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJodHRwU3RhdHVzIiwiY29kZSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwic3RhY2siLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZW5kIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJyZXF1ZXN0IiwicHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IiwiZGF0YWJhc2UiLCJhZGFwdGVyIiwiTW9uZ29TdG9yYWdlQWRhcHRlciIsIlBvc3RncmVzU3RvcmFnZUFkYXB0ZXIiLCJyZXF1ZXN0SWQiLCJwYXRocyIsInR0bCIsImlkZW1wb3RlbmN5T3B0aW9ucyIsInJlcVBhdGgiLCJwYXRoIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwiY2hhckF0IiwiZXhwaXJ5RGF0ZSIsIkRhdGUiLCJzZXRTZWNvbmRzIiwiZ2V0U2Vjb25kcyIsInJlc3QiLCJjcmVhdGUiLCJtYXN0ZXIiLCJyZXFJZCIsImV4cGlyZSIsIl9lbmNvZGUiLCJEVVBMSUNBVEVfVkFMVUUiLCJEVVBMSUNBVEVfUkVRVUVTVCIsIklOVkFMSURfSlNPTiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLHVCQUF1QixHQUNsQywrT0FESzs7O0FBR1AsTUFBTUMsa0JBQWtCLEdBQUcsVUFBVUMsR0FBVixFQUFlO0FBQ3hDLFFBQU1DLGVBQWUsR0FBR0QsR0FBRyxDQUFDRSxXQUFKLENBQWdCQyxNQUFoQixHQUF5QkgsR0FBRyxDQUFDSSxHQUFKLENBQVFELE1BQXpEO0FBQ0EsUUFBTUUsU0FBUyxHQUFHTCxHQUFHLENBQUNFLFdBQUosQ0FBZ0JJLEtBQWhCLENBQXNCLENBQXRCLEVBQXlCTCxlQUF6QixDQUFsQjtBQUNBLFNBQU9ELEdBQUcsQ0FBQ08sUUFBSixHQUFlLEtBQWYsR0FBdUJQLEdBQUcsQ0FBQ1EsR0FBSixDQUFRLE1BQVIsQ0FBdkIsR0FBeUNILFNBQWhEO0FBQ0QsQ0FKRCxDLENBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSSxrQkFBVCxDQUE0QlQsR0FBNUIsRUFBaUNVLEdBQWpDLEVBQXNDQyxJQUF0QyxFQUE0QztBQUNqRCxNQUFJQyxLQUFLLEdBQUdiLGtCQUFrQixDQUFDQyxHQUFELENBQTlCO0FBRUEsTUFBSWEsT0FBTyxHQUFHLEVBQWQ7O0FBQ0EsTUFBSWIsR0FBRyxDQUFDUSxHQUFKLENBQVEsdUJBQVIs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QyxjQUFNQyxLQUFOLENBQVlzRSxlQUExQixFQUEyQztBQUN6QyxZQUFNLElBQUl2RSxjQUFNQyxLQUFWLENBQWdCRCxjQUFNQyxLQUFOLENBQVl1RSxpQkFBNUIsRUFBK0MsbUJBQS9DLENBQU47QUFDRDs7QUFDRCxVQUFNMUksQ0FBTjtBQUNELEdBVkksQ0FBUDtBQVdEOztBQUVELFNBQVNvQixjQUFULENBQXdCeEMsR0FBeEIsRUFBNkJVLEdBQTdCLEVBQWtDO0FBQ2hDQSxFQUFBQSxHQUFHLENBQUMrRyxNQUFKLENBQVcsR0FBWDtBQUNBL0csRUFBQUEsR0FBRyxDQUFDdUgsR0FBSixDQUFRLDBCQUFSO0FBQ0Q7O0FBRUQsU0FBUzVHLGdCQUFULENBQTBCckIsR0FBMUIsRUFBK0JVLEdBQS9CLEVBQW9DO0FBQ2xDQSxFQUFBQSxHQUFHLENBQUMrRyxNQUFKLENBQVcsR0FBWDtBQUNBL0csRUFBQUEsR0FBRyxDQUFDZ0gsSUFBSixDQUFTO0FBQUVKLElBQUFBLElBQUksRUFBRWhDLGNBQU1DLEtBQU4sQ0FBWXdFLFlBQXBCO0FBQWtDMUUsSUFBQUEsS0FBSyxFQUFFO0FBQXpDLEdBQVQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBhdXRoIGZyb20gJy4vQXV0aCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBDbGllbnRTREsgZnJvbSAnLi9DbGllbnRTREsnO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi9yZXN0JztcbmltcG9ydCBNb25nb1N0b3JhZ2VBZGFwdGVyIGZyb20gJy4vQWRhcHRlcnMvU3RvcmFnZS9Nb25nby9Nb25nb1N0b3JhZ2VBZGFwdGVyJztcbmltcG9ydCBQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIGZyb20gJy4vQWRhcHRlcnMvU3RvcmFnZS9Qb3N0Z3Jlcy9Qb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTID1cbiAgJ1gtUGFyc2UtTWFzdGVyLUtleSwgWC1QYXJzZS1SRVNULUFQSS1LZXksIFgtUGFyc2UtSmF2YXNjcmlwdC1LZXksIFgtUGFyc2UtQXBwbGljYXRpb24tSWQsIFgtUGFyc2UtQ2xpZW50LVZlcnNpb24sIFgtUGFyc2UtU2Vzc2lvbi1Ub2tlbiwgWC1SZXF1ZXN0ZWQtV2l0aCwgWC1QYXJzZS1SZXZvY2FibGUtU2Vzc2lvbiwgWC1QYXJzZS1SZXF1ZXN0LUlkLCBDb250ZW50LVR5cGUsIFByYWdtYSwgQ2FjaGUtQ29udHJvbCc7XG5cbmNvbnN0IGdldE1vdW50Rm9yUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgY29uc3QgbW91bnRQYXRoTGVuZ3RoID0gcmVxLm9yaWdpbmFsVXJsLmxlbmd0aCAtIHJlcS51cmwubGVuZ3RoO1xuICBjb25zdCBtb3VudFBhdGggPSByZXEub3JpZ2luYWxVcmwuc2xpY2UoMCwgbW91bnRQYXRoTGVuZ3RoKTtcbiAgcmV0dXJuIHJlcS5wcm90b2NvbCArICc6Ly8nICsgcmVxLmdldCgnaG9zdCcpICsgbW91bnRQYXRoO1xufTtcblxuLy8gQ2hlY2tzIHRoYXQgdGhlIHJlcXVlc3QgaXMgYXV0aG9yaXplZCBmb3IgdGhpcyBhcHAgYW5kIGNoZWNrcyB1c2VyXG4vLyBhdXRoIHRvby5cbi8vIFRoZSBib2R5cGFyc2VyIHNob3VsZCBydW4gYmVmb3JlIHRoaXMgbWlkZGxld2FyZS5cbi8vIEFkZHMgaW5mbyB0byB0aGUgcmVxdWVzdDpcbi8vIHJlcS5jb25maWcgLSB0aGUgQ29uZmlnIGZvciB0aGlzIGFwcFxuLy8gcmVxLmF1dGggLSB0aGUgQXV0aCBmb3IgdGhpcyByZXF1ZXN0XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFkZXJzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuXG4gIGxldCBjb250ZXh0ID0ge307XG4gIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUNsb3VkLUNvbnRleHQnKSAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpKTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29udGV4dCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHRocm93ICdDb250ZXh0IGlzIG5vdCBhbiBvYmplY3QnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cbiAgdmFyIGluZm8gPSB7XG4gICAgYXBwSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnKSxcbiAgICBzZXNzaW9uVG9rZW46IHJlcS5nZXQoJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbicpLFxuICAgIG1hc3RlcktleTogcmVxLmdldCgnWC1QYXJzZS1NYXN0ZXItS2V5JyksXG4gICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJyksXG4gICAgY2xpZW50S2V5OiByZXEuZ2V0KCdYLVBhcnNlLUNsaWVudC1LZXknKSxcbiAgICBqYXZhc2NyaXB0S2V5OiByZXEuZ2V0KCdYLVBhcnNlLUphdmFzY3JpcHQtS2V5JyksXG4gICAgZG90TmV0S2V5OiByZXEuZ2V0KCdYLVBhcnNlLVdpbmRvd3MtS2V5JyksXG4gICAgcmVzdEFQSUtleTogcmVxLmdldCgnWC1QYXJzZS1SRVNULUFQSS1LZXknKSxcbiAgICBjbGllbnRWZXJzaW9uOiByZXEuZ2V0KCdYLVBhcnNlLUNsaWVudC1WZXJzaW9uJyksXG4gICAgY29udGV4dDogY29udGV4dCxcbiAgfTtcblxuICB2YXIgYmFzaWNBdXRoID0gaHR0cEF1dGgocmVxKTtcblxuICBpZiAoYmFzaWNBdXRoKSB7XG4gICAgdmFyIGJhc2ljQXV0aEFwcElkID0gYmFzaWNBdXRoLmFwcElkO1xuICAgIGlmIChBcHBDYWNoZS5nZXQoYmFzaWNBdXRoQXBwSWQpKSB7XG4gICAgICBpbmZvLmFwcElkID0gYmFzaWNBdXRoQXBwSWQ7XG4gICAgICBpbmZvLm1hc3RlcktleSA9IGJhc2ljQXV0aC5tYXN0ZXJLZXkgfHwgaW5mby5tYXN0ZXJLZXk7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSBiYXNpY0F1dGguamF2YXNjcmlwdEtleSB8fCBpbmZvLmphdmFzY3JpcHRLZXk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgLy8gVW5pdHkgU0RLIHNlbmRzIGEgX25vQm9keSBrZXkgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBVbmNsZWFyIGF0IHRoaXMgcG9pbnQgaWYgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLlxuICAgIGRlbGV0ZSByZXEuYm9keS5fbm9Cb2R5O1xuICB9XG5cbiAgdmFyIGZpbGVWaWFKU09OID0gZmFsc2U7XG5cbiAgaWYgKCFpbmZvLmFwcElkIHx8ICFBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCkpIHtcbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGFwcCBpZCBvbiB0aGUgYm9keS5cbiAgICBpZiAocmVxLmJvZHkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIC8vIFRoZSBvbmx5IGNoYW5jZSB0byBmaW5kIHRoZSBhcHAgaWQgaXMgaWYgdGhpcyBpcyBhIGZpbGVcbiAgICAgIC8vIHVwbG9hZCB0aGF0IGFjdHVhbGx5IGlzIGEgSlNPTiBib2R5LiBTbyB0cnkgdG8gcGFyc2UgaXQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGFyc2UtY29tbXVuaXR5L3BhcnNlLXNlcnZlci9pc3N1ZXMvNjU4OVxuICAgICAgLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZSBjbGllbnQgaXMgdHJ5aW5nIHRvIHVwbG9hZCBhIGZpbGUgYnV0IGZvcmdvdFxuICAgICAgLy8gdG8gcHJvdmlkZSB4LXBhcnNlLWFwcC1pZCBpbiBoZWFkZXIgYW5kIHBhcnNlIGEgYmluYXJ5IGZpbGUgd2lsbCBmYWlsXG4gICAgICB0cnkge1xuICAgICAgICByZXEuYm9keSA9IEpTT04ucGFyc2UocmVxLmJvZHkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgfVxuICAgICAgZmlsZVZpYUpTT04gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZXEuYm9keSkge1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9SZXZvY2FibGVTZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlcS5ib2R5ICYmXG4gICAgICByZXEuYm9keS5fQXBwbGljYXRpb25JZCAmJlxuICAgICAgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKSAmJlxuICAgICAgKCFpbmZvLm1hc3RlcktleSB8fCBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpLm1hc3RlcktleSA9PT0gaW5mby5tYXN0ZXJLZXkpXG4gICAgKSB7XG4gICAgICBpbmZvLmFwcElkID0gcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSByZXEuYm9keS5fSmF2YVNjcmlwdEtleSB8fCAnJztcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fSmF2YVNjcmlwdEtleTtcbiAgICAgIC8vIFRPRE86IHRlc3QgdGhhdCB0aGUgUkVTVCBBUEkgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgdGhlIG90aGVyXG4gICAgICAvLyBTREtzIGFyZSBoYW5kbGVkIG9rXG4gICAgICBpZiAocmVxLmJvZHkuX0NsaWVudFZlcnNpb24pIHtcbiAgICAgICAgaW5mby5jbGllbnRWZXJzaW9uID0gcmVxLmJvZHkuX0NsaWVudFZlcnNpb247XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQpIHtcbiAgICAgICAgaW5mby5pbnN0YWxsYXRpb25JZCA9IHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZDtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fU2Vzc2lvblRva2VuKSB7XG4gICAgICAgIGluZm8uc2Vzc2lvblRva2VuID0gcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX01hc3RlcktleSkge1xuICAgICAgICBpbmZvLm1hc3RlcktleSA9IHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9jb250ZXh0KSB7XG4gICAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgIGluZm8uY29udGV4dCA9IHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmZvLmNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5ib2R5Ll9jb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5mby5jb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX0NvbnRlbnRUeXBlKSB7XG4gICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5mby5zZXNzaW9uVG9rZW4gJiYgdHlwZW9mIGluZm8uc2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgIGluZm8uc2Vzc2lvblRva2VuID0gaW5mby5zZXNzaW9uVG9rZW4udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGlmIChpbmZvLmNsaWVudFZlcnNpb24pIHtcbiAgICBpbmZvLmNsaWVudFNESyA9IENsaWVudFNESy5mcm9tU3RyaW5nKGluZm8uY2xpZW50VmVyc2lvbik7XG4gIH1cblxuICBpZiAoZmlsZVZpYUpTT04pIHtcbiAgICByZXEuZmlsZURhdGEgPSByZXEuYm9keS5maWxlRGF0YTtcbiAgICAvLyBXZSBuZWVkIHRvIHJlcG9wdWxhdGUgcmVxLmJvZHkgd2l0aCBhIGJ1ZmZlclxuICAgIHZhciBiYXNlNjQgPSByZXEuYm9keS5iYXNlNjQ7XG4gICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudElwID0gZ2V0Q2xpZW50SXAocmVxKTtcblxuICBpbmZvLmFwcCA9IEFwcENhY2hlLmdldChpbmZvLmFwcElkKTtcbiAgcmVxLmNvbmZpZyA9IENvbmZpZy5nZXQoaW5mby5hcHBJZCwgbW91bnQpO1xuICByZXEuY29uZmlnLmhlYWRlcnMgPSByZXEuaGVhZGVycyB8fCB7fTtcbiAgcmVxLmNvbmZpZy5pcCA9IGNsaWVudElwO1xuICByZXEuaW5mbyA9IGluZm87XG5cbiAgaWYgKFxuICAgIGluZm8ubWFzdGVyS2V5ICYmXG4gICAgcmVxLmNvbmZpZy5tYXN0ZXJLZXlJcHMgJiZcbiAgICByZXEuY29uZmlnLm1hc3RlcktleUlwcy5sZW5ndGggIT09IDAgJiZcbiAgICByZXEuY29uZmlnLm1hc3RlcktleUlwcy5pbmRleE9mKGNsaWVudElwKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIHZhciBpc01hc3RlciA9IGluZm8ubWFzdGVyS2V5ID09PSByZXEuY29uZmlnLm1hc3RlcktleTtcblxuICBpZiAoaXNNYXN0ZXIpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogdHJ1ZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGlzUmVhZE9ubHlNYXN0ZXIgPSBpbmZvLm1hc3RlcktleSA9PT0gcmVxLmNvbmZpZy5yZWFkT25seU1hc3RlcktleTtcbiAgaWYgKFxuICAgIHR5cGVvZiByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICE9ICd1bmRlZmluZWQnICYmXG4gICAgcmVxLmNvbmZpZy5yZWFkT25seU1hc3RlcktleSAmJlxuICAgIGlzUmVhZE9ubHlNYXN0ZXJcbiAgKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IHRydWUsXG4gICAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDbGllbnQga2V5cyBhcmUgbm90IHJlcXVpcmVkIGluIHBhcnNlLXNlcnZlciwgYnV0IGlmIGFueSBoYXZlIGJlZW4gY29uZmlndXJlZCBpbiB0aGUgc2VydmVyLCB2YWxpZGF0ZSB0aGVtXG4gIC8vICB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvci5cbiAgY29uc3Qga2V5cyA9IFsnY2xpZW50S2V5JywgJ2phdmFzY3JpcHRLZXknLCAnZG90TmV0S2V5JywgJ3Jlc3RBUElLZXknXTtcbiAgY29uc3Qgb25lS2V5Q29uZmlndXJlZCA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkO1xuICB9KTtcbiAgY29uc3Qgb25lS2V5TWF0Y2hlcyA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkICYmIGluZm9ba2V5XSA9PT0gcmVxLmNvbmZpZ1trZXldO1xuICB9KTtcblxuICBpZiAob25lS2V5Q29uZmlndXJlZCAmJiAhb25lS2V5TWF0Y2hlcykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAocmVxLnVybCA9PSAnL2xvZ2luJykge1xuICAgIGRlbGV0ZSBpbmZvLnNlc3Npb25Ub2tlbjtcbiAgfVxuXG4gIGlmIChyZXEudXNlckZyb21KV1QpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICB1c2VyOiByZXEudXNlckZyb21KV1QsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIGhhbmRsZSB0aGUgdXBncmFkZVRvUmV2b2NhYmxlU2Vzc2lvbiBwYXRoIG9uIGl0J3Mgb3duXG4gICAgICBpZiAoXG4gICAgICAgIGluZm8uc2Vzc2lvblRva2VuICYmXG4gICAgICAgIHJlcS51cmwgPT09ICcvdXBncmFkZVRvUmV2b2NhYmxlU2Vzc2lvbicgJiZcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oYXV0aCA9PiB7XG4gICAgICBpZiAoYXV0aCkge1xuICAgICAgICByZXEuYXV0aCA9IGF1dGg7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGVycm9yIHNjZW5hcmlvLlxuICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoJ2Vycm9yIGdldHRpbmcgYXV0aCBmb3Igc2Vzc2lvblRva2VuJywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRJcChyZXEpIHtcbiAgcmV0dXJuIHJlcS5pcDtcbn1cblxuZnVuY3Rpb24gaHR0cEF1dGgocmVxKSB7XG4gIGlmICghKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHJldHVybjtcblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dPcmlnaW4gPSAoY29uZmlnICYmIGNvbmZpZy5hbGxvd09yaWdpbikgfHwgJyonO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGFsbG93T3JpZ2luKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCxQVVQsUE9TVCxERUxFVEUsT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCBhbGxvd0hlYWRlcnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJywgJ1gtUGFyc2UtSm9iLVN0YXR1cy1JZCwgWC1QYXJzZS1QdXNoLVN0YXR1cy1JZCcpO1xuICAgIC8vIGludGVyY2VwdCBPUFRJT05TIG1ldGhvZFxuICAgIGlmICgnT1BUSU9OUycgPT0gcmVxLm1ldGhvZCkge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93TWV0aG9kT3ZlcnJpZGUocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdQT1NUJyAmJiByZXEuYm9keS5fbWV0aG9kKSB7XG4gICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICByZXEubWV0aG9kID0gcmVxLmJvZHkuX21ldGhvZDtcbiAgICBkZWxldGUgcmVxLmJvZHkuX21ldGhvZDtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUVycm9ycyhlcnIsIHJlcSwgcmVzLCBuZXh0KSB7XG4gIGNvbnN0IGxvZyA9IChyZXEuY29uZmlnICYmIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgaWYgKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5lbmFibGVFeHByZXNzRXJyb3JIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgIH1cbiAgICBsZXQgaHR0cFN0YXR1cztcbiAgICAvLyBUT0RPOiBmaWxsIG91dCB0aGlzIG1hcHBpbmdcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlIFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUjpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDUwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwMDtcbiAgICB9XG4gICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKTtcbiAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgbG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgfSBlbHNlIGlmIChlcnIuc3RhdHVzICYmIGVyci5tZXNzYWdlKSB7XG4gICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzKTtcbiAgICByZXMuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVyciwgZXJyLnN0YWNrKTtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIHNlcnZlciBlcnJvci4nLFxuICAgIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkXCJ9Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcXVlc3QpIHtcbiAgaWYgKCFyZXF1ZXN0LmF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vKipcbiAqIERlZHVwbGljYXRlcyBhIHJlcXVlc3QgdG8gZW5zdXJlIGlkZW1wb3RlbmN5LiBEdXBsaWNhdGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSByZXF1ZXN0IElEXG4gKiBpbiB0aGUgcmVxdWVzdCBoZWFkZXIuIElmIGEgcmVxdWVzdCBoYXMgbm8gcmVxdWVzdCBJRCwgaXQgaXMgZXhlY3V0ZWQgYW55d2F5LlxuICogQHBhcmFtIHsqfSByZXEgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBQcm9taXNlPHt9PlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5KHJlcSkge1xuICAvLyBFbmFibGUgZmVhdHVyZSBvbmx5IGZvciBNb25nb0RCXG4gIGlmIChcbiAgICAhKFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgTW9uZ29TdG9yYWdlQWRhcHRlciB8fFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgUG9zdGdyZXNTdG9yYWdlQWRhcHRlclxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIEdldCBwYXJhbWV0ZXJzXG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gIGNvbnN0IHJlcXVlc3RJZCA9ICgocmVxIHx8IHt9KS5oZWFkZXJzIHx8IHt9KVsneC1wYXJzZS1yZXF1ZXN0LWlkJ107XG4gIGNvbnN0IHsgcGF0aHMsIHR0bCB9ID0gY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucztcbiAgaWYgKCFyZXF1ZXN0SWQgfHwgIWNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gUmVxdWVzdCBwYXRoIG1heSBjb250YWluIHRyYWlsaW5nIHNsYXNoZXMsIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gcmVtb3ZlXG4gIC8vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BlY2lmeSBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvblxuICBjb25zdCByZXFQYXRoID0gcmVxLnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kLywgJycpO1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciBpZGVtcG90ZW5jeSBpcyBlbmFibGVkIGZvciBjdXJyZW50IHJlcXVlc3QgcGF0aFxuICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgLy8gQXNzdW1lIG9uZSB3YW50cyBhIHBhdGggdG8gYWx3YXlzIG1hdGNoIGZyb20gdGhlIGJlZ2lubmluZyB0byBwcmV2ZW50IGFueSBtaXN0YWtlc1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXRoLmNoYXJBdCgwKSA9PT0gJ14nID8gcGF0aCA6ICdeJyArIHBhdGgpO1xuICAgIGlmIChyZXFQYXRoLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gVHJ5IHRvIHN0b3JlIHJlcXVlc3RcbiAgY29uc3QgZXhwaXJ5RGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0U2Vjb25kcyhuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSArIHR0bCkpO1xuICByZXR1cm4gcmVzdFxuICAgIC5jcmVhdGUoY29uZmlnLCBhdXRoLm1hc3Rlcihjb25maWcpLCAnX0lkZW1wb3RlbmN5Jywge1xuICAgICAgcmVxSWQ6IHJlcXVlc3RJZCxcbiAgICAgIGV4cGlyZTogUGFyc2UuX2VuY29kZShleHBpcnlEYXRlKSxcbiAgICB9KVxuICAgIC5jYXRjaChlID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5EVVBMSUNBVEVfUkVRVUVTVCwgJ0R1cGxpY2F0ZSByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMyk7XG4gIHJlcy5lbmQoJ3tcImVycm9yXCI6XCJ1bmF1dGhvcml6ZWRcIn0nKTtcbn1cblxuZnVuY3Rpb24gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMCk7XG4gIHJlcy5qc29uKHsgY29kZTogUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCBlcnJvcjogJ0ludmFsaWQgb2JqZWN0IGZvciBjb250ZXh0LicgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-server",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.2",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"graphql-tag": "2.12.6",
|
|
38
38
|
"graphql-relay": "0.10.0",
|
|
39
39
|
"intersect": "1.0.1",
|
|
40
|
-
"jsonwebtoken": "
|
|
40
|
+
"jsonwebtoken": "9.0.0",
|
|
41
41
|
"jwks-rsa": "2.1.4",
|
|
42
42
|
"ldapjs": "2.3.3",
|
|
43
43
|
"lodash": "4.17.21",
|