@nlabs/reaktor 0.5.4 → 0.8.0

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.
Files changed (135) hide show
  1. package/README.md +7 -7
  2. package/lib/actions/conversations.js +68 -69
  3. package/lib/actions/dynamodb.js +22 -33
  4. package/lib/actions/email.js +32 -30
  5. package/lib/actions/files.js +39 -58
  6. package/lib/actions/groups.js +33 -28
  7. package/lib/actions/images.js +71 -82
  8. package/lib/actions/index.js +54 -37
  9. package/lib/actions/ios.js +21 -40
  10. package/lib/actions/locations.js +25 -22
  11. package/lib/actions/messages.js +31 -45
  12. package/lib/actions/notifications.js +13 -20
  13. package/lib/actions/payments.js +40 -52
  14. package/lib/actions/posts.js +68 -48
  15. package/lib/actions/reactions.js +29 -52
  16. package/lib/actions/s3.js +21 -18
  17. package/lib/actions/search.js +26 -40
  18. package/lib/actions/sms.js +24 -21
  19. package/lib/actions/statistics.js +14 -21
  20. package/lib/actions/subscription.js +27 -24
  21. package/lib/actions/tags.js +49 -56
  22. package/lib/actions/users.js +92 -106
  23. package/lib/actions/websockets.js +28 -41
  24. package/lib/config.js +21 -18
  25. package/lib/index.js +24 -22
  26. package/lib/lambdas/actions/websockets.js +21 -45
  27. package/lib/lambdas/authorizer.js +16 -24
  28. package/lib/lambdas/connection.js +18 -43
  29. package/lib/lambdas/utils/message.js +20 -17
  30. package/lib/lambdas/utils/websocket.js +33 -25
  31. package/lib/templates/email/layout.js +16 -9
  32. package/lib/templates/email/passwordForgot.js +16 -9
  33. package/lib/templates/email/passwordRecovery.js +16 -9
  34. package/lib/templates/email/verifyEmail.js +16 -9
  35. package/lib/templates/email/welcome.js +16 -9
  36. package/lib/templates/sms/passwordForgot.js +16 -9
  37. package/lib/templates/sms/passwordRecovery.js +16 -9
  38. package/lib/templates/sms/verifyEmail.js +16 -9
  39. package/lib/templates/sms/verifyPhone.js +16 -9
  40. package/lib/templates/sms/welcome.js +16 -9
  41. package/lib/types/apps.js +14 -5
  42. package/lib/types/arangodb.js +14 -5
  43. package/lib/types/auth.js +14 -5
  44. package/lib/types/connections.js +14 -5
  45. package/lib/types/conversations.js +14 -5
  46. package/lib/types/email.js +14 -5
  47. package/lib/types/files.js +14 -5
  48. package/lib/types/google.js +14 -5
  49. package/lib/types/groups.js +14 -5
  50. package/lib/types/images.js +14 -5
  51. package/lib/types/index.js +50 -35
  52. package/lib/types/locations.js +14 -5
  53. package/lib/types/messages.js +14 -5
  54. package/lib/types/notifications.js +14 -5
  55. package/lib/types/payments.js +14 -5
  56. package/lib/types/posts.js +14 -5
  57. package/lib/types/statistics.js +14 -5
  58. package/lib/types/tags.js +14 -5
  59. package/lib/types/users.js +14 -5
  60. package/lib/types/websocket.js +14 -5
  61. package/lib/utils/analytics.js +24 -44
  62. package/lib/utils/arangodb.js +15 -22
  63. package/lib/utils/auth.js +22 -36
  64. package/lib/utils/graphql.js +20 -17
  65. package/lib/utils/index.js +26 -23
  66. package/lib/utils/objects.js +22 -19
  67. package/lib/utils/session.js +20 -17
  68. package/package.json +31 -33
  69. package/.eslintrc +0 -18
  70. package/lib/actions/conversations.d.ts +0 -14
  71. package/lib/actions/dynamodb.d.ts +0 -8
  72. package/lib/actions/email.d.ts +0 -7
  73. package/lib/actions/files.d.ts +0 -16
  74. package/lib/actions/groups.d.ts +0 -14
  75. package/lib/actions/images.d.ts +0 -22
  76. package/lib/actions/index.d.ts +0 -20
  77. package/lib/actions/ios.d.ts +0 -7
  78. package/lib/actions/locations.d.ts +0 -3
  79. package/lib/actions/messages.d.ts +0 -13
  80. package/lib/actions/notifications.d.ts +0 -5
  81. package/lib/actions/payments.d.ts +0 -10
  82. package/lib/actions/posts.d.ts +0 -19
  83. package/lib/actions/reactions.d.ts +0 -30
  84. package/lib/actions/s3.d.ts +0 -7
  85. package/lib/actions/search.d.ts +0 -3
  86. package/lib/actions/sms.d.ts +0 -3
  87. package/lib/actions/statistics.d.ts +0 -2
  88. package/lib/actions/subscription.d.ts +0 -7
  89. package/lib/actions/tags.d.ts +0 -26
  90. package/lib/actions/users.d.ts +0 -44
  91. package/lib/actions/websockets.d.ts +0 -6
  92. package/lib/config.d.ts +0 -20
  93. package/lib/index.d.ts +0 -5
  94. package/lib/lambdas/actions/websockets.d.ts +0 -6
  95. package/lib/lambdas/authorizer.d.ts +0 -20
  96. package/lib/lambdas/connection.d.ts +0 -12
  97. package/lib/lambdas/utils/message.d.ts +0 -1
  98. package/lib/lambdas/utils/websocket.d.ts +0 -7
  99. package/lib/templates/email/layout.d.ts +0 -2
  100. package/lib/templates/email/passwordForgot.d.ts +0 -2
  101. package/lib/templates/email/passwordRecovery.d.ts +0 -2
  102. package/lib/templates/email/verifyEmail.d.ts +0 -2
  103. package/lib/templates/email/welcome.d.ts +0 -2
  104. package/lib/templates/sms/passwordForgot.d.ts +0 -2
  105. package/lib/templates/sms/passwordRecovery.d.ts +0 -2
  106. package/lib/templates/sms/verifyEmail.d.ts +0 -2
  107. package/lib/templates/sms/verifyPhone.d.ts +0 -2
  108. package/lib/templates/sms/welcome.d.ts +0 -2
  109. package/lib/types/apps.d.ts +0 -44
  110. package/lib/types/arangodb.d.ts +0 -17
  111. package/lib/types/auth.d.ts +0 -7
  112. package/lib/types/connections.d.ts +0 -8
  113. package/lib/types/conversations.d.ts +0 -11
  114. package/lib/types/email.d.ts +0 -12
  115. package/lib/types/files.d.ts +0 -26
  116. package/lib/types/google.d.ts +0 -27
  117. package/lib/types/groups.d.ts +0 -22
  118. package/lib/types/images.d.ts +0 -42
  119. package/lib/types/index.d.ts +0 -18
  120. package/lib/types/locations.d.ts +0 -20
  121. package/lib/types/messages.d.ts +0 -27
  122. package/lib/types/notifications.d.ts +0 -19
  123. package/lib/types/payments.d.ts +0 -115
  124. package/lib/types/posts.d.ts +0 -47
  125. package/lib/types/statistics.d.ts +0 -3
  126. package/lib/types/tags.d.ts +0 -15
  127. package/lib/types/users.d.ts +0 -80
  128. package/lib/types/websocket.d.ts +0 -14
  129. package/lib/utils/analytics.d.ts +0 -14
  130. package/lib/utils/arangodb.d.ts +0 -9
  131. package/lib/utils/auth.d.ts +0 -5
  132. package/lib/utils/graphql.d.ts +0 -1
  133. package/lib/utils/index.d.ts +0 -6
  134. package/lib/utils/objects.d.ts +0 -3
  135. package/lib/utils/session.d.ts +0 -18
