@nlabs/reaktor 1.7.0 → 1.9.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 (230) hide show
  1. package/README.md +75 -0
  2. package/lib/actions/analytics.js +1 -1
  3. package/lib/actions/apps.js +1 -1
  4. package/lib/actions/connections.js +1 -1
  5. package/lib/actions/content.js +1 -1
  6. package/lib/actions/conversations.js +1 -1
  7. package/lib/actions/crm.d.ts +7 -1
  8. package/lib/actions/crm.js +224 -17
  9. package/lib/actions/crud.js +1 -1
  10. package/lib/actions/dynamodb.js +1 -1
  11. package/lib/actions/email.js +1 -1
  12. package/lib/actions/files.js +1 -1
  13. package/lib/actions/flags.js +1 -1
  14. package/lib/actions/groups.js +1 -1
  15. package/lib/actions/images.js +1 -1
  16. package/lib/actions/index.js +1 -1
  17. package/lib/actions/ios.js +1 -1
  18. package/lib/actions/locations.js +1 -1
  19. package/lib/actions/messages.js +1 -1
  20. package/lib/actions/notifications.js +1 -1
  21. package/lib/actions/payments.js +1 -1
  22. package/lib/actions/personas.js +1 -1
  23. package/lib/actions/posts.js +1 -1
  24. package/lib/actions/query.js +1 -1
  25. package/lib/actions/reactions.js +1 -1
  26. package/lib/actions/rum.js +14 -9
  27. package/lib/actions/s3.js +1 -1
  28. package/lib/actions/search.js +1 -1
  29. package/lib/actions/sms.js +1 -1
  30. package/lib/actions/statistics.js +1 -1
  31. package/lib/actions/subscriptions.js +1 -1
  32. package/lib/actions/tags.js +1 -1
  33. package/lib/actions/users.d.ts +4 -1
  34. package/lib/actions/users.js +28 -7
  35. package/lib/actions/videos.js +1 -1
  36. package/lib/adapters/arangoAdapter.js +1 -1
  37. package/lib/adapters/contentAdapter.js +1 -1
  38. package/lib/adapters/fileAdapter.js +1 -1
  39. package/lib/adapters/imageAdapter.js +1 -1
  40. package/lib/adapters/index.js +1 -1
  41. package/lib/adapters/messageAdapter.js +1 -1
  42. package/lib/adapters/postAdapter.js +1 -1
  43. package/lib/adapters/reaktorAdapter.js +1 -1
  44. package/lib/adapters/tagAdapter.js +1 -1
  45. package/lib/adapters/userAdapter.js +1 -1
  46. package/lib/config.js +1 -1
  47. package/lib/constants/collections.d.ts +12 -0
  48. package/lib/constants/collections.js +13 -1
  49. package/lib/durableChat/conversations.d.ts +62 -0
  50. package/lib/durableChat/conversations.js +729 -0
  51. package/lib/durableChat/errors.d.ts +6 -0
  52. package/lib/durableChat/errors.js +11 -0
  53. package/lib/durableChat/events.d.ts +22 -0
  54. package/lib/durableChat/events.js +50 -0
  55. package/lib/durableChat/index.d.ts +8 -0
  56. package/lib/durableChat/index.js +10 -0
  57. package/lib/durableChat/membership.d.ts +24 -0
  58. package/lib/durableChat/membership.js +85 -0
  59. package/lib/durableChat/messageTypes.d.ts +76 -0
  60. package/lib/durableChat/messageTypes.js +3 -0
  61. package/lib/durableChat/messages.d.ts +16 -0
  62. package/lib/durableChat/messages.js +257 -0
  63. package/lib/durableChat/transaction.d.ts +10 -0
  64. package/lib/durableChat/transaction.js +53 -0
  65. package/lib/durableChat/types.d.ts +81 -0
  66. package/lib/durableChat/types.js +3 -0
  67. package/lib/handlers/graphqlHandler.js +1 -1
  68. package/lib/index.d.ts +4 -1
  69. package/lib/index.js +4 -2
  70. package/lib/lambdas/actions/websockets.js +1 -1
  71. package/lib/lambdas/authorizer.js +1 -1
  72. package/lib/lambdas/connection.js +1 -1
  73. package/lib/lambdas/utils/message.js +1 -1
  74. package/lib/lambdas/utils/websocket.js +1 -1
  75. package/lib/mocks/conversation.js +1 -1
  76. package/lib/mocks/file.js +1 -1
  77. package/lib/mocks/group.js +1 -1
  78. package/lib/mocks/image.js +1 -1
  79. package/lib/mocks/post.js +1 -1
  80. package/lib/mocks/tag.js +1 -1
  81. package/lib/mocks/user.js +1 -1
  82. package/lib/mocks/video.js +1 -1
  83. package/lib/mutations/analytics/analytics.js +1 -1
  84. package/lib/mutations/content/content.js +1 -1
  85. package/lib/mutations/crm/crm.js +43 -11
  86. package/lib/mutations/events/events.js +1 -1
  87. package/lib/mutations/flags/flags.js +1 -1
  88. package/lib/mutations/groups/groups.js +1 -1
  89. package/lib/mutations/images/images.js +1 -1
  90. package/lib/mutations/index.js +1 -1
  91. package/lib/mutations/locations/locations.js +1 -1
  92. package/lib/mutations/messages/messages.js +1 -1
  93. package/lib/mutations/personas/personas.js +1 -1
  94. package/lib/mutations/posts/posts.js +1 -1
  95. package/lib/mutations/reactions/reactions.js +1 -1
  96. package/lib/mutations/rum/rum.js +1 -1
  97. package/lib/mutations/statistics/statistics.js +1 -1
  98. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  99. package/lib/mutations/tags/tags.js +1 -1
  100. package/lib/mutations/users/users.js +1 -1
  101. package/lib/mutations/videos/videos.js +1 -1
  102. package/lib/objectTypes/analytics.js +1 -1
  103. package/lib/objectTypes/app.js +1 -1
  104. package/lib/objectTypes/bankAccount.js +1 -1
  105. package/lib/objectTypes/connection.js +1 -1
  106. package/lib/objectTypes/content.js +1 -1
  107. package/lib/objectTypes/conversation.js +1 -1
  108. package/lib/objectTypes/creditCard.js +1 -1
  109. package/lib/objectTypes/crm.js +5 -1
  110. package/lib/objectTypes/document.js +1 -1
  111. package/lib/objectTypes/error.js +1 -1
  112. package/lib/objectTypes/event.js +1 -1
  113. package/lib/objectTypes/external.js +1 -1
  114. package/lib/objectTypes/file.js +1 -1
  115. package/lib/objectTypes/filter.js +1 -1
  116. package/lib/objectTypes/flag.js +5 -2
  117. package/lib/objectTypes/group.js +1 -1
  118. package/lib/objectTypes/iapSubscription.js +1 -1
  119. package/lib/objectTypes/image.js +1 -1
  120. package/lib/objectTypes/index.js +1 -1
  121. package/lib/objectTypes/location.js +1 -1
  122. package/lib/objectTypes/message.js +1 -1
  123. package/lib/objectTypes/passcode.js +1 -1
  124. package/lib/objectTypes/persona.js +1 -1
  125. package/lib/objectTypes/plan.js +1 -1
  126. package/lib/objectTypes/post.js +1 -1
  127. package/lib/objectTypes/query.js +1 -1
  128. package/lib/objectTypes/reaction.js +1 -1
  129. package/lib/objectTypes/relation.js +1 -1
  130. package/lib/objectTypes/rum.js +1 -1
  131. package/lib/objectTypes/search.js +1 -1
  132. package/lib/objectTypes/statistics.js +1 -1
  133. package/lib/objectTypes/subscription.js +1 -1
  134. package/lib/objectTypes/tag.js +1 -1
  135. package/lib/objectTypes/user.js +9 -1
  136. package/lib/objectTypes/video.js +1 -1
  137. package/lib/queries/analytics/analytics.js +1 -1
  138. package/lib/queries/content/content.js +1 -1
  139. package/lib/queries/crm/crm.js +41 -13
  140. package/lib/queries/events/events.js +1 -1
  141. package/lib/queries/flags/flags.js +1 -1
  142. package/lib/queries/groups/groups.js +1 -1
  143. package/lib/queries/images/images.js +1 -1
  144. package/lib/queries/index.js +1 -1
  145. package/lib/queries/locations/locations.js +1 -1
  146. package/lib/queries/messages/messages.js +1 -1
  147. package/lib/queries/personas/personas.js +1 -1
  148. package/lib/queries/posts/posts.js +1 -1
  149. package/lib/queries/query/query.js +1 -1
  150. package/lib/queries/reactions/reactions.js +1 -1
  151. package/lib/queries/statistics/statistics.js +1 -1
  152. package/lib/queries/subscriptions/subscriptions.js +1 -1
  153. package/lib/queries/tags/tags.js +1 -1
  154. package/lib/queries/users/users.js +1 -1
  155. package/lib/queries/videos/videos.js +1 -1
  156. package/lib/templates/email/layout.js +1 -1
  157. package/lib/templates/email/passwordForgot.js +1 -1
  158. package/lib/templates/email/passwordRecovery.js +1 -1
  159. package/lib/templates/email/verifyEmail.js +1 -1
  160. package/lib/templates/email/welcome.js +1 -1
  161. package/lib/templates/sms/passwordForgot.js +1 -1
  162. package/lib/templates/sms/passwordRecovery.js +1 -1
  163. package/lib/templates/sms/verifyEmail.js +1 -1
  164. package/lib/templates/sms/verifyPhone.js +1 -1
  165. package/lib/templates/sms/welcome.js +1 -1
  166. package/lib/types/analytics.types.js +1 -1
  167. package/lib/types/apps.types.js +1 -1
  168. package/lib/types/arangodb.types.d.ts +1 -1
  169. package/lib/types/arangodb.types.js +1 -1
  170. package/lib/types/auth.types.d.ts +1 -0
  171. package/lib/types/auth.types.js +1 -1
  172. package/lib/types/connections.types.js +1 -1
  173. package/lib/types/content.types.js +1 -1
  174. package/lib/types/conversations.types.js +1 -1
  175. package/lib/types/crm.types.d.ts +20 -1
  176. package/lib/types/crm.types.js +1 -1
  177. package/lib/types/email.types.js +1 -1
  178. package/lib/types/error.types.js +1 -1
  179. package/lib/types/files.types.js +1 -1
  180. package/lib/types/flags.types.js +1 -1
  181. package/lib/types/google.types.js +1 -1
  182. package/lib/types/groups.types.js +1 -1
  183. package/lib/types/images.types.js +1 -1
  184. package/lib/types/index.js +1 -1
  185. package/lib/types/locations.types.js +1 -1
  186. package/lib/types/messages.types.js +1 -1
  187. package/lib/types/notifications.types.js +1 -1
  188. package/lib/types/payments.types.js +1 -1
  189. package/lib/types/personas.types.js +1 -1
  190. package/lib/types/posts.types.js +1 -1
  191. package/lib/types/rum.types.js +1 -1
  192. package/lib/types/statistics.types.js +1 -1
  193. package/lib/types/tags.types.js +1 -1
  194. package/lib/types/users.types.d.ts +1 -0
  195. package/lib/types/users.types.js +1 -1
  196. package/lib/types/videos.types.js +1 -1
  197. package/lib/types/websockets.types.js +1 -1
  198. package/lib/upload.js +1 -1
  199. package/lib/utils/adapterUtils.js +1 -1
  200. package/lib/utils/analyticsUtils.js +1 -1
  201. package/lib/utils/appContext.d.ts +2 -0
  202. package/lib/utils/appContext.js +10 -0
  203. package/lib/utils/aqlHelpers.js +1 -1
  204. package/lib/utils/arangodbUtils.js +1 -1
  205. package/lib/utils/authUtils.js +1 -1
  206. package/lib/utils/awsUtils.js +1 -1
  207. package/lib/utils/collectionRegistry.js +1 -1
  208. package/lib/utils/contextUtils.js +1 -1
  209. package/lib/utils/dbI18n.example.js +1 -1
  210. package/lib/utils/dbI18n.js +1 -1
  211. package/lib/utils/googleTranslate.js +1 -1
  212. package/lib/utils/graphqlUtils.d.ts +1 -0
  213. package/lib/utils/graphqlUtils.js +1 -1
  214. package/lib/utils/imageUtils.js +1 -1
  215. package/lib/utils/index.js +1 -1
  216. package/lib/utils/languageDetection.js +1 -1
  217. package/lib/utils/localeUtils.example.js +1 -1
  218. package/lib/utils/localeUtils.js +1 -1
  219. package/lib/utils/middlewareUtils.js +1 -1
  220. package/lib/utils/queryBuilder.js +1 -1
  221. package/lib/utils/schemaUtils.js +1 -1
  222. package/lib/utils/sessionUtils.d.ts +4 -0
  223. package/lib/utils/sessionUtils.js +1 -1
  224. package/lib/utils/stripeUtils.js +2 -1
  225. package/lib/utils/templateUtils.js +1 -1
  226. package/lib/utils/testUtils.js +1 -1
  227. package/lib/utils/translationQueue.example.js +1 -1
  228. package/lib/utils/translationQueue.js +1 -1
  229. package/lib/videoProcessing.js +1 -1
  230. package/package.json +19 -19
@@ -612,4 +612,4 @@ export const updatePersona = async (context, persona)=>{
612
612
  }
613
613
  };
614
614
 
