@nlabs/reaktor 0.9.0 → 0.10.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 (357) hide show
  1. package/README.md +9 -0
  2. package/coverage/index.html +92 -47
  3. package/dist/actions/apps.js +242 -0
  4. package/dist/actions/connections.js +90 -0
  5. package/dist/actions/conversations.js +350 -0
  6. package/dist/actions/dynamodb.js +150 -0
  7. package/dist/actions/email.js +152 -0
  8. package/dist/actions/files.js +283 -0
  9. package/dist/actions/groups.js +292 -0
  10. package/dist/actions/images.js +735 -0
  11. package/dist/actions/index.js +66 -0
  12. package/dist/actions/ios.js +164 -0
  13. package/dist/actions/locations.js +122 -0
  14. package/dist/actions/messages.js +208 -0
  15. package/dist/actions/notifications.js +59 -0
  16. package/dist/actions/payments.js +497 -0
  17. package/dist/actions/personas.js +110 -0
  18. package/dist/actions/posts.js +595 -0
  19. package/dist/actions/reactions.js +322 -0
  20. package/dist/actions/s3.js +133 -0
  21. package/dist/actions/search.js +90 -0
  22. package/dist/actions/sms.js +108 -0
  23. package/dist/actions/statistics.js +62 -0
  24. package/dist/actions/subscription.js +220 -0
  25. package/dist/actions/tags.js +292 -0
  26. package/dist/actions/users.js +784 -0
  27. package/dist/actions/websockets.js +174 -0
  28. package/dist/adapters/arangoAdapter.js +46 -0
  29. package/dist/adapters/fileAdapter.js +76 -0
  30. package/dist/adapters/imageAdapter.js +40 -0
  31. package/dist/adapters/messageAdapter.js +49 -0
  32. package/dist/adapters/postAdapter.js +70 -0
  33. package/dist/adapters/reaktorAdapter.js +44 -0
  34. package/dist/adapters/tagAdapter.js +50 -0
  35. package/dist/adapters/userAdapter.js +115 -0
  36. package/dist/config.js +125 -0
  37. package/dist/index.js +66 -0
  38. package/dist/lambdas/actions/websockets.js +132 -0
  39. package/dist/lambdas/authorizer.js +67 -0
  40. package/dist/lambdas/connection.js +91 -0
  41. package/dist/lambdas/utils/message.js +42 -0
  42. package/dist/lambdas/utils/websocket.js +105 -0
  43. package/dist/mocks/conversation.js +35 -0
  44. package/dist/mocks/file.js +38 -0
  45. package/dist/mocks/group.js +47 -0
  46. package/dist/mocks/image.js +44 -0
  47. package/dist/mocks/nlabs.png +0 -0
  48. package/dist/mocks/post.js +55 -0
  49. package/dist/mocks/tag.js +37 -0
  50. package/dist/mocks/user.js +88 -0
  51. package/dist/mutations/index.js +26 -0
  52. package/dist/mutations/locations.js +44 -0
  53. package/dist/mutations/messages.js +86 -0
  54. package/dist/mutations/personas.js +100 -0
  55. package/dist/mutations/posts.js +53 -0
  56. package/dist/mutations/reactions.js +51 -0
  57. package/dist/mutations/statistics.js +39 -0
  58. package/dist/mutations/subscriptions.js +56 -0
  59. package/dist/mutations/tags.js +120 -0
  60. package/dist/mutations/users.js +116 -0
  61. package/dist/objectTypes/app.js +173 -0
  62. package/dist/objectTypes/bankAccount.js +76 -0
  63. package/dist/objectTypes/connection.js +48 -0
  64. package/dist/objectTypes/conversation.js +77 -0
  65. package/dist/objectTypes/creditCard.js +86 -0
  66. package/dist/objectTypes/document.js +46 -0
  67. package/dist/objectTypes/error.js +46 -0
  68. package/dist/objectTypes/external.js +74 -0
  69. package/dist/objectTypes/file.js +100 -0
  70. package/dist/objectTypes/filter.js +43 -0
  71. package/dist/objectTypes/group.js +123 -0
  72. package/dist/objectTypes/iapSubscription.js +40 -0
  73. package/dist/objectTypes/image.js +129 -0
  74. package/dist/objectTypes/index.js +68 -0
  75. package/dist/objectTypes/location.js +109 -0
  76. package/dist/objectTypes/message.js +96 -0
  77. package/dist/objectTypes/passcode.js +42 -0
  78. package/dist/objectTypes/persona.js +87 -0
  79. package/dist/objectTypes/plan.js +95 -0
  80. package/dist/objectTypes/post.js +125 -0
  81. package/dist/objectTypes/reaction.js +61 -0
  82. package/dist/objectTypes/relation.js +49 -0
  83. package/dist/objectTypes/search.js +72 -0
  84. package/dist/objectTypes/statistics.js +39 -0
  85. package/dist/objectTypes/subscription.js +117 -0
  86. package/dist/objectTypes/tag.js +65 -0
  87. package/dist/objectTypes/user.js +144 -0
  88. package/dist/queries/index.js +33 -0
  89. package/dist/queries/locations.js +45 -0
  90. package/dist/queries/messages.js +52 -0
  91. package/dist/queries/posts.js +154 -0
  92. package/dist/queries/reactions.js +56 -0
  93. package/dist/queries/statistics.js +39 -0
  94. package/dist/queries/subscriptions.js +44 -0
  95. package/dist/queries/tags.js +75 -0
  96. package/dist/queries/users.js +64 -0
  97. package/dist/templates/email/layout.js +302 -0
  98. package/dist/templates/email/passwordForgot.js +38 -0
  99. package/dist/templates/email/passwordRecovery.js +35 -0
  100. package/dist/templates/email/verifyEmail.js +38 -0
  101. package/dist/templates/email/welcome.js +38 -0
  102. package/dist/templates/sms/passwordForgot.js +24 -0
  103. package/dist/templates/sms/passwordRecovery.js +24 -0
  104. package/dist/templates/sms/verifyEmail.js +24 -0
  105. package/dist/templates/sms/verifyPhone.js +24 -0
  106. package/dist/templates/sms/welcome.js +24 -0
  107. package/dist/types/apps.js +32 -0
  108. package/{lib → dist}/types/arangodb.js +1 -1
  109. package/{lib → dist}/types/auth.js +1 -1
  110. package/{lib → dist}/types/connections.js +1 -1
  111. package/dist/types/conversations.js +16 -0
  112. package/{lib → dist}/types/email.js +1 -1
  113. package/dist/types/files.js +16 -0
  114. package/dist/types/google.js +16 -0
  115. package/{lib → dist}/types/groups.js +1 -1
  116. package/dist/types/images.js +16 -0
  117. package/dist/types/index.js +60 -0
  118. package/{lib → dist}/types/locations.js +1 -1
  119. package/{lib → dist}/types/messages.js +1 -1
  120. package/{lib → dist}/types/notifications.js +1 -1
  121. package/dist/types/payments.js +16 -0
  122. package/dist/types/personas.js +16 -0
  123. package/dist/types/posts.js +16 -0
  124. package/{lib → dist}/types/tags.js +1 -1
  125. package/dist/types/users.js +16 -0
  126. package/dist/types/websockets.js +16 -0
  127. package/dist/utils/adapterUtils.js +45 -0
  128. package/dist/utils/analyticsUtils.js +72 -0
  129. package/dist/utils/arangodbUtils.js +165 -0
  130. package/dist/utils/auth.js +57 -0
  131. package/dist/utils/index.js +30 -0
  132. package/dist/utils/session.js +60 -0
  133. package/lex.config.cjs +13 -0
  134. package/lib/actions/apps.d.ts +3 -3
  135. package/lib/actions/apps.js +38 -48
  136. package/lib/actions/connections.d.ts +4 -0
  137. package/lib/actions/connections.js +90 -0
  138. package/lib/actions/conversations.d.ts +1 -1
  139. package/lib/actions/conversations.js +32 -21
  140. package/lib/actions/email.d.ts +1 -1
  141. package/lib/actions/email.js +11 -11
  142. package/lib/actions/files.d.ts +2 -2
  143. package/lib/actions/files.js +4 -8
  144. package/lib/actions/groups.d.ts +2 -2
  145. package/lib/actions/groups.js +12 -12
  146. package/lib/actions/images.d.ts +5 -5
  147. package/lib/actions/images.js +120 -66
  148. package/lib/actions/index.d.ts +2 -0
  149. package/lib/actions/index.js +5 -1
  150. package/lib/actions/ios.js +2 -2
  151. package/lib/actions/locations.d.ts +4 -3
  152. package/lib/actions/locations.js +16 -4
  153. package/lib/actions/messages.d.ts +4 -3
  154. package/lib/actions/messages.js +26 -23
  155. package/lib/actions/notifications.d.ts +1 -1
  156. package/lib/actions/notifications.js +1 -1
  157. package/lib/actions/payments.js +63 -60
  158. package/lib/actions/personas.d.ts +3 -0
  159. package/lib/actions/personas.js +110 -0
  160. package/lib/actions/posts.d.ts +5 -2
  161. package/lib/actions/posts.js +55 -41
  162. package/lib/actions/reactions.js +2 -2
  163. package/lib/actions/search.d.ts +2 -2
  164. package/lib/actions/search.js +5 -5
  165. package/lib/actions/sms.d.ts +9 -3
  166. package/lib/actions/sms.js +9 -7
  167. package/lib/actions/statistics.d.ts +1 -1
  168. package/lib/actions/statistics.js +2 -2
  169. package/lib/actions/subscription.d.ts +2 -2
  170. package/lib/actions/subscription.js +12 -22
  171. package/lib/actions/tags.d.ts +8 -3
  172. package/lib/actions/tags.js +46 -21
  173. package/lib/actions/users.d.ts +38 -13
  174. package/lib/actions/users.js +291 -61
  175. package/lib/actions/websockets.d.ts +6 -5
  176. package/lib/actions/websockets.js +37 -35
  177. package/lib/adapters/arangoAdapter.d.ts +1 -1
  178. package/lib/adapters/arangoAdapter.js +1 -1
  179. package/lib/adapters/imageAdapter.d.ts +2 -0
  180. package/lib/adapters/imageAdapter.js +40 -0
  181. package/lib/adapters/messageAdapter.d.ts +2 -0
  182. package/lib/adapters/messageAdapter.js +49 -0
  183. package/lib/adapters/postAdapter.js +4 -4
  184. package/lib/adapters/tagAdapter.js +2 -2
  185. package/lib/adapters/userAdapter.js +10 -5
  186. package/lib/config.js +2 -2
  187. package/lib/index.d.ts +7 -0
  188. package/lib/index.js +44 -8
  189. package/lib/lambdas/actions/websockets.d.ts +7 -6
  190. package/lib/lambdas/actions/websockets.js +9 -5
  191. package/lib/lambdas/authorizer.js +4 -4
  192. package/lib/lambdas/connection.js +16 -17
  193. package/lib/lambdas/utils/message.js +1 -1
  194. package/lib/lambdas/utils/websocket.js +1 -1
  195. package/lib/mocks/image.js +3 -2
  196. package/lib/mocks/user.js +3 -3
  197. package/lib/mutations/index.d.ts +3 -0
  198. package/lib/mutations/index.js +26 -0
  199. package/lib/mutations/locations.d.ts +2 -0
  200. package/lib/mutations/locations.js +44 -0
  201. package/lib/mutations/messages.d.ts +2 -0
  202. package/lib/mutations/messages.js +86 -0
  203. package/lib/mutations/personas.d.ts +2 -0
  204. package/lib/mutations/personas.js +100 -0
  205. package/lib/mutations/posts.d.ts +2 -0
  206. package/lib/mutations/posts.js +53 -0
  207. package/lib/mutations/reactions.d.ts +2 -0
  208. package/lib/mutations/reactions.js +51 -0
  209. package/lib/mutations/statistics.d.ts +2 -0
  210. package/lib/mutations/statistics.js +39 -0
  211. package/lib/mutations/subscriptions.d.ts +2 -0
  212. package/lib/mutations/subscriptions.js +56 -0
  213. package/lib/mutations/tags.d.ts +2 -0
  214. package/lib/mutations/tags.js +120 -0
  215. package/lib/mutations/users.d.ts +1 -0
  216. package/lib/mutations/users.js +116 -0
  217. package/lib/objectTypes/app.d.ts +3 -0
  218. package/lib/objectTypes/app.js +173 -0
  219. package/lib/objectTypes/bankAccount.d.ts +1 -0
  220. package/lib/objectTypes/bankAccount.js +76 -0
  221. package/lib/objectTypes/connection.d.ts +1 -0
  222. package/lib/objectTypes/connection.js +48 -0
  223. package/lib/objectTypes/conversation.d.ts +2 -0
  224. package/lib/objectTypes/conversation.js +77 -0
  225. package/lib/objectTypes/creditCard.d.ts +1 -0
  226. package/lib/objectTypes/creditCard.js +86 -0
  227. package/lib/objectTypes/document.d.ts +1 -0
  228. package/lib/objectTypes/document.js +46 -0
  229. package/lib/objectTypes/error.d.ts +1 -0
  230. package/lib/objectTypes/error.js +46 -0
  231. package/lib/objectTypes/external.d.ts +1 -0
  232. package/lib/objectTypes/external.js +74 -0
  233. package/lib/objectTypes/file.d.ts +2 -0
  234. package/lib/objectTypes/file.js +100 -0
  235. package/lib/objectTypes/filter.d.ts +1 -0
  236. package/lib/objectTypes/filter.js +43 -0
  237. package/lib/objectTypes/group.d.ts +3 -0
  238. package/lib/objectTypes/group.js +123 -0
  239. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  240. package/lib/objectTypes/iapSubscription.js +40 -0
  241. package/lib/objectTypes/image.d.ts +2 -0
  242. package/lib/objectTypes/image.js +129 -0
  243. package/lib/objectTypes/index.d.ts +24 -0
  244. package/lib/objectTypes/index.js +68 -0
  245. package/lib/objectTypes/location.d.ts +2 -0
  246. package/lib/objectTypes/location.js +109 -0
  247. package/lib/objectTypes/message.d.ts +2 -0
  248. package/lib/objectTypes/message.js +96 -0
  249. package/lib/objectTypes/passcode.d.ts +1 -0
  250. package/lib/objectTypes/passcode.js +42 -0
  251. package/lib/objectTypes/persona.d.ts +3 -0
  252. package/lib/objectTypes/persona.js +87 -0
  253. package/lib/objectTypes/plan.d.ts +2 -0
  254. package/lib/objectTypes/plan.js +95 -0
  255. package/lib/objectTypes/post.d.ts +2 -0
  256. package/lib/objectTypes/post.js +125 -0
  257. package/lib/objectTypes/reaction.d.ts +2 -0
  258. package/lib/objectTypes/reaction.js +61 -0
  259. package/lib/objectTypes/relation.d.ts +1 -0
  260. package/lib/objectTypes/relation.js +49 -0
  261. package/lib/objectTypes/search.d.ts +1 -0
  262. package/lib/objectTypes/search.js +72 -0
  263. package/lib/objectTypes/statistics.d.ts +1 -0
  264. package/lib/objectTypes/statistics.js +39 -0
  265. package/lib/objectTypes/subscription.d.ts +2 -0
  266. package/lib/objectTypes/subscription.js +117 -0
  267. package/lib/objectTypes/tag.d.ts +2 -0
  268. package/lib/objectTypes/tag.js +65 -0
  269. package/lib/objectTypes/user.d.ts +4 -0
  270. package/lib/objectTypes/user.js +144 -0
  271. package/lib/queries/index.d.ts +3 -0
  272. package/lib/queries/index.js +33 -0
  273. package/lib/queries/locations.d.ts +2 -0
  274. package/lib/queries/locations.js +45 -0
  275. package/lib/queries/messages.d.ts +2 -0
  276. package/lib/queries/messages.js +52 -0
  277. package/lib/queries/posts.d.ts +2 -0
  278. package/lib/queries/posts.js +154 -0
  279. package/lib/queries/reactions.d.ts +2 -0
  280. package/lib/queries/reactions.js +56 -0
  281. package/lib/queries/statistics.d.ts +2 -0
  282. package/lib/queries/statistics.js +39 -0
  283. package/lib/queries/subscriptions.d.ts +2 -0
  284. package/lib/queries/subscriptions.js +44 -0
  285. package/lib/queries/tags.d.ts +2 -0
  286. package/lib/queries/tags.js +75 -0
  287. package/lib/queries/users.d.ts +1 -0
  288. package/lib/queries/users.js +64 -0
  289. package/lib/types/{apps.d.ts → apps.types.d.ts} +2 -2
  290. package/lib/types/apps.types.js +32 -0
  291. package/lib/types/{arangodb.d.ts → arangodb.types.d.ts} +4 -0
  292. package/lib/types/arangodb.types.js +16 -0
  293. package/lib/types/auth.types.d.ts +9 -0
  294. package/lib/types/auth.types.js +16 -0
  295. package/lib/types/{connections.d.ts → connections.types.d.ts} +1 -3
  296. package/lib/types/connections.types.js +16 -0
  297. package/lib/types/{conversations.d.ts → conversations.types.d.ts} +2 -4
  298. package/lib/types/conversations.types.js +16 -0
  299. package/lib/types/{email.d.ts → email.types.d.ts} +3 -3
  300. package/lib/types/email.types.js +16 -0
  301. package/lib/types/error.types.js +44 -0
  302. package/lib/types/{files.d.ts → files.types.d.ts} +1 -4
  303. package/lib/types/files.types.js +16 -0
  304. package/lib/types/google.types.js +16 -0
  305. package/lib/types/{groups.d.ts → groups.types.d.ts} +1 -4
  306. package/lib/types/groups.types.js +16 -0
  307. package/lib/types/{images.d.ts → images.types.d.ts} +9 -8
  308. package/lib/types/images.types.js +16 -0
  309. package/lib/types/index.d.ts +20 -18
  310. package/lib/types/index.js +41 -37
  311. package/lib/types/{locations.d.ts → locations.types.d.ts} +1 -3
  312. package/lib/types/locations.types.js +16 -0
  313. package/lib/types/{messages.d.ts → messages.types.d.ts} +5 -5
  314. package/lib/types/messages.types.js +16 -0
  315. package/lib/types/{notifications.d.ts → notifications.types.d.ts} +4 -2
  316. package/lib/types/notifications.types.js +16 -0
  317. package/lib/types/{payments.d.ts → payments.types.d.ts} +1 -4
  318. package/lib/types/payments.types.js +16 -0
  319. package/lib/types/personas.types.d.ts +32 -0
  320. package/lib/types/personas.types.js +16 -0
  321. package/lib/types/{posts.d.ts → posts.types.d.ts} +4 -7
  322. package/lib/types/posts.types.js +16 -0
  323. package/lib/types/statistics.types.js +16 -0
  324. package/lib/types/{tags.d.ts → tags.types.d.ts} +6 -1
  325. package/lib/types/tags.types.js +16 -0
  326. package/lib/types/{users.d.ts → users.types.d.ts} +12 -9
  327. package/lib/types/users.types.js +16 -0
  328. package/lib/types/{websocket.d.ts → websockets.types.d.ts} +6 -1
  329. package/lib/types/websockets.types.js +16 -0
  330. package/lib/utils/analyticsUtils.d.ts +3 -3
  331. package/lib/utils/analyticsUtils.js +3 -3
  332. package/lib/utils/arangodbUtils.d.ts +2 -1
  333. package/lib/utils/arangodbUtils.js +22 -1
  334. package/lib/utils/auth.d.ts +2 -1
  335. package/lib/utils/auth.js +8 -1
  336. package/lib/utils/index.js +1 -1
  337. package/lib/utils/session.d.ts +3 -1
  338. package/lib/utils/session.js +10 -7
  339. package/lib/utils/stripeUtils.d.ts +3 -0
  340. package/lib/utils/stripeUtils.js +43 -0
  341. package/package.json +35 -34
  342. package/.eslintrc +0 -10
  343. package/lib/types/apps.js +0 -32
  344. package/lib/types/auth.d.ts +0 -7
  345. package/lib/types/conversations.js +0 -16
  346. package/lib/types/files.js +0 -16
  347. package/lib/types/google.js +0 -16
  348. package/lib/types/images.js +0 -16
  349. package/lib/types/payments.js +0 -16
  350. package/lib/types/posts.js +0 -16
  351. package/lib/types/users.js +0 -16
  352. package/lib/types/websocket.js +0 -16
  353. /package/{lib → dist}/types/error.js +0 -0
  354. /package/{lib → dist}/types/statistics.js +0 -0
  355. /package/lib/types/{error.d.ts → error.types.d.ts} +0 -0
  356. /package/lib/types/{google.d.ts → google.types.d.ts} +0 -0
  357. /package/lib/types/{statistics.d.ts → statistics.types.d.ts} +0 -0