package/README.md CHANGED
@@ -18,25 +18,25 @@ $ gulp # Compile and launch
18
18
  Usage
19
19
  -----
20
20
 
21
- #### `gulp` also `gulp dev`
21
+ #### `npm run dev`
22
22
  Runs the webpack build system just like in `compile` but enables HMR. The webpack dev server can be found at `localhost:3000`.
23
23
 
24
- #### `gulp compile`
24
+ #### `npm run compile`
25
25
  Runs the Webpack build system with your current NODE_ENV and compiles the application to disk (`~/dist`). Production builds will fail on eslint errors (but not on warnings).
26
26
 
27
- #### `gulp test`
27
+ #### `npm run test`
28
28
  Runs unit tests with Karma.
29
29
 
30
- #### `gulp deploy`
30
+ #### `npm run deploy`
31
31
  Helper script to run tests and then, on success, compile your application.
32
32
 
33
- #### `gulp db:get:s3`
33
+ #### `npm run db:get:s3`
34
34
  Get a copy of the latest database data from S3 and import into your local database
35
35
 
36
- #### `gulp db:get:direct`
36
+ #### `npm run db:get:direct`
37
37
  Get a copy of the latest database data from the production database and import into your local database
38
38
 
39
- #### `gulp db:save`
39
+ #### `npm run db:save`
40
40
  Get a copy of the latest database data from the production database and save to S3
41
41
 
42
42
  ### Configuration
@@ -1,47 +1,32 @@
1
1
  var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
5
  var __getProtoOf = Object.getPrototypeOf;
9
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
- var __spreadValues = (a, b) => {
13
- for (var prop in b || (b = {}))
14
- if (__hasOwnProp.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- if (__getOwnPropSymbols)
17
- for (var prop of __getOwnPropSymbols(b)) {
18
- if (__propIsEnum.call(b, prop))
19
- __defNormalProp(a, prop, b[prop]);
20
- }
21
- return a;
22
- };
23
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
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
- };
28
7
  var __export = (target, all) => {
29
- __markAsModule(target);
30
8
  for (var name in all)
31
9
  __defProp(target, name, { get: all[name], enumerable: true });
32
10
  };
33
- var __reExport = (target, module2, desc) => {
34
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
35
- for (let key of __getOwnPropNames(module2))
36
- if (!__hasOwnProp.call(target, key) && key !== "default")
37
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
38
16
  }
39
- return target;
17
+ return to;
40
18
  };
41
- var __toModule = (module2) => {
42
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
43
- };
44
- __export(exports, {
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var conversations_exports = {};
29
+ __export(conversations_exports, {
45
30
  addUserToConversation: () => addUserToConversation,
46
31
  deleteUserFromConversation: () => deleteUserFromConversation,
47
32
  getConnectionUsers: () => getConnectionUsers,
@@ -50,26 +35,36 @@ __export(exports, {
50
35
  getConversations: () => getConversations,
51
36
  getDirectConversation: () => getDirectConversation,
52
37
  getDirectConversationOld: () => getDirectConversationOld,
38
+ parseConversationOptions: () => parseConversationOptions,
53
39
  updateConversation: () => updateConversation
54
40
  });
55
- var import_utils = __toModule(require("@nlabs/utils"));
56
- var import_arangojs = __toModule(require("arangojs"));
57
- var import_cloneDeep = __toModule(require("lodash/cloneDeep"));
58
- var import_isEmpty = __toModule(require("lodash/isEmpty"));
59
- var import_utils2 = __toModule(require("../utils"));
60
- var import_analytics = __toModule(require("../utils/analytics"));
61
- var import_images = __toModule(require("./images"));
62
- var import_users = __toModule(require("./users"));
41
+ module.exports = __toCommonJS(conversations_exports);
42
+ var import_utils = require("@nlabs/utils");
43
+ var import_arangojs = require("arangojs");
44
+ var import_cloneDeep = __toESM(require("lodash/cloneDeep"));
45
+ var import_utils2 = require("../utils");
46
+ var import_analytics = require("../utils/analytics");
47
+ var import_images = require("./images");
48
+ var import_users = require("./users");
63
49
  const eventCategory = "conversations";
64
- const getConversations = (context, { from, to }) => {
50
+ const parseConversationOptions = (options = {}) => {
51
+ const {
52
+ from = 0,
53
+ to = 30
54
+ } = options;
55
+ return {
56
+ limit: (0, import_utils2.getLimit)(from, to)
57
+ };
58
+ };
59
+ const getConversations = (context, options) => {
65
60
  const action = "getConversations";
66
61
  const { database, session: { userId: sessionId } } = context;
67
- const limit = (0, import_utils2.getLimit)(from, to);
62
+ const { limit } = parseConversationOptions(options);
68
63
  const sessionDocId = `users/${sessionId}`;
69
- const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${sessionDocId}" hasConversations
64
+ const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${sessionDocId}" hasConversation
70
65
  ${limit.aql}
71
66
  LET users = (
72
- FOR u, uc IN 1..1 INBOUND c._id hasConversations
67
+ FOR u, uc IN 1..1 INBOUND c._id hasConversation
73
68
  FILTER u._id != "${sessionDocId}"
74
69
  RETURN u
75
70
  )
@@ -105,7 +100,7 @@ const getDirectConversation = async (context, fromId, toId) => {
105
100
  label: "db_error"
106
101
  }, error, context).then(() => null));
107
102
  if (conversation) {
108
- return __spreadProps(__spreadValues({}, conversation), { users: [user] });
103
+ return { ...conversation, users: [user] };
109
104
  }
110
105
  const now = Date.now();
111
106
  const insert = {
@@ -117,17 +112,17 @@ const getDirectConversation = async (context, fromId, toId) => {
117
112
  const insertQuery = import_arangojs.aql`INSERT ${insert} IN conversations RETURN NEW`;
118
113
  const updatedConversation = await database.query(insertQuery).then((cursor) => cursor.next());
119
114
  await Promise.all(userIds.map((userId) => {
120
- const edgeId = (0, import_utils.createHash)(`hasConversations-${userId}-${conversationId}`);
115
+ const edgeId = (0, import_utils.createHash)(`hasConversation-${userId}-${conversationId}`);
121
116
  const edge = {
122
117
  _from: `users/${userId}`,
123
118
  _key: edgeId,
124
119
  _to: `conversations/${conversationId}`,
125
120
  added: Date.now()
126
121
  };
127
- const insertEdgeQuery = import_arangojs.aql`INSERT ${edge} IN hasConversations RETURN NEW`;
122
+ const insertEdgeQuery = import_arangojs.aql`INSERT ${edge} IN hasConversation RETURN NEW`;
128
123
  return database.query(insertEdgeQuery);
129
124
  }));
130
- return __spreadProps(__spreadValues({}, updatedConversation), { users: [user] });
125
+ return { ...updatedConversation, users: [user] };
131
126
  } catch (updateError) {
132
127
  return (0, import_analytics.logError)({
133
128
  action,
@@ -146,7 +141,7 @@ const getConnectionUsers = (context, conversationId, includeAll = false, isDirec
146
141
  if (isDirect) {
147
142
  filters.push(`p.vertices[0].isDirect == ${isDirect}`);
148
143
  }
149
- const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversations
144
+ const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversation
150
145
  OPTIONS {vertexCollections: "users"}
151
146
  FOR c IN connections
152
147
  FILTER ${filters.join(" && ")}
@@ -167,7 +162,7 @@ const getConversationUsers = (context, conversationId, includeAll = false, isDir
167
162
  if (isDirect) {
168
163
  filters.push(`p.vertices[0].isDirect == ${isDirect}`);
169
164
  }
170
- const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversations
165
+ const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversation
171
166
  OPTIONS {vertexCollections: "users"}
172
167
  FILTER ${filters.join(" && ")}
173
168
  RETURN u`;
@@ -184,12 +179,12 @@ const getDirectConversationOld = (context, userId) => {
184
179
  const sessionDocId = `users/${sessionId}`;
185
180
  const formatUserId = (0, import_utils.parseArangoId)(userId);
186
181
  const aqlQry = import_arangojs.aql`LET from = (
187
- FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversations
182
+ FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
188
183
  FILTER c.direct == true
189
184
  RETURN c
190
185
  )
191
186
  LET to = (
192
- FOR c, e IN 1..1 OUTBOUND ${formatUserId} hasConversations
187
+ FOR c, e IN 1..1 OUTBOUND ${formatUserId} hasConversation
193
188
  FILTER c.direct == true
194
189
  RETURN c
195
190
  )
@@ -212,16 +207,16 @@ const getConversation = (context, convoId) => {
212
207
  const { database, session: { userId: sessionId } } = context;
213
208
  const sessionDocId = `users/${sessionId}`;
214
209
  const convoDocId = `conversations/${(0, import_utils.parseId)(convoId)}`;
215
- const aqlQry = import_arangojs.aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversations
210
+ const aqlQry = import_arangojs.aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
216
211
  FILTER c._id == ${convoDocId}
217
212
  LET u = (
218
- FOR inUser, inEdge IN 1..1 INBOUND ${convoDocId} hasConversations
213
+ FOR inUser, inEdge IN 1..1 INBOUND ${convoDocId} hasConversation
219
214
  RETURN inUser
220
215
  )
221
216
  LIMIT 1
222
217
  RETURN MERGE(c, {users: u})`;
223
218
  return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation = {}) => {
224
- if (!(0, import_isEmpty.default)(conversation)) {
219
+ if (conversation) {
225
220
  conversation.users = conversation.users.map((user) => {
226
221
  const { imageId, userId } = user;
227
222
  const thumbUrlData = {
@@ -229,10 +224,11 @@ const getConversation = (context, convoId) => {
229
224
  isThumb: true,
230
225
  userId
231
226
  };
232
- return __spreadProps(__spreadValues({}, user), {
227
+ return {
228
+ ...user,
233
229
  name: (0, import_users.getDisplayName)(user),
234
- thumb: (0, import_images.getUserImageUrl)(thumbUrlData)
235
- });
230
+ thumb: (0, import_images.getImageUrl)(thumbUrlData)
231
+ };
236
232
  });
237
233
  return conversation;
238
234
  }
@@ -254,14 +250,16 @@ const updateConversation = (context, conversation) => {
254
250
  const formatConversationId = (0, import_utils.parseId)(conversationId);
255
251
  const now = Date.now();
256
252
  const update = {
253
+ // Direct message
257
254
  direct,
258
255
  modified: now,
259
256
  name
260
257
  };
261
- const insert = __spreadProps(__spreadValues({}, (0, import_cloneDeep.default)(update)), {
258
+ const insert = {
259
+ ...(0, import_cloneDeep.default)(update),
262
260
  _key: formatConversationId,
263
261
  added: now
264
- });
262
+ };
265
263
  const aqlQry = import_arangojs.aql`UPSERT {_key: ${formatConversationId} }
266
264
  INSERT ${insert}
267
265
  UPDATE ${update}
@@ -277,9 +275,9 @@ const addUserToConversation = (context, convoId, userId) => {
277
275
  const { database } = context;
278
276
  const formatConvoId = (0, import_utils.parseId)(convoId);
279
277
  const formatUserId = (0, import_utils.parseId)(userId);
280
- const convoDocId = `conversations/${formatConvoId} `;
281
- const userDocId = `users/${formatUserId} `;
282
- const aqlQry = import_arangojs.aql`FOR c IN hasConversations
278
+ const convoDocId = `conversations/${formatConvoId}`;
279
+ const userDocId = `users/${formatUserId}`;
280
+ const aqlQry = import_arangojs.aql`FOR c IN hasConversation
283
281
  FILTER c._from == ${userDocId} && c._to == ${convoDocId}
284
282
  LIMIT 1
285
283
  RETURN c`;
@@ -287,7 +285,7 @@ const addUserToConversation = (context, convoId, userId) => {
287
285
  if (!!conversationEdge) {
288
286
  return conversationEdge;
289
287
  }
290
- const edgeCollection = database.collection("hasConversations");
288
+ const edgeCollection = database.collection("hasConversation");
291
289
  const edgeId = (0, import_utils.createHash)(`convo - ${formatConvoId} -${formatUserId} `);
292
290
  const edge = {
293
291
  _from: userDocId,
@@ -307,12 +305,12 @@ const deleteUserFromConversation = (context, convoId, userId) => {
307
305
  const { database } = context;
308
306
  const formatConvoId = (0, import_utils.parseId)(convoId);
309
307
  const formatUserId = (0, import_utils.parseId)(userId);
310
- const convoDocId = `conversations / ${formatConvoId} `;
311
- const userDocId = `users/${formatUserId} `;
312
- const aqlQry = import_arangojs.aql`FOR c IN hasConversations
308
+ const convoDocId = `conversations/${formatConvoId}`;
309
+ const userDocId = `users/${formatUserId}`;
310
+ const aqlQry = import_arangojs.aql`FOR c IN hasConversation
313
311
  FILTER c._from == ${userDocId} && c._to == ${convoDocId}
314
312
  LIMIT 1
315
- REMOVE c IN hasConversations
313
+ REMOVE c IN hasConversation
316
314
  RETURN OLD`;
317
315
  return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
318
316
  action,
@@ -330,6 +328,7 @@ const deleteUserFromConversation = (context, convoId, userId) => {
330
328
  getConversations,
331
329
  getDirectConversation,
332
330
  getDirectConversationOld,
331
+ parseConversationOptions,
333
332
  updateConversation
334
333
  });
335
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0LCBDb25uZWN0aW9uVHlwZSwgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0VXNlckltYWdlVXJsfSBmcm9tICcuL2ltYWdlcyc7XG5pbXBvcnQge2dldERpc3BsYXlOYW1lLCBnZXRVc2VyfSBmcm9tICcuL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2NvbnZlcnNhdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB7ZnJvbSwgdG99KTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCBcIiR7c2Vzc2lvbkRvY0lkfVwiIGhhc0NvbnZlcnNhdGlvbnNcbiAgICAke2xpbWl0LmFxbH1cbiAgICBMRVQgdXNlcnMgPSAoXG4gICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkIGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIEZJTFRFUiB1Ll9pZCAhPSBcIiR7c2Vzc2lvbkRvY0lkfVwiXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1c2Vyc30pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQ6IHN0cmluZyA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkOiBzdHJpbmcgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHM6IHN0cmluZ1tdID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkczogc3RyaW5nW10gPSB1c2VySWRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmKGEgPiBiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyID0gYXdhaXQgZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG5cbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgIF9rZXk6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgIGlzRGlyZWN0OiB0cnVlLFxuICAgICAgbW9kaWZpZWQ6IG5vd1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0UXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoaW5zZXJ0UXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGhhc0NvbnZlcnNhdGlvbnMtJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG4gICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKHVwZGF0ZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCB1cGRhdGVFcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgaW5jbHVkZUFsbDogYm9vbGVhbiA9IGZhbHNlLFxuICBpc0RpcmVjdD86IGJvb2xlYW5cbik6IFByb21pc2U8Q29ubmVjdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25zXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIGluY2x1ZGVBbGw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgaXNEaXJlY3Q/OiBib29sZWFuXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25zXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgY29uc29sZS5sb2coe2FxbFFyeX0pO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uT2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodXNlcklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBmcm9tID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uc1xuICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbiAgICAgIFJFVFVSTiBjXG4gICAgKVxuICAgIExFVCB0byA9IChcbiAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtmb3JtYXRVc2VySWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIEZJTFRFUiBjLmRpcmVjdCA9PSB0cnVlXG4gICAgICBSRVRVUk4gY1xuICAgIClcbiAgICBMRVQgY29udmVyc2F0aW9uID0gRklSU1QoSU5URVJTRUNUSU9OKGZyb20sIHRvKSlcbiAgICBMRVQgdXNlcnMgPSAhSVNfTlVMTChjb252ZXJzYXRpb24pICYmIChcbiAgICAgIEZPUiBnIElOWyR7c2Vzc2lvbkRvY0lkfSwgJHtmb3JtYXRVc2VySWR9XVxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiBnID09IHUuX2lkXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4gSVNfTlVMTChjb252ZXJzYXRpb24pID8gbnVsbCA6IE1FUkdFKGNvbnZlcnNhdGlvbiwge3VzZXJzOiB1c2Vyc30pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252b0RvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udm9JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252b0RvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZvRG9jSWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IHtcbiAgICAgIGlmKCFpc0VtcHR5KGNvbnZlcnNhdGlvbikpIHtcbiAgICAgICAgY29udmVyc2F0aW9uLnVzZXJzID0gY29udmVyc2F0aW9uLnVzZXJzLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2ltYWdlSWQsIHVzZXJJZH0gPSB1c2VyO1xuICAgICAgICAgIGNvbnN0IHRodW1iVXJsRGF0YTogSW1hZ2VVcmxEYXRhID0ge1xuICAgICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICAgIGlzVGh1bWI6IHRydWUsXG4gICAgICAgICAgICB1c2VySWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWUodXNlciksXG4gICAgICAgICAgICB0aHVtYjogZ2V0VXNlckltYWdlVXJsKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBkaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udm9JZH0gYDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9IGA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBoYXNDb252ZXJzYXRpb25zXG4gICAgRklMVEVSIGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGMuX3RvID09ICR7Y29udm9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhY29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9ucycpO1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBjb252byAtICR7Zm9ybWF0Q29udm9JZH0gLSR7Zm9ybWF0VXNlcklkfSBgKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZvRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZvSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zIC8gJHtmb3JtYXRDb252b0lkfSBgO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH0gYDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGhhc0NvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgYy5fdG8gPT0gJHtjb252b0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgYyBJTiBoYXNDb252ZXJzYXRpb25zXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLG1CQUFpRDtBQUNqRCxzQkFBa0I7QUFJbEIsdUJBQXNCO0FBQ3RCLHFCQUFvQjtBQUlwQixvQkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLG9CQUE4QjtBQUM5QixtQkFBc0M7QUFFdEMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxtQkFBbUIsQ0FBQyxTQUFxQixFQUFDLE1BQU0sU0FBcUM7QUFDaEcsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxTQUFTLEVBQUMsUUFBUSxnQkFBYztBQUNqRCxRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxlQUF1QixTQUFTO0FBQ3RDLFFBQU0sU0FBaUIsOEJBQThCO0FBQUEsTUFDakQsTUFBTTtBQUFBO0FBQUE7QUFBQSx5QkFHYTtBQUFBO0FBQUE7QUFBQTtBQUt2QixTQUFPLFNBQVMsTUFBTSxRQUNuQixLQUFLLENBQUMsV0FBd0IsT0FBTyxPQUNyQyxNQUFNLENBQUMsVUFBaUIsK0JBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxTQUFTLEtBQUssTUFBTTtBQUFBO0FBRzNCLE1BQU0sd0JBQXdCLE9BQ25DLFNBQ0EsUUFDQSxTQUM4QjtBQUM5QixRQUFNLFNBQWlCO0FBQ3ZC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QztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxTQUFTLEtBQUssTUFBTTtBQUFBO0FBRzNCLE1BQU0sd0JBQXdCLENBQUMsU0FBcUIsU0FBaUIsV0FBbUI7QUFDN0YsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLGdCQUF3QiwwQkFBUTtBQUN0QyxRQUFNLGVBQXVCLDBCQUFRO0FBQ3JDLFFBQU0sYUFBcUIsaUJBQWlCO0FBQzVDLFFBQU0sWUFBb0IsU0FBUztBQUVuQyxRQUFNLFNBQW1CO0FBQUEsd0JBQ0gseUJBQXlCO0FBQUE7QUFBQTtBQUkvQyxTQUFPLFNBQVMsTUFBTSxRQUNuQixLQUFLLENBQUMsV0FBd0IsT0FBTyxRQUNyQyxLQUFLLENBQUMscUJBQXFCO0FBQzFCLFFBQUcsQ0FBQyxDQUFDLGtCQUFrQjtBQUNyQixhQUFPO0FBQUE7QUFHVCxVQUFNLGlCQUFpQyxTQUFTLFdBQVc7QUFDM0QsVUFBTSxTQUFpQiw2QkFBVyxXQUFXLGtCQUFrQjtBQUUvRCxVQUFNLE9BQXlCO0FBQUEsTUFDN0IsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsT0FBTyxLQUFLO0FBQUE7QUFHZCxXQUFPLGVBQWUsS0FBSyxNQUFNLEVBQUMsV0FBVyxRQUFPLEtBQUssTUFBTTtBQUFBLEtBRWhFLE1BQU0sQ0FBQyxVQUFpQiwrQkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsS0FDTixPQUFPLFNBQVMsS0FBSyxNQUFNO0FBQUE7QUFHM0IsTUFBTSw2QkFBNkIsQ0FBQyxTQUFxQixTQUFpQixXQUFtQjtBQUNsRyxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sZ0JBQXdCLDBCQUFRO0FBQ3RDLFFBQU0sZUFBdUIsMEJBQVE7QUFDckMsUUFBTSxhQUFxQixtQkFBbUI7QUFDOUMsUUFBTSxZQUFvQixTQUFTO0FBRW5DLFFBQU0sU0FBbUI7QUFBQSx3QkFDSCx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFLL0MsU0FBTyxTQUFTLE1BQU0sUUFDbkIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsTUFBTSxDQUFDLFVBQWlCLCtCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sU0FBUyxLQUFLLE1BQU07QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
334
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuaW1wb3J0IHtDb25uZWN0aW9uVHlwZSwgQ29udmVyc2F0aW9uT3B0aW9ucywgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0SW1hZ2VVcmx9IGZyb20gJy4vaW1hZ2VzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWUsIGdldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwLFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0byksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCBcIiR7c2Vzc2lvbkRvY0lkfVwiIGhhc0NvbnZlcnNhdGlvblxuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgdS5faWQgIT0gXCIke3Nlc3Npb25Eb2NJZH1cIlxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZDogc3RyaW5nID0gcGFyc2VJZCh0b0lkKTtcbiAgICBjb25zdCB1c2VySWRzOiBzdHJpbmdbXSA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHM6IHN0cmluZ1tdID0gdXNlcklkcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZihhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZihhID4gYikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3QgdXNlcjogVXNlciA9IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuXG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcblxuICAgIGlmKGNvbnZlcnNhdGlvbikge1xuICAgICAgcmV0dXJuIHsuLi5jb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICAgIH1cblxuICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICAgIG1vZGlmaWVkOiBub3dcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGluc2VydFF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRFZGdlUXVlcnkpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiB7Li4udXBkYXRlZENvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gIH0gY2F0Y2godXBkYXRlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHVwZGF0ZUVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgY29uc29sZS5sb2coe2FxbFFyeX0pO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uT2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodXNlcklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBmcm9tID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIGNcbiAgICApXG4gICAgTEVUIHRvID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke2Zvcm1hdFVzZXJJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIGNcbiAgICApXG4gICAgTEVUIGNvbnZlcnNhdGlvbiA9IEZJUlNUKElOVEVSU0VDVElPTihmcm9tLCB0bykpXG4gICAgTEVUIHVzZXJzID0gIUlTX05VTEwoY29udmVyc2F0aW9uKSAmJiAoXG4gICAgICBGT1IgZyBJTlske3Nlc3Npb25Eb2NJZH0sICR7Zm9ybWF0VXNlcklkfV1cbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgZyA9PSB1Ll9pZFxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIElTX05VTEwoY29udmVyc2F0aW9uKSA/IG51bGwgOiBNRVJHRShjb252ZXJzYXRpb24sIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udm9Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZvSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252b0RvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZvRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgICBpc1RodW1iOiB0cnVlLFxuICAgICAgICAgICAgdXNlcklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lKHVzZXIpLFxuICAgICAgICAgICAgdGh1bWI6IGdldEltYWdlVXJsKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBkaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udm9JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGMuX3RvID09ICR7Y29udm9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhY29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGNvbnZvIC0gJHtmb3JtYXRDb252b0lkfSAtJHtmb3JtYXRVc2VySWR9IGApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udm9Eb2NJZCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udm9Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252b0lkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgYy5fdG8gPT0gJHtjb252b0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBaUQ7QUFDakQsc0JBQWtCO0FBSWxCLHVCQUFzQjtBQUl0QixJQUFBQSxnQkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLG9CQUEwQjtBQUMxQixtQkFBc0M7QUFFdEMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSwyQkFBMkIsQ0FBQyxVQUErQixDQUFDLE1BQU07QUFDN0UsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLFdBQU8sd0JBQVMsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sbUJBQW1CLENBQUMsU0FBcUIsWUFBMEM7QUFDOUYsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxTQUFTLEVBQUMsUUFBUSxVQUFTLEVBQUMsSUFBSTtBQUNqRCxRQUFNLEVBQUMsTUFBSyxJQUFJLHlCQUF5QixPQUFPO0FBQ2hELFFBQU0sZUFBdUIsU0FBUyxTQUFTO0FBQy9DLFFB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QyxFQUFFLEtBQUssTUFBTSxJQUFJO0FBQUEsRUFDckUsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxjQUFpQiwyQkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxJQUFJLENBQUM7QUFDdkM7QUFFTyxNQUFNLDZCQUE2QixDQUFDLFNBQXFCLFNBQWlCLFdBQW1CO0FBQ2xHLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLG9CQUF3QixzQkFBUSxPQUFPO0FBQzdDLFFBQU0sbUJBQXVCLHNCQUFRLE1BQU07QUFDM0MsUUFBTSxhQUFxQixpQkFBaUIsYUFBYTtBQUN6RCxRQUFNLFlBQW9CLFNBQVMsWUFBWTtBQUUvQyxRQUFNLFNBQW1CO0FBQUEsd0JBQ0gsU0FBUyxnQkFBZ0IsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUt6RCxTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxNQUFNLENBQUMsY0FBaUIsMkJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLE9BQU8sRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ3ZDOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfdXRpbHMiLCAiY2xvbmVEZWVwIiwgImNvbnZlcnNhdGlvbiJdCn0K
@@ -2,43 +2,31 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
5
  var __getProtoOf = Object.getPrototypeOf;
7
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __spreadValues = (a, b) => {
11
- for (var prop in b || (b = {}))
12
- if (__hasOwnProp.call(b, prop))
13
- __defNormalProp(a, prop, b[prop]);
14
- if (__getOwnPropSymbols)
15
- for (var prop of __getOwnPropSymbols(b)) {
16
- if (__propIsEnum.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- }
19
- return a;
20
- };
21
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
22
- var __require = typeof require !== "undefined" ? require : (x) => {
23
- throw new Error('Dynamic require of "' + x + '" is not supported');
24
- };
25
7
  var __export = (target, all) => {
26
- __markAsModule(target);
27
8
  for (var name in all)
28
9
  __defProp(target, name, { get: all[name], enumerable: true });
29
10
  };
30
- var __reExport = (target, module2, desc) => {
31
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
32
- for (let key of __getOwnPropNames(module2))
33
- if (!__hasOwnProp.call(target, key) && key !== "default")
34
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
35
16
  }
36
- return target;
37
- };
38
- var __toModule = (module2) => {
39
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
17
+ return to;
40
18
  };
41
- __export(exports, {
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var dynamodb_exports = {};
29
+ __export(dynamodb_exports, {
42
30
  dynamoDel: () => dynamoDel,
43
31
  dynamoGet: () => dynamoGet,
44
32
  dynamoGetList: () => dynamoGetList,
@@ -47,8 +35,9 @@ __export(exports, {
47
35
  dynamoUpdate: () => dynamoUpdate,
48
36
  parseDynamo: () => parseDynamo
49
37
  });
50
- var import_aws_sdk = __toModule(require("aws-sdk"));
51
- var import_config = __toModule(require("../config"));
38
+ module.exports = __toCommonJS(dynamodb_exports);
39
+ var import_aws_sdk = __toESM(require("aws-sdk"));
40
+ var import_config = require("../config");
52
41
  const dynamoGet = (params) => new Promise((resolve, reject) => {
53
42
  import_aws_sdk.default.config.update(import_config.Config.get("aws"));
54
43
  const dynamodb = new import_aws_sdk.DynamoDB();
@@ -86,7 +75,7 @@ const dynamoGetList = (params, index) => new Promise((resolve, reject) => {
86
75
  import_aws_sdk.default.config.update(import_config.Config.get("aws"));
87
76
  const dynamodb = new import_aws_sdk.DynamoDB();
88
77
  const { ConsistentRead: consistentRead } = params;
89
- const updatedParams = __spreadValues({}, params);
78
+ const updatedParams = { ...params };
90
79
  if (index) {
91
80
  updatedParams.ExclusiveStartKey = index;
92
81
  }
@@ -155,4 +144,4 @@ const dynamoDel = (params) => new Promise((resolve, reject) => {
155
144
  dynamoUpdate,
156
145
  parseDynamo
157
146
  });
158
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgYXdzLCB7RHluYW1vREJ9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHtcbiAgQmF0Y2hXcml0ZUl0ZW1JbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1PdXRwdXQsXG4gIERlbGV0ZUl0ZW1JbnB1dCxcbiAgRGVsZXRlSXRlbU91dHB1dCxcbiAgR2V0SXRlbUlucHV0LFxuICBHZXRJdGVtT3V0cHV0LFxuICBQdXRJdGVtSW5wdXQsXG4gIFB1dEl0ZW1PdXRwdXQsXG4gIFF1ZXJ5SW5wdXQsXG4gIFF1ZXJ5T3V0cHV0LFxuICBVcGRhdGVJdGVtSW5wdXQsXG4gIFVwZGF0ZUl0ZW1PdXRwdXRcbn0gZnJvbSAnYXdzLXNkay9jbGllbnRzL2R5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9HZXQgPSAocGFyYW1zOiBHZXRJdGVtSW5wdXQpOiBQcm9taXNlPEdldEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcbiAgcGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG5cbiAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUR5bmFtbyA9IChyZXN1bHRzOiBRdWVyeU91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtc30gPSByZXN1bHRzO1xuICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGZvcihsZXQgaWR4OiBudW1iZXIgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICBjb25zdCB0bXAgPSBpdGVtc1tpZHhdO1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3Ioa2V5IGluIHRtcCkge1xuICAgICAgaWYodG1wLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgaWYodG1wW2tleV0uUykge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uUy50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYodG1wW2tleV0uTikge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VGbG9hdCh0bXBba2V5XS5OKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLkI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLnB1c2gob2JqKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldExpc3QgPSAocGFyYW1zOiBRdWVyeUlucHV0LCBpbmRleCk6IFByb21pc2U8R2V0SXRlbU91dHB1dFtdPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG4gIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICBjb25zdCB1cGRhdGVkUGFyYW1zID0gey4uLnBhcmFtc307XG5cbiAgaWYoaW5kZXgpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkV4Y2x1c2l2ZVN0YXJ0S2V5ID0gaW5kZXg7XG4gIH1cblxuICBpZighY29uc2lzdGVudFJlYWQpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gIH1cblxuICBkeW5hbW9kYi5xdWVyeSh1cGRhdGVkUGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFF1ZXJ5T3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICAvLyBTYXZlIGxpc3Qgb2YgaXRlbXNcbiAgICBjb25zdCBsaXN0OiBhbnlbXSA9IHBhcnNlRHluYW1vKG91dHB1dCk7XG4gICAgY29uc3Qge0xhc3RFdmFsdWF0ZWRLZXk6IGxhc3RLZXl9ID0gb3V0cHV0O1xuXG4gICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTYXZlIGxhc3QgaW5kZXggYmVmb3JlIGxvb3BpbmdcbiAgICAgIHJldHVybiBkeW5hbW9HZXRMaXN0KHBhcmFtcywgbGFzdEtleSk7XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgY29tcGxldGUsIHJldHVybiBmaW5hbCBsaXN0XG4gICAgcmV0dXJuIHJlc29sdmUobGlzdCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXQgPSAocGFyYW1zOiBQdXRJdGVtSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi5wdXRJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IFB1dEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9VcGRhdGUgPSAocGFyYW1zOiBVcGRhdGVJdGVtSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtSW5wdXQpOiBQcm9taXNlPEJhdGNoV3JpdGVJdGVtT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUlucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtT3V0cHV0PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHFCQUE0QjtBQWdCNUIsb0JBQXFCO0FBSWQsTUFBTSxZQUFZLENBQUMsV0FBaUQsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzFHLHlCQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJO0FBQzdCLFFBQU0sV0FBcUIsSUFBSTtBQUMvQixTQUFPLGlCQUFpQjtBQUV4QixXQUFTLFFBQVEsUUFBUSxDQUFDLE9BQWMsWUFBMkI7QUFDakUsUUFBRyxPQUFPO0FBQ1IsYUFBTyxPQUFPO0FBQUE7QUFHaEIsV0FBTyxRQUFRO0FBQUE7QUFBQTtBQUlaLE1BQU0sY0FBYyxDQUFDLFlBQWdDO0FBQzFELFFBQU0sRUFBQyxPQUFPLFVBQVM7QUFD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
147
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgYXdzLCB7RHluYW1vREJ9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHtcbiAgQmF0Y2hXcml0ZUl0ZW1JbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1PdXRwdXQsXG4gIERlbGV0ZUl0ZW1JbnB1dCxcbiAgRGVsZXRlSXRlbU91dHB1dCxcbiAgR2V0SXRlbUlucHV0LFxuICBHZXRJdGVtT3V0cHV0LFxuICBQdXRJdGVtSW5wdXQsXG4gIFB1dEl0ZW1PdXRwdXQsXG4gIFF1ZXJ5SW5wdXQsXG4gIFF1ZXJ5T3V0cHV0LFxuICBVcGRhdGVJdGVtSW5wdXQsXG4gIFVwZGF0ZUl0ZW1PdXRwdXRcbn0gZnJvbSAnYXdzLXNkay9jbGllbnRzL2R5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9HZXQgPSAocGFyYW1zOiBHZXRJdGVtSW5wdXQpOiBQcm9taXNlPEdldEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcbiAgcGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG5cbiAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUR5bmFtbyA9IChyZXN1bHRzOiBRdWVyeU91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtc30gPSByZXN1bHRzO1xuICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGZvcihsZXQgaWR4OiBudW1iZXIgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICBjb25zdCB0bXAgPSBpdGVtc1tpZHhdO1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3Ioa2V5IGluIHRtcCkge1xuICAgICAgaWYodG1wLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgaWYodG1wW2tleV0uUykge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uUy50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYodG1wW2tleV0uTikge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VGbG9hdCh0bXBba2V5XS5OKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLkI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLnB1c2gob2JqKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldExpc3QgPSAocGFyYW1zOiBRdWVyeUlucHV0LCBpbmRleCk6IFByb21pc2U8R2V0SXRlbU91dHB1dFtdPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG4gIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICBjb25zdCB1cGRhdGVkUGFyYW1zID0gey4uLnBhcmFtc307XG5cbiAgaWYoaW5kZXgpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkV4Y2x1c2l2ZVN0YXJ0S2V5ID0gaW5kZXg7XG4gIH1cblxuICBpZighY29uc2lzdGVudFJlYWQpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gIH1cblxuICBkeW5hbW9kYi5xdWVyeSh1cGRhdGVkUGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFF1ZXJ5T3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICAvLyBTYXZlIGxpc3Qgb2YgaXRlbXNcbiAgICBjb25zdCBsaXN0OiBhbnlbXSA9IHBhcnNlRHluYW1vKG91dHB1dCk7XG4gICAgY29uc3Qge0xhc3RFdmFsdWF0ZWRLZXk6IGxhc3RLZXl9ID0gb3V0cHV0O1xuXG4gICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTYXZlIGxhc3QgaW5kZXggYmVmb3JlIGxvb3BpbmdcbiAgICAgIHJldHVybiBkeW5hbW9HZXRMaXN0KHBhcmFtcywgbGFzdEtleSk7XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgY29tcGxldGUsIHJldHVybiBmaW5hbCBsaXN0XG4gICAgcmV0dXJuIHJlc29sdmUobGlzdCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXQgPSAocGFyYW1zOiBQdXRJdGVtSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi5wdXRJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IFB1dEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9VcGRhdGUgPSAocGFyYW1zOiBVcGRhdGVJdGVtSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtSW5wdXQpOiBQcm9taXNlPEJhdGNoV3JpdGVJdGVtT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUlucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtT3V0cHV0PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHFCQUE0QjtBQWdCNUIsb0JBQXFCO0FBSWQsTUFBTSxZQUFZLENBQUMsV0FBaUQsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzFHLGlCQUFBQSxRQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJLEtBQUssQ0FBQztBQUNuQyxRQUFNLFdBQXFCLElBQUksd0JBQVM7QUFDeEMsU0FBTyxpQkFBaUI7QUFFeEIsV0FBUyxRQUFRLFFBQVEsQ0FBQyxPQUFjLFlBQTJCO0FBQ2pFLFFBQUcsT0FBTztBQUNSLGFBQU8sT0FBTyxLQUFLO0FBQUEsSUFDckI7QUFFQSxXQUFPLFFBQVEsT0FBTztBQUFBLEVBQ3hCLENBQUM7QUFDSCxDQUFDO0FBRU0s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