@nlabs/reaktor 0.5.1 → 0.5.3
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/actions/conversations.d.ts +1 -1
- package/lib/actions/conversations.js +4 -1
- package/lib/actions/dynamodb.js +4 -1
- package/lib/actions/email.js +4 -1
- package/lib/actions/files.d.ts +1 -1
- package/lib/actions/files.js +7 -4
- package/lib/actions/groups.js +4 -1
- package/lib/actions/images.js +4 -1
- package/lib/actions/index.js +4 -1
- package/lib/actions/ios.js +4 -1
- package/lib/actions/locations.js +4 -1
- package/lib/actions/messages.js +4 -1
- package/lib/actions/notifications.js +4 -1
- package/lib/actions/payments.js +15 -13
- package/lib/actions/posts.js +4 -1
- package/lib/actions/reactions.js +4 -1
- package/lib/actions/s3.js +4 -1
- package/lib/actions/search.js +4 -1
- package/lib/actions/sms.js +4 -1
- package/lib/actions/statistics.js +4 -1
- package/lib/actions/subscription.js +4 -1
- package/lib/actions/tags.js +4 -1
- package/lib/actions/users.js +4 -1
- package/lib/actions/websockets.js +4 -1
- package/lib/config.js +4 -1
- package/lib/index.js +4 -1
- package/lib/lambdas/actions/websockets.js +4 -1
- package/lib/lambdas/authorizer.js +4 -1
- package/lib/lambdas/connection.js +4 -1
- package/lib/lambdas/utils/message.js +4 -1
- package/lib/lambdas/utils/websocket.js +4 -1
- package/lib/templates/email/layout.js +4 -1
- package/lib/templates/email/passwordForgot.js +4 -1
- package/lib/templates/email/passwordRecovery.js +4 -1
- package/lib/templates/email/verifyEmail.js +4 -1
- package/lib/templates/email/welcome.js +4 -1
- package/lib/templates/sms/passwordForgot.js +4 -1
- package/lib/templates/sms/passwordRecovery.js +4 -1
- package/lib/templates/sms/verifyEmail.js +4 -1
- package/lib/templates/sms/verifyPhone.js +4 -1
- package/lib/templates/sms/welcome.js +4 -1
- package/lib/types/apps.js +4 -1
- package/lib/types/arangodb.js +4 -1
- package/lib/types/auth.js +4 -1
- package/lib/types/connections.js +4 -1
- package/lib/types/conversations.js +4 -1
- package/lib/types/email.js +4 -1
- package/lib/types/files.js +4 -1
- package/lib/types/google.js +4 -1
- package/lib/types/groups.js +4 -1
- package/lib/types/images.js +4 -1
- package/lib/types/index.js +4 -1
- package/lib/types/locations.js +4 -1
- package/lib/types/messages.js +4 -1
- package/lib/types/notifications.js +4 -1
- package/lib/types/payments.js +4 -1
- package/lib/types/posts.js +4 -1
- package/lib/types/statistics.js +4 -1
- package/lib/types/tags.js +4 -1
- package/lib/types/users.js +4 -1
- package/lib/types/websocket.js +4 -1
- package/lib/utils/analytics.d.ts +4 -0
- package/lib/utils/analytics.js +20 -19
- package/lib/utils/arangodb.js +4 -1
- package/lib/utils/auth.js +4 -1
- package/lib/utils/graphql.js +4 -1
- package/lib/utils/index.js +4 -1
- package/lib/utils/objects.js +4 -1
- package/lib/utils/session.js +4 -1
- package/package.json +15 -14
package/lib/actions/payments.js
CHANGED
|
@@ -22,6 +22,9 @@ var __spreadValues = (a, b) => {
|
|
|
22
22
|
};
|
|
23
23
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
24
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
25
|
+
var __require = typeof require !== "undefined" ? require : (x) => {
|
|
26
|
+
throw new Error('Dynamic require of "' + x + '" is not supported');
|
|
27
|
+
};
|
|
25
28
|
var __export = (target, all) => {
|
|
26
29
|
__markAsModule(target);
|
|
27
30
|
for (var name in all)
|
|
@@ -51,7 +54,6 @@ __export(exports, {
|
|
|
51
54
|
});
|
|
52
55
|
var import_utils = __toModule(require("@nlabs/utils"));
|
|
53
56
|
var import_arangojs = __toModule(require("arangojs"));
|
|
54
|
-
var import_graphql_errors = __toModule(require("graphql-errors"));
|
|
55
57
|
var import_isEmpty = __toModule(require("lodash/isEmpty"));
|
|
56
58
|
var import_stripe = __toModule(require("stripe"));
|
|
57
59
|
var import_config = __toModule(require("../config"));
|
|
@@ -92,15 +94,15 @@ const addBankAccount = (context, bankAccount) => {
|
|
|
92
94
|
} = bankAccount;
|
|
93
95
|
const formatAccount = (0, import_utils.parseString)(accountNumber, 32);
|
|
94
96
|
if (formatAccount === "") {
|
|
95
|
-
throw new
|
|
97
|
+
throw new import_analytics.UserError("required_account_number");
|
|
96
98
|
}
|
|
97
99
|
const formatFullName = (0, import_utils.parseVarChar)(fullName, 128);
|
|
98
100
|
if (formatFullName === "") {
|
|
99
|
-
throw new
|
|
101
|
+
throw new import_analytics.UserError("required_full_name");
|
|
100
102
|
}
|
|
101
103
|
const formatRouting = (0, import_utils.parseString)(routing, 32);
|
|
102
104
|
if (formatRouting === "") {
|
|
103
|
-
throw new
|
|
105
|
+
throw new import_analytics.UserError("required_routing_number");
|
|
104
106
|
}
|
|
105
107
|
return (0, import_users.getUser)(context, sessionId).then((user) => {
|
|
106
108
|
const { stripeAccountId } = user;
|
|
@@ -162,15 +164,15 @@ const addCreditCard = (context, card) => {
|
|
|
162
164
|
} = card;
|
|
163
165
|
const formatNumber = (0, import_utils.parseNum)(accountNumber, 16);
|
|
164
166
|
if (!formatNumber) {
|
|
165
|
-
throw new
|
|
167
|
+
throw new import_analytics.UserError("required_credit_card_number");
|
|
166
168
|
}
|
|
167
169
|
const formatExpMonth = (0, import_utils.parseNum)(expMonth, 2);
|
|
168
170
|
if (!formatExpMonth) {
|
|
169
|
-
throw new
|
|
171
|
+
throw new import_analytics.UserError("required_credit_card_exp_month");
|
|
170
172
|
}
|
|
171
173
|
const formatExpYear = (0, import_utils.parseNum)(expYear, 2);
|
|
172
174
|
if (!formatExpYear) {
|
|
173
|
-
throw new
|
|
175
|
+
throw new import_analytics.UserError("required_credit_card_exp_year");
|
|
174
176
|
}
|
|
175
177
|
const formatCvc = (0, import_utils.parseNum)(cvc, 3);
|
|
176
178
|
const paymentCard = {};
|
|
@@ -268,7 +270,7 @@ const updateCreditCard = (context, card) => {
|
|
|
268
270
|
} = card;
|
|
269
271
|
const formatId = (0, import_utils.parseId)(id);
|
|
270
272
|
if (formatId) {
|
|
271
|
-
throw new
|
|
273
|
+
throw new import_analytics.UserError("required_credit_card_id");
|
|
272
274
|
}
|
|
273
275
|
const paymentCard = {};
|
|
274
276
|
const formatExpMonth = (0, import_utils.parseNum)(expMonth, 2);
|
|
@@ -323,7 +325,7 @@ const updateCreditCard = (context, card) => {
|
|
|
323
325
|
const updatedCard = results.card;
|
|
324
326
|
const { user } = results;
|
|
325
327
|
if ((0, import_isEmpty.default)(updatedCard)) {
|
|
326
|
-
throw new
|
|
328
|
+
throw new import_analytics.UserError("not_found");
|
|
327
329
|
}
|
|
328
330
|
const { stripeCustomerId } = user;
|
|
329
331
|
const { stripeId } = card;
|
|
@@ -340,7 +342,7 @@ const updateCreditCard = (context, card) => {
|
|
|
340
342
|
};
|
|
341
343
|
return stripeClient.customers.updateSource(stripeCustomerId, stripeId, update2).then(() => card).catch((error) => {
|
|
342
344
|
console.log("payments::updateCard::error", error);
|
|
343
|
-
throw new
|
|
345
|
+
throw new import_analytics.UserError("payment_error");
|
|
344
346
|
});
|
|
345
347
|
});
|
|
346
348
|
};
|
|
@@ -391,7 +393,7 @@ const deleteCreditCard = (context, cardId) => {
|
|
|
391
393
|
const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
|
|
392
394
|
return stripeClient.customers.deleteSource(user.stripeCustomerId, card.stripeId).then(() => true).catch((error) => {
|
|
393
395
|
console.log("payments::deleteCard::error", error);
|
|
394
|
-
throw new
|
|
396
|
+
throw new import_analytics.UserError("payment_error");
|
|
395
397
|
});
|
|
396
398
|
});
|
|
397
399
|
}
|
|
@@ -473,7 +475,7 @@ const createPaymentHold = (context, payment) => {
|
|
|
473
475
|
return database.query(aqlQry).then((cursor) => cursor.next()).then((newPayment) => newPayment);
|
|
474
476
|
}).catch((error) => {
|
|
475
477
|
console.log("payments::createHold::error", error);
|
|
476
|
-
throw new
|
|
478
|
+
throw new import_analytics.UserError("payment_error");
|
|
477
479
|
});
|
|
478
480
|
};
|
|
479
481
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -488,4 +490,4 @@ const createPaymentHold = (context, payment) => {
|
|
|
488
490
|
getCreditCards,
|
|
489
491
|
updateCreditCard
|
|
490
492
|
});
|
|
491
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCB7VXNlckVycm9yfSBmcm9tICdncmFwaHFsLWVycm9ycyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcGlDb250ZXh0LCBQYXltZW50QmFua0FjY291bnQsIFBheW1lbnRDYXJkVHlwZSwgUGF5bWVudENoYXJnZSwgUGF5bWVudFRyYW5zZmVyLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3MnO1xuaW1wb3J0IHtnZXRVc2VyfSBmcm9tICcuL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3BheW1lbnRzJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGFkZEN1c3RvbWVyQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX19ID0gY29udGV4dDtcblxuICAvLyBTdHJpcGVcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoY3VzdG9tZXIpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IFVzZXIgPSB7XG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IGN1c3RvbWVyLmlkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKCh1cGRhdGVkVXNlcjogVXNlciA9IHt9KSA9PiAhaXNFbXB0eSh1cGRhdGVkVXNlcikpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRCYW5rQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBiYW5rQWNjb3VudDogUGF5bWVudEJhbmtBY2NvdW50KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFBheW1lbnRBY2NvdW50QmFuayc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIC8vIFBhcmFtc1xuICBjb25zdCB7XG4gICAgYWNjb3VudE51bWJlcixcbiAgICBmdWxsTmFtZSxcbiAgICByb3V0aW5nXG4gIH0gPSBiYW5rQWNjb3VudDtcblxuICBjb25zdCBmb3JtYXRBY2NvdW50OiBzdHJpbmcgPSBwYXJzZVN0cmluZyhhY2NvdW50TnVtYmVyLCAzMik7XG5cbiAgaWYoZm9ybWF0QWNjb3VudCA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9hY2NvdW50X251bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMTI4KTtcblxuICBpZihmb3JtYXRGdWxsTmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9mdWxsX25hbWUnKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFJvdXRpbmc6IHN0cmluZyA9IHBhcnNlU3RyaW5nKHJvdXRpbmcsIDMyKTtcblxuICBpZihmb3JtYXRSb3V0aW5nID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX3JvdXRpbmdfbnVtYmVyJyk7XG4gIH1cblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCBzZXNzaW9uSWQpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9OiBVc2VyID0gdXNlcjtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgY29uc3Qgc291cmNlOiBhbnkgPSB7XG4gICAgICAgIGFjY291bnRfaG9sZGVyX25hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICBhY2NvdW50X2hvbGRlcl90eXBlOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICBjb3VudHJ5OiAnVVMnLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIG9iamVjdDogJ2JhbmtfYWNjb3VudCcsXG4gICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuY3JlYXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwge3NvdXJjZX0pXG4gICAgICAgIC50aGVuKChhY2NvdW50OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB7aWQ6IGJhbmtJZCwgbGFzdDQ6IGJhbmtBY2NvdW50LCByb3V0aW5nX251bWJlcjogYmFua1JvdXRpbmd9ID0gYWNjb3VudDtcbiAgICAgICAgICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAgICAgICAgIGJhbmtBY2NvdW50LFxuICAgICAgICAgICAgYmFua0Z1bGxOYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICAgIGJhbmtJZCxcbiAgICAgICAgICAgIGJhbmtSb3V0aW5nLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXIgPSB7fSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZENyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZENyZWRpdENhcmQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCBzZXNzaW9uSWQpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgIC8vIFVzZXJcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9OiBVc2VyID0gdXNlcjtcblxuICAgICAgLy8gQ2FyZFxuICAgICAgY29uc3Qge1xuICAgICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgICBjaXR5LFxuICAgICAgICBjb3VudHJ5LFxuICAgICAgICBjdmMsXG4gICAgICAgIGV4cE1vbnRoLFxuICAgICAgICBleHBZZWFyLFxuICAgICAgICBmdWxsTmFtZSxcbiAgICAgICAgc3RyZWV0MSxcbiAgICAgICAgc3RyZWV0MixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHppcFxuICAgICAgfTogUGF5bWVudENhcmRUeXBlID0gY2FyZDtcblxuICAgICAgY29uc3QgZm9ybWF0TnVtYmVyOiBudW1iZXIgPSBwYXJzZU51bShhY2NvdW50TnVtYmVyLCAxNik7XG5cbiAgICAgIGlmKCFmb3JtYXROdW1iZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEV4cE1vbnRoOiBudW1iZXIgPSBwYXJzZU51bShleHBNb250aCwgMik7XG5cbiAgICAgIGlmKCFmb3JtYXRFeHBNb250aCkge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9leHBfbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwWWVhcjogbnVtYmVyID0gcGFyc2VOdW0oZXhwWWVhciwgMik7XG5cbiAgICAgIGlmKCFmb3JtYXRFeHBZZWFyKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF95ZWFyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEN2YzogbnVtYmVyID0gcGFyc2VOdW0oY3ZjLCAzKTtcblxuICAgICAgLy8gQWRkcmVzc1xuICAgICAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICAgICAgY29uc3QgZm9ybWF0Q2l0eTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcblxuICAgICAgaWYoZm9ybWF0Q2l0eSkge1xuICAgICAgICBwYXltZW50Q2FyZC5jaXR5ID0gZm9ybWF0Q2l0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q291bnRyeTogc3RyaW5nID0gcGFyc2VDaGFyKGNvdW50cnksIDIpO1xuXG4gICAgICBpZihmb3JtYXRDb3VudHJ5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdEZ1bGxOYW1lKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmZ1bGxOYW1lID0gZm9ybWF0RnVsbE5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0cmVldDE6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0cmVldDEpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RyZWV0MSA9IGZvcm1hdFN0cmVldDE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0cmVldDI6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0cmVldDIpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RyZWV0MiA9IGZvcm1hdFN0cmVldDI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0YXRlOiBzdHJpbmcgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuXG4gICAgICBpZihmb3JtYXRTdGF0ZSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRaaXA6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcih6aXAsIDEwKTtcblxuICAgICAgaWYoZm9ybWF0WmlwKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnppcCA9IGZvcm1hdFppcDtcbiAgICAgIH1cblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgY29uc3Qgc291cmNlOiBhbnkgPSB7XG4gICAgICAgIGFkZHJlc3NfY2l0eTogZm9ybWF0Q2l0eSxcbiAgICAgICAgYWRkcmVzc19jb3VudHJ5OiBmb3JtYXRDb3VudHJ5LFxuICAgICAgICBhZGRyZXNzX2xpbmUxOiBmb3JtYXRTdHJlZXQxLFxuICAgICAgICBhZGRyZXNzX2xpbmUyOiBmb3JtYXRTdHJlZXQyLFxuICAgICAgICBhZGRyZXNzX3N0YXRlOiBmb3JtYXRTdGF0ZSxcbiAgICAgICAgYWRkcmVzc196aXA6IGZvcm1hdFppcCxcbiAgICAgICAgY3ZjOiBmb3JtYXRDdmMsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgsXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLFxuICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgbnVtYmVyOiBmb3JtYXROdW1iZXIsXG4gICAgICAgIG9iamVjdDogJ2NhcmQnXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuY3JlYXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwge3NvdXJjZX0pXG4gICAgICAgIC50aGVuKChuZXdTb3VyY2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHticmFuZCwgY3ZjX2NoZWNrOiBjdmNDaGVjaywgbGFzdDR9ID0gbmV3U291cmNlO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgICAgICAgLi4ucGF5bWVudENhcmQsXG4gICAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGB1c2VyLXBheW1lbnQtJHtzZXNzaW9uSWR9YCksXG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBsYXN0NCxcbiAgICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgICBicmFuZCxcbiAgICAgICAgICAgIGN2Y0NoZWNrLFxuICAgICAgICAgICAgZXhwTW9udGgsXG4gICAgICAgICAgICBleHBZZWFyLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbnNlcnRBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gY3JlZGl0Q2FyZHMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoaW5zZXJ0QXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge30pID0+IHtcbiAgICAgICAgICAgICAgaWYoIWlzRW1wdHkobmV3Q2FyZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGQgbGlua2VkIGVkZ2VcbiAgICAgICAgICAgICAgICBjb25zdCB7X2lkOiBjYXJkSWQsIF9rZXk6IGNhcmRLZXl9ID0gY2FyZDtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcGF5bWVudC0ke2NhcmRLZXl9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgX2Zyb206IGB1c2Vycy8ke3Nlc3Npb25JZH1gLFxuICAgICAgICAgICAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICAgICAgICAgICAgX3RvOiBjYXJkSWRcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pLnRoZW4oKCkgPT4gY2FyZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gbmV3Q2FyZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBleHBNb250aCxcbiAgICBleHBZZWFyLFxuICAgIGZ1bGxOYW1lLFxuICAgIGlkLFxuICAgIHN0cmVldDEsXG4gICAgc3RhdGUsXG4gICAgemlwXG4gIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuXG4gIGlmKGZvcm1hdElkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfaWQnKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fTtcbiAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhcjogbnVtYmVyID0gcGFyc2VOdW0oZXhwWWVhciwgMik7XG4gIGNvbnN0IGZvcm1hdENpdHk6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG4gIGNvbnN0IGZvcm1hdENvdW50cnk6IHN0cmluZyA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRTdHJlZXQxOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhzdHJlZXQxLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0YXRlOiBzdHJpbmcgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXA6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcih6aXAsIDEwKTtcblxuICBpZihmb3JtYXRFeHBNb250aCkge1xuICAgIHBheW1lbnRDYXJkLmV4cE1vbnRoID0gZm9ybWF0RXhwTW9udGg7XG4gIH1cblxuICBpZihmb3JtYXRFeHBZZWFyKSB7XG4gICAgcGF5bWVudENhcmQuZXhwWWVhciA9IGZvcm1hdEV4cFllYXI7XG4gIH1cblxuICBpZihmb3JtYXRDaXR5KSB7XG4gICAgcGF5bWVudENhcmQuY2l0eSA9IGZvcm1hdENpdHk7XG4gIH1cblxuICBpZihmb3JtYXRDb3VudHJ5KSB7XG4gICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gIH1cblxuICBpZihmb3JtYXRGdWxsTmFtZSkge1xuICAgIHBheW1lbnRDYXJkLmZ1bGxOYW1lID0gZm9ybWF0RnVsbE5hbWU7XG4gIH1cblxuICBpZihmb3JtYXRTdHJlZXQxKSB7XG4gICAgcGF5bWVudENhcmQuc3RyZWV0MSA9IGZvcm1hdFN0cmVldDE7XG4gIH1cblxuICBpZihmb3JtYXRTdGF0ZSkge1xuICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gIH1cblxuICBpZihmb3JtYXRaaXApIHtcbiAgICBwYXltZW50Q2FyZC56aXAgPSBmb3JtYXRaaXA7XG4gIH1cblxuICBjb25zdCB1cGRhdGU6IGFueSA9IHBheW1lbnRDYXJkO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgTEVUIHVwZGF0ZWRDYXJkID0gRklSU1QoXG4gICAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFVQREFURSBjIFdJVEggJHt1cGRhdGV9IElOIGNyZWRpdENhcmRzXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIE5FV1xuICAgICAgKVxuICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiB1cGRhdGVkQ2FyZH1gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSB7Y2FyZDoge30sIHVzZXI6IHt9fSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHJlc3VsdHMuY2FyZDtcbiAgICAgIGNvbnN0IHt1c2VyfSA9IHJlc3VsdHM7XG5cbiAgICAgIGlmKGlzRW1wdHkodXBkYXRlZENhcmQpKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgsXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLFxuICAgICAgICBuYW1lOiBmb3JtYXRGdWxsTmFtZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLnVwZGF0ZVNvdXJjZShzdHJpcGVDdXN0b21lcklkLCBzdHJpcGVJZCwgdXBkYXRlKVxuICAgICAgICAudGhlbigoKSA9PiBjYXJkKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6dXBkYXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcmVkaXRDYXJkcyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDcmVkaXRDYXJkcyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFBheW1lbnRDYXJkVHlwZVtdID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q2FyZElkOiBzdHJpbmcgPSBwYXJzZUlkKGNhcmRJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIGNhcmQgPSBGSVJTVChcbiAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0Q2FyZElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBjIElOIGNyZWRpdENhcmRzXG4gICAgICBSRVRVUk4gT0xEXG4gICAgKVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogY2FyZH1gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZihpc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7Y2FyZCwgdXNlcn0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7X2tleTogY2FyZEtleX0gPSBjYXJkO1xuXG4gICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLm91dEVkZ2VzKGNhcmRLZXkpXG4gICAgICAgIC50aGVuKChlZGdlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaGFzUGF5bWVudGA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHJlbW92ZUFxbFFyeSk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXBlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlU291cmNlKHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCwgY2FyZC5zdHJpcGVJZClcbiAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmRlbGV0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVCYW5rQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBiYW5rSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBDbGVhbiBkYlxuICBjb25zdCB1cGRhdGU6IFVzZXIgPSB7XG4gICAgYmFua0FjY291bnQ6ICcnLFxuICAgIGJhbmtGdWxsTmFtZTogJycsXG4gICAgYmFua0lkOiAnJyxcbiAgICBiYW5rUm91dGluZzogJycsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcjogVXNlciA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmRlbGV0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIGJhbmtJZClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkgPSB7ZGVsZXRlZDogZmFsc2V9KSA9PiByZXNwb25zZS5kZWxldGVkKVxuICAgICAgICAuY2F0Y2goKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGF5bWVudFRyYW5zZmVyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRyYW5zZmVyOiBQYXltZW50VHJhbnNmZXIpOiBQcm9taXNlPFBheW1lbnRUcmFuc2Zlcj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY3VycmVuY3l9ID0gdHJhbnNmZXI7XG4gIGNvbnN0IGZvcm1hdEFtb3VudDogbnVtYmVyID0gcGFyc2VOdW0oYW1vdW50KTtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3k6IHN0cmluZyA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfSA9IHVzZXI7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50cmFuc2ZlcnNcbiAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBzdHJpcGVBY2NvdW50SWRcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHN0cmlwZVRyYW5zZmVyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coc3RyaXBlVHJhbnNmZXIpO1xuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRUcmFuc2ZlciA9IHtcbiAgICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRyYW5zZmVycyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdUcmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKSA9PiBuZXdUcmFuc2Zlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRIb2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBheW1lbnQ6IFBheW1lbnRDaGFyZ2UpOiBQcm9taXNlPFBheW1lbnRDaGFyZ2U+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGNhcHR1cmUsIGNhcmRJZCwgY3VycmVuY3ksIGRlc2NyaXB0aW9ufSA9IHBheW1lbnQ7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gcGFyc2VDaGFyKGN1cnJlbmN5LCAzLCAnVVNEJykudG9VcHBlckNhc2UoKTtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY2hhcmdlc1xuICAgIC5jcmVhdGUoe1xuICAgICAgYW1vdW50LFxuICAgICAgY2FwdHVyZSxcbiAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBjYXJkSWRcbiAgICB9KVxuICAgIC50aGVuKChzdHJpcGVDaGFyZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudENoYXJnZSA9IHtcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjYXB0dXJlLFxuICAgICAgICBjYXJkSWQsXG4gICAgICAgIGNoYXJnZUZhaWxDb2RlOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9jb2RlLFxuICAgICAgICBjaGFyZ2VGYWlsTXNnOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9tZXNzYWdlLFxuICAgICAgICBjaGFyZ2VJZDogc3RyaXBlQ2hhcmdlLmlkLFxuICAgICAgICBjaGFyZ2VTdGF0dXM6IHN0cmlwZUNoYXJnZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBheW1lbnRzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG5ld1BheW1lbnQ6IFBheW1lbnRDaGFyZ2UpID0+IG5ld1BheW1lbnQpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6Y3JlYXRlSG9sZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBa0Y7QUFDbEYsc0JBQWtCO0FBSWxCLDRCQUF3QjtBQUN4QixxQkFBb0I7QUFDcEIsb0JBQW1CO0FBRW5CLG9CQUFxQjtBQUVyQix1QkFBdUI7QUFDdkIsbUJBQXNCO0FBRXRCLE1BQU0sZ0JBQXdCO0FBQzlCLE1BQU0sYUFBa0I7QUFFakIsTUFBTSxxQkFBcUIsQ0FBQyxZQUEwQztBQUMzRSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFdBQVcsZUFBYTtBQUczRCxRQUFNLGVBQWUsSUFBSSxzQkFBTyxxQkFBTyxJQUFJLGlCQUFpQixFQUFDLFlBQVksWUFBWTtBQUVyRixTQUFPLGFBQWEsVUFDakIs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
|
|
493
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0FwaUNvbnRleHQsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXIsIFVzZXJ9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdwYXltZW50cyc7XG5jb25zdCBhcGlWZXJzaW9uOiBhbnkgPSAnMjAyMC0wMy0wMic7XG5cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21lckFjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRDdXN0b21lckFjY291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9fSA9IGNvbnRleHQ7XG5cbiAgLy8gU3RyaXBlXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAuY3JlYXRlKHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkLFxuICAgICAgICB1c2VybmFtZVxuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdXBkYXRlOiBVc2VyID0ge1xuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBzdHJpcGVDdXN0b21lcklkOiBjdXN0b21lci5pZFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXIgPSB7fSkgPT4gIWlzRW1wdHkodXBkYXRlZFVzZXIpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQYXltZW50QWNjb3VudEJhbmsnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudDogc3RyaW5nID0gcGFyc2VTdHJpbmcoYWNjb3VudE51bWJlciwgMzIpO1xuXG4gIGlmKGZvcm1hdEFjY291bnQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYWNjb3VudF9udW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfTogVXNlciA9IHVzZXI7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHNvdXJjZTogYW55ID0ge1xuICAgICAgICBhY2NvdW50X2hvbGRlcl9uYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgYWNjb3VudF9ob2xkZXJfdHlwZTogJ2luZGl2aWR1YWwnLFxuICAgICAgICBhY2NvdW50X251bWJlcjogZm9ybWF0QWNjb3VudCxcbiAgICAgICAgY291bnRyeTogJ1VTJyxcbiAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICBvYmplY3Q6ICdiYW5rX2FjY291bnQnLFxuICAgICAgICByb3V0aW5nX251bWJlcjogZm9ybWF0Um91dGluZ1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmNyZWF0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIHtzb3VyY2V9KVxuICAgICAgICAudGhlbigoYWNjb3VudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2lkOiBiYW5rSWQsIGxhc3Q0OiBiYW5rQWNjb3VudCwgcm91dGluZ19udW1iZXI6IGJhbmtSb3V0aW5nfSA9IGFjY291bnQ7XG4gICAgICAgICAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyID0ge30pID0+IHVwZGF0ZWRVc2VyKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5tZXNzYWdlO1xuXG4gICAgICAgICAgaWYobXNnID09PSAnQSBiYW5rIGFjY291bnQgd2l0aCB0aGF0IHJvdXRpbmcgbnVtYmVyIGFuZCBhY2NvdW50IG51bWJlciAnICtcbiAgICAgICAgICAgICdhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBjdXN0b21lci4nKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogJ2JhbmtfYWNjb3VudF9leGlzdHMnXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmQ6IFBheW1lbnRDYXJkVHlwZSk6IFByb21pc2U8VXNlcj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRDcmVkaXRDYXJkJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICAvLyBVc2VyXG4gICAgICBjb25zdCB7c3RyaXBlQWNjb3VudElkfTogVXNlciA9IHVzZXI7XG5cbiAgICAgIC8vIENhcmRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgICAgY2l0eSxcbiAgICAgICAgY291bnRyeSxcbiAgICAgICAgY3ZjLFxuICAgICAgICBleHBNb250aCxcbiAgICAgICAgZXhwWWVhcixcbiAgICAgICAgZnVsbE5hbWUsXG4gICAgICAgIHN0cmVldDEsXG4gICAgICAgIHN0cmVldDIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICB6aXBcbiAgICAgIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgICAgIGNvbnN0IGZvcm1hdE51bWJlcjogbnVtYmVyID0gcGFyc2VOdW0oYWNjb3VudE51bWJlciwgMTYpO1xuXG4gICAgICBpZighZm9ybWF0TnVtYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX251bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBNb250aDogbnVtYmVyID0gcGFyc2VOdW0oZXhwTW9udGgsIDIpO1xuXG4gICAgICBpZighZm9ybWF0RXhwTW9udGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEV4cFllYXI6IG51bWJlciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuXG4gICAgICBpZighZm9ybWF0RXhwWWVhcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9leHBfeWVhcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDdmM6IG51bWJlciA9IHBhcnNlTnVtKGN2YywgMyk7XG5cbiAgICAgIC8vIEFkZHJlc3NcbiAgICAgIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fTtcbiAgICAgIGNvbnN0IGZvcm1hdENpdHk6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdENpdHkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY2l0eSA9IGZvcm1hdENpdHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdENvdW50cnk6IHN0cmluZyA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcblxuICAgICAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgICAgICBwYXltZW50Q2FyZC5jb3VudHJ5ID0gZm9ybWF0Q291bnRyeTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRGdWxsTmFtZSkge1xuICAgICAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdHJlZXQxOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRTdHJlZXQxKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdHJlZXQyOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoc3RyZWV0MiwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRTdHJlZXQyKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0cmVldDIgPSBmb3JtYXRTdHJlZXQyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRTdGF0ZTogc3RyaW5nID0gcGFyc2VDaGFyKHN0YXRlLCAyKTtcblxuICAgICAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RhdGUgPSBmb3JtYXRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0WmlwOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgICAgIGlmKGZvcm1hdFppcCkge1xuICAgICAgICBwYXltZW50Q2FyZC56aXAgPSBmb3JtYXRaaXA7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHNvdXJjZTogYW55ID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19saW5lMjogZm9ybWF0U3RyZWV0MixcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGN2YzogZm9ybWF0Q3ZjLFxuICAgICAgICBleHBfbW9udGg6IGZvcm1hdEV4cE1vbnRoLFxuICAgICAgICBleHBfeWVhcjogZm9ybWF0RXhwWWVhcixcbiAgICAgICAgbmFtZTogZnVsbE5hbWUsXG4gICAgICAgIG51bWJlcjogZm9ybWF0TnVtYmVyLFxuICAgICAgICBvYmplY3Q6ICdjYXJkJ1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLmNyZWF0ZVNvdXJjZShzdHJpcGVBY2NvdW50SWQsIHtzb3VyY2V9KVxuICAgICAgICAudGhlbigobmV3U291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB7YnJhbmQsIGN2Y19jaGVjazogY3ZjQ2hlY2ssIGxhc3Q0fSA9IG5ld1NvdXJjZTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgICAgICAgIC4uLnBheW1lbnRDYXJkLFxuICAgICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgdXNlci1wYXltZW50LSR7c2Vzc2lvbklkfWApLFxuICAgICAgICAgICAgYWNjb3VudE51bWJlcjogbGFzdDQsXG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYnJhbmQsXG4gICAgICAgICAgICBjdmNDaGVjayxcbiAgICAgICAgICAgIGV4cE1vbnRoLFxuICAgICAgICAgICAgZXhwWWVhcixcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5zZXJ0QXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNyZWRpdENhcmRzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGluc2VydEFxbFFyeSlcbiAgICAgICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKG5ld0NhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgIGlmKCFpc0VtcHR5KG5ld0NhcmQpKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGxpbmtlZCBlZGdlXG4gICAgICAgICAgICAgICAgY29uc3Qge19pZDogY2FyZElkLCBfa2V5OiBjYXJkS2V5fSA9IGNhcmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHtjYXJkS2V5fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIF9mcm9tOiBgdXNlcnMvJHtzZXNzaW9uSWR9YCxcbiAgICAgICAgICAgICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgICAgICAgICAgIF90bzogY2FyZElkXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGNhcmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NhcmQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmQ6IFBheW1lbnRDYXJkVHlwZSk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgZXhwTW9udGgsXG4gICAgZXhwWWVhcixcbiAgICBmdWxsTmFtZSxcbiAgICBpZCxcbiAgICBzdHJlZXQxLFxuICAgIHN0YXRlLFxuICAgIHppcFxuICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGlkKTtcblxuICBpZihmb3JtYXRJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2lkJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gIGNvbnN0IGZvcm1hdEV4cE1vbnRoOiBudW1iZXIgPSBwYXJzZU51bShleHBNb250aCwgMik7XG4gIGNvbnN0IGZvcm1hdEV4cFllYXI6IG51bWJlciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VTdHJpbmcoc3RyZWV0MSwgMzIpO1xuICBjb25zdCBmb3JtYXRTdGF0ZTogc3RyaW5nID0gcGFyc2VDaGFyKHN0YXRlLCAyKTtcbiAgY29uc3QgZm9ybWF0WmlwOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgaWYoZm9ybWF0RXhwTW9udGgpIHtcbiAgICBwYXltZW50Q2FyZC5leHBNb250aCA9IGZvcm1hdEV4cE1vbnRoO1xuICB9XG5cbiAgaWYoZm9ybWF0RXhwWWVhcikge1xuICAgIHBheW1lbnRDYXJkLmV4cFllYXIgPSBmb3JtYXRFeHBZZWFyO1xuICB9XG5cbiAgaWYoZm9ybWF0Q2l0eSkge1xuICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICB9XG5cbiAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICB9XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICB9XG5cbiAgaWYoZm9ybWF0WmlwKSB7XG4gICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlOiBhbnkgPSBwYXltZW50Q2FyZDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIExFVCB1cGRhdGVkQ2FyZCA9IEZJUlNUKFxuICAgICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBVUERBVEUgYyBXSVRIICR7dXBkYXRlfSBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiBORVdcbiAgICAgIClcbiAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogdXBkYXRlZENhcmR9YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSByZXN1bHRzLmNhcmQ7XG4gICAgICBjb25zdCB7dXNlcn0gPSByZXN1bHRzO1xuXG4gICAgICBpZihpc0VtcHR5KHVwZGF0ZWRDYXJkKSkge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdub3RfZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge3N0cmlwZUN1c3RvbWVySWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHtzdHJpcGVJZH0gPSBjYXJkO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBleHBfbW9udGg6IGZvcm1hdEV4cE1vbnRoLFxuICAgICAgICBleHBfeWVhcjogZm9ybWF0RXhwWWVhcixcbiAgICAgICAgbmFtZTogZm9ybWF0RnVsbE5hbWVcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC51cGRhdGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlSWQsIHVwZGF0ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FyZClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OnVwZGF0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JlZGl0Q2FyZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q3JlZGl0Q2FyZHMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgIEZJTFRFUiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBQYXltZW50Q2FyZFR5cGVbXSA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENhcmRJZDogc3RyaW5nID0gcGFyc2VJZChjYXJkSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBjYXJkID0gRklSU1QoXG4gICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdENhcmRJZH0gJiYgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgUkVUVVJOIE9MRFxuICAgIClcbiAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IGNhcmR9YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChyZXN1bHQgPSB7Y2FyZDoge30sIHVzZXI6IHt9fSkgPT4ge1xuICAgICAgaWYoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5vdXRFZGdlcyhjYXJkS2V5KVxuICAgICAgICAudGhlbigoZWRnZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGhhc1BheW1lbnRgO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShyZW1vdmVBcWxRcnkpO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAgICAgICAgICAgLmRlbGV0ZVNvdXJjZSh1c2VyLnN0cmlwZUN1c3RvbWVySWQsIGNhcmQuc3RyaXBlSWQpXG4gICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpkZWxldGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gQ2xlYW4gZGJcbiAgY29uc3QgdXBkYXRlOiBVc2VyID0ge1xuICAgIGJhbmtBY2NvdW50OiAnJyxcbiAgICBiYW5rRnVsbE5hbWU6ICcnLFxuICAgIGJhbmtJZDogJycsXG4gICAgYmFua1JvdXRpbmc6ICcnLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXIgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5kZWxldGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCBiYW5rSWQpXG4gICAgICAgIC50aGVuKChyZXNwb25zZTogYW55ID0ge2RlbGV0ZWQ6IGZhbHNlfSkgPT4gcmVzcG9uc2UuZGVsZXRlZClcbiAgICAgICAgLmNhdGNoKCgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRUcmFuc2ZlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0cmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKTogUHJvbWlzZTxQYXltZW50VHJhbnNmZXI+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGN1cnJlbmN5fSA9IHRyYW5zZmVyO1xuICBjb25zdCBmb3JtYXRBbW91bnQ6IG51bWJlciA9IHBhcnNlTnVtKGFtb3VudCk7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcjogVXNlcikgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50VHJhbnNmZXIgPSB7XG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0cmFuc2ZlcnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3VHJhbnNmZXI6IFBheW1lbnRUcmFuc2ZlcikgPT4gbmV3VHJhbnNmZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50SG9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXltZW50OiBQYXltZW50Q2hhcmdlKTogUHJvbWlzZTxQYXltZW50Q2hhcmdlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQWtGO0FBQ2xGLHNCQUFrQjtBQUlsQixxQkFBb0I7QUFDcEIsb0JBQW1CO0FBRW5CLG9CQUFxQjtBQUVyQix1QkFBa0M7QUFDbEMsbUJBQXNCO0FBRXRCLE1BQU0sZ0JBQXdCO0FBQzlCLE1BQU0sYUFBa0I7QUFFakIsTUFBTSxxQkFBcUIsQ0FBQyxZQUEwQztBQUMzRSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFdBQVcsZUFBYTtBQUczRCxRQUFNLGVBQWUsSUFBSSxzQkFBTyxxQkFBTyxJQUFJLGlCQUFpQixFQUFDLFlBQVksWUFBWTtBQUVyRixTQUFPLGFBQWEsVUFDakIsT0FBTztBQUFBLElBQ04sVUFBVTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1B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
|
package/lib/actions/posts.js
CHANGED
|
@@ -22,6 +22,9 @@ var __spreadValues = (a, b) => {
|
|
|
22
22
|
};
|
|
23
23
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
24
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
25
|
+
var __require = typeof require !== "undefined" ? require : (x) => {
|
|
26
|
+
throw new Error('Dynamic require of "' + x + '" is not supported');
|
|
27
|
+
};
|
|
25
28
|
var __export = (target, all) => {
|
|
26
29
|
__markAsModule(target);
|
|
27
30
|
for (var name in all)
|
|
@@ -535,4 +538,4 @@ const createPostEdge = (db, file, postId) => {
|
|
|
535
538
|
parsePostOptions,
|
|
536
539
|
updatePost
|
|
537
540
|
});
|
|
538
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5cbmltcG9ydCB7QXBpQ29udGV4dCwgRmlsZVR5cGUsIFBvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZSwgVGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgbG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7dXBkYXRlRmlsZXN9IGZyb20gJy4vZmlsZXMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgbGlua1RhZ3N9IGZyb20gJy4vdGFncyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSDogbnVtYmVyID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3Bvc3RzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdE9wdGlvbnMgPSAob3B0aW9uczogUG9zdE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgbGF0aXR1ZGUgPSAwLFxuICAgIGxvbmdpdHVkZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSwgc2Vzc2lvbklkOiBzdHJpbmcpID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHM6IGFueSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAnaGFzUnN2cCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCBoYXNSc3ZwID0gVE9fQk9PTChGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uc1xuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJyc3ZwXCIgJiYgci50eXBlID09IFwicG9zdHNcIiAmJiByLl9mcm9tID09IFwidXNlcnMvJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgnaGFzUnN2cDpoYXNSc3ZwJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAnaXNTYXZlZCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCBpc1NhdmVkID0gVE9fQk9PTChGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uc1xuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJwaW5cIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiICYmIHIuX2Zyb20gPT0gXCJ1c2Vycy8ke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgICAgICkpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdpc1NhdmVkOmlzU2F2ZWQnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25zXG4gICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyc3ZwQ291bnQnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcnN2cENvdW50ID0gRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvbnNcbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyc3ZwQ291bnQ6cnN2cENvdW50Jyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndmlld0NvdW50Jzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHZpZXdDb3VudCA9IEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25zXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInZpZXdcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndmlld0NvdW50OnZpZXdDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nLCBvcHRpb25zOiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UGFydGlhbDxQb3N0VHlwZT4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSAnZGVmYXVsdCdcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgLy8gUXVlcnkgYmFzZWQgb24gcHJpdmFjeSBsZXZlbFxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZztcblxuICAgICAgaWYoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGlzR3JvdXBlZFxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgICAgIH0gZWxzZSBpZihwcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICAgICAgfVxuXG4gICAgICBpZihwcml2YWN5QXFsUXJ5KSB7XG4gICAgICAgIHJldHVybiBkYi5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIHx8IHt9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKHt9KSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge307XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+ICh7fSkpKTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5QXBwJztcbi8vICAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbi8vICAgY29uc29sZS5sb2coJ2dldFBvc3RMaXN0Ojpjb250ZXh0JywgY29udGV4dCk7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIGNvbnNvbGUubG9nKCdnZXRQb3N0TGlzdDo6ZXJyb3InLCBlcnJvcik7XG4vLyAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICB9KTtcbi8vIH07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5QXJlYSA9IChcbi8vICAgY29udGV4dDogQXBpQ29udGV4dCxcbi8vICAgbGF0aXR1ZGU6IG51bWJlcixcbi8vICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4vLyAgIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuLy8gKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeVVzZXInO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbi8vICAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuLy8gICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuLy8gICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbi8vICAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbi8vICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4vLyAgIGApO1xuLy8gICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbi8vICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbi8vICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4vLyAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudElkID09IG51bGxcbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4vLyAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbi8vICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICB9KTtcbi8vIH07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5R3JvdXAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGdyb3VwSWQ6IHN0cmluZyxcbi8vICAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4vLyApOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5R3JvdXAnO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuXG4vLyAgIC8vIEdyb3VwIGlkXG4vLyAgIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4vLyAgIGNvbnN0IGRiID0gZGF0YWJhc2U7XG4vLyAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCBnIElOIElOQk9VTkQgJHtmb3JtYXRHcm91cElkfSBoYXNHcm91cFxuLy8gICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbi8vICAgICAgIFJFVFVSTiBnYDtcblxuLy8gICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLnRoZW4oKGdyb3VwczogR3JvdXBUeXBlW10gPSBbXSkgPT4ge1xuLy8gICAgICAgaWYoZ3JvdXBzLmxlbmd0aCkge1xuLy8gICAgICAgICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgICAgICAgY29uc3QgcG9zdEFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4vLyAgICAgICAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLmdyb3VwSWQgPT0gXCIke2Zvcm1hdEdyb3VwSWR9XCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAgICAgICAke2xpbWl0LmFxbH1cbi8vICAgICAgICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICAgICAgICByZXR1cm4gZGIucXVlcnkocG9zdEFxbFFyeSlcbi8vICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICAgICAgICB9KTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgcmV0dXJuIFtdO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuLy8gZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUxhdGVzdCc7XG4vLyAgIGNvbnNvbGUubG9nKCdnZXRQb3N0c0J5TGF0ZXN0OjpvcHRpb25zJywgb3B0aW9ucyk7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuLy8gICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4vLyAgIGNvbnNvbGUubG9nKCdnZXRQb3N0c0J5TGF0ZXN0OjphcWxRcnknLCBhcWxRcnkpO1xuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uKSA9PiBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYocmVhY3Rpb25zLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgbWF0Y2hlZFJlYWN0aW9ucyA9IExFTkdUSChcbiAgICAgIEZPUiBtciBJTiByZWFjdGlvbnNcbiAgICAgIEZJTFRFUiBtci5tYXRjaGVkID09IHRydWVcbiAgICAgIFJFVFVSTiBtclxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnM6bWF0Y2hlZFJlYWN0aW9ucycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0U2Vzc2lvbklkfVwiIGhhc1JlYWN0aW9uc1xuICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwIGlzVGFnZ2VkXG4gICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2Zvcm1hdFJlYWN0aW9uc30pID4gMCAmJiBQT1NJVElPTigke2Zvcm1hdFJlYWN0aW9uc30sIHJlYWN0aW9uLm5hbWUpXG4gICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgIFJFVFVSTiBNRVJHRShyZWFjdGlvbiwge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGZvcm1hdFRhZ05hbWVzOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCgodGFnKSA9PiBwYXJzZUNoYXIodGFnLCAzMikudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCAncC5wcml2YWN5ID09IFwicHVibGljXCInXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuXG4gIGlmKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UoXG4gICAgICAke2Zvcm1hdExhdGl0dWRlfSxcbiAgICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbiAgICAgIE5PVF9OVUxMKHAubGF0aXR1ZGUsIDApLFxuICAgICAgTk9UX05VTEwocC5sb25naXR1ZGUsIDApKVxuICAgIGApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBtYXRjaGVkVGFncyA9IExFTkdUSChcbiAgICAgIEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiB0Lm1hdGNoZWQgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIHRcbiAgICApYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkVGFnczptYXRjaGVkVGFncycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFRhZ3MgPiAwJyk7XG4gIH1cblxuICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBMRVQgdGFncyA9IChcbiAgICAgIEZPUiB0YWcsIGl0IElOIDEuLjEgSU5CT1VORCBwIGlzVGFnZ2VkXG4gICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2Zvcm1hdFRhZ05hbWVzfSkgPiAwICYmIFBPU0lUSU9OKCR7Zm9ybWF0VGFnTmFtZXN9LCB0YWcubmFtZSlcbiAgICAgIFNPUlQgdGFnLm5hbWVcbiAgICAgIFJFVFVSTiBNRVJHRSh0YWcsIHttYXRjaGVkOm1hdGNoZWR9KVxuICAgIClcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCAke3NvcnRCeS5qb2luKCcsICcpfVxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIGNvbnNvbGUubG9nKHthcWxRcnksIG9wdGlvbnN9KTtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoKSA9PiBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnVzZXJJZCA9PSBcIiR7Zm9ybWF0VXNlcklkfVwiICYmIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudCA9PSBudWxsXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgcC5hZGRlZFxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdENvbW1lbnRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29tbWVudHMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIC8vIEdldCB0aGUgcGFyZW50IHBvc3QgdG8gZ2V0IHJlc3RyaWN0aW9uc1xuICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2tleSxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9ICdwdWJsaWMnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIC8vIFF1ZXJ5IGJhc2VkIG9uIHByaXZhY3kgbGV2ZWxcbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmc7XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGlzR3JvdXBlZFxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9IGVsc2UgaWYocHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgIEZPUiB1c2VyIElOIHVzZXJzXG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiICYmIHVzZXIuX2tleSA9PSBwLnVzZXJJZFxuICAgICAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgICApXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gZGIucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNvbnRlbnQgPSAnJyxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQgPSAnJyxcbiAgICBsb2NhdGlvbixcbiAgICBsYXRpdHVkZSxcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSA9ICcnLFxuICAgIHBhcmVudElkID0gbnVsbCxcbiAgICBwcml2YWN5ID0gJ3B1YmxpYycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBwb3N0O1xuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdCBpbnNlcnQ6IFBvc3RUeXBlID0ge1xuICAgIF9rZXk6IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCksXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCBNQVhfQ09OVEVOVF9MRU5HVEgpLFxuICAgIGVuZERhdGU6IGVuZERhdGUgPyBwYXJzZU51bShlbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgZ3JvdXBJZDogZ3JvdXBJZCA/IHBhcnNlSWQoZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lLCAxNjApLFxuICAgIHBhcmVudElkOiBwYXJlbnRJZCA/IHBhcnNlSWQocGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICAgIHByaXZhY3k6IHByaXZhY3kgPyBwYXJzZVZhckNoYXIocHJpdmFjeSwgMTYpIDogdW5kZWZpbmVkLFxuICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlID8gcGFyc2VOdW0oc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKSxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuXG4gIGNvbnN0IGRiOiBEYXRhYmFzZSA9IGRhdGFiYXNlO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcG9zdHMgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGIucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkgfHwge30pO1xuXG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcblxuICAgIGNvbnNvbGUubG9nKHt0YWdzfSk7XG4gICAgaWYodGFncyAmJiB0YWdzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGFnTmFtZXM6IHN0cmluZ1tdID0gdGFncy5tYXAoKHtuYW1lfSkgPT4gcGFyc2VDaGFyKG5hbWUsIDMyKSk7XG4gICAgICBjb25zb2xlLmxvZyh7dGFnTmFtZXMsIHBvc3REb2NJZH0pO1xuICAgICAgYXdhaXQgbGlua1RhZ3MoZGIsIHRhZ05hbWVzLCBwb3N0RG9jSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3Mgd2l0aGluIHBvc3RzXG4gICAgICBjb25zdCB0YWdMaXN0OiBUYWdUeXBlW10gPSBhd2FpdCBleHRyYWN0VGFncyhkYiwgcG9zdERvY0lkLCBpbnNlcnQuY29udGVudCk7XG4gICAgICBzYXZlZFBvc3QudGFncyA9IHRhZ0xpc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmVkUG9zdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0OiBQb3N0SW5wdXRUeXBlKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7XG4gICAgY29udGVudCxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQsXG4gICAgbmFtZSxcbiAgICBwYXJlbnRJZCxcbiAgICBwb3N0SWQsXG4gICAgcHJpdmFjeSxcbiAgICBzdGFydERhdGUsXG4gICAgdGFncyA9IFtdLFxuICAgIHR5cGVcbiAgfSA9IHBvc3Q7XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICBjb250ZW50OiBjb250ZW50ID8gcGFyc2VTdHJpbmcoY29udGVudCwgTUFYX0NPTlRFTlRfTEVOR1RIKSA6IHVuZGVmaW5lZCxcbiAgICBlbmREYXRlOiBlbmREYXRlID8gcGFyc2VOdW0oZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogbmFtZSA/IHBhcnNlU3RyaW5nKG5hbWUsIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgcGFyZW50SWQ6IHBhcmVudElkID8gcGFyc2VTdHJpbmcocGFyZW50SWQsIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgcHJpdmFjeTogcHJpdmFjeSA/IHBhcnNlVmFyQ2hhcihwcml2YWN5LCAxNikgOiB1bmRlZmluZWQsXG4gICAgc3RhcnREYXRlOiBzdGFydERhdGUgPyBwYXJzZU51bShzdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiB0eXBlICE9PSB1bmRlZmluZWQgPyBwYXJzZUNoYXIodHlwZSwgMTYpIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgbGV0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKHBvc3RJZCk7XG4gIGZvcm1hdElkID0gZm9ybWF0SWQgPT09ICcnID8gY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBncm91cElkOiBmb3JtYXRHcm91cElkLFxuICAgIHByaXZhY3ksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgZGI6IERhdGFiYXNlID0gZGF0YWJhc2U7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdElkfSwgdXNlcklkOiAke3Nlc3Npb25JZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIHx8IHt9KTtcblxuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG5cbiAgICBpZih0YWdzICYmIHRhZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0YWdOYW1lczogc3RyaW5nW10gPSB0YWdzLm1hcCgoe25hbWV9KSA9PiBwYXJzZUNoYXIobmFtZSwgMzIpKTtcbiAgICAgIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KHRhZ05hbWVzKX0sIHQubmFtZSlcbiAgICAgICAgUkVUVVJOIHRgO1xuXG4gICAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBhd2FpdCBkYi5xdWVyeSh0YWdRdWVyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICAgIGNvbnN0IHRhZ0lkczogc3RyaW5nW10gPSBleGlzdGluZ1RhZ3MubWFwKCh7X2lkOiB0YWdJZH0pID0+IHRhZ0lkKTtcbiAgICAgIGF3YWl0IGxpbmtUYWdzKGRiLCB0YWdJZHMsIHVwZGF0ZWRQb3N0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ0xpc3QgPSBhd2FpdCBleHRyYWN0VGFncyhkYiwgdXBkYXRlZFBvc3RJZCwgdXBkYXRlLmNvbnRlbnQgfHwgJycpIHx8IFtdO1xuICAgICAgdXBkYXRlZFBvc3QudGFncyA9IHRhZ0xpc3Q7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxpbmtlZCBmaWxlc1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlVHlwZVtdID0gdXBkYXRlZFBvc3QuZmlsZXMgfHwgW107XG5cbiAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbGVMaXN0ID0gYXdhaXQgdXBkYXRlRmlsZXMoZGIsIGZvcm1hdElkLCBmaWxlcykgfHwgW107XG4gICAgICB1cGRhdGVkUG9zdC5maWxlcyA9IGZpbGVMaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVkUG9zdC5maWxlcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0SWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSBkYXRhYmFzZTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBwIElOIHBvc3RzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSA9IHt9KSA9PiB7XG4gICAgICBpZihwb3N0KSB7XG4gICAgICAgIC8vIFJlbW92ZSB0YWcgbGlua3NcbiAgICAgICAgY29uc3QgZWRnZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHQgSU4gaXNUYWdnZWRcbiAgICAgICAgICAgIEZJTFRFUiB0Ll90byA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgICAgICAgIFJFTU9WRSB0IElOIGlzVGFnZ2VkYDtcblxuICAgICAgICByZXR1cm4gZGIucXVlcnkoZWRnZUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYXR0YWNoZWQgZmlsZXNcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBmIElOIGhhc0ZpbGVcbiAgICAgICAgICAgICAgICBGSUxURVIgZi5fdG8gPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICAgICAgICAgICAgUkVNT1ZFIGYgSU4gaGFzRmlsZWA7XG5cbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShmaWxlQXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBwb3N0KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhblBvc3RzID0gKGRhdGFiYXNlOiBEYXRhYmFzZSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMgdGhhdCBhcmUgb3ZlciA2MCBkYXlzIGFuZCBub3Qgc2F2ZWRcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgICAgRklMVEVSIHAuYWRkZWQgPCBEQVRFX1RJTUVTVEFNUChEQVRFX1NVQlRSQUNUKERBVEVfTk9XKCksIDYwLCAnZGF5JykpICYmIHAudHlwZSA9PSBcImRlZmF1bHRcIlxuICAgICAgUkVNT1ZFIHAgSU4gcG9zdHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigocmVzdWx0czogUG9zdFR5cGVbXSA9IFtdKSA9PiByZXN1bHRzLmxlbmd0aClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoZGI6IERhdGFiYXNlLCBmaWxlOiBGaWxlVHlwZSwgcG9zdElkOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRiLmNvbGxlY3Rpb24oJ2lzUG9zdGVkJyk7XG4gIGNvbnN0IHtmaWxlSWR9ID0gZmlsZTtcbiAgY29uc3QgZm9ybWF0RmlsZUlkOiBzdHJpbmcgPSBwYXJzZUlkKGZpbGVJZCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZmlsZS0ke3Bvc3RJZH0tJHtmb3JtYXRGaWxlSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFBvc3RJZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCBmaWxlVHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKGZpbGUuZmlsZVR5cGUsIDE2KTtcblxuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IGBwb3N0cy8ke2Zvcm1hdFBvc3RJZH1gLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGBmaWxlcy8ke2Zvcm1hdEZpbGVJZH1gLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHR5cGU6IGZpbGVUeXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLnRoZW4oKCkgPT4gZmlsZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBa0Y7QUFDbEYsc0JBQTRCO0FBTTVCLG9CQUFpQztBQUNqQyxtQkFBMEI7QUFDMUIsa0JBQW9DO0FBRXBDLE1BQU0scUJBQTZCO0FBQ25DLE1BQU0sZ0JBQXdCO0FBRXZCLE1BQU0sbUJBQW1CLENBQUMsVUFBdUIsT0FBTztBQUM3RCxRQUFNO0FBQUEsSUFDSixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTDtBQUVKLFNBQU87QUFBQSxJQUNMLFVBQVUsMkJBQVMsVUFBVTtBQUFBLElBQzdCLE9BQU8sNEJBQVMsTUFBTTtBQUFBLElBQ3RCLFdBQVcsMkJBQVMsV0FBVztBQUFBLElBQy9CLE1BQU0sNEJBQVUsTUFBTTtBQUFBO0FBQUE7QUFJbkIsTUFBTSxr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
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5cbmltcG9ydCB7QXBpQ29udGV4dCwgRmlsZVR5cGUsIFBvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZSwgVGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgbG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7dXBkYXRlRmlsZXN9IGZyb20gJy4vZmlsZXMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgbGlua1RhZ3N9IGZyb20gJy4vdGFncyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSDogbnVtYmVyID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3Bvc3RzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdE9wdGlvbnMgPSAob3B0aW9uczogUG9zdE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgbGF0aXR1ZGUgPSAwLFxuICAgIGxvbmdpdHVkZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSwgc2Vzc2lvbklkOiBzdHJpbmcpID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHM6IGFueSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAnaGFzUnN2cCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCBoYXNSc3ZwID0gVE9fQk9PTChGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uc1xuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJyc3ZwXCIgJiYgci50eXBlID09IFwicG9zdHNcIiAmJiByLl9mcm9tID09IFwidXNlcnMvJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgnaGFzUnN2cDpoYXNSc3ZwJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAnaXNTYXZlZCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCBpc1NhdmVkID0gVE9fQk9PTChGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uc1xuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJwaW5cIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiICYmIHIuX2Zyb20gPT0gXCJ1c2Vycy8ke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgICAgICkpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdpc1NhdmVkOmlzU2F2ZWQnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25zXG4gICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyc3ZwQ291bnQnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcnN2cENvdW50ID0gRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvbnNcbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyc3ZwQ291bnQ6cnN2cENvdW50Jyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndmlld0NvdW50Jzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHZpZXdDb3VudCA9IEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25zXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInZpZXdcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndmlld0NvdW50OnZpZXdDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nLCBvcHRpb25zOiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UGFydGlhbDxQb3N0VHlwZT4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSAnZGVmYXVsdCdcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgLy8gUXVlcnkgYmFzZWQgb24gcHJpdmFjeSBsZXZlbFxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZztcblxuICAgICAgaWYoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGlzR3JvdXBlZFxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgICAgIH0gZWxzZSBpZihwcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICAgICAgfVxuXG4gICAgICBpZihwcml2YWN5QXFsUXJ5KSB7XG4gICAgICAgIHJldHVybiBkYi5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIHx8IHt9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKHt9KSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge307XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+ICh7fSkpKTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5QXBwJztcbi8vICAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbi8vICAgY29uc29sZS5sb2coJ2dldFBvc3RMaXN0Ojpjb250ZXh0JywgY29udGV4dCk7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIGNvbnNvbGUubG9nKCdnZXRQb3N0TGlzdDo6ZXJyb3InLCBlcnJvcik7XG4vLyAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICB9KTtcbi8vIH07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5QXJlYSA9IChcbi8vICAgY29udGV4dDogQXBpQ29udGV4dCxcbi8vICAgbGF0aXR1ZGU6IG51bWJlcixcbi8vICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4vLyAgIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuLy8gKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeVVzZXInO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbi8vICAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuLy8gICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuLy8gICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbi8vICAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbi8vICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4vLyAgIGApO1xuLy8gICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbi8vICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbi8vICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4vLyAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudElkID09IG51bGxcbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4vLyAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbi8vICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICB9KTtcbi8vIH07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5R3JvdXAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGdyb3VwSWQ6IHN0cmluZyxcbi8vICAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4vLyApOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5R3JvdXAnO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuXG4vLyAgIC8vIEdyb3VwIGlkXG4vLyAgIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4vLyAgIGNvbnN0IGRiID0gZGF0YWJhc2U7XG4vLyAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCBnIElOIElOQk9VTkQgJHtmb3JtYXRHcm91cElkfSBoYXNHcm91cFxuLy8gICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbi8vICAgICAgIFJFVFVSTiBnYDtcblxuLy8gICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLnRoZW4oKGdyb3VwczogR3JvdXBUeXBlW10gPSBbXSkgPT4ge1xuLy8gICAgICAgaWYoZ3JvdXBzLmxlbmd0aCkge1xuLy8gICAgICAgICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgICAgICAgY29uc3QgcG9zdEFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4vLyAgICAgICAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLmdyb3VwSWQgPT0gXCIke2Zvcm1hdEdyb3VwSWR9XCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAgICAgICAke2xpbWl0LmFxbH1cbi8vICAgICAgICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICAgICAgICByZXR1cm4gZGIucXVlcnkocG9zdEFxbFFyeSlcbi8vICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICAgICAgICB9KTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgcmV0dXJuIFtdO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuLy8gZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUxhdGVzdCc7XG4vLyAgIGNvbnNvbGUubG9nKCdnZXRQb3N0c0J5TGF0ZXN0OjpvcHRpb25zJywgb3B0aW9ucyk7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuLy8gICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4vLyAgIGNvbnNvbGUubG9nKCdnZXRQb3N0c0J5TGF0ZXN0OjphcWxRcnknLCBhcWxRcnkpO1xuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uKSA9PiBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYocmVhY3Rpb25zLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgbWF0Y2hlZFJlYWN0aW9ucyA9IExFTkdUSChcbiAgICAgIEZPUiBtciBJTiByZWFjdGlvbnNcbiAgICAgIEZJTFRFUiBtci5tYXRjaGVkID09IHRydWVcbiAgICAgIFJFVFVSTiBtclxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnM6bWF0Y2hlZFJlYWN0aW9ucycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0U2Vzc2lvbklkfVwiIGhhc1JlYWN0aW9uc1xuICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwIGlzVGFnZ2VkXG4gICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2Zvcm1hdFJlYWN0aW9uc30pID4gMCAmJiBQT1NJVElPTigke2Zvcm1hdFJlYWN0aW9uc30sIHJlYWN0aW9uLm5hbWUpXG4gICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgIFJFVFVSTiBNRVJHRShyZWFjdGlvbiwge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGZvcm1hdFRhZ05hbWVzOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCgodGFnKSA9PiBwYXJzZUNoYXIodGFnLCAzMikudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCAncC5wcml2YWN5ID09IFwicHVibGljXCInXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuXG4gIGlmKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UoXG4gICAgICAke2Zvcm1hdExhdGl0dWRlfSxcbiAgICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbiAgICAgIE5PVF9OVUxMKHAubGF0aXR1ZGUsIDApLFxuICAgICAgTk9UX05VTEwocC5sb25naXR1ZGUsIDApKVxuICAgIGApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBtYXRjaGVkVGFncyA9IExFTkdUSChcbiAgICAgIEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiB0Lm1hdGNoZWQgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIHRcbiAgICApYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkVGFnczptYXRjaGVkVGFncycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFRhZ3MgPiAwJyk7XG4gIH1cblxuICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBMRVQgdGFncyA9IChcbiAgICAgIEZPUiB0YWcsIGl0IElOIDEuLjEgSU5CT1VORCBwIGlzVGFnZ2VkXG4gICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2Zvcm1hdFRhZ05hbWVzfSkgPiAwICYmIFBPU0lUSU9OKCR7Zm9ybWF0VGFnTmFtZXN9LCB0YWcubmFtZSlcbiAgICAgIFNPUlQgdGFnLm5hbWVcbiAgICAgIFJFVFVSTiBNRVJHRSh0YWcsIHttYXRjaGVkOm1hdGNoZWR9KVxuICAgIClcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCAke3NvcnRCeS5qb2luKCcsICcpfVxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIGNvbnNvbGUubG9nKHthcWxRcnksIG9wdGlvbnN9KTtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoKSA9PiBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnVzZXJJZCA9PSBcIiR7Zm9ybWF0VXNlcklkfVwiICYmIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudCA9PSBudWxsXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgcC5hZGRlZFxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdENvbW1lbnRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29tbWVudHMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIC8vIEdldCB0aGUgcGFyZW50IHBvc3QgdG8gZ2V0IHJlc3RyaWN0aW9uc1xuICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2tleSxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9ICdwdWJsaWMnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIC8vIFF1ZXJ5IGJhc2VkIG9uIHByaXZhY3kgbGV2ZWxcbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmc7XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGlzR3JvdXBlZFxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9IGVsc2UgaWYocHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgIEZPUiB1c2VyIElOIHVzZXJzXG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiICYmIHVzZXIuX2tleSA9PSBwLnVzZXJJZFxuICAgICAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgICApXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gZGIucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNvbnRlbnQgPSAnJyxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQgPSAnJyxcbiAgICBsb2NhdGlvbixcbiAgICBsYXRpdHVkZSxcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSA9ICcnLFxuICAgIHBhcmVudElkID0gbnVsbCxcbiAgICBwcml2YWN5ID0gJ3B1YmxpYycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBwb3N0O1xuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdCBpbnNlcnQ6IFBvc3RUeXBlID0ge1xuICAgIF9rZXk6IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCksXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCBNQVhfQ09OVEVOVF9MRU5HVEgpLFxuICAgIGVuZERhdGU6IGVuZERhdGUgPyBwYXJzZU51bShlbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgZ3JvdXBJZDogZ3JvdXBJZCA/IHBhcnNlSWQoZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lLCAxNjApLFxuICAgIHBhcmVudElkOiBwYXJlbnRJZCA/IHBhcnNlSWQocGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICAgIHByaXZhY3k6IHByaXZhY3kgPyBwYXJzZVZhckNoYXIocHJpdmFjeSwgMTYpIDogdW5kZWZpbmVkLFxuICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlID8gcGFyc2VOdW0oc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKSxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuXG4gIGNvbnN0IGRiOiBEYXRhYmFzZSA9IGRhdGFiYXNlO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcG9zdHMgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGIucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkgfHwge30pO1xuXG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcblxuICAgIGNvbnNvbGUubG9nKHt0YWdzfSk7XG4gICAgaWYodGFncyAmJiB0YWdzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGFnTmFtZXM6IHN0cmluZ1tdID0gdGFncy5tYXAoKHtuYW1lfSkgPT4gcGFyc2VDaGFyKG5hbWUsIDMyKSk7XG4gICAgICBjb25zb2xlLmxvZyh7dGFnTmFtZXMsIHBvc3REb2NJZH0pO1xuICAgICAgYXdhaXQgbGlua1RhZ3MoZGIsIHRhZ05hbWVzLCBwb3N0RG9jSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3Mgd2l0aGluIHBvc3RzXG4gICAgICBjb25zdCB0YWdMaXN0OiBUYWdUeXBlW10gPSBhd2FpdCBleHRyYWN0VGFncyhkYiwgcG9zdERvY0lkLCBpbnNlcnQuY29udGVudCk7XG4gICAgICBzYXZlZFBvc3QudGFncyA9IHRhZ0xpc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmVkUG9zdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0OiBQb3N0SW5wdXRUeXBlKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7XG4gICAgY29udGVudCxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQsXG4gICAgbmFtZSxcbiAgICBwYXJlbnRJZCxcbiAgICBwb3N0SWQsXG4gICAgcHJpdmFjeSxcbiAgICBzdGFydERhdGUsXG4gICAgdGFncyA9IFtdLFxuICAgIHR5cGVcbiAgfSA9IHBvc3Q7XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICBjb250ZW50OiBjb250ZW50ID8gcGFyc2VTdHJpbmcoY29udGVudCwgTUFYX0NPTlRFTlRfTEVOR1RIKSA6IHVuZGVmaW5lZCxcbiAgICBlbmREYXRlOiBlbmREYXRlID8gcGFyc2VOdW0oZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogbmFtZSA/IHBhcnNlU3RyaW5nKG5hbWUsIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgcGFyZW50SWQ6IHBhcmVudElkID8gcGFyc2VTdHJpbmcocGFyZW50SWQsIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgcHJpdmFjeTogcHJpdmFjeSA/IHBhcnNlVmFyQ2hhcihwcml2YWN5LCAxNikgOiB1bmRlZmluZWQsXG4gICAgc3RhcnREYXRlOiBzdGFydERhdGUgPyBwYXJzZU51bShzdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiB0eXBlICE9PSB1bmRlZmluZWQgPyBwYXJzZUNoYXIodHlwZSwgMTYpIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgbGV0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKHBvc3RJZCk7XG4gIGZvcm1hdElkID0gZm9ybWF0SWQgPT09ICcnID8gY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBncm91cElkOiBmb3JtYXRHcm91cElkLFxuICAgIHByaXZhY3ksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgZGI6IERhdGFiYXNlID0gZGF0YWJhc2U7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdElkfSwgdXNlcklkOiAke3Nlc3Npb25JZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIHx8IHt9KTtcblxuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG5cbiAgICBpZih0YWdzICYmIHRhZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0YWdOYW1lczogc3RyaW5nW10gPSB0YWdzLm1hcCgoe25hbWV9KSA9PiBwYXJzZUNoYXIobmFtZSwgMzIpKTtcbiAgICAgIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KHRhZ05hbWVzKX0sIHQubmFtZSlcbiAgICAgICAgUkVUVVJOIHRgO1xuXG4gICAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBhd2FpdCBkYi5xdWVyeSh0YWdRdWVyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICAgIGNvbnN0IHRhZ0lkczogc3RyaW5nW10gPSBleGlzdGluZ1RhZ3MubWFwKCh7X2lkOiB0YWdJZH0pID0+IHRhZ0lkKTtcbiAgICAgIGF3YWl0IGxpbmtUYWdzKGRiLCB0YWdJZHMsIHVwZGF0ZWRQb3N0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ0xpc3QgPSBhd2FpdCBleHRyYWN0VGFncyhkYiwgdXBkYXRlZFBvc3RJZCwgdXBkYXRlLmNvbnRlbnQgfHwgJycpIHx8IFtdO1xuICAgICAgdXBkYXRlZFBvc3QudGFncyA9IHRhZ0xpc3Q7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxpbmtlZCBmaWxlc1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlVHlwZVtdID0gdXBkYXRlZFBvc3QuZmlsZXMgfHwgW107XG5cbiAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbGVMaXN0ID0gYXdhaXQgdXBkYXRlRmlsZXMoZGIsIGZvcm1hdElkLCBmaWxlcykgfHwgW107XG4gICAgICB1cGRhdGVkUG9zdC5maWxlcyA9IGZpbGVMaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVkUG9zdC5maWxlcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0SWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSBkYXRhYmFzZTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBwIElOIHBvc3RzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSA9IHt9KSA9PiB7XG4gICAgICBpZihwb3N0KSB7XG4gICAgICAgIC8vIFJlbW92ZSB0YWcgbGlua3NcbiAgICAgICAgY29uc3QgZWRnZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHQgSU4gaXNUYWdnZWRcbiAgICAgICAgICAgIEZJTFRFUiB0Ll90byA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgICAgICAgIFJFTU9WRSB0IElOIGlzVGFnZ2VkYDtcblxuICAgICAgICByZXR1cm4gZGIucXVlcnkoZWRnZUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYXR0YWNoZWQgZmlsZXNcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBmIElOIGhhc0ZpbGVcbiAgICAgICAgICAgICAgICBGSUxURVIgZi5fdG8gPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICAgICAgICAgICAgUkVNT1ZFIGYgSU4gaGFzRmlsZWA7XG5cbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShmaWxlQXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBwb3N0KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhblBvc3RzID0gKGRhdGFiYXNlOiBEYXRhYmFzZSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMgdGhhdCBhcmUgb3ZlciA2MCBkYXlzIGFuZCBub3Qgc2F2ZWRcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgICAgRklMVEVSIHAuYWRkZWQgPCBEQVRFX1RJTUVTVEFNUChEQVRFX1NVQlRSQUNUKERBVEVfTk9XKCksIDYwLCAnZGF5JykpICYmIHAudHlwZSA9PSBcImRlZmF1bHRcIlxuICAgICAgUkVNT1ZFIHAgSU4gcG9zdHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigocmVzdWx0czogUG9zdFR5cGVbXSA9IFtdKSA9PiByZXN1bHRzLmxlbmd0aClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoZGI6IERhdGFiYXNlLCBmaWxlOiBGaWxlVHlwZSwgcG9zdElkOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRiLmNvbGxlY3Rpb24oJ2lzUG9zdGVkJyk7XG4gIGNvbnN0IHtmaWxlSWR9ID0gZmlsZTtcbiAgY29uc3QgZm9ybWF0RmlsZUlkOiBzdHJpbmcgPSBwYXJzZUlkKGZpbGVJZCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZmlsZS0ke3Bvc3RJZH0tJHtmb3JtYXRGaWxlSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFBvc3RJZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCBmaWxlVHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKGZpbGUuZmlsZVR5cGUsIDE2KTtcblxuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IGBwb3N0cy8ke2Zvcm1hdFBvc3RJZH1gLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGBmaWxlcy8ke2Zvcm1hdEZpbGVJZH1gLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHR5cGU6IGZpbGVUeXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLnRoZW4oKCkgPT4gZmlsZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBa0Y7QUFDbEYsc0JBQTRCO0FBTTVCLG9CQUFpQztBQUNqQyxtQkFBMEI7QUFDMUIsa0JBQW9DO0FBRXBDLE1BQU0scUJBQTZCO0FBQ25DLE1BQU0sZ0JBQXdCO0FBRXZCLE1BQU0sbUJBQW1CLENBQUMsVUFBdUIsT0FBTztBQUM3RCxRQUFNO0FBQUEsSUFDSixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTDtBQUVKLFNBQU87QUFBQSxJQUNMLFVBQVUsMkJBQVMsVUFBVTtBQUFBLElBQzdCLE9BQU8sNEJBQVMsTUFBTTtBQUFBLElBQ3RCLFdBQVcsMkJBQVMsV0FBVztBQUFBLElBQy9CLE1BQU0sNEJBQVUsTUFBTTtBQUFBO0FBQUE7QUFJbkIsTUFB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
|