parse-server 6.0.0-alpha.31 → 6.0.0-alpha.33
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 +3 -11
- package/lib/Adapters/Auth/facebook.js +3 -11
- package/lib/Adapters/Auth/google.js +3 -11
- package/lib/Adapters/Auth/utils.js +17 -0
- package/lib/LiveQuery/Client.js +5 -5
- package/lib/LiveQuery/ParseLiveQueryServer.js +10 -5
- package/lib/LiveQuery/RequestSchema.js +33 -1
- package/package.json +3 -3
|
@@ -7,6 +7,7 @@ const Parse = require('parse/node').Parse;
|
|
|
7
7
|
const jwksClient = require('jwks-rsa');
|
|
8
8
|
const util = require('util');
|
|
9
9
|
const jwt = require('jsonwebtoken');
|
|
10
|
+
const authUtils = require('./utils');
|
|
10
11
|
const TOKEN_ISSUER = 'https://appleid.apple.com';
|
|
11
12
|
const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
12
13
|
const client = jwksClient({
|
|
@@ -24,15 +25,6 @@ const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
24
25
|
}
|
|
25
26
|
return key;
|
|
26
27
|
};
|
|
27
|
-
const getHeaderFromToken = token => {
|
|
28
|
-
const decodedToken = jwt.decode(token, {
|
|
29
|
-
complete: true
|
|
30
|
-
});
|
|
31
|
-
if (!decodedToken) {
|
|
32
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
33
|
-
}
|
|
34
|
-
return decodedToken.header;
|
|
35
|
-
};
|
|
36
28
|
const verifyIdToken = async ({
|
|
37
29
|
token,
|
|
38
30
|
id
|
|
@@ -47,7 +39,7 @@ const verifyIdToken = async ({
|
|
|
47
39
|
const {
|
|
48
40
|
kid: keyId,
|
|
49
41
|
alg: algorithm
|
|
50
|
-
} = getHeaderFromToken(token);
|
|
42
|
+
} = authUtils.getHeaderFromToken(token);
|
|
51
43
|
const ONE_HOUR_IN_MS = 3600000;
|
|
52
44
|
let jwtClaims;
|
|
53
45
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -86,4 +78,4 @@ module.exports = {
|
|
|
86
78
|
validateAppId,
|
|
87
79
|
validateAuthData
|
|
88
80
|
};
|
|
89
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsImdldEFwcGxlS2V5QnlLZXlJZCIsImtleUlkIiwiY2FjaGVNYXhFbnRyaWVzIiwiY2FjaGVNYXhBZ2UiLCJjbGllbnQiLCJqd2tzVXJpIiwiY2FjaGUiLCJhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbiIsInByb21pc2lmeSIsImdldFNpZ25pbmdLZXkiLCJrZXkiLCJlcnJvciIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZlcmlmeUlkVG9rZW4iLCJ0b2tlbiIsImlkIiwiY2xpZW50SWQiLCJraWQiLCJhbGciLCJhbGdvcml0aG0iLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJPTkVfSE9VUl9JTl9NUyIsImp3dENsYWltcyIsImFwcGxlS2V5Iiwic2lnbmluZ0tleSIsInB1YmxpY0tleSIsInJzYVB1YmxpY0tleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2FwcGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFwcGxlIFNpZ25JbiBBdXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9zaWduaW53aXRoYXBwbGVyZXN0YXBpXG5cbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuY29uc3Qgandrc0NsaWVudCA9IHJlcXVpcmUoJ2p3a3MtcnNhJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBhdXRoVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IFRPS0VOX0lTU1VFUiA9ICdodHRwczovL2FwcGxlaWQuYXBwbGUuY29tJztcblxuY29uc3QgZ2V0QXBwbGVLZXlCeUtleUlkID0gYXN5bmMgKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgIGp3a3NVcmk6IGAke1RPS0VOX0lTU1VFUn0vYXV0aC9rZXlzYCxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZU1heEVudHJpZXMsXG4gICAgY2FjaGVNYXhBZ2UsXG4gIH0pO1xuXG4gIGNvbnN0IGFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uID0gdXRpbC5wcm9taXNpZnkoY2xpZW50LmdldFNpZ25pbmdLZXkpO1xuXG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gYXdhaXQgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24oa2V5SWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcga2V5IGZvciBLZXkgSUQ6ICR7a2V5SWR9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IHZlcmlmeUlkVG9rZW4gPSBhc3luYyAoeyB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSB9KSA9PiB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGlkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgYXBwbGVLZXkgPSBhd2FpdCBnZXRBcHBsZUtleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gYXBwbGVLZXkucHVibGljS2V5IHx8IGFwcGxlS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGlkIHRva2VuIGlzIHZhbGlkXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0QsS0FBSztBQUN6QyxNQUFNRSxVQUFVLEdBQUdELE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUUsSUFBSSxHQUFHRixPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1HLEdBQUcsR0FBR0gsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTUssWUFBWSxHQUFHLDJCQUEyQjtBQUVoRCxNQUFNQyxrQkFBa0IsR0FBRyxPQUFPQyxLQUFLLEVBQUVDLGVBQWUsRUFBRUMsV0FBVyxLQUFLO0VBQ3hFLE1BQU1DLE1BQU0sR0FBR1QsVUFBVSxDQUFDO0lBQ3hCVSxPQUFPLEVBQUcsR0FBRU4sWUFBYSxZQUFXO0lBQ3BDTyxLQUFLLEVBQUUsSUFBSTtJQUNYSixlQUFlO0lBQ2ZDO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsTUFBTUksMEJBQTBCLEdBQUdYLElBQUksQ0FBQ1ksU0FBUyxDQUFDSixNQUFNLENBQUNLLGFBQWEsQ0FBQztFQUV2RSxJQUFJQyxHQUFHO0VBQ1AsSUFBSTtJQUNGQSxHQUFHLEdBQUcsTUFBTUgsMEJBQTBCLENBQUNOLEtBQUssQ0FBQztFQUMvQyxDQUFDLENBQUMsT0FBT1UsS0FBSyxFQUFFO0lBQ2QsTUFBTSxJQUFJbEIsS0FBSyxDQUFDbUIsS0FBSyxDQUNuQm5CLEtBQUssQ0FBQ21CLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQzNCLDJDQUEwQ1osS0FBTSxFQUFDLENBQ25EO0VBQ0g7RUFDQSxPQUFPUyxHQUFHO0FBQ1osQ0FBQztBQUVELE1BQU1JLGFBQWEsR0FBRyxPQUFPO0VBQUVDLEtBQUs7RUFBRUM7QUFBRyxDQUFDLEVBQUU7RUFBRUMsUUFBUTtFQUFFZixlQUFlO0VBQUVDO0FBQVksQ0FBQyxLQUFLO0VBQ3pGLElBQUksQ0FBQ1ksS0FBSyxFQUFFO0lBQ1YsTUFBTSxJQUFJdEIsS0FBSyxDQUFDbUIsS0FBSyxDQUFDbkIsS0FBSyxDQUFDbUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRyxvQ0FBbUMsQ0FBQztFQUMzRjtFQUVBLE1BQU07SUFBRUssR0FBRyxFQUFFakIsS0FBSztJQUFFa0IsR0FBRyxFQUFFQztFQUFVLENBQUMsR0FBR3RCLFNBQVMsQ0FBQ3VCLGtCQUFrQixDQUFDTixLQUFLLENBQUM7RUFDMUUsTUFBTU8sY0FBYyxHQUFHLE9BQU87RUFDOUIsSUFBSUMsU0FBUztFQUVicEIsV0FBVyxHQUFHQSxXQUFXLElBQUltQixjQUFjO0VBQzNDcEIsZUFBZSxHQUFHQSxlQUFlLElBQUksQ0FBQztFQUV0QyxNQUFNc0IsUUFBUSxHQUFHLE1BQU14QixrQkFBa0IsQ0FBQ0MsS0FBSyxFQUFFQyxlQUFlLEVBQUVDLFdBQVcsQ0FBQztFQUM5RSxNQUFNc0IsVUFBVSxHQUFHRCxRQUFRLENBQUNFLFNBQVMsSUFBSUYsUUFBUSxDQUFDRyxZQUFZO0VBRTlELElBQUk7SUFDRkosU0FBUyxHQUFHMUIsR0FBRyxDQUFDK0IsTUFBTSxDQUFDYixLQUFLLEVBQUVVLFVBQVUsRUFBRTtNQUN4Q0ksVUFBVSxFQUFFVCxTQUFTO01BQ3JCO01BQ0FVLFFBQVEsRUFBRWI7SUFDWixDQUFDLENBQUM7RUFDSixDQUFDLENBQUMsT0FBT2MsU0FBUyxFQUFFO0lBQ2xCLE1BQU1DLE9BQU8sR0FBR0QsU0FBUyxDQUFDQyxPQUFPO0lBRWpDLE1BQU0sSUFBSXZDLEtBQUssQ0FBQ21CLEtBQUssQ0FBQ25CLEtBQUssQ0FBQ21CLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUcsR0FBRW1CLE9BQVEsRUFBQyxDQUFDO0VBQ25FO0VBRUEsSUFBSVQsU0FBUyxDQUFDVSxHQUFHLEtBQUtsQyxZQUFZLEVBQUU7SUFDbEMsTUFBTSxJQUFJTixLQUFLLENBQUNtQixLQUFLLENBQ25CbkIsS0FBSyxDQUFDbUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFDM0IsOERBQTZEZCxZQUFhLFlBQVd3QixTQUFTLENBQUNVLEdBQUksRUFBQyxDQUN0RztFQUNIO0VBRUEsSUFBSVYsU0FBUyxDQUFDVyxHQUFHLEtBQUtsQixFQUFFLEVBQUU7SUFDeEIsTUFBTSxJQUFJdkIsS0FBSyxDQUFDbUIsS0FBSyxDQUFDbkIsS0FBSyxDQUFDbUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRyxxQ0FBb0MsQ0FBQztFQUM1RjtFQUNBLE9BQU9VLFNBQVM7QUFDbEIsQ0FBQzs7QUFFRDtBQUNBLFNBQVNZLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRCxPQUFPdkIsYUFBYSxDQUFDc0IsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFDekM7O0FBRUE7QUFDQSxTQUFTQyxhQUFhLEdBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLEVBQUU7QUFDMUI7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZkosYUFBYTtFQUNiSDtBQUNGLENBQUMifQ==
|
|
@@ -7,6 +7,7 @@ const jwksClient = require('jwks-rsa');
|
|
|
7
7
|
const util = require('util');
|
|
8
8
|
const jwt = require('jsonwebtoken');
|
|
9
9
|
const httpsRequest = require('./httpsRequest');
|
|
10
|
+
const authUtils = require('./utils');
|
|
10
11
|
const TOKEN_ISSUER = 'https://facebook.com';
|
|
11
12
|
function getAppSecretPath(authData, options = {}) {
|
|
12
13
|
const appSecret = options.appSecret;
|
|
@@ -56,15 +57,6 @@ const getFacebookKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
56
57
|
}
|
|
57
58
|
return key;
|
|
58
59
|
};
|
|
59
|
-
const getHeaderFromToken = token => {
|
|
60
|
-
const decodedToken = jwt.decode(token, {
|
|
61
|
-
complete: true
|
|
62
|
-
});
|
|
63
|
-
if (!decodedToken) {
|
|
64
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'provided token does not decode as JWT');
|
|
65
|
-
}
|
|
66
|
-
return decodedToken.header;
|
|
67
|
-
};
|
|
68
60
|
const verifyIdToken = async ({
|
|
69
61
|
token,
|
|
70
62
|
id
|
|
@@ -79,7 +71,7 @@ const verifyIdToken = async ({
|
|
|
79
71
|
const {
|
|
80
72
|
kid: keyId,
|
|
81
73
|
alg: algorithm
|
|
82
|
-
} = getHeaderFromToken(token);
|
|
74
|
+
} = authUtils.getHeaderFromToken(token);
|
|
83
75
|
const ONE_HOUR_IN_MS = 3600000;
|
|
84
76
|
let jwtClaims;
|
|
85
77
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -131,4 +123,4 @@ module.exports = {
|
|
|
131
123
|
validateAppId: validateAppId,
|
|
132
124
|
validateAuthData: validateAuthData
|
|
133
125
|
};
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJjcnlwdG8iLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImh0dHBzUmVxdWVzdCIsIlRPS0VOX0lTU1VFUiIsImdldEFwcFNlY3JldFBhdGgiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJhcHBTZWNyZXQiLCJhcHBzZWNyZXRfcHJvb2YiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiYWNjZXNzX3Rva2VuIiwiZGlnZXN0IiwidmFsaWRhdGVHcmFwaFRva2VuIiwiZ3JhcGhSZXF1ZXN0IiwidGhlbiIsImRhdGEiLCJpZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVHcmFwaEFwcElkIiwiYXBwSWRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJnZXRGYWNlYm9va0tleUJ5S2V5SWQiLCJrZXlJZCIsImNhY2hlTWF4RW50cmllcyIsImNhY2hlTWF4QWdlIiwiY2xpZW50Iiwiandrc1VyaSIsImNhY2hlIiwiYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24iLCJwcm9taXNpZnkiLCJnZXRTaWduaW5nS2V5Iiwia2V5IiwiZXJyb3IiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiaGVhZGVyIiwidmVyaWZ5SWRUb2tlbiIsImNsaWVudElkIiwia2lkIiwiYWxnIiwiYWxnb3JpdGhtIiwiT05FX0hPVVJfSU5fTVMiLCJqd3RDbGFpbXMiLCJmYWNlYm9va0tleSIsInNpZ25pbmdLZXkiLCJwdWJsaWNLZXkiLCJyc2FQdWJsaWNLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwidmFsaWRhdGVBdXRoRGF0YSIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvZmFjZWJvb2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBGYWNlYm9vayBHcmFwaCBBUEkuXG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3Qgandrc0NsaWVudCA9IHJlcXVpcmUoJ2p3a3MtcnNhJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuXG5jb25zdCBUT0tFTl9JU1NVRVIgPSAnaHR0cHM6Ly9mYWNlYm9vay5jb20nO1xuXG5mdW5jdGlvbiBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYXBwU2VjcmV0ID0gb3B0aW9ucy5hcHBTZWNyZXQ7XG4gIGlmICghYXBwU2VjcmV0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IGFwcHNlY3JldF9wcm9vZiA9IGNyeXB0b1xuICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCBhcHBTZWNyZXQpXG4gICAgLnVwZGF0ZShhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pXG4gICAgLmRpZ2VzdCgnaGV4Jyk7XG5cbiAgcmV0dXJuIGAmYXBwc2VjcmV0X3Byb29mPSR7YXBwc2VjcmV0X3Byb29mfWA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gZ3JhcGhSZXF1ZXN0KFxuICAgICdtZT9maWVsZHM9aWQmYWNjZXNzX3Rva2VuPScgKyBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4gKyBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKVxuICApLnRoZW4oZGF0YSA9PiB7XG4gICAgaWYgKChkYXRhICYmIGRhdGEuaWQgPT0gYXV0aERhdGEuaWQpIHx8IChwcm9jZXNzLmVudi5URVNUSU5HICYmIGF1dGhEYXRhLmlkID09PSAndGVzdCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucykge1xuICB2YXIgYWNjZXNzX3Rva2VuID0gYXV0aERhdGEuYWNjZXNzX3Rva2VuO1xuICBpZiAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhY2Nlc3NfdG9rZW4gPT09ICd0ZXN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXBwSWRzKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXBwSWRzIG11c3QgYmUgYW4gYXJyYXkuJyk7XG4gIH1cbiAgaWYgKCFhcHBJZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBncmFwaFJlcXVlc3QoXG4gICAgYGFwcD9hY2Nlc3NfdG9rZW49JHthY2Nlc3NfdG9rZW59JHtnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKX1gXG4gICk7XG4gIGlmICghZGF0YSB8fCAhYXBwSWRzLmluY2x1ZGVzKGRhdGEuaWQpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5jb25zdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQgPSBhc3luYyAoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpID0+IHtcbiAgY29uc3QgY2xpZW50ID0gandrc0NsaWVudCh7XG4gICAgandrc1VyaTogYCR7VE9LRU5fSVNTVUVSfS8ud2VsbC1rbm93bi9vYXV0aC9vcGVuaWQvandrcy9gLFxuICAgIGNhY2hlOiB0cnVlLFxuICAgIGNhY2hlTWF4RW50cmllcyxcbiAgICBjYWNoZU1heEFnZSxcbiAgfSk7XG5cbiAgY29uc3QgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24gPSB1dGlsLnByb21pc2lmeShjbGllbnQuZ2V0U2lnbmluZ0tleSk7XG5cbiAgbGV0IGtleTtcbiAgdHJ5IHtcbiAgICBrZXkgPSBhd2FpdCBhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbihrZXlJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBVbmFibGUgdG8gZmluZCBtYXRjaGluZyBrZXkgZm9yIEtleSBJRDogJHtrZXlJZH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcblxuY29uc3QgZ2V0SGVhZGVyRnJvbVRva2VuID0gdG9rZW4gPT4ge1xuICBjb25zdCBkZWNvZGVkVG9rZW4gPSBqd3QuZGVjb2RlKHRva2VuLCB7IGNvbXBsZXRlOiB0cnVlIH0pO1xuICBpZiAoIWRlY29kZWRUb2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAncHJvdmlkZWQgdG9rZW4gZG9lcyBub3QgZGVjb2RlIGFzIEpXVCcpO1xuICB9XG5cbiAgcmV0dXJuIGRlY29kZWRUb2tlbi5oZWFkZXI7XG59O1xuXG5jb25zdCB2ZXJpZnlJZFRva2VuID0gYXN5bmMgKHsgdG9rZW4sIGlkIH0sIHsgY2xpZW50SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UgfSkgPT4ge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdpZCB0b2tlbiBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cblxuICBjb25zdCB7IGtpZDoga2V5SWQsIGFsZzogYWxnb3JpdGhtIH0gPSBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgZmFjZWJvb2tLZXkgPSBhd2FpdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gZmFjZWJvb2tLZXkucHVibGljS2V5IHx8IGZhY2Vib29rS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoYXV0aERhdGEudG9rZW4pIHtcbiAgICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKGF1dGhEYXRhLnRva2VuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBGQiBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1JLEdBQUcsR0FBR0osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNTSxZQUFZLEdBQUcsc0JBQXNCO0FBRTNDLFNBQVNDLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRCxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0MsU0FBUztFQUNuQyxJQUFJLENBQUNBLFNBQVMsRUFBRTtJQUNkLE9BQU8sRUFBRTtFQUNYO0VBQ0EsTUFBTUMsZUFBZSxHQUFHVixNQUFNLENBQzNCVyxVQUFVLENBQUMsUUFBUSxFQUFFRixTQUFTLENBQUMsQ0FDL0JHLE1BQU0sQ0FBQ0wsUUFBUSxDQUFDTSxZQUFZLENBQUMsQ0FDN0JDLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFFaEIsT0FBUSxvQkFBbUJKLGVBQWdCLEVBQUM7QUFDOUM7QUFFQSxTQUFTSyxrQkFBa0IsQ0FBQ1IsUUFBUSxFQUFFQyxPQUFPLEVBQUU7RUFDN0MsT0FBT1EsWUFBWSxDQUNqQiw0QkFBNEIsR0FBR1QsUUFBUSxDQUFDTSxZQUFZLEdBQUdQLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sQ0FBQyxDQUMzRixDQUFDUyxJQUFJLENBQUNDLElBQUksSUFBSTtJQUNiLElBQUtBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxFQUFFLElBQUlaLFFBQVEsQ0FBQ1ksRUFBRSxJQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsT0FBTyxJQUFJZixRQUFRLENBQUNZLEVBQUUsS0FBSyxNQUFPLEVBQUU7TUFDdkY7SUFDRjtJQUNBLE1BQU0sSUFBSXJCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ3pCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUseUNBQXlDLENBQUM7RUFDaEcsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxlQUFlQyxrQkFBa0IsQ0FBQ0MsTUFBTSxFQUFFbkIsUUFBUSxFQUFFQyxPQUFPLEVBQUU7RUFDM0QsSUFBSUssWUFBWSxHQUFHTixRQUFRLENBQUNNLFlBQVk7RUFDeEMsSUFBSU8sT0FBTyxDQUFDQyxHQUFHLENBQUNDLE9BQU8sSUFBSVQsWUFBWSxLQUFLLE1BQU0sRUFBRTtJQUNsRDtFQUNGO0VBQ0EsSUFBSSxDQUFDYyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxDQUFDLEVBQUU7SUFDMUIsTUFBTSxJQUFJNUIsS0FBSyxDQUFDeUIsS0FBSyxDQUFDekIsS0FBSyxDQUFDeUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSwwQkFBMEIsQ0FBQztFQUNqRjtFQUNBLElBQUksQ0FBQ0UsTUFBTSxDQUFDRyxNQUFNLEVBQUU7SUFDbEIsTUFBTSxJQUFJL0IsS0FBSyxDQUFDeUIsS0FBSyxDQUFDekIsS0FBSyxDQUFDeUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSxrQ0FBa0MsQ0FBQztFQUN6RjtFQUNBLE1BQU1OLElBQUksR0FBRyxNQUFNRixZQUFZLENBQzVCLG9CQUFtQkgsWUFBYSxHQUFFUCxnQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFQyxPQUFPLENBQUUsRUFBQyxDQUN6RTtFQUNELElBQUksQ0FBQ1UsSUFBSSxJQUFJLENBQUNRLE1BQU0sQ0FBQ0ksUUFBUSxDQUFDWixJQUFJLENBQUNDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLE1BQU0sSUFBSXJCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ3pCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUseUNBQXlDLENBQUM7RUFDaEc7QUFDRjtBQUVBLE1BQU1PLHFCQUFxQixHQUFHLE9BQU9DLEtBQUssRUFBRUMsZUFBZSxFQUFFQyxXQUFXLEtBQUs7RUFDM0UsTUFBTUMsTUFBTSxHQUFHbEMsVUFBVSxDQUFDO0lBQ3hCbUMsT0FBTyxFQUFHLEdBQUUvQixZQUFhLGlDQUFnQztJQUN6RGdDLEtBQUssRUFBRSxJQUFJO0lBQ1hKLGVBQWU7SUFDZkM7RUFDRixDQUFDLENBQUM7RUFFRixNQUFNSSwwQkFBMEIsR0FBR3BDLElBQUksQ0FBQ3FDLFNBQVMsQ0FBQ0osTUFBTSxDQUFDSyxhQUFhLENBQUM7RUFFdkUsSUFBSUMsR0FBRztFQUNQLElBQUk7SUFDRkEsR0FBRyxHQUFHLE1BQU1ILDBCQUEwQixDQUFDTixLQUFLLENBQUM7RUFDL0MsQ0FBQyxDQUFDLE9BQU9VLEtBQUssRUFBRTtJQUNkLE1BQU0sSUFBSTVDLEtBQUssQ0FBQ3lCLEtBQUssQ0FDbkJ6QixLQUFLLENBQUN5QixLQUFLLENBQUNDLGdCQUFnQixFQUMzQiwyQ0FBMENRLEtBQU0sRUFBQyxDQUNuRDtFQUNIO0VBQ0EsT0FBT1MsR0FBRztBQUNaLENBQUM7QUFFRCxNQUFNRSxrQkFBa0IsR0FBR0MsS0FBSyxJQUFJO0VBQ2xDLE1BQU1DLFlBQVksR0FBRzFDLEdBQUcsQ0FBQzJDLE1BQU0sQ0FBQ0YsS0FBSyxFQUFFO0lBQUVHLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQztFQUMxRCxJQUFJLENBQUNGLFlBQVksRUFBRTtJQUNqQixNQUFNLElBQUkvQyxLQUFLLENBQUN5QixLQUFLLENBQUN6QixLQUFLLENBQUN5QixLQUFLLENBQUNDLGdCQUFnQixFQUFFLHVDQUF1QyxDQUFDO0VBQzlGO0VBRUEsT0FBT3FCLFlBQVksQ0FBQ0csTUFBTTtBQUM1QixDQUFDO0FBRUQsTUFBTUMsYUFBYSxHQUFHLE9BQU87RUFBRUwsS0FBSztFQUFFekI7QUFBRyxDQUFDLEVBQUU7RUFBRStCLFFBQVE7RUFBRWpCLGVBQWU7RUFBRUM7QUFBWSxDQUFDLEtBQUs7RUFDekYsSUFBSSxDQUFDVSxLQUFLLEVBQUU7SUFDVixNQUFNLElBQUk5QyxLQUFLLENBQUN5QixLQUFLLENBQUN6QixLQUFLLENBQUN5QixLQUFLLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxDQUFDO0VBQzNGO0VBRUEsTUFBTTtJQUFFMkIsR0FBRyxFQUFFbkIsS0FBSztJQUFFb0IsR0FBRyxFQUFFQztFQUFVLENBQUMsR0FBR1Ysa0JBQWtCLENBQUNDLEtBQUssQ0FBQztFQUNoRSxNQUFNVSxjQUFjLEdBQUcsT0FBTztFQUM5QixJQUFJQyxTQUFTO0VBRWJyQixXQUFXLEdBQUdBLFdBQVcsSUFBSW9CLGNBQWM7RUFDM0NyQixlQUFlLEdBQUdBLGVBQWUsSUFBSSxDQUFDO0VBRXRDLE1BQU11QixXQUFXLEdBQUcsTUFBTXpCLHFCQUFxQixDQUFDQyxLQUFLLEVBQUVDLGVBQWUsRUFBRUMsV0FBVyxDQUFDO0VBQ3BGLE1BQU11QixVQUFVLEdBQUdELFdBQVcsQ0FBQ0UsU0FBUyxJQUFJRixXQUFXLENBQUNHLFlBQVk7RUFFcEUsSUFBSTtJQUNGSixTQUFTLEdBQUdwRCxHQUFHLENBQUN5RCxNQUFNLENBQUNoQixLQUFLLEVBQUVhLFVBQVUsRUFBRTtNQUN4Q0ksVUFBVSxFQUFFUixTQUFTO01BQ3JCO01BQ0FTLFFBQVEsRUFBRVo7SUFDWixDQUFDLENBQUM7RUFDSixDQUFDLENBQUMsT0FBT2EsU0FBUyxFQUFFO0lBQ2xCLE1BQU1DLE9BQU8sR0FBR0QsU0FBUyxDQUFDQyxPQUFPO0lBRWpDLE1BQU0sSUFBSWxFLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ3pCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUcsR0FBRXdDLE9BQVEsRUFBQyxDQUFDO0VBQ25FO0VBRUEsSUFBSVQsU0FBUyxDQUFDVSxHQUFHLEtBQUs1RCxZQUFZLEVBQUU7SUFDbEMsTUFBTSxJQUFJUCxLQUFLLENBQUN5QixLQUFLLENBQ25CekIsS0FBSyxDQUFDeUIsS0FBSyxDQUFDQyxnQkFBZ0IsRUFDM0IsOERBQTZEbkIsWUFBYSxZQUFXa0QsU0FBUyxDQUFDVSxHQUFJLEVBQUMsQ0FDdEc7RUFDSDtFQUVBLElBQUlWLFNBQVMsQ0FBQ1csR0FBRyxLQUFLL0MsRUFBRSxFQUFFO0lBQ3hCLE1BQU0sSUFBSXJCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ3pCLEtBQUssQ0FBQ3lCLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUscUNBQXFDLENBQUM7RUFDNUY7RUFDQSxPQUFPK0IsU0FBUztBQUNsQixDQUFDOztBQUVEO0FBQ0EsU0FBU1ksZ0JBQWdCLENBQUM1RCxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUMzQyxJQUFJRCxRQUFRLENBQUNxQyxLQUFLLEVBQUU7SUFDbEIsT0FBT0ssYUFBYSxDQUFDMUMsUUFBUSxFQUFFQyxPQUFPLENBQUM7RUFDekMsQ0FBQyxNQUFNO0lBQ0wsT0FBT08sa0JBQWtCLENBQUNSLFFBQVEsRUFBRUMsT0FBTyxDQUFDO0VBQzlDO0FBQ0Y7O0FBRUE7QUFDQSxTQUFTNEQsYUFBYSxDQUFDMUMsTUFBTSxFQUFFbkIsUUFBUSxFQUFFQyxPQUFPLEVBQUU7RUFDaEQsSUFBSUQsUUFBUSxDQUFDcUMsS0FBSyxFQUFFO0lBQ2xCLE9BQU95QixPQUFPLENBQUNDLE9BQU8sRUFBRTtFQUMxQixDQUFDLE1BQU07SUFDTCxPQUFPN0Msa0JBQWtCLENBQUNDLE1BQU0sRUFBRW5CLFFBQVEsRUFBRUMsT0FBTyxDQUFDO0VBQ3REO0FBQ0Y7O0FBRUE7QUFDQSxTQUFTUSxZQUFZLENBQUN1RCxJQUFJLEVBQUU7RUFDMUIsT0FBT25FLFlBQVksQ0FBQ29FLEdBQUcsQ0FBQyw2QkFBNkIsR0FBR0QsSUFBSSxDQUFDO0FBQy9EO0FBRUFFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZOLGFBQWEsRUFBRUEsYUFBYTtFQUM1QkQsZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMifQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJjcnlwdG8iLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImh0dHBzUmVxdWVzdCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsImdldEFwcFNlY3JldFBhdGgiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJhcHBTZWNyZXQiLCJhcHBzZWNyZXRfcHJvb2YiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiYWNjZXNzX3Rva2VuIiwiZGlnZXN0IiwidmFsaWRhdGVHcmFwaFRva2VuIiwiZ3JhcGhSZXF1ZXN0IiwidGhlbiIsImRhdGEiLCJpZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVHcmFwaEFwcElkIiwiYXBwSWRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJnZXRGYWNlYm9va0tleUJ5S2V5SWQiLCJrZXlJZCIsImNhY2hlTWF4RW50cmllcyIsImNhY2hlTWF4QWdlIiwiY2xpZW50Iiwiandrc1VyaSIsImNhY2hlIiwiYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24iLCJwcm9taXNpZnkiLCJnZXRTaWduaW5nS2V5Iiwia2V5IiwiZXJyb3IiLCJ2ZXJpZnlJZFRva2VuIiwidG9rZW4iLCJjbGllbnRJZCIsImtpZCIsImFsZyIsImFsZ29yaXRobSIsImdldEhlYWRlckZyb21Ub2tlbiIsIk9ORV9IT1VSX0lOX01TIiwiand0Q2xhaW1zIiwiZmFjZWJvb2tLZXkiLCJzaWduaW5nS2V5IiwicHVibGljS2V5IiwicnNhUHVibGljS2V5IiwidmVyaWZ5IiwiYWxnb3JpdGhtcyIsImF1ZGllbmNlIiwiZXhjZXB0aW9uIiwibWVzc2FnZSIsImlzcyIsInN1YiIsInZhbGlkYXRlQXV0aERhdGEiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwiZ2V0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2ZhY2Vib29rLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgRmFjZWJvb2sgR3JhcGggQVBJLlxuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IGp3a3NDbGllbnQgPSByZXF1aXJlKCdqd2tzLXJzYScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbmNvbnN0IGF1dGhVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vZmFjZWJvb2suY29tJztcblxuZnVuY3Rpb24gZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGFwcFNlY3JldCA9IG9wdGlvbnMuYXBwU2VjcmV0O1xuICBpZiAoIWFwcFNlY3JldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBhcHBzZWNyZXRfcHJvb2YgPSBjcnlwdG9cbiAgICAuY3JlYXRlSG1hYygnc2hhMjU2JywgYXBwU2VjcmV0KVxuICAgIC51cGRhdGUoYXV0aERhdGEuYWNjZXNzX3Rva2VuKVxuICAgIC5kaWdlc3QoJ2hleCcpO1xuXG4gIHJldHVybiBgJmFwcHNlY3JldF9wcm9vZj0ke2FwcHNlY3JldF9wcm9vZn1gO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyYXBoVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdChcbiAgICAnbWU/ZmllbGRzPWlkJmFjY2Vzc190b2tlbj0nICsgYXV0aERhdGEuYWNjZXNzX3Rva2VuICsgZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucylcbiAgKS50aGVuKGRhdGEgPT4ge1xuICAgIGlmICgoZGF0YSAmJiBkYXRhLmlkID09IGF1dGhEYXRhLmlkKSB8fCAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhdXRoRGF0YS5pZCA9PT0gJ3Rlc3QnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ZhY2Vib29rIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVHcmFwaEFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGFjY2Vzc190b2tlbiA9IGF1dGhEYXRhLmFjY2Vzc190b2tlbjtcbiAgaWYgKHByb2Nlc3MuZW52LlRFU1RJTkcgJiYgYWNjZXNzX3Rva2VuID09PSAndGVzdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFwcElkcykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2FwcElkcyBtdXN0IGJlIGFuIGFycmF5LicpO1xuICB9XG4gIGlmICghYXBwSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgZ3JhcGhSZXF1ZXN0KFxuICAgIGBhcHA/YWNjZXNzX3Rva2VuPSR7YWNjZXNzX3Rva2VufSR7Z2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyl9YFxuICApO1xuICBpZiAoIWRhdGEgfHwgIWFwcElkcy5pbmNsdWRlcyhkYXRhLmlkKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0RmFjZWJvb2tLZXlCeUtleUlkID0gYXN5bmMgKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgIGp3a3NVcmk6IGAke1RPS0VOX0lTU1VFUn0vLndlbGwta25vd24vb2F1dGgvb3BlbmlkL2p3a3MvYCxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZU1heEVudHJpZXMsXG4gICAgY2FjaGVNYXhBZ2UsXG4gIH0pO1xuXG4gIGNvbnN0IGFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uID0gdXRpbC5wcm9taXNpZnkoY2xpZW50LmdldFNpZ25pbmdLZXkpO1xuXG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gYXdhaXQgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24oa2V5SWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcga2V5IGZvciBLZXkgSUQ6ICR7a2V5SWR9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IHZlcmlmeUlkVG9rZW4gPSBhc3luYyAoeyB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSB9KSA9PiB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2lkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgZmFjZWJvb2tLZXkgPSBhd2FpdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gZmFjZWJvb2tLZXkucHVibGljS2V5IHx8IGZhY2Vib29rS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoYXV0aERhdGEudG9rZW4pIHtcbiAgICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKGF1dGhEYXRhLnRva2VuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBGQiBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1JLEdBQUcsR0FBR0osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxNQUFNTSxTQUFTLEdBQUdOLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTU8sWUFBWSxHQUFHLHNCQUFzQjtBQUUzQyxTQUFTQyxnQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDaEQsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUNDLFNBQVM7RUFDbkMsSUFBSSxDQUFDQSxTQUFTLEVBQUU7SUFDZCxPQUFPLEVBQUU7RUFDWDtFQUNBLE1BQU1DLGVBQWUsR0FBR1gsTUFBTSxDQUMzQlksVUFBVSxDQUFDLFFBQVEsRUFBRUYsU0FBUyxDQUFDLENBQy9CRyxNQUFNLENBQUNMLFFBQVEsQ0FBQ00sWUFBWSxDQUFDLENBQzdCQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBRWhCLE9BQVEsb0JBQW1CSixlQUFnQixFQUFDO0FBQzlDO0FBRUEsU0FBU0ssa0JBQWtCLENBQUNSLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0VBQzdDLE9BQU9RLFlBQVksQ0FDakIsNEJBQTRCLEdBQUdULFFBQVEsQ0FBQ00sWUFBWSxHQUFHUCxnQkFBZ0IsQ0FB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
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
5
|
const https = require('https');
|
|
6
6
|
const jwt = require('jsonwebtoken');
|
|
7
|
+
const authUtils = require('./utils');
|
|
7
8
|
const TOKEN_ISSUER = 'accounts.google.com';
|
|
8
9
|
const HTTPS_TOKEN_ISSUER = 'https://accounts.google.com';
|
|
9
10
|
let cache = {};
|
|
@@ -43,15 +44,6 @@ function getGoogleKeyByKeyId(keyId) {
|
|
|
43
44
|
}).on('error', reject);
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
|
-
function getHeaderFromToken(token) {
|
|
47
|
-
const decodedToken = jwt.decode(token, {
|
|
48
|
-
complete: true
|
|
49
|
-
});
|
|
50
|
-
if (!decodedToken) {
|
|
51
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
52
|
-
}
|
|
53
|
-
return decodedToken.header;
|
|
54
|
-
}
|
|
55
47
|
async function verifyIdToken({
|
|
56
48
|
id_token: token,
|
|
57
49
|
id
|
|
@@ -64,7 +56,7 @@ async function verifyIdToken({
|
|
|
64
56
|
const {
|
|
65
57
|
kid: keyId,
|
|
66
58
|
alg: algorithm
|
|
67
|
-
} = getHeaderFromToken(token);
|
|
59
|
+
} = authUtils.getHeaderFromToken(token);
|
|
68
60
|
let jwtClaims;
|
|
69
61
|
const googleKey = await getGoogleKeyByKeyId(keyId);
|
|
70
62
|
try {
|
|
@@ -141,4 +133,4 @@ function encodeLengthHex(n) {
|
|
|
141
133
|
const lengthOfLengthByte = 128 + nHex.length / 2;
|
|
142
134
|
return toHex(lengthOfLengthByte) + nHex;
|
|
143
135
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaGVhZGVyIiwidmVyaWZ5SWRUb2tlbiIsImlkX3Rva2VuIiwiaWQiLCJjbGllbnRJZCIsImFsZyIsImFsZ29yaXRobSIsImp3dENsYWltcyIsImdvb2dsZUtleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJhdWQiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwidmFsaWRhdGVBcHBJZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtb2R1bHVzQjY0IiwiZXhwb25lbnRCNjQiLCJCdWZmZXIiLCJleHBvbmVudCIsIm1vZHVsdXNIZXgiLCJwcmVwYWRTaWduZWQiLCJleHBvbmVudEhleCIsIm1vZGxlbiIsImxlbmd0aCIsImV4cGxlbiIsImVuY29kZWRNb2RsZW4iLCJlbmNvZGVMZW5ndGhIZXgiLCJlbmNvZGVkRXhwbGVuIiwiZW5jb2RlZFB1YmtleSIsImRlciIsInBlbSIsImpvaW4iLCJoZXhTdHIiLCJtc2IiLCJ0b0hleCIsIm51bWJlciIsIm5zdHIiLCJuSGV4IiwibGVuZ3RoT2ZMZW5ndGhCeXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvZ29vZ2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBnb29nbGUgQVBJLlxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCBqd3QgPSByZXF1aXJlKCdqc29ud2VidG9rZW4nKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2FjY291bnRzLmdvb2dsZS5jb20nO1xuY29uc3QgSFRUUFNfVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSc7XG5cbmxldCBjYWNoZSA9IHt9O1xuXG4vLyBSZXRyaWV2ZSBHb29nbGUgU2lnbmluIEtleXMgKHdpdGggY2FjaGUgY29udHJvbClcbmZ1bmN0aW9uIGdldEdvb2dsZUtleUJ5S2V5SWQoa2V5SWQpIHtcbiAgaWYgKGNhY2hlW2tleUlkXSAmJiBjYWNoZS5leHBpcmVzQXQgPiBuZXcgRGF0ZSgpKSB7XG4gICAgcmV0dXJuIGNhY2hlW2tleUlkXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cHNcbiAgICAgIC5nZXQoYGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92My9jZXJ0c2AsIHJlcyA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICBkYXRhICs9IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGtleXMgfSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgY29uc3QgcGVtcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAgICAgKHBlbXMsIHsgbjogbW9kdWx1cywgZTogZXhwb3NhbnQsIGtpZCB9KSA9PlxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBlbXMsIHtcbiAgICAgICAgICAgICAgICBba2lkXTogcnNhUHVibGljS2V5VG9QRU0obW9kdWx1cywgZXhwb3NhbnQpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgICB2YXIgZXhwaXJlID0gcmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXS5tYXRjaCgvbWF4LWFnZT0oWzAtOV0rKS8pO1xuXG4gICAgICAgICAgICBpZiAoZXhwaXJlKSB7XG4gICAgICAgICAgICAgIGNhY2hlID0gT2JqZWN0LmFzc2lnbih7fSwgcGVtcywge1xuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyBOdW1iZXIoZXhwaXJlWzFdKSAqIDEwMDApLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHBlbXNba2V5SWRdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pIHtcbiAgY29uc3QgZGVjb2RlZFRva2VuID0gand0LmRlY29kZSh0b2tlbiwgeyBjb21wbGV0ZTogdHJ1ZSB9KTtcblxuICBpZiAoIWRlY29kZWRUb2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgcHJvdmlkZWQgdG9rZW4gZG9lcyBub3QgZGVjb2RlIGFzIEpXVGApO1xuICB9XG5cbiAgcmV0dXJuIGRlY29kZWRUb2tlbi5oZWFkZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUlkVG9rZW4oeyBpZF90b2tlbjogdG9rZW4sIGlkIH0sIHsgY2xpZW50SWQgfSkge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBpZCB0b2tlbiBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBjb25zdCB7IGtpZDoga2V5SWQsIGFsZzogYWxnb3JpdGhtIH0gPSBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBsZXQgand0Q2xhaW1zO1xuICBjb25zdCBnb29nbGVLZXkgPSBhd2FpdCBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIGdvb2dsZUtleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSICYmIGp3dENsYWltcy5pc3MgIT09IEhUVFBTX1RPS0VOX0lTU1VFUikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGlzc3VlZCBieSBjb3JyZWN0IHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSBvciAke0hUVFBTX1RPS0VOX0lTU1VFUn0gfCBmcm9tOiAke2p3dENsYWltcy5pc3N9YFxuICAgICk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLnN1YiAhPT0gaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGF1dGggZGF0YSBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBpZiAoY2xpZW50SWQgJiYgand0Q2xhaW1zLmF1ZCAhPT0gY2xpZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBhdXRob3JpemVkIGZvciB0aGlzIGNsaWVudElkLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGp3dENsYWltcztcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG5cbi8vIEhlbHBlcnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIFJTQSBjZXJ0cyB0byBQRU0gKGZyb20gandrcy1yc2EpXG5mdW5jdGlvbiByc2FQdWJsaWNLZXlUb1BFTShtb2R1bHVzQjY0LCBleHBvbmVudEI2NCkge1xuICBjb25zdCBtb2R1bHVzID0gbmV3IEJ1ZmZlcihtb2R1bHVzQjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGV4cG9uZW50ID0gbmV3IEJ1ZmZlcihleHBvbmVudEI2NCwgJ2Jhc2U2NCcpO1xuICBjb25zdCBtb2R1bHVzSGV4ID0gcHJlcGFkU2lnbmVkKG1vZHVsdXMudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgZXhwb25lbnRIZXggPSBwcmVwYWRTaWduZWQoZXhwb25lbnQudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgbW9kbGVuID0gbW9kdWx1c0hleC5sZW5ndGggLyAyO1xuICBjb25zdCBleHBsZW4gPSBleHBvbmVudEhleC5sZW5ndGggLyAyO1xuXG4gIGNvbnN0IGVuY29kZWRNb2RsZW4gPSBlbmNvZGVMZW5ndGhIZXgobW9kbGVuKTtcbiAgY29uc3QgZW5jb2RlZEV4cGxlbiA9IGVuY29kZUxlbmd0aEhleChleHBsZW4pO1xuICBjb25zdCBlbmNvZGVkUHVia2V5ID1cbiAgICAnMzAnICtcbiAgICBlbmNvZGVMZW5ndGhIZXgobW9kbGVuICsgZXhwbGVuICsgZW5jb2RlZE1vZGxlbi5sZW5ndGggLyAyICsgZW5jb2RlZEV4cGxlbi5sZW5ndGggLyAyICsgMikgK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRNb2RsZW4gK1xuICAgIG1vZHVsdXNIZXggK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRFeHBsZW4gK1xuICAgIGV4cG9uZW50SGV4O1xuXG4gIGNvbnN0IGRlciA9IG5ldyBCdWZmZXIoZW5jb2RlZFB1YmtleSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgcGVtID0gJy0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcbic7XG4gIHBlbSArPSBgJHtkZXIubWF0Y2goLy57MSw2NH0vZykuam9pbignXFxuJyl9YDtcbiAgcGVtICs9ICdcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcmV0dXJuIHBlbTtcbn1cblxuZnVuY3Rpb24gcHJlcGFkU2lnbmVkKGhleFN0cikge1xuICBjb25zdCBtc2IgPSBoZXhTdHJbMF07XG4gIGlmIChtc2IgPCAnMCcgfHwgbXNiID4gJzcnKSB7XG4gICAgcmV0dXJuIGAwMCR7aGV4U3RyfWA7XG4gIH1cbiAgcmV0dXJuIGhleFN0cjtcbn1cblxuZnVuY3Rpb24gdG9IZXgobnVtYmVyKSB7XG4gIGNvbnN0IG5zdHIgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuICBpZiAobnN0ci5sZW5ndGggJSAyKSB7XG4gICAgcmV0dXJuIGAwJHtuc3RyfWA7XG4gIH1cbiAgcmV0dXJuIG5zdHI7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUxlbmd0aEhleChuKSB7XG4gIGlmIChuIDw9IDEyNykge1xuICAgIHJldHVybiB0b0hleChuKTtcbiAgfVxuICBjb25zdCBuSGV4ID0gdG9IZXgobik7XG4gIGNvbnN0IGxlbmd0aE9mTGVuZ3RoQnl0ZSA9IDEyOCArIG5IZXgubGVuZ3RoIC8gMjtcbiAgcmV0dXJuIHRvSGV4KGxlbmd0aE9mTGVuZ3RoQnl0ZSkgKyBuSGV4O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUVaO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsTUFBTUUsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUVuQyxNQUFNRyxZQUFZLEdBQUcscUJBQXFCO0FBQzFDLE1BQU1DLGtCQUFrQixHQUFHLDZCQUE2QjtBQUV4RCxJQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVkO0FBQ0EsU0FBU0MsbUJBQW1CLENBQUNDLEtBQUssRUFBRTtFQUNsQyxJQUFJRixLQUFLLENBQUNFLEtBQUssQ0FBQyxJQUFJRixLQUFLLENBQUNHLFNBQVMsR0FBRyxJQUFJQyxJ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
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJ2ZXJpZnlJZFRva2VuIiwiaWRfdG9rZW4iLCJ0b2tlbiIsImlkIiwiY2xpZW50SWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJhbGciLCJhbGdvcml0aG0iLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJqd3RDbGFpbXMiLCJnb29nbGVLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwiYXVkIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIiwibW9kdWx1c0I2NCIsImV4cG9uZW50QjY0IiwiQnVmZmVyIiwiZXhwb25lbnQiLCJtb2R1bHVzSGV4IiwicHJlcGFkU2lnbmVkIiwiZXhwb25lbnRIZXgiLCJtb2RsZW4iLCJsZW5ndGgiLCJleHBsZW4iLCJlbmNvZGVkTW9kbGVuIiwiZW5jb2RlTGVuZ3RoSGV4IiwiZW5jb2RlZEV4cGxlbiIsImVuY29kZWRQdWJrZXkiLCJkZXIiLCJwZW0iLCJqb2luIiwiaGV4U3RyIiwibXNiIiwidG9IZXgiLCJudW1iZXIiLCJuc3RyIiwibkhleCIsImxlbmd0aE9mTGVuZ3RoQnl0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2dvb2dsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgZ29vZ2xlIEFQSS5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBhdXRoVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IFRPS0VOX0lTU1VFUiA9ICdhY2NvdW50cy5nb29nbGUuY29tJztcbmNvbnN0IEhUVFBTX1RPS0VOX0lTU1VFUiA9ICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20nO1xuXG5sZXQgY2FjaGUgPSB7fTtcblxuLy8gUmV0cmlldmUgR29vZ2xlIFNpZ25pbiBLZXlzICh3aXRoIGNhY2hlIGNvbnRyb2wpXG5mdW5jdGlvbiBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKSB7XG4gIGlmIChjYWNoZVtrZXlJZF0gJiYgY2FjaGUuZXhwaXJlc0F0ID4gbmV3IERhdGUoKSkge1xuICAgIHJldHVybiBjYWNoZVtrZXlJZF07XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGh0dHBzXG4gICAgICAuZ2V0KGBodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjMvY2VydHNgLCByZXMgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICAgICAgZGF0YSArPSBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBrZXlzIH0gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHBlbXMgPSBrZXlzLnJlZHVjZShcbiAgICAgICAgICAgIChwZW1zLCB7IG46IG1vZHVsdXMsIGU6IGV4cG9zYW50LCBraWQgfSkgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwZW1zLCB7XG4gICAgICAgICAgICAgICAgW2tpZF06IHJzYVB1YmxpY0tleVRvUEVNKG1vZHVsdXMsIGV4cG9zYW50KSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSkge1xuICAgICAgICAgICAgdmFyIGV4cGlyZSA9IHJlcy5oZWFkZXJzWydjYWNoZS1jb250cm9sJ10ubWF0Y2goL21heC1hZ2U9KFswLTldKykvKTtcblxuICAgICAgICAgICAgaWYgKGV4cGlyZSkge1xuICAgICAgICAgICAgICBjYWNoZSA9IE9iamVjdC5hc3NpZ24oe30sIHBlbXMsIHtcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgTnVtYmVyKGV4cGlyZVsxXSkgKiAxMDAwKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZShwZW1zW2tleUlkXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCByZWplY3QpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5SWRUb2tlbih7IGlkX3Rva2VuOiB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCB9KSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGlkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBsZXQgand0Q2xhaW1zO1xuICBjb25zdCBnb29nbGVLZXkgPSBhd2FpdCBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIGdvb2dsZUtleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSICYmIGp3dENsYWltcy5pc3MgIT09IEhUVFBTX1RPS0VOX0lTU1VFUikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGlzc3VlZCBieSBjb3JyZWN0IHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSBvciAke0hUVFBTX1RPS0VOX0lTU1VFUn0gfCBmcm9tOiAke2p3dENsYWltcy5pc3N9YFxuICAgICk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLnN1YiAhPT0gaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGF1dGggZGF0YSBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBpZiAoY2xpZW50SWQgJiYgand0Q2xhaW1zLmF1ZCAhPT0gY2xpZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBhdXRob3JpemVkIGZvciB0aGlzIGNsaWVudElkLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGp3dENsYWltcztcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG5cbi8vIEhlbHBlcnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIFJTQSBjZXJ0cyB0byBQRU0gKGZyb20gandrcy1yc2EpXG5mdW5jdGlvbiByc2FQdWJsaWNLZXlUb1BFTShtb2R1bHVzQjY0LCBleHBvbmVudEI2NCkge1xuICBjb25zdCBtb2R1bHVzID0gbmV3IEJ1ZmZlcihtb2R1bHVzQjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGV4cG9uZW50ID0gbmV3IEJ1ZmZlcihleHBvbmVudEI2NCwgJ2Jhc2U2NCcpO1xuICBjb25zdCBtb2R1bHVzSGV4ID0gcHJlcGFkU2lnbmVkKG1vZHVsdXMudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgZXhwb25lbnRIZXggPSBwcmVwYWRTaWduZWQoZXhwb25lbnQudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgbW9kbGVuID0gbW9kdWx1c0hleC5sZW5ndGggLyAyO1xuICBjb25zdCBleHBsZW4gPSBleHBvbmVudEhleC5sZW5ndGggLyAyO1xuXG4gIGNvbnN0IGVuY29kZWRNb2RsZW4gPSBlbmNvZGVMZW5ndGhIZXgobW9kbGVuKTtcbiAgY29uc3QgZW5jb2RlZEV4cGxlbiA9IGVuY29kZUxlbmd0aEhleChleHBsZW4pO1xuICBjb25zdCBlbmNvZGVkUHVia2V5ID1cbiAgICAnMzAnICtcbiAgICBlbmNvZGVMZW5ndGhIZXgobW9kbGVuICsgZXhwbGVuICsgZW5jb2RlZE1vZGxlbi5sZW5ndGggLyAyICsgZW5jb2RlZEV4cGxlbi5sZW5ndGggLyAyICsgMikgK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRNb2RsZW4gK1xuICAgIG1vZHVsdXNIZXggK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRFeHBsZW4gK1xuICAgIGV4cG9uZW50SGV4O1xuXG4gIGNvbnN0IGRlciA9IG5ldyBCdWZmZXIoZW5jb2RlZFB1YmtleSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgcGVtID0gJy0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcbic7XG4gIHBlbSArPSBgJHtkZXIubWF0Y2goLy57MSw2NH0vZykuam9pbignXFxuJyl9YDtcbiAgcGVtICs9ICdcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcmV0dXJuIHBlbTtcbn1cblxuZnVuY3Rpb24gcHJlcGFkU2lnbmVkKGhleFN0cikge1xuICBjb25zdCBtc2IgPSBoZXhTdHJbMF07XG4gIGlmIChtc2IgPCAnMCcgfHwgbXNiID4gJzcnKSB7XG4gICAgcmV0dXJuIGAwMCR7aGV4U3RyfWA7XG4gIH1cbiAgcmV0dXJuIGhleFN0cjtcbn1cblxuZnVuY3Rpb24gdG9IZXgobnVtYmVyKSB7XG4gIGNvbnN0IG5zdHIgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuICBpZiAobnN0ci5sZW5ndGggJSAyKSB7XG4gICAgcmV0dXJuIGAwJHtuc3RyfWA7XG4gIH1cbiAgcmV0dXJuIG5zdHI7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUxlbmd0aEhleChuKSB7XG4gIGlmIChuIDw9IDEyNykge1xuICAgIHJldHVybiB0b0hleChuKTtcbiAgfVxuICBjb25zdCBuSGV4ID0gdG9IZXgobik7XG4gIGNvbnN0IGxlbmd0aE9mTGVuZ3RoQnl0ZSA9IDEyOCArIG5IZXgubGVuZ3RoIC8gMjtcbiAgcmV0dXJuIHRvSGV4KGxlbmd0aE9mTGVuZ3RoQnl0ZSkgKyBuSGV4O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUVaO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsTUFBTUUsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNRyxTQUFTLEdBQUdILE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTUksWUFBWSxHQUFHLHFCQUFxQjtBQUMxQyxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBNkI7QUFFeEQsSUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs7QUFFZDtBQUNBLFNBQVNDLG1CQUFtQixDQUFDQyxLQUFLLEVBQUU7RUFDbEMsSUFBSUYsS0FBSyxDQUFDRSxLQUFLLENBQUMsSUFBSUYsS0FBSyxDQUFDRyxTQUFTLEdBQUcsSUFBSUMsSUFBSSxFQUFFLEVBQUU7SUFDaEQsT0FBT0osS0FBSyxDQUFDRSxLQUFLLENBQUM7RUFDckI7RUFFQSxPQUFPLElBQUlHLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztJQUN0Q1osS0FBSyxDQUNGYSxHQUFHLENBQUUsNENBQTJDLEVBQUVDLEdBQUcsSUFBSTtNQUN4RCxJQUFJQyxJQUFJLEdBQUcsRUFBRTtNQUNiRCxHQUFHLENBQUNFLEVBQUUsQ0FB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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const jwt = require('jsonwebtoken');
|
|
4
|
+
const Parse = require('parse/node').Parse;
|
|
5
|
+
const getHeaderFromToken = token => {
|
|
6
|
+
const decodedToken = jwt.decode(token, {
|
|
7
|
+
complete: true
|
|
8
|
+
});
|
|
9
|
+
if (!decodedToken) {
|
|
10
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
11
|
+
}
|
|
12
|
+
return decodedToken.header;
|
|
13
|
+
};
|
|
14
|
+
module.exports = {
|
|
15
|
+
getHeaderFromToken
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqd3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaGVhZGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBnZXRIZWFkZXJGcm9tVG9rZW4gPSB0b2tlbiA9PiB7XG4gIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dC5kZWNvZGUodG9rZW4sIHsgY29tcGxldGU6IHRydWUgfSk7XG4gIGlmICghZGVjb2RlZFRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBwcm92aWRlZCB0b2tlbiBkb2VzIG5vdCBkZWNvZGUgYXMgSldUYCk7XG4gIH1cblxuICByZXR1cm4gZGVjb2RlZFRva2VuLmhlYWRlcjtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGVhZGVyRnJvbVRva2VuLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxHQUFHLEdBQUdDLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDbkMsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNDLEtBQUs7QUFDekMsTUFBTUMsa0JBQWtCLEdBQUdDLEtBQUssSUFBSTtFQUNsQyxNQUFNQyxZQUFZLEdBQUdMLEdBQUcsQ0FBQ00sTUFBTSxDQUFDRixLQUFLLEVBQUU7SUFBRUcsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDO0VBQzFELElBQUksQ0FBQ0YsWUFBWSxFQUFFO0lBQ2pCLE1BQU0sSUFBSUgsS0FBSyxDQUFDTSxLQUFLLENBQUNOLEtBQUssQ0FBQ00sS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRyx1Q0FBc0MsQ0FBQztFQUM5RjtFQUVBLE9BQU9KLFlBQVksQ0FBQ0ssTUFBTTtBQUM1QixDQUFDO0FBQ0RDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZUO0FBQ0YsQ0FBQyJ9
|
package/lib/LiveQuery/Client.js
CHANGED
|
@@ -58,13 +58,13 @@ class Client {
|
|
|
58
58
|
response['requestId'] = subscriptionId;
|
|
59
59
|
}
|
|
60
60
|
if (typeof parseObjectJSON !== 'undefined') {
|
|
61
|
-
let
|
|
61
|
+
let keys;
|
|
62
62
|
if (this.subscriptionInfos.has(subscriptionId)) {
|
|
63
|
-
|
|
63
|
+
keys = this.subscriptionInfos.get(subscriptionId).keys;
|
|
64
64
|
}
|
|
65
|
-
response['object'] = this._toJSONWithFields(parseObjectJSON,
|
|
65
|
+
response['object'] = this._toJSONWithFields(parseObjectJSON, keys);
|
|
66
66
|
if (parseOriginalObjectJSON) {
|
|
67
|
-
response['original'] = this._toJSONWithFields(parseOriginalObjectJSON,
|
|
67
|
+
response['original'] = this._toJSONWithFields(parseOriginalObjectJSON, keys);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
Client.pushResponse(this.parseWebSocket, JSON.stringify(response));
|
|
@@ -87,4 +87,4 @@ class Client {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
exports.Client = Client;
|
|
90
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkYWZhdWx0RmllbGRzIiwiQ2xpZW50IiwiY29uc3RydWN0b3IiLCJpZCIsInBhcnNlV2ViU29ja2V0IiwiaGFzTWFzdGVyS2V5Iiwic2Vzc2lvblRva2VuIiwiaW5zdGFsbGF0aW9uSWQiLCJyb2xlcyIsInN1YnNjcmlwdGlvbkluZm9zIiwiTWFwIiwicHVzaENvbm5lY3QiLCJfcHVzaEV2ZW50IiwicHVzaFN1YnNjcmliZSIsInB1c2hVbnN1YnNjcmliZSIsInB1c2hDcmVhdGUiLCJwdXNoRW50ZXIiLCJwdXNoVXBkYXRlIiwicHVzaERlbGV0ZSIsInB1c2hMZWF2ZSIsInB1c2hSZXNwb25zZSIsIm1lc3NhZ2UiLCJsb2dnZXIiLCJ2ZXJib3NlIiwic2VuZCIsInB1c2hFcnJvciIsImNvZGUiLCJlcnJvciIsInJlY29ubmVjdCIsInJlcXVlc3RJZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcCIsImFkZFN1YnNjcmlwdGlvbkluZm8iLCJzdWJzY3JpcHRpb25JbmZvIiwic2V0IiwiZ2V0U3Vic2NyaXB0aW9uSW5mbyIsImdldCIsImRlbGV0ZVN1YnNjcmlwdGlvbkluZm8iLCJkZWxldGUiLCJ0eXBlIiwic3Vic2NyaXB0aW9uSWQiLCJwYXJzZU9iamVjdEpTT04iLCJwYXJzZU9yaWdpbmFsT2JqZWN0SlNPTiIsInJlc3BvbnNlIiwiY2xpZW50SWQiLCJrZXlzIiwiaGFzIiwiX3RvSlNPTldpdGhGaWVsZHMiLCJmaWVsZHMiLCJsaW1pdGVkUGFyc2VPYmplY3QiLCJmaWVsZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuaW1wb3J0IHR5cGUgeyBGbGF0dGVuZWRPYmplY3REYXRhIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IHsgW2F0dHI6IHN0cmluZ106IGFueSB9O1xuXG5jb25zdCBkYWZhdWx0RmllbGRzID0gWydjbGFzc05hbWUnLCAnb2JqZWN0SWQnLCAndXBkYXRlZEF0JywgJ2NyZWF0ZWRBdCcsICdBQ0wnXTtcblxuY2xhc3MgQ2xpZW50IHtcbiAgaWQ6IG51bWJlcjtcbiAgcGFyc2VXZWJTb2NrZXQ6IGFueTtcbiAgaGFzTWFzdGVyS2V5OiBib29sZWFuO1xuICBzZXNzaW9uVG9rZW46IHN0cmluZztcbiAgaW5zdGFsbGF0aW9uSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICBzdWJzY3JpcHRpb25JbmZvczogT2JqZWN0O1xuICBwdXNoQ29ubmVjdDogRnVuY3Rpb247XG4gIHB1c2hTdWJzY3JpYmU6IEZ1bmN0aW9uO1xuICBwdXNoVW5zdWJzY3JpYmU6IEZ1bmN0aW9uO1xuICBwdXNoQ3JlYXRlOiBGdW5jdGlvbjtcbiAgcHVzaEVudGVyOiBGdW5jdGlvbjtcbiAgcHVzaFVwZGF0ZTogRnVuY3Rpb247XG4gIHB1c2hEZWxldGU6IEZ1bmN0aW9uO1xuICBwdXNoTGVhdmU6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBudW1iZXIsXG4gICAgcGFyc2VXZWJTb2NrZXQ6IGFueSxcbiAgICBoYXNNYXN0ZXJLZXk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcbiAgICBpbnN0YWxsYXRpb25JZDogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnBhcnNlV2ViU29ja2V0ID0gcGFyc2VXZWJTb2NrZXQ7XG4gICAgdGhpcy5oYXNNYXN0ZXJLZXkgPSBoYXNNYXN0ZXJLZXk7XG4gICAgdGhpcy5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uVG9rZW47XG4gICAgdGhpcy5pbnN0YWxsYXRpb25JZCA9IGluc3RhbGxhdGlvbklkO1xuICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbkluZm9zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMucHVzaENvbm5lY3QgPSB0aGlzLl9wdXNoRXZlbnQoJ2Nvbm5lY3RlZCcpO1xuICAgIHRoaXMucHVzaFN1YnNjcmliZSA9IHRoaXMuX3B1c2hFdmVudCgnc3Vic2NyaWJlZCcpO1xuICAgIHRoaXMucHVzaFVuc3Vic2NyaWJlID0gdGhpcy5fcHVzaEV2ZW50KCd1bnN1YnNjcmliZWQnKTtcbiAgICB0aGlzLnB1c2hDcmVhdGUgPSB0aGlzLl9wdXNoRXZlbnQoJ2NyZWF0ZScpO1xuICAgIHRoaXMucHVzaEVudGVyID0gdGhpcy5fcHVzaEV2ZW50KCdlbnRlcicpO1xuICAgIHRoaXMucHVzaFVwZGF0ZSA9IHRoaXMuX3B1c2hFdmVudCgndXBkYXRlJyk7XG4gICAgdGhpcy5wdXNoRGVsZXRlID0gdGhpcy5fcHVzaEV2ZW50KCdkZWxldGUnKTtcbiAgICB0aGlzLnB1c2hMZWF2ZSA9IHRoaXMuX3B1c2hFdmVudCgnbGVhdmUnKTtcbiAgfVxuXG4gIHN0YXRpYyBwdXNoUmVzcG9uc2UocGFyc2VXZWJTb2NrZXQ6IGFueSwgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuICAgIGxvZ2dlci52ZXJib3NlKCdQdXNoIFJlc3BvbnNlIDogJWonLCBtZXNzYWdlKTtcbiAgICBwYXJzZVdlYlNvY2tldC5zZW5kKG1lc3NhZ2UpO1xuICB9XG5cbiAgc3RhdGljIHB1c2hFcnJvcihcbiAgICBwYXJzZVdlYlNvY2tldDogYW55LFxuICAgIGNvZGU6IG51bWJlcixcbiAgICBlcnJvcjogc3RyaW5nLFxuICAgIHJlY29ubmVjdDogYm9vbGVhbiA9IHRydWUsXG4gICAgcmVxdWVzdElkOiBudW1iZXIgfCB2b2lkID0gbnVsbFxuICApOiB2b2lkIHtcbiAgICBDbGllbnQucHVzaFJlc3BvbnNlKFxuICAgICAgcGFyc2VXZWJTb2NrZXQsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG9wOiAnZXJyb3InLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgY29kZSxcbiAgICAgICAgcmVjb25uZWN0LFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhZGRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZDogbnVtYmVyLCBzdWJzY3JpcHRpb25JbmZvOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbkluZm9zLnNldChyZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm8pO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQ6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3MuZ2V0KHJlcXVlc3RJZCk7XG4gIH1cblxuICBkZWxldGVTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uSW5mb3MuZGVsZXRlKHJlcXVlc3RJZCk7XG4gIH1cblxuICBfcHVzaEV2ZW50KHR5cGU6IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKFxuICAgICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcixcbiAgICAgIHBhcnNlT2JqZWN0SlNPTjogYW55LFxuICAgICAgcGFyc2VPcmlnaW5hbE9iamVjdEpTT046IGFueVxuICAgICk6IHZvaWQge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgIG9wOiB0eXBlLFxuICAgICAgICBjbGllbnRJZDogdGhpcy5pZCxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHRoaXMuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzcG9uc2VbJ3JlcXVlc3RJZCddID0gc3Vic2NyaXB0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHBhcnNlT2JqZWN0SlNPTiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IGtleXM7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbkluZm9zLmhhcyhzdWJzY3JpcHRpb25JZCkpIHtcbiAgICAgICAgICBrZXlzID0gdGhpcy5zdWJzY3JpcHRpb25JbmZvcy5nZXQoc3Vic2NyaXB0aW9uSWQpLmtleXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2VbJ29iamVjdCddID0gdGhpcy5fdG9KU09OV2l0aEZpZWxkcyhwYXJzZU9iamVjdEpTT04sIGtleXMpO1xuICAgICAgICBpZiAocGFyc2VPcmlnaW5hbE9iamVjdEpTT04pIHtcbiAgICAgICAgICByZXNwb25zZVsnb3JpZ2luYWwnXSA9IHRoaXMuX3RvSlNPTldpdGhGaWVsZHMocGFyc2VPcmlnaW5hbE9iamVjdEpTT04sIGtleXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDbGllbnQucHVzaFJlc3BvbnNlKHRoaXMucGFyc2VXZWJTb2NrZXQsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG4gICAgfTtcbiAgfVxuXG4gIF90b0pTT05XaXRoRmllbGRzKHBhcnNlT2JqZWN0SlNPTjogYW55LCBmaWVsZHM6IGFueSk6IEZsYXR0ZW5lZE9iamVjdERhdGEge1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4gcGFyc2VPYmplY3RKU09OO1xuICAgIH1cbiAgICBjb25zdCBsaW1pdGVkUGFyc2VPYmplY3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRhZmF1bHRGaWVsZHMpIHtcbiAgICAgIGxpbWl0ZWRQYXJzZU9iamVjdFtmaWVsZF0gPSBwYXJzZU9iamVjdEpTT05bZmllbGRdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkIGluIHBhcnNlT2JqZWN0SlNPTikge1xuICAgICAgICBsaW1pdGVkUGFyc2VPYmplY3RbZmllbGRdID0gcGFyc2VPYmplY3RKU09OW2ZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxp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
|
|
@@ -23,6 +23,7 @@ var _lruCache = _interopRequireDefault(require("lru-cache"));
|
|
|
23
23
|
var _UsersRouter = _interopRequireDefault(require("../Routers/UsersRouter"));
|
|
24
24
|
var _DatabaseController = _interopRequireDefault(require("../Controllers/DatabaseController"));
|
|
25
25
|
var _util = require("util");
|
|
26
|
+
var _Deprecator = _interopRequireDefault(require("../Deprecator/Deprecator"));
|
|
26
27
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
28
|
class ParseLiveQueryServer {
|
|
28
29
|
// className -> (queryHash -> subscription)
|
|
@@ -710,9 +711,6 @@ class ParseLiveQueryServer {
|
|
|
710
711
|
request.query = parseQuery;
|
|
711
712
|
await (0, _triggers.runTrigger)(trigger, `beforeSubscribe.${className}`, request, auth);
|
|
712
713
|
const query = request.query.toJSON();
|
|
713
|
-
if (query.keys) {
|
|
714
|
-
query.fields = query.keys.split(',');
|
|
715
|
-
}
|
|
716
714
|
request.query = query;
|
|
717
715
|
}
|
|
718
716
|
if (className === '_Session') {
|
|
@@ -750,8 +748,15 @@ class ParseLiveQueryServer {
|
|
|
750
748
|
subscription: subscription
|
|
751
749
|
};
|
|
752
750
|
// Add selected fields, sessionToken and installationId for this subscription if necessary
|
|
751
|
+
if (request.query.keys) {
|
|
752
|
+
subscriptionInfo.keys = Array.isArray(request.query.keys) ? request.query.keys : request.query.keys.split(',');
|
|
753
|
+
}
|
|
753
754
|
if (request.query.fields) {
|
|
754
|
-
subscriptionInfo.
|
|
755
|
+
subscriptionInfo.keys = request.query.fields;
|
|
756
|
+
_Deprecator.default.logRuntimeDeprecation({
|
|
757
|
+
usage: `Subscribing using fields parameter`,
|
|
758
|
+
solution: `Subscribe using "keys" instead.`
|
|
759
|
+
});
|
|
755
760
|
}
|
|
756
761
|
if (request.query.watch) {
|
|
757
762
|
subscriptionInfo.watch = request.query.watch;
|
|
@@ -838,4 +843,4 @@ class ParseLiveQueryServer {
|
|
|
838
843
|
}
|
|
839
844
|
}
|
|
840
845
|
exports.ParseLiveQueryServer = ParseLiveQueryServer;
|
|
841
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwidmFsdWVzIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJjbGllbnQiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwiYWNsIiwiZ2V0QUNMIiwib3AiLCJfZ2V0Q0xQT3BlcmF0aW9uIiwicXVlcnkiLCJyZXMiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwicGFyc2VXZWJTb2NrZXQiLCJjb2RlIiwic3RyaW5naWZ5IiwiaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQiLCJpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkIiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiYWxsIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsIm9yaWdpbmFsIiwiZnVuY3Rpb25OYW1lIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInJlcXVlc3QiLCJ0djQiLCJ2YWxpZGF0ZSIsIlJlcXVlc3RTY2hlbWEiLCJfaGFuZGxlQ29ubmVjdCIsIl9oYW5kbGVTdWJzY3JpYmUiLCJfaGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uIiwiX2hhbmRsZVVuc3Vic2NyaWJlIiwiaW5mbyIsImhhcyIsInJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMiLCJkZWxldGUiLCJzdWJzY3JpcHRpb25JbmZvIiwic3Vic2NyaXB0aW9uSW5mb3MiLCJkZWxldGVDbGllbnRTdWJzY3JpcHRpb24iLCJoYXNTdWJzY3JpYmluZ0NsaWVudCIsIm1hdGNoZXNRdWVyeSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJtYXAiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImRlbCIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIkVycm9yIiwiSU5WQUxJRF9TRVNTSU9OX1RPS0VOIiwiZ2V0U3Vic2NyaXB0aW9uSW5mbyIsImFjbEdyb3VwIiwicHVzaCIsIlNjaGVtYUNvbnRyb2xsZXIiLCJ2YWxpZGF0ZVBlcm1pc3Npb24iLCJjbGllbnRBdXRoIiwiZmlsdGVyIiwib2JqIiwicHJvdGVjdGVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YWJhc2VDb250cm9sbGVyIiwiYWRkUHJvdGVjdGVkRmllbGRzIiwiRGF0YWJhc2VDb250cm9sbGVyIiwiZmlsdGVyU2Vuc2l0aXZlRGF0YSIsImxlbmd0aCIsIm9iamVjdElkIiwiX3ZlcmlmeUFDTCIsImlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCIsImdldFJlYWRBY2Nlc3MiLCJhY2xfaGFzX3JvbGVzIiwicGVybWlzc2lvbnNCeUlkIiwic29tZSIsInN0YXJ0c1dpdGgiLCJyb2xlTmFtZXMiLCJnZXRVc2VyUm9sZXMiLCJyb2xlIiwiZ2V0U2Vzc2lvbkZyb21DbGllbnQiLCJ3YXRjaCIsImlzRGVlcFN0cmljdEVxdWFsIiwiZ2V0UHVibGljUmVhZEFjY2VzcyIsInN1YnNjcmlwdGlvblRva2VuIiwiY2xpZW50U2Vzc2lvblRva2VuIiwiX3ZhbGlkYXRlS2V5cyIsIl9oYXNNYXN0ZXJLZXkiLCJ1dWlkdjQiLCJyZXEiLCJwdXNoQ29ubmVjdCIsInZhbGlkS2V5UGFpcnMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc1ZhbGlkIiwic2VjcmV0IiwiYXV0aENhbGxlZCIsInBhcnNlUXVlcnkiLCJ3aXRoSlNPTiIsImZpZWxkcyIsInNwbGl0Iiwid2hlcmUiLCJ0b1BvaW50ZXIiLCJtYXN0ZXIiLCJzdWJzY3JpcHRpb25IYXNoIiwicXVlcnlIYXNoIiwiU3Vic2NyaXB0aW9uIiwiYWRkU3Vic2NyaXB0aW9uSW5mbyIsImFkZENsaWVudFN1YnNjcmlwdGlvbiIsInB1c2hTdWJzY3JpYmUiLCJub3RpZnlDbGllbnQiLCJkZWxldGVTdWJzY3JpcHRpb25JbmZvIiwicHVzaFVuc3Vic2NyaWJlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xpdmVRdWVyeS9QYXJzZUxpdmVRdWVyeVNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHY0IGZyb20gJ3R2NCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBQYXJzZVdlYlNvY2tldFNlcnZlciB9IGZyb20gJy4vUGFyc2VXZWJTb2NrZXRTZXJ2ZXInO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IFJlcXVlc3RTY2hlbWEgZnJvbSAnLi9SZXF1ZXN0U2NoZW1hJztcbmltcG9ydCB7IG1hdGNoZXNRdWVyeSwgcXVlcnlIYXNoIH0gZnJvbSAnLi9RdWVyeVRvb2xzJztcbmltcG9ydCB7IFBhcnNlUHViU3ViIH0gZnJvbSAnLi9QYXJzZVB1YlN1Yic7XG5pbXBvcnQgU2NoZW1hQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9TY2hlbWFDb250cm9sbGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7XG4gIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMsXG4gIGdldFRyaWdnZXIsXG4gIHJ1blRyaWdnZXIsXG4gIHJlc29sdmVFcnJvcixcbiAgdG9KU09Od2l0aE9iamVjdHMsXG59IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCB7IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4sIEF1dGggfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCB7IGdldENhY2hlQ29udHJvbGxlciwgZ2V0RGF0YWJhc2VDb250cm9sbGVyIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IFVzZXJSb3V0ZXIgZnJvbSAnLi4vUm91dGVycy9Vc2Vyc1JvdXRlcic7XG5pbXBvcnQgRGF0YWJhc2VDb250cm9sbGVyIGZyb20gJy4uL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ3V0aWwnO1xuXG5jbGFzcyBQYXJzZUxpdmVRdWVyeVNlcnZlciB7XG4gIGNsaWVudHM6IE1hcDtcbiAgLy8gY2xhc3NOYW1lIC0+IChxdWVyeUhhc2ggLT4gc3Vic2NyaXB0aW9uKVxuICBzdWJzY3JpcHRpb25zOiBPYmplY3Q7XG4gIHBhcnNlV2ViU29ja2V0U2VydmVyOiBPYmplY3Q7XG4gIGtleVBhaXJzOiBhbnk7XG4gIC8vIFRoZSBzdWJzY3JpYmVyIHdlIHVzZSB0byBnZXQgb2JqZWN0IHVwZGF0ZSBmcm9tIHB1Ymxpc2hlclxuICBzdWJzY3JpYmVyOiBPYmplY3Q7XG5cbiAgY29uc3RydWN0b3Ioc2VydmVyOiBhbnksIGNvbmZpZzogYW55ID0ge30sIHBhcnNlU2VydmVyQ29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIHRoaXMuY2xpZW50cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBjb25maWcuYXBwSWQgPSBjb25maWcuYXBwSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgICBjb25maWcubWFzdGVyS2V5ID0gY29uZmlnLm1hc3RlcktleSB8fCBQYXJzZS5tYXN0ZXJLZXk7XG5cbiAgICAvLyBTdG9yZSBrZXlzLCBjb252ZXJ0IG9iaiB0byBtYXBcbiAgICBjb25zdCBrZXlQYWlycyA9IGNvbmZpZy5rZXlQYWlycyB8fCB7fTtcbiAgICB0aGlzLmtleVBhaXJzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGtleVBhaXJzKSkge1xuICAgICAgdGhpcy5rZXlQYWlycy5zZXQoa2V5LCBrZXlQYWlyc1trZXldKTtcbiAgICB9XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1N1cHBvcnQga2V5IHBhaXJzJywgdGhpcy5rZXlQYWlycyk7XG5cbiAgICAvLyBJbml0aWFsaXplIFBhcnNlXG4gICAgUGFyc2UuT2JqZWN0LmRpc2FibGVTaW5nbGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlcnZlclVSTCA9IGNvbmZpZy5zZXJ2ZXJVUkwgfHwgUGFyc2Uuc2VydmVyVVJMO1xuICAgIFBhcnNlLnNlcnZlclVSTCA9IHNlcnZlclVSTDtcbiAgICBQYXJzZS5pbml0aWFsaXplKGNvbmZpZy5hcHBJZCwgUGFyc2UuamF2YVNjcmlwdEtleSwgY29uZmlnLm1hc3RlcktleSk7XG5cbiAgICAvLyBUaGUgY2FjaGUgY29udHJvbGxlciBpcyBhIHByb3BlciBjYWNoZSBjb250cm9sbGVyXG4gICAgLy8gd2l0aCBhY2Nlc3MgdG8gVXNlciBhbmQgUm9sZXNcbiAgICB0aGlzLmNhY2hlQ29udHJvbGxlciA9IGdldENhY2hlQ29udHJvbGxlcihwYXJzZVNlcnZlckNvbmZpZyk7XG5cbiAgICBjb25maWcuY2FjaGVUaW1lb3V0ID0gY29uZmlnLmNhY2hlVGltZW91dCB8fCA1ICogMTAwMDsgLy8gNXNcblxuICAgIC8vIFRoaXMgYXV0aCBjYWNoZSBzdG9yZXMgdGhlIHByb21pc2VzIGZvciBlYWNoIGF1dGggcmVzb2x1dGlvbi5cbiAgICAvLyBUaGUgbWFpbiBiZW5lZml0IGlzIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIHNhbWUgdXNlciAvIHNlc3Npb24gdG9rZW4gcmVzb2x1dGlvbi5cbiAgICB0aGlzLmF1dGhDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiA1MDAsIC8vIDUwMCBjb25jdXJyZW50XG4gICAgICB0dGw6IGNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSB3ZWJzb2NrZXQgc2VydmVyXG4gICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlciA9IG5ldyBQYXJzZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIHNlcnZlcixcbiAgICAgIHBhcnNlV2Vic29ja2V0ID0+IHRoaXMuX29uQ29ubmVjdChwYXJzZVdlYnNvY2tldCksXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IFBhcnNlUHViU3ViLmNyZWF0ZVN1YnNjcmliZXIoY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuc3Vic2NyaWJlci5jb25uZWN0KSB7XG4gICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmliZXIuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLnN1YnNjcmliZXIuY29ubmVjdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVN1YnNjcmliZXJzKCk7XG4gIH1cbiAgX2NyZWF0ZVN1YnNjcmliZXJzKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VSZWNpZXZlZCA9IChjaGFubmVsLCBtZXNzYWdlU3RyKSA9PiB7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnU3Vic2NyaWJlIG1lc3NhZ2UgJWonLCBtZXNzYWdlU3RyKTtcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcigndW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UnLCBtZXNzYWdlU3RyLCBlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnY2xlYXJDYWNoZScpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJDYWNoZWRSb2xlcyhtZXNzYWdlLnVzZXJJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2luZmxhdGVQYXJzZU9iamVjdChtZXNzYWdlKTtcbiAgICAgIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZScpIHtcbiAgICAgICAgdGhpcy5fb25BZnRlclNhdmUobWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJEZWxldGUnKSB7XG4gICAgICAgIHRoaXMuX29uQWZ0ZXJEZWxldGUobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0dldCBtZXNzYWdlICVzIGZyb20gdW5rbm93biBjaGFubmVsICVqJywgbWVzc2FnZSwgY2hhbm5lbCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4gbWVzc2FnZVJlY2lldmVkKGNoYW5uZWwsIG1lc3NhZ2VTdHIpKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnYWZ0ZXJTYXZlJywgJ2FmdGVyRGVsZXRlJywgJ2NsZWFyQ2FjaGUnXSkge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IGAke1BhcnNlLmFwcGxpY2F0aW9uSWR9JHtmaWVsZH1gO1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLnN1YnNjcmliZShjaGFubmVsLCBtZXNzYWdlU3RyID0+IG1lc3NhZ2VSZWNpZXZlZChjaGFubmVsLCBtZXNzYWdlU3RyKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTWVzc2FnZSBpcyB0aGUgSlNPTiBvYmplY3QgZnJvbSBwdWJsaXNoZXIuIE1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0IGlzIHRoZSBQYXJzZU9iamVjdCBKU09OIGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QgSlNPTi5cbiAgX2luZmxhdGVQYXJzZU9iamVjdChtZXNzYWdlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBJbmZsYXRlIG1lcmdlZCBvYmplY3RcbiAgICBjb25zdCBjdXJyZW50UGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdDtcbiAgICBVc2VyUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMoY3VycmVudFBhcnNlT2JqZWN0KTtcbiAgICBsZXQgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsZXQgcGFyc2VPYmplY3QgPSBuZXcgUGFyc2UuT2JqZWN0KGNsYXNzTmFtZSk7XG4gICAgcGFyc2VPYmplY3QuX2ZpbmlzaEZldGNoKGN1cnJlbnRQYXJzZU9iamVjdCk7XG4gICAgbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDtcbiAgICAvLyBJbmZsYXRlIG9yaWdpbmFsIG9iamVjdFxuICAgIGNvbnN0IG9yaWdpbmFsUGFyc2VPYmplY3QgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3Q7XG4gICAgaWYgKG9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgIFVzZXJSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhvcmlnaW5hbFBhcnNlT2JqZWN0KTtcbiAgICAgIGNsYXNzTmFtZSA9IG9yaWdpbmFsUGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgICAgcGFyc2VPYmplY3QgPSBuZXcgUGFyc2UuT2JqZWN0KGNsYXNzTmFtZSk7XG4gICAgICBwYXJzZU9iamVjdC5fZmluaXNoRmV0Y2gob3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDtcbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyRGVsZXRlKG1lc3NhZ2U6IGFueSk6IHZvaWQge1xuICAgIGxvZ2dlci52ZXJib3NlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJEZWxldGUgaXMgdHJpZ2dlcmVkJyk7XG5cbiAgICBsZXQgZGVsZXRlZFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NMZXZlbFBlcm1pc3Npb25zID0gbWVzc2FnZS5jbGFzc0xldmVsUGVybWlzc2lvbnM7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gZGVsZXRlZFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlaiB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgZGVsZXRlZFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgY2xhc3NTdWJzY3JpcHRpb25zLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKGRlbGV0ZWRQYXJzZU9iamVjdCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIGlmICghaXNTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjbCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgIC8vIENoZWNrIENMUFxuICAgICAgICAgIGNvbnN0IG9wID0gdGhpcy5fZ2V0Q0xQT3BlcmF0aW9uKHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gICAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoZWQgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKGFjbCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGRlbGV0ZWRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgICAgIHNlbmRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdhZnRlckV2ZW50JywgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJzZU9iamVjdCA9IHRvSlNPTndpdGhPYmplY3RzKHJlcy5vYmplY3QsIHJlcy5vYmplY3QuY2xhc3NOYW1lIHx8IGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24ucXVlcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjbGllbnQucHVzaERlbGV0ZShyZXF1ZXN0SWQsIGRlbGV0ZWRQYXJzZU9iamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyU2F2ZShtZXNzYWdlOiBhbnkpOiB2b2lkIHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBsZXQgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlcyB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgY3VycmVudFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKFxuICAgICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICk7XG4gICAgICBjb25zdCBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gU2V0IG9yaWduYWwgUGFyc2VPYmplY3QgQUNMIGNoZWNraW5nIHByb21pc2UsIGlmIHRoZSBvYmplY3QgZG9lcyBub3QgbWF0Y2hcbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24sIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIEFDTFxuICAgICAgICAgIGxldCBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZTtcbiAgICAgICAgICBpZiAoIWlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEFDTDtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0wgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSA9IHRoaXMuX21hdGNoZXNBQ0wob3JpZ2luYWxBQ0wsIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IGN1cnJlbnQgUGFyc2VPYmplY3QgQUNMIGNoZWNraW5nIHByb21pc2UsIGlmIHRoZSBvYmplY3QgZG9lcyBub3QgbWF0Y2hcbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24sIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIEFDTFxuICAgICAgICAgIGxldCBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlO1xuICAgICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgICBpZiAoIWlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QUNMID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChjdXJyZW50QUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWF0Y2hlc0NMUChcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgW2lzT3JpZ2luYWxNYXRjaGVkLCBpc0N1cnJlbnRNYXRjaGVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICAgICAgICAnT3JpZ2luYWwgJWogfCBDdXJyZW50ICVqIHwgTWF0Y2g6ICVzLCAlcywgJXMsICVzIHwgUXVlcnk6ICVzJyxcbiAgICAgICAgICAgICAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbE1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudE1hdGNoZWQsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5oYXNoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gRGVjaWRlIGV2ZW50IHR5cGVcbiAgICAgICAgICAgIGxldCB0eXBlO1xuICAgICAgICAgICAgaWYgKGlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiAhaXNDdXJyZW50TWF0Y2hlZCkge1xuICAgICAgICAgICAgICB0eXBlID0gJ2xlYXZlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2VudGVyJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2NyZWF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2F0Y2hGaWVsZHNDaGFuZ2VkID0gdGhpcy5fY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQsIHJlcXVlc3RJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIXdhdGNoRmllbGRzQ2hhbmdlZCAmJiAodHlwZSA9PT0gJ3VwZGF0ZScgfHwgdHlwZSA9PT0gJ2NyZWF0ZScpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IHtcbiAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXG4gICAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgICAgb2JqZWN0OiBjdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgICAgICByZXMudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRQYXJzZU9iamVjdCA9IHRvSlNPTndpdGhPYmplY3RzKHJlcy5vYmplY3QsIHJlcy5vYmplY3QuY2xhc3NOYW1lIHx8IGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsICYmIHR5cGVvZiByZXMub3JpZ2luYWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwsXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLmNsYXNzTmFtZSB8fCBjbGFzc05hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICdwdXNoJyArIHJlcy5ldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcy5ldmVudC5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChjbGllbnRbZnVuY3Rpb25OYW1lXSkge1xuICAgICAgICAgICAgICBjbGllbnRbZnVuY3Rpb25OYW1lXShyZXF1ZXN0SWQsIGN1cnJlbnRQYXJzZU9iamVjdCwgb3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25Db25uZWN0KHBhcnNlV2Vic29ja2V0OiBhbnkpOiB2b2lkIHtcbiAgICBwYXJzZVdlYnNvY2tldC5vbignbWVzc2FnZScsIHJlcXVlc3QgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgcmVxdWVzdCcsIHJlcXVlc3QsIGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1JlcXVlc3Q6ICVqJywgcmVxdWVzdCk7XG5cbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIGEgdmFsaWQgcmVxdWVzdCwgcmV0dXJuIGVycm9yIGRpcmVjdGx5IGlmIG5vdFxuICAgICAgaWYgKFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbJ2dlbmVyYWwnXSkgfHxcbiAgICAgICAgIXR2NC52YWxpZGF0ZShyZXF1ZXN0LCBSZXF1ZXN0U2NoZW1hW3JlcXVlc3Qub3BdKVxuICAgICAgKSB7XG4gICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDEsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0IG1lc3NhZ2UgZXJyb3IgJXMnLCB0djQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChyZXF1ZXN0Lm9wKSB7XG4gICAgICAgIGNhc2UgJ2Nvbm5lY3QnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5zdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCAzLCAnR2V0IHVua25vd24gb3BlcmF0aW9uJyk7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgdW5rbm93biBvcGVyYXRpb24nLCByZXF1ZXN0Lm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYENsaWVudCBkaXNjb25uZWN0OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZVdlYnNvY2tldC5jbGllbnRJZDtcbiAgICAgIGlmICghdGhpcy5jbGllbnRzLmhhcyhjbGllbnRJZCkpIHtcbiAgICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0X2Vycm9yJyxcbiAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICBlcnJvcjogYFVuYWJsZSB0byBmaW5kIGNsaWVudCAke2NsaWVudElkfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZXJyb3IoYENhbiBub3QgZmluZCBjbGllbnQgJHtjbGllbnRJZH0gb24gZGlzY29ubmVjdGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnRcbiAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuICAgICAgdGhpcy5jbGllbnRzLmRlbGV0ZShjbGllbnRJZCk7XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm9dIG9mIF8uZW50cmllcyhjbGllbnQuc3Vic2NyaXB0aW9uSW5mb3MpKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBzdWJzY3JpcHRpb24uZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKGNsaWVudElkLCByZXF1ZXN0SWQpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNsaWVudCB3aGljaCBpcyBzdWJzY3JpYmluZyB0aGlzIHN1YnNjcmlwdGlvbiwgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5oYXNTdWJzY3JpYmluZ0NsaWVudCgpKSB7XG4gICAgICAgICAgY2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uaGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50cyAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IHN1YnNjcmlwdGlvbnMgJWQnLCB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBldmVudDogJ3dzX2Nvbm5lY3QnLFxuICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIF9tYXRjaGVzU3Vic2NyaXB0aW9uKHBhcnNlT2JqZWN0OiBhbnksIHN1YnNjcmlwdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gT2JqZWN0IGlzIHVuZGVmaW5lZCBvciBudWxsLCBub3QgbWF0Y2hcbiAgICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzUXVlcnkocGFyc2VPYmplY3QsIHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gIH1cblxuICBhc3luYyBfY2xlYXJDYWNoZWRSb2xlcyh1c2VySWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWxpZFRva2VucyA9IGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5TZXNzaW9uKVxuICAgICAgICAuZXF1YWxUbygndXNlcicsIFBhcnNlLlVzZXIuY3JlYXRlV2l0aG91dERhdGEodXNlcklkKSlcbiAgICAgICAgLmZpbmQoeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdmFsaWRUb2tlbnMubWFwKGFzeW5jIHRva2VuID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSB0b2tlbi5nZXQoJ3Nlc3Npb25Ub2tlbicpO1xuICAgICAgICAgIGNvbnN0IGF1dGhQcm9taXNlID0gdGhpcy5hdXRoQ2FjaGUuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgaWYgKCFhdXRoUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBbYXV0aDEsIGF1dGgyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGF1dGhQcm9taXNlLFxuICAgICAgICAgICAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7IGNhY2hlQ29udHJvbGxlcjogdGhpcy5jYWNoZUNvbnRyb2xsZXIsIHNlc3Npb25Ub2tlbiB9KSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBhdXRoMS5hdXRoPy5jbGVhclJvbGVDYWNoZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIGF1dGgyLmF1dGg/LmNsZWFyUm9sZUNhY2hlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuZGVsKHNlc3Npb25Ub2tlbik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBDb3VsZCBub3QgY2xlYXIgcm9sZSBjYWNoZS4gJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oc2Vzc2lvblRva2VuOiA/c3RyaW5nKTogUHJvbWlzZTx7IGF1dGg6ID9BdXRoLCB1c2VySWQ6ID9zdHJpbmcgfT4ge1xuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG4gICAgY29uc3QgZnJvbUNhY2hlID0gdGhpcy5hdXRoQ2FjaGUuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgaWYgKGZyb21DYWNoZSkge1xuICAgICAgcmV0dXJuIGZyb21DYWNoZTtcbiAgICB9XG4gICAgY29uc3QgYXV0aFByb21pc2UgPSBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgIGNhY2hlQ29udHJvbGxlcjogdGhpcy5jYWNoZUNvbnRyb2xsZXIsXG4gICAgICBzZXNzaW9uVG9rZW46IHNlc3Npb25Ub2tlbixcbiAgICB9KVxuICAgICAgLnRoZW4oYXV0aCA9PiB7XG4gICAgICAgIHJldHVybiB7IGF1dGgsIHVzZXJJZDogYXV0aCAmJiBhdXRoLnVzZXIgJiYgYXV0aC51c2VyLmlkIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggdGhlIHNlc3Npb24gdG9rZW5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4pIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5zZXQoc2Vzc2lvblRva2VuLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KSwgdGhpcy5jb25maWcuY2FjaGVUaW1lb3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5kZWwoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgdGhpcy5hdXRoQ2FjaGUuc2V0KHNlc3Npb25Ub2tlbiwgYXV0aFByb21pc2UpO1xuICAgIHJldHVybiBhdXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQ0xQKFxuICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9uczogP2FueSxcbiAgICBvYmplY3Q6IGFueSxcbiAgICBjbGllbnQ6IGFueSxcbiAgICByZXF1ZXN0SWQ6IG51bWJlcixcbiAgICBvcDogc3RyaW5nXG4gICk6IGFueSB7XG4gICAgLy8gdHJ5IHRvIG1hdGNoIG9uIHVzZXIgZmlyc3QsIGxlc3MgZXhwZW5zaXZlIHRoYW4gd2l0aCByb2xlc1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgbGV0IHVzZXJJZDtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB7IHVzZXJJZCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuKTtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgU2NoZW1hQ29udHJvbGxlci52YWxpZGF0ZVBlcm1pc3Npb24oXG4gICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgb2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgIG9wXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYEZhaWxlZCBtYXRjaGluZyBDTFAgZm9yICR7b2JqZWN0LmlkfSAke3VzZXJJZH0gJHtlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUT0RPOiBoYW5kbGUgcm9sZXMgcGVybWlzc2lvbnNcbiAgICAvLyBPYmplY3Qua2V5cyhjbGFzc0xldmVsUGVybWlzc2lvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIC8vICAgY29uc3QgcGVybSA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1trZXldO1xuICAgIC8vICAgT2JqZWN0LmtleXMocGVybSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgLy8gICAgIGlmIChrZXkuaW5kZXhPZigncm9sZScpKVxuICAgIC8vICAgfSk7XG4gICAgLy8gfSlcbiAgICAvLyAvLyBpdCdzIHJlamVjdGVkIGhlcmUsIGNoZWNrIHRoZSByb2xlc1xuICAgIC8vIHZhciByb2xlc1F1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpO1xuICAgIC8vIHJvbGVzUXVlcnkuZXF1YWxUbyhcInVzZXJzXCIsIHVzZXIpO1xuICAgIC8vIHJldHVybiByb2xlc1F1ZXJ5LmZpbmQoe3VzZU1hc3RlcktleTp0cnVlfSk7XG4gIH1cblxuICBhc3luYyBfZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM6ID9hbnksXG4gICAgcmVzOiBhbnksXG4gICAgY2xpZW50OiBhbnksXG4gICAgcmVxdWVzdElkOiBudW1iZXIsXG4gICAgb3A6IHN0cmluZyxcbiAgICBxdWVyeTogYW55XG4gICkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgbGV0IGNsaWVudEF1dGg7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgeyB1c2VySWQsIGF1dGggfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbik7XG4gICAgICBpZiAodXNlcklkKSB7XG4gICAgICAgIGFjbEdyb3VwLnB1c2godXNlcklkKTtcbiAgICAgIH1cbiAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4ge1xuICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHByb3RlY3RlZEZpZWxkcyA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucz8ucHJvdGVjdGVkRmllbGRzIHx8IFtdO1xuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5ICYmICFBcnJheS5pc0FycmF5KHByb3RlY3RlZEZpZWxkcykpIHtcbiAgICAgICAgcHJvdGVjdGVkRmllbGRzID0gZ2V0RGF0YWJhc2VDb250cm9sbGVyKHRoaXMuY29uZmlnKS5hZGRQcm90ZWN0ZWRGaWVsZHMoXG4gICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgIHJlcy5vYmplY3QuY2xhc3NOYW1lLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIGFjbEdyb3VwLFxuICAgICAgICAgIGNsaWVudEF1dGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBEYXRhYmFzZUNvbnRyb2xsZXIuZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICAgICAgY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGFjbEdyb3VwLFxuICAgICAgICBjbGllbnRBdXRoLFxuICAgICAgICBvcCxcbiAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICByZXMub2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgcHJvdGVjdGVkRmllbGRzLFxuICAgICAgICBvYmosXG4gICAgICAgIHF1ZXJ5XG4gICAgICApO1xuICAgIH07XG4gICAgcmVzLm9iamVjdCA9IGZpbHRlcihyZXMub2JqZWN0KTtcbiAgICByZXMub3JpZ2luYWwgPSBmaWx0ZXIocmVzLm9yaWdpbmFsKTtcbiAgfVxuXG4gIF9nZXRDTFBPcGVyYXRpb24ocXVlcnk6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoID09IDEgJiZcbiAgICAgIHR5cGVvZiBxdWVyeS5vYmplY3RJZCA9PT0gJ3N0cmluZydcbiAgICAgID8gJ2dldCdcbiAgICAgIDogJ2ZpbmQnO1xuICB9XG5cbiAgYXN5bmMgX3ZlcmlmeUFDTChhY2w6IGFueSwgdG9rZW46IHN0cmluZykge1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF1dGgsIHVzZXJJZCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHRva2VuKTtcblxuICAgIC8vIEdldHRpbmcgdGhlIHNlc3Npb24gdG9rZW4gZmFpbGVkXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IG5vIGFkZGl0aW9uYWwgYXV0aCBpcyBhdmFpbGFibGVcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBqdXN0IGJhaWwgb3V0IGFzIG5vIGFkZGl0aW9uYWwgdmlzaWJpbGl0eSBjYW4gYmUgaW5mZXJyZWQuXG4gICAgaWYgKCFhdXRoIHx8ICF1c2VySWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNTdWJzY3JpcHRpb25TZXNzaW9uVG9rZW5NYXRjaGVkID0gYWNsLmdldFJlYWRBY2Nlc3ModXNlcklkKTtcbiAgICBpZiAoaXNTdWJzY3JpcHRpb25TZXNzaW9uVG9rZW5NYXRjaGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBoYXMgYW55IHJvbGVzIHRoYXQgbWF0Y2ggdGhlIEFDTFxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIGZhbHNlIHJpZ2h0IGF3YXkgaWYgdGhlIGFjbCBkb2Vzbid0IGhhdmUgYW55IHJvbGVzXG4gICAgICAgIGNvbnN0IGFjbF9oYXNfcm9sZXMgPSBPYmplY3Qua2V5cyhhY2wucGVybWlzc2lvbnNCeUlkKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgncm9sZTonKSk7XG4gICAgICAgIGlmICghYWNsX2hhc19yb2xlcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCBhdXRoLmdldFVzZXJSb2xlcygpO1xuICAgICAgICAvLyBGaW5hbGx5LCBzZWUgaWYgYW55IG9mIHRoZSB1c2VyJ3Mgcm9sZXMgYWxsb3cgdGhlbSByZWFkIGFjY2Vzc1xuICAgICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZU5hbWVzKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGdldFJlYWRBY2Nlc3MgYXMgYHJvbGVgIGlzIGluIHRoZSBmb3JtIGByb2xlOnJvbGVOYW1lYFxuICAgICAgICAgIGlmIChhY2wuZ2V0UmVhZEFjY2Vzcyhyb2xlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhGcm9tQ2xpZW50KGNsaWVudDogYW55LCByZXF1ZXN0SWQ6IG51bWJlciwgc2Vzc2lvblRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRTZXNzaW9uRnJvbUNsaWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgIH07XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHNlc3Npb25Ub2tlbiA9IGdldFNlc3Npb25Gcm9tQ2xpZW50KCk7XG4gICAgfVxuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbik7XG4gICAgcmV0dXJuIGF1dGg7XG4gIH1cblxuICBfY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHdhdGNoID0gc3Vic2NyaXB0aW9uSW5mbz8ud2F0Y2g7XG4gICAgaWYgKCF3YXRjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIHJldHVybiB3YXRjaC5zb21lKGZpZWxkID0+ICFpc0RlZXBTdHJpY3RFcXVhbChvYmplY3QuZ2V0KGZpZWxkKSwgb3JpZ2luYWw/LmdldChmaWVsZCkpKTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQUNMKGFjbDogYW55LCBjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gdHJ1ZSBkaXJlY3RseSBpZiBBQ0wgaXNuJ3QgcHJlc2VudCwgQUNMIGlzIHB1YmxpYyByZWFkLCBvciBjbGllbnQgaGFzIG1hc3RlciBrZXlcbiAgICBpZiAoIWFjbCB8fCBhY2wuZ2V0UHVibGljUmVhZEFjY2VzcygpIHx8IGNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDaGVjayBzdWJzY3JpcHRpb24gc2Vzc2lvblRva2VuIG1hdGNoZXMgQUNMIGZpcnN0XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRva2VuID0gc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW47XG4gICAgY29uc3QgY2xpZW50U2Vzc2lvblRva2VuID0gY2xpZW50LnNlc3Npb25Ub2tlbjtcblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBzdWJzY3JpcHRpb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBjbGllbnRTZXNzaW9uVG9rZW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGVLZXlzKHJlcXVlc3QsIHRoaXMua2V5UGFpcnMpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCA0LCAnS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0tleSBpbiByZXF1ZXN0IGlzIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNNYXN0ZXJLZXkgPSB0aGlzLl9oYXNNYXN0ZXJLZXkocmVxdWVzdCwgdGhpcy5rZXlQYWlycyk7XG4gICAgY29uc3QgY2xpZW50SWQgPSB1dWlkdjQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KFxuICAgICAgY2xpZW50SWQsXG4gICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgIGhhc01hc3RlcktleSxcbiAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgcmVxdWVzdC5pbnN0YWxsYXRpb25JZFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBldmVudDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcXVlc3QuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoJ0BDb25uZWN0JywgJ2JlZm9yZUNvbm5lY3QnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcS5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXEudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVDb25uZWN0LkBDb25uZWN0YCwgcmVxLCBhdXRoKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCBjbGllbnQpO1xuICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZSBuZXcgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY2xpZW50LnB1c2hDb25uZWN0KCk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHJlcSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVDb25uZWN0IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhc01hc3RlcktleShyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCB8fCAhdmFsaWRLZXlQYWlycy5oYXMoJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcmVxdWVzdCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVlc3QsICdtYXN0ZXJLZXknKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdC5tYXN0ZXJLZXkgPT09IHZhbGlkS2V5UGFpcnMuZ2V0KCdtYXN0ZXJLZXknKTtcbiAgfVxuXG4gIF92YWxpZGF0ZUtleXMocmVxdWVzdDogYW55LCB2YWxpZEtleVBhaXJzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbGlkS2V5UGFpcnMgfHwgdmFsaWRLZXlQYWlycy5zaXplID09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgc2VjcmV0XSBvZiB2YWxpZEtleVBhaXJzKSB7XG4gICAgICBpZiAoIXJlcXVlc3Rba2V5XSB8fCByZXF1ZXN0W2tleV0gIT09IHNlY3JldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSBzdWJzY3JpYmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSByZXF1ZXN0LnF1ZXJ5LmNsYXNzTmFtZTtcbiAgICBsZXQgYXV0aENhbGxlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdiZWZvcmVTdWJzY3JpYmUnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcXVlc3Quc2Vzc2lvblRva2VuKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlUXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lKTtcbiAgICAgICAgcGFyc2VRdWVyeS53aXRoSlNPTihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHBhcnNlUXVlcnk7XG4gICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGJlZm9yZVN1YnNjcmliZS4ke2NsYXNzTmFtZX1gLCByZXF1ZXN0LCBhdXRoKTtcblxuICAgICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3QucXVlcnkudG9KU09OKCk7XG4gICAgICAgIGlmIChxdWVyeS5rZXlzKSB7XG4gICAgICAgICAgcXVlcnkuZmllbGRzID0gcXVlcnkua2V5cy5zcGxpdCgnLCcpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ19TZXNzaW9uJykge1xuICAgICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVxdWVzdC5zZXNzaW9uVG9rZW5cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZS51c2VyID0gcmVxdWVzdC51c2VyLnRvUG9pbnRlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKCFyZXF1ZXN0Lm1hc3Rlcikge1xuICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTixcbiAgICAgICAgICAgICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIGZyb20gc3Vic2NyaXB0aW9ucywgY3JlYXRlIG9uZSBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkhhc2ggPSBxdWVyeUhhc2gocmVxdWVzdC5xdWVyeSk7XG4gICAgICAvLyBBZGQgY2xhc3NOYW1lIHRvIHN1YnNjcmlwdGlvbnMgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoY2xhc3NOYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuaGFzKHN1YnNjcmlwdGlvbkhhc2gpKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGNsYXNzU3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKGNsYXNzTmFtZSwgcmVxdWVzdC5xdWVyeS53aGVyZSwgc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSGFzaCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHN1YnNjcmlwdGlvbkluZm8gdG8gY2xpZW50XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0ge1xuICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbixcbiAgICAgIH07XG4gICAgICAvLyBBZGQgc2VsZWN0ZWQgZmllbGRzLCBzZXNzaW9uVG9rZW4gYW5kIGluc3RhbGxhdGlvbklkIGZvciB0aGlzIHN1YnNjcmlwdGlvbiBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChyZXF1ZXN0LnF1ZXJ5LmZpZWxkcykge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLmZpZWxkcyA9IHJlcXVlc3QucXVlcnkuZmllbGRzO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby53YXRjaCA9IHJlcXVlc3QucXVlcnkud2F0Y2g7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5zZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gPSByZXF1ZXN0LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGNsaWVudC5hZGRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkLCBzdWJzY3JpcHRpb25JbmZvKTtcblxuICAgICAgLy8gQWRkIGNsaWVudElkIHRvIHN1YnNjcmlwdGlvblxuICAgICAgc3Vic2NyaXB0aW9uLmFkZENsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuXG4gICAgICBjbGllbnQucHVzaFN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICBgQ3JlYXRlIGNsaWVudCAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSBuZXcgc3Vic2NyaXB0aW9uOiAke3JlcXVlc3QucmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIGV2ZW50OiAnc3Vic2NyaWJlJyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIGVycm9yLmNvZGUsIGVycm9yLm1lc3NhZ2UsIGZhbHNlLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVTdWJzY3JpYmUgb24gJHtjbGFzc05hbWV9IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0LCBmYWxzZSk7XG4gICAgdGhpcy5faGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgfVxuXG4gIF9oYW5kbGVVbnN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnksIG5vdGlmeUNsaWVudDogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAnQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVxdWVzdC5yZXF1ZXN0SWQ7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIGNsaWVudCB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50ICcgKyBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW5ub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3Ugc3Vic2NyaWJlIHRvIGxpdmUgcXVlcnkgc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nLidcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgc3Vic2NyaXB0aW9uIHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcgc3Vic2NyaXB0aW9uSWQgJyArXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBzdWJzY3JpcHRpb24gZnJvbSBjbGllbnRcbiAgICBjbGllbnQuZGVsZXRlU3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIC8vIFJlbW92ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25JbmZvLnN1YnNjcmlwdGlvbjtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBzdWJzY3JpcHRpb24uY2xhc3NOYW1lO1xuICAgIHN1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3RJZCk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gY2xpZW50IHdoaWNoIGlzIHN1YnNjcmliaW5nIHRoaXMgc3Vic2NyaXB0aW9uLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgIGlmICghc3Vic2NyaXB0aW9uLmhhc1N1YnNjcmliaW5nQ2xpZW50KCkpIHtcbiAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uLmhhc2gpO1xuICAgIH1cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MsIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICBpZiAoY2xhc3NTdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBjbGllbnQsXG4gICAgICBldmVudDogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICBzZXNzaW9uVG9rZW46IHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGlmICghbm90aWZ5Q2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xpZW50LnB1c2hVbnN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBEZWxldGUgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSB8IHN1YnNjcmlwdGlvbjogJHtyZXF1ZXN0LnJlcXVlc3RJZH1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUxpdmVRdWVyeVNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUF5QztBQUV6QyxNQUFNQSxvQkFBb0IsQ0FBQztFQUV6Qjs7RUFJQTs7RUFHQUMsV0FBVyxDQUFDQyxNQUFXLEVBQUVDLE1BQVcsR0FBRyxDQUFDLENBQUMsRUFBRUMsaUJBQXNCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEUsSUFBSSxDQUFDRixNQUFNLEdBQUdBLE1BQU07SUFDcEIsSUFBSSxDQUFDRyxPQUFPLEdBQUcsSUFBSUMsR0FBRyxFQUFFO0lBQ3hCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlELEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUNILE1BQU0sR0FBR0EsTUFBTTtJQUVwQkEsTUFBTSxDQUFDSyxLQUFLLEdBQUdMLE1BQU0s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
|
|
846
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwidmFsdWVzIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJjbGllbnQiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwiYWNsIiwiZ2V0QUNMIiwib3AiLCJfZ2V0Q0xQT3BlcmF0aW9uIiwicXVlcnkiLCJyZXMiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwicGFyc2VXZWJTb2NrZXQiLCJjb2RlIiwic3RyaW5naWZ5IiwiaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQiLCJpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkIiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiYWxsIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsIm9yaWdpbmFsIiwiZnVuY3Rpb25OYW1lIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInJlcXVlc3QiLCJ0djQiLCJ2YWxpZGF0ZSIsIlJlcXVlc3RTY2hlbWEiLCJfaGFuZGxlQ29ubmVjdCIsIl9oYW5kbGVTdWJzY3JpYmUiLCJfaGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uIiwiX2hhbmRsZVVuc3Vic2NyaWJlIiwiaW5mbyIsImhhcyIsInJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMiLCJkZWxldGUiLCJzdWJzY3JpcHRpb25JbmZvIiwic3Vic2NyaXB0aW9uSW5mb3MiLCJkZWxldGVDbGllbnRTdWJzY3JpcHRpb24iLCJoYXNTdWJzY3JpYmluZ0NsaWVudCIsIm1hdGNoZXNRdWVyeSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJtYXAiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImRlbCIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIkVycm9yIiwiSU5WQUxJRF9TRVNTSU9OX1RPS0VOIiwiZ2V0U3Vic2NyaXB0aW9uSW5mbyIsImFjbEdyb3VwIiwicHVzaCIsIlNjaGVtYUNvbnRyb2xsZXIiLCJ2YWxpZGF0ZVBlcm1pc3Npb24iLCJjbGllbnRBdXRoIiwiZmlsdGVyIiwib2JqIiwicHJvdGVjdGVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YWJhc2VDb250cm9sbGVyIiwiYWRkUHJvdGVjdGVkRmllbGRzIiwiRGF0YWJhc2VDb250cm9sbGVyIiwiZmlsdGVyU2Vuc2l0aXZlRGF0YSIsImxlbmd0aCIsIm9iamVjdElkIiwiX3ZlcmlmeUFDTCIsImlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCIsImdldFJlYWRBY2Nlc3MiLCJhY2xfaGFzX3JvbGVzIiwicGVybWlzc2lvbnNCeUlkIiwic29tZSIsInN0YXJ0c1dpdGgiLCJyb2xlTmFtZXMiLCJnZXRVc2VyUm9sZXMiLCJyb2xlIiwiZ2V0U2Vzc2lvbkZyb21DbGllbnQiLCJ3YXRjaCIsImlzRGVlcFN0cmljdEVxdWFsIiwiZ2V0UHVibGljUmVhZEFjY2VzcyIsInN1YnNjcmlwdGlvblRva2VuIiwiY2xpZW50U2Vzc2lvblRva2VuIiwiX3ZhbGlkYXRlS2V5cyIsIl9oYXNNYXN0ZXJLZXkiLCJ1dWlkdjQiLCJyZXEiLCJwdXNoQ29ubmVjdCIsInZhbGlkS2V5UGFpcnMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc1ZhbGlkIiwic2VjcmV0IiwiYXV0aENhbGxlZCIsInBhcnNlUXVlcnkiLCJ3aXRoSlNPTiIsIndoZXJlIiwidG9Qb2ludGVyIiwibWFzdGVyIiwic3Vic2NyaXB0aW9uSGFzaCIsInF1ZXJ5SGFzaCIsIlN1YnNjcmlwdGlvbiIsInNwbGl0IiwiZmllbGRzIiwiRGVwcmVjYXRvciIsImxvZ1J1bnRpbWVEZXByZWNhdGlvbiIsInVzYWdlIiwic29sdXRpb24iLCJhZGRTdWJzY3JpcHRpb25JbmZvIiwiYWRkQ2xpZW50U3Vic2NyaXB0aW9uIiwicHVzaFN1YnNjcmliZSIsIm5vdGlmeUNsaWVudCIsImRlbGV0ZVN1YnNjcmlwdGlvbkluZm8iLCJwdXNoVW5zdWJzY3JpYmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvTGl2ZVF1ZXJ5L1BhcnNlTGl2ZVF1ZXJ5U2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0djQgZnJvbSAndHY0JztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4vQ2xpZW50JztcbmltcG9ydCB7IFBhcnNlV2ViU29ja2V0U2VydmVyIH0gZnJvbSAnLi9QYXJzZVdlYlNvY2tldFNlcnZlcic7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgUmVxdWVzdFNjaGVtYSBmcm9tICcuL1JlcXVlc3RTY2hlbWEnO1xuaW1wb3J0IHsgbWF0Y2hlc1F1ZXJ5LCBxdWVyeUhhc2ggfSBmcm9tICcuL1F1ZXJ5VG9vbHMnO1xuaW1wb3J0IHsgUGFyc2VQdWJTdWIgfSBmcm9tICcuL1BhcnNlUHViU3ViJztcbmltcG9ydCBTY2hlbWFDb250cm9sbGVyIGZyb20gJy4uL0NvbnRyb2xsZXJzL1NjaGVtYUNvbnRyb2xsZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHtcbiAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyxcbiAgZ2V0VHJpZ2dlcixcbiAgcnVuVHJpZ2dlcixcbiAgcmVzb2x2ZUVycm9yLFxuICB0b0pTT053aXRoT2JqZWN0cyxcbn0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiwgQXV0aCB9IGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IHsgZ2V0Q2FjaGVDb250cm9sbGVyLCBnZXREYXRhYmFzZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9Db250cm9sbGVycyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgVXNlclJvdXRlciBmcm9tICcuLi9Sb3V0ZXJzL1VzZXJzUm91dGVyJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvRGF0YWJhc2VDb250cm9sbGVyJztcbmltcG9ydCB7IGlzRGVlcFN0cmljdEVxdWFsIH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuLi9EZXByZWNhdG9yL0RlcHJlY2F0b3InO1xuXG5jbGFzcyBQYXJzZUxpdmVRdWVyeVNlcnZlciB7XG4gIGNsaWVudHM6IE1hcDtcbiAgLy8gY2xhc3NOYW1lIC0+IChxdWVyeUhhc2ggLT4gc3Vic2NyaXB0aW9uKVxuICBzdWJzY3JpcHRpb25zOiBPYmplY3Q7XG4gIHBhcnNlV2ViU29ja2V0U2VydmVyOiBPYmplY3Q7XG4gIGtleVBhaXJzOiBhbnk7XG4gIC8vIFRoZSBzdWJzY3JpYmVyIHdlIHVzZSB0byBnZXQgb2JqZWN0IHVwZGF0ZSBmcm9tIHB1Ymxpc2hlclxuICBzdWJzY3JpYmVyOiBPYmplY3Q7XG5cbiAgY29uc3RydWN0b3Ioc2VydmVyOiBhbnksIGNvbmZpZzogYW55ID0ge30sIHBhcnNlU2VydmVyQ29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIHRoaXMuY2xpZW50cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBjb25maWcuYXBwSWQgPSBjb25maWcuYXBwSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgICBjb25maWcubWFzdGVyS2V5ID0gY29uZmlnLm1hc3RlcktleSB8fCBQYXJzZS5tYXN0ZXJLZXk7XG5cbiAgICAvLyBTdG9yZSBrZXlzLCBjb252ZXJ0IG9iaiB0byBtYXBcbiAgICBjb25zdCBrZXlQYWlycyA9IGNvbmZpZy5rZXlQYWlycyB8fCB7fTtcbiAgICB0aGlzLmtleVBhaXJzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGtleVBhaXJzKSkge1xuICAgICAgdGhpcy5rZXlQYWlycy5zZXQoa2V5LCBrZXlQYWlyc1trZXldKTtcbiAgICB9XG4gICAgbG9nZ2VyLnZlcmJvc2UoJ1N1cHBvcnQga2V5IHBhaXJzJywgdGhpcy5rZXlQYWlycyk7XG5cbiAgICAvLyBJbml0aWFsaXplIFBhcnNlXG4gICAgUGFyc2UuT2JqZWN0LmRpc2FibGVTaW5nbGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlcnZlclVSTCA9IGNvbmZpZy5zZXJ2ZXJVUkwgfHwgUGFyc2Uuc2VydmVyVVJMO1xuICAgIFBhcnNlLnNlcnZlclVSTCA9IHNlcnZlclVSTDtcbiAgICBQYXJzZS5pbml0aWFsaXplKGNvbmZpZy5hcHBJZCwgUGFyc2UuamF2YVNjcmlwdEtleSwgY29uZmlnLm1hc3RlcktleSk7XG5cbiAgICAvLyBUaGUgY2FjaGUgY29udHJvbGxlciBpcyBhIHByb3BlciBjYWNoZSBjb250cm9sbGVyXG4gICAgLy8gd2l0aCBhY2Nlc3MgdG8gVXNlciBhbmQgUm9sZXNcbiAgICB0aGlzLmNhY2hlQ29udHJvbGxlciA9IGdldENhY2hlQ29udHJvbGxlcihwYXJzZVNlcnZlckNvbmZpZyk7XG5cbiAgICBjb25maWcuY2FjaGVUaW1lb3V0ID0gY29uZmlnLmNhY2hlVGltZW91dCB8fCA1ICogMTAwMDsgLy8gNXNcblxuICAgIC8vIFRoaXMgYXV0aCBjYWNoZSBzdG9yZXMgdGhlIHByb21pc2VzIGZvciBlYWNoIGF1dGggcmVzb2x1dGlvbi5cbiAgICAvLyBUaGUgbWFpbiBiZW5lZml0IGlzIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIHNhbWUgdXNlciAvIHNlc3Npb24gdG9rZW4gcmVzb2x1dGlvbi5cbiAgICB0aGlzLmF1dGhDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiA1MDAsIC8vIDUwMCBjb25jdXJyZW50XG4gICAgICB0dGw6IGNvbmZpZy5jYWNoZVRpbWVvdXQsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSB3ZWJzb2NrZXQgc2VydmVyXG4gICAgdGhpcy5wYXJzZVdlYlNvY2tldFNlcnZlciA9IG5ldyBQYXJzZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIHNlcnZlcixcbiAgICAgIHBhcnNlV2Vic29ja2V0ID0+IHRoaXMuX29uQ29ubmVjdChwYXJzZVdlYnNvY2tldCksXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IFBhcnNlUHViU3ViLmNyZWF0ZVN1YnNjcmliZXIoY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuc3Vic2NyaWJlci5jb25uZWN0KSB7XG4gICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmliZXIuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLnN1YnNjcmliZXIuY29ubmVjdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVN1YnNjcmliZXJzKCk7XG4gIH1cbiAgX2NyZWF0ZVN1YnNjcmliZXJzKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VSZWNpZXZlZCA9IChjaGFubmVsLCBtZXNzYWdlU3RyKSA9PiB7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnU3Vic2NyaWJlIG1lc3NhZ2UgJWonLCBtZXNzYWdlU3RyKTtcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcigndW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UnLCBtZXNzYWdlU3RyLCBlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnY2xlYXJDYWNoZScpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJDYWNoZWRSb2xlcyhtZXNzYWdlLnVzZXJJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2luZmxhdGVQYXJzZU9iamVjdChtZXNzYWdlKTtcbiAgICAgIGlmIChjaGFubmVsID09PSBQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZScpIHtcbiAgICAgICAgdGhpcy5fb25BZnRlclNhdmUobWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJEZWxldGUnKSB7XG4gICAgICAgIHRoaXMuX29uQWZ0ZXJEZWxldGUobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0dldCBtZXNzYWdlICVzIGZyb20gdW5rbm93biBjaGFubmVsICVqJywgbWVzc2FnZSwgY2hhbm5lbCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4gbWVzc2FnZVJlY2lldmVkKGNoYW5uZWwsIG1lc3NhZ2VTdHIpKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnYWZ0ZXJTYXZlJywgJ2FmdGVyRGVsZXRlJywgJ2NsZWFyQ2FjaGUnXSkge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IGAke1BhcnNlLmFwcGxpY2F0aW9uSWR9JHtmaWVsZH1gO1xuICAgICAgdGhpcy5zdWJzY3JpYmVyLnN1YnNjcmliZShjaGFubmVsLCBtZXNzYWdlU3RyID0+IG1lc3NhZ2VSZWNpZXZlZChjaGFubmVsLCBtZXNzYWdlU3RyKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTWVzc2FnZSBpcyB0aGUgSlNPTiBvYmplY3QgZnJvbSBwdWJsaXNoZXIuIE1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0IGlzIHRoZSBQYXJzZU9iamVjdCBKU09OIGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QgSlNPTi5cbiAgX2luZmxhdGVQYXJzZU9iamVjdChtZXNzYWdlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBJbmZsYXRlIG1lcmdlZCBvYmplY3RcbiAgICBjb25zdCBjdXJyZW50UGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdDtcbiAgICBVc2VyUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMoY3VycmVudFBhcnNlT2JqZWN0KTtcbiAgICBsZXQgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsZXQgcGFyc2VPYmplY3QgPSBuZXcgUGFyc2UuT2JqZWN0KGNsYXNzTmFtZSk7XG4gICAgcGFyc2VPYmplY3QuX2ZpbmlzaEZldGNoKGN1cnJlbnRQYXJzZU9iamVjdCk7XG4gICAgbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDtcbiAgICAvLyBJbmZsYXRlIG9yaWdpbmFsIG9iamVjdFxuICAgIGNvbnN0IG9yaWdpbmFsUGFyc2VPYmplY3QgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3Q7XG4gICAgaWYgKG9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgIFVzZXJSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhvcmlnaW5hbFBhcnNlT2JqZWN0KTtcbiAgICAgIGNsYXNzTmFtZSA9IG9yaWdpbmFsUGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgICAgcGFyc2VPYmplY3QgPSBuZXcgUGFyc2UuT2JqZWN0KGNsYXNzTmFtZSk7XG4gICAgICBwYXJzZU9iamVjdC5fZmluaXNoRmV0Y2gob3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDtcbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyRGVsZXRlKG1lc3NhZ2U6IGFueSk6IHZvaWQge1xuICAgIGxvZ2dlci52ZXJib3NlKFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJEZWxldGUgaXMgdHJpZ2dlcmVkJyk7XG5cbiAgICBsZXQgZGVsZXRlZFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NMZXZlbFBlcm1pc3Npb25zID0gbWVzc2FnZS5jbGFzc0xldmVsUGVybWlzc2lvbnM7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gZGVsZXRlZFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlaiB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgZGVsZXRlZFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgY2xhc3NTdWJzY3JpcHRpb25zLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKGRlbGV0ZWRQYXJzZU9iamVjdCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIGlmICghaXNTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjbCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgIC8vIENoZWNrIENMUFxuICAgICAgICAgIGNvbnN0IG9wID0gdGhpcy5fZ2V0Q0xQT3BlcmF0aW9uKHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gICAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpc01hdGNoZWQgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQUNMKGFjbCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGRlbGV0ZWRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgICAgIHNlbmRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdhZnRlckV2ZW50JywgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJzZU9iamVjdCA9IHRvSlNPTndpdGhPYmplY3RzKHJlcy5vYmplY3QsIHJlcy5vYmplY3QuY2xhc3NOYW1lIHx8IGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24ucXVlcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjbGllbnQucHVzaERlbGV0ZShyZXF1ZXN0SWQsIGRlbGV0ZWRQYXJzZU9iamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyU2F2ZShtZXNzYWdlOiBhbnkpOiB2b2lkIHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBsZXQgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlcyB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgY3VycmVudFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKFxuICAgICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICk7XG4gICAgICBjb25zdCBpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkID0gdGhpcy5fbWF0Y2hlc1N1YnNjcmlwdGlvbihcbiAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFtjbGllbnRJZCwgcmVxdWVzdElkc10gb2YgXy5lbnRyaWVzKHN1YnNjcmlwdGlvbi5jbGllbnRSZXF1ZXN0SWRzKSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudElkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkcy5mb3JFYWNoKGFzeW5jIHJlcXVlc3RJZCA9PiB7XG4gICAgICAgICAgLy8gU2V0IG9yaWduYWwgUGFyc2VPYmplY3QgQUNMIGNoZWNraW5nIHByb21pc2UsIGlmIHRoZSBvYmplY3QgZG9lcyBub3QgbWF0Y2hcbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24sIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIEFDTFxuICAgICAgICAgIGxldCBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZTtcbiAgICAgICAgICBpZiAoIWlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEFDTDtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0wgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcmlnaW5hbEFDTENoZWNraW5nUHJvbWlzZSA9IHRoaXMuX21hdGNoZXNBQ0wob3JpZ2luYWxBQ0wsIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IGN1cnJlbnQgUGFyc2VPYmplY3QgQUNMIGNoZWNraW5nIHByb21pc2UsIGlmIHRoZSBvYmplY3QgZG9lcyBub3QgbWF0Y2hcbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24sIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIEFDTFxuICAgICAgICAgIGxldCBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlO1xuICAgICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgICBpZiAoIWlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QUNMID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCk7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChjdXJyZW50QUNMLCBjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWF0Y2hlc0NMUChcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgW2lzT3JpZ2luYWxNYXRjaGVkLCBpc0N1cnJlbnRNYXRjaGVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICAgICAgICAnT3JpZ2luYWwgJWogfCBDdXJyZW50ICVqIHwgTWF0Y2g6ICVzLCAlcywgJXMsICVzIHwgUXVlcnk6ICVzJyxcbiAgICAgICAgICAgICAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbE1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudE1hdGNoZWQsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5oYXNoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gRGVjaWRlIGV2ZW50IHR5cGVcbiAgICAgICAgICAgIGxldCB0eXBlO1xuICAgICAgICAgICAgaWYgKGlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiAhaXNDdXJyZW50TWF0Y2hlZCkge1xuICAgICAgICAgICAgICB0eXBlID0gJ2xlYXZlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3JpZ2luYWxNYXRjaGVkICYmIGlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2VudGVyJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2NyZWF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2F0Y2hGaWVsZHNDaGFuZ2VkID0gdGhpcy5fY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQsIHJlcXVlc3RJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIXdhdGNoRmllbGRzQ2hhbmdlZCAmJiAodHlwZSA9PT0gJ3VwZGF0ZScgfHwgdHlwZSA9PT0gJ2NyZWF0ZScpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IHtcbiAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXG4gICAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgICAgb2JqZWN0OiBjdXJyZW50UGFyc2VPYmplY3QsXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgICAgICByZXMudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRQYXJzZU9iamVjdCA9IHRvSlNPTndpdGhPYmplY3RzKHJlcy5vYmplY3QsIHJlcy5vYmplY3QuY2xhc3NOYW1lIHx8IGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsICYmIHR5cGVvZiByZXMub3JpZ2luYWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsUGFyc2VPYmplY3QgPSB0b0pTT053aXRoT2JqZWN0cyhcbiAgICAgICAgICAgICAgICByZXMub3JpZ2luYWwsXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLmNsYXNzTmFtZSB8fCBjbGFzc05hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICdwdXNoJyArIHJlcy5ldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcy5ldmVudC5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChjbGllbnRbZnVuY3Rpb25OYW1lXSkge1xuICAgICAgICAgICAgICBjbGllbnRbZnVuY3Rpb25OYW1lXShyZXF1ZXN0SWQsIGN1cnJlbnRQYXJzZU9iamVjdCwgb3JpZ2luYWxQYXJzZU9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25Db25uZWN0KHBhcnNlV2Vic29ja2V0OiBhbnkpOiB2b2lkIHtcbiAgICBwYXJzZVdlYnNvY2tldC5vbignbWVzc2FnZScsIHJlcXVlc3QgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgcmVxdWVzdCcsIHJlcXVlc3QsIGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1JlcXVlc3Q6ICVqJywgcmVxdWVzdCk7XG5cbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIGEgdmFsaWQgcmVxdWVzdCwgcmV0dXJuIGVycm9yIGRpcmVjdGx5IGlmIG5vdFxuICAgICAgaWYgKFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbJ2dlbmVyYWwnXSkgfHxcbiAgICAgICAgIXR2NC52YWxpZGF0ZShyZXF1ZXN0LCBSZXF1ZXN0U2NoZW1hW3JlcXVlc3Qub3BdKVxuICAgICAgKSB7XG4gICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDEsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0IG1lc3NhZ2UgZXJyb3IgJXMnLCB0djQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChyZXF1ZXN0Lm9wKSB7XG4gICAgICAgIGNhc2UgJ2Nvbm5lY3QnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5zdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCAzLCAnR2V0IHVua25vd24gb3BlcmF0aW9uJyk7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgdW5rbm93biBvcGVyYXRpb24nLCByZXF1ZXN0Lm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYENsaWVudCBkaXNjb25uZWN0OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZVdlYnNvY2tldC5jbGllbnRJZDtcbiAgICAgIGlmICghdGhpcy5jbGllbnRzLmhhcyhjbGllbnRJZCkpIHtcbiAgICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0X2Vycm9yJyxcbiAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICBlcnJvcjogYFVuYWJsZSB0byBmaW5kIGNsaWVudCAke2NsaWVudElkfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZXJyb3IoYENhbiBub3QgZmluZCBjbGllbnQgJHtjbGllbnRJZH0gb24gZGlzY29ubmVjdGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnRcbiAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuICAgICAgdGhpcy5jbGllbnRzLmRlbGV0ZShjbGllbnRJZCk7XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm9dIG9mIF8uZW50cmllcyhjbGllbnQuc3Vic2NyaXB0aW9uSW5mb3MpKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBzdWJzY3JpcHRpb24uZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKGNsaWVudElkLCByZXF1ZXN0SWQpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNsaWVudCB3aGljaCBpcyBzdWJzY3JpYmluZyB0aGlzIHN1YnNjcmlwdGlvbiwgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5oYXNTdWJzY3JpYmluZ0NsaWVudCgpKSB7XG4gICAgICAgICAgY2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uaGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3Vic2NyaXB0aW9ucyB1bmRlciB0aGlzIGNsYXNzLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50cyAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IHN1YnNjcmlwdGlvbnMgJWQnLCB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBldmVudDogJ3dzX2Nvbm5lY3QnLFxuICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIF9tYXRjaGVzU3Vic2NyaXB0aW9uKHBhcnNlT2JqZWN0OiBhbnksIHN1YnNjcmlwdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gT2JqZWN0IGlzIHVuZGVmaW5lZCBvciBudWxsLCBub3QgbWF0Y2hcbiAgICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzUXVlcnkocGFyc2VPYmplY3QsIHN1YnNjcmlwdGlvbi5xdWVyeSk7XG4gIH1cblxuICBhc3luYyBfY2xlYXJDYWNoZWRSb2xlcyh1c2VySWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWxpZFRva2VucyA9IGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5TZXNzaW9uKVxuICAgICAgICAuZXF1YWxUbygndXNlcicsIFBhcnNlLlVzZXIuY3JlYXRlV2l0aG91dERhdGEodXNlcklkKSlcbiAgICAgICAgLmZpbmQoeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdmFsaWRUb2tlbnMubWFwKGFzeW5jIHRva2VuID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSB0b2tlbi5nZXQoJ3Nlc3Npb25Ub2tlbicpO1xuICAgICAgICAgIGNvbnN0IGF1dGhQcm9taXNlID0gdGhpcy5hdXRoQ2FjaGUuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgaWYgKCFhdXRoUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBbYXV0aDEsIGF1dGgyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGF1dGhQcm9taXNlLFxuICAgICAgICAgICAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7IGNhY2hlQ29udHJvbGxlcjogdGhpcy5jYWNoZUNvbnRyb2xsZXIsIHNlc3Npb25Ub2tlbiB9KSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBhdXRoMS5hdXRoPy5jbGVhclJvbGVDYWNoZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICAgIGF1dGgyLmF1dGg/LmNsZWFyUm9sZUNhY2hlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuZGVsKHNlc3Npb25Ub2tlbik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBDb3VsZCBub3QgY2xlYXIgcm9sZSBjYWNoZS4gJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oc2Vzc2lvblRva2VuOiA/c3RyaW5nKTogUHJvbWlzZTx7IGF1dGg6ID9BdXRoLCB1c2VySWQ6ID9zdHJpbmcgfT4ge1xuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG4gICAgY29uc3QgZnJvbUNhY2hlID0gdGhpcy5hdXRoQ2FjaGUuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgaWYgKGZyb21DYWNoZSkge1xuICAgICAgcmV0dXJuIGZyb21DYWNoZTtcbiAgICB9XG4gICAgY29uc3QgYXV0aFByb21pc2UgPSBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgIGNhY2hlQ29udHJvbGxlcjogdGhpcy5jYWNoZUNvbnRyb2xsZXIsXG4gICAgICBzZXNzaW9uVG9rZW46IHNlc3Npb25Ub2tlbixcbiAgICB9KVxuICAgICAgLnRoZW4oYXV0aCA9PiB7XG4gICAgICAgIHJldHVybiB7IGF1dGgsIHVzZXJJZDogYXV0aCAmJiBhdXRoLnVzZXIgJiYgYXV0aC51c2VyLmlkIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggdGhlIHNlc3Npb24gdG9rZW5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4pIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5zZXQoc2Vzc2lvblRva2VuLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KSwgdGhpcy5jb25maWcuY2FjaGVUaW1lb3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5kZWwoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgdGhpcy5hdXRoQ2FjaGUuc2V0KHNlc3Npb25Ub2tlbiwgYXV0aFByb21pc2UpO1xuICAgIHJldHVybiBhdXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQ0xQKFxuICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9uczogP2FueSxcbiAgICBvYmplY3Q6IGFueSxcbiAgICBjbGllbnQ6IGFueSxcbiAgICByZXF1ZXN0SWQ6IG51bWJlcixcbiAgICBvcDogc3RyaW5nXG4gICk6IGFueSB7XG4gICAgLy8gdHJ5IHRvIG1hdGNoIG9uIHVzZXIgZmlyc3QsIGxlc3MgZXhwZW5zaXZlIHRoYW4gd2l0aCByb2xlc1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgbGV0IHVzZXJJZDtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB7IHVzZXJJZCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuKTtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgU2NoZW1hQ29udHJvbGxlci52YWxpZGF0ZVBlcm1pc3Npb24oXG4gICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgb2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgIG9wXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYEZhaWxlZCBtYXRjaGluZyBDTFAgZm9yICR7b2JqZWN0LmlkfSAke3VzZXJJZH0gJHtlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUT0RPOiBoYW5kbGUgcm9sZXMgcGVybWlzc2lvbnNcbiAgICAvLyBPYmplY3Qua2V5cyhjbGFzc0xldmVsUGVybWlzc2lvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIC8vICAgY29uc3QgcGVybSA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1trZXldO1xuICAgIC8vICAgT2JqZWN0LmtleXMocGVybSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgLy8gICAgIGlmIChrZXkuaW5kZXhPZigncm9sZScpKVxuICAgIC8vICAgfSk7XG4gICAgLy8gfSlcbiAgICAvLyAvLyBpdCdzIHJlamVjdGVkIGhlcmUsIGNoZWNrIHRoZSByb2xlc1xuICAgIC8vIHZhciByb2xlc1F1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpO1xuICAgIC8vIHJvbGVzUXVlcnkuZXF1YWxUbyhcInVzZXJzXCIsIHVzZXIpO1xuICAgIC8vIHJldHVybiByb2xlc1F1ZXJ5LmZpbmQoe3VzZU1hc3RlcktleTp0cnVlfSk7XG4gIH1cblxuICBhc3luYyBfZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM6ID9hbnksXG4gICAgcmVzOiBhbnksXG4gICAgY2xpZW50OiBhbnksXG4gICAgcmVxdWVzdElkOiBudW1iZXIsXG4gICAgb3A6IHN0cmluZyxcbiAgICBxdWVyeTogYW55XG4gICkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgbGV0IGNsaWVudEF1dGg7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgeyB1c2VySWQsIGF1dGggfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbik7XG4gICAgICBpZiAodXNlcklkKSB7XG4gICAgICAgIGFjbEdyb3VwLnB1c2godXNlcklkKTtcbiAgICAgIH1cbiAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4ge1xuICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHByb3RlY3RlZEZpZWxkcyA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucz8ucHJvdGVjdGVkRmllbGRzIHx8IFtdO1xuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5ICYmICFBcnJheS5pc0FycmF5KHByb3RlY3RlZEZpZWxkcykpIHtcbiAgICAgICAgcHJvdGVjdGVkRmllbGRzID0gZ2V0RGF0YWJhc2VDb250cm9sbGVyKHRoaXMuY29uZmlnKS5hZGRQcm90ZWN0ZWRGaWVsZHMoXG4gICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgIHJlcy5vYmplY3QuY2xhc3NOYW1lLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIGFjbEdyb3VwLFxuICAgICAgICAgIGNsaWVudEF1dGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBEYXRhYmFzZUNvbnRyb2xsZXIuZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICAgICAgY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGFjbEdyb3VwLFxuICAgICAgICBjbGllbnRBdXRoLFxuICAgICAgICBvcCxcbiAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICByZXMub2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgcHJvdGVjdGVkRmllbGRzLFxuICAgICAgICBvYmosXG4gICAgICAgIHF1ZXJ5XG4gICAgICApO1xuICAgIH07XG4gICAgcmVzLm9iamVjdCA9IGZpbHRlcihyZXMub2JqZWN0KTtcbiAgICByZXMub3JpZ2luYWwgPSBmaWx0ZXIocmVzLm9yaWdpbmFsKTtcbiAgfVxuXG4gIF9nZXRDTFBPcGVyYXRpb24ocXVlcnk6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoID09IDEgJiZcbiAgICAgIHR5cGVvZiBxdWVyeS5vYmplY3RJZCA9PT0gJ3N0cmluZydcbiAgICAgID8gJ2dldCdcbiAgICAgIDogJ2ZpbmQnO1xuICB9XG5cbiAgYXN5bmMgX3ZlcmlmeUFDTChhY2w6IGFueSwgdG9rZW46IHN0cmluZykge1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF1dGgsIHVzZXJJZCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHRva2VuKTtcblxuICAgIC8vIEdldHRpbmcgdGhlIHNlc3Npb24gdG9rZW4gZmFpbGVkXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IG5vIGFkZGl0aW9uYWwgYXV0aCBpcyBhdmFpbGFibGVcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBqdXN0IGJhaWwgb3V0IGFzIG5vIGFkZGl0aW9uYWwgdmlzaWJpbGl0eSBjYW4gYmUgaW5mZXJyZWQuXG4gICAgaWYgKCFhdXRoIHx8ICF1c2VySWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNTdWJzY3JpcHRpb25TZXNzaW9uVG9rZW5NYXRjaGVkID0gYWNsLmdldFJlYWRBY2Nlc3ModXNlcklkKTtcbiAgICBpZiAoaXNTdWJzY3JpcHRpb25TZXNzaW9uVG9rZW5NYXRjaGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBoYXMgYW55IHJvbGVzIHRoYXQgbWF0Y2ggdGhlIEFDTFxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIGZhbHNlIHJpZ2h0IGF3YXkgaWYgdGhlIGFjbCBkb2Vzbid0IGhhdmUgYW55IHJvbGVzXG4gICAgICAgIGNvbnN0IGFjbF9oYXNfcm9sZXMgPSBPYmplY3Qua2V5cyhhY2wucGVybWlzc2lvbnNCeUlkKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgncm9sZTonKSk7XG4gICAgICAgIGlmICghYWNsX2hhc19yb2xlcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCBhdXRoLmdldFVzZXJSb2xlcygpO1xuICAgICAgICAvLyBGaW5hbGx5LCBzZWUgaWYgYW55IG9mIHRoZSB1c2VyJ3Mgcm9sZXMgYWxsb3cgdGhlbSByZWFkIGFjY2Vzc1xuICAgICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZU5hbWVzKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGdldFJlYWRBY2Nlc3MgYXMgYHJvbGVgIGlzIGluIHRoZSBmb3JtIGByb2xlOnJvbGVOYW1lYFxuICAgICAgICAgIGlmIChhY2wuZ2V0UmVhZEFjY2Vzcyhyb2xlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhGcm9tQ2xpZW50KGNsaWVudDogYW55LCByZXF1ZXN0SWQ6IG51bWJlciwgc2Vzc2lvblRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRTZXNzaW9uRnJvbUNsaWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgIH07XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHNlc3Npb25Ub2tlbiA9IGdldFNlc3Npb25Gcm9tQ2xpZW50KCk7XG4gICAgfVxuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbik7XG4gICAgcmV0dXJuIGF1dGg7XG4gIH1cblxuICBfY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHdhdGNoID0gc3Vic2NyaXB0aW9uSW5mbz8ud2F0Y2g7XG4gICAgaWYgKCF3YXRjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIHJldHVybiB3YXRjaC5zb21lKGZpZWxkID0+ICFpc0RlZXBTdHJpY3RFcXVhbChvYmplY3QuZ2V0KGZpZWxkKSwgb3JpZ2luYWw/LmdldChmaWVsZCkpKTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQUNMKGFjbDogYW55LCBjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gdHJ1ZSBkaXJlY3RseSBpZiBBQ0wgaXNuJ3QgcHJlc2VudCwgQUNMIGlzIHB1YmxpYyByZWFkLCBvciBjbGllbnQgaGFzIG1hc3RlciBrZXlcbiAgICBpZiAoIWFjbCB8fCBhY2wuZ2V0UHVibGljUmVhZEFjY2VzcygpIHx8IGNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDaGVjayBzdWJzY3JpcHRpb24gc2Vzc2lvblRva2VuIG1hdGNoZXMgQUNMIGZpcnN0XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRva2VuID0gc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW47XG4gICAgY29uc3QgY2xpZW50U2Vzc2lvblRva2VuID0gY2xpZW50LnNlc3Npb25Ub2tlbjtcblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBzdWJzY3JpcHRpb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBjbGllbnRTZXNzaW9uVG9rZW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGVLZXlzKHJlcXVlc3QsIHRoaXMua2V5UGFpcnMpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCA0LCAnS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0tleSBpbiByZXF1ZXN0IGlzIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNNYXN0ZXJLZXkgPSB0aGlzLl9oYXNNYXN0ZXJLZXkocmVxdWVzdCwgdGhpcy5rZXlQYWlycyk7XG4gICAgY29uc3QgY2xpZW50SWQgPSB1dWlkdjQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KFxuICAgICAgY2xpZW50SWQsXG4gICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgIGhhc01hc3RlcktleSxcbiAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgcmVxdWVzdC5pbnN0YWxsYXRpb25JZFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBldmVudDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcXVlc3QuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoJ0BDb25uZWN0JywgJ2JlZm9yZUNvbm5lY3QnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcS5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXEudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVDb25uZWN0LkBDb25uZWN0YCwgcmVxLCBhdXRoKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCBjbGllbnQpO1xuICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZSBuZXcgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY2xpZW50LnB1c2hDb25uZWN0KCk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHJlcSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVDb25uZWN0IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhc01hc3RlcktleShyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCB8fCAhdmFsaWRLZXlQYWlycy5oYXMoJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcmVxdWVzdCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVlc3QsICdtYXN0ZXJLZXknKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdC5tYXN0ZXJLZXkgPT09IHZhbGlkS2V5UGFpcnMuZ2V0KCdtYXN0ZXJLZXknKTtcbiAgfVxuXG4gIF92YWxpZGF0ZUtleXMocmVxdWVzdDogYW55LCB2YWxpZEtleVBhaXJzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbGlkS2V5UGFpcnMgfHwgdmFsaWRLZXlQYWlycy5zaXplID09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgc2VjcmV0XSBvZiB2YWxpZEtleVBhaXJzKSB7XG4gICAgICBpZiAoIXJlcXVlc3Rba2V5XSB8fCByZXF1ZXN0W2tleV0gIT09IHNlY3JldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSBzdWJzY3JpYmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSByZXF1ZXN0LnF1ZXJ5LmNsYXNzTmFtZTtcbiAgICBsZXQgYXV0aENhbGxlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdiZWZvcmVTdWJzY3JpYmUnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcXVlc3Quc2Vzc2lvblRva2VuKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlUXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lKTtcbiAgICAgICAgcGFyc2VRdWVyeS53aXRoSlNPTihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHBhcnNlUXVlcnk7XG4gICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGJlZm9yZVN1YnNjcmliZS4ke2NsYXNzTmFtZX1gLCByZXF1ZXN0LCBhdXRoKTtcblxuICAgICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3QucXVlcnkudG9KU09OKCk7XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ19TZXNzaW9uJykge1xuICAgICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVxdWVzdC5zZXNzaW9uVG9rZW5cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZS51c2VyID0gcmVxdWVzdC51c2VyLnRvUG9pbnRlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKCFyZXF1ZXN0Lm1hc3Rlcikge1xuICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTixcbiAgICAgICAgICAgICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIGZyb20gc3Vic2NyaXB0aW9ucywgY3JlYXRlIG9uZSBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkhhc2ggPSBxdWVyeUhhc2gocmVxdWVzdC5xdWVyeSk7XG4gICAgICAvLyBBZGQgY2xhc3NOYW1lIHRvIHN1YnNjcmlwdGlvbnMgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoY2xhc3NOYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuaGFzKHN1YnNjcmlwdGlvbkhhc2gpKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGNsYXNzU3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKGNsYXNzTmFtZSwgcmVxdWVzdC5xdWVyeS53aGVyZSwgc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSGFzaCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHN1YnNjcmlwdGlvbkluZm8gdG8gY2xpZW50XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0ge1xuICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbixcbiAgICAgIH07XG4gICAgICAvLyBBZGQgc2VsZWN0ZWQgZmllbGRzLCBzZXNzaW9uVG9rZW4gYW5kIGluc3RhbGxhdGlvbklkIGZvciB0aGlzIHN1YnNjcmlwdGlvbiBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChyZXF1ZXN0LnF1ZXJ5LmtleXMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5rZXlzID0gQXJyYXkuaXNBcnJheShyZXF1ZXN0LnF1ZXJ5LmtleXMpXG4gICAgICAgICAgPyByZXF1ZXN0LnF1ZXJ5LmtleXNcbiAgICAgICAgICA6IHJlcXVlc3QucXVlcnkua2V5cy5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkuZmllbGRzKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbkluZm8ua2V5cyA9IHJlcXVlc3QucXVlcnkuZmllbGRzO1xuICAgICAgICBEZXByZWNhdG9yLmxvZ1J1bnRpbWVEZXByZWNhdGlvbih7XG4gICAgICAgICAgdXNhZ2U6IGBTdWJzY3JpYmluZyB1c2luZyBmaWVsZHMgcGFyYW1ldGVyYCxcbiAgICAgICAgICBzb2x1dGlvbjogYFN1YnNjcmliZSB1c2luZyBcImtleXNcIiBpbnN0ZWFkLmAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby53YXRjaCA9IHJlcXVlc3QucXVlcnkud2F0Y2g7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5zZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gPSByZXF1ZXN0LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGNsaWVudC5hZGRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkLCBzdWJzY3JpcHRpb25JbmZvKTtcblxuICAgICAgLy8gQWRkIGNsaWVudElkIHRvIHN1YnNjcmlwdGlvblxuICAgICAgc3Vic2NyaXB0aW9uLmFkZENsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuXG4gICAgICBjbGllbnQucHVzaFN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICBgQ3JlYXRlIGNsaWVudCAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSBuZXcgc3Vic2NyaXB0aW9uOiAke3JlcXVlc3QucmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIGV2ZW50OiAnc3Vic2NyaWJlJyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIGVycm9yLmNvZGUsIGVycm9yLm1lc3NhZ2UsIGZhbHNlLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVTdWJzY3JpYmUgb24gJHtjbGFzc05hbWV9IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0LCBmYWxzZSk7XG4gICAgdGhpcy5faGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgfVxuXG4gIF9oYW5kbGVVbnN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnksIG5vdGlmeUNsaWVudDogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAnQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVxdWVzdC5yZXF1ZXN0SWQ7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIGNsaWVudCB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50ICcgKyBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW5ub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3Ugc3Vic2NyaWJlIHRvIGxpdmUgcXVlcnkgc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nLidcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgc3Vic2NyaXB0aW9uIHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcgc3Vic2NyaXB0aW9uSWQgJyArXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBzdWJzY3JpcHRpb24gZnJvbSBjbGllbnRcbiAgICBjbGllbnQuZGVsZXRlU3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIC8vIFJlbW92ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25JbmZvLnN1YnNjcmlwdGlvbjtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBzdWJzY3JpcHRpb24uY2xhc3NOYW1lO1xuICAgIHN1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3RJZCk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gY2xpZW50IHdoaWNoIGlzIHN1YnNjcmliaW5nIHRoaXMgc3Vic2NyaXB0aW9uLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgIGlmICghc3Vic2NyaXB0aW9uLmhhc1N1YnNjcmliaW5nQ2xpZW50KCkpIHtcbiAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5kZWxldGUoc3Vic2NyaXB0aW9uLmhhc2gpO1xuICAgIH1cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MsIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICBpZiAoY2xhc3NTdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBjbGllbnQsXG4gICAgICBldmVudDogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICBzZXNzaW9uVG9rZW46IHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGlmICghbm90aWZ5Q2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xpZW50LnB1c2hVbnN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBEZWxldGUgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSB8IHN1YnNjcmlwdGlvbjogJHtyZXF1ZXN0LnJlcXVlc3RJZH1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUxpdmVRdWVyeVNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
|
|
@@ -73,6 +73,22 @@ const subscribe = {
|
|
|
73
73
|
},
|
|
74
74
|
minItems: 1,
|
|
75
75
|
uniqueItems: true
|
|
76
|
+
},
|
|
77
|
+
keys: {
|
|
78
|
+
type: 'array',
|
|
79
|
+
items: {
|
|
80
|
+
type: 'string'
|
|
81
|
+
},
|
|
82
|
+
minItems: 1,
|
|
83
|
+
uniqueItems: true
|
|
84
|
+
},
|
|
85
|
+
watch: {
|
|
86
|
+
type: 'array',
|
|
87
|
+
items: {
|
|
88
|
+
type: 'string'
|
|
89
|
+
},
|
|
90
|
+
minItems: 1,
|
|
91
|
+
uniqueItems: true
|
|
76
92
|
}
|
|
77
93
|
},
|
|
78
94
|
required: ['where', 'className'],
|
|
@@ -110,6 +126,22 @@ const update = {
|
|
|
110
126
|
},
|
|
111
127
|
minItems: 1,
|
|
112
128
|
uniqueItems: true
|
|
129
|
+
},
|
|
130
|
+
keys: {
|
|
131
|
+
type: 'array',
|
|
132
|
+
items: {
|
|
133
|
+
type: 'string'
|
|
134
|
+
},
|
|
135
|
+
minItems: 1,
|
|
136
|
+
uniqueItems: true
|
|
137
|
+
},
|
|
138
|
+
watch: {
|
|
139
|
+
type: 'array',
|
|
140
|
+
items: {
|
|
141
|
+
type: 'string'
|
|
142
|
+
},
|
|
143
|
+
minItems: 1,
|
|
144
|
+
uniqueItems: true
|
|
113
145
|
}
|
|
114
146
|
},
|
|
115
147
|
required: ['where', 'className'],
|
|
@@ -143,4 +175,4 @@ const RequestSchema = {
|
|
|
143
175
|
};
|
|
144
176
|
var _default = RequestSchema;
|
|
145
177
|
exports.default = _default;
|
|
146
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
178
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW5lcmFsIiwidGl0bGUiLCJ0eXBlIiwicHJvcGVydGllcyIsIm9wIiwiZW51bSIsInJlcXVpcmVkIiwiY29ubmVjdCIsImFwcGxpY2F0aW9uSWQiLCJqYXZhc2NyaXB0S2V5IiwibWFzdGVyS2V5IiwiY2xpZW50S2V5Iiwid2luZG93c0tleSIsInJlc3RBUElLZXkiLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwic3Vic2NyaWJlIiwicmVxdWVzdElkIiwicXVlcnkiLCJjbGFzc05hbWUiLCJ3aGVyZSIsImZpZWxkcyIsIml0ZW1zIiwibWluSXRlbXMiLCJ1bmlxdWVJdGVtcyIsImtleXMiLCJ3YXRjaCIsInVwZGF0ZSIsInVuc3Vic2NyaWJlIiwiUmVxdWVzdFNjaGVtYSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUmVxdWVzdFNjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBnZW5lcmFsID0ge1xuICB0aXRsZTogJ0dlbmVyYWwgcmVxdWVzdCBzY2hlbWEnLFxuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIG9wOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IFsnY29ubmVjdCcsICdzdWJzY3JpYmUnLCAndW5zdWJzY3JpYmUnLCAndXBkYXRlJ10sXG4gICAgfSxcbiAgfSxcbiAgcmVxdWlyZWQ6IFsnb3AnXSxcbn07XG5cbmNvbnN0IGNvbm5lY3QgPSB7XG4gIHRpdGxlOiAnQ29ubmVjdCBvcGVyYXRpb24gc2NoZW1hJyxcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcDogJ2Nvbm5lY3QnLFxuICAgIGFwcGxpY2F0aW9uSWQ6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgamF2YXNjcmlwdEtleToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgICBtYXN0ZXJLZXk6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgY2xpZW50S2V5OiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHdpbmRvd3NLZXk6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgcmVzdEFQSUtleToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgICBzZXNzaW9uVG9rZW46IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgaW5zdGFsbGF0aW9uSWQ6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbJ29wJywgJ2FwcGxpY2F0aW9uSWQnXSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxufTtcblxuY29uc3Qgc3Vic2NyaWJlID0ge1xuICB0aXRsZTogJ1N1YnNjcmliZSBvcGVyYXRpb24gc2NoZW1hJyxcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcDogJ3N1YnNjcmliZScsXG4gICAgcmVxdWVzdElkOiB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICB9LFxuICAgIHF1ZXJ5OiB7XG4gICAgICB0aXRsZTogJ1F1ZXJ5IGZpZWxkIHNjaGVtYScsXG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGtleXM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFsnd2hlcmUnLCAnY2xhc3NOYW1lJ10sXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgfSxcbiAgICBzZXNzaW9uVG9rZW46IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbJ29wJywgJ3JlcXVlc3RJZCcsICdxdWVyeSddLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG59O1xuXG5jb25zdCB1cGRhdGUgPSB7XG4gIHRpdGxlOiAnVXBkYXRlIG9wZXJhdGlvbiBzY2hlbWEnLFxuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIG9wOiAndXBkYXRlJyxcbiAgICByZXF1ZXN0SWQ6IHtcbiAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgIH0sXG4gICAgcXVlcnk6IHtcbiAgICAgIHRpdGxlOiAnUXVlcnkgZmllbGQgc2NoZW1hJyxcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAga2V5czoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHdhdGNoOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWyd3aGVyZScsICdjbGFzc05hbWUnXSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICB9LFxuICAgIHNlc3Npb25Ub2tlbjoge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgfSxcbiAgcmVxdWlyZWQ6IFsnb3AnLCAncmVxdWVzdElkJywgJ3F1ZXJ5J10sXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbn07XG5cbmNvbnN0IHVuc3Vic2NyaWJlID0ge1xuICB0aXRsZTogJ1Vuc3Vic2NyaWJlIG9wZXJhdGlvbiBzY2hlbWEnLFxuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIG9wOiAndW5zdWJzY3JpYmUnLFxuICAgIHJlcXVlc3RJZDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgfSxcbiAgfSxcbiAgcmVxdWlyZWQ6IFsnb3AnLCAncmVxdWVzdElkJ10sXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbn07XG5cbmNvbnN0IFJlcXVlc3RTY2hlbWEgPSB7XG4gIGdlbmVyYWw6IGdlbmVyYWwsXG4gIGNvbm5lY3Q6IGNvbm5lY3QsXG4gIHN1YnNjcmliZTogc3Vic2NyaWJlLFxuICB1cGRhdGU6IHVwZGF0ZSxcbiAgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFNjaGVtYTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsT0FBTyxHQUFHO0VBQ2RDLEtBQUssRUFBRSx3QkFBd0I7RUFDL0JDLElBQUksRUFBRSxRQUFRO0VBQ2RDLFVBQVUsRUFBRTtJQUNWQyxFQUFFLEVBQUU7TUFDRkYsSUFBSSxFQUFFLFFBQVE7TUFDZEcsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUTtJQUN4RDtFQUNGLENBQUM7RUFDREMsUUFBUSxFQUFFLENBQUMsSUFBSTtBQUNqQixDQUFDO0FBRUQsTUFBTUMsT0FBTyxHQUFHO0VBQ2ROLEtBQUssRUFBRSwwQkFBMEI7RUFDakNDLElBQUksRUFBRSxRQUFRO0VBQ2RDLFVBQVUsRUFBRTtJQUNWQyxFQUFFLEVBQUUsU0FBUztJQUNiSSxhQUFhLEVBQUU7TUFDYk4sSUFBSSxFQUFFO0lBQ1IsQ0FBQztJQUNETyxhQUFhLEVBQUU7TUFDYlAsSUFBSSxFQUFFO0lBQ1IsQ0FBQztJQUNEUSxTQUFTLEVBQUU7TUFDVFIsSUFBSSxFQUFFO0lBQ1IsQ0FBQztJQUNEUyxTQUFTLEVBQUU7TUFDVFQsSUFBSSxFQUFFO0lBQ1IsQ0FBQztJQUNEVSxVQUFV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
|
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.33",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"graphql-tag": "2.12.6",
|
|
41
41
|
"intersect": "1.0.1",
|
|
42
42
|
"ip-range-check": "0.2.0",
|
|
43
|
-
"jsonwebtoken": "
|
|
43
|
+
"jsonwebtoken": "9.0.0",
|
|
44
44
|
"jwks-rsa": "2.1.5",
|
|
45
45
|
"ldapjs": "2.3.3",
|
|
46
46
|
"lodash": "4.17.21",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"@semantic-release/github": "7.2.3",
|
|
79
79
|
"@semantic-release/npm": "7.1.3",
|
|
80
80
|
"@semantic-release/release-notes-generator": "9.0.3",
|
|
81
|
-
"all-node-versions": "
|
|
81
|
+
"all-node-versions": "11.3.0",
|
|
82
82
|
"apollo-upload-client": "17.0.0",
|
|
83
83
|
"bcrypt-nodejs": "0.0.3",
|
|
84
84
|
"cross-env": "7.0.2",
|