615
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGVyc29uYXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUlkLFxuICBwYXJzZU51bSxcbiAgcGFyc2VTdHJpbmcsXG4gIHBhcnNlVmFyQ2hhclxufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25LaW5kc30gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0Q29ubmVjdGlvbn0gZnJvbSAnLi9jb25uZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldFRhZ0xpc3RCeUl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UGVyc29uYVR5cGV9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmFzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3BlcnNvbmFzJztcbmNvbnN0IG1pbmltdW1BZHVsdEFnZSA9IDE4O1xuY29uc3QgbWluaW11bUFkdWx0QmlydGhkYXRlID0gRGF0ZS5ub3coKSAtIChtaW5pbXVtQWR1bHRBZ2UgKiAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyB7XG4gIHJlYWRvbmx5IG1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/OiAocGVyc29uYTogUGVyc29uYVR5cGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNvbmFMaXN0RmlsdGVycyB7XG4gIHJlYWRvbmx5IGdlbmRlcj86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPSAnZm9sbG93ZXJzJyB8ICdmb2xsb3dpbmcnIHwgJ2ZyaWVuZHMnO1xuXG5sZXQgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge307XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgdGFnc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlRBR1MpO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19DT05ORUNUSU9OKTtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zID0gKGV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge30pOiB2b2lkID0+IHtcbiAgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnMgPSB7Li4uZXh0ZW5zaW9uc307XG59O1xuXG5jb25zdCBidWlsZFBlcnNvbmFNdXRhdGlvbiA9IChwZXJzb25hOiBQZXJzb25hVHlwZSk6IFBhcnRpYWw8UGVyc29uYVR5cGU+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgaW1hZ2VJZCxcbiAgICBuYW1lLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvY2F0aW9uLFxuICAgIGxvbmdpdHVkZSxcbiAgICB1c2VySWRcbiAgfSA9IHBlcnNvbmE7XG5cbiAgcmV0dXJuIHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBpbWFnZUlkOiBpbWFnZUlkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKGltYWdlSWQpIDogdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBsYXN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGxhc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE2KSA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGZpZWxkcyA9IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zLm1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/LihwZXJzb25hKSB8fCB7fTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmllbGRzKS5yZWR1Y2UoKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59O1xuXG5jb25zdCBjcmVhdGVQZXJzb25hRWRnZSA9ICh1c2VyRG9jSWQ6IHN0cmluZywgcGVyc29uYURvY0lkOiBzdHJpbmcpOiBFZGdlVHlwZSA9PiAoe1xuICBfZnJvbTogcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpLFxuICBfa2V5OiBjcmVhdGVIYXNoKGBwZXJzb25hLSR7dXNlckRvY0lkfS0ke3BlcnNvbmFEb2NJZH1gKSxcbiAgX3RvOiBwYXJzZUFyYW5nb0lkKHBlcnNvbmFEb2NJZCksXG4gIGFkZGVkOiBEYXRlLm5vdygpXG59KTtcblxuY29uc3QgZ2V0VXNlckJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgdXNlci5fa2V5ID09ICR7dXNlcklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QZXJzb25hSWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVxdWVzdGVkUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZihyZXF1ZXN0ZWRQZXJzb25hSWQpIHtcbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEuX2tleSA9PSAke3JlcXVlc3RlZFBlcnNvbmFJZH1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEudXNlcklkID09ICR7c2Vzc2lvblVzZXJJZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gcGVyc29uYS5fa2V5XG4gICAgYCk7XG5cbiAgICByZXR1cm4gcGFyc2VJZChTdHJpbmcoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAnJykpO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKHNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gc2Vzc2lvblBlcnNvbmFJZDtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXJCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgc2Vzc2lvblVzZXJJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyh1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hT3duZXJVc2VySWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFub3JtYWxpemVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgbm9ybWFsaXplZFBlcnNvbmFJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy51c2VySWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0VXNlcklkOiBzdHJpbmcsXG4gIHNlc3Npb25Vc2VySWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWRPdmVycmlkZSB8fCAnJykgfHwgcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgPSBwYXJzZUlkKHRhcmdldFVzZXJJZCk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgfHwgc2Vzc2lvblVzZXJJZCA9PT0gbm9ybWFsaXplZFRhcmdldFVzZXJJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBzZXNzaW9uVXNlcklkLFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0VXNlcklkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgIClcbiAgXSk7XG5cbiAgcmV0dXJuICEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0UGVyc29uYUlkOiBzdHJpbmcsXG4gIHNlc3Npb25QZXJzb25hSWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKHNlc3Npb25QZXJzb25hSWRPdmVycmlkZSB8fCAnJykgfHwgYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCA9IHBhcnNlSWQodGFyZ2V0UGVyc29uYUlkKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkID09PSBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBbdGFyZ2V0VXNlcklkLCBvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFBlcnNvbmFPd25lclVzZXJJZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIGlmKCEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYodGFyZ2V0VXNlcklkICYmIHNlc3Npb25Vc2VySWQpIHtcbiAgICByZXR1cm4gaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgdGFyZ2V0VXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8UGljazxQZXJzb25hVHlwZSwgJ2lzQmxvY2tlZCcgfCAnaXNGb2xsb3dlZEJ5JyB8ICdpc0ZvbGxvd2luZycgfCAnaXNGcmllbmQnPj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dlZEJ5OiBmYWxzZSxcbiAgICAgIGlzRm9sbG93aW5nOiBmYWxzZSxcbiAgICAgIGlzRnJpZW5kOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvdXRib3VuZEJsb2NrID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgKTtcblxuICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6ICEhb3V0Ym91bmRCbG9jayxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW291dGJvdW5kQ29ubmVjdGlvbiwgaW5ib3VuZENvbm5lY3Rpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4gICAgKVxuICBdKTtcbiAgY29uc3QgaXNGb2xsb3dpbmcgPSAhIW91dGJvdW5kQ29ubmVjdGlvbjtcbiAgY29uc3QgaXNGb2xsb3dlZEJ5ID0gISFpbmJvdW5kQ29ubmVjdGlvbjtcblxuICByZXR1cm4ge1xuICAgIGlzQmxvY2tlZDogZmFsc2UsXG4gICAgaXNGb2xsb3dlZEJ5LFxuICAgIGlzRm9sbG93aW5nLFxuICAgIGlzRnJpZW5kOiBpc0ZvbGxvd2luZyAmJiBpc0ZvbGxvd2VkQnlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93ZXJDb3VudCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hRm9sbG93ZXJDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX3RvID09ICR7cGVyc29uYURvY0lkfVxuICAgICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgIFJFVFVSTiBjb3VudFxuICAgIGA7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gICAgcmV0dXJuIE51bWJlcihhd2FpdCBjdXJzb3IubmV4dCgpIHx8IDApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93aW5nQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50JztcbiAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFmb3JtYXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7Zm9ybWF0UGVyc29uYUlkfWA7XG4gICAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiBoYyBJTiBoYXNDb25uZWN0aW9uXG4gICAgICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBnZXRQZXJzb25hQnlLZXkgPSBhc3luYyAoZGF0YWJhc2VOYW1lOiBzdHJpbmcsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtwZXJzb25hSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gcGVyc29uYVxuICBgO1xuICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gIHJldHVybiBjdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgZm9ybWF0UGVyc29uYVJlc3VsdCA9IChwZXJzb25hOiBQZXJzb25hVHlwZSB8IG51bGwgfCB1bmRlZmluZWQsIGZhbGxiYWNrUGVyc29uYUlkID0gJycpOiBQZXJzb25hVHlwZSB8IG51bGwgPT4ge1xuICBpZighcGVyc29uYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wZXJzb25hLFxuICAgIHBlcnNvbmFJZDogKHBlcnNvbmEgYXMgYW55KS5fa2V5IHx8IGZhbGxiYWNrUGVyc29uYUlkXG4gIH0gYXMgUGVyc29uYVR5cGU7XG59O1xuXG5jb25zdCBub3JtYWxpemVSZWxhdGlvbkZpbHRlciA9IChyZWxhdGlvbjogdW5rbm93bik6IFBlcnNvbmFSZWxhdGlvbkZpbHRlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlbGF0aW9uIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZih2YWx1ZSA9PT0gJ2ZvbGxvd2VycycgfHwgdmFsdWUgPT09ICdmcmllbmRzJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiAnZm9sbG93aW5nJztcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMgPSBhc3luYyAoXG4gIGZpbHRlcnM6IFBlcnNvbmFMaXN0RmlsdGVycyA9IHt9XG4pOiBQcm9taXNlPFJlcXVpcmVkPFBlcnNvbmFMaXN0RmlsdGVycz4+ID0+IHtcbiAgY29uc3QgZ2VuZGVycyA9IEFycmF5LmlzQXJyYXkoZmlsdGVycy5nZW5kZXIpXG4gICAgPyBmaWx0ZXJzLmdlbmRlci5tYXAoKGdlbmRlcikgPT4gcGFyc2VDaGFyKFN0cmluZyhnZW5kZXIgfHwgJycpLCAxKS50b1VwcGVyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbilcbiAgICA6IFtdO1xuXG4gIHJldHVybiB7XG4gICAgZ2VuZGVyOiBnZW5kZXJzXG4gIH07XG59O1xuXG5jb25zdCBoeWRyYXRlUGVyc29uYUxpc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYXM6IFBlcnNvbmFUeXBlW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBoeWRyYXRlZFBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcGVyc29uYXMubWFwKGFzeW5jIChwZXJzb25hKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uX2tleSB8fCBwZXJzb25hPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIGNvbnN0IGlzQmxvY2tlZCA9IG5leHRQZXJzb25hSWRcbiAgICAgICAgPyBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBuZXh0UGVyc29uYUlkKVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBpZihpc0Jsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFUYWdzID0gbmV4dFBlcnNvbmFJZCA/IGF3YWl0IGdldFRhZ0xpc3RCeUl0ZW0oY29udGV4dCwgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7bmV4dFBlcnNvbmFJZH1gKSA6IFtdO1xuXG4gICAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAgIC4uLihwZXJzb25hIHx8IHt9KSxcbiAgICAgICAgdGFnczogcGVyc29uYVRhZ3NcbiAgICAgIH0gYXMgUGVyc29uYVR5cGUsIG5leHRQZXJzb25hSWQpO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGh5ZHJhdGVkUGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5jb25zdCBlbnN1cmVQZXJzb25hRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1BFUlNPTkEpO1xuICBjb25zdCBlZGdlID0gY3JlYXRlUGVyc29uYUVkZ2UoYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7dXNlcklkfWAsIHBlcnNvbmFEb2NJZCk7XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7b3ZlcndyaXRlTW9kZTogJ2lnbm9yZScsIHJldHVybk5ldzogdHJ1ZSwgc2lsZW50OiB0cnVlfSk7XG59O1xuXG5jb25zdCBzeW5jVXNlclBlcnNvbmEgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGVyc29uYUlkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBlcnNvbmFJZFxuICB9O1xuICBjb25zdCBtYXBwZWRJbWFnZUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uaW1hZ2VJZCB8fCAnJykpO1xuXG4gIGlmKG1hcHBlZEltYWdlSWQpIHtcbiAgICB1c2VyVXBkYXRlLmltYWdlSWQgPSBtYXBwZWRJbWFnZUlkO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlVXNlclFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dXNlcklkfVxuICAgIFdJVEggJHt1c2VyVXBkYXRlfVxuICAgIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXJDdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXBkYXRlVXNlclFyeSk7XG4gIGF3YWl0IHVzZXJDdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFPd25lciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hOiBQZXJzb25hVHlwZSk6IFByb21pc2U8e1xuICBwZXJzb25hSWQ6IHN0cmluZztcbiAgdXNlcjogVXNlclR5cGUgfCBudWxsO1xuICB1c2VySWQ6IHN0cmluZztcbn0+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgZXhwbGljaXRVc2VySWQgPSBwYXJzZUlkKHBlcnNvbmE/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHVzZXJJZCA9IGV4cGxpY2l0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQ7XG5cbiAgaWYoIXVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB2YWxpZCB1c2VySWQgaXMgcmVxdWlyZWQgZm9yIHBlcnNvbmEgYWN0aW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHVzZXJJZCk7XG4gIGNvbnN0IGxpbmtlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBwZXJzb25hSWQgPSBsaW5rZWRQZXJzb25hSWQgfHwgY3JlYXRlSGFzaCh1c2VySWQpO1xuXG4gIHJldHVybiB7XG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXIsXG4gICAgdXNlcklkXG4gIH07XG59O1xuXG5jb25zdCBzYXZlUGVyc29uYURvY3VtZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hOiBQZXJzb25hVHlwZSxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJhc2VQZXJzb25hID0gYnVpbGRQZXJzb25hTXV0YXRpb24oey4uLnBlcnNvbmEsIHVzZXJJZH0pO1xuICBjb25zdCBjdXN0b21QZXJzb25hID0gYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24ocGVyc29uYSk7XG4gIGNvbnN0IHVwc2VydFBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7e1xuICAgICAgX2tleTogcGVyc29uYUlkLFxuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgVVBEQVRFICR7e1xuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBwZXJzb25hQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwc2VydFBlcnNvbmFRdWVyeSk7XG4gIHJldHVybiBhd2FpdCBwZXJzb25hQ3Vyc29yLm5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hQnlJZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hQnlJZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgZ2V0UGVyc29uYUJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCBmb3JtYXRQZXJzb25hSWQpO1xuXG4gICAgaWYoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIGZvcm1hdFBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0YWdzLCByZWxhdGlvbnNoaXBTdGF0ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gKSxcbiAgICAgIGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAuLi5wZXJzb25hLFxuICAgICAgLi4ucmVsYXRpb25zaGlwU3RhdGUsXG4gICAgICB0YWdzXG4gICAgfSBhcyBQZXJzb25hVHlwZSwgZm9ybWF0UGVyc29uYUlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlJZHMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkcyA9IEFycmF5LmlzQXJyYXkocGVyc29uYUlkcylcbiAgICA/IHBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IHBhcnNlSWQocGVyc29uYUlkKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCBQcm9taXNlLmFsbChub3JtYWxpemVkUGVyc29uYUlkcy5tYXAoKHBlcnNvbmFJZCkgPT4gZ2V0UGVyc29uYUJ5SWQoY29udGV4dCwgcGVyc29uYUlkKSkpO1xuICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbSA9IDAsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgcmVsYXRpb24gPSAnZm9sbG93aW5nJyxcbiAgICB0byA9IDI0XG4gIH06IHtmcm9tPzogbnVtYmVyOyBwZXJzb25hSWQ/OiBzdHJpbmc7IHJlbGF0aW9uPzogUGVyc29uYVJlbGF0aW9uRmlsdGVyIHwgc3RyaW5nOyB0bz86IG51bWJlcn0gPSB7fVxuKTogUHJvbWlzZTxQZXJzb25hVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hTGlzdEJ5UmVsYXRpb24nO1xuICBjb25zdCBhY3RpdmVSZWxhdGlvbiA9IG5vcm1hbGl6ZVJlbGF0aW9uRmlsdGVyKHJlbGF0aW9uKTtcbiAgY29uc3QgbGltaXRGcm9tID0gTnVtYmVyKGZyb20pID49IDAgPyBOdW1iZXIoZnJvbSkgOiAwO1xuICBjb25zdCBsaW1pdFRvID0gTnVtYmVyKHRvKSA+IGxpbWl0RnJvbSA/IE51bWJlcih0bykgOiBsaW1pdEZyb20gKyAyNDtcbiAgY29uc3QgbGltaXRDb3VudCA9IGxpbWl0VG8gLSBsaW1pdEZyb207XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25QZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzZXNzaW9uUGVyc29uYUlkfWA7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3QgcmVsYXRpb25RdWVyeTogQXFsUXVlcnkgPSBhY3RpdmVSZWxhdGlvbiA9PT0gJ2ZvbGxvd2luZydcbiAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoY29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IExFTkdUSChcbiAgICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWwgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgICApID4gMCxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgIGBcbiAgICAgIDogYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dlcnMnXG4gICAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX2Zyb20sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fZnJvbSlcbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBpc0ZvbGxvd2luZyA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX3RvID09IHBlcnNvbmEuX2lkXG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IHRydWUsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZ1xuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICAgIDogYXFsYFxuICAgICAgICBGT1IgZm9sbG93Q29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBmb2xsb3dDb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoZm9sbG93Q29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoZm9sbG93Q29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dlZEJ5ID0gTEVOR1RIKFxuICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWxDb25uZWN0aW9uIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX3RvID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIGlzRm9sbG93ZWRCeVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0ZyaWVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgO1xuXG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocmVsYXRpb25RdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiAoYXdhaXQgaHlkcmF0ZVBlcnNvbmFMaXN0KGNvbnRleHQsIHBlcnNvbmFzKSkubWFwKChwZXJzb25hKSA9PiAoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIGlzRnJpZW5kOiBCb29sZWFuKHBlcnNvbmEuaXNGb2xsb3dpbmcgJiYgcGVyc29uYS5pc0ZvbGxvd2VkQnkpXG4gICAgfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmcm9tLCBwZXJzb25hSWQsIHJlbGF0aW9uOiBhY3RpdmVSZWxhdGlvbiwgdG99LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge3RhZ3MgPSBbXSwgdXNlcm5hbWUgPSAnJ306IHt0YWdzPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAge2ZpbHRlcnMgPSB7fSwgZnJvbSA9IDAsIHRvID0gMTB9OiB7ZmlsdGVycz86IFBlcnNvbmFMaXN0RmlsdGVyczsgZnJvbT86IG51bWJlcjsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVRhZ3MnO1xuICBjb25zdCBmb3JtYXRUYWdzID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgID8gdGFncy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCB0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5leHRUYWcgPSBTdHJpbmcodGFnTmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmKG5leHRUYWcpIHtcbiAgICAgICAgbGlzdC5wdXNoKG5leHRUYWcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9LCBbXSlcbiAgICA6IFtdO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IFN0cmluZyh1c2VybmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMTA7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSA9IGF3YWl0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMoZmlsdGVycyk7XG5cbiAgaWYoIWZvcm1hdFRhZ3MubGVuZ3RoIHx8ICF0YXJnZXRHZW5kZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlcm5hbWVGaWx0ZXIgPSBmb3JtYXRVc2VybmFtZVxuICAgICAgPyBsaXRlcmFsKGBGSUxURVIgQ09OVEFJTlMoTE9XRVIocGVyc29uYS5uYW1lIHx8IFwiXCIpLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3Qgc2Vzc2lvbkZpbHRlciA9IHNlc3Npb25Vc2VySWRcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIHBlcnNvbmEudXNlcklkICE9IFwiJHtzZXNzaW9uVXNlcklkfVwiYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgcGVyc29uYVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0IElOICR7dGFnc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgICBGT1IgcGVyc29uYSwgZWRnZSBJTiBPVVRCT1VORCB0ICR7aXNUYWdnZWRDb2xsZWN0aW9ufVxuICAgICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlBFUlNPTkFTfX1cbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBwZXJzb25hR2VuZGVyID0gVVBQRVIocGVyc29uYS5nZW5kZXIgfHwgXCJcIilcbiAgICAgICAgICAke25hbWVkUGVyc29uYUZpbHRlcn1cbiAgICAgICAgICAke3VzZXJuYW1lRmlsdGVyfVxuICAgICAgICAgICR7c2Vzc2lvbkZpbHRlcn1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA8PSAke21pbmltdW1BZHVsdEJpcnRoZGF0ZX1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUdlbmRlciAhPSBcIlwiXG4gICAgICAgICAgRklMVEVSIFBPU0lUSU9OKCR7dGFyZ2V0R2VuZGVyc30sIHBlcnNvbmFHZW5kZXIpXG4gICAgICAgICAgQ09MTEVDVCBwZXJzb25hS2V5ID0gcGVyc29uYS5fa2V5IElOVE8gZ3JvdXBlZCA9IHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIHBlcnNvbmEsXG4gICAgICAgICAgICBtYXRjaGVkVGFnOiBMT1dFUih0Lm5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIExFVCBtYXRjaGVkVGFncyA9IFVOSVFVRShncm91cGVkWypdLm1hdGNoZWRUYWcpXG4gICAgICAgICAgTEVUIGJpcnRoZGF0ZSA9IEZJUlNUKGdyb3VwZWRbKl0uYmlydGhkYXRlKVxuICAgICAgICAgIExFVCBwZXJzb25hRG9jID0gRklSU1QoZ3JvdXBlZFsqXS5wZXJzb25hKVxuICAgICAgICAgIFNPUlQgTEVOR1RIKG1hdGNoZWRUYWdzKSBERVNDLCBMT1dFUihwZXJzb25hRG9jLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hRG9jLCB7YmlydGhkYXRlLCBtYXRjaGVkVGFnQ291bnQ6IExFTkdUSChtYXRjaGVkVGFncyl9KVxuICAgIGA7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocGVyc29uYVF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKSBhcyBQZXJzb25hVHlwZVtdO1xuXG4gICAgcmV0dXJuIGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWx0ZXJzOiB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSwgZnJvbSwgdGFnczogZm9ybWF0VGFncywgdG8sIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25uZWN0aW9uS2luZHMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImdldENvbm5lY3Rpb24iLCJnZXRUYWdMaXN0QnlJdGVtIiwiZXZlbnRDYXRlZ29yeSIsIm1pbmltdW1BZHVsdEFnZSIsIm1pbmltdW1BZHVsdEJpcnRoZGF0ZSIsIkRhdGUiLCJub3ciLCJwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJ0YWdzQ29sbGVjdGlvbiIsIlRBR1MiLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiY29uZmlndXJlUGVyc29uYUFjdGlvbnMiLCJleHRlbnNpb25zIiwiYnVpbGRQZXJzb25hTXV0YXRpb24iLCJwZXJzb25hIiwiY2l0eSIsImNvdW50cnkiLCJzdHJlZXQxIiwic3RyZWV0MiIsInppcCIsInN0YXRlIiwidGltZXpvbmUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmRlciIsImltYWdlSWQiLCJuYW1lIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInVzZXJJZCIsInVuZGVmaW5lZCIsInRvVXBwZXJDYXNlIiwiYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24iLCJmaWVsZHMiLCJtYXBDdXN0b21QZXJzb25hRmllbGRzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInZhbHVlIiwiY3JlYXRlUGVyc29uYUVkZ2UiLCJ1c2VyRG9jSWQiLCJwZXJzb25hRG9jSWQiLCJfZnJvbSIsIl9rZXkiLCJfdG8iLCJhZGRlZCIsImdldFVzZXJCeUtleSIsImRhdGFiYXNlTmFtZSIsInFyeSIsImN1cnNvciIsInF1ZXJ5IiwibmV4dCIsImdldFNlc3Npb25QZXJzb25hSWQiLCJjb250ZXh0IiwicGVyc29uYUlkIiwicmVxdWVzdGVkUGVyc29uYUlkIiwiU3RyaW5nIiwic2Vzc2lvblVzZXJJZCIsInNlc3Npb24iLCJzZXNzaW9uUGVyc29uYUlkIiwidXNlciIsImdldFBlcnNvbmFPd25lclVzZXJJZCIsIm5vcm1hbGl6ZWRQZXJzb25hSWQiLCJnZXRQZXJzb25hQnlLZXkiLCJpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCIsInRhcmdldFVzZXJJZCIsInNlc3Npb25Vc2VySWRPdmVycmlkZSIsIm5vcm1hbGl6ZWRUYXJnZXRVc2VySWQiLCJvdXRib3VuZEJsb2NrIiwiaW5ib3VuZEJsb2NrIiwiUHJvbWlzZSIsImFsbCIsIkJMT0NLIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRQZXJzb25hSWQiLCJzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNCbG9ja2VkIiwiaXNGb2xsb3dlZEJ5IiwiaXNGb2xsb3dpbmciLCJpc0ZyaWVuZCIsIm91dGJvdW5kQ29ubmVjdGlvbiIsImluYm91bmRDb25uZWN0aW9uIiwiRk9MTE9XIiwiZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQiLCJhY3Rpb24iLCJmb3JtYXRQZXJzb25hSWQiLCJOdW1iZXIiLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQZXJzb25hRm9sbG93aW5nQ291bnQiLCJmb3JtYXRQZXJzb25hUmVzdWx0IiwiZmFsbGJhY2tQZXJzb25hSWQiLCJub3JtYWxpemVSZWxhdGlvbkZpbHRlciIsInJlbGF0aW9uIiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVzb2x2ZVBlcnNvbmFMaXN0RmlsdGVycyIsImZpbHRlcnMiLCJnZW5kZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZmlsdGVyIiwiQm9vbGVhbiIsImh5ZHJhdGVQZXJzb25hTGlzdCIsInBlcnNvbmFzIiwiaHlkcmF0ZWRQZXJzb25hcyIsIm5leHRQZXJzb25hSWQiLCJwZXJzb25hVGFncyIsInRhZ3MiLCJlbnN1cmVQZXJzb25hRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIkhBU19QRVJTT05BIiwiZWRnZSIsInNhdmUiLCJvdmVyd3JpdGVNb2RlIiwicmV0dXJuTmV3Iiwic2lsZW50Iiwic3luY1VzZXJQZXJzb25hIiwidXNlclVwZGF0ZSIsIm1vZGlmaWVkIiwibWFwcGVkSW1hZ2VJZCIsInVwZGF0ZVVzZXJRcnkiLCJ1c2VyQ3Vyc29yIiwicmVzb2x2ZVBlcnNvbmFPd25lciIsImV4cGxpY2l0VXNlcklkIiwiRXJyb3IiLCJsaW5rZWRQZXJzb25hSWQiLCJzYXZlUGVyc29uYURvY3VtZW50IiwiYmFzZVBlcnNvbmEiLCJjdXN0b21QZXJzb25hIiwidXBzZXJ0UGVyc29uYVF1ZXJ5IiwicGVyc29uYUN1cnNvciIsImdldFBlcnNvbmFCeUlkIiwicmVsYXRpb25zaGlwU3RhdGUiLCJnZXRQZXJzb25hTGlzdEJ5SWRzIiwicGVyc29uYUlkcyIsIm5vcm1hbGl6ZWRQZXJzb25hSWRzIiwibGVuZ3RoIiwiZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uIiwiZnJvbSIsInRvIiwiYWN0aXZlUmVsYXRpb24iLCJsaW1pdEZyb20iLCJsaW1pdFRvIiwibGltaXRDb3VudCIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJuYW1lZFBlcnNvbmFGaWx0ZXIiLCJyZWxhdGlvblF1ZXJ5IiwidGhlbiIsImdldFBlcnNvbmFMaXN0QnlUYWdzIiwidXNlcm5hbWUiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJuZXh0VGFnIiwicHVzaCIsImZvcm1hdFVzZXJuYW1lIiwidGFyZ2V0R2VuZGVycyIsInVzZXJuYW1lRmlsdGVyIiwic2Vzc2lvbkZpbHRlciIsInBlcnNvbmFRdWVyeSIsImFkZFBlcnNvbmEiLCJzYXZlZFBlcnNvbmEiLCJfaWQiLCJ1cGRhdGVQZXJzb25hIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsV0FBVyxFQUNYQyxZQUFZLFFBQ1AsZUFBZTtBQUN0QixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsZUFBZSxRQUFPLGdDQUFnQztBQUM5RCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxhQUFhLFFBQU8sbUJBQW1CO0FBQy9DLFNBQVFDLGdCQUFnQixRQUFPLFlBQVk7QUFTM0MsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFBd0JDLEtBQUtDLEdBQUcs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
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcGVyc29uYXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUlkLFxuICBwYXJzZU51bSxcbiAgcGFyc2VTdHJpbmcsXG4gIHBhcnNlVmFyQ2hhclxufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Nvbm5lY3Rpb25LaW5kc30gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0Q29ubmVjdGlvbn0gZnJvbSAnLi9jb25uZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldFRhZ0xpc3RCeUl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UGVyc29uYVR5cGV9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmFzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3BlcnNvbmFzJztcbmNvbnN0IG1pbmltdW1BZHVsdEFnZSA9IDE4O1xuY29uc3QgbWluaW11bUFkdWx0QmlydGhkYXRlID0gRGF0ZS5ub3coKSAtIChtaW5pbXVtQWR1bHRBZ2UgKiAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyB7XG4gIHJlYWRvbmx5IG1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/OiAocGVyc29uYTogUGVyc29uYVR5cGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNvbmFMaXN0RmlsdGVycyB7XG4gIHJlYWRvbmx5IGdlbmRlcj86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBQZXJzb25hUmVsYXRpb25GaWx0ZXIgPSAnZm9sbG93ZXJzJyB8ICdmb2xsb3dpbmcnIHwgJ2ZyaWVuZHMnO1xuXG5sZXQgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge307XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgdGFnc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlRBR1MpO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19DT05ORUNUSU9OKTtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyZVBlcnNvbmFBY3Rpb25zID0gKGV4dGVuc2lvbnM6IFBlcnNvbmFBY3Rpb25FeHRlbnNpb25zID0ge30pOiB2b2lkID0+IHtcbiAgcGVyc29uYUFjdGlvbkV4dGVuc2lvbnMgPSB7Li4uZXh0ZW5zaW9uc307XG59O1xuXG5jb25zdCBidWlsZFBlcnNvbmFNdXRhdGlvbiA9IChwZXJzb25hOiBQZXJzb25hVHlwZSk6IFBhcnRpYWw8UGVyc29uYVR5cGU+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgaW1hZ2VJZCxcbiAgICBuYW1lLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvY2F0aW9uLFxuICAgIGxvbmdpdHVkZSxcbiAgICB1c2VySWRcbiAgfSA9IHBlcnNvbmE7XG5cbiAgcmV0dXJuIHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBpbWFnZUlkOiBpbWFnZUlkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKGltYWdlSWQpIDogdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBsYXN0TmFtZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGxhc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTIpIDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE2KSA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuY29uc3QgYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24gPSAocGVyc29uYTogUGVyc29uYVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGZpZWxkcyA9IHBlcnNvbmFBY3Rpb25FeHRlbnNpb25zLm1hcEN1c3RvbVBlcnNvbmFGaWVsZHM/LihwZXJzb25hKSB8fCB7fTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmllbGRzKS5yZWR1Y2UoKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59O1xuXG5jb25zdCBjcmVhdGVQZXJzb25hRWRnZSA9ICh1c2VyRG9jSWQ6IHN0cmluZywgcGVyc29uYURvY0lkOiBzdHJpbmcpOiBFZGdlVHlwZSA9PiAoe1xuICBfZnJvbTogcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpLFxuICBfa2V5OiBjcmVhdGVIYXNoKGBwZXJzb25hLSR7dXNlckRvY0lkfS0ke3BlcnNvbmFEb2NJZH1gKSxcbiAgX3RvOiBwYXJzZUFyYW5nb0lkKHBlcnNvbmFEb2NJZCksXG4gIGFkZGVkOiBEYXRlLm5vdygpXG59KTtcblxuY29uc3QgZ2V0VXNlckJ5S2V5ID0gYXN5bmMgKGRhdGFiYXNlTmFtZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgdXNlci5fa2V5ID09ICR7dXNlcklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcbiAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICByZXR1cm4gY3Vyc29yLm5leHQoKTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QZXJzb25hSWQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVxdWVzdGVkUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZihyZXF1ZXN0ZWRQZXJzb25hSWQpIHtcbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEuX2tleSA9PSAke3JlcXVlc3RlZFBlcnNvbmFJZH1cbiAgICAgICAgRklMVEVSIHBlcnNvbmEudXNlcklkID09ICR7c2Vzc2lvblVzZXJJZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gcGVyc29uYS5fa2V5XG4gICAgYCk7XG5cbiAgICByZXR1cm4gcGFyc2VJZChTdHJpbmcoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAnJykpO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKHNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gc2Vzc2lvblBlcnNvbmFJZDtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXJCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgc2Vzc2lvblVzZXJJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyh1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hT3duZXJVc2VySWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFub3JtYWxpemVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGdldFBlcnNvbmFCeUtleShjb250ZXh0LmRhdGFiYXNlTmFtZSwgbm9ybWFsaXplZFBlcnNvbmFJZCk7XG4gIHJldHVybiBwYXJzZUlkKFN0cmluZyhwZXJzb25hPy51c2VySWQgfHwgJycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0VXNlcklkOiBzdHJpbmcsXG4gIHNlc3Npb25Vc2VySWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWRPdmVycmlkZSB8fCAnJykgfHwgcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgPSBwYXJzZUlkKHRhcmdldFVzZXJJZCk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRVc2VySWQgfHwgc2Vzc2lvblVzZXJJZCA9PT0gbm9ybWFsaXplZFRhcmdldFVzZXJJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IFtvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBzZXNzaW9uVXNlcklkLFxuICAgICAgQ09MTEVDVElPTlMuVVNFUlMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0VXNlcklkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkJMT0NLXG4gICAgKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFVzZXJJZCxcbiAgICAgIENPTExFQ1RJT05TLlVTRVJTLFxuICAgICAgc2Vzc2lvblVzZXJJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgIClcbiAgXSk7XG5cbiAgcmV0dXJuICEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFyZ2V0UGVyc29uYUlkOiBzdHJpbmcsXG4gIHNlc3Npb25QZXJzb25hSWRPdmVycmlkZT86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKHNlc3Npb25QZXJzb25hSWRPdmVycmlkZSB8fCAnJykgfHwgYXdhaXQgZ2V0U2Vzc2lvblBlcnNvbmFJZChjb250ZXh0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCA9IHBhcnNlSWQodGFyZ2V0UGVyc29uYUlkKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkID09PSBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBbdGFyZ2V0VXNlcklkLCBvdXRib3VuZEJsb2NrLCBpbmJvdW5kQmxvY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFBlcnNvbmFPd25lclVzZXJJZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkKSxcbiAgICBnZXRDb25uZWN0aW9uKFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgc2Vzc2lvblBlcnNvbmFJZCxcbiAgICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICAgIENvbm5lY3Rpb25LaW5kcy5CTE9DS1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgICApXG4gIF0pO1xuXG4gIGlmKCEhb3V0Ym91bmRCbG9jayB8fCAhIWluYm91bmRCbG9jaykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYodGFyZ2V0VXNlcklkICYmIHNlc3Npb25Vc2VySWQpIHtcbiAgICByZXR1cm4gaXNVc2VyVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgdGFyZ2V0VXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhcmdldFBlcnNvbmFJZDogc3RyaW5nLFxuICBzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGU/OiBzdHJpbmdcbik6IFByb21pc2U8UGljazxQZXJzb25hVHlwZSwgJ2lzQmxvY2tlZCcgfCAnaXNGb2xsb3dlZEJ5JyB8ICdpc0ZvbGxvd2luZycgfCAnaXNGcmllbmQnPj4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUgfHwgJycpIHx8IGF3YWl0IGdldFNlc3Npb25QZXJzb25hSWQoY29udGV4dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgPSBwYXJzZUlkKHRhcmdldFBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIW5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCA9PT0gbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6IGZhbHNlLFxuICAgICAgaXNGb2xsb3dlZEJ5OiBmYWxzZSxcbiAgICAgIGlzRm9sbG93aW5nOiBmYWxzZSxcbiAgICAgIGlzRnJpZW5kOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvdXRib3VuZEJsb2NrID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgbm9ybWFsaXplZFRhcmdldFBlcnNvbmFJZCxcbiAgICBDb25uZWN0aW9uS2luZHMuQkxPQ0tcbiAgKTtcblxuICBpZihhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0Jsb2NrZWQ6ICEhb3V0Ym91bmRCbG9jayxcbiAgICAgIGlzRm9sbG93ZWRCeTogZmFsc2UsXG4gICAgICBpc0ZvbGxvd2luZzogZmFsc2UsXG4gICAgICBpc0ZyaWVuZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW291dGJvdW5kQ29ubmVjdGlvbiwgaW5ib3VuZENvbm5lY3Rpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldENvbm5lY3Rpb24oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBzZXNzaW9uUGVyc29uYUlkLFxuICAgICAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gICAgICBub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkLFxuICAgICAgQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuICAgICksXG4gICAgZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIG5vcm1hbGl6ZWRUYXJnZXRQZXJzb25hSWQsXG4gICAgICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgICAgIHNlc3Npb25QZXJzb25hSWQsXG4gICAgICBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4gICAgKVxuICBdKTtcbiAgY29uc3QgaXNGb2xsb3dpbmcgPSAhIW91dGJvdW5kQ29ubmVjdGlvbjtcbiAgY29uc3QgaXNGb2xsb3dlZEJ5ID0gISFpbmJvdW5kQ29ubmVjdGlvbjtcblxuICByZXR1cm4ge1xuICAgIGlzQmxvY2tlZDogZmFsc2UsXG4gICAgaXNGb2xsb3dlZEJ5LFxuICAgIGlzRm9sbG93aW5nLFxuICAgIGlzRnJpZW5kOiBpc0ZvbGxvd2luZyAmJiBpc0ZvbGxvd2VkQnlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93ZXJDb3VudCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hRm9sbG93ZXJDb3VudCc7XG4gIGNvbnN0IGZvcm1hdFBlcnNvbmFJZCA9IHBhcnNlSWQocGVyc29uYUlkKTtcblxuICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gO1xuICAgIGNvbnN0IHFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgaGMgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgICBGSUxURVIgaGMuX3RvID09ICR7cGVyc29uYURvY0lkfVxuICAgICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgIFJFVFVSTiBjb3VudFxuICAgIGA7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gICAgcmV0dXJuIE51bWJlcihhd2FpdCBjdXJzb3IubmV4dCgpIHx8IDApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtwZXJzb25hSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hRm9sbG93aW5nQ291bnQgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUZvbGxvd2luZ0NvdW50JztcbiAgY29uc3QgZm9ybWF0UGVyc29uYUlkID0gcGFyc2VJZChwZXJzb25hSWQpO1xuXG4gIGlmKCFmb3JtYXRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyc29uYURvY0lkID0gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7Zm9ybWF0UGVyc29uYUlkfWA7XG4gICAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiBoYyBJTiBoYXNDb25uZWN0aW9uXG4gICAgICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgICBSRVRVUk4gY291bnRcbiAgICBgO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxcnkpO1xuICAgIHJldHVybiBOdW1iZXIoYXdhaXQgY3Vyc29yLm5leHQoKSB8fCAwKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBnZXRQZXJzb25hQnlLZXkgPSBhc3luYyAoZGF0YWJhc2VOYW1lOiBzdHJpbmcsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgcXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcGVyc29uYSBJTiAke3BlcnNvbmFzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBwZXJzb25hLl9rZXkgPT0gJHtwZXJzb25hSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gcGVyc29uYVxuICBgO1xuICBjb25zdCBjdXJzb3IgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHFyeSk7XG4gIHJldHVybiBjdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgZm9ybWF0UGVyc29uYVJlc3VsdCA9IChwZXJzb25hOiBQZXJzb25hVHlwZSB8IG51bGwgfCB1bmRlZmluZWQsIGZhbGxiYWNrUGVyc29uYUlkID0gJycpOiBQZXJzb25hVHlwZSB8IG51bGwgPT4ge1xuICBpZighcGVyc29uYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wZXJzb25hLFxuICAgIHBlcnNvbmFJZDogKHBlcnNvbmEgYXMgYW55KS5fa2V5IHx8IGZhbGxiYWNrUGVyc29uYUlkXG4gIH0gYXMgUGVyc29uYVR5cGU7XG59O1xuXG5jb25zdCBub3JtYWxpemVSZWxhdGlvbkZpbHRlciA9IChyZWxhdGlvbjogdW5rbm93bik6IFBlcnNvbmFSZWxhdGlvbkZpbHRlciA9PiB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHJlbGF0aW9uIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZih2YWx1ZSA9PT0gJ2ZvbGxvd2VycycgfHwgdmFsdWUgPT09ICdmcmllbmRzJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiAnZm9sbG93aW5nJztcbn07XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMgPSBhc3luYyAoXG4gIGZpbHRlcnM6IFBlcnNvbmFMaXN0RmlsdGVycyA9IHt9XG4pOiBQcm9taXNlPFJlcXVpcmVkPFBlcnNvbmFMaXN0RmlsdGVycz4+ID0+IHtcbiAgY29uc3QgZ2VuZGVycyA9IEFycmF5LmlzQXJyYXkoZmlsdGVycy5nZW5kZXIpXG4gICAgPyBmaWx0ZXJzLmdlbmRlci5tYXAoKGdlbmRlcikgPT4gcGFyc2VDaGFyKFN0cmluZyhnZW5kZXIgfHwgJycpLCAxKS50b1VwcGVyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbilcbiAgICA6IFtdO1xuXG4gIHJldHVybiB7XG4gICAgZ2VuZGVyOiBnZW5kZXJzXG4gIH07XG59O1xuXG5jb25zdCBoeWRyYXRlUGVyc29uYUxpc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYXM6IFBlcnNvbmFUeXBlW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBoeWRyYXRlZFBlcnNvbmFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcGVyc29uYXMubWFwKGFzeW5jIChwZXJzb25hKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uX2tleSB8fCBwZXJzb25hPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIGNvbnN0IGlzQmxvY2tlZCA9IG5leHRQZXJzb25hSWRcbiAgICAgICAgPyBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBuZXh0UGVyc29uYUlkKVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBpZihpc0Jsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFUYWdzID0gbmV4dFBlcnNvbmFJZCA/IGF3YWl0IGdldFRhZ0xpc3RCeUl0ZW0oY29udGV4dCwgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7bmV4dFBlcnNvbmFJZH1gKSA6IFtdO1xuXG4gICAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAgIC4uLihwZXJzb25hIHx8IHt9KSxcbiAgICAgICAgdGFnczogcGVyc29uYVRhZ3NcbiAgICAgIH0gYXMgUGVyc29uYVR5cGUsIG5leHRQZXJzb25hSWQpO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGh5ZHJhdGVkUGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5jb25zdCBlbnN1cmVQZXJzb25hRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1BFUlNPTkEpO1xuICBjb25zdCBlZGdlID0gY3JlYXRlUGVyc29uYUVkZ2UoYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7dXNlcklkfWAsIHBlcnNvbmFEb2NJZCk7XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7b3ZlcndyaXRlTW9kZTogJ2lnbm9yZScsIHJldHVybk5ldzogdHJ1ZSwgc2lsZW50OiB0cnVlfSk7XG59O1xuXG5jb25zdCBzeW5jVXNlclBlcnNvbmEgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBwZXJzb25hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGVyc29uYUlkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1c2VyVXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBlcnNvbmFJZFxuICB9O1xuICBjb25zdCBtYXBwZWRJbWFnZUlkID0gcGFyc2VJZChTdHJpbmcocGVyc29uYT8uaW1hZ2VJZCB8fCAnJykpO1xuXG4gIGlmKG1hcHBlZEltYWdlSWQpIHtcbiAgICB1c2VyVXBkYXRlLmltYWdlSWQgPSBtYXBwZWRJbWFnZUlkO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlVXNlclFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dXNlcklkfVxuICAgIFdJVEggJHt1c2VyVXBkYXRlfVxuICAgIElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXJDdXJzb3IgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXBkYXRlVXNlclFyeSk7XG4gIGF3YWl0IHVzZXJDdXJzb3IubmV4dCgpO1xufTtcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFPd25lciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hOiBQZXJzb25hVHlwZSk6IFByb21pc2U8e1xuICBwZXJzb25hSWQ6IHN0cmluZztcbiAgdXNlcjogVXNlclR5cGUgfCBudWxsO1xuICB1c2VySWQ6IHN0cmluZztcbn0+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgZXhwbGljaXRVc2VySWQgPSBwYXJzZUlkKHBlcnNvbmE/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IHVzZXJJZCA9IGV4cGxpY2l0VXNlcklkIHx8IHNlc3Npb25Vc2VySWQ7XG5cbiAgaWYoIXVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB2YWxpZCB1c2VySWQgaXMgcmVxdWlyZWQgZm9yIHBlcnNvbmEgYWN0aW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyQnlLZXkoY29udGV4dC5kYXRhYmFzZU5hbWUsIHVzZXJJZCk7XG4gIGNvbnN0IGxpbmtlZFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBlcnNvbmE/Ll9rZXkgfHwgcGVyc29uYT8ucGVyc29uYUlkIHx8IHVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCBwZXJzb25hSWQgPSBsaW5rZWRQZXJzb25hSWQgfHwgY3JlYXRlSGFzaCh1c2VySWQpO1xuXG4gIHJldHVybiB7XG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXIsXG4gICAgdXNlcklkXG4gIH07XG59O1xuXG5jb25zdCBzYXZlUGVyc29uYURvY3VtZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hOiBQZXJzb25hVHlwZSxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJhc2VQZXJzb25hID0gYnVpbGRQZXJzb25hTXV0YXRpb24oey4uLnBlcnNvbmEsIHVzZXJJZH0pO1xuICBjb25zdCBjdXN0b21QZXJzb25hID0gYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24ocGVyc29uYSk7XG4gIGNvbnN0IHVwc2VydFBlcnNvbmFRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke3BlcnNvbmFJZH19XG4gICAgSU5TRVJUICR7e1xuICAgICAgX2tleTogcGVyc29uYUlkLFxuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgVVBEQVRFICR7e1xuICAgICAgLi4uYmFzZVBlcnNvbmEsXG4gICAgICAuLi5jdXN0b21QZXJzb25hLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHVzZXJJZFxuICAgIH19XG4gICAgSU4gJHtwZXJzb25hc0NvbGxlY3Rpb259XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBwZXJzb25hQ3Vyc29yID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVwc2VydFBlcnNvbmFRdWVyeSk7XG4gIHJldHVybiBhd2FpdCBwZXJzb25hQ3Vyc29yLm5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hQnlJZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYVR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hQnlJZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRQZXJzb25hSWQgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG5cbiAgICBpZighZm9ybWF0UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgZ2V0UGVyc29uYUJ5S2V5KGNvbnRleHQuZGF0YWJhc2VOYW1lLCBmb3JtYXRQZXJzb25hSWQpO1xuXG4gICAgaWYoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIGZvcm1hdFBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0YWdzLCByZWxhdGlvbnNoaXBTdGF0ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZXRUYWdMaXN0QnlJdGVtKGNvbnRleHQsIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2Zvcm1hdFBlcnNvbmFJZH1gKSxcbiAgICAgIGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBmb3JtYXRQZXJzb25hSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybWF0UGVyc29uYVJlc3VsdCh7XG4gICAgICAuLi5wZXJzb25hLFxuICAgICAgLi4ucmVsYXRpb25zaGlwU3RhdGUsXG4gICAgICB0YWdzXG4gICAgfSBhcyBQZXJzb25hVHlwZSwgZm9ybWF0UGVyc29uYUlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBhd2FpdCBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3BlcnNvbmFJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBlcnNvbmFMaXN0QnlJZHMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGVyc29uYUlkcyA9IEFycmF5LmlzQXJyYXkocGVyc29uYUlkcylcbiAgICA/IHBlcnNvbmFJZHMubWFwKChwZXJzb25hSWQpID0+IHBhcnNlSWQocGVyc29uYUlkKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcblxuICBpZighbm9ybWFsaXplZFBlcnNvbmFJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCBQcm9taXNlLmFsbChub3JtYWxpemVkUGVyc29uYUlkcy5tYXAoKHBlcnNvbmFJZCkgPT4gZ2V0UGVyc29uYUJ5SWQoY29udGV4dCwgcGVyc29uYUlkKSkpO1xuICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKEJvb2xlYW4pIGFzIFBlcnNvbmFUeXBlW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbSA9IDAsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgcmVsYXRpb24gPSAnZm9sbG93aW5nJyxcbiAgICB0byA9IDI0XG4gIH06IHtmcm9tPzogbnVtYmVyOyBwZXJzb25hSWQ/OiBzdHJpbmc7IHJlbGF0aW9uPzogUGVyc29uYVJlbGF0aW9uRmlsdGVyIHwgc3RyaW5nOyB0bz86IG51bWJlcn0gPSB7fVxuKTogUHJvbWlzZTxQZXJzb25hVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQZXJzb25hTGlzdEJ5UmVsYXRpb24nO1xuICBjb25zdCBhY3RpdmVSZWxhdGlvbiA9IG5vcm1hbGl6ZVJlbGF0aW9uRmlsdGVyKHJlbGF0aW9uKTtcbiAgY29uc3QgbGltaXRGcm9tID0gTnVtYmVyKGZyb20pID49IDAgPyBOdW1iZXIoZnJvbSkgOiAwO1xuICBjb25zdCBsaW1pdFRvID0gTnVtYmVyKHRvKSA+IGxpbWl0RnJvbSA/IE51bWJlcih0bykgOiBsaW1pdEZyb20gKyAyNDtcbiAgY29uc3QgbGltaXRDb3VudCA9IGxpbWl0VG8gLSBsaW1pdEZyb207XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBhd2FpdCBnZXRTZXNzaW9uUGVyc29uYUlkKGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25QZXJzb25hRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtzZXNzaW9uUGVyc29uYUlkfWA7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3QgcmVsYXRpb25RdWVyeTogQXFsUXVlcnkgPSBhY3RpdmVSZWxhdGlvbiA9PT0gJ2ZvbGxvd2luZydcbiAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgY29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoY29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IExFTkdUSChcbiAgICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWwgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbC5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgICApID4gMCxcbiAgICAgICAgICAgIGlzRm9sbG93aW5nOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgIGBcbiAgICAgIDogYWN0aXZlUmVsYXRpb24gPT09ICdmb2xsb3dlcnMnXG4gICAgICAgID8gYXFsYFxuICAgICAgICBGT1IgY29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBjb25uZWN0aW9uLl90byA9PSAke3Nlc3Npb25QZXJzb25hRG9jSWR9XG4gICAgICAgICAgRklMVEVSIGNvbm5lY3Rpb24udHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICAgICAgRklMVEVSIFNUQVJUU19XSVRIKGNvbm5lY3Rpb24uX2Zyb20sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoY29ubmVjdGlvbi5fZnJvbSlcbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBpc0ZvbGxvd2luZyA9IExFTkdUSChcbiAgICAgICAgICAgIEZPUiByZWNpcHJvY2FsIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWwuX3RvID09IHBlcnNvbmEuX2lkXG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgU09SVCBMT1dFUihwZXJzb25hLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hLCB7XG4gICAgICAgICAgICBiaXJ0aGRhdGU6IHBlcnNvbmFCaXJ0aGRhdGUsXG4gICAgICAgICAgICBpc0ZvbGxvd2VkQnk6IHRydWUsXG4gICAgICAgICAgICBpc0ZvbGxvd2luZ1xuICAgICAgICAgIH0pXG4gICAgICBgXG4gICAgICAgIDogYXFsYFxuICAgICAgICBGT1IgZm9sbG93Q29ubmVjdGlvbiBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBmb2xsb3dDb25uZWN0aW9uLl9mcm9tID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICBGSUxURVIgZm9sbG93Q29ubmVjdGlvbi50eXBlID09ICR7Q29ubmVjdGlvbktpbmRzLkZPTExPV31cbiAgICAgICAgICBGSUxURVIgU1RBUlRTX1dJVEgoZm9sbG93Q29ubmVjdGlvbi5fdG8sICR7YCR7Q09MTEVDVElPTlMuUEVSU09OQVN9L2B9KVxuICAgICAgICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoZm9sbG93Q29ubmVjdGlvbi5fdG8pXG4gICAgICAgICAgTEVUIG93bmVyID0gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCBwZXJzb25hLnVzZXJJZClcbiAgICAgICAgICBMRVQgcGVyc29uYUJpcnRoZGF0ZSA9IFRPX05VTUJFUihvd25lci5iaXJ0aGRhdGUgfHwgMClcbiAgICAgICAgICBMRVQgaXNGb2xsb3dlZEJ5ID0gTEVOR1RIKFxuICAgICAgICAgICAgRk9SIHJlY2lwcm9jYWxDb25uZWN0aW9uIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgICAgIEZJTFRFUiByZWNpcHJvY2FsQ29ubmVjdGlvbi5fZnJvbSA9PSBwZXJzb25hLl9pZFxuICAgICAgICAgICAgICBGSUxURVIgcmVjaXByb2NhbENvbm5lY3Rpb24uX3RvID09ICR7c2Vzc2lvblBlcnNvbmFEb2NJZH1cbiAgICAgICAgICAgICAgRklMVEVSIHJlY2lwcm9jYWxDb25uZWN0aW9uLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICAgIFJFVFVSTiAxXG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsXG4gICAgICAgICAgJHtuYW1lZFBlcnNvbmFGaWx0ZXJ9XG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPiAwXG4gICAgICAgICAgRklMVEVSIHBlcnNvbmFCaXJ0aGRhdGUgPD0gJHttaW5pbXVtQWR1bHRCaXJ0aGRhdGV9XG4gICAgICAgICAgRklMVEVSIGlzRm9sbG93ZWRCeVxuICAgICAgICAgIFNPUlQgTE9XRVIocGVyc29uYS5uYW1lIHx8ICcnKSBBU0NcbiAgICAgICAgICBMSU1JVCAke2xpbWl0RnJvbX0sICR7bGltaXRDb3VudH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocGVyc29uYSwge1xuICAgICAgICAgICAgYmlydGhkYXRlOiBwZXJzb25hQmlydGhkYXRlLFxuICAgICAgICAgICAgaXNGb2xsb3dlZEJ5OiB0cnVlLFxuICAgICAgICAgICAgaXNGb2xsb3dpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0ZyaWVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICBgO1xuXG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocmVsYXRpb25RdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSkgYXMgUGVyc29uYVR5cGVbXTtcblxuICAgIHJldHVybiAoYXdhaXQgaHlkcmF0ZVBlcnNvbmFMaXN0KGNvbnRleHQsIHBlcnNvbmFzKSkubWFwKChwZXJzb25hKSA9PiAoe1xuICAgICAgLi4ucGVyc29uYSxcbiAgICAgIGlzRnJpZW5kOiBCb29sZWFuKHBlcnNvbmEuaXNGb2xsb3dpbmcgJiYgcGVyc29uYS5pc0ZvbGxvd2VkQnkpXG4gICAgfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmcm9tLCBwZXJzb25hSWQsIHJlbGF0aW9uOiBhY3RpdmVSZWxhdGlvbiwgdG99LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQZXJzb25hTGlzdEJ5VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge3RhZ3MgPSBbXSwgdXNlcm5hbWUgPSAnJ306IHt0YWdzPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAge2ZpbHRlcnMgPSB7fSwgZnJvbSA9IDAsIHRvID0gMTB9OiB7ZmlsdGVycz86IFBlcnNvbmFMaXN0RmlsdGVyczsgZnJvbT86IG51bWJlcjsgdG8/OiBudW1iZXJ9ID0ge31cbik6IFByb21pc2U8UGVyc29uYVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UGVyc29uYUxpc3RCeVRhZ3MnO1xuICBjb25zdCBmb3JtYXRUYWdzID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgID8gdGFncy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCB0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5leHRUYWcgPSBTdHJpbmcodGFnTmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmKG5leHRUYWcpIHtcbiAgICAgICAgbGlzdC5wdXNoKG5leHRUYWcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9LCBbXSlcbiAgICA6IFtdO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IFN0cmluZyh1c2VybmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxpbWl0RnJvbSA9IE51bWJlcihmcm9tKSA+PSAwID8gTnVtYmVyKGZyb20pIDogMDtcbiAgY29uc3QgbGltaXRUbyA9IE51bWJlcih0bykgPiBsaW1pdEZyb20gPyBOdW1iZXIodG8pIDogbGltaXRGcm9tICsgMTA7XG4gIGNvbnN0IGxpbWl0Q291bnQgPSBsaW1pdFRvIC0gbGltaXRGcm9tO1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpO1xuICBjb25zdCB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSA9IGF3YWl0IHJlc29sdmVQZXJzb25hTGlzdEZpbHRlcnMoZmlsdGVycyk7XG5cbiAgaWYoIWZvcm1hdFRhZ3MubGVuZ3RoIHx8ICF0YXJnZXRHZW5kZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlcm5hbWVGaWx0ZXIgPSBmb3JtYXRVc2VybmFtZVxuICAgICAgPyBsaXRlcmFsKGBGSUxURVIgQ09OVEFJTlMoTE9XRVIocGVyc29uYS5uYW1lIHx8IFwiXCIpLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgbmFtZWRQZXJzb25hRmlsdGVyID0gbGl0ZXJhbCgnRklMVEVSIExFTkdUSChUUklNKHBlcnNvbmEubmFtZSB8fCBcIlwiKSkgPiAwJyk7XG4gICAgY29uc3Qgc2Vzc2lvbkZpbHRlciA9IHNlc3Npb25Vc2VySWRcbiAgICAgID8gbGl0ZXJhbChgRklMVEVSIHBlcnNvbmEudXNlcklkICE9IFwiJHtzZXNzaW9uVXNlcklkfVwiYClcbiAgICAgIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgcGVyc29uYVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0IElOICR7dGFnc0NvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgICBGT1IgcGVyc29uYSwgZWRnZSBJTiBPVVRCT1VORCB0ICR7aXNUYWdnZWRDb2xsZWN0aW9ufVxuICAgICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlBFUlNPTkFTfX1cbiAgICAgICAgICBMRVQgb3duZXIgPSBET0NVTUVOVCgke3VzZXJzQ29sbGVjdGlvbn0sIHBlcnNvbmEudXNlcklkKVxuICAgICAgICAgIExFVCBwZXJzb25hQmlydGhkYXRlID0gVE9fTlVNQkVSKG93bmVyLmJpcnRoZGF0ZSB8fCAwKVxuICAgICAgICAgIExFVCBwZXJzb25hR2VuZGVyID0gVVBQRVIocGVyc29uYS5nZW5kZXIgfHwgXCJcIilcbiAgICAgICAgICAke25hbWVkUGVyc29uYUZpbHRlcn1cbiAgICAgICAgICAke3VzZXJuYW1lRmlsdGVyfVxuICAgICAgICAgICR7c2Vzc2lvbkZpbHRlcn1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA+IDBcbiAgICAgICAgICBGSUxURVIgcGVyc29uYUJpcnRoZGF0ZSA8PSAke21pbmltdW1BZHVsdEJpcnRoZGF0ZX1cbiAgICAgICAgICBGSUxURVIgcGVyc29uYUdlbmRlciAhPSBcIlwiXG4gICAgICAgICAgRklMVEVSIFBPU0lUSU9OKCR7dGFyZ2V0R2VuZGVyc30sIHBlcnNvbmFHZW5kZXIpXG4gICAgICAgICAgQ09MTEVDVCBwZXJzb25hS2V5ID0gcGVyc29uYS5fa2V5IElOVE8gZ3JvdXBlZCA9IHtcbiAgICAgICAgICAgIGJpcnRoZGF0ZTogcGVyc29uYUJpcnRoZGF0ZSxcbiAgICAgICAgICAgIHBlcnNvbmEsXG4gICAgICAgICAgICBtYXRjaGVkVGFnOiBMT1dFUih0Lm5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIExFVCBtYXRjaGVkVGFncyA9IFVOSVFVRShncm91cGVkWypdLm1hdGNoZWRUYWcpXG4gICAgICAgICAgTEVUIGJpcnRoZGF0ZSA9IEZJUlNUKGdyb3VwZWRbKl0uYmlydGhkYXRlKVxuICAgICAgICAgIExFVCBwZXJzb25hRG9jID0gRklSU1QoZ3JvdXBlZFsqXS5wZXJzb25hKVxuICAgICAgICAgIFNPUlQgTEVOR1RIKG1hdGNoZWRUYWdzKSBERVNDLCBMT1dFUihwZXJzb25hRG9jLm5hbWUgfHwgJycpIEFTQ1xuICAgICAgICAgIExJTUlUICR7bGltaXRGcm9tfSwgJHtsaW1pdENvdW50fVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwZXJzb25hRG9jLCB7YmlydGhkYXRlLCBtYXRjaGVkVGFnQ291bnQ6IExFTkdUSChtYXRjaGVkVGFncyl9KVxuICAgIGA7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocGVyc29uYVF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKSBhcyBQZXJzb25hVHlwZVtdO1xuXG4gICAgcmV0dXJuIGh5ZHJhdGVQZXJzb25hTGlzdChjb250ZXh0LCBwZXJzb25hcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgYXdhaXQgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWx0ZXJzOiB7Z2VuZGVyOiB0YXJnZXRHZW5kZXJzfSwgZnJvbSwgdGFnczogZm9ybWF0VGFncywgdG8sIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBlcnNvbmEgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYTogUGVyc29uYVR5cGUpOiBQcm9taXNlPFBlcnNvbmFUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQZXJzb25hJztcblxuICB0cnkge1xuICAgIGNvbnN0IHtwZXJzb25hSWQsIHVzZXJJZH0gPSBhd2FpdCByZXNvbHZlUGVyc29uYU93bmVyKGNvbnRleHQsIHBlcnNvbmEpO1xuICAgIGNvbnN0IHNhdmVkUGVyc29uYSA9IGF3YWl0IHNhdmVQZXJzb25hRG9jdW1lbnQoY29udGV4dCwgcGVyc29uYSwgcGVyc29uYUlkLCB1c2VySWQpO1xuICAgIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHNhdmVkUGVyc29uYT8uX2lkIHx8IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3NhdmVkUGVyc29uYT8uX2tleSB8fCBwZXJzb25hSWR9YDtcblxuICAgIGF3YWl0IGVuc3VyZVBlcnNvbmFFZGdlKGNvbnRleHQsIHVzZXJJZCwgcGVyc29uYURvY0lkKTtcbiAgICBhd2FpdCBzeW5jVXNlclBlcnNvbmEoY29udGV4dCwgdXNlcklkLCBzYXZlZFBlcnNvbmEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBlcnNvbmFJZCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IGdldFBlcnNvbmFCeUlkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHx8IGZvcm1hdFBlcnNvbmFSZXN1bHQoc2F2ZWRQZXJzb25hLCBwZXJzb25hSWQpIGFzIFBlcnNvbmFUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7cGVyc29uYX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25uZWN0aW9uS2luZHMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImdldENvbm5lY3Rpb24iLCJnZXRUYWdMaXN0QnlJdGVtIiwiZXZlbnRDYXRlZ29yeSIsIm1pbmltdW1BZHVsdEFnZSIsIm1pbmltdW1BZHVsdEJpcnRoZGF0ZSIsIkRhdGUiLCJub3ciLCJwZXJzb25hQWN0aW9uRXh0ZW5zaW9ucyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJ0YWdzQ29sbGVjdGlvbiIsIlRBR1MiLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiY29uZmlndXJlUGVyc29uYUFjdGlvbnMiLCJleHRlbnNpb25zIiwiYnVpbGRQZXJzb25hTXV0YXRpb24iLCJwZXJzb25hIiwiY2l0eSIsImNvdW50cnkiLCJzdHJlZXQxIiwic3RyZWV0MiIsInppcCIsInN0YXRlIiwidGltZXpvbmUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmRlciIsImltYWdlSWQiLCJuYW1lIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInVzZXJJZCIsInVuZGVmaW5lZCIsInRvVXBwZXJDYXNlIiwiYnVpbGRDdXN0b21QZXJzb25hTXV0YXRpb24iLCJmaWVsZHMiLCJtYXBDdXN0b21QZXJzb25hRmllbGRzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInZhbHVlIiwiY3JlYXRlUGVyc29uYUVkZ2UiLCJ1c2VyRG9jSWQiLCJwZXJzb25hRG9jSWQiLCJfZnJvbSIsIl9rZXkiLCJfdG8iLCJhZGRlZCIsImdldFVzZXJCeUtleSIsImRhdGFiYXNlTmFtZSIsInFyeSIsImN1cnNvciIsInF1ZXJ5IiwibmV4dCIsImdldFNlc3Npb25QZXJzb25hSWQiLCJjb250ZXh0IiwicGVyc29uYUlkIiwicmVxdWVzdGVkUGVyc29uYUlkIiwiU3RyaW5nIiwic2Vzc2lvblVzZXJJZCIsInNlc3Npb24iLCJzZXNzaW9uUGVyc29uYUlkIiwidXNlciIsImdldFBlcnNvbmFPd25lclVzZXJJZCIsIm5vcm1hbGl6ZWRQZXJzb25hSWQiLCJnZXRQZXJzb25hQnlLZXkiLCJpc1VzZXJWaXNpYmlsaXR5QmxvY2tlZCIsInRhcmdldFVzZXJJZCIsInNlc3Npb25Vc2VySWRPdmVycmlkZSIsIm5vcm1hbGl6ZWRUYXJnZXRVc2VySWQiLCJvdXRib3VuZEJsb2NrIiwiaW5ib3VuZEJsb2NrIiwiUHJvbWlzZSIsImFsbCIsIkJMT0NLIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJ0YXJnZXRQZXJzb25hSWQiLCJzZXNzaW9uUGVyc29uYUlkT3ZlcnJpZGUiLCJub3JtYWxpemVkVGFyZ2V0UGVyc29uYUlkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNCbG9ja2VkIiwiaXNGb2xsb3dlZEJ5IiwiaXNGb2xsb3dpbmciLCJpc0ZyaWVuZCIsIm91dGJvdW5kQ29ubmVjdGlvbiIsImluYm91bmRDb25uZWN0aW9uIiwiRk9MTE9XIiwiZ2V0UGVyc29uYUZvbGxvd2VyQ291bnQiLCJhY3Rpb24iLCJmb3JtYXRQZXJzb25hSWQiLCJOdW1iZXIiLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQZXJzb25hRm9sbG93aW5nQ291bnQiLCJmb3JtYXRQZXJzb25hUmVzdWx0IiwiZmFsbGJhY2tQZXJzb25hSWQiLCJub3JtYWxpemVSZWxhdGlvbkZpbHRlciIsInJlbGF0aW9uIiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVzb2x2ZVBlcnNvbmFMaXN0RmlsdGVycyIsImZpbHRlcnMiLCJnZW5kZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZmlsdGVyIiwiQm9vbGVhbiIsImh5ZHJhdGVQZXJzb25hTGlzdCIsInBlcnNvbmFzIiwiaHlkcmF0ZWRQZXJzb25hcyIsIm5leHRQZXJzb25hSWQiLCJwZXJzb25hVGFncyIsInRhZ3MiLCJlbnN1cmVQZXJzb25hRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIkhBU19QRVJTT05BIiwiZWRnZSIsInNhdmUiLCJvdmVyd3JpdGVNb2RlIiwicmV0dXJuTmV3Iiwic2lsZW50Iiwic3luY1VzZXJQZXJzb25hIiwidXNlclVwZGF0ZSIsIm1vZGlmaWVkIiwibWFwcGVkSW1hZ2VJZCIsInVwZGF0ZVVzZXJRcnkiLCJ1c2VyQ3Vyc29yIiwicmVzb2x2ZVBlcnNvbmFPd25lciIsImV4cGxpY2l0VXNlcklkIiwiRXJyb3IiLCJsaW5rZWRQZXJzb25hSWQiLCJzYXZlUGVyc29uYURvY3VtZW50IiwiYmFzZVBlcnNvbmEiLCJjdXN0b21QZXJzb25hIiwidXBzZXJ0UGVyc29uYVF1ZXJ5IiwicGVyc29uYUN1cnNvciIsImdldFBlcnNvbmFCeUlkIiwicmVsYXRpb25zaGlwU3RhdGUiLCJnZXRQZXJzb25hTGlzdEJ5SWRzIiwicGVyc29uYUlkcyIsIm5vcm1hbGl6ZWRQZXJzb25hSWRzIiwibGVuZ3RoIiwiZ2V0UGVyc29uYUxpc3RCeVJlbGF0aW9uIiwiZnJvbSIsInRvIiwiYWN0aXZlUmVsYXRpb24iLCJsaW1pdEZyb20iLCJsaW1pdFRvIiwibGltaXRDb3VudCIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJuYW1lZFBlcnNvbmFGaWx0ZXIiLCJyZWxhdGlvblF1ZXJ5IiwidGhlbiIsImdldFBlcnNvbmFMaXN0QnlUYWdzIiwidXNlcm5hbWUiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJuZXh0VGFnIiwicHVzaCIsImZvcm1hdFVzZXJuYW1lIiwidGFyZ2V0R2VuZGVycyIsInVzZXJuYW1lRmlsdGVyIiwic2Vzc2lvbkZpbHRlciIsInBlcnNvbmFRdWVyeSIsImFkZFBlcnNvbmEiLCJzYXZlZFBlcnNvbmEiLCJfaWQiLCJ1cGRhdGVQZXJzb25hIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsV0FBVyxFQUNYQyxZQUFZLFFBQ1AsZUFBZTtBQUN0QixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsZUFBZSxRQUFPLGdDQUFnQztBQUM5RCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxhQUFhLFFBQU8sbUJBQW1CO0FBQy9DLFNBQVFDLGdCQUFnQixRQUFPLFlBQVk7QUFTM0MsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFB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
@@ -613,4 +613,4 @@ export const createPostEdge = (context, postDocId, itemDocId, edgeType = EDGES.I
613
613
  });
614
614
  };
615
615
 
616
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0LCBwYXJzZVBvc3RQcm9wc30gZnJvbSAnLi4vYWRhcHRlcnMvcG9zdEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVMsIFByaXZhY3lMZXZlbCwgUmVhY3Rpb25UeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGlzdGFuY2VRdWVyeSxcbiAgYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSxcbiAgYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnksXG4gIGJ1aWxkUmVhY3Rpb25zUXVlcnksXG4gIGJ1aWxkVGFnc1F1ZXJ5LFxuICBidWlsZFVzZXJJbmZvUXVlcnksXG59IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7aXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnTGlzdEJ5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbGVUeXBlfSBmcm9tICcuLi90eXBlcy9maWxlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UG9zdElucHV0VHlwZSwgUG9zdE9wdGlvbnMsIFBvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMvdGFncy50eXBlcy5qcyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSCA9IDEwMDAwMDtcbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncG9zdHMnO1xuXG5jb25zdCByZXNvbHZlUGVyc29uYUlkRm9yUG9zdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZXhwbGljaXRQZXJzb25hSWQgPSAnJ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcHJvdmlkZWRQZXJzb25hSWQgPSBwYXJzZUlkKGV4cGxpY2l0UGVyc29uYUlkKTtcblxuICBpZihwcm92aWRlZFBlcnNvbmFJZCkge1xuICAgIHJldHVybiBwcm92aWRlZFBlcnNvbmFJZDtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWRQYXJzZWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWQgfHwgJycpO1xuICBpZighc2Vzc2lvblVzZXJJZFBhcnNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0SXRlbUJ5PHtwZXJzb25hSWQ/OiBzdHJpbmd9Pihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywge19rZXk6IHNlc3Npb25Vc2VySWRQYXJzZWR9KTtcbiAgcmV0dXJuIHBhcnNlSWQodXNlcj8ucGVyc29uYUlkIHx8ICcnKSB8fCB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkUG9zdHMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RzOiBQb3N0VHlwZVtdID0gW11cbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwocG9zdHMubWFwKGFzeW5jIChwb3N0KSA9PiB7XG4gICAgY29uc3QgcGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocG9zdD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwZXJzb25hSWQpKTtcbiAgfSkpO1xuXG4gIHJldHVybiBwb3N0cy5maWx0ZXIoKF9wb3N0LCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0T3B0aW9ucyA9IChvcHRpb25zOiBQb3N0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICBsYXRpdHVkZSA9IDAsXG4gICAgbG9uZ2l0dWRlID0gMCxcbiAgICBzdGFydERhdGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHN0YXJ0RGF0ZTogcGFyc2VOdW0oc3RhcnREYXRlLCAzMiksXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuY29uc3QgRVZFTlRfUE9TVF9UWVBFID0gJ2V2ZW50JztcbmNvbnN0IFBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFID0gQ09MTEVDVElPTlMuUE9TVFM7XG5jb25zdCBPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUgPSBgcC50eXBlID09IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgPyBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiIDogXCIke1BPU1RfUkVBQ1RJT05fSVRFTV9UWVBFfVwiYDtcblxuY29uc3QgZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgcmVhY3Rpb25OYW1lID09PSBSZWFjdGlvblR5cGUuUElOXG4gICAgPyAnaXNTYXZlZCdcbiAgICA6IGBoYXMke3JlYWN0aW9uTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3JlYWN0aW9uTmFtZS5zbGljZSgxKX1gXG4pO1xuXG4vLyBNYXAgb2Ygb3B0aW9uYWwgZmllbGQgaGFuZGxlcnNcbnR5cGUgRmllbGRIYW5kbGVyID0gKGFjdG9yRG9jSWQ6IHN0cmluZykgPT4ge3F1ZXJ5OiBzdHJpbmc7IG9iamVjdDogc3RyaW5nfTtcblxuY29uc3QgT1BUSU9OQUxfRklFTERfSEFORExFUlM6IFJlY29yZDxzdHJpbmcsIEZpZWxkSGFuZGxlcj4gPSB7XG4gIGhhc1JzdnA6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5SU1ZQKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2hhc1JzdnA6aGFzUnN2cCdcbiAgfSksXG4gIGlzU2F2ZWQ6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5QSU4pfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlBJTn1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdpc1NhdmVkOmlzU2F2ZWQnXG4gIH0pLFxuICByZWFjdGlvbnM6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncmVhY3Rpb25zOnJlYWN0aW9ucydcbiAgfSksXG4gIHJzdnBDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5SU1ZQfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncnN2cENvdW50OnJzdnBDb3VudCdcbiAgfSksXG4gIHZpZXdDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5WSUVXfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlZJRVd9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAndmlld0NvdW50OnZpZXdDb3VudCdcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWxGaWVsZHMgPSAoXG4gIGZpZWxkczogc3RyaW5nW10gPSBbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJ1xuKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHM6IHtvYmplY3RzOiBzdHJpbmdbXSwgcXVlcmllczogc3RyaW5nW119LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTW2ZpZWxkXTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgY29uc3QgYWN0b3JEb2NJZCA9IHBlcnNvbmFJZFxuICAgICAgICA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BhcnNlSWQocGVyc29uYUlkKX1gXG4gICAgICAgIDogYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gICAgICBjb25zdCB7cXVlcnksIG9iamVjdH0gPSBoYW5kbGVyKGFjdG9yRG9jSWQpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHByaXZhY3kgZmlsdGVyIHF1ZXJ5XG5jb25zdCBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSA9IChcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogc3RyaW5nLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgc2VsZWN0UXVlcmllczogc3RyaW5nW10sXG4gIHNlbGVjdE9iamVjdHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdEJ5SWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnR5cGUgPT0gJHt0eXBlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBfaWQ6IHBvc3REb2NJZCxcbiAgICAgIHBlcnNvbmFJZCxcbiAgICAgIHVzZXJJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICBpZihwZXJzb25hSWQgJiYgYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgb3ducyB0aGUgcG9zdCwgcmV0dXJuIGRpcmVjdGx5XG4gICAgaWYgKHVzZXJJZCA9PT0gc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gcG9zdDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBwcml2YWN5IGFuZCBidWlsZCBhcHByb3ByaWF0ZSBxdWVyeVxuICAgIGNvbnN0IHByaXZhY3lBcWxRcnkgPSBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeShcbiAgICAgIHBvc3REb2NJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5LFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgc2VsZWN0UXVlcmllcyxcbiAgICAgIHNlbGVjdE9iamVjdHNcbiAgICApO1xuXG4gICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLnByaXZhY3kgPT0gJHtQcml2YWN5TGV2ZWwuUFVCTElDfSAmJiBwLnBhcmVudElkID09IG51bGxcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSwgcC5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUxhdGVzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYgKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkocmVhY3Rpb25zKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTil9XG4gICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwICR7bGl0ZXJhbChFREdFUy5JU19UQUdHRUQpfVxuICAgICAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSkgPiAwICYmIFBPU0lUSU9OKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkfSlcbiAgICAgIClcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nW10gPSB0YWdOYW1lcy5tYXAoKHRhZ05hbWUpID0+IHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIC8vIFVzZSBidWlsZFRhZ3NRdWVyeSBoZWxwZXIgd2l0aCBtYXRjaGVkIHRhZ3NcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkVGFnc1F1ZXJ5KCdwJywgZm9ybWF0VGFnTmFtZXMpKTtcblxuICBpZiAodGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkoZm9ybWF0VGFnTmFtZXMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZCwgdHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlQYXJlbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVBhcmVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9rZXksXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgICAgICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmVwYXJlIHBvc3QgZGF0YSBmb3IgaW5zZXJ0aW9uXG5jb25zdCBwcmVwYXJlUG9zdERhdGEgPSAoXG4gIGlucHV0OiBQb3N0SW5wdXRUeXBlLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBub3c6IG51bWJlclxuKTogUG9zdFR5cGUgPT4gKHtcbiAgX2lkOiBgJHtDT0xMRUNUSU9OUy5QT1NUU30vJHtwb3N0SWR9YCxcbiAgX2tleTogcG9zdElkLFxuICBhZGRlZDogbm93LFxuICBjb250ZW50OiBwYXJzZVN0cmluZyhpbnB1dC5jb250ZW50IHx8ICcnLCBNQVhfQ09OVEVOVF9MRU5HVEgpIHx8ICcnLFxuICBlbmREYXRlOiBpbnB1dC5lbmREYXRlID8gcGFyc2VOdW0oaW5wdXQuZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICBncm91cElkOiBpbnB1dC5ncm91cElkID8gcGFyc2VJZChpbnB1dC5ncm91cElkKSA6IHVuZGVmaW5lZCxcbiAgbGF0aXR1ZGU6IGlucHV0LmxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gIGxvY2F0aW9uOiBpbnB1dC5sb2NhdGlvbiA/IHBhcnNlU3RyaW5nKGlucHV0LmxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICBsb25naXR1ZGU6IGlucHV0LmxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubG9uZ2l0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbWF4R3Vlc3RzUGVyUGVyc29uYTogaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSwgMykgOiB1bmRlZmluZWQsXG4gIG1vZGlmaWVkOiBub3csXG4gIG5hbWU6IHBhcnNlU3RyaW5nKGlucHV0Lm5hbWUgfHwgJycsIDE2MCksXG4gIHBhcmVudElkOiBpbnB1dC5wYXJlbnRJZCA/IHBhcnNlSWQoaW5wdXQucGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICBwcml2YWN5OiBwYXJzZVZhckNoYXIoaW5wdXQucHJpdmFjeSB8fCBQcml2YWN5TGV2ZWwuUFVCTElDLCAxNiksXG4gIHByb3BzOiBwYXJzZVBvc3RQcm9wcyhpbnB1dC5wcm9wcyksXG4gIHBlcnNvbmFJZCxcbiAgc3RhcnREYXRlOiBpbnB1dC5zdGFydERhdGUgPyBwYXJzZU51bShpbnB1dC5zdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgdGlja2V0Q29zdENlbnRzOiBpbnB1dC50aWNrZXRDb3N0Q2VudHMgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LnRpY2tldENvc3RDZW50cywgMTIpIDogdW5kZWZpbmVkLFxuICB0eXBlOiBwYXJzZUNoYXIoaW5wdXQudHlwZSB8fCAnZGVmYXVsdCcsIDMyKSxcbiAgdXNlcklkOiBzZXNzaW9uSWRcbn0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRhZ3MgZm9yIHBvc3RzXG5jb25zdCBoYW5kbGVQb3N0VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGFnczogVGFnVHlwZVtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudFRhZ05hbWVzID0gYXdhaXQgZXh0cmFjdFRhZ3MoY29udGVudCB8fCAnJyk7XG5cbiAgaWYgKHRhZ3MubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUgfHwgJycpKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSk7XG4gICAgY29uc3QgY29udGVudFRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMgfHwgW10pKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcblxuICAgIHJldHVybiBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHRhZ3M6IFsuLi5jb250ZW50VGFncywgLi4udXNlclRhZ3NdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSAnJyxcbiAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLlBVQkxJQyxcbiAgICBwcm9wcyA9IHt9LFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwcm9wcywgcGVyc29uYUlkOiByZXNvbHZlZFBlcnNvbmFJZCwgc3RhcnREYXRlLCB0YWdzLCB0aWNrZXRDb3N0Q2VudHMsIHR5cGV9LFxuICAgIHNlc3Npb25JZCxcbiAgICByZXNvbHZlZFBlcnNvbmFJZCxcbiAgICBwb3N0SWQsXG4gICAgRGF0ZS5ub3coKVxuICApO1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgYWRkSXRlbSBmdW5jdGlvblxuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCBhZGRJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgaW5zZXJ0KTtcblxuICAgIGNvbnN0IHtfaWQ6IHBvc3REb2NJZH0gPSBzYXZlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCBwb3N0RG9jSWQsIGluc2VydC5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBpZiAoIXBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogUG9zdFR5cGUgPSB7XG4gICAgLi4ucGFyc2VkUG9zdFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgdXBkYXRlSXRlbSB3aXRoIG93bmVyc2hpcCBjaGVja1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IHVwZGF0ZUl0ZW08UG9zdFR5cGU+KFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgICAgcG9zdElkLFxuICAgICAgdXBkYXRlLFxuICAgICAge293bmVyc2hpcDogdHJ1ZX1cbiAgICApO1xuXG4gICAgY29uc3Qge19pZDogdXBkYXRlZFBvc3RJZH0gPSB1cGRhdGVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHVwZGF0ZWRQb3N0SWQsIHVwZGF0ZS5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVBvc3QnO1xuICBpZiAoIXBvc3REb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkZWxldGVJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgZm9ybWF0UG9zdElkLCB7XG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KSB8fCB7X2lkOiBmb3JtYXRQb3N0SWR9IGFzIFBvc3RUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0RWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGl0ZW1Eb2NJZDogc3RyaW5nLFxuICBlZGdlVHlwZTogc3RyaW5nID0gRURHRVMuSVNfUE9TVEVELFxuICBwcm9wcyA9IHt9XG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVQb3N0RWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKGVkZ2VUeXBlKTtcbiAgaWYgKCFwb3N0RG9jSWQgfHwgIWl0ZW1Eb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG4gIGNvbnN0IGZvcm1hdERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuXG4gIGlmICghZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBvc3RFZGdlLSR7Zm9ybWF0UG9zdElkfS0ke2Zvcm1hdERvY0lkfWApO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlUG9zdCIsInBhcnNlUG9zdFByb3BzIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJwcm9wcyIsInRpY2tldENvc3RDZW50cyIsImhhbmRsZVBvc3RUYWdzIiwidGFncyIsImNvbnRlbnRUYWdOYW1lcyIsInVzZXJUYWdzIiwidGFnIiwidGFnQnkiLCJjb250ZW50VGFncyIsIml0ZW1Eb2NJZCIsImFkZFBvc3QiLCJyZXNvbHZlZFBlcnNvbmFJZCIsImluc2VydCIsIkRhdGUiLCJzYXZlZFBvc3QiLCJ1cGRhdGVkVGFncyIsInVwZGF0ZVBvc3QiLCJwYXJzZWRQb3N0IiwidmFsdWUiLCJJTlZBTElEX0lEIiwidXBkYXRlIiwidXBkYXRlZFBvc3QiLCJvd25lcnNoaXAiLCJ1cGRhdGVkUG9zdElkIiwiZGVsZXRlUG9zdCIsImZvcm1hdFBvc3RJZCIsImNyZWF0ZVBvc3RFZGdlIiwiZWRnZVR5cGUiLCJJU19QT1NURUQiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsInNhdmUiLCJyZXR1cm5OZXciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FDRUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksUUFDbkUsK0JBQStCO0FBQ3RDLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxP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
616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0LCBwYXJzZVBvc3RQcm9wc30gZnJvbSAnLi4vYWRhcHRlcnMvcG9zdEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVMsIFByaXZhY3lMZXZlbCwgUmVhY3Rpb25UeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGlzdGFuY2VRdWVyeSxcbiAgYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSxcbiAgYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnksXG4gIGJ1aWxkUmVhY3Rpb25zUXVlcnksXG4gIGJ1aWxkVGFnc1F1ZXJ5LFxuICBidWlsZFVzZXJJbmZvUXVlcnksXG59IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7aXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnTGlzdEJ5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbGVUeXBlfSBmcm9tICcuLi90eXBlcy9maWxlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UG9zdElucHV0VHlwZSwgUG9zdE9wdGlvbnMsIFBvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMvdGFncy50eXBlcy5qcyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSCA9IDEwMDAwMDtcbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncG9zdHMnO1xuXG5jb25zdCByZXNvbHZlUGVyc29uYUlkRm9yUG9zdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZXhwbGljaXRQZXJzb25hSWQgPSAnJ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcHJvdmlkZWRQZXJzb25hSWQgPSBwYXJzZUlkKGV4cGxpY2l0UGVyc29uYUlkKTtcblxuICBpZihwcm92aWRlZFBlcnNvbmFJZCkge1xuICAgIHJldHVybiBwcm92aWRlZFBlcnNvbmFJZDtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWRQYXJzZWQgPSBwYXJzZUlkKHNlc3Npb25Vc2VySWQgfHwgJycpO1xuICBpZighc2Vzc2lvblVzZXJJZFBhcnNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0SXRlbUJ5PHtwZXJzb25hSWQ/OiBzdHJpbmd9Pihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywge19rZXk6IHNlc3Npb25Vc2VySWRQYXJzZWR9KTtcbiAgcmV0dXJuIHBhcnNlSWQodXNlcj8ucGVyc29uYUlkIHx8ICcnKSB8fCB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkUG9zdHMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RzOiBQb3N0VHlwZVtdID0gW11cbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwocG9zdHMubWFwKGFzeW5jIChwb3N0KSA9PiB7XG4gICAgY29uc3QgcGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocG9zdD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwZXJzb25hSWQpKTtcbiAgfSkpO1xuXG4gIHJldHVybiBwb3N0cy5maWx0ZXIoKF9wb3N0LCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0T3B0aW9ucyA9IChvcHRpb25zOiBQb3N0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICBsYXRpdHVkZSA9IDAsXG4gICAgbG9uZ2l0dWRlID0gMCxcbiAgICBzdGFydERhdGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHN0YXJ0RGF0ZTogcGFyc2VOdW0oc3RhcnREYXRlLCAzMiksXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuY29uc3QgRVZFTlRfUE9TVF9UWVBFID0gJ2V2ZW50JztcbmNvbnN0IFBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFID0gQ09MTEVDVElPTlMuUE9TVFM7XG5jb25zdCBPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUgPSBgcC50eXBlID09IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgPyBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiIDogXCIke1BPU1RfUkVBQ1RJT05fSVRFTV9UWVBFfVwiYDtcblxuY29uc3QgZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgcmVhY3Rpb25OYW1lID09PSBSZWFjdGlvblR5cGUuUElOXG4gICAgPyAnaXNTYXZlZCdcbiAgICA6IGBoYXMke3JlYWN0aW9uTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3JlYWN0aW9uTmFtZS5zbGljZSgxKX1gXG4pO1xuXG4vLyBNYXAgb2Ygb3B0aW9uYWwgZmllbGQgaGFuZGxlcnNcbnR5cGUgRmllbGRIYW5kbGVyID0gKGFjdG9yRG9jSWQ6IHN0cmluZykgPT4ge3F1ZXJ5OiBzdHJpbmc7IG9iamVjdDogc3RyaW5nfTtcblxuY29uc3QgT1BUSU9OQUxfRklFTERfSEFORExFUlM6IFJlY29yZDxzdHJpbmcsIEZpZWxkSGFuZGxlcj4gPSB7XG4gIGhhc1JzdnA6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5SU1ZQKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2hhc1JzdnA6aGFzUnN2cCdcbiAgfSksXG4gIGlzU2F2ZWQ6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5QSU4pfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlBJTn1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdpc1NhdmVkOmlzU2F2ZWQnXG4gIH0pLFxuICByZWFjdGlvbnM6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncmVhY3Rpb25zOnJlYWN0aW9ucydcbiAgfSksXG4gIHJzdnBDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5SU1ZQfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncnN2cENvdW50OnJzdnBDb3VudCdcbiAgfSksXG4gIHZpZXdDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5WSUVXfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlZJRVd9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAndmlld0NvdW50OnZpZXdDb3VudCdcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWxGaWVsZHMgPSAoXG4gIGZpZWxkczogc3RyaW5nW10gPSBbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJ1xuKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHM6IHtvYmplY3RzOiBzdHJpbmdbXSwgcXVlcmllczogc3RyaW5nW119LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTW2ZpZWxkXTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgY29uc3QgYWN0b3JEb2NJZCA9IHBlcnNvbmFJZFxuICAgICAgICA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BhcnNlSWQocGVyc29uYUlkKX1gXG4gICAgICAgIDogYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gICAgICBjb25zdCB7cXVlcnksIG9iamVjdH0gPSBoYW5kbGVyKGFjdG9yRG9jSWQpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHByaXZhY3kgZmlsdGVyIHF1ZXJ5XG5jb25zdCBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSA9IChcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogc3RyaW5nLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgc2VsZWN0UXVlcmllczogc3RyaW5nW10sXG4gIHNlbGVjdE9iamVjdHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdEJ5SWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnR5cGUgPT0gJHt0eXBlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBfaWQ6IHBvc3REb2NJZCxcbiAgICAgIHBlcnNvbmFJZCxcbiAgICAgIHVzZXJJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICBpZihwZXJzb25hSWQgJiYgYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgb3ducyB0aGUgcG9zdCwgcmV0dXJuIGRpcmVjdGx5XG4gICAgaWYgKHVzZXJJZCA9PT0gc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gcG9zdDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBwcml2YWN5IGFuZCBidWlsZCBhcHByb3ByaWF0ZSBxdWVyeVxuICAgIGNvbnN0IHByaXZhY3lBcWxRcnkgPSBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeShcbiAgICAgIHBvc3REb2NJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5LFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgc2VsZWN0UXVlcmllcyxcbiAgICAgIHNlbGVjdE9iamVjdHNcbiAgICApO1xuXG4gICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLnByaXZhY3kgPT0gJHtQcml2YWN5TGV2ZWwuUFVCTElDfSAmJiBwLnBhcmVudElkID09IG51bGxcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSwgcC5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUxhdGVzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYgKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkocmVhY3Rpb25zKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTil9XG4gICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwICR7bGl0ZXJhbChFREdFUy5JU19UQUdHRUQpfVxuICAgICAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSkgPiAwICYmIFBPU0lUSU9OKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkfSlcbiAgICAgIClcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nW10gPSB0YWdOYW1lcy5tYXAoKHRhZ05hbWUpID0+IHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIC8vIFVzZSBidWlsZFRhZ3NRdWVyeSBoZWxwZXIgd2l0aCBtYXRjaGVkIHRhZ3NcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkVGFnc1F1ZXJ5KCdwJywgZm9ybWF0VGFnTmFtZXMpKTtcblxuICBpZiAodGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkoZm9ybWF0VGFnTmFtZXMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZCwgdHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlQYXJlbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVBhcmVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9rZXksXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgICAgICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmVwYXJlIHBvc3QgZGF0YSBmb3IgaW5zZXJ0aW9uXG5jb25zdCBwcmVwYXJlUG9zdERhdGEgPSAoXG4gIGlucHV0OiBQb3N0SW5wdXRUeXBlLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBub3c6IG51bWJlclxuKTogUG9zdFR5cGUgPT4gKHtcbiAgX2lkOiBgJHtDT0xMRUNUSU9OUy5QT1NUU30vJHtwb3N0SWR9YCxcbiAgX2tleTogcG9zdElkLFxuICBhZGRlZDogbm93LFxuICBjb250ZW50OiBwYXJzZVN0cmluZyhpbnB1dC5jb250ZW50IHx8ICcnLCBNQVhfQ09OVEVOVF9MRU5HVEgpIHx8ICcnLFxuICBlbmREYXRlOiBpbnB1dC5lbmREYXRlID8gcGFyc2VOdW0oaW5wdXQuZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICBncm91cElkOiBpbnB1dC5ncm91cElkID8gcGFyc2VJZChpbnB1dC5ncm91cElkKSA6IHVuZGVmaW5lZCxcbiAgbGF0aXR1ZGU6IGlucHV0LmxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gIGxvY2F0aW9uOiBpbnB1dC5sb2NhdGlvbiA/IHBhcnNlU3RyaW5nKGlucHV0LmxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICBsb25naXR1ZGU6IGlucHV0LmxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubG9uZ2l0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbWF4R3Vlc3RzUGVyUGVyc29uYTogaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSwgMykgOiB1bmRlZmluZWQsXG4gIG1vZGlmaWVkOiBub3csXG4gIG5hbWU6IHBhcnNlU3RyaW5nKGlucHV0Lm5hbWUgfHwgJycsIDE2MCksXG4gIHBhcmVudElkOiBpbnB1dC5wYXJlbnRJZCA/IHBhcnNlSWQoaW5wdXQucGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICBwcml2YWN5OiBwYXJzZVZhckNoYXIoaW5wdXQucHJpdmFjeSB8fCBQcml2YWN5TGV2ZWwuUFVCTElDLCAxNiksXG4gIHByb3BzOiBwYXJzZVBvc3RQcm9wcyhpbnB1dC5wcm9wcyksXG4gIHBlcnNvbmFJZCxcbiAgc3RhcnREYXRlOiBpbnB1dC5zdGFydERhdGUgPyBwYXJzZU51bShpbnB1dC5zdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgdGlja2V0Q29zdENlbnRzOiBpbnB1dC50aWNrZXRDb3N0Q2VudHMgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LnRpY2tldENvc3RDZW50cywgMTIpIDogdW5kZWZpbmVkLFxuICB0eXBlOiBwYXJzZUNoYXIoaW5wdXQudHlwZSB8fCAnZGVmYXVsdCcsIDMyKSxcbiAgdXNlcklkOiBzZXNzaW9uSWRcbn0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRhZ3MgZm9yIHBvc3RzXG5jb25zdCBoYW5kbGVQb3N0VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGFnczogVGFnVHlwZVtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudFRhZ05hbWVzID0gYXdhaXQgZXh0cmFjdFRhZ3MoY29udGVudCB8fCAnJyk7XG5cbiAgaWYgKHRhZ3MubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUgfHwgJycpKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSk7XG4gICAgY29uc3QgY29udGVudFRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMgfHwgW10pKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcblxuICAgIHJldHVybiBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHRhZ3M6IFsuLi5jb250ZW50VGFncywgLi4udXNlclRhZ3NdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSAnJyxcbiAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLlBVQkxJQyxcbiAgICBwcm9wcyA9IHt9LFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwcm9wcywgcGVyc29uYUlkOiByZXNvbHZlZFBlcnNvbmFJZCwgc3RhcnREYXRlLCB0YWdzLCB0aWNrZXRDb3N0Q2VudHMsIHR5cGV9LFxuICAgIHNlc3Npb25JZCxcbiAgICByZXNvbHZlZFBlcnNvbmFJZCxcbiAgICBwb3N0SWQsXG4gICAgRGF0ZS5ub3coKVxuICApO1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgYWRkSXRlbSBmdW5jdGlvblxuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCBhZGRJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgaW5zZXJ0KTtcblxuICAgIGNvbnN0IHtfaWQ6IHBvc3REb2NJZH0gPSBzYXZlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCBwb3N0RG9jSWQsIGluc2VydC5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBpZiAoIXBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogUG9zdFR5cGUgPSB7XG4gICAgLi4ucGFyc2VkUG9zdFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgdXBkYXRlSXRlbSB3aXRoIG93bmVyc2hpcCBjaGVja1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IHVwZGF0ZUl0ZW08UG9zdFR5cGU+KFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgICAgcG9zdElkLFxuICAgICAgdXBkYXRlLFxuICAgICAge293bmVyc2hpcDogdHJ1ZX1cbiAgICApO1xuXG4gICAgY29uc3Qge19pZDogdXBkYXRlZFBvc3RJZH0gPSB1cGRhdGVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHVwZGF0ZWRQb3N0SWQsIHVwZGF0ZS5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVBvc3QnO1xuICBpZiAoIXBvc3REb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkZWxldGVJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgZm9ybWF0UG9zdElkLCB7XG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KSB8fCB7X2lkOiBmb3JtYXRQb3N0SWR9IGFzIFBvc3RUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0RWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGl0ZW1Eb2NJZDogc3RyaW5nLFxuICBlZGdlVHlwZTogc3RyaW5nID0gRURHRVMuSVNfUE9TVEVELFxuICBwcm9wcyA9IHt9XG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVQb3N0RWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKGVkZ2VUeXBlKTtcbiAgaWYgKCFwb3N0RG9jSWQgfHwgIWl0ZW1Eb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG4gIGNvbnN0IGZvcm1hdERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuXG4gIGlmICghZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBvc3RFZGdlLSR7Zm9ybWF0UG9zdElkfS0ke2Zvcm1hdERvY0lkfWApO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlUG9zdCIsInBhcnNlUG9zdFByb3BzIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJwcm9wcyIsInRpY2tldENvc3RDZW50cyIsImhhbmRsZVBvc3RUYWdzIiwidGFncyIsImNvbnRlbnRUYWdOYW1lcyIsInVzZXJUYWdzIiwidGFnIiwidGFnQnkiLCJjb250ZW50VGFncyIsIml0ZW1Eb2NJZCIsImFkZFBvc3QiLCJyZXNvbHZlZFBlcnNvbmFJZCIsImluc2VydCIsIkRhdGUiLCJzYXZlZFBvc3QiLCJ1cGRhdGVkVGFncyIsInVwZGF0ZVBvc3QiLCJwYXJzZWRQb3N0IiwidmFsdWUiLCJJTlZBTElEX0lEIiwidXBkYXRlIiwidXBkYXRlZFBvc3QiLCJvd25lcnNoaXAiLCJ1cGRhdGVkUG9zdElkIiwiZGVsZXRlUG9zdCIsImZvcm1hdFBvc3RJZCIsImNyZWF0ZVBvc3RFZGdlIiwiZWRnZVR5cGUiLCJJU19QT1NURUQiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsInNhdmUiLCJyZXR1cm5OZXciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FDRUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksUUFDbkUsK0JBQStCO0FBQ3RDLFNBQVFDLEdBQUcsUUFBTyxXQUFX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