@@ -32,13 +32,13 @@ __export(posts_exports, {
32
32
  updatePost: () => updatePost
33
33
  });
34
34
  module.exports = __toCommonJS(posts_exports);
35
- var import_arangojs = require("arangojs");
36
35
  var import_utils = require("@nlabs/utils");
36
+ var import_arangojs = require("arangojs");
37
+ var import_tags = require("./tags");
37
38
  var import_postAdapter = require("../adapters/postAdapter");
38
- var import_error = require("../types/error");
39
+ var import_error = require("../types/error.types");
39
40
  var import_analyticsUtils = require("../utils/analyticsUtils");
40
41
  var import_arangodbUtils = require("../utils/arangodbUtils");
41
- var import_tags = require("./tags");
42
42
  const MAX_CONTENT_LENGTH = 1e5;
43
43
  const eventCategory = "posts";
44
44
  const parsePostOptions = (options = {}) => {
@@ -139,7 +139,7 @@ const getPost = async (context, postId, options) => {
139
139
  ${selectQueries.join("\n")}
140
140
  FOR group IN groups
141
141
  FILTER group._key == p.groupId
142
- FOR u, e IN OUTBOUND group._id isGrouped
142
+ FOR u, e IN OUTBOUND group._id hasConnection
143
143
  FILTER u._key == "${sessionId}"
144
144
  LIMIT 1
145
145
  RETURN MERGE(p, {${selectObjects.join(", ")}})`;
@@ -183,11 +183,14 @@ const getPostsByArea = (context, latitude, longitude, options) => {
183
183
  ${limit.aql}
184
184
  SORT distance, p.added
185
185
  RETURN DISTINCT MERGE(p, {${selectObjects.join(", ")}})`;
186
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
187
- action,
188
- category: eventCategory,
189
- label: import_error.ErrorTypes.DATABASE_ERROR
190
- }, error, context));
186
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
187
+ (0, import_analyticsUtils.logError)({
188
+ action,
189
+ category: eventCategory,
190
+ label: import_error.ErrorTypes.DATABASE_ERROR
191
+ }, error, context);
192
+ return [];
193
+ });
191
194
  };
192
195
  const getPostsByLatest = (context, options) => {
193
196
  const { database, fields, session: { userId: sessionId } } = context;
@@ -247,11 +250,14 @@ const getPostsByReactions = (context, reactions = [], options) => {
247
250
  FILTER ${filters.join(" && ")}
248
251
  ${limit.aql}
249
252
  RETURN DISTINCT MERGE(p, {${selectObjects.join(", ")}})`;
250
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
251
- action,
252
- category: eventCategory,
253
- label: import_error.ErrorTypes.DATABASE_ERROR
254
- }, error, context));
253
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
254
+ (0, import_analyticsUtils.logError)({
255
+ action,
256
+ category: eventCategory,
257
+ label: import_error.ErrorTypes.DATABASE_ERROR
258
+ }, error, context);
259
+ return [];
260
+ });
255
261
  };
256
262
  const getPostsByTags = (context, tags = [], options) => {
257
263
  const action = "getPostsByTags";
@@ -297,11 +303,14 @@ const getPostsByTags = (context, tags = [], options) => {
297
303
  ${limit.aql}
298
304
  SORT ${sortBy.join(", ")}
299
305
  RETURN DISTINCT MERGE(p, {${selectObjects.join(", ")}})`;
300
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
301
- action,
302
- category: eventCategory,
303
- label: import_error.ErrorTypes.DATABASE_ERROR
304
- }, error, context));
306
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
307
+ (0, import_analyticsUtils.logError)({
308
+ action,
309
+ category: eventCategory,
310
+ label: import_error.ErrorTypes.DATABASE_ERROR
311
+ }, error, context);
312
+ return [];
313
+ });
305
314
  };
306
315
  const getPostsByUser = (context, userId, options) => {
307
316
  const action = "getPostsByUser";
@@ -315,11 +324,14 @@ const getPostsByUser = (context, userId, options) => {
315
324
  ${limit.aql}
316
325
  SORT p.added
317
326
  RETURN DISTINCT MERGE(p, {${selectObjects.join(", ")}})`;
318
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
319
- action,
320
- category: eventCategory,
321
- label: import_error.ErrorTypes.DATABASE_ERROR
322
- }, error, context));
327
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
328
+ (0, import_analyticsUtils.logError)({
329
+ action,
330
+ category: eventCategory,
331
+ label: import_error.ErrorTypes.DATABASE_ERROR
332
+ }, error, context);
333
+ return [];
334
+ });
323
335
  };
324
336
  const getPostComments = (context, postId, options) => {
325
337
  const action = "getPostComments";
@@ -348,7 +360,7 @@ const getPostComments = (context, postId, options) => {
348
360
  )
349
361
  FOR group IN groups
350
362
  FILTER group._key == p.groupId
351
- FOR u, e IN OUTBOUND group._id isGrouped
363
+ FOR u, e IN OUTBOUND group._id hasConnection
352
364
  FILTER u._key == "${sessionId}"
353
365
  SORT p.added
354
366
  ${limit.aql}
@@ -367,18 +379,24 @@ const getPostComments = (context, postId, options) => {
367
379
  RETURN MERGE(p, {user: user, reactions: reactions})`;
368
380
  }
369
381
  if (privacyAqlQry) {
370
- return database.query(privacyAqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
371
- action,
372
- category: eventCategory,
373
- label: import_error.ErrorTypes.DATABASE_ERROR
374
- }, error, context));
382
+ return database.query(privacyAqlQry).then((cursor) => cursor.all()).catch((error) => {
383
+ (0, import_analyticsUtils.logError)({
384
+ action,
385
+ category: eventCategory,
386
+ label: import_error.ErrorTypes.DATABASE_ERROR
387
+ }, error, context);
388
+ return [];
389
+ });
375
390
  }
376
391
  return [];
377
- }).catch((error) => (0, import_analyticsUtils.logError)({
378
- action,
379
- category: eventCategory,
380
- label: import_error.ErrorTypes.DATABASE_ERROR
381
- }, error, context));
392
+ }).catch((error) => {
393
+ (0, import_analyticsUtils.logError)({
394
+ action,
395
+ category: eventCategory,
396
+ label: import_error.ErrorTypes.DATABASE_ERROR
397
+ }, error, context);
398
+ return [];
399
+ });
382
400
  };
383
401
  const addPost = async (context, {
384
402
  content = "",
@@ -542,11 +560,7 @@ const createPostEdge = (context, postDocId, itemDocId, edgeType = "isPosted", pr
542
560
  const formatPostId = (0, import_utils.parseArangoId)(postDocId);
543
561
  const formatDocId = (0, import_utils.parseArangoId)(itemDocId);
544
562
  if (!formatDocId || !formatPostId) {
545
- return (0, import_analyticsUtils.logException)({
546
- action,
547
- category: eventCategory,
548
- value: import_error.ErrorTypes.INVALID_ID
549
- }, {});
563
+ return Promise.reject(new Error(import_error.ErrorTypes.INVALID_ID));
550
564
  }
551
565
  const edgeId = (0, import_utils.createHash)(`postEdge-${formatPostId}-${formatDocId}`);
552
566
  const edge = {
@@ -578,4 +592,4 @@ const createPostEdge = (context, postDocId, itemDocId, edgeType = "isPosted", pr
578
592
  parsePostOptions,
579
593
  updatePost
580
594
  });
581
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCB7XG4gIGNyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJcbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcblxuaW1wb3J0IHtwYXJzZVBvc3R9IGZyb20gJy4uL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge2dldExpbWl0fSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ3NCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dCwgQXJhbmdvRGJMaW1pdCwgRmlsZVR5cGUsIFBvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZSwgVGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEg6IG51bWJlciA9IDEwMDAwMDtcbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdwb3N0cyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSwgc2Vzc2lvbklkOiBzdHJpbmcpID0+XG4gIChmaWVsZHMgfHwgW10pLnJlZHVjZSgoc2VsZWN0czogYW55LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdoYXNSc3ZwJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIGhhc1JzdnAgPSBUT19CT09MKEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCIgJiYgci5fZnJvbSA9PSBcInVzZXJzLyR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ2hhc1JzdnA6aGFzUnN2cCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2lzU2F2ZWQnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgaXNTYXZlZCA9IFRPX0JPT0woRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvblxuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJwaW5cIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiICYmIHIuX2Zyb20gPT0gXCJ1c2Vycy8ke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgICAgICkpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdpc1NhdmVkOmlzU2F2ZWQnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JzdnBDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByc3ZwQ291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInJzdnBcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncnN2cENvdW50OnJzdnBDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ZpZXdDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB2aWV3Q291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInZpZXdcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndmlld0NvdW50OnZpZXdDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGIgPSBkYXRhYmFzZTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHAudHlwZSA9PSAke3R5cGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfaWQ6IHBvc3REb2NJZCxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gJ2RlZmF1bHQnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmc7XG5cbiAgICAgIGlmKHVzZXJJZCA9PT0gc2Vzc2lvbklkKSB7XG4gICAgICAgIHJldHVybiBwb3N0O1xuICAgICAgfVxuXG4gICAgICBpZihncm91cElkICYmIHByaXZhY3kgPT09ICdncm91cCcpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgICAgIEZPUiBncm91cCBJTiBncm91cHNcbiAgICAgICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgaXNHcm91cGVkXG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICAgICAgfSBlbHNlIGlmKHByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gICAgICB9XG5cbiAgICAgIGlmKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge307XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgZ2V0UG9zdExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUFwcCc7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlBcmVhID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsYXRpdHVkZTogbnVtYmVyLFxuICBsb25naXR1ZGU6IG51bWJlcixcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbiAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbiAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gIGApO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudElkID09IG51bGxcbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5R3JvdXAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGdyb3VwSWQ6IHN0cmluZyxcbi8vICAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4vLyApOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5R3JvdXAnO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuXG4vLyAgIC8vIEdyb3VwIGlkXG4vLyAgIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4vLyAgIGNvbnN0IGRiID0gZGF0YWJhc2U7XG4vLyAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCBnIElOIElOQk9VTkQgJHtmb3JtYXRHcm91cElkfSBoYXNHcm91cFxuLy8gICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbi8vICAgICAgIFJFVFVSTiBnYDtcblxuLy8gICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLnRoZW4oKGdyb3VwczogR3JvdXBUeXBlW10gPSBbXSkgPT4ge1xuLy8gICAgICAgaWYoZ3JvdXBzLmxlbmd0aCkge1xuLy8gICAgICAgICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgICAgICAgY29uc3QgcG9zdEFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4vLyAgICAgICAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLmdyb3VwSWQgPT0gXCIke2Zvcm1hdEdyb3VwSWR9XCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAgICAgICAke2xpbWl0LmFxbH1cbi8vICAgICAgICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICAgICAgICByZXR1cm4gZGIucXVlcnkocG9zdEFxbFFyeSlcbi8vICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICAgICAgICB9KTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgcmV0dXJuIFtdO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeVJlYWN0aW9ucyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0c0J5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgJ3AucHJpdmFjeSA9PSBcInB1YmxpY1wiJ107XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcblxuICBpZihmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuICAgICAgJHtmb3JtYXRMYXRpdHVkZX0sXG4gICAgICAke2Zvcm1hdExvbmdpdHVkZX0sXG4gICAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbiAgICAgIE5PVF9OVUxMKHAubG9uZ2l0dWRlLCAwKSlcbiAgICBgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICBpZihyZWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBtYXRjaGVkUmVhY3Rpb25zID0gTEVOR1RIKFxuICAgICAgRk9SIG1yIElOIHJlYWN0aW9uc1xuICAgICAgRklMVEVSIG1yLm1hdGNoZWQgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIG1yXG4gICAgKWApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFJlYWN0aW9uczptYXRjaGVkUmVhY3Rpb25zJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zID4gMCcpO1xuICB9XG5cbiAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCByIElOIE9VVEJPVU5EIFwiJHtmb3JtYXRTZXNzaW9uSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIHJlYWN0aW9uLCBociBJTiAxLi4xIElOQk9VTkQgcCBpc1RhZ2dlZFxuICAgICAgTEVUIG1hdGNoZWQgPSBMRU5HVEgoJHtmb3JtYXRSZWFjdGlvbnN9KSA+IDAgJiYgUE9TSVRJT04oJHtmb3JtYXRSZWFjdGlvbnN9LCByZWFjdGlvbi5uYW1lKVxuICAgICAgU09SVCByZWFjdGlvbi5uYW1lXG4gICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkOm1hdGNoZWR9KVxuICAgIClcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRhZ3MubWFwKCh0YWcpID0+IHBhcnNlQ2hhcih0YWcsIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYodGFncy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIG1hdGNoZWRUYWdzID0gTEVOR1RIKFxuICAgICAgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIHQubWF0Y2hlZCA9PSB0cnVlXG4gICAgICBSRVRVUk4gdFxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIExFVCB0YWdzID0gKFxuICAgICAgRk9SIHRhZywgaXQgSU4gMS4uMSBJTkJPVU5EIHAgaXNUYWdnZWRcbiAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7Zm9ybWF0VGFnTmFtZXN9KSA+IDAgJiYgUE9TSVRJT04oJHtmb3JtYXRUYWdOYW1lc30sIHRhZy5uYW1lKVxuICAgICAgU09SVCB0YWcubmFtZVxuICAgICAgUkVUVVJOIE1FUkdFKHRhZywge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUICR7c29ydEJ5LmpvaW4oJywgJyl9XG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RzQnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnVzZXJJZCA9PSBcIiR7Zm9ybWF0VXNlcklkfVwiICYmIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudCA9PSBudWxsXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgcC5hZGRlZFxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdENvbW1lbnRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3RJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdENvbW1lbnRzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQocG9zdElkKTtcblxuICAvLyBHZXQgdGhlIHBhcmVudCBwb3N0IHRvIGdldCByZXN0cmljdGlvbnNcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gJ2RlZmF1bHQnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIC8vIFF1ZXJ5IGJhc2VkIG9uIHByaXZhY3kgbGV2ZWxcbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmc7XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGlzR3JvdXBlZFxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9IGVsc2UgaWYocHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgIEZPUiB1c2VyIElOIHVzZXJzXG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiICYmIHVzZXIuX2tleSA9PSBwLnVzZXJJZFxuICAgICAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgICApXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb250ZW50ID0gJycsXG4gICAgZW5kRGF0ZSxcbiAgICBncm91cElkID0gJycsXG4gICAgbG9jYXRpb24sXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUgPSAnJyxcbiAgICBwYXJlbnRJZCA9IG51bGwsXG4gICAgcHJpdmFjeSA9ICdwdWJsaWMnLFxuICAgIHRhZ3MgPSBbXSxcbiAgICBzdGFydERhdGUsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcG9zdElkID0gY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHtcbiAgICBfaWQ6IGBwb3N0cy8ke3Bvc3RJZH1gLFxuICAgIF9rZXk6IHBvc3RJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnQsIE1BWF9DT05URU5UX0xFTkdUSCksXG4gICAgZW5kRGF0ZTogZW5kRGF0ZSA/IHBhcnNlTnVtKGVuZERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgICBncm91cElkOiBncm91cElkID8gcGFyc2VJZChncm91cElkKSA6IHVuZGVmaW5lZCxcbiAgICBsYXRpdHVkZTogbGF0aXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxhdGl0dWRlKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbjogbG9jYXRpb24gPyBwYXJzZVN0cmluZyhsb2NhdGlvbiwgMTYwKSA6IHVuZGVmaW5lZCxcbiAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0obG9uZ2l0dWRlKSA6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IHBhcnNlU3RyaW5nKG5hbWUsIDE2MCksXG4gICAgcGFyZW50SWQ6IHBhcmVudElkID8gcGFyc2VJZChwYXJlbnRJZCkgOiB1bmRlZmluZWQsXG4gICAgcHJpdmFjeTogcGFyc2VWYXJDaGFyKHByaXZhY3ksIDE2KSxcbiAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZSA/IHBhcnNlTnVtKHN0YXJ0RGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMiksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBvc3RzIFJFVFVSTiBORVdgO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2F2ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhpbnNlcnQuY29udGVudCk7XG5cbiAgICBpZih0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdzQnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUpKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ3NCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzOiBUYWdUeXBlW10gPSBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBjb25zdCB1cGRhdGU6IFBvc3RUeXBlID0ge1xuICAgIC4uLnBhcnNlZFBvc3QsXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuXG4gIGlmKCFwb3N0SWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBwb3N0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtwb3N0SWR9LCB1c2VySWQ6ICR7c2Vzc2lvbklkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIHBvc3RzIFJFVFVSTiBORVdgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBkYXRlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGF0YWJhc2VcbiAgICAgIC5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pKTtcbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGluc2VydC5jb250ZW50KTtcblxuICAgIGlmKHRhZ3M/Lmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdXNlclRhZ3MgPSB0YWdzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lKSkpXG4gICAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSkgOiBbXTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gY29udGVudFRhZ05hbWVzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMpKVxuICAgICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpIDogW107XG4gICAgICBjb25zdCB1cGRhdGVkVGFnczogVGFnVHlwZVtdID0gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIGl0ZW1Eb2NJZDogdXBkYXRlZFBvc3RJZCxcbiAgICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFBvc3RJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuXG4gIGlmKCFmb3JtYXRQb3N0SWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIGlzVGFnZ2VkXG4gIEZJTFRFUiB0Ll90byA9PSAke2Zvcm1hdFBvc3RJZH1cbiAgUkVNT1ZFIHQgSU4gaXNUYWdnZWRgO1xuXG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGVkZ2VBcWxRcnkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuXG4gIGNvbnN0IGZpbGVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBmIElOIGhhc0ZpbGVcbiAgICBGSUxURVIgZi5fdG8gPT0gJHtmb3JtYXRQb3N0SWR9XG4gICAgUkVNT1ZFIGYgSU4gaGFzRmlsZWA7XG5cbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoZmlsZUFxbFFyeSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG5cbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgICBGSUxURVIgcC5faWQgPT0gJHtmb3JtYXRQb3N0SWR9ICYmIHAudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIHAgSU4gcG9zdHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvc3RFZGdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIGVkZ2VUeXBlOiBzdHJpbmcgPSAnaXNQb3N0ZWQnLFxuICBwcm9wczogYW55ID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBjb25zdCBmb3JtYXRQb3N0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZighZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwge30pO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT5cbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7fSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHNCQUFrQjtBQUlsQixtQkFFTztBQUVQLHlCQUF3QjtBQUN4QixtQkFBeUI7QUFDekIsNEJBQXFDO0FBQ3JDLDJCQUF1QjtBQUN2QixrQkFBMkQ7QUFHM0QsTUFBTSxxQkFBNkI7QUFDbkMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxtQkFBbUIsQ0FBQyxVQUF1QixDQUFDLE1BQU07QUFDN0QsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1QsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLGNBQVUsdUJBQVMsVUFBVSxFQUFFO0FBQUEsSUFDL0IsV0FBTywrQkFBUyxNQUFNLEVBQUU7QUFBQSxJQUN4QixlQUFXLHVCQUFTLFdBQVcsRUFBRTtBQUFBLElBQ2pDLFVBQU0sd0JBQVUsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sa0JBQWtCLENBQUMsUUFBa0IsZUFDL0MsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQWMsVUFBa0I7QUFDckQsVUFBTyxPQUFPO0FBQUEsSUFDWixLQUFLLFdBQVc7QUFDZCxjQUFRLFFBQVEsS0FBSztBQUFBO0FBQUEsOEVBRWlELFNBQVM7QUFBQTtBQUFBO0FBQUEsV0FHNUU7QUFDSCxjQUFRLFFBQVEsS0FBSyxpQkFBaUI7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssV0FBVztBQUNkLGNBQVEsUUFBUSxLQUFLO0FBQUE7QUFBQSw2RUFFZ0QsU0FBUztBQUFBO0FB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
595
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnc0J5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzJztcbmltcG9ydCB7cGFyc2VQb3N0fSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlcic7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBBcmFuZ29EYkxpbWl0LCBGaWxlVHlwZSwgUG9zdElucHV0VHlwZSwgUG9zdE9wdGlvbnMsIFBvc3RUeXBlLCBUYWdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgTUFYX0NPTlRFTlRfTEVOR1RIOiBudW1iZXIgPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAncG9zdHMnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0T3B0aW9ucyA9IChvcHRpb25zOiBQb3N0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICBsYXRpdHVkZSA9IDAsXG4gICAgbG9uZ2l0dWRlID0gMCxcbiAgICB0byA9IDMwLFxuICAgIHR5cGUgPSAncG9zdCdcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VOdW0obGF0aXR1ZGUsIDMyKSxcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXQsXG4gICAgbG9uZ2l0dWRlOiBwYXJzZU51bShsb25naXR1ZGUsIDMyKSxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10sIHNlc3Npb25JZDogc3RyaW5nKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ2hhc1JzdnAnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgaGFzUnN2cCA9IFRPX0JPT0woRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvblxuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJyc3ZwXCIgJiYgci50eXBlID09IFwicG9zdHNcIiAmJiByLl9mcm9tID09IFwidXNlcnMvJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgnaGFzUnN2cDpoYXNSc3ZwJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAnaXNTYXZlZCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCBpc1NhdmVkID0gVE9fQk9PTChGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInBpblwiICYmIHIudHlwZSA9PSBcInBvc3RzXCIgJiYgci5fZnJvbSA9PSBcInVzZXJzLyR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ2lzU2F2ZWQ6aXNTYXZlZCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvblxuICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAncnN2cENvdW50Jzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJzdnBDb3VudCA9IEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyc3ZwQ291bnQ6cnN2cENvdW50Jyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndmlld0NvdW50Jzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHZpZXdDb3VudCA9IEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwidmlld1wiICYmIHIudHlwZSA9PSBcInBvc3RzXCJcbiAgICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICAgIFJFVFVSTiBjb3VudFxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd2aWV3Q291bnQ6dmlld0NvdW50Jyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9ICdkZWZhdWx0J1xuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nO1xuXG4gICAgICBpZih1c2VySWQgPT09IHNlc3Npb25JZCkge1xuICAgICAgICByZXR1cm4gcG9zdDtcbiAgICAgIH1cblxuICAgICAgaWYoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gICAgICB9IGVsc2UgaWYocHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgICAgIH1cblxuICAgICAgaWYocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gZGIucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuXG4vLyBleHBvcnQgY29uc3QgZ2V0UG9zdExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUFwcCc7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbi8vICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuLy8gICAgICAgdGhyb3cgZXJyb3I7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0c0J5QXJlYSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UoXG4gICAgJHtmb3JtYXRMYXRpdHVkZX0sXG4gICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgIE5PVF9OVUxMKHAubGF0aXR1ZGUsIDApLFxuICAgIE5PVF9OVUxMKHAubG9uZ2l0dWRlLCAwKSlcbiAgYCk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50SWQgPT0gbnVsbFxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgZGlzdGFuY2UsIHAuYWRkZWRcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgZ2V0UG9zdHNCeUdyb3VwID0gKFxuLy8gICBjb250ZXh0OiBBcGlDb250ZXh0LFxuLy8gICBncm91cElkOiBzdHJpbmcsXG4vLyAgIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuLy8gKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUdyb3VwJztcbi8vICAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbi8vICAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcblxuLy8gICAvLyBHcm91cCBpZFxuLy8gICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuLy8gICBjb25zdCBkYiA9IGRhdGFiYXNlO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSwgZyBJTiBJTkJPVU5EICR7Zm9ybWF0R3JvdXBJZH0gaGFzR3JvdXBcbi8vICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4vLyAgICAgICBSRVRVUk4gZ2A7XG5cbi8vICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLnRoZW4oKGdyb3VwczogR3JvdXBUeXBlW10gPSBbXSkgPT4ge1xuLy8gICAgICAgaWYoZ3JvdXBzLmxlbmd0aCkge1xuLy8gICAgICAgICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgICAgICAgY29uc3QgcG9zdEFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4vLyAgICAgICAgICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLmdyb3VwSWQgPT0gXCIke2Zvcm1hdEdyb3VwSWR9XCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAgICAgICAke2xpbWl0LmFxbH1cbi8vICAgICAgICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICAgICAgICByZXR1cm4gZGIucXVlcnkocG9zdEFxbFFyeSlcbi8vICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgICAgICAgIH0pO1xuLy8gICAgICAgfVxuXG4vLyAgICAgICByZXR1cm4gW107XG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuLy8gICAgICAgdGhyb3cgZXJyb3I7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeUxhdGVzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAudHlwZSA9PSBcIiR7dHlwZX1cIiAmJiBwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiAmJiBwLnBhcmVudCA9PSBudWxsXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uKSA9PiBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYocmVhY3Rpb25zLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgbWF0Y2hlZFJlYWN0aW9ucyA9IExFTkdUSChcbiAgICAgIEZPUiBtciBJTiByZWFjdGlvbnNcbiAgICAgIEZJTFRFUiBtci5tYXRjaGVkID09IHRydWVcbiAgICAgIFJFVFVSTiBtclxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnM6bWF0Y2hlZFJlYWN0aW9ucycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0U2Vzc2lvbklkfVwiIGhhc1JlYWN0aW9uXG4gICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgIEZPUiByZWFjdGlvbiwgaHIgSU4gMS4uMSBJTkJPVU5EIHAgaXNUYWdnZWRcbiAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7Zm9ybWF0UmVhY3Rpb25zfSkgPiAwICYmIFBPU0lUSU9OKCR7Zm9ybWF0UmVhY3Rpb25zfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgIFNPUlQgcmVhY3Rpb24ubmFtZVxuICAgICAgUkVUVVJOIE1FUkdFKHJlYWN0aW9uLCB7bWF0Y2hlZDptYXRjaGVkfSlcbiAgICApXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRhZ3MubWFwKCh0YWcpID0+IHBhcnNlQ2hhcih0YWcsIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYodGFncy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIG1hdGNoZWRUYWdzID0gTEVOR1RIKFxuICAgICAgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIHQubWF0Y2hlZCA9PSB0cnVlXG4gICAgICBSRVRVUk4gdFxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIExFVCB0YWdzID0gKFxuICAgICAgRk9SIHRhZywgaXQgSU4gMS4uMSBJTkJPVU5EIHAgaXNUYWdnZWRcbiAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7Zm9ybWF0VGFnTmFtZXN9KSA+IDAgJiYgUE9TSVRJT04oJHtmb3JtYXRUYWdOYW1lc30sIHRhZy5uYW1lKVxuICAgICAgU09SVCB0YWcubmFtZVxuICAgICAgUkVUVVJOIE1FUkdFKHRhZywge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUICR7c29ydEJ5LmpvaW4oJywgJyl9XG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlVc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAudXNlcklkID09IFwiJHtmb3JtYXRVc2VySWR9XCIgJiYgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50ID09IG51bGxcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBwLmFkZGVkXG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RDb21tZW50cyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0SWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RDb21tZW50cyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKHBvc3RJZCk7XG5cbiAgLy8gR2V0IHRoZSBwYXJlbnQgcG9zdCB0byBnZXQgcmVzdHJpY3Rpb25zXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gcG9zdHNcbiAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gJ2RlZmF1bHQnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIC8vIFF1ZXJ5IGJhc2VkIG9uIHByaXZhY3kgbGV2ZWxcbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmc7XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmKHByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICAgICAgICBGT1IgdXNlciBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIiAmJiB1c2VyLl9rZXkgPT0gcC51c2VySWRcbiAgICAgICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgICAgICAgKVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSBudWxsLFxuICAgIHByaXZhY3kgPSAncHVibGljJyxcbiAgICB0YWdzID0gW10sXG4gICAgc3RhcnREYXRlLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfTogUG9zdElucHV0VHlwZVxuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IHBvc3RJZCA9IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGluc2VydDogUG9zdFR5cGUgPSB7XG4gICAgX2lkOiBgcG9zdHMvJHtwb3N0SWR9YCxcbiAgICBfa2V5OiBwb3N0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCBNQVhfQ09OVEVOVF9MRU5HVEgpLFxuICAgIGVuZERhdGU6IGVuZERhdGUgPyBwYXJzZU51bShlbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgZ3JvdXBJZDogZ3JvdXBJZCA/IHBhcnNlSWQoZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lLCAxNjApLFxuICAgIHBhcmVudElkOiBwYXJlbnRJZCA/IHBhcnNlSWQocGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICAgIHByaXZhY3k6IHBhcnNlVmFyQ2hhcihwcml2YWN5LCAxNiksXG4gICAgc3RhcnREYXRlOiBzdGFydERhdGUgPyBwYXJzZU51bShzdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhpbnNlcnQuY29udGVudCk7XG5cbiAgICBpZih0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdzQnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUpKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ3NCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzOiBUYWdUeXBlW10gPSBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBjb25zdCB1cGRhdGU6IFBvc3RUeXBlID0ge1xuICAgIC4uLnBhcnNlZFBvc3QsXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuXG4gIGlmKCFwb3N0SWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogcG9zdElkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7cG9zdElkfSwgdXNlcklkOiAke3Nlc3Npb25JZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlXG4gICAgICAucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pKTtcbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGluc2VydC5jb250ZW50KTtcblxuICAgIGlmKHRhZ3M/Lmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdXNlclRhZ3MgPSB0YWdzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lKSkpXG4gICAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSkgOiBbXTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gY29udGVudFRhZ05hbWVzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMpKVxuICAgICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpIDogW107XG4gICAgICBjb25zdCB1cGRhdGVkVGFnczogVGFnVHlwZVtdID0gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIGl0ZW1Eb2NJZDogdXBkYXRlZFBvc3RJZCxcbiAgICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFBvc3RJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuXG4gIGlmKCFmb3JtYXRQb3N0SWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIGlzVGFnZ2VkXG4gIEZJTFRFUiB0Ll90byA9PSAke2Zvcm1hdFBvc3RJZH1cbiAgUkVNT1ZFIHQgSU4gaXNUYWdnZWRgO1xuXG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGVkZ2VBcWxRcnkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuXG4gIGNvbnN0IGZpbGVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBmIElOIGhhc0ZpbGVcbiAgICBGSUxURVIgZi5fdG8gPT0gJHtmb3JtYXRQb3N0SWR9XG4gICAgUkVNT1ZFIGYgSU4gaGFzRmlsZWA7XG5cbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoZmlsZUFxbFFyeSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG5cbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgICBGSUxURVIgcC5faWQgPT0gJHtmb3JtYXRQb3N0SWR9ICYmIHAudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIHAgSU4gcG9zdHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgZWRnZVR5cGU6IHN0cmluZyA9ICdpc1Bvc3RlZCcsXG4gIHByb3BzID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBjb25zdCBmb3JtYXRQb3N0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZighZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0lEKSk7XG4gIH1cblxuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHBvc3RFZGdlLSR7Zm9ybWF0UG9zdElkfS0ke2Zvcm1hdERvY0lkfWApO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT5cbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7fSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLG1CQUVPO0FBQ1Asc0JBQWtCO0FBR2xCLGtCQUEyRDtBQUMzRCx5QkFBd0I7QUFDeEIsbUJBQXlCO0FBQ3pCLDRCQUFxQztBQUNyQywyQkFBdUI7QUFLdkIsTUFBTSxxQkFBNkI7QUFDbkMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxtQkFBbUIsQ0FBQyxVQUF1QixDQUFDLE1BQU07QUFDN0QsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1QsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLGNBQVUsdUJBQVMsVUFBVSxFQUFFO0FBQUEsSUFDL0IsV0FBTywrQkFBUyxNQUFNLEVBQUU7QUFBQSxJQUN4QixlQUFXLHVCQUFTLFdBQVcsRUFBRTtBQUFBLElBQ2pDLFVBQU0sd0JBQVUsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sa0JBQWtCLENBQUMsUUFBa0IsZUFDL0MsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsVUFBa0I7QUFD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
@@ -32,8 +32,8 @@ __export(reactions_exports, {
32
32
  module.exports = __toCommonJS(reactions_exports);
33
33
  var import_utils = require("@nlabs/utils");
34
34
  var import_arangojs = require("arangojs");
35
+ var import_error = require("../types/error.types");
35
36
  var import_analyticsUtils = require("../utils/analyticsUtils");
36
- var import_error = require("../types/error");
37
37
  var import_arangodbUtils = require("../utils/arangodbUtils");
38
38
  const eventCategory = "reactions";
39
39
  const parseReactionOptions = (options = {}) => {
@@ -319,4 +319,4 @@ const hasReaction = (context, itemId, reactionName, direction = "OUTBOUND") => {
319
319
  parseReactionOptions,
320
320
  updateReaction
321
321
  });
322
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dCwgQXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0LCBRdWVyeUZpbHRlciwgVXNlclR5cGUsIFVzZXJSZWFjdGlvblF1ZXJ5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdyZWFjdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBSZWFjdGlvbkRpcmVjdGlvbiA9ICdJTkJPVU5EJyB8ICdPVVRCT1VORCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb24ge1xuICByZWFkb25seSBfZnJvbT86IHN0cmluZztcbiAgcmVhZG9ubHkgX2tleT86IHN0cmluZztcbiAgcmVhZG9ubHkgX3RvPzogc3RyaW5nO1xuICByZWFkb25seSBhZGRlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgY291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogQXJhbmdvRGJDb2xsZWN0aW9uO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUmVhY3Rpb25PcHRpb25zID0gKG9wdGlvbnM6IFJlYWN0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSxcbiAgYWxsb3dEdXBsaWNhdGU6IGJvb2xlYW4gPSBmYWxzZVxuKTogUHJvbWlzZTxSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBuYW1lOiBpdGVtTmFtZSA9ICdsaWtlJyxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzUmVhY3Rpb24nKTtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGByZWFjdGlvbi0ke2Zvcm1hdEl0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGVkZ2U6IFJlYWN0aW9uID0ge1xuICAgIF9mcm9tOiBzZXNzaW9uRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0SXRlbUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IGZvcm1hdFJlYWN0aW9uTmFtZSxcbiAgICB2YWx1ZTogaXRlbVZhbHVlICE9PSB1bmRlZmluZWQgPyBmb3JtYXRWYWx1ZSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIGlmIG5vdCBhbGxvd2VkXG4gIGlmKCFhbGxvd0R1cGxpY2F0ZSkge1xuICAgIC8vIFF1ZXJ5XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgciBJTiBoYXNSZWFjdGlvblxuICAgICAgRklMVEVSIHIuX2Zyb20gPT0gJHtzZXNzaW9uRG9jSWR9ICYmIHIuX3RvID09ICR7Zm9ybWF0SXRlbUlkfSAmJiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gcmA7XG5cbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25JZDogc3RyaW5nID0gYGhhc1JlYWN0aW9uLyR7cGFyc2VJZChyZWFjdGlvbklkKX1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHIgPSBET0NVTUVOVCgke2Zvcm1hdFJlYWN0aW9uSWR9KVxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVhY3Rpb25CeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVSZWFjdGlvbkJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgaW4gaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5fZnJvbSA9PSAke2Zvcm1hdFNlc3Npb25JZH0gJiYgci5fdG8gPT0gJHtmb3JtYXRJdGVtRG9jSWR9ICYmIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gaGFzUmVhY3Rpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJlYWN0aW9uOiBSZWFjdGlvbiA9IHt9KTogUHJvbWlzZTxSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpZDogaXRlbUlkLFxuICAgIG5hbWU6IGl0ZW1OYW1lLFxuICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgfSA9IHJlYWN0aW9uO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIoaXRlbU5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0VmFsdWU6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGl0ZW1WYWx1ZSwgMzIpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHJlYWN0aW9uLSR7Zm9ybWF0SWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCB1cGRhdGU6IFJlYWN0aW9uID0ge1xuICAgIG5hbWU6IGZvcm1hdE5hbWUsXG4gICAgdmFsdWU6IGZvcm1hdFZhbHVlXG4gIH07XG4gIGNvbnN0IGluc2VydDogUmVhY3Rpb24gPSB7XG4gICAgLi4udXBkYXRlLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKVxuICB9O1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUICR7e19pZDogZm9ybWF0SWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogYW55ID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgUkVUVVJOIGNvdW50YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25Db3VudEJ5VXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBhbnkgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaSwgciBJTiBJTkJPVU5EICR7Zm9ybWF0SXRlbUlkfSBoYXNSZWFjdGlvblxuICAgICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX0gJiYgci5fZnJvbSA9PSAke3Nlc3Npb25Eb2NJZH1cbiAgICAgIENPTExFQ1QgcmVhY3Rpb25WYWx1ZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4gTUVSR0Uociwge2NvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRHcm91cFVzZXJzQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHtmaWx0ZXJzID0gW10sIGlkOiBncm91cElkLCB2YWx1ZX06IFVzZXJSZWFjdGlvblF1ZXJ5ID0gcGFyYW1zO1xuICBjb25zdCByZWFjdGlvbiA9IHBhcnNlQ2hhcih2YWx1ZSwgMzIpO1xuICBjb25zdCBncm91cERvY0lkID0gcGFyc2VBcmFuZ29JZChncm91cElkKTtcbiAgY29uc3QgZmlsdGVyU3RyOiBzdHJpbmcgPSBmaWx0ZXJzXG4gICAgLm1hcCgoZmlsdGVyOiBRdWVyeUZpbHRlcikgPT4ge1xuICAgICAgY29uc3Qge2NvbmRpdGlvbmFsLCBuYW1lLCB2YWx1ZTogcXVlcnlWYWx1ZX06IFF1ZXJ5RmlsdGVyID0gZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlckNvbmQ6IHN0cmluZyA9IGNvbmRpdGlvbmFsO1xuXG4gICAgICBpZihjb25kaXRpb25hbCAhPT0gJz49JyAmJiBjb25kaXRpb25hbCAhPT0gJzw9JyAmJiBjb25kaXRpb25hbCAhPT0gJz4nICYmIGNvbmRpdGlvbmFsICE9PSAnPCcpIHtcbiAgICAgICAgZmlsdGVyQ29uZCA9ICc9PSc7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICByZXR1cm4gYHIuYWRkZWQgJHtmaWx0ZXJDb25kfSAke3BhcnNlTnVtKHF1ZXJ5VmFsdWUpfWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNvbmNhdChbXG4gICAgICBgci52YWx1ZSA9PSBcIiR7cmVhY3Rpb259XCJgLFxuICAgICAgJ3UuX2lkID09IHIuX2Zyb20nXG4gICAgXSlcbiAgICAuam9pbignICYmICcpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBnLCByIElOIElOQk9VTkQgXCIke2dyb3VwRG9jSWR9XCIgaGFzUmVhY3Rpb25cbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgJHtmaWx0ZXJTdHJ9XG4gICAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtmb3JtYXRSZWFjdGlvbk5hbWV9XCJcbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UoaSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IFtdKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SXRlbXNCeVJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlYWN0aW9uT3B0aW9uc1xuKTogUHJvbWlzZTxSZWFjdGlvbltdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW1zQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UodSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IFtdKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzUmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgZGlyZWN0aW9uOiBSZWFjdGlvbkRpcmVjdGlvbiA9ICdPVVRCT1VORCdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdoYXNSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSAnT1VUQk9VTkQnID8gJ09VVEJPVU5EJyA6ICdJTkJPVU5EJztcbiAgY29uc3QgaXRlbURpcmVjdGlvbjogc3RyaW5nID0gZGlyZWN0aW9uID09PSAnT1VUQk9VTkQnID8gJ3IuX3RvJyA6ICdyLl9mcm9tJztcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiAke2Zvcm1hdERpcmVjdGlvbn0gXCIke3Nlc3Npb25Eb2NJZH1cIiBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke3JlYWN0aW9uTmFtZX1cIiAmJiAke2l0ZW1EaXJlY3Rpb259ID09IFwiJHtmb3JtYXRJdGVtSWR9XCJcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHJgO1xuXG4gIGNvbnNvbGUubG9nKHthcWxRcnl9KTtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVhY3Rpb25zKSA9PiAocmVhY3Rpb25zID8gcmVhY3Rpb25zLnZhbHVlID09PSAndHJ1ZScgOiBmYWxzZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBmYWxzZSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQW1GO0FBQ25GLHNCQUFrQjtBQU1sQiw0QkFBcUM7QUFDckMsbUJBQXlCO0FBQ3pCLDJCQUF1QjtBQUV2QixNQUFNLGdCQUF3QjtBQXFCdkIsTUFBTSx1QkFBdUIsQ0FBQyxVQUEyQixDQUFDLE1BQU07QUFDckUsUUFBTTtBQUFBLElBQ0osT0FB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
322
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXQsIFF1ZXJ5RmlsdGVyLCBVc2VyVHlwZSwgVXNlclJlYWN0aW9uUXVlcnl9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAncmVhY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgUmVhY3Rpb25EaXJlY3Rpb24gPSAnSU5CT1VORCcgfCAnT1VUQk9VTkQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uIHtcbiAgcmVhZG9ubHkgX2Zyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF9rZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF90bz86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJlYWN0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBSZWFjdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb246IFJlYWN0aW9uID0ge30sXG4gIGFsbG93RHVwbGljYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbmFtZTogaXRlbU5hbWUgPSAnbGlrZScsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRWYWx1ZTogc3RyaW5nID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1JlYWN0aW9uJyk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBlZGdlOiBSZWFjdGlvbiA9IHtcbiAgICBfZnJvbTogc2Vzc2lvbkRvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEl0ZW1JZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiBmb3JtYXRSZWFjdGlvbk5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZSAhPT0gdW5kZWZpbmVkID8gZm9ybWF0VmFsdWUgOiB1bmRlZmluZWRcbiAgfTtcblxuICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBpZiBub3QgYWxsb3dlZFxuICBpZighYWxsb3dEdXBsaWNhdGUpIHtcbiAgICAvLyBRdWVyeVxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgSU4gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHJgO1xuXG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25JZDogc3RyaW5nID0gYGhhc1JlYWN0aW9uLyR7cGFyc2VJZChyZWFjdGlvbklkKX1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHIgPSBET0NVTUVOVCgke2Zvcm1hdFJlYWN0aW9uSWR9KVxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0SXRlbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSk7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgciBpbiBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1Eb2NJZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgaWQ6IGl0ZW1JZCxcbiAgICBuYW1lOiBpdGVtTmFtZSxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGByZWFjdGlvbi0ke2Zvcm1hdElkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgdXBkYXRlOiBSZWFjdGlvbiA9IHtcbiAgICBuYW1lOiBmb3JtYXROYW1lLFxuICAgIHZhbHVlOiBmb3JtYXRWYWx1ZVxuICB9O1xuICBjb25zdCBpbnNlcnQ6IFJlYWN0aW9uID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KClcbiAgfTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCAke3tfaWQ6IGZvcm1hdElkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9IGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgIFJFVFVSTiBjb3VudGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9ICYmIHIuX2Zyb20gPT0gJHtzZXNzaW9uRG9jSWR9XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uVmFsdWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIE1FUkdFKHIsIHtjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7ZmlsdGVycyA9IFtdLCBpZDogZ3JvdXBJZCwgdmFsdWV9OiBVc2VyUmVhY3Rpb25RdWVyeSA9IHBhcmFtcztcbiAgY29uc3QgcmVhY3Rpb24gPSBwYXJzZUNoYXIodmFsdWUsIDMyKTtcbiAgY29uc3QgZ3JvdXBEb2NJZCA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZpbHRlclN0cjogc3RyaW5nID0gZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWU6IHF1ZXJ5VmFsdWV9OiBRdWVyeUZpbHRlciA9IGZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXJDb25kOiBzdHJpbmcgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZpbHRlckNvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGByLmFkZGVkICR7ZmlsdGVyQ29uZH0gJHtwYXJzZU51bShxdWVyeVZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jb25jYXQoW1xuICAgICAgYHIudmFsdWUgPT0gXCIke3JlYWN0aW9ufVwiYCxcbiAgICAgICd1Ll9pZCA9PSByLl9mcm9tJ1xuICAgIF0pXG4gICAgLmpvaW4oJyAmJiAnKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgZywgciBJTiBJTkJPVU5EIFwiJHtncm91cERvY0lkfVwiIGhhc1JlYWN0aW9uXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSICR7ZmlsdGVyU3RyfVxuICAgICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtmb3JtYXRSZWFjdGlvbk5hbWV9XCJcbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UoaSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtc0J5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbXNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCByIElOIE9VVEJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiBNRVJHRSh1LCB7cmVhY3Rpb246IHJ9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdPVVRCT1VORCcgOiAnSU5CT1VORCc7XG4gIGNvbnN0IGl0ZW1EaXJlY3Rpb246IHN0cmluZyA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdyLl90bycgOiAnci5fZnJvbSc7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gJHtmb3JtYXREaXJlY3Rpb259IFwiJHtzZXNzaW9uRG9jSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtyZWFjdGlvbk5hbWV9XCIgJiYgJHtpdGVtRGlyZWN0aW9ufSA9PSBcIiR7Zm9ybWF0SXRlbUlkfVwiXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiByYDtcblxuICBjb25zb2xlLmxvZyh7YXFsUXJ5fSk7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVhY3Rpb25zKSA9PiAocmVhY3Rpb25zID8gcmVhY3Rpb25zLnZhbHVlID09PSAndHJ1ZScgOiBmYWxzZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBmYWxzZSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQW1GO0FBQ25GLHNCQUFrQjtBQUdsQixtQkFBeUI7QUFDekIsNEJBQXFDO0FBQ3JDLDJCQUF1QjtBQUt2QixNQUFNLGdCQUF3QjtBQXFCdkIsTUFBTSx1QkFBdUIsQ0FBQyxVQUEyQixDQUFDLE1BQU07QUFDckUsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLFdBQU8sK0JBQVMsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsV0FBcUIsQ0FBQyxHQUN0QixpQkFBMEIsVUFDSjtBQUN0QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFVB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QUMsY0FBaUIsZ0NBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTyx3QkFBVztBQUFBLEVBQ3BCLEdBQUcsT0FBTyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBRU8sTUFBTSxxQkFBcUIsQ0FDaEMsU0FDQSxRQUNBLGNBQ0EsWUFDd0I7QUFDeEIsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFDakQsUUFBTSx5QkFBNkIsd0JBQVUsY0FBYyxFQUFFO0FBQzdELFFBQU0sRUFBQyxNQUFLLElBQUkscUJBQXFCLE9BQU87QUFHNUMsUUFBTSxTQUFpQix5QkFBeUIsWUFBWTtBQUFBLHVCQUN2QyxrQkFBa0I7QUFBQSxNQUNuQyxNQUFNLEdBQUc7QUFBQTtBQUdiLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUMsRUFDN0IsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsY0FDQSxZQUErQixlQUNWO0FBQ3JCLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsU0FBUyxFQUFDLFFBQVEsVUFBUyxFQUFDLElBQUk7QUFDakQsUUFBTSxlQUF1QixTQUFTLFNBQVM7QUFDL0MsUUFBTSxtQkFBdUIsNEJBQWMsTUFBTTtBQUNqRCxRQUFNLGtCQUFrQixjQUFjLGFBQWEsYUFBYTtBQUNoRSxRQUFNLGdCQUF3QixjQUFjLGFBQWEsVUFBVTtBQUduRSxRQUFNLFNBQWlCLGVBQWUsZUFBZSxLQUFLLFlBQVk7QUFBQSx3QkFDaEQsWUFBWSxRQUFRLGFBQWEsUUFBUSxZQUFZO0FBQUE7QUFBQTtBQUkzRSxVQUFRLElBQUksRUFBQyxPQUFNLENBQUM7QUFDcEIsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLENBQUMsV0FBVyxPQUFPLEtBQUssQ0FBQyxFQUM5QixLQUFLLENBQUMsY0FBZSxZQUFZLFVBQVUsVUFBVSxTQUFTLEtBQU0sRUFDcEUsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxLQUFLLENBQUM7QUFDeEM7IiwKICAibmFtZXMiOiBbInJlYWN0aW9uIl0KfQo=
@@ -1,3 +1,3 @@
1
- import type { ApiContext } from '../types/auth';
2
- import type { UserType } from '../types/users';
1
+ import type { ApiContext } from '../types/auth.types';
2
+ import type { UserType } from '../types/users.types';
3
3
  export declare const getSearchList: (context: ApiContext, query: string, from: number, to: number) => Promise<UserType[]>;
@@ -31,11 +31,11 @@ __export(search_exports, {
31
31
  });
32
32
  module.exports = __toCommonJS(search_exports);
33
33
  var import_arangojs = require("arangojs");
34
- var import_flatten = __toESM(require("lodash/flatten"));
35
- var import_uniqBy = __toESM(require("lodash/uniqBy"));
36
- var import_analyticsUtils = require("../utils/analyticsUtils");
34
+ var import_flatten = __toESM(require("lodash/flatten"), 1);
35
+ var import_uniqBy = __toESM(require("lodash/uniqBy"), 1);
37
36
  var import_users = require("./users");
38
- var import_error = require("../types/error");
37
+ var import_error = require("../types/error.types");
38
+ var import_analyticsUtils = require("../utils/analyticsUtils");
39
39
  var import_arangodbUtils = require("../utils/arangodbUtils");
40
40
  const eventCategory = "search";
41
41
  const getSearchList = (context, query, from, to) => {
@@ -87,4 +87,4 @@ const getSearchList = (context, query, from, to) => {
87
87
  0 && (module.exports = {
88
88
  getSearchList
89
89
  });
90
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gvdW5pcUJ5JztcblxuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMnO1xuaW1wb3J0IHtsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWV9IGZyb20gJy4vdXNlcnMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvcic7XG5pbXBvcnQge2dldExpbWl0fSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3NlYXJjaCc7XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHF1ZXJ5OiBzdHJpbmcsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICBpZihpc1N0cmluZykge1xuICAgIGNvbnN0IGZpZWxkczogYW55W10gPSBbXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdmaXJzdCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnbGFzdCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnZW1haWwnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ3VzZXJuYW1lJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICduYW1lJ31cbiAgICBdO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGZpZWxkcy5tYXAoKG9iaikgPT4ge1xuICAgICAgY29uc3QgcXJ5OiBzdHJpbmcgPSBgcHJlZml4OiR7cXVlcnl9YDtcbiAgICAgIGNvbnN0IHVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1IElOIEZVTExURVhUKCR7b2JqLmNvbGxlY3Rpb259LCAke29iai5maWVsZH0sICR7cXJ5fSwgNTApIFJFVFVSTiB1YDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeSh1c2VyUXJ5KS50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICAgIH0pKVxuICAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAnX2tleScpO1xuXG4gICAgICAgIHJldHVybiBsaXN0Lm1hcCgoaXRlbTogVXNlclR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCB7X2lkOiBpdGVtSWQsIG5hbWU6IGl0ZW1OYW1lfSA9IGl0ZW07XG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbklkTGlzdDogc3RyaW5nW10gPSBpdGVtSWQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBzdHJpbmcgPSBjb2xsZWN0aW9uSWRMaXN0WzBdO1xuICAgICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGNvbGxlY3Rpb24gPT09ICd1c2VycycgPyBnZXREaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lO1xuXG4gICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBuYW1lfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5waG9uZSA9PSBcIiR7cXVlcnl9XCJcbiAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFVzZXJUeXBlW10gPSBbXSkgPT4gbGlzdC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGl0ZW1JZCwgbmFtZTogaXRlbU5hbWV9ID0gaXRlbTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25JZExpc3Q6IHN0cmluZ1tdID0gaXRlbUlkLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uOiBzdHJpbmcgPSBjb2xsZWN0aW9uSWRMaXN0WzBdO1xuICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gY29sbGVjdGlvbiA9PT0gJ3VzZXJzJyA/IGdldERpc3BsYXlOYW1lKGl0ZW0pIDogaXRlbU5hbWU7XG5cbiAgICAgIHJldHVybiB7Li4uaXRlbSwgbmFtZX07XG4gICAgfSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgdmFsdWU6IGVycm9yLm1lc3NhZ2VcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsc0JBQWtCO0FBR2xCLHFCQUFvQjtBQUNwQixvQkFBbUI7QUFLbkIsNEJBQTJCO0FBQzNCLG1CQUE2QjtBQUM3QixtQkFBeUI7QUFDekIsMkJBQXVCO0FBRXZCLE1BQU0sZ0JBQXdCO0FBRXZCLE1BQU0sZ0JBQWdCLENBQUMsU0FBcUIsT0FBZSxNQUFjLE9BQW9DO0FBQ2xILFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLFdBQW9CO0FBRTFCLE1BQUcsVUFBVTtBQUNYLFVBQU0sU0FBZ0I7QUFBQSxNQUNwQixFQUFDLFlBQVksU0FBUyxPQUFPLFFBQU87QUFBQSxNQUNwQyxFQUFDLFlBQVksU0FBUyxPQUFPLE9BQU07QUFBQSxNQUNuQyxFQUFDLFlBQVksU0FBUyxPQUFPLFFBQU87QUFBQSxNQUNwQyxFQUFDLFlBQVksU0FBUyxPQUFPLFdBQVU7QUFBQSxNQUN2QyxFQUFDLFlBQVksU0FBUyxPQUFPLE9BQU07QUFBQSxJQUNyQztBQUVBLFdBQU8sUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVE7QUFDckMsWUFBTSxNQUFjLFVBQVUsS0FBSztBQUNuQyxZQUFNLFVBQW9CLHdDQUF3QixJQUFJLFVBQVUsS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQ3RGLGFBQU8sU0FBUyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBd0IsT0FBTyxJQUFJLENBQUM7QUFBQSxJQUMzRSxDQUFDLENBQUMsRUFDQyxLQUFLLENBQUMsWUFBWTtBQUNqQixZQUFNLFdBQU8sY0FBQUEsYUFBTyxlQUFBQyxTQUFRLE9BQU8sR0FBRyxNQUFNO0FBRTVDLGFBQU8sS0FBSyxJQUFJLENBQUMsU0FBbUI7QUFDbEMsY0FBTSxFQUFDLEtBQUssUUFBUSxNQUFNLFNBQVEsSUFBSTtBQUN0QyxjQUFNLG1CQUE2QixPQUFPLE1BQU0sR0FBRztBQUNuRCxjQUFNLGFBQXFCLGlCQUFpQixDQUFDO0FBQzdDLGNBQU0sT0FBZSxlQUFlLGNBQVUsNkJBQWUsSUFBSSxJQUFJO0FBRXJFLGVBQU8sRUFBQyxHQUFHLE1BQU0sS0FBSTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNMO0FBRUEsUUFBTSxZQUF1QiwrQkFBUyxNQUFNLEVBQUU7QUFDOUMsUUFBTSxTQUFpQjtBQUFBLDZCQUNJLEtBQUs7QUFBQSxVQUN4QixNQUFNLEdBQUc7QUFBQTtBQUdqQixTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLElBQUksQ0FBQyxFQUMxQyxLQUFLLENBQUMsT0FBbUIsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVM7QUFDbEQsVUFBTSxFQUFDLEtBQUssUUFBUSxNQUFNLFNBQVEsSUFBSTtBQUN0QyxVQUFNLG1CQUE2QixPQUFPLE1BQU0sR0FBRztBQUNuRCxVQUFNLGFBQXFCLGlCQUFpQixDQUFDO0FBQzdDLFVBQU0sT0FBZSxlQUFlLGNBQVUsNkJBQWUsSUFBSSxJQUFJO0FBRXJFLFdBQU8sRUFBQyxHQUFHLE1BQU0sS0FBSTtBQUFBLEVBQ3ZCLENBQUMsQ0FBQyxFQUNELE1BQU0sQ0FBQyxjQUFpQixvQ0FBYTtBQUFBLElBQ3BDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPLHdCQUFXO0FBQUEsSUFDbEIsT0FBTyxNQUFNO0FBQUEsRUFDZixHQUFHLE9BQU8sRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ2hDOyIsCiAgIm5hbWVzIjogWyJ1bmlxQnkiLCAiZmxhdHRlbiJdCn0K
90
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuXG5pbXBvcnQge2dldERpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMnO1xuaW1wb3J0IHtsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7Z2V0TGltaXR9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdzZWFyY2gnO1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoTGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBxdWVyeTogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1N0cmluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgaWYoaXNTdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZHM6IHtjb2xsZWN0aW9uOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmd9W10gPSBbXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdmaXJzdCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnbGFzdCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnZW1haWwnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ3VzZXJuYW1lJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICduYW1lJ31cbiAgICBdO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGZpZWxkcy5tYXAoKG9iaikgPT4ge1xuICAgICAgY29uc3QgcXJ5OiBzdHJpbmcgPSBgcHJlZml4OiR7cXVlcnl9YDtcbiAgICAgIGNvbnN0IHVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1IElOIEZVTExURVhUKCR7b2JqLmNvbGxlY3Rpb259LCAke29iai5maWVsZH0sICR7cXJ5fSwgNTApIFJFVFVSTiB1YDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeSh1c2VyUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gICAgfSkpXG4gICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gdW5pcUJ5KGZsYXR0ZW4ocmVzdWx0cyksICdfa2V5Jyk7XG5cbiAgICAgICAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtfaWQ6IGl0ZW1JZCwgbmFtZTogaXRlbU5hbWV9ID0gaXRlbTtcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSWRMaXN0OiBzdHJpbmdbXSA9IGl0ZW1JZC5zcGxpdCgnLycpO1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb246IHN0cmluZyA9IGNvbGxlY3Rpb25JZExpc3RbMF07XG4gICAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gY29sbGVjdGlvbiA9PT0gJ3VzZXJzJyA/IGdldERpc3BsYXlOYW1lKGl0ZW0pIDogaXRlbU5hbWU7XG5cbiAgICAgICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1LnBob25lID09IFwiJHtxdWVyeX1cIlxuICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBVc2VyVHlwZVtdID0gW10pID0+IGxpc3QubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB7X2lkOiBpdGVtSWQsIG5hbWU6IGl0ZW1OYW1lfSA9IGl0ZW07XG4gICAgICBjb25zdCBjb2xsZWN0aW9uSWRMaXN0OiBzdHJpbmdbXSA9IGl0ZW1JZC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgY29sbGVjdGlvbjogc3RyaW5nID0gY29sbGVjdGlvbklkTGlzdFswXTtcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGNvbGxlY3Rpb24gPT09ICd1c2VycycgPyBnZXREaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lO1xuXG4gICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgIH0pKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHZhbHVlOiBlcnJvci5tZXNzYWdlXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHNCQUFrQjtBQUVsQixxQkFBb0I7QUFDcEIsb0JBQW1CO0FBRW5CLG1CQUE2QjtBQUM3QixtQkFBeUI7QUFDekIsNEJBQTJCO0FBQzNCLDJCQUF1QjtBQU12QixNQUFNLGdCQUF3QjtBQUV2QixNQUFNLGdCQUFnQixDQUFDLFNBQXFCLE9BQWUsTUFBYyxPQUFvQztBQUNsSCxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFDbkIsUUFBTSxXQUFvQjtBQUUxQixNQUFHLFVBQVU7QUFDWCxVQUFNLFNBQWdEO0FBQUEsTUFDcEQsRUFBQyxZQUFZLFNBQVMsT0FBTyxRQUFPO0FBQUEsTUFDcEMsRUFBQyxZQUFZLFNBQVMsT0FBTyxPQUFNO0FBQUEsTUFDbkMsRUFBQyxZQUFZLFNBQVMsT0FBTyxRQUFPO0FBQUEsTUFDcEMsRUFBQyxZQUFZLFNBQVMsT0FBTyxXQUFVO0FBQUEsTUFDdkMsRUFBQyxZQUFZLFNBQVMsT0FBTyxPQUFNO0FBQUEsSUFDckM7QUFFQSxXQUFPLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRO0FBQ3JDLFlBQU0sTUFBYyxVQUFVLEtBQUs7QUFDbkMsWUFBTSxVQUFvQix3Q0FBd0IsSUFBSSxVQUFVLEtBQUssSUFBSSxLQUFLLEtBQUssR0FBRztBQUN0RixhQUFPLFNBQVMsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUM7QUFBQSxJQUM5RCxDQUFDLENBQUMsRUFDQyxLQUFLLENBQUMsWUFBWTtBQUNqQixZQUFNLFdBQU8sY0FBQUEsYUFBTyxlQUFBQyxTQUFRLE9BQU8sR0FBRyxNQUFNO0FBRTVDLGFBQU8sS0FBSyxJQUFJLENBQUMsU0FBbUI7QUFDbEMsY0FBTSxFQUFDLEtBQUssUUFBUSxNQUFNLFNBQVEsSUFBSTtBQUN0QyxjQUFNLG1CQUE2QixPQUFPLE1BQU0sR0FBRztBQUNuRCxjQUFNLGFBQXFCLGlCQUFpQixDQUFDO0FBQzdDLGNBQU0sT0FBZSxlQUFlLGNBQVUsNkJBQWUsSUFBSSxJQUFJO0FBRXJFLGVBQU8sRUFBQyxHQUFHLE1BQU0sS0FBSTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNMO0FBRUEsUUFBTSxZQUF1QiwrQkFBUyxNQUFNLEVBQUU7QUFDOUMsUUFBTSxTQUFpQjtBQUFBLDZCQUNJLEtBQUs7QUFBQSxVQUN4QixNQUFNLEdBQUc7QUFBQTtBQUdqQixTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUFXLE9BQU8sSUFBSSxDQUFDLEVBQzdCLEtBQUssQ0FBQyxPQUFtQixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUztBQUNsRCxVQUFNLEVBQUMsS0FBSyxRQUFRLE1BQU0sU0FBUSxJQUFJO0FBQ3RDLFVBQU0sbUJBQTZCLE9BQU8sTUFBTSxHQUFHO0FBQ25ELFVBQU0sYUFBcUIsaUJBQWlCLENBQUM7QUFDN0MsVUFBTSxPQUFlLGVBQWUsY0FBVSw2QkFBZSxJQUFJLElBQUk7QUFFckUsV0FBTyxFQUFDLEdBQUcsTUFBTSxLQUFJO0FBQUEsRUFDdkIsQ0FBQyxDQUFDLEVBQ0QsTUFBTSxDQUFDLGNBQWlCLG9DQUFhO0FBQUEsSUFDcEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxJQUNsQixPQUFPLE1BQU07QUFBQSxFQUNmLEdBQUcsT0FBTyxFQUFFLEtBQUssTUFBTSxJQUFJLENBQUM7QUFDaEM7IiwKICAibmFtZXMiOiBbInVuaXFCeSIsICJmbGF0dGVuIl0KfQo=
@@ -1,3 +1,9 @@
1
- import { SMSParamsType } from '../types/notifications';
2
- export declare const sendSms: ({ content, user, variables }: SMSParamsType) => Promise<any>;
3
- export declare const sendSmsTemplate: (templateName: string, { user, variables }: SMSParamsType) => Promise<boolean>;
1
+ import { SMSParamsType } from '../types/notifications.types';
2
+ interface SNSResponse {
3
+ MessageId?: string;
4
+ SequenceNumber?: string;
5
+ status?: string;
6
+ }
7
+ export declare const sendSms: ({ app, text, user, variables }: SMSParamsType) => Promise<SNSResponse>;
8
+ export declare const sendSmsTemplate: (templateName: string, { app, user, variables }: SMSParamsType) => Promise<boolean>;
9
+ export {};