parse-server 6.0.0-alpha.21 → 6.0.0-alpha.23
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/README.md +10 -0
- package/lib/Auth.js +16 -2
- package/lib/Config.js +10 -4
- package/lib/Controllers/DatabaseController.js +26 -22
- package/lib/Controllers/SchemaController.js +9 -5
- package/lib/Controllers/UserController.js +7 -7
- package/lib/LiveQuery/ParseLiveQueryServer.js +2 -2
- package/lib/Options/Definitions.js +13 -2
- package/lib/Options/docs.js +4 -2
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +34 -19
- package/lib/RestWrite.js +13 -13
- package/lib/Routers/UsersRouter.js +2 -2
- package/lib/middlewares.js +19 -3
- package/lib/rest.js +7 -7
- package/package.json +1 -1
package/lib/rest.js
CHANGED
|
@@ -70,7 +70,7 @@ function del(config, auth, className, objectId, context) {
|
|
|
70
70
|
if (response && response.results && response.results.length) {
|
|
71
71
|
const firstResult = response.results[0];
|
|
72
72
|
firstResult.className = className;
|
|
73
|
-
if (className === '_Session' && !auth.isMaster) {
|
|
73
|
+
if (className === '_Session' && !auth.isMaster && !auth.isMaintenance) {
|
|
74
74
|
if (!auth.user || firstResult.user.objectId !== auth.user.id) {
|
|
75
75
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'Invalid session token');
|
|
76
76
|
}
|
|
@@ -85,7 +85,7 @@ function del(config, auth, className, objectId, context) {
|
|
|
85
85
|
}
|
|
86
86
|
return Promise.resolve({});
|
|
87
87
|
}).then(() => {
|
|
88
|
-
if (!auth.isMaster) {
|
|
88
|
+
if (!auth.isMaster && !auth.isMaintenance) {
|
|
89
89
|
return auth.getUserRoles();
|
|
90
90
|
} else {
|
|
91
91
|
return;
|
|
@@ -93,7 +93,7 @@ function del(config, auth, className, objectId, context) {
|
|
|
93
93
|
}).then(() => config.database.loadSchema()).then(s => {
|
|
94
94
|
schemaController = s;
|
|
95
95
|
const options = {};
|
|
96
|
-
if (!auth.isMaster) {
|
|
96
|
+
if (!auth.isMaster && !auth.isMaintenance) {
|
|
97
97
|
options.acl = ['*'];
|
|
98
98
|
if (auth.user) {
|
|
99
99
|
options.acl.push(auth.user.id);
|
|
@@ -149,7 +149,7 @@ function update(config, auth, className, restWhere, restObject, clientSDK, conte
|
|
|
149
149
|
}
|
|
150
150
|
function handleSessionMissingError(error, className, auth) {
|
|
151
151
|
// If we're trying to update a user without / with bad session token
|
|
152
|
-
if (className === '_User' && error.code === Parse.Error.OBJECT_NOT_FOUND && !auth.isMaster) {
|
|
152
|
+
if (className === '_User' && error.code === Parse.Error.OBJECT_NOT_FOUND && !auth.isMaster && !auth.isMaintenance) {
|
|
153
153
|
throw new Parse.Error(Parse.Error.SESSION_MISSING, 'Insufficient auth.');
|
|
154
154
|
}
|
|
155
155
|
throw error;
|
|
@@ -157,7 +157,7 @@ function handleSessionMissingError(error, className, auth) {
|
|
|
157
157
|
const classesWithMasterOnlyAccess = ['_JobStatus', '_PushStatus', '_Hooks', '_GlobalConfig', '_JobSchedule', '_Idempotency'];
|
|
158
158
|
// Disallowing access to the _Role collection except by master key
|
|
159
159
|
function enforceRoleSecurity(method, className, auth) {
|
|
160
|
-
if (className === '_Installation' && !auth.isMaster) {
|
|
160
|
+
if (className === '_Installation' && !auth.isMaster && !auth.isMaintenance) {
|
|
161
161
|
if (method === 'delete' || method === 'find') {
|
|
162
162
|
const error = `Clients aren't allowed to perform the ${method} operation on the installation collection.`;
|
|
163
163
|
throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
|
|
@@ -165,7 +165,7 @@ function enforceRoleSecurity(method, className, auth) {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
//all volatileClasses are masterKey only
|
|
168
|
-
if (classesWithMasterOnlyAccess.indexOf(className) >= 0 && !auth.isMaster) {
|
|
168
|
+
if (classesWithMasterOnlyAccess.indexOf(className) >= 0 && !auth.isMaster && !auth.isMaintenance) {
|
|
169
169
|
const error = `Clients aren't allowed to perform the ${method} operation on the ${className} collection.`;
|
|
170
170
|
throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
|
|
171
171
|
}
|
|
@@ -183,4 +183,4 @@ module.exports = {
|
|
|
183
183
|
get,
|
|
184
184
|
update
|
|
185
185
|
};
|
|
186
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJSZXN0UXVlcnkiLCJSZXN0V3JpdGUiLCJ0cmlnZ2VycyIsImNoZWNrVHJpZ2dlcnMiLCJjbGFzc05hbWUiLCJjb25maWciLCJ0eXBlcyIsInNvbWUiLCJ0cmlnZ2VyVHlwZSIsImdldFRyaWdnZXIiLCJUeXBlcyIsImFwcGxpY2F0aW9uSWQiLCJjaGVja0xpdmVRdWVyeSIsImxpdmVRdWVyeUNvbnRyb2xsZXIiLCJoYXNMaXZlUXVlcnkiLCJmaW5kIiwiYXV0aCIsInJlc3RXaGVyZSIsInJlc3RPcHRpb25zIiwiY2xpZW50U0RLIiwiY29udGV4dCIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsImJlZm9yZUZpbmQiLCJ0aGVuIiwicmVzdWx0IiwicXVlcnkiLCJleGVjdXRlIiwiZ2V0Iiwib2JqZWN0SWQiLCJkZWwiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsImlzVW5hdXRoZW50aWNhdGVkIiwiU0VTU0lPTl9NSVNTSU5HIiwiaW5mbGF0ZWRPYmplY3QiLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNUcmlnZ2VycyIsIm9wIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwibGVuZ3RoIiwiZmlyc3RSZXN1bHQiLCJpc01hc3RlciIsInVzZXIiLCJpZCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsImNhY2hlQWRhcHRlciIsImNhY2hlQ29udHJvbGxlciIsInNlc3Npb25Ub2tlbiIsIk9iamVjdCIsImZyb21KU09OIiwibWF5YmVSdW5UcmlnZ2VyIiwiYmVmb3JlRGVsZXRlIiwiT0JKRUNUX05PVF9GT1VORCIsImdldFVzZXJSb2xlcyIsImRhdGFiYXNlIiwibG9hZFNjaGVtYSIsInMiLCJvcHRpb25zIiwiYWNsIiwicHVzaCIsImNvbmNhdCIsInVzZXJSb2xlcyIsImRlc3Ryb3kiLCJwZXJtcyIsImdldENsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsIm9uQWZ0ZXJEZWxldGUiLCJhZnRlckRlbGV0ZSIsImNhdGNoIiwiZXJyb3IiLCJoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yIiwiY3JlYXRlIiwicmVzdE9iamVjdCIsIndyaXRlIiwidXBkYXRlIiwidW5kZWZpbmVkIiwib3JpZ2luYWxSZXN0T2JqZWN0IiwiY29kZSIsImNsYXNzZXNXaXRoTWFzdGVyT25seUFjY2VzcyIsIm1ldGhvZCIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJpbmRleE9mIiwiaXNSZWFkT25seSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvcmVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgY29udGFpbnMgaGVscGVycyBmb3IgcnVubmluZyBvcGVyYXRpb25zIGluIFJFU1QgZm9ybWF0LlxuLy8gVGhlIGdvYWwgaXMgdGhhdCBoYW5kbGVycyB0aGF0IGV4cGxpY2l0bHkgaGFuZGxlIGFuIGV4cHJlc3Mgcm91dGVcbi8vIHNob3VsZCBqdXN0IGJlIHNoYWxsb3cgd3JhcHBlcnMgYXJvdW5kIHRoaW5ncyBpbiB0aGlzIGZpbGUsIGJ1dFxuLy8gdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgZXhwbGljaXRseSBkZXBlbmQgb24gdGhlIHJlcXVlc3Rcbi8vIG9iamVjdC5cbi8vIFRoaXMgbWVhbnMgdGhhdCBvbmUgb2YgdGhlc2UgaGFuZGxlcnMgY2FuIHN1cHBvcnQgbXVsdGlwbGVcbi8vIHJvdXRlcy4gVGhhdCdzIHVzZWZ1bCBmb3IgdGhlIHJvdXRlcyB0aGF0IGRvIHJlYWxseSBzaW1pbGFyXG4vLyB0aGluZ3MuXG5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxudmFyIFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG52YXIgUmVzdFdyaXRlID0gcmVxdWlyZSgnLi9SZXN0V3JpdGUnKTtcbnZhciB0cmlnZ2VycyA9IHJlcXVpcmUoJy4vdHJpZ2dlcnMnKTtcblxuZnVuY3Rpb24gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVzLnNvbWUodHJpZ2dlclR5cGUgPT4ge1xuICAgIHJldHVybiB0cmlnZ2Vycy5nZXRUcmlnZ2VyKGNsYXNzTmFtZSwgdHJpZ2dlcnMuVHlwZXNbdHJpZ2dlclR5cGVdLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0xpdmVRdWVyeShjbGFzc05hbWUsIGNvbmZpZykge1xuICByZXR1cm4gY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIgJiYgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIuaGFzTGl2ZVF1ZXJ5KGNsYXNzTmFtZSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhbiBvYmplY3Qgd2l0aCBvcHRpb25hbCBrZXlzICdyZXN1bHRzJyBhbmQgJ2NvdW50Jy5cbmZ1bmN0aW9uIGZpbmQoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMsIGNsaWVudFNESywgY29udGV4dCkge1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdmaW5kJywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgcmV0dXJuIHRyaWdnZXJzXG4gICAgLm1heWJlUnVuUXVlcnlUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbnRleHRcbiAgICApXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHJlc3RXaGVyZSA9IHJlc3VsdC5yZXN0V2hlcmUgfHwgcmVzdFdoZXJlO1xuICAgICAgcmVzdE9wdGlvbnMgPSByZXN1bHQucmVzdE9wdGlvbnMgfHwgcmVzdE9wdGlvbnM7XG4gICAgICBjb25zdCBxdWVyeSA9IG5ldyBSZXN0UXVlcnkoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgICBjbGllbnRTREssXG4gICAgICAgIHRydWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgICByZXR1cm4gcXVlcnkuZXhlY3V0ZSgpO1xuICAgIH0pO1xufVxuXG4vLyBnZXQgaXMganVzdCBsaWtlIGZpbmQgYnV0IG9ubHkgcXVlcmllcyBhbiBvYmplY3RJZC5cbmNvbnN0IGdldCA9IChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgb2JqZWN0SWQsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpID0+IHtcbiAgdmFyIHJlc3RXaGVyZSA9IHsgb2JqZWN0SWQgfTtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZ2V0JywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgcmV0dXJuIHRyaWdnZXJzXG4gICAgLm1heWJlUnVuUXVlcnlUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN0V2hlcmUgPSByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZTtcbiAgICAgIHJlc3RPcHRpb25zID0gcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zO1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICB0cnVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZG9lc24ndCByZXNvbHZlIHRvIGFueSB1c2VmdWwgdmFsdWUuXG5mdW5jdGlvbiBkZWwoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCBjb250ZXh0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ2JhZCBvYmplY3RJZCcpO1xuICB9XG5cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJiBhdXRoLmlzVW5hdXRoZW50aWNhdGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0VTU0lPTl9NSVNTSU5HLCAnSW5zdWZmaWNpZW50IGF1dGggdG8gZGVsZXRlIHVzZXInKTtcbiAgfVxuXG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2RlbGV0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG5cbiAgbGV0IGluZmxhdGVkT2JqZWN0O1xuICBsZXQgc2NoZW1hQ29udHJvbGxlcjtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYXNUcmlnZ2VycyA9IGNoZWNrVHJpZ2dlcnMoY2xhc3NOYW1lLCBjb25maWcsIFsnYmVmb3JlRGVsZXRlJywgJ2FmdGVyRGVsZXRlJ10pO1xuICAgICAgY29uc3QgaGFzTGl2ZVF1ZXJ5ID0gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpO1xuICAgICAgaWYgKGhhc1RyaWdnZXJzIHx8IGhhc0xpdmVRdWVyeSB8fCBjbGFzc05hbWUgPT0gJ19TZXNzaW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RRdWVyeShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgeyBvYmplY3RJZCB9KVxuICAgICAgICAgIC5leGVjdXRlKHsgb3A6ICdkZWxldGUnIH0pXG4gICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSByZXNwb25zZS5yZXN1bHRzWzBdO1xuICAgICAgICAgICAgICBmaXJzdFJlc3VsdC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicgJiYgIWF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGgudXNlciB8fCBmaXJzdFJlc3VsdC51c2VyLm9iamVjdElkICE9PSBhdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGNhY2hlQWRhcHRlciA9IGNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgIGNhY2hlQWRhcHRlci51c2VyLmRlbChmaXJzdFJlc3VsdC5zZXNzaW9uVG9rZW4pO1xuICAgICAgICAgICAgICBpbmZsYXRlZE9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihmaXJzdFJlc3VsdCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kIGZvciBkZWxldGUuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmICghYXV0aC5pc01hc3Rlcikge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRVc2VyUm9sZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KVxuICAgIC50aGVuKCgpID0+IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKCkpXG4gICAgLnRoZW4ocyA9PiB7XG4gICAgICBzY2hlbWFDb250cm9sbGVyID0gcztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghYXV0aC5pc01hc3Rlcikge1xuICAgICAgICBvcHRpb25zLmFjbCA9IFsnKiddO1xuICAgICAgICBpZiAoYXV0aC51c2VyKSB7XG4gICAgICAgICAgb3B0aW9ucy5hY2wucHVzaChhdXRoLnVzZXIuaWQpO1xuICAgICAgICAgIG9wdGlvbnMuYWNsID0gb3B0aW9ucy5hY2wuY29uY2F0KGF1dGgudXNlclJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnLmRhdGFiYXNlLmRlc3Ryb3koXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2NoZW1hQ29udHJvbGxlclxuICAgICAgKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIE5vdGlmeSBMaXZlUXVlcnkgc2VydmVyIGlmIHBvc3NpYmxlXG4gICAgICBjb25zdCBwZXJtcyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25maWcubGl2ZVF1ZXJ5Q29udHJvbGxlci5vbkFmdGVyRGVsZXRlKGNsYXNzTmFtZSwgaW5mbGF0ZWRPYmplY3QsIG51bGwsIHBlcm1zKTtcbiAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBhdXRoLFxuICAgICAgICBpbmZsYXRlZE9iamVjdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGhhbmRsZVNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IsIGNsYXNzTmFtZSwgYXV0aCk7XG4gICAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZSwgc3RhdHVzLCBsb2NhdGlvbn0gb2JqZWN0LlxuZnVuY3Rpb24gY3JlYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0T2JqZWN0LCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnY3JlYXRlJywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgdmFyIHdyaXRlID0gbmV3IFJlc3RXcml0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgbnVsbCwgcmVzdE9iamVjdCwgbnVsbCwgY2xpZW50U0RLLCBjb250ZXh0KTtcbiAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBjb250YWlucyB0aGUgZmllbGRzIG9mIHRoZSB1cGRhdGUgdGhhdCB0aGVcbi8vIFJFU1QgQVBJIGlzIHN1cHBvc2VkIHRvIHJldHVybi5cbi8vIFVzdWFsbHksIHRoaXMgaXMganVzdCB1cGRhdGVkQXQuXG5mdW5jdGlvbiB1cGRhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ3VwZGF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZVNhdmUnLCAnYWZ0ZXJTYXZlJ10pO1xuICAgICAgY29uc3QgaGFzTGl2ZVF1ZXJ5ID0gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpO1xuICAgICAgaWYgKGhhc1RyaWdnZXJzIHx8IGhhc0xpdmVRdWVyeSkge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGZpbmQsIGFzIGl0IHJ1bnMgdGhlIGJlZm9yZSBmaW5kc1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RRdWVyeShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICApLmV4ZWN1dGUoe1xuICAgICAgICAgIG9wOiAndXBkYXRlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KVxuICAgIC50aGVuKCh7IHJlc3VsdHMgfSkgPT4ge1xuICAgICAgdmFyIG9yaWdpbmFsUmVzdE9iamVjdDtcbiAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCA9IHJlc3VsdHNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJlc3RXcml0ZShcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgcmVzdE9iamVjdCxcbiAgICAgICAgb3JpZ2luYWxSZXN0T2JqZWN0LFxuICAgICAgICBjbGllbnRTREssXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgICd1cGRhdGUnXG4gICAgICApLmV4ZWN1dGUoKTtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yLCBjbGFzc05hbWUsIGF1dGgpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yLCBjbGFzc05hbWUsIGF1dGgpIHtcbiAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIHVwZGF0ZSBhIHVzZXIgd2l0aG91dCAvIHdpdGggYmFkIHNlc3Npb24gdG9rZW5cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNFU1NJT05fTUlTU0lORywgJ0luc3VmZmljaWVudCBhdXRoLicpO1xuICB9XG4gIHRocm93IGVycm9yO1xufVxuXG5jb25zdCBjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MgPSBbXG4gICdfSm9iU3RhdHVzJyxcbiAgJ19QdXNoU3RhdHVzJyxcbiAgJ19Ib29rcycsXG4gICdfR2xvYmFsQ29uZmlnJyxcbiAgJ19Kb2JTY2hlZHVsZScsXG4gICdfSWRlbXBvdGVuY3knLFxuXTtcbi8vIERpc2FsbG93aW5nIGFjY2VzcyB0byB0aGUgX1JvbGUgY29sbGVjdGlvbiBleGNlcHQgYnkgbWFzdGVyIGtleVxuZnVuY3Rpb24gZW5mb3JjZVJvbGVTZWN1cml0eShtZXRob2QsIGNsYXNzTmFtZSwgYXV0aCkge1xuICBpZiAoY2xhc3NOYW1lID09PSAnX0luc3RhbGxhdGlvbicgJiYgIWF1dGguaXNNYXN0ZXIpIHtcbiAgICBpZiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdmaW5kJykge1xuICAgICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSBpbnN0YWxsYXRpb24gY29sbGVjdGlvbi5gO1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvL2FsbCB2b2xhdGlsZUNsYXNzZXMgYXJlIG1hc3RlcktleSBvbmx5XG4gIGlmIChjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MuaW5kZXhPZihjbGFzc05hbWUpID49IDAgJiYgIWF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IGBDbGllbnRzIGFyZW4ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24gb24gdGhlICR7Y2xhc3NOYW1lfSBjb2xsZWN0aW9uLmA7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sIGVycm9yKTtcbiAgfVxuXG4gIC8vIHJlYWRPbmx5IG1hc3RlcktleSBpcyBub3QgYWxsb3dlZFxuICBpZiAoYXV0aC5pc1JlYWRPbmx5ICYmIChtZXRob2QgPT09ICdkZWxldGUnIHx8IG1ldGhvZCA9PT0gJ2NyZWF0ZScgfHwgbWV0aG9kID09PSAndXBkYXRlJykpIHtcbiAgICBjb25zdCBlcnJvciA9IGByZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgJHttZXRob2R9IG9wZXJhdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZSxcbiAgZGVsLFxuICBmaW5kLFxuICBnZXQsXG4gIHVwZGF0ZSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0QsS0FBSztBQUV2QyxJQUFJRSxTQUFTLEdBQUdELE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEMsSUFBSUUsU0FBUyxHQUFHRixPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDLElBQUlHLFFBQVEsR0FBR0gsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUVwQyxTQUFTSSxhQUFhLENBQUNDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDL0MsT0FBT0EsS0FBSyxDQUFDQyxJQUFJLENBQUNDLFdBQVcsSUFBSTtJQUMvQixPQUFPTixRQUFRLENBQUNPLFVBQVUsQ0FBQ0wsU0FBUyxFQUFFRixRQUFRLENBQUNRLEtBQUssQ0FBQ0YsV0FBVyxDQUFDLEVBQUVILE1BQU0sQ0FBQ00sYUFBYSxDQUFDO0VBQzFGLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0MsY0FBYyxDQUFDUixTQUFTLEVBQUVDLE1BQU0sRUFBRTtFQUN6QyxPQUFPQSxNQUFNLENBQUNRLG1CQUFtQixJQUFJUixNQUFNLENBQUNRLG1CQUFtQixDQUFDQyxZQUFZLENBQUNWLFNBQVMsQ0FBQztBQUN6Rjs7QUFFQTtBQUNBLFNBQVNXLElBQUksQ0FBQ1YsTUFBTSxFQUFFVyxJQUFJLEVBQUVaLFNBQVMsRUFBRWEsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFNB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
|
|
186
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJSZXN0UXVlcnkiLCJSZXN0V3JpdGUiLCJ0cmlnZ2VycyIsImNoZWNrVHJpZ2dlcnMiLCJjbGFzc05hbWUiLCJjb25maWciLCJ0eXBlcyIsInNvbWUiLCJ0cmlnZ2VyVHlwZSIsImdldFRyaWdnZXIiLCJUeXBlcyIsImFwcGxpY2F0aW9uSWQiLCJjaGVja0xpdmVRdWVyeSIsImxpdmVRdWVyeUNvbnRyb2xsZXIiLCJoYXNMaXZlUXVlcnkiLCJmaW5kIiwiYXV0aCIsInJlc3RXaGVyZSIsInJlc3RPcHRpb25zIiwiY2xpZW50U0RLIiwiY29udGV4dCIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsImJlZm9yZUZpbmQiLCJ0aGVuIiwicmVzdWx0IiwicXVlcnkiLCJleGVjdXRlIiwiZ2V0Iiwib2JqZWN0SWQiLCJkZWwiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsImlzVW5hdXRoZW50aWNhdGVkIiwiU0VTU0lPTl9NSVNTSU5HIiwiaW5mbGF0ZWRPYmplY3QiLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNUcmlnZ2VycyIsIm9wIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwibGVuZ3RoIiwiZmlyc3RSZXN1bHQiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJ1c2VyIiwiaWQiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJjYWNoZUFkYXB0ZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJzZXNzaW9uVG9rZW4iLCJPYmplY3QiLCJmcm9tSlNPTiIsIm1heWJlUnVuVHJpZ2dlciIsImJlZm9yZURlbGV0ZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJnZXRVc2VyUm9sZXMiLCJkYXRhYmFzZSIsImxvYWRTY2hlbWEiLCJzIiwib3B0aW9ucyIsImFjbCIsInB1c2giLCJjb25jYXQiLCJ1c2VyUm9sZXMiLCJkZXN0cm95IiwicGVybXMiLCJnZXRDbGFzc0xldmVsUGVybWlzc2lvbnMiLCJvbkFmdGVyRGVsZXRlIiwiYWZ0ZXJEZWxldGUiLCJjYXRjaCIsImVycm9yIiwiaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvciIsImNyZWF0ZSIsInJlc3RPYmplY3QiLCJ3cml0ZSIsInVwZGF0ZSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsUmVzdE9iamVjdCIsImNvZGUiLCJjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MiLCJtZXRob2QiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiaW5kZXhPZiIsImlzUmVhZE9ubHkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGhlbHBlcnMgZm9yIHJ1bm5pbmcgb3BlcmF0aW9ucyBpbiBSRVNUIGZvcm1hdC5cbi8vIFRoZSBnb2FsIGlzIHRoYXQgaGFuZGxlcnMgdGhhdCBleHBsaWNpdGx5IGhhbmRsZSBhbiBleHByZXNzIHJvdXRlXG4vLyBzaG91bGQganVzdCBiZSBzaGFsbG93IHdyYXBwZXJzIGFyb3VuZCB0aGluZ3MgaW4gdGhpcyBmaWxlLCBidXRcbi8vIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGV4cGxpY2l0bHkgZGVwZW5kIG9uIHRoZSByZXF1ZXN0XG4vLyBvYmplY3QuXG4vLyBUaGlzIG1lYW5zIHRoYXQgb25lIG9mIHRoZXNlIGhhbmRsZXJzIGNhbiBzdXBwb3J0IG11bHRpcGxlXG4vLyByb3V0ZXMuIFRoYXQncyB1c2VmdWwgZm9yIHRoZSByb3V0ZXMgdGhhdCBkbyByZWFsbHkgc2ltaWxhclxuLy8gdGhpbmdzLlxuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xudmFyIFJlc3RXcml0ZSA9IHJlcXVpcmUoJy4vUmVzdFdyaXRlJyk7XG52YXIgdHJpZ2dlcnMgPSByZXF1aXJlKCcuL3RyaWdnZXJzJyk7XG5cbmZ1bmN0aW9uIGNoZWNrVHJpZ2dlcnMoY2xhc3NOYW1lLCBjb25maWcsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5zb21lKHRyaWdnZXJUeXBlID0+IHtcbiAgICByZXR1cm4gdHJpZ2dlcnMuZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJzLlR5cGVzW3RyaWdnZXJUeXBlXSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpIHtcbiAgcmV0dXJuIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyICYmIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyLmhhc0xpdmVRdWVyeShjbGFzc05hbWUpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYW4gb2JqZWN0IHdpdGggb3B0aW9uYWwga2V5cyAncmVzdWx0cycgYW5kICdjb3VudCcuXG5mdW5jdGlvbiBmaW5kKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZmluZCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0XG4gICAgKVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN0V2hlcmUgPSByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZTtcbiAgICAgIHJlc3RPcHRpb25zID0gcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zO1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICB0cnVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICB9KTtcbn1cblxuLy8gZ2V0IGlzIGp1c3QgbGlrZSBmaW5kIGJ1dCBvbmx5IHF1ZXJpZXMgYW4gb2JqZWN0SWQuXG5jb25zdCBnZXQgPSAoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCByZXN0T3B0aW9ucywgY2xpZW50U0RLLCBjb250ZXh0KSA9PiB7XG4gIHZhciByZXN0V2hlcmUgPSB7IG9iamVjdElkIH07XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2dldCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgcmVzdFdoZXJlID0gcmVzdWx0LnJlc3RXaGVyZSB8fCByZXN0V2hlcmU7XG4gICAgICByZXN0T3B0aW9ucyA9IHJlc3VsdC5yZXN0T3B0aW9ucyB8fCByZXN0T3B0aW9ucztcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICAgIGNsaWVudFNESyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCk7XG4gICAgfSk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGRvZXNuJ3QgcmVzb2x2ZSB0byBhbnkgdXNlZnVsIHZhbHVlLlxuZnVuY3Rpb24gZGVsKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCBvYmplY3RJZCwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIG9iamVjdElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdiYWQgb2JqZWN0SWQnKTtcbiAgfVxuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgYXV0aC5pc1VuYXV0aGVudGljYXRlZCgpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNFU1NJT05fTUlTU0lORywgJ0luc3VmZmljaWVudCBhdXRoIHRvIGRlbGV0ZSB1c2VyJyk7XG4gIH1cblxuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdkZWxldGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIGxldCBpbmZsYXRlZE9iamVjdDtcbiAgbGV0IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZURlbGV0ZScsICdhZnRlckRlbGV0ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkgfHwgY2xhc3NOYW1lID09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHsgb2JqZWN0SWQgfSlcbiAgICAgICAgICAuZXhlY3V0ZSh7IG9wOiAnZGVsZXRlJyB9KVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0c1swXTtcbiAgICAgICAgICAgICAgZmlyc3RSZXN1bHQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAnX1Nlc3Npb24nICYmICFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGgudXNlciB8fCBmaXJzdFJlc3VsdC51c2VyLm9iamVjdElkICE9PSBhdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGNhY2hlQWRhcHRlciA9IGNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgIGNhY2hlQWRhcHRlci51c2VyLmRlbChmaXJzdFJlc3VsdC5zZXNzaW9uVG9rZW4pO1xuICAgICAgICAgICAgICBpbmZsYXRlZE9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihmaXJzdFJlc3VsdCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kIGZvciBkZWxldGUuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmICghYXV0aC5pc01hc3RlciAmJiAhYXV0aC5pc01haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybiBhdXRoLmdldFVzZXJSb2xlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gY29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKSlcbiAgICAudGhlbihzID0+IHtcbiAgICAgIHNjaGVtYUNvbnRyb2xsZXIgPSBzO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgb3B0aW9ucy5hY2wgPSBbJyonXTtcbiAgICAgICAgaWYgKGF1dGgudXNlcikge1xuICAgICAgICAgIG9wdGlvbnMuYWNsLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgICBvcHRpb25zLmFjbCA9IG9wdGlvbnMuYWNsLmNvbmNhdChhdXRoLnVzZXJSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhYmFzZS5kZXN0cm95KFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNjaGVtYUNvbnRyb2xsZXJcbiAgICAgICk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAvLyBOb3RpZnkgTGl2ZVF1ZXJ5IHNlcnZlciBpZiBwb3NzaWJsZVxuICAgICAgY29uc3QgcGVybXMgPSBzY2hlbWFDb250cm9sbGVyLmdldENsYXNzTGV2ZWxQZXJtaXNzaW9ucyhjbGFzc05hbWUpO1xuICAgICAgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIub25BZnRlckRlbGV0ZShjbGFzc05hbWUsIGluZmxhdGVkT2JqZWN0LCBudWxsLCBwZXJtcyk7XG4gICAgICByZXR1cm4gdHJpZ2dlcnMubWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yLCBjbGFzc05hbWUsIGF1dGgpO1xuICAgIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSB7cmVzcG9uc2UsIHN0YXR1cywgbG9jYXRpb259IG9iamVjdC5cbmZ1bmN0aW9uIGNyZWF0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2NyZWF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHZhciB3cml0ZSA9IG5ldyBSZXN0V3JpdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG51bGwsIHJlc3RPYmplY3QsIG51bGwsIGNsaWVudFNESywgY29udGV4dCk7XG4gIHJldHVybiB3cml0ZS5leGVjdXRlKCk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgY29udGFpbnMgdGhlIGZpZWxkcyBvZiB0aGUgdXBkYXRlIHRoYXQgdGhlXG4vLyBSRVNUIEFQSSBpcyBzdXBwb3NlZCB0byByZXR1cm4uXG4vLyBVc3VhbGx5LCB0aGlzIGlzIGp1c3QgdXBkYXRlZEF0LlxuZnVuY3Rpb24gdXBkYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPYmplY3QsIGNsaWVudFNESywgY29udGV4dCkge1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCd1cGRhdGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhc1RyaWdnZXJzID0gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgWydiZWZvcmVTYXZlJywgJ2FmdGVyU2F2ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBmaW5kLCBhcyBpdCBydW5zIHRoZSBiZWZvcmUgZmluZHNcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKS5leGVjdXRlKHtcbiAgICAgICAgICBvcDogJ3VwZGF0ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIHZhciBvcmlnaW5hbFJlc3RPYmplY3Q7XG4gICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBvcmlnaW5hbFJlc3RPYmplY3QgPSByZXN1bHRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPYmplY3QsXG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAndXBkYXRlJ1xuICAgICAgKS5leGVjdXRlKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKSB7XG4gIC8vIElmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgYSB1c2VyIHdpdGhvdXQgLyB3aXRoIGJhZCBzZXNzaW9uIHRva2VuXG4gIGlmIChcbiAgICBjbGFzc05hbWUgPT09ICdfVXNlcicgJiZcbiAgICBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EICYmXG4gICAgIWF1dGguaXNNYXN0ZXIgJiZcbiAgICAhYXV0aC5pc01haW50ZW5hbmNlXG4gICkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TRVNTSU9OX01JU1NJTkcsICdJbnN1ZmZpY2llbnQgYXV0aC4nKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxuY29uc3QgY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzID0gW1xuICAnX0pvYlN0YXR1cycsXG4gICdfUHVzaFN0YXR1cycsXG4gICdfSG9va3MnLFxuICAnX0dsb2JhbENvbmZpZycsXG4gICdfSm9iU2NoZWR1bGUnLFxuICAnX0lkZW1wb3RlbmN5Jyxcbl07XG4vLyBEaXNhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIF9Sb2xlIGNvbGxlY3Rpb24gZXhjZXB0IGJ5IG1hc3RlciBrZXlcbmZ1bmN0aW9uIGVuZm9yY2VSb2xlU2VjdXJpdHkobWV0aG9kLCBjbGFzc05hbWUsIGF1dGgpIHtcbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19JbnN0YWxsYXRpb24nICYmICFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICBpZiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdmaW5kJykge1xuICAgICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSBpbnN0YWxsYXRpb24gY29sbGVjdGlvbi5gO1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvL2FsbCB2b2xhdGlsZUNsYXNzZXMgYXJlIG1hc3RlcktleSBvbmx5XG4gIGlmIChcbiAgICBjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MuaW5kZXhPZihjbGFzc05hbWUpID49IDAgJiZcbiAgICAhYXV0aC5pc01hc3RlciAmJlxuICAgICFhdXRoLmlzTWFpbnRlbmFuY2VcbiAgKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSAke2NsYXNzTmFtZX0gY29sbGVjdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cblxuICAvLyByZWFkT25seSBtYXN0ZXJLZXkgaXMgbm90IGFsbG93ZWRcbiAgaWYgKGF1dGguaXNSZWFkT25seSAmJiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgcmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24uYDtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGUsXG4gIGRlbCxcbiAgZmluZCxcbiAgZ2V0LFxuICB1cGRhdGUsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsSUFBSUUsU0FBUyxHQUFHRCxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDLElBQUlFLFNBQVMsR0FBR0YsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0QyxJQUFJRyxRQUFRLEdBQUdILE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFFcEMsU0FBU0ksYUFBYSxDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0VBQy9DLE9BQU9BLEtBQUssQ0FBQ0MsSUFBSSxDQUFDQyxXQUFXLElBQUk7SUFDL0IsT0FBT04sUUFBUSxDQUFDTyxVQUFVLENBQUNMLFNBQVMsRUFBRUYsUUFBUSxDQUFDUSxLQUFLLENBQUNGLFdBQVcsQ0FBQyxFQUFFSCxNQUFNLENBQUNNLGFBQWEsQ0FBQztFQUMxRixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNDLGNBQWMs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
|