@nlabs/reaktor 1.18.0 → 1.19.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 (273) hide show
  1. package/docs/GENERATION.md +38 -16
  2. package/lib/actions/alfredFaq.js +1 -1
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.js +1 -1
  5. package/lib/actions/connections.js +1 -1
  6. package/lib/actions/content.js +1 -1
  7. package/lib/actions/contentGeneration.d.ts +3 -0
  8. package/lib/actions/contentGeneration.js +62 -9
  9. package/lib/actions/contentGenerationErrors.js +1 -1
  10. package/lib/actions/conversations.js +1 -1
  11. package/lib/actions/crm.js +1 -1
  12. package/lib/actions/crud.js +1 -1
  13. package/lib/actions/databaseAccounts.js +1 -1
  14. package/lib/actions/databaseProvisioningLease.js +1 -1
  15. package/lib/actions/dynamodb.js +1 -1
  16. package/lib/actions/email.js +1 -1
  17. package/lib/actions/files.js +1 -1
  18. package/lib/actions/flags.js +1 -1
  19. package/lib/actions/geminiVideo.js +1 -1
  20. package/lib/actions/groups.js +1 -1
  21. package/lib/actions/higgsfield.js +1 -1
  22. package/lib/actions/imageGeneration.js +1 -1
  23. package/lib/actions/images.js +1 -1
  24. package/lib/actions/index.js +1 -1
  25. package/lib/actions/ios.js +1 -1
  26. package/lib/actions/locations.js +1 -1
  27. package/lib/actions/messages.js +1 -1
  28. package/lib/actions/notifications.js +1 -1
  29. package/lib/actions/ollamaGeneration.js +1 -1
  30. package/lib/actions/openaiResponseSession.js +1 -1
  31. package/lib/actions/payments.js +1 -1
  32. package/lib/actions/personas.js +1 -1
  33. package/lib/actions/phoneSupport.js +1 -1
  34. package/lib/actions/posts.js +1 -1
  35. package/lib/actions/query.js +1 -1
  36. package/lib/actions/reactions.js +1 -1
  37. package/lib/actions/rum.js +1 -1
  38. package/lib/actions/s3.js +1 -1
  39. package/lib/actions/search.js +1 -1
  40. package/lib/actions/sms.js +1 -1
  41. package/lib/actions/statistics.js +1 -1
  42. package/lib/actions/subscriptions.js +1 -1
  43. package/lib/actions/tags.js +1 -1
  44. package/lib/actions/users.js +1 -1
  45. package/lib/actions/videoGeneration.js +1 -1
  46. package/lib/actions/videos.js +1 -1
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +1 -1
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/geminiGenerationAdapter.js +1 -1
  51. package/lib/adapters/higgsfieldAdapter.js +1 -1
  52. package/lib/adapters/higgsfieldModelCatalog.js +1 -1
  53. package/lib/adapters/higgsfieldModels.js +1 -1
  54. package/lib/adapters/imageAdapter.js +1 -1
  55. package/lib/adapters/imageGenerationAdapter.js +1 -1
  56. package/lib/adapters/index.js +1 -1
  57. package/lib/adapters/messageAdapter.js +1 -1
  58. package/lib/adapters/postAdapter.js +1 -1
  59. package/lib/adapters/reaktorAdapter.js +1 -1
  60. package/lib/adapters/tagAdapter.js +1 -1
  61. package/lib/adapters/userAdapter.js +1 -1
  62. package/lib/assistant/core.js +1 -1
  63. package/lib/assistant/faq.js +1 -1
  64. package/lib/assistant/faqCore.js +1 -1
  65. package/lib/assistant/index.js +1 -1
  66. package/lib/assistant/service.js +1 -1
  67. package/lib/config.js +1 -1
  68. package/lib/constants/collections.js +1 -1
  69. package/lib/durableChat/conversations.js +1 -1
  70. package/lib/durableChat/errors.js +1 -1
  71. package/lib/durableChat/events.js +1 -1
  72. package/lib/durableChat/index.js +1 -1
  73. package/lib/durableChat/membership.js +1 -1
  74. package/lib/durableChat/messageTypes.js +1 -1
  75. package/lib/durableChat/messages.js +1 -1
  76. package/lib/durableChat/transaction.js +1 -1
  77. package/lib/durableChat/types.js +1 -1
  78. package/lib/handlers/graphqlHandler.js +1 -1
  79. package/lib/index.js +1 -1
  80. package/lib/lambdas/actions/websockets.js +1 -1
  81. package/lib/lambdas/authorizer.js +1 -1
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.js +1 -1
  85. package/lib/mocks/conversation.js +1 -1
  86. package/lib/mocks/file.js +1 -1
  87. package/lib/mocks/group.js +1 -1
  88. package/lib/mocks/image.js +1 -1
  89. package/lib/mocks/post.js +1 -1
  90. package/lib/mocks/tag.js +1 -1
  91. package/lib/mocks/user.js +1 -1
  92. package/lib/mocks/video.js +1 -1
  93. package/lib/mutations/analytics/analytics.js +1 -1
  94. package/lib/mutations/content/content.js +1 -1
  95. package/lib/mutations/crm/crm.js +1 -1
  96. package/lib/mutations/events/events.js +1 -1
  97. package/lib/mutations/flags/flags.js +1 -1
  98. package/lib/mutations/groups/groups.js +1 -1
  99. package/lib/mutations/higgsfield/higgsfield.js +1 -1
  100. package/lib/mutations/images/images.js +1 -1
  101. package/lib/mutations/index.js +1 -1
  102. package/lib/mutations/locations/locations.js +1 -1
  103. package/lib/mutations/messages/messages.js +1 -1
  104. package/lib/mutations/personas/personas.js +1 -1
  105. package/lib/mutations/posts/posts.js +1 -1
  106. package/lib/mutations/reactions/reactions.js +1 -1
  107. package/lib/mutations/rum/rum.js +1 -1
  108. package/lib/mutations/statistics/statistics.js +1 -1
  109. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  110. package/lib/mutations/tags/tags.js +1 -1
  111. package/lib/mutations/users/users.js +1 -1
  112. package/lib/mutations/videos/videos.js +1 -1
  113. package/lib/nativePush/graphql.js +1 -1
  114. package/lib/nativePush/index.js +1 -1
  115. package/lib/nativePush/migrations.js +1 -1
  116. package/lib/nativePush/nativePushContract.fixture.js +1 -1
  117. package/lib/nativePush/payload.js +1 -1
  118. package/lib/nativePush/repository.js +1 -1
  119. package/lib/nativePush/service.js +1 -1
  120. package/lib/nativePush/snsProvider.js +1 -1
  121. package/lib/nativePush/types.js +1 -1
  122. package/lib/objectTypes/analytics.js +1 -1
  123. package/lib/objectTypes/app.js +1 -1
  124. package/lib/objectTypes/bankAccount.js +1 -1
  125. package/lib/objectTypes/connection.js +1 -1
  126. package/lib/objectTypes/content.js +1 -1
  127. package/lib/objectTypes/contentGeneration.js +1 -1
  128. package/lib/objectTypes/conversation.js +1 -1
  129. package/lib/objectTypes/creditCard.js +1 -1
  130. package/lib/objectTypes/crm.js +1 -1
  131. package/lib/objectTypes/document.js +1 -1
  132. package/lib/objectTypes/error.js +1 -1
  133. package/lib/objectTypes/event.js +1 -1
  134. package/lib/objectTypes/external.js +1 -1
  135. package/lib/objectTypes/file.js +1 -1
  136. package/lib/objectTypes/filter.js +1 -1
  137. package/lib/objectTypes/flag.js +1 -1
  138. package/lib/objectTypes/group.js +1 -1
  139. package/lib/objectTypes/higgsfield.js +1 -1
  140. package/lib/objectTypes/iapSubscription.js +1 -1
  141. package/lib/objectTypes/image.js +1 -1
  142. package/lib/objectTypes/imageGeneration.js +1 -1
  143. package/lib/objectTypes/index.js +1 -1
  144. package/lib/objectTypes/location.js +1 -1
  145. package/lib/objectTypes/message.js +1 -1
  146. package/lib/objectTypes/passcode.js +1 -1
  147. package/lib/objectTypes/persona.js +1 -1
  148. package/lib/objectTypes/plan.js +1 -1
  149. package/lib/objectTypes/post.js +1 -1
  150. package/lib/objectTypes/query.js +1 -1
  151. package/lib/objectTypes/reaction.js +1 -1
  152. package/lib/objectTypes/relation.js +1 -1
  153. package/lib/objectTypes/rum.js +1 -1
  154. package/lib/objectTypes/search.js +1 -1
  155. package/lib/objectTypes/statistics.js +1 -1
  156. package/lib/objectTypes/subscription.js +1 -1
  157. package/lib/objectTypes/tag.js +1 -1
  158. package/lib/objectTypes/user.js +1 -1
  159. package/lib/objectTypes/video.js +1 -1
  160. package/lib/objectTypes/videoGeneration.js +1 -1
  161. package/lib/organizations/accountLifecycle.js +1 -1
  162. package/lib/organizations/authorization.js +1 -1
  163. package/lib/organizations/billing.js +1 -1
  164. package/lib/organizations/billingProvider.js +1 -1
  165. package/lib/organizations/billingUpdates.js +1 -1
  166. package/lib/organizations/index.js +1 -1
  167. package/lib/organizations/mail.js +1 -1
  168. package/lib/organizations/memberDirectory.js +1 -1
  169. package/lib/organizations/membership.js +1 -1
  170. package/lib/organizations/passwordRecovery.js +1 -1
  171. package/lib/organizations/plans.js +1 -1
  172. package/lib/organizations/providerPagination.js +1 -1
  173. package/lib/organizations/reconciliation.js +1 -1
  174. package/lib/organizations/signup.js +1 -1
  175. package/lib/organizations/store.js +1 -1
  176. package/lib/organizations/types.js +1 -1
  177. package/lib/organizations/verification.js +1 -1
  178. package/lib/queries/analytics/analytics.js +1 -1
  179. package/lib/queries/content/content.js +1 -1
  180. package/lib/queries/crm/crm.js +1 -1
  181. package/lib/queries/events/events.js +1 -1
  182. package/lib/queries/flags/flags.js +1 -1
  183. package/lib/queries/groups/groups.js +1 -1
  184. package/lib/queries/higgsfield/higgsfield.js +1 -1
  185. package/lib/queries/images/images.js +1 -1
  186. package/lib/queries/index.js +1 -1
  187. package/lib/queries/locations/locations.js +1 -1
  188. package/lib/queries/messages/messages.js +1 -1
  189. package/lib/queries/personas/personas.js +1 -1
  190. package/lib/queries/posts/posts.js +1 -1
  191. package/lib/queries/query/query.js +1 -1
  192. package/lib/queries/reactions/reactions.js +1 -1
  193. package/lib/queries/statistics/statistics.js +1 -1
  194. package/lib/queries/subscriptions/subscriptions.js +1 -1
  195. package/lib/queries/tags/tags.js +1 -1
  196. package/lib/queries/users/users.js +1 -1
  197. package/lib/queries/videos/videos.js +1 -1
  198. package/lib/templates/email/layout.js +1 -1
  199. package/lib/templates/email/passwordForgot.js +1 -1
  200. package/lib/templates/email/passwordRecovery.js +1 -1
  201. package/lib/templates/email/verifyEmail.js +1 -1
  202. package/lib/templates/email/welcome.js +1 -1
  203. package/lib/templates/sms/passwordForgot.js +1 -1
  204. package/lib/templates/sms/passwordRecovery.js +1 -1
  205. package/lib/templates/sms/verifyEmail.js +1 -1
  206. package/lib/templates/sms/verifyPhone.js +1 -1
  207. package/lib/templates/sms/welcome.js +1 -1
  208. package/lib/types/analytics.types.js +1 -1
  209. package/lib/types/apps.types.js +1 -1
  210. package/lib/types/arangodb.types.js +1 -1
  211. package/lib/types/auth.types.js +1 -1
  212. package/lib/types/connections.types.js +1 -1
  213. package/lib/types/content.types.js +1 -1
  214. package/lib/types/conversations.types.js +1 -1
  215. package/lib/types/crm.types.js +1 -1
  216. package/lib/types/databaseCredentials.types.js +1 -1
  217. package/lib/types/email.types.js +1 -1
  218. package/lib/types/error.types.js +1 -1
  219. package/lib/types/files.types.js +1 -1
  220. package/lib/types/flags.types.js +1 -1
  221. package/lib/types/google.types.js +1 -1
  222. package/lib/types/groups.types.js +1 -1
  223. package/lib/types/images.types.js +1 -1
  224. package/lib/types/index.js +1 -1
  225. package/lib/types/locations.types.js +1 -1
  226. package/lib/types/messages.types.js +1 -1
  227. package/lib/types/notifications.types.js +1 -1
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.js +1 -1
  230. package/lib/types/posts.types.js +1 -1
  231. package/lib/types/rum.types.js +1 -1
  232. package/lib/types/statistics.types.js +1 -1
  233. package/lib/types/tags.types.js +1 -1
  234. package/lib/types/users.types.js +1 -1
  235. package/lib/types/videos.types.js +1 -1
  236. package/lib/types/websockets.types.js +1 -1
  237. package/lib/upload.js +1 -1
  238. package/lib/utils/adapterUtils.js +1 -1
  239. package/lib/utils/analyticsUtils.js +1 -1
  240. package/lib/utils/appContext.js +1 -1
  241. package/lib/utils/aqlHelpers.js +1 -1
  242. package/lib/utils/arangodbUtils.js +1 -1
  243. package/lib/utils/authUtils.js +1 -1
  244. package/lib/utils/awsUtils.js +1 -1
  245. package/lib/utils/collectionRegistry.js +1 -1
  246. package/lib/utils/contextUtils.js +1 -1
  247. package/lib/utils/databaseCredentials.js +1 -1
  248. package/lib/utils/dbI18n.example.js +1 -1
  249. package/lib/utils/dbI18n.js +1 -1
  250. package/lib/utils/generationCallback.js +1 -1
  251. package/lib/utils/googleTranslate.js +1 -1
  252. package/lib/utils/graphqlUtils.js +1 -1
  253. package/lib/utils/imageUtils.js +1 -1
  254. package/lib/utils/index.js +1 -1
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.example.js +1 -1
  257. package/lib/utils/localeUtils.js +1 -1
  258. package/lib/utils/mediaAccess.js +1 -1
  259. package/lib/utils/middlewareUtils.js +1 -1
  260. package/lib/utils/nodeRealtime.js +1 -1
  261. package/lib/utils/opaqueToken.js +1 -1
  262. package/lib/utils/queryBuilder.js +1 -1
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/secretDatabase.js +1 -1
  265. package/lib/utils/sessionUtils.js +1 -1
  266. package/lib/utils/stripeUtils.js +1 -1
  267. package/lib/utils/stripeUtils.ts.bak +1 -1
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +1 -1
  270. package/lib/utils/translationQueue.example.js +1 -1
  271. package/lib/utils/translationQueue.js +1 -1
  272. package/lib/videoProcessing.js +1 -1
  273. package/package.json +1 -1
@@ -1112,4 +1112,4 @@ export const getUserByToken = (context, token)=>{
1112
1112
  });
1113
1113
  };
1114
1114
 
1115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy91c2Vycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLFxuICBjcmVhdGVQYXNzd29yZCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUVtYWlsLFxuICBwYXJzZVBhc3N3b3JkLFxuICBwYXJzZVBob25lLFxuICBwYXJzZVVzZXJuYW1lXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7Y3JlYXRlSGFzaCBhcyBjcmVhdGVDcnlwdG9IYXNoLCB0aW1pbmdTYWZlRXF1YWx9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7cGFyc2VVc2VyLCBwYXJzZVVzZXJTYWZlfSBmcm9tICcuLi9hZGFwdGVycy91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtvcmdhbml6YXRpb25BY2NvdW50TXV0YXRpb24sIG9yZ2FuaXphdGlvbkFjY291bnRXcml0ZUd1YXJkfSBmcm9tICcuLi9vcmdhbml6YXRpb25zL2FjY291bnRMaWZlY3ljbGUuanMnO1xuaW1wb3J0IHtvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5fSBmcm9tICcuLi9vcmdhbml6YXRpb25zL3Bhc3N3b3JkUmVjb3ZlcnkuanMnO1xuaW1wb3J0IHZlcmlmeUVtYWlsVGVtcGxhdGUgZnJvbSAnLi4vdGVtcGxhdGVzL2VtYWlsL3ZlcmlmeUVtYWlsLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlcywgdHlwZSBTZXNzaW9uRXJyb3J9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZSwgYnVpbGRQcmVzZW50RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7ZGV0ZWN0TGFuZ3VhZ2V9IGZyb20gJy4uL3V0aWxzL2xhbmd1YWdlRGV0ZWN0aW9uLmpzJztcbmltcG9ydCB7Z2V0U2Vzc2lvbiwgc2V0U2Vzc2lvbn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7Z2V0U3RyaXBlQ2xpZW50fSBmcm9tICcuLi91dGlscy9zdHJpcGVVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGNvdW50SXRlbXMsIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtzZW5kRW1haWx9IGZyb20gJy4vZW1haWwuanMnO1xuaW1wb3J0IHthZGRQZXJzb25hfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7c2VuZFNtc30gZnJvbSAnLi9zbXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VySW5wdXQsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7U2Vzc2lvblRva2VufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3VzZXJzJztcbmNvbnN0IEFETUlOX1VTRVJOQU1FID0gJ2FkbWluJztcbmNvbnN0IFZFUklGSUNBVElPTl9FTUFJTF9DT09MRE9XTl9NUyA9IDEwMDAgKiA2MCAqIDE1O1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNSZWFjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTik7XG5jb25zdCBpc1RhZ2dlZENvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLklTX1RBR0dFRCk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuXG5jb25zdCBpc0FkbWluUGFzc3dvcmQgPSAocGFzc3dvcmQ6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYWRtaW5QYXNzd29yZCA9IHByb2Nlc3MuZW52LkFETUlOX1BBU1NXT1JEO1xuICBpZih0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnIHx8ICFwYXNzd29yZCB8fCAhYWRtaW5QYXNzd29yZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFjdHVhbCA9IGNyZWF0ZUNyeXB0b0hhc2goJ3NoYTI1NicpLnVwZGF0ZShwYXNzd29yZCkuZGlnZXN0KCk7XG4gIGNvbnN0IGV4cGVjdGVkID0gY3JlYXRlQ3J5cHRvSGFzaCgnc2hhMjU2JykudXBkYXRlKGFkbWluUGFzc3dvcmQpLmRpZ2VzdCgpO1xuICByZXR1cm4gdGltaW5nU2FmZUVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpO1xufTtcblxuY29uc3QgZ2V0QXBwTmFtZSA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogc3RyaW5nID0+XG4gIGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5uYW1lIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMubmFtZScpIHx8ICdSZWFrdG9yJztcblxuY29uc3QgZ2V0QXBwVGl0bGUgPSAoYXBwTmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFwcE5hbWVcbiAgICAuc3BsaXQoLyhbXFxzLV9dKykvKVxuICAgIC5tYXAoKHBhcnQpID0+ICgvXltBLVphLXpdLy50ZXN0KHBhcnQpID8gYCR7cGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3BhcnQuc2xpY2UoMSl9YCA6IHBhcnQpKVxuICAgIC5qb2luKCcnKTtcblxuY29uc3QgYnVpbGRWZXJpZmljYXRpb25FbWFpbCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmVyaWZpZWRFbWFpbENvZGU6IG51bWJlcixcbiAgdXNlcjogVXNlclR5cGUgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IGFwcE5hbWUgPSBnZXRBcHBOYW1lKGNvbnRleHQpO1xuICBjb25zdCBhcHBUaXRsZSA9IGdldEFwcFRpdGxlKGFwcE5hbWUpO1xuICBjb25zdCBjb2RlID0gYCR7dmVyaWZpZWRFbWFpbENvZGV9YDtcbiAgY29uc3QgcGFyc2VFbWFpbFRlbXBsYXRlID0gKHRlbXBsYXRlOiBzdHJpbmcpID0+IHRlbXBsYXRlXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBOYW1lXScsIGFwcE5hbWUpXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBUaXRsZV0nLCBhcHBUaXRsZSlcbiAgICAucmVwbGFjZUFsbCgnW2VtYWlsQ29kZV0nLCBjb2RlKTtcbiAgY29uc3QgaHRtbCA9IHBhcnNlRW1haWxUZW1wbGF0ZSh1c2VyLnZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGUgfHwgdmVyaWZ5RW1haWxUZW1wbGF0ZSk7XG4gIGNvbnN0IHN1YmplY3QgPSBwYXJzZUVtYWlsVGVtcGxhdGUodXNlci52ZXJpZmljYXRpb25FbWFpbFN1YmplY3QgfHwgYFlvdXIgJHthcHBUaXRsZX0gdmVyaWZpY2F0aW9uIGNvZGUgaXMgJHtjb2RlfWApO1xuICBjb25zdCB0ZXh0ID0gcGFyc2VFbWFpbFRlbXBsYXRlKHVzZXIudmVyaWZpY2F0aW9uRW1haWxUZXh0IHx8IGBZb3VyICR7YXBwVGl0bGV9IHZlcmlmaWNhdGlvbiBjb2RlIGlzICR7Y29kZX0uXFxuXFxuRW50ZXIgdGhpcyBjb2RlIGluICR7YXBwVGl0bGV9IHRvIGZpbmlzaCBzZXR0aW5nIHVwIHlvdXIgYWNjb3VudC4gSWYgeW91IGRpZCBub3QgcmVxdWVzdCB0aGlzIGVtYWlsLCB5b3UgY2FuIHNhZmVseSBpZ25vcmUgaXQuYCk7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgdGV4dFxuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgVXNlck9wdGlvbnMgPSBSZWFkb25seTx7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn0+O1xuXG5leHBvcnQgZW51bSBVc2VyQWNjZXNzIHtcbiAgQURNSU4gPSAtMSxcbiAgQkFTSUMgPSAwLFxuICBQUkVNSVVNID0gMSxcbiAgUFJPID0gMlxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlVXNlclRva2VuID0gKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgdXNlcm5hbWU6IHN0cmluZyA9ICcnLFxuICB1c2VyQWNjZXNzOiBudW1iZXIgPSAwLFxuICBleHBpcmVzSW5NaW51dGVzOiBudW1iZXIgPSAxNSxcbiAgbmFtZToge3JlYWRvbmx5IGZpcnN0TmFtZT86IHN0cmluZzsgcmVhZG9ubHkgbGFzdE5hbWU/OiBzdHJpbmd9ID0ge31cbik6IFNlc3Npb25Ub2tlbiA9PiB7XG4gIGNvbnN0IG5vdzogRGF0ZVRpbWUgPSBEYXRlVGltZS5sb2NhbCgpO1xuICBjb25zdCBzZXNzaW9uRXhwaXJlczogRGF0ZVRpbWUgPSBub3cucGx1cyh7bWludXRlczogZXhwaXJlc0luTWludXRlc30pO1xuICBjb25zdCBpYXQgPSBNYXRoLmZsb29yKG5vdy50b1NlY29uZHMoKSk7XG4gIGNvbnN0IGV4cCA9IE1hdGguZmxvb3Ioc2Vzc2lvbkV4cGlyZXMudG9TZWNvbmRzKCkpO1xuICBjb25zdCB0b2tlbiA9IHNldFNlc3Npb24oe1xuICAgIGV4cCxcbiAgICAuLi4obmFtZS5maXJzdE5hbWUgPyB7Zmlyc3ROYW1lOiBuYW1lLmZpcnN0TmFtZX0gOiB7fSksXG4gICAgaWF0LFxuICAgIC4uLihuYW1lLmxhc3ROYW1lID8ge2xhc3ROYW1lOiBuYW1lLmxhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGVyc29uYUlkID8ge3BlcnNvbmFJZH0gOiB7fSksXG4gICAgdXNlckFjY2VzcyxcbiAgICB1c2VySWQsXG4gICAgdXNlcm5hbWVcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleHBpcmVzOiBzZXNzaW9uRXhwaXJlcy50b01pbGxpcygpLFxuICAgIC4uLihuYW1lLmZpcnN0TmFtZSA/IHtmaXJzdE5hbWU6IG5hbWUuZmlyc3ROYW1lfSA6IHt9KSxcbiAgICBpc3N1ZWQ6IG5vdy50b01pbGxpcygpLFxuICAgIC4uLihuYW1lLmxhc3ROYW1lID8ge2xhc3ROYW1lOiBuYW1lLmxhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGVyc29uYUlkID8ge3BlcnNvbmFJZH0gOiB7fSksXG4gICAgdG9rZW4sXG4gICAgdXNlcklkLFxuICAgIHVzZXJuYW1lXG4gIH07XG59O1xuXG5pbnRlcmZhY2UgU2VsZWN0QWNjdW11bGF0b3Ige1xuICBvYmplY3RzOiBzdHJpbmdbXTtcbiAgcXVlcmllczogc3RyaW5nW107XG59XG5cbmNvbnN0IHBhcnNlVXNlckxpc3QgPSAodXNlcnM6IEFycmF5PFVzZXJUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBbXSk6IFVzZXJUeXBlW10gPT5cbiAgdXNlcnMucmVkdWNlPFVzZXJUeXBlW10+KChyZXN1bHQsIHVzZXIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRVc2VyID0gcGFyc2VVc2VyU2FmZSh1c2VyKTtcblxuICAgIGlmKHBhcnNlZFVzZXIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHBhcnNlZFVzZXIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtdKTtcblxuY29uc3QgYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyA9IChcbiAge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWUsIHVzZXJJZH06IFVzZXJUeXBlLFxuICB7YWN0aXZlID0gZmFsc2V9OiB7cmVhZG9ubHkgYWN0aXZlPzogYm9vbGVhbn0gPSB7fVxuKTogRmlsdGVyR3JvdXAgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVGaWx0ZXJzID0gYnVpbGRQcmVzZW50RmlsdGVyR3JvdXAoe1xuICAgIGVtYWlsLFxuICAgIHBob25lLFxuICAgIHVzZXJuYW1lLFxuICAgIC4uLih1c2VySWQgPyB7X2tleTogdXNlcklkfSA6IHt9KVxuICB9LCB7bG9naWM6ICdPUid9KTtcblxuICBpZighYWN0aXZlIHx8IGF0dHJpYnV0ZUZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYXR0cmlidXRlRmlsdGVycztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29uZGl0aW9uczogW1xuICAgICAgYXR0cmlidXRlRmlsdGVycyxcbiAgICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gICAgXSxcbiAgICBsb2dpYzogJ0FORCdcbiAgfTtcbn07XG5cbmNvbnN0IGdldFVzZXJCeUF0dHJpYnV0ZXMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUsIG9wdGlvbnM/OiB7cmVhZG9ubHkgYWN0aXZlPzogYm9vbGVhbn0pID0+IHtcbiAgY29uc3QgZmlsdGVycyA9IGJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnModXNlciwgb3B0aW9ucyk7XG5cbiAgaWYoZmlsdGVycy5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0SXRlbUJ5PFVzZXJUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlck9wdGlvbmFsRmllbGRzID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSk6IFNlbGVjdEFjY3VtdWxhdG9yID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHM6IFNlbGVjdEFjY3VtdWxhdG9yLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIHJldHVybiBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlKCd1c2VycycsICd1JywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVVzZXJPcHRpb25zID0gKG9wdGlvbnM6IFVzZXJPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBsaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlcklucHV0KTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXInO1xuICBjb25zdCB7bGFuZ3VhZ2VDb250ZXh0fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtjb25maXJtOiBfY29uZmlybSwgLi4ubmV3VXNlcn0gPSB1c2VyO1xuICBjb25zdCB7ZW1haWwsIHBhc3N3b3JkLCBwaG9uZSwgdXNlcm5hbWUsIHVzZXJJZCwgX2tleSwgX2lkLCAuLi5pbnNlcnRVc2VyfSA9IHBhcnNlVXNlcihuZXdVc2VyKTtcbiAgY29uc3QgaGFzUGFzc3dvcmQgPSAhIXBhc3N3b3JkO1xuICBjb25zdCBoYXNVc2VybmFtZSA9ICEhdXNlcm5hbWUgfHwgISFwaG9uZSB8fCAhIWVtYWlsO1xuXG4gIGlmKCFoYXNQYXNzd29yZCB8fCAhaGFzVXNlcm5hbWUpIHtcbiAgICBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNoSWQgPSB1c2VybmFtZSB8fCBwaG9uZSB8fCBlbWFpbDtcbiAgY29uc3Qgc2FsdCA9IGNyZWF0ZUhhc2goYCR7aGFzaElkfSR7cGFzc3dvcmR9YCwgJycpO1xuICBjb25zdCBlbmNyeXB0ZWRQYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKHBhc3N3b3JkLCBzYWx0KTtcbiAgbGV0IGV4aXN0aW5nVXNlcjogVXNlclR5cGUgfCBudWxsID0gbnVsbDtcblxuICB0cnkge1xuICAgIGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcbiAgICBjb25zdCBpc0NvbnRhY3RPbmx5VXNlciA9IGV4aXN0aW5nVXNlcj8udHlwZSA9PT0gJ2NybUNvbnRhY3QnIHx8IEJvb2xlYW4oZXhpc3RpbmdVc2VyPy5zaG9waWZ5Q3VzdG9tZXJJZCk7XG5cbiAgICBpZihleGlzdGluZ1VzZXIgJiYgIWlzQ29udGFjdE9ubHlVc2VyKSB7XG4gICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5FWElTVElOR19JVEVNXG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBwaG9uZUNvdW50cnlDb2RlID0gcGhvbmU/LnJlcGxhY2UoL1xcRC9nLCAnJykuc3Vic3RyaW5nKDAsIDMpO1xuICBjb25zdCBsb2NhbGUgPSBkZXRlY3RMYW5ndWFnZSh7XG4gICAgLi4ubGFuZ3VhZ2VDb250ZXh0LFxuICAgIHBob25lQ291bnRyeUNvZGU6IHBob25lQ291bnRyeUNvZGUgfHwgJycsXG4gICAgdXNlclByZWZlcmVuY2U6IGluc2VydFVzZXIubG9jYWxlIHx8ICdlbidcbiAgfSk7XG4gIGNvbnN0IHZlcmlmaWVkRW1haWxDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICBjb25zdCB2ZXJpZmllZFNtc0NvZGUgPSBNYXRoLmZsb29yKDEwMDAwMCArIChNYXRoLnJhbmRvbSgpICogOTAwMDAwKSk7XG4gIGNvbnN0IG1hcmtldGluZ09wdEluID0gaW5zZXJ0VXNlci5tYXJrZXRpbmdPcHRJbiA/PyBpbnNlcnRVc2VyLm1haWxpbmdMaXN0O1xuICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICBjb25zdCBtYXJrZXRpbmdGaWVsZHMgPSBtYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZVxuICAgID8ge1xuICAgICAgbWFpbGluZ0xpc3Q6IHRydWUsXG4gICAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBpbnNlcnRVc2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2UgfHwgZXhpc3RpbmdVc2VyPy5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8ICdhY2NvdW50LXNpZ251cCcsXG4gICAgICBtYXJrZXRpbmdPcHRJbjogdHJ1ZSxcbiAgICAgIG1hcmtldGluZ09wdEluQXQ6IGluc2VydFVzZXIubWFya2V0aW5nT3B0SW5BdCB8fCBleGlzdGluZ1VzZXI/Lm1hcmtldGluZ09wdEluQXQgfHwgdGltZXN0YW1wLFxuICAgICAgbWFya2V0aW5nT3B0T3V0QXQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgICA6IChtYXJrZXRpbmdPcHRJbiA9PT0gZmFsc2UgPyB7XG4gICAgICBtYWlsaW5nTGlzdDogZmFsc2UsXG4gICAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBpbnNlcnRVc2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2UgfHwgJ2FjY291bnQtc2lnbnVwJyxcbiAgICAgIG1hcmtldGluZ09wdEluOiBmYWxzZSxcbiAgICAgIG1hcmtldGluZ09wdE91dEF0OiBpbnNlcnRVc2VyLm1hcmtldGluZ09wdE91dEF0IHx8IHRpbWVzdGFtcFxuICAgIH0gOiB7fSk7XG5cbiAgY29uc3QgaW5zZXJ0OiBVc2VyVHlwZSA9IHtcbiAgICAuLi5pbnNlcnRVc2VyLFxuICAgIF9rZXk6IGNyZWF0ZUhhc2goaGFzaElkKSxcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgZW1haWwsXG4gICAgbG9jYWxlLFxuICAgIHBhc3N3b3JkOiBlbmNyeXB0ZWRQYXNzd29yZCxcbiAgICBwaG9uZSxcbiAgICBzYWx0LFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICB1c2VyQWNjZXNzOiBVc2VyQWNjZXNzLkJBU0lDLFxuICAgIHVzZXJuYW1lLFxuICAgIHZlcmlmaWVkRW1haWw6IGZhbHNlLFxuICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgIHZlcmlmaWVkUGhvbmU6IGZhbHNlLFxuICAgIHZlcmlmaWVkU21zQ29kZSxcbiAgICAuLi5tYXJrZXRpbmdGaWVsZHNcbiAgfTtcblxuICBjb25zdCBzYXZlVXNlciA9ICgpOiBQcm9taXNlPFVzZXJUeXBlIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlcklkID0gZXhpc3RpbmdVc2VyPy51c2VySWQgfHwgZXhpc3RpbmdVc2VyPy5fa2V5O1xuXG4gICAgaWYoIWV4aXN0aW5nVXNlcklkKSB7XG4gICAgICByZXR1cm4gYWRkSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgaW5zZXJ0KTtcbiAgICB9XG5cbiAgICBjb25zdCB7X2tleTogX2dlbmVyYXRlZEtleSwgLi4udXBncmFkZUZpZWxkc30gPSBpbnNlcnQ7XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGV4aXN0aW5nVXNlcklkLCB1cGdyYWRlRmllbGRzKTtcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgc2F2ZVVzZXIoKVxuICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkVXNlciA9IHBhcnNlVXNlclNhZmUocmVzdWx0KTtcbiAgICAgIGNvbnN0IHNhdmVkVXNlcklkID0gc2F2ZWRVc2VyPy51c2VySWQgfHwgc2F2ZWRVc2VyPy5fa2V5O1xuXG4gICAgICBpZighc2F2ZWRVc2VyIHx8ICFzYXZlZFVzZXJJZCkge1xuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuXG4gICAgICBpZihzYXZlZFVzZXIucGVyc29uYUlkKSB7XG4gICAgICAgIHJldHVybiBzYXZlZFVzZXI7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBlcnNvbmEgPSBhd2FpdCBhZGRQZXJzb25hKGNvbnRleHQsIHt1c2VySWQ6IHNhdmVkVXNlcklkfSk7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBlcnNvbmE/LnBlcnNvbmFJZCB8fCBwZXJzb25hPy5fa2V5O1xuXG4gICAgICAgIGlmKCFwZXJzb25hSWQpIHtcbiAgICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZFVzZXIgPSBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBzYXZlZFVzZXJJZCwge3BlcnNvbmFJZH0pO1xuICAgICAgICBjb25zdCByZXN1bHRVc2VyID0gcGFyc2VVc2VyU2FmZSh1cGRhdGVkVXNlcikgfHwge1xuICAgICAgICAgIC4uLnNhdmVkVXNlcixcbiAgICAgICAgICBwZXJzb25hSWRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0VXNlcjtcbiAgICAgIH0gY2F0Y2gocGVyc29uYUVycm9yKSB7XG4gICAgICAgIGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgcGFyYW1zOiB7dXNlcklkOiBzYXZlZFVzZXJJZH0sXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgcGVyc29uYUVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VybmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVXNlciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVVzZXInO1xuICBjb25zdCB1cGRhdGVkVXNlciA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3Qge3Bhc3N3b3JkLCBfa2V5LCBfaWQsIC4uLnVwZGF0ZUZpZWxkc30gPSB1cGRhdGVkVXNlcjtcbiAgY29uc3Qge2lkfSA9IHVwZGF0ZWRVc2VyO1xuICBjb25zdCB1cGRhdGUgPSB7Li4udXBkYXRlRmllbGRzfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICB0cnkge1xuICAgIGlmKHBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgICAgICBSRVRVUk4gRE9DVU1FTlQoJHtpZH0pXG4gICAgICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgICAgIGNvbnN0IGhhc2hJZCA9IGV4aXN0aW5nVXNlcj8udXNlcm5hbWUgfHwgZXhpc3RpbmdVc2VyPy5waG9uZSB8fCBleGlzdGluZ1VzZXI/LmVtYWlsIHx8IGlkIHx8IF9rZXkgfHwgX2lkIHx8ICcnO1xuICAgICAgY29uc3Qgc2FsdCA9IGV4aXN0aW5nVXNlcj8uc2FsdCB8fCBjcmVhdGVIYXNoKGAke2hhc2hJZH0ke3Bhc3N3b3JkfWAsICcnKTtcblxuICAgICAgdXBkYXRlLnBhc3N3b3JkID0gY3JlYXRlUGFzc3dvcmQocGFzc3dvcmQsIHNhbHQpO1xuXG4gICAgICBpZighZXhpc3RpbmdVc2VyPy5zYWx0KSB7XG4gICAgICAgIHVwZGF0ZS5zYWx0ID0gc2FsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkVXNlclJlc3VsdCA9IGF3YWl0IG9yZ2FuaXphdGlvbkFjY291bnRNdXRhdGlvbihjb250ZXh0LCBpZCwgJ3VwZGF0ZScsIHVwZGF0ZSlcbiAgICAgIHx8IGF3YWl0IHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGlkLCB1cGRhdGUgYXMgVXNlclR5cGUpO1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHVwZGF0ZWRVc2VyUmVzdWx0KSBhcyBVc2VyVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcn0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcmdvdFBhc3N3b3JkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdmb3Jnb3RQYXNzd29yZCc7XG4gIGNvbnN0IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge2VtYWlsLCBwaG9uZSwgdmVyaWZpZWRFbWFpbCwgdmVyaWZpZWRQaG9uZX0gPSBleGlzdGluZ1VzZXIgYXMgVXNlclR5cGU7XG4gICAgICBjb25zdCBjb2RlRXhwaXJlcyA9IERhdGUubm93KCkgKyAoMTAwMCAqIDYwICogMTUpO1xuICAgICAgY29uc3QgY29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgICAgIGxldCB1cGRhdGU7XG5cbiAgICAgIGlmKGVtYWlsICYmIHZlcmlmaWVkRW1haWwpIHtcbiAgICAgICAgY29uc3QgbWFuYWdlZCA9IGF3YWl0IG9yZ2FuaXphdGlvblBhc3N3b3JkUmVjb3ZlcnkoXG4gICAgICAgICAgY29udGV4dCwgZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlciksICdpc3N1ZScsIHtjb2RlLCBlbWFpbCwgZXhwaXJlczogY29kZUV4cGlyZXN9XG4gICAgICAgICk7XG4gICAgICAgIGlmKG1hbmFnZWQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbWFuYWdlZCAmJiBhd2FpdCBzZW5kRW1haWwoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGh0bWw6IGA8cD5Zb3VyIHBhc3N3b3JkIHJlc2V0IGNvZGUgaXMgPHN0cm9uZz4ke2NvZGV9PC9zdHJvbmc+LjwvcD5gLFxuICAgICAgICAgICAgc3ViamVjdDogYCR7Z2V0QXBwVGl0bGUoZ2V0QXBwTmFtZShjb250ZXh0KSl9IHBhc3N3b3JkIHJlc2V0IGNvZGVgLFxuICAgICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICAgIHVzZXI6IGV4aXN0aW5nVXNlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNlbmRFbWFpbCh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBodG1sOiBgPHA+WW91ciBwYXNzd29yZCByZXNldCBjb2RlIGlzIDxzdHJvbmc+JHtjb2RlfTwvc3Ryb25nPi48L3A+YCxcbiAgICAgICAgICBzdWJqZWN0OiBgJHtnZXRBcHBUaXRsZShnZXRBcHBOYW1lKGNvbnRleHQpKX0gcGFzc3dvcmQgcmVzZXQgY29kZWAsXG4gICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICB1c2VyOiBleGlzdGluZ1VzZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZEVtYWlsQ29kZTogY29kZSwgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IGNvZGVFeHBpcmVzfTtcbiAgICAgIH1cblxuICAgICAgaWYocGhvbmUgJiYgdmVyaWZpZWRQaG9uZSkge1xuICAgICAgICBjb25zdCBtYW5hZ2VkID0gYXdhaXQgb3JnYW5pemF0aW9uUGFzc3dvcmRSZWNvdmVyeShcbiAgICAgICAgICBjb250ZXh0LCBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKSwgJ2lzc3VlJywge2NvZGUsIGV4cGlyZXM6IGNvZGVFeHBpcmVzLCBwaG9uZX1cbiAgICAgICAgKTtcbiAgICAgICAgaWYobWFuYWdlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmKG1hbmFnZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHNlbmRTbXMoe2NvbnRleHQsIHRleHQ6IGBZb3VyIGNvZGUgaXMgJHtjb2RlfWB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hbmFnZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZFNtcyh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB0ZXh0OiBgWW91ciBjb2RlIGlzICR7Y29kZX1gXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUgPSB7dmVyaWZpZWRQaG9uZUV4cGlyZXM6IGNvZGVFeHBpcmVzLCB2ZXJpZmllZFNtc0NvZGU6IGNvZGV9O1xuICAgICAgfVxuXG4gICAgICBpZih1cGRhdGU/LnZlcmlmaWVkRW1haWxDb2RlIHx8IHVwZGF0ZT8udmVyaWZpZWRTbXNDb2RlKSB7XG4gICAgICAgIGNvbnN0IHVzZXJEb2NJZCA9IGdldERvY0lkKENPTExFQ1RJT05TLlVTRVJTLCBleGlzdGluZ1VzZXIpO1xuXG4gICAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlVTRVJTLCB1c2VyRG9jSWQsIHVwZGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNldFBhc3N3b3JkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7Y29kZSwgdXNlcn06IHtjb2RlOiBudW1iZXI7IHVzZXI6IFVzZXJUeXBlfVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNldFBhc3N3b3JkJztcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzYWx0LFxuICAgICAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICAgICAgdmVyaWZpZWRFbWFpbEV4cGlyZXMgPSAwLFxuICAgICAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgICAgIHZlcmlmaWVkUGhvbmVFeHBpcmVzID0gMFxuICAgICAgfSA9IGV4aXN0aW5nVXNlciBhcyBVc2VyVHlwZTtcbiAgICAgIGNvbnN0IG1hbmFnZWQgPSBhd2FpdCBvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5KFxuICAgICAgICBjb250ZXh0LCBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKSwgJ2NvbnN1bWUnLCB7Y29kZSwgZW1haWwsIHBhc3N3b3JkOiBmb3JtYXRQYXNzd29yZCwgcGhvbmV9XG4gICAgICApO1xuICAgICAgaWYobWFuYWdlZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWFuYWdlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiBjb2RlID09PSB2ZXJpZmllZEVtYWlsQ29kZSAmJiB2ZXJpZmllZEVtYWlsRXhwaXJlcyA+IG5vdykge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAgdXBkYXRlID0ge3Bhc3N3b3JkfTtcbiAgICAgIH0gZWxzZSBpZihwaG9uZSAmJiBjb2RlID09PSB2ZXJpZmllZFNtc0NvZGUgJiYgdmVyaWZpZWRQaG9uZUV4cGlyZXMgPiBub3cpIHtcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSBjcmVhdGVQYXNzd29yZChmb3JtYXRQYXNzd29yZCwgc2FsdCk7XG4gICAgICAgIHVwZGF0ZSA9IHtwYXNzd29yZH07XG4gICAgICB9XG5cbiAgICAgIGlmKHVwZGF0ZSkge1xuICAgICAgICBjb25zdCB1c2VyRG9jSWQgPSBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKTtcblxuICAgICAgICBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywgdXNlckRvY0lkLCB1cGRhdGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kVmVyaWZpY2F0aW9uRW1haWwgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NlbmRWZXJpZmljYXRpb25FbWFpbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2VtYWlsfSA9IHBhcnNlVXNlcih1c2VyKTtcblxuICBpZighZW1haWwpIHtcbiAgICBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHZlcmlmaWVkRW1haWxDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICAgIGNvbnN0IHVwZGF0ZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgdS5lbWFpbCA9PSAke2VtYWlsfVxuICAgICAgICBGSUxURVIgdS5vcmdhbml6YXRpb25BY2NvdW50ICE9IHRydWVcbiAgICAgICAgRklMVEVSIHUudmVyaWZpZWRFbWFpbCAhPSB0cnVlXG4gICAgICAgIEZJTFRFUiAhSEFTKHUsIFwidmVyaWZpZWRFbWFpbEV4cGlyZXNcIikgfHwgdS52ZXJpZmllZEVtYWlsRXhwaXJlcyA8PSAke25vd31cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBVUERBVEUgdSBXSVRIICR7e1xuICAgICAgICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgICAgICAgIHZlcmlmaWVkRW1haWxFeHBpcmVzOiBub3cgKyBWRVJJRklDQVRJT05fRU1BSUxfQ09PTERPV05fTVNcbiAgICAgICAgfX0gSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBORVdcbiAgICBgO1xuXG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSk7XG4gICAgY29uc3QgcmF3VXNlciA9IGF3YWl0IGN1cnNvci5uZXh0KCk7XG4gICAgY29uc3QgZm91bmRVc2VyID0gcmF3VXNlciA/IHBhcnNlVXNlcihyYXdVc2VyKSA6IG51bGw7XG5cbiAgICBpZighZm91bmRVc2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHNlbmRFbWFpbCh7XG4gICAgICBjb250ZXh0LFxuICAgICAgLi4uYnVpbGRWZXJpZmljYXRpb25FbWFpbChjb250ZXh0LCB2ZXJpZmllZEVtYWlsQ29kZSwgdXNlciksXG4gICAgICB1c2VyOiB7XG4gICAgICAgIC4uLmZvdW5kVXNlcixcbiAgICAgICAgdmVyaWZpZWRFbWFpbENvZGVcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvZGUsXG4gICAgdHlwZSxcbiAgICB2YWx1ZVxuICB9OiB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIHR5cGU6ICdzbXMnIHwgJ2VtYWlsJztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbmZpcm1Db2RlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1NtcyA9IHR5cGUgPT09ICdzbXMnO1xuICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGlzU21zID8gcGFyc2VQaG9uZSh2YWx1ZSkgOiBwYXJzZUVtYWlsKHZhbHVlKTtcbiAgY29uc3QgZmlsdGVyQnlUeXBlID0gaXNTbXNcbiAgICA/IGFxbGBGSUxURVIgdS5waG9uZSA9PSAke2Zvcm1hdHRlZFZhbHVlfSAmJiB1LnZlcmlmaWVkU21zQ29kZSA9PSAke2NvZGV9YFxuICAgIDogYXFsYEZJTFRFUiB1LmVtYWlsID09ICR7Zm9ybWF0dGVkVmFsdWV9ICYmIHUudmVyaWZpZWRFbWFpbENvZGUgPT0gJHtjb2RlfWA7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICR7ZmlsdGVyQnlUeXBlfVxuICAgICAgRklMVEVSIHUub3JnYW5pemF0aW9uQWNjb3VudCAhPSB0cnVlXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgICAgaWYodXNlcikge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gaXNTbXNcbiAgICAgICAgICAgID8ge3ZlcmlmaWVkUGhvbmU6IHRydWUsIHZlcmlmaWVkU21zQ29kZTogMH1cbiAgICAgICAgICAgIDoge3ZlcmlmaWVkRW1haWw6IHRydWUsIHZlcmlmaWVkRW1haWxDb2RlOiAwfTtcbiAgICAgICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7dXNlci5fa2V5fSBXSVRIICR7dXBkYXRlZFVzZXJ9IElOIHVzZXJzYDtcblxuICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7Y29kZSwgdHlwZSwgdmFsdWU6IGZvcm1hdHRlZFZhbHVlfSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7Y29kZSwgdHlwZSwgdmFsdWU6IGZvcm1hdHRlZFZhbHVlfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpZH0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgY29uc3Qgb3JnYW5pemF0aW9uVXNlciA9IGF3YWl0IG9yZ2FuaXphdGlvbkFjY291bnRNdXRhdGlvbihjb250ZXh0LCBpZCwgJ2RlbGV0ZScsIHt9KTtcbiAgaWYob3JnYW5pemF0aW9uVXNlcikge1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKG9yZ2FuaXphdGlvblVzZXIpIGFzIFVzZXJUeXBlO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB1ID0gRE9DVU1FTlQoJHtpZH0pXG4gICAgRklMVEVSICR7b3JnYW5pemF0aW9uQWNjb3VudFdyaXRlR3VhcmQoY29udGV4dCwgJ3VzZXJzJywgJ3UnKX1cbiAgICBSRU1PVkUgdSBJTiB1c2Vyc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXIpID0+IHBhcnNlVXNlclNhZmUodXNlcikpXG4gICAgLnRoZW4oKGRlbGV0ZWRVc2VyKSA9PiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmRlbChkZWxldGVkVXNlcj8uc3RyaXBlQ3VzdG9tZXJJZClcbiAgICAgIC50aGVuKCgpID0+IHN0cmlwZUNsaWVudC5hY2NvdW50cy5kZWwoZGVsZXRlZFVzZXI/LnN0cmlwZUFjY291bnRJZCkpXG4gICAgICAudGhlbigoKSA9PiBkZWxldGVkVXNlciBhcyBVc2VyVHlwZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYWN0aXZhdGVVc2VyID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVhY3RpdmF0ZVVzZXInO1xuICBjb25zdCB7aWR9ID0gcGFyc2VVc2VyKHVzZXIpO1xuICBjb25zdCBvcmdhbml6YXRpb25Vc2VyID0gYXdhaXQgb3JnYW5pemF0aW9uQWNjb3VudE11dGF0aW9uKGNvbnRleHQsIGlkLCAnZGVhY3RpdmF0ZScsIHt9KTtcbiAgaWYob3JnYW5pemF0aW9uVXNlcikge1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHsuLi5vcmdhbml6YXRpb25Vc2VyLCBhY3RpdmU6IGZhbHNlfSkgYXMgVXNlclR5cGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlZDogVXNlclR5cGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBpZCwgdXBkYXRlZClcbiAgICAudGhlbigodXBkYXRlZFVzZXIpID0+IHBhcnNlVXNlclNhZmUodXBkYXRlZFVzZXIpIGFzIFVzZXJUeXBlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2lkfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyRGlzcGxheU5hbWUgPSAodXNlcjogVXNlclR5cGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7Zmlyc3ROYW1lLCBsYXN0TmFtZSwgbmFtZSA9ICcnLCB1c2VybmFtZSA9ICcnfSA9IHVzZXI7XG4gIGNvbnN0IGZ1bGxuYW1lID0gKFtmaXJzdE5hbWUsIGxhc3ROYW1lXSkuam9pbignICcpLnRyaW0oKTtcblxuICBpZihuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0gZWxzZSBpZihmdWxsbmFtZSAhPT0gJycpIHtcbiAgICByZXR1cm4gZnVsbG5hbWU7XG4gIH0gZWxzZSBpZih1c2VybmFtZSkge1xuICAgIHJldHVybiB1c2VybmFtZTtcbiAgfVxuXG4gIHJldHVybiAnVW5rbm93bic7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvblVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFNlc3Npb25Vc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBwYXJzZUFyYW5nb0lkKGB1c2Vycy8ke3Nlc3Npb25JZH1gKTtcblxuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIHUgPSBET0NVTUVOVCgke2Zvcm1hdFNlc3Npb25JZH0pXG4gICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXIpID0+IHBhcnNlVXNlclNhZmUodXNlcikpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJCeUlkJztcbiAgY29uc3Qge2VtYWlsLCBpZCwgcGhvbmUsIHVzZXJJZCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyKHVzZXIpO1xuICBjb25zdCB7ZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuXG4gIGlmKGlkKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1CeTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywge1xuICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICB7ZmllbGQ6ICdfaWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGlkfSxcbiAgICAgICAge2ZpZWxkOiAnYWN0aXZlJywgb3BlcmF0b3I6ICchPScsIHZhbHVlOiBmYWxzZX1cbiAgICAgIF1cbiAgICB9IGFzIGFueSwge1xuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyU2FmZShyZXN1bHQpIGFzIFVzZXJUeXBlKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7aWQsIHVzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHtlbWFpbCwgcGhvbmUsIHVzZXJJZCwgdXNlcm5hbWV9LCB7YWN0aXZlOiB0cnVlfSk7XG5cbiAgaWYoZmlsdGVycy5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCBhcyB1bmtub3duIGFzIFVzZXJUeXBlKTtcbiAgfVxuXG4gIHJldHVybiBnZXRJdGVtQnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGZpbHRlcnMsIHtcbiAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiBwYXJzZVVzZXJTYWZlKHJlc3VsdCkgYXMgVXNlclR5cGUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aWQsIHVzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBVc2VyT3B0aW9ucyk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3QnO1xuICBjb25zdCB7ZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VXNlck9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGNvbmRpdGlvbnM6IGFueVtdID0gW1xuICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gIF07XG5cbiAgaWYodXNlcm5hbWUpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAndXNlcm5hbWUnLCBvcGVyYXRvcjogJ0NPTlRBSU5TJywgdmFsdWU6IHBhcnNlVXNlcm5hbWUodXNlcm5hbWUpLCBjYXNlU2Vuc2l0aXZlOiBmYWxzZX0pO1xuICB9XG5cbiAgcmV0dXJuIGdldExpc3RCeTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zXG4gIH0gYXMgYW55LCB7XG4gICAgc29ydDogW3tmaWVsZDogJ3VzZXJuYW1lJywgZGlyZWN0aW9uOiAnQVNDJ31dLFxuICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gIH0pXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyTGlzdChyZXN1bHQpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtyZWFjdGlvbnMgPSBbXSwgdXNlcm5hbWV9OiB7cmVhY3Rpb25zPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAgb3B0aW9ucz86IFVzZXJPcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICd1LmFjdGl2ZSAhPSBmYWxzZScsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd1Jyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKCh1c2VycykgPT4gcGFyc2VVc2VyTGlzdCh1c2VycykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFVzZXJUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckxpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt0YWdzLCB1c2VybmFtZX0sXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ3M6IHN0cmluZ1tdID0gdGFncz8ucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgdGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYodGFnTmFtZSkge1xuICAgICAgbGlzdC5wdXNoKHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IHBhcnNlVXNlcm5hbWUodXNlcm5hbWUpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgYHUuX2tleSAhPSBcIiR7c2Vzc2lvbklkfVwiYCxcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnXG4gIF07XG5cbiAgaWYodXNlcm5hbWUpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBDT05UQUlOUyh1LnVzZXJuYW1lLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYCk7XG4gIH1cblxuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7Zm9ybWF0VGFnc30sIExPV0VSKHQubmFtZSkpXG4gICAgICBGT1IgdSwgaXQgSU4gT1VUQk9VTkQgdCAke2lzVGFnZ2VkQ29sbGVjdGlvbn1cbiAgICAgICAgT1BUSU9OUyB7YmZzOiB0cnVlLCB1bmlxdWVWZXJ0aWNlczogXCJnbG9iYWxcIiwgdmVydGV4Q29sbGVjdGlvbnM6ICR7Q09MTEVDVElPTlMuVVNFUlN9fVxuICAgICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwge3VzZXJuYW1lfSwgb3B0aW9ucz86IFVzZXJPcHRpb25zKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmaWx0ZXIgPSBbXG4gICAgJ3UuX2lkICE9IHNlc3Npb24uX2lkJyxcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnXG4gIF07XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyLnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKX1cIilgKTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgTEVUIHNlc3Npb24gPSBET0NVTUVOVCgke2B1c2Vycy8ke3VzZXJJZH1gfSlcbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyLmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRSh1LmxhdGl0dWRlIHx8IDAsIHUubG9uZ2l0dWRlIHx8IDAsIHNlc3Npb24ubGF0aXR1ZGUgfHwgMCwgc2Vzc2lvbi5sb25naXR1ZGUgfHwgMClcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSBBU0MsIHUuYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd1Jyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKCh1c2VycykgPT4gcGFyc2VVc2VyTGlzdCh1c2VycykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFVzZXJUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckxpc3RCeUNvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt1c2VySWR9OiBVc2VyVHlwZSxcbiAgb3B0aW9ucz86IFVzZXJPcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0QnlDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VXNlck9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlQXJhbmdvSWQoYHVzZXJzLyR7dXNlcklkfWApO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke3BhcnNlVXNlcm5hbWUodXNlcm5hbWUpfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBjdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIExFVCBzZXNzaW9uID0gRE9DVU1FTlQoJHtmb3JtYXRVc2VySWR9KVxuICAgICAgRk9SIHUsIGNvbm5lY3Rpb24gSU4gT1VUQk9VTkQgY3UgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgT1BUSU9OUyB7YmZzOiB0cnVlLCB1bmlxdWVWZXJ0aWNlczogXCJnbG9iYWxcIiwgdmVydGV4Q29sbGVjdGlvbnM6ICR7Q09MTEVDVElPTlMuVVNFUlN9fVxuICAgICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hTZXNzaW9uID0gKHtleHBpcmVzLCB0b2tlbn0pOiBTZXNzaW9uVG9rZW4gfCBTZXNzaW9uRXJyb3IgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHtmaXJzdE5hbWUsIGxhc3ROYW1lLCBwZXJzb25hSWQsIHVzZXJJZCwgdXNlcm5hbWUsIHVzZXJBY2Nlc3N9ID0gZ2V0U2Vzc2lvbih0b2tlbik7XG4gICAgcmV0dXJuIGNyZWF0ZVVzZXJUb2tlbih1c2VySWQsIHBlcnNvbmFJZCB8fCAnJywgdXNlcm5hbWUsIHVzZXJBY2Nlc3MsIGV4cGlyZXMsIHtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdGhlIGVycm9yIGZyb20gZ2V0U2Vzc2lvblxuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHtleHBpcmVzLCB1c2VyfSk6IFByb21pc2U8U2Vzc2lvblRva2VuIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnc2lnbkluJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZW1haWwsIHBhc3N3b3JkLCBwaG9uZSwgdXNlcm5hbWV9ID0gdXNlciB8fCB7fTtcbiAgY29uc3QgZm9ybWF0RW1haWwgPSBwYXJzZUVtYWlsKGVtYWlsKTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcbiAgY29uc3QgZm9ybWF0UGhvbmUgPSBwYXJzZVBob25lKHBob25lKTtcbiAgY29uc3QgZm9ybWF0RXhwaXJlcyA9IHBhcnNlTnVtKGV4cGlyZXMpIHx8IDE1O1xuXG4gIGlmKGZvcm1hdFVzZXJuYW1lID09PSBBRE1JTl9VU0VSTkFNRSkge1xuICAgIGlmKCFpc0FkbWluUGFzc3dvcmQocGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VybmFtZTogZm9ybWF0VXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlVXNlclRva2VuKEFETUlOX1VTRVJOQU1FLCAnJywgQURNSU5fVVNFUk5BTUUsIFVzZXJBY2Nlc3MuQURNSU4sIGZvcm1hdEV4cGlyZXMsIHtmaXJzdE5hbWU6ICdTdXBlcicsIGxhc3ROYW1lOiAnQWRtaW4nfSk7XG4gIH1cblxuICBpZigoIWZvcm1hdFVzZXJuYW1lICYmICFmb3JtYXRFbWFpbCAmJiAhZm9ybWF0UGhvbmUpIHx8ICFmb3JtYXRQYXNzd29yZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBmb3JtYXRFbWFpbCwgZm9ybWF0UGhvbmUsIGZvcm1hdFVzZXJuYW1lLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHtcbiAgICBlbWFpbDogZm9ybWF0RW1haWwsXG4gICAgcGhvbmU6IGZvcm1hdFBob25lLFxuICAgIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZVxuICB9KTtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycywgJ3UnKTtcblxuICBjb25zdCBjaGVja1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIFJFVFVSTiB1XG4gIGA7XG5cbiAgbGV0IGNoZWNrVXNlcnM6IFVzZXJUeXBlW107XG5cbiAgdHJ5IHtcbiAgICBjaGVja1VzZXJzID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShjaGVja1F1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBjaGVja1VzZXIgPSBjaGVja1VzZXJzLmZpbmQoKHVzZXJJdGVtID0ge30pID0+IHtcbiAgICBjb25zdCB7cGFzc3dvcmQ6IHZhbGlkUGFzc3dvcmQsIHNhbHR9ID0gdXNlckl0ZW0gYXMgVXNlclR5cGU7XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsaWRQYXNzd29yZCAmJiBzYWx0ICYmIHZhbGlkUGFzc3dvcmQgPT09IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KSk7XG4gIH0pO1xuXG4gIGlmKCFjaGVja1VzZXIpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT05cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGlmKGNoZWNrVXNlci5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgX2tleTogdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBwZXJzb25hSWQsXG4gICAgdXNlckFjY2VzcyxcbiAgICB1c2VybmFtZTogY2hlY2tVc2VybmFtZVxuICB9ID0gY2hlY2tVc2VyIGFzIFVzZXJUeXBlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdG9rZW4gPSBjcmVhdGVVc2VyVG9rZW4odXNlcklkIHx8ICcnLCBwZXJzb25hSWQgfHwgJycsIGNoZWNrVXNlcm5hbWUgfHwgJycsIHVzZXJBY2Nlc3MsIGZvcm1hdEV4cGlyZXMsIHtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaWduT3V0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NpZ25PdXQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBsYXN0T25saW5lOiBEYXRlLm5vdygpLFxuICAgIHNlc3Npb25JZDogbnVsbFxuICB9O1xuICBjb25zdCBzZXNzaW9uUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB1ID0gRE9DVU1FTlQoJHt1c2VyRG9jSWR9KVxuICAgIFVQREFURSB1IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBORVdgO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShzZXNzaW9uUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFjdGl2ZVVzZXJDb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEFjdGl2ZVVzZXJDb3VudCc7XG5cbiAgcmV0dXJuIGNvdW50SXRlbXMoY29udGV4dCwgJ3VzZXJzJywge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbe2ZpZWxkOiAnYWN0aXZlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiB0cnVlfV1cbiAgfSBhcyBhbnkpXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJCeVRva2VuID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyQnlUb2tlbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJJZH0gPSBnZXRTZXNzaW9uKHRva2VuKTtcbiAgY29uc3QgdXNlckRvY0lkID0gcGFyc2VBcmFuZ29JZChgdXNlcnMvJHt1c2VySWR9YCk7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKFwiJHt1c2VyRG9jSWR9XCIpIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICBpZih1c2VyPy5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHBhcmFtczoge3VzZXJJZH0sXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlVXNlclNhZmUodXNlcikgYXMgVXNlclR5cGU7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJjcmVhdGVQYXNzd29yZCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUVtYWlsIiwicGFyc2VQYXNzd29yZCIsInBhcnNlUGhvbmUiLCJwYXJzZVVzZXJuYW1lIiwiYXFsIiwibGl0ZXJhbCIsImNyZWF0ZUNyeXB0b0hhc2giLCJ0aW1pbmdTYWZlRXF1YWwiLCJEYXRlVGltZSIsInBhcnNlVXNlciIsInBhcnNlVXNlclNhZmUiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwib3JnYW5pemF0aW9uQWNjb3VudE11dGF0aW9uIiwib3JnYW5pemF0aW9uQWNjb3VudFdyaXRlR3VhcmQiLCJvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5IiwidmVyaWZ5RW1haWxUZW1wbGF0ZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRmlsdGVyQ2xhdXNlIiwiYnVpbGRQcmVzZW50RmlsdGVyR3JvdXAiLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsInVzZURiIiwiZGV0ZWN0TGFuZ3VhZ2UiLCJnZXRTZXNzaW9uIiwic2V0U2Vzc2lvbiIsImdldFN0cmlwZUNsaWVudCIsImFkZEl0ZW0iLCJjb3VudEl0ZW1zIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsInNlbmRFbWFpbCIsImFkZFBlcnNvbmEiLCJzZW5kU21zIiwiZXZlbnRDYXRlZ29yeSIsIkFETUlOX1VTRVJOQU1FIiwiVkVSSUZJQ0FUSU9OX0VNQUlMX0NPT0xET1dOX01TIiwidXNlcnNDb2xsZWN0aW9uIiwiVVNFUlMiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiaXNBZG1pblBhc3N3b3JkIiwicGFzc3dvcmQiLCJhZG1pblBhc3N3b3JkIiwicHJvY2VzcyIsImVudiIsIkFETUlOX1BBU1NXT1JEIiwiYWN0dWFsIiwidXBkYXRlIiwiZGlnZXN0IiwiZXhwZWN0ZWQiLCJnZXRBcHBOYW1lIiwiY29udGV4dCIsImNvbmZpZyIsImRldGFpbHMiLCJuYW1lIiwiZ2V0IiwiZ2V0QXBwVGl0bGUiLCJhcHBOYW1lIiwic3BsaXQiLCJtYXAiLCJwYXJ0IiwidGVzdCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwiYnVpbGRWZXJpZmljYXRpb25FbWFpbCIsInZlcmlmaWVkRW1haWxDb2RlIiwidXNlciIsImFwcFRpdGxlIiwiY29kZSIsInBhcnNlRW1haWxUZW1wbGF0ZSIsInRlbXBsYXRlIiwicmVwbGFjZUFsbCIsImh0bWwiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwic3ViamVjdCIsInZlcmlmaWNhdGlvbkVtYWlsU3ViamVjdCIsInRleHQiLCJ2ZXJpZmljYXRpb25FbWFpbFRleHQiLCJVc2VyQWNjZXNzIiwiY3JlYXRlVXNlclRva2VuIiwidXNlcklkIiwicGVyc29uYUlkIiwidXNlcm5hbWUiLCJ1c2VyQWNjZXNzIiwiZXhwaXJlc0luTWludXRlcyIsIm5vdyIsImxvY2FsIiwic2Vzc2lvbkV4cGlyZXMiLCJwbHVzIiwibWludXRlcyIsImlhdCIsIk1hdGgiLCJmbG9vciIsInRvU2Vjb25kcyIsImV4cCIsInRva2VuIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJleHBpcmVzIiwidG9NaWxsaXMiLCJpc3N1ZWQiLCJwYXJzZVVzZXJMaXN0IiwidXNlcnMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJwYXJzZWRVc2VyIiwicHVzaCIsImJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnMiLCJlbWFpbCIsInBob25lIiwiYWN0aXZlIiwiYXR0cmlidXRlRmlsdGVycyIsIl9rZXkiLCJsb2dpYyIsImNvbmRpdGlvbnMiLCJsZW5ndGgiLCJmaWVsZCIsIm9wZXJhdG9yIiwidmFsdWUiLCJnZXRVc2VyQnlBdHRyaWJ1dGVzIiwib3B0aW9ucyIsImZpbHRlcnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldFVzZXJPcHRpb25hbEZpZWxkcyIsImZpZWxkcyIsInNlbGVjdHMiLCJpbmNsdWRlcyIsIm9iamVjdHMiLCJxdWVyaWVzIiwicGFyc2VVc2VyT3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiYWRkVXNlciIsImFjdGlvbiIsImxhbmd1YWdlQ29udGV4dCIsImNvbmZpcm0iLCJfY29uZmlybSIsIm5ld1VzZXIiLCJfaWQiLCJpbnNlcnRVc2VyIiwiaGFzUGFzc3dvcmQiLCJoYXNVc2VybmFtZSIsImNhdGVnb3J5IiwicGFyYW1zIiwiSU5WQUxJRF9BUkdVTUVOVFMiLCJoYXNoSWQiLCJzYWx0IiwiZW5jcnlwdGVkUGFzc3dvcmQiLCJleGlzdGluZ1VzZXIiLCJpc0NvbnRhY3RPbmx5VXNlciIsInR5cGUiLCJCb29sZWFuIiwic2hvcGlmeUN1c3RvbWVySWQiLCJFWElTVElOR19JVEVNIiwiZXJyb3IiLCJEQVRBQkFTRV9FUlJPUiIsInBob25lQ291bnRyeUNvZGUiLCJyZXBsYWNlIiwic3Vic3RyaW5nIiwibG9jYWxlIiwidXNlclByZWZlcmVuY2UiLCJyYW5kb20iLCJ2ZXJpZmllZFNtc0NvZGUiLCJtYXJrZXRpbmdPcHRJbiIsIm1haWxpbmdMaXN0IiwidGltZXN0YW1wIiwiRGF0ZSIsIm1hcmtldGluZ0ZpZWxkcyIsIm1hcmtldGluZ0NvbnNlbnRTb3VyY2UiLCJtYXJrZXRpbmdPcHRJbkF0IiwibWFya2V0aW5nT3B0T3V0QXQiLCJ1bmRlZmluZWQiLCJpbnNlcnQiLCJ2ZXJpZmllZEVtYWlsIiwidmVyaWZpZWRQaG9uZSIsInNhdmVVc2VyIiwiZXhpc3RpbmdVc2VySWQiLCJfZ2VuZXJhdGVkS2V5IiwidXBncmFkZUZpZWxkcyIsInRoZW4iLCJzYXZlZFVzZXIiLCJzYXZlZFVzZXJJZCIsInBlcnNvbmEiLCJ1cGRhdGVkVXNlciIsInJlc3VsdFVzZXIiLCJwZXJzb25hRXJyb3IiLCJjYXRjaCIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVGaWVsZHMiLCJpZCIsImRhdGFiYXNlTmFtZSIsInF1ZXJ5IiwiY3Vyc29yIiwibmV4dCIsInVwZGF0ZWRVc2VyUmVzdWx0IiwiZm9yZ290UGFzc3dvcmQiLCJjb2RlRXhwaXJlcyIsIm1hbmFnZWQiLCJ2ZXJpZmllZEVtYWlsRXhwaXJlcyIsInZlcmlmaWVkUGhvbmVFeHBpcmVzIiwidXNlckRvY0lkIiwicmVzZXRQYXNzd29yZCIsImZvcm1hdFBhc3N3b3JkIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwidXBkYXRlUXVlcnkiLCJyYXdVc2VyIiwiZm91bmRVc2VyIiwiY29uZmlybUNvZGUiLCJpc1NtcyIsImZvcm1hdHRlZFZhbHVlIiwiZmlsdGVyQnlUeXBlIiwiYXFsUXVlcnkiLCJkZWxldGVVc2VyIiwib3JnYW5pemF0aW9uVXNlciIsInN0cmlwZUNsaWVudCIsImRlbGV0ZWRVc2VyIiwiY3VzdG9tZXJzIiwiZGVsIiwic3RyaXBlQ3VzdG9tZXJJZCIsImFjY291bnRzIiwic3RyaXBlQWNjb3VudElkIiwiZGVhY3RpdmF0ZVVzZXIiLCJ1cGRhdGVkIiwiZ2V0VXNlckRpc3BsYXlOYW1lIiwiZnVsbG5hbWUiLCJ0cmltIiwiZ2V0U2Vzc2lvblVzZXIiLCJzZXNzaW9uIiwic2Vzc2lvbklkIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJmb3JtYXRTZXNzaW9uSWQiLCJnZXRVc2VyQnlJZCIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiZ2V0VXNlckxpc3QiLCJjYXNlU2Vuc2l0aXZlIiwic29ydCIsImRpcmVjdGlvbiIsInN0YXJ0IiwibnVtIiwiZ2V0VXNlckxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9ucyIsImZvcm1hdFJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZSIsInRvTG93ZXJDYXNlIiwiZm9ybWF0VXNlcm5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhbGwiLCJnZXRVc2VyTGlzdEJ5VGFncyIsInRhZ3MiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJnZXRVc2VyTGlzdEJ5TGF0ZXN0IiwiZmlsdGVyIiwiZ2V0VXNlckxpc3RCeUNvbm5lY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJyZWZyZXNoU2Vzc2lvbiIsInNpZ25JbiIsImZvcm1hdEVtYWlsIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRFeHBpcmVzIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImZpbHRlckNsYXVzZSIsImNoZWNrUXVlcnkiLCJjaGVja1VzZXJzIiwiY2hlY2tVc2VyIiwiZmluZCIsInVzZXJJdGVtIiwidmFsaWRQYXNzd29yZCIsImNoZWNrVXNlcm5hbWUiLCJzaWduT3V0IiwibGFzdE9ubGluZSIsInNlc3Npb25RdWVyeSIsImdldEFjdGl2ZVVzZXJDb3VudCIsImdldFVzZXJCeVRva2VuIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQ0VDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsYUFBYSxRQUNSLCtCQUErQjtBQUN0QyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUNyQyxTQUFRVCxjQUFjVSxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFPLFNBQVM7QUFDdkUsU0FBUUMsUUFBUSxRQUFPLFFBQVE7QUFFL0IsU0FBUUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8sNkJBQTZCO0FBQ3BFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQywyQkFBMkIsRUFBRUMsNkJBQTZCLFFBQU8sdUNBQXVDO0FBQ2hILFNBQVFDLDRCQUE0QixRQUFPLHVDQUF1QztBQUNsRixPQUFPQyx5QkFBeUIsb0NBQW9DO0FBQ3BFLFNBQVFDLFVBQVUsUUFBMEIsMEJBQTBCO0FBQ3RFLFNBQVFDLFFBQVEsRUFBRUMsWUFBWSxRQUFP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
1115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy91c2Vycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLFxuICBjcmVhdGVQYXNzd29yZCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUVtYWlsLFxuICBwYXJzZVBhc3N3b3JkLFxuICBwYXJzZVBob25lLFxuICBwYXJzZVVzZXJuYW1lXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7Y3JlYXRlSGFzaCBhcyBjcmVhdGVDcnlwdG9IYXNoLCB0aW1pbmdTYWZlRXF1YWx9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7cGFyc2VVc2VyLCBwYXJzZVVzZXJTYWZlfSBmcm9tICcuLi9hZGFwdGVycy91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtvcmdhbml6YXRpb25BY2NvdW50TXV0YXRpb24sIG9yZ2FuaXphdGlvbkFjY291bnRXcml0ZUd1YXJkfSBmcm9tICcuLi9vcmdhbml6YXRpb25zL2FjY291bnRMaWZlY3ljbGUuanMnO1xuaW1wb3J0IHtvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5fSBmcm9tICcuLi9vcmdhbml6YXRpb25zL3Bhc3N3b3JkUmVjb3ZlcnkuanMnO1xuaW1wb3J0IHZlcmlmeUVtYWlsVGVtcGxhdGUgZnJvbSAnLi4vdGVtcGxhdGVzL2VtYWlsL3ZlcmlmeUVtYWlsLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlcywgdHlwZSBTZXNzaW9uRXJyb3J9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZSwgYnVpbGRQcmVzZW50RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7ZGV0ZWN0TGFuZ3VhZ2V9IGZyb20gJy4uL3V0aWxzL2xhbmd1YWdlRGV0ZWN0aW9uLmpzJztcbmltcG9ydCB7Z2V0U2Vzc2lvbiwgc2V0U2Vzc2lvbn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7Z2V0U3RyaXBlQ2xpZW50fSBmcm9tICcuLi91dGlscy9zdHJpcGVVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGNvdW50SXRlbXMsIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtzZW5kRW1haWx9IGZyb20gJy4vZW1haWwuanMnO1xuaW1wb3J0IHthZGRQZXJzb25hfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7c2VuZFNtc30gZnJvbSAnLi9zbXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VySW5wdXQsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7U2Vzc2lvblRva2VufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3VzZXJzJztcbmNvbnN0IEFETUlOX1VTRVJOQU1FID0gJ2FkbWluJztcbmNvbnN0IFZFUklGSUNBVElPTl9FTUFJTF9DT09MRE9XTl9NUyA9IDEwMDAgKiA2MCAqIDE1O1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNSZWFjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTik7XG5jb25zdCBpc1RhZ2dlZENvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLklTX1RBR0dFRCk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuXG5jb25zdCBpc0FkbWluUGFzc3dvcmQgPSAocGFzc3dvcmQ6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYWRtaW5QYXNzd29yZCA9IHByb2Nlc3MuZW52LkFETUlOX1BBU1NXT1JEO1xuICBpZih0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnIHx8ICFwYXNzd29yZCB8fCAhYWRtaW5QYXNzd29yZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFjdHVhbCA9IGNyZWF0ZUNyeXB0b0hhc2goJ3NoYTI1NicpLnVwZGF0ZShwYXNzd29yZCkuZGlnZXN0KCk7XG4gIGNvbnN0IGV4cGVjdGVkID0gY3JlYXRlQ3J5cHRvSGFzaCgnc2hhMjU2JykudXBkYXRlKGFkbWluUGFzc3dvcmQpLmRpZ2VzdCgpO1xuICByZXR1cm4gdGltaW5nU2FmZUVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpO1xufTtcblxuY29uc3QgZ2V0QXBwTmFtZSA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogc3RyaW5nID0+XG4gIGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5uYW1lIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMubmFtZScpIHx8ICdSZWFrdG9yJztcblxuY29uc3QgZ2V0QXBwVGl0bGUgPSAoYXBwTmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFwcE5hbWVcbiAgICAuc3BsaXQoLyhbXFxzLV9dKykvKVxuICAgIC5tYXAoKHBhcnQpID0+ICgvXltBLVphLXpdLy50ZXN0KHBhcnQpID8gYCR7cGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3BhcnQuc2xpY2UoMSl9YCA6IHBhcnQpKVxuICAgIC5qb2luKCcnKTtcblxuY29uc3QgYnVpbGRWZXJpZmljYXRpb25FbWFpbCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmVyaWZpZWRFbWFpbENvZGU6IG51bWJlcixcbiAgdXNlcjogVXNlclR5cGUgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IGFwcE5hbWUgPSBnZXRBcHBOYW1lKGNvbnRleHQpO1xuICBjb25zdCBhcHBUaXRsZSA9IGdldEFwcFRpdGxlKGFwcE5hbWUpO1xuICBjb25zdCBjb2RlID0gYCR7dmVyaWZpZWRFbWFpbENvZGV9YDtcbiAgY29uc3QgcGFyc2VFbWFpbFRlbXBsYXRlID0gKHRlbXBsYXRlOiBzdHJpbmcpID0+IHRlbXBsYXRlXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBOYW1lXScsIGFwcE5hbWUpXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBUaXRsZV0nLCBhcHBUaXRsZSlcbiAgICAucmVwbGFjZUFsbCgnW2VtYWlsQ29kZV0nLCBjb2RlKTtcbiAgY29uc3QgaHRtbCA9IHBhcnNlRW1haWxUZW1wbGF0ZSh1c2VyLnZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGUgfHwgdmVyaWZ5RW1haWxUZW1wbGF0ZSk7XG4gIGNvbnN0IHN1YmplY3QgPSBwYXJzZUVtYWlsVGVtcGxhdGUodXNlci52ZXJpZmljYXRpb25FbWFpbFN1YmplY3QgfHwgYFlvdXIgJHthcHBUaXRsZX0gdmVyaWZpY2F0aW9uIGNvZGUgaXMgJHtjb2RlfWApO1xuICBjb25zdCB0ZXh0ID0gcGFyc2VFbWFpbFRlbXBsYXRlKHVzZXIudmVyaWZpY2F0aW9uRW1haWxUZXh0IHx8IGBZb3VyICR7YXBwVGl0bGV9IHZlcmlmaWNhdGlvbiBjb2RlIGlzICR7Y29kZX0uXFxuXFxuRW50ZXIgdGhpcyBjb2RlIGluICR7YXBwVGl0bGV9IHRvIGZpbmlzaCBzZXR0aW5nIHVwIHlvdXIgYWNjb3VudC4gSWYgeW91IGRpZCBub3QgcmVxdWVzdCB0aGlzIGVtYWlsLCB5b3UgY2FuIHNhZmVseSBpZ25vcmUgaXQuYCk7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgdGV4dFxuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgVXNlck9wdGlvbnMgPSBSZWFkb25seTx7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn0+O1xuXG5leHBvcnQgZW51bSBVc2VyQWNjZXNzIHtcbiAgQURNSU4gPSAtMSxcbiAgQkFTSUMgPSAwLFxuICBQUkVNSVVNID0gMSxcbiAgUFJPID0gMlxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlVXNlclRva2VuID0gKFxuICB1c2VySWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgdXNlcm5hbWU6IHN0cmluZyA9ICcnLFxuICB1c2VyQWNjZXNzOiBudW1iZXIgPSAwLFxuICBleHBpcmVzSW5NaW51dGVzOiBudW1iZXIgPSAxNSxcbiAgbmFtZToge3JlYWRvbmx5IGZpcnN0TmFtZT86IHN0cmluZzsgcmVhZG9ubHkgbGFzdE5hbWU/OiBzdHJpbmd9ID0ge31cbik6IFNlc3Npb25Ub2tlbiA9PiB7XG4gIGNvbnN0IG5vdzogRGF0ZVRpbWUgPSBEYXRlVGltZS5sb2NhbCgpO1xuICBjb25zdCBzZXNzaW9uRXhwaXJlczogRGF0ZVRpbWUgPSBub3cucGx1cyh7bWludXRlczogZXhwaXJlc0luTWludXRlc30pO1xuICBjb25zdCBpYXQgPSBNYXRoLmZsb29yKG5vdy50b1NlY29uZHMoKSk7XG4gIGNvbnN0IGV4cCA9IE1hdGguZmxvb3Ioc2Vzc2lvbkV4cGlyZXMudG9TZWNvbmRzKCkpO1xuICBjb25zdCB0b2tlbiA9IHNldFNlc3Npb24oe1xuICAgIGV4cCxcbiAgICAuLi4obmFtZS5maXJzdE5hbWUgPyB7Zmlyc3ROYW1lOiBuYW1lLmZpcnN0TmFtZX0gOiB7fSksXG4gICAgaWF0LFxuICAgIC4uLihuYW1lLmxhc3ROYW1lID8ge2xhc3ROYW1lOiBuYW1lLmxhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGVyc29uYUlkID8ge3BlcnNvbmFJZH0gOiB7fSksXG4gICAgdXNlckFjY2VzcyxcbiAgICB1c2VySWQsXG4gICAgdXNlcm5hbWVcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleHBpcmVzOiBzZXNzaW9uRXhwaXJlcy50b01pbGxpcygpLFxuICAgIC4uLihuYW1lLmZpcnN0TmFtZSA/IHtmaXJzdE5hbWU6IG5hbWUuZmlyc3ROYW1lfSA6IHt9KSxcbiAgICBpc3N1ZWQ6IG5vdy50b01pbGxpcygpLFxuICAgIC4uLihuYW1lLmxhc3ROYW1lID8ge2xhc3ROYW1lOiBuYW1lLmxhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGVyc29uYUlkID8ge3BlcnNvbmFJZH0gOiB7fSksXG4gICAgdG9rZW4sXG4gICAgdXNlcklkLFxuICAgIHVzZXJuYW1lXG4gIH07XG59O1xuXG5pbnRlcmZhY2UgU2VsZWN0QWNjdW11bGF0b3Ige1xuICBvYmplY3RzOiBzdHJpbmdbXTtcbiAgcXVlcmllczogc3RyaW5nW107XG59XG5cbmNvbnN0IHBhcnNlVXNlckxpc3QgPSAodXNlcnM6IEFycmF5PFVzZXJUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBbXSk6IFVzZXJUeXBlW10gPT5cbiAgdXNlcnMucmVkdWNlPFVzZXJUeXBlW10+KChyZXN1bHQsIHVzZXIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRVc2VyID0gcGFyc2VVc2VyU2FmZSh1c2VyKTtcblxuICAgIGlmKHBhcnNlZFVzZXIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHBhcnNlZFVzZXIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtdKTtcblxuY29uc3QgYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyA9IChcbiAge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWUsIHVzZXJJZH06IFVzZXJUeXBlLFxuICB7YWN0aXZlID0gZmFsc2V9OiB7cmVhZG9ubHkgYWN0aXZlPzogYm9vbGVhbn0gPSB7fVxuKTogRmlsdGVyR3JvdXAgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVGaWx0ZXJzID0gYnVpbGRQcmVzZW50RmlsdGVyR3JvdXAoe1xuICAgIGVtYWlsLFxuICAgIHBob25lLFxuICAgIHVzZXJuYW1lLFxuICAgIC4uLih1c2VySWQgPyB7X2tleTogdXNlcklkfSA6IHt9KVxuICB9LCB7bG9naWM6ICdPUid9KTtcblxuICBpZighYWN0aXZlIHx8IGF0dHJpYnV0ZUZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYXR0cmlidXRlRmlsdGVycztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29uZGl0aW9uczogW1xuICAgICAgYXR0cmlidXRlRmlsdGVycyxcbiAgICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gICAgXSxcbiAgICBsb2dpYzogJ0FORCdcbiAgfTtcbn07XG5cbmNvbnN0IGdldFVzZXJCeUF0dHJpYnV0ZXMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUsIG9wdGlvbnM/OiB7cmVhZG9ubHkgYWN0aXZlPzogYm9vbGVhbn0pID0+IHtcbiAgY29uc3QgZmlsdGVycyA9IGJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnModXNlciwgb3B0aW9ucyk7XG5cbiAgaWYoZmlsdGVycy5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0SXRlbUJ5PFVzZXJUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlck9wdGlvbmFsRmllbGRzID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSk6IFNlbGVjdEFjY3VtdWxhdG9yID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHM6IFNlbGVjdEFjY3VtdWxhdG9yLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIHJldHVybiBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlKCd1c2VycycsICd1JywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVVzZXJPcHRpb25zID0gKG9wdGlvbnM6IFVzZXJPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBsaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlcklucHV0KTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXInO1xuICBjb25zdCB7bGFuZ3VhZ2VDb250ZXh0fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtjb25maXJtOiBfY29uZmlybSwgLi4ubmV3VXNlcn0gPSB1c2VyO1xuICBjb25zdCB7ZW1haWwsIHBhc3N3b3JkLCBwaG9uZSwgdXNlcm5hbWUsIHVzZXJJZCwgX2tleSwgX2lkLCAuLi5pbnNlcnRVc2VyfSA9IHBhcnNlVXNlcihuZXdVc2VyKTtcbiAgY29uc3QgaGFzUGFzc3dvcmQgPSAhIXBhc3N3b3JkO1xuICBjb25zdCBoYXNVc2VybmFtZSA9ICEhdXNlcm5hbWUgfHwgISFwaG9uZSB8fCAhIWVtYWlsO1xuXG4gIGlmKCFoYXNQYXNzd29yZCB8fCAhaGFzVXNlcm5hbWUpIHtcbiAgICBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNoSWQgPSB1c2VybmFtZSB8fCBwaG9uZSB8fCBlbWFpbDtcbiAgY29uc3Qgc2FsdCA9IGNyZWF0ZUhhc2goYCR7aGFzaElkfSR7cGFzc3dvcmR9YCwgJycpO1xuICBjb25zdCBlbmNyeXB0ZWRQYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKHBhc3N3b3JkLCBzYWx0KTtcbiAgbGV0IGV4aXN0aW5nVXNlcjogVXNlclR5cGUgfCBudWxsID0gbnVsbDtcblxuICB0cnkge1xuICAgIGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcbiAgICBjb25zdCBpc0NvbnRhY3RPbmx5VXNlciA9IGV4aXN0aW5nVXNlcj8udHlwZSA9PT0gJ2NybUNvbnRhY3QnIHx8IEJvb2xlYW4oZXhpc3RpbmdVc2VyPy5zaG9waWZ5Q3VzdG9tZXJJZCk7XG5cbiAgICBpZihleGlzdGluZ1VzZXIgJiYgIWlzQ29udGFjdE9ubHlVc2VyKSB7XG4gICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5FWElTVElOR19JVEVNXG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBwaG9uZUNvdW50cnlDb2RlID0gcGhvbmU/LnJlcGxhY2UoL1xcRC9nLCAnJykuc3Vic3RyaW5nKDAsIDMpO1xuICBjb25zdCBsb2NhbGUgPSBkZXRlY3RMYW5ndWFnZSh7XG4gICAgLi4ubGFuZ3VhZ2VDb250ZXh0LFxuICAgIHBob25lQ291bnRyeUNvZGU6IHBob25lQ291bnRyeUNvZGUgfHwgJycsXG4gICAgdXNlclByZWZlcmVuY2U6IGluc2VydFVzZXIubG9jYWxlIHx8ICdlbidcbiAgfSk7XG4gIGNvbnN0IHZlcmlmaWVkRW1haWxDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICBjb25zdCB2ZXJpZmllZFNtc0NvZGUgPSBNYXRoLmZsb29yKDEwMDAwMCArIChNYXRoLnJhbmRvbSgpICogOTAwMDAwKSk7XG4gIGNvbnN0IG1hcmtldGluZ09wdEluID0gaW5zZXJ0VXNlci5tYXJrZXRpbmdPcHRJbiA/PyBpbnNlcnRVc2VyLm1haWxpbmdMaXN0O1xuICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICBjb25zdCBtYXJrZXRpbmdGaWVsZHMgPSBtYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZVxuICAgID8ge1xuICAgICAgbWFpbGluZ0xpc3Q6IHRydWUsXG4gICAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBpbnNlcnRVc2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2UgfHwgZXhpc3RpbmdVc2VyPy5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8ICdhY2NvdW50LXNpZ251cCcsXG4gICAgICBtYXJrZXRpbmdPcHRJbjogdHJ1ZSxcbiAgICAgIG1hcmtldGluZ09wdEluQXQ6IGluc2VydFVzZXIubWFya2V0aW5nT3B0SW5BdCB8fCBleGlzdGluZ1VzZXI/Lm1hcmtldGluZ09wdEluQXQgfHwgdGltZXN0YW1wLFxuICAgICAgbWFya2V0aW5nT3B0T3V0QXQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgICA6IChtYXJrZXRpbmdPcHRJbiA9PT0gZmFsc2UgPyB7XG4gICAgICBtYWlsaW5nTGlzdDogZmFsc2UsXG4gICAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBpbnNlcnRVc2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2UgfHwgJ2FjY291bnQtc2lnbnVwJyxcbiAgICAgIG1hcmtldGluZ09wdEluOiBmYWxzZSxcbiAgICAgIG1hcmtldGluZ09wdE91dEF0OiBpbnNlcnRVc2VyLm1hcmtldGluZ09wdE91dEF0IHx8IHRpbWVzdGFtcFxuICAgIH0gOiB7fSk7XG5cbiAgY29uc3QgaW5zZXJ0OiBVc2VyVHlwZSA9IHtcbiAgICAuLi5pbnNlcnRVc2VyLFxuICAgIF9rZXk6IGNyZWF0ZUhhc2goaGFzaElkKSxcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgZW1haWwsXG4gICAgbG9jYWxlLFxuICAgIHBhc3N3b3JkOiBlbmNyeXB0ZWRQYXNzd29yZCxcbiAgICBwaG9uZSxcbiAgICBzYWx0LFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICB1c2VyQWNjZXNzOiBVc2VyQWNjZXNzLkJBU0lDLFxuICAgIHVzZXJuYW1lLFxuICAgIHZlcmlmaWVkRW1haWw6IGZhbHNlLFxuICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgIHZlcmlmaWVkUGhvbmU6IGZhbHNlLFxuICAgIHZlcmlmaWVkU21zQ29kZSxcbiAgICAuLi5tYXJrZXRpbmdGaWVsZHNcbiAgfTtcblxuICBjb25zdCBzYXZlVXNlciA9ICgpOiBQcm9taXNlPFVzZXJUeXBlIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlcklkID0gZXhpc3RpbmdVc2VyPy51c2VySWQgfHwgZXhpc3RpbmdVc2VyPy5fa2V5O1xuXG4gICAgaWYoIWV4aXN0aW5nVXNlcklkKSB7XG4gICAgICByZXR1cm4gYWRkSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgaW5zZXJ0KTtcbiAgICB9XG5cbiAgICBjb25zdCB7X2tleTogX2dlbmVyYXRlZEtleSwgLi4udXBncmFkZUZpZWxkc30gPSBpbnNlcnQ7XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGV4aXN0aW5nVXNlcklkLCB1cGdyYWRlRmllbGRzKTtcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgc2F2ZVVzZXIoKVxuICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkVXNlciA9IHBhcnNlVXNlclNhZmUocmVzdWx0KTtcbiAgICAgIGNvbnN0IHNhdmVkVXNlcklkID0gc2F2ZWRVc2VyPy51c2VySWQgfHwgc2F2ZWRVc2VyPy5fa2V5O1xuXG4gICAgICBpZighc2F2ZWRVc2VyIHx8ICFzYXZlZFVzZXJJZCkge1xuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuXG4gICAgICBpZihzYXZlZFVzZXIucGVyc29uYUlkKSB7XG4gICAgICAgIHJldHVybiBzYXZlZFVzZXI7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBlcnNvbmEgPSBhd2FpdCBhZGRQZXJzb25hKGNvbnRleHQsIHt1c2VySWQ6IHNhdmVkVXNlcklkfSk7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBlcnNvbmE/LnBlcnNvbmFJZCB8fCBwZXJzb25hPy5fa2V5O1xuXG4gICAgICAgIGlmKCFwZXJzb25hSWQpIHtcbiAgICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZFVzZXIgPSBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBzYXZlZFVzZXJJZCwge3BlcnNvbmFJZH0pO1xuICAgICAgICBjb25zdCByZXN1bHRVc2VyID0gcGFyc2VVc2VyU2FmZSh1cGRhdGVkVXNlcikgfHwge1xuICAgICAgICAgIC4uLnNhdmVkVXNlcixcbiAgICAgICAgICBwZXJzb25hSWRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0VXNlcjtcbiAgICAgIH0gY2F0Y2gocGVyc29uYUVycm9yKSB7XG4gICAgICAgIGF3YWl0IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgcGFyYW1zOiB7dXNlcklkOiBzYXZlZFVzZXJJZH0sXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgcGVyc29uYUVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VybmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVXNlciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVVzZXInO1xuICBjb25zdCB1cGRhdGVkVXNlciA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3Qge3Bhc3N3b3JkLCBfa2V5LCBfaWQsIC4uLnVwZGF0ZUZpZWxkc30gPSB1cGRhdGVkVXNlcjtcbiAgY29uc3Qge2lkfSA9IHVwZGF0ZWRVc2VyO1xuICBjb25zdCB1cGRhdGUgPSB7Li4udXBkYXRlRmllbGRzfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICB0cnkge1xuICAgIGlmKHBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgICAgICBSRVRVUk4gRE9DVU1FTlQoJHtpZH0pXG4gICAgICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgICAgIGNvbnN0IGhhc2hJZCA9IGV4aXN0aW5nVXNlcj8udXNlcm5hbWUgfHwgZXhpc3RpbmdVc2VyPy5waG9uZSB8fCBleGlzdGluZ1VzZXI/LmVtYWlsIHx8IGlkIHx8IF9rZXkgfHwgX2lkIHx8ICcnO1xuICAgICAgY29uc3Qgc2FsdCA9IGV4aXN0aW5nVXNlcj8uc2FsdCB8fCBjcmVhdGVIYXNoKGAke2hhc2hJZH0ke3Bhc3N3b3JkfWAsICcnKTtcblxuICAgICAgdXBkYXRlLnBhc3N3b3JkID0gY3JlYXRlUGFzc3dvcmQocGFzc3dvcmQsIHNhbHQpO1xuXG4gICAgICBpZighZXhpc3RpbmdVc2VyPy5zYWx0KSB7XG4gICAgICAgIHVwZGF0ZS5zYWx0ID0gc2FsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkVXNlclJlc3VsdCA9IGF3YWl0IG9yZ2FuaXphdGlvbkFjY291bnRNdXRhdGlvbihjb250ZXh0LCBpZCwgJ3VwZGF0ZScsIHVwZGF0ZSlcbiAgICAgIHx8IGF3YWl0IHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGlkLCB1cGRhdGUgYXMgVXNlclR5cGUpO1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHVwZGF0ZWRVc2VyUmVzdWx0KSBhcyBVc2VyVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcn0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcmdvdFBhc3N3b3JkID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdmb3Jnb3RQYXNzd29yZCc7XG4gIGNvbnN0IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge2VtYWlsLCBwaG9uZSwgdmVyaWZpZWRFbWFpbCwgdmVyaWZpZWRQaG9uZX0gPSBleGlzdGluZ1VzZXIgYXMgVXNlclR5cGU7XG4gICAgICBjb25zdCBjb2RlRXhwaXJlcyA9IERhdGUubm93KCkgKyAoMTAwMCAqIDYwICogMTUpO1xuICAgICAgY29uc3QgY29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgICAgIGxldCB1cGRhdGU7XG5cbiAgICAgIGlmKGVtYWlsICYmIHZlcmlmaWVkRW1haWwpIHtcbiAgICAgICAgY29uc3QgbWFuYWdlZCA9IGF3YWl0IG9yZ2FuaXphdGlvblBhc3N3b3JkUmVjb3ZlcnkoXG4gICAgICAgICAgY29udGV4dCwgZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlciksICdpc3N1ZScsIHtjb2RlLCBlbWFpbCwgZXhwaXJlczogY29kZUV4cGlyZXN9XG4gICAgICAgICk7XG4gICAgICAgIGlmKG1hbmFnZWQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbWFuYWdlZCAmJiBhd2FpdCBzZW5kRW1haWwoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGh0bWw6IGA8cD5Zb3VyIHBhc3N3b3JkIHJlc2V0IGNvZGUgaXMgPHN0cm9uZz4ke2NvZGV9PC9zdHJvbmc+LjwvcD5gLFxuICAgICAgICAgICAgc3ViamVjdDogYCR7Z2V0QXBwVGl0bGUoZ2V0QXBwTmFtZShjb250ZXh0KSl9IHBhc3N3b3JkIHJlc2V0IGNvZGVgLFxuICAgICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICAgIHVzZXI6IGV4aXN0aW5nVXNlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNlbmRFbWFpbCh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBodG1sOiBgPHA+WW91ciBwYXNzd29yZCByZXNldCBjb2RlIGlzIDxzdHJvbmc+JHtjb2RlfTwvc3Ryb25nPi48L3A+YCxcbiAgICAgICAgICBzdWJqZWN0OiBgJHtnZXRBcHBUaXRsZShnZXRBcHBOYW1lKGNvbnRleHQpKX0gcGFzc3dvcmQgcmVzZXQgY29kZWAsXG4gICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICB1c2VyOiBleGlzdGluZ1VzZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZEVtYWlsQ29kZTogY29kZSwgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IGNvZGVFeHBpcmVzfTtcbiAgICAgIH1cblxuICAgICAgaWYocGhvbmUgJiYgdmVyaWZpZWRQaG9uZSkge1xuICAgICAgICBjb25zdCBtYW5hZ2VkID0gYXdhaXQgb3JnYW5pemF0aW9uUGFzc3dvcmRSZWNvdmVyeShcbiAgICAgICAgICBjb250ZXh0LCBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKSwgJ2lzc3VlJywge2NvZGUsIGV4cGlyZXM6IGNvZGVFeHBpcmVzLCBwaG9uZX1cbiAgICAgICAgKTtcbiAgICAgICAgaWYobWFuYWdlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmKG1hbmFnZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHNlbmRTbXMoe2NvbnRleHQsIHRleHQ6IGBZb3VyIGNvZGUgaXMgJHtjb2RlfWB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hbmFnZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZFNtcyh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB0ZXh0OiBgWW91ciBjb2RlIGlzICR7Y29kZX1gXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUgPSB7dmVyaWZpZWRQaG9uZUV4cGlyZXM6IGNvZGVFeHBpcmVzLCB2ZXJpZmllZFNtc0NvZGU6IGNvZGV9O1xuICAgICAgfVxuXG4gICAgICBpZih1cGRhdGU/LnZlcmlmaWVkRW1haWxDb2RlIHx8IHVwZGF0ZT8udmVyaWZpZWRTbXNDb2RlKSB7XG4gICAgICAgIGNvbnN0IHVzZXJEb2NJZCA9IGdldERvY0lkKENPTExFQ1RJT05TLlVTRVJTLCBleGlzdGluZ1VzZXIpO1xuXG4gICAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VXNlclR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlVTRVJTLCB1c2VyRG9jSWQsIHVwZGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNldFBhc3N3b3JkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7Y29kZSwgdXNlcn06IHtjb2RlOiBudW1iZXI7IHVzZXI6IFVzZXJUeXBlfVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNldFBhc3N3b3JkJztcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzYWx0LFxuICAgICAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICAgICAgdmVyaWZpZWRFbWFpbEV4cGlyZXMgPSAwLFxuICAgICAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgICAgIHZlcmlmaWVkUGhvbmVFeHBpcmVzID0gMFxuICAgICAgfSA9IGV4aXN0aW5nVXNlciBhcyBVc2VyVHlwZTtcbiAgICAgIGNvbnN0IG1hbmFnZWQgPSBhd2FpdCBvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5KFxuICAgICAgICBjb250ZXh0LCBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKSwgJ2NvbnN1bWUnLCB7Y29kZSwgZW1haWwsIHBhc3N3b3JkOiBmb3JtYXRQYXNzd29yZCwgcGhvbmV9XG4gICAgICApO1xuICAgICAgaWYobWFuYWdlZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWFuYWdlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiBjb2RlID09PSB2ZXJpZmllZEVtYWlsQ29kZSAmJiB2ZXJpZmllZEVtYWlsRXhwaXJlcyA+IG5vdykge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAgdXBkYXRlID0ge3Bhc3N3b3JkfTtcbiAgICAgIH0gZWxzZSBpZihwaG9uZSAmJiBjb2RlID09PSB2ZXJpZmllZFNtc0NvZGUgJiYgdmVyaWZpZWRQaG9uZUV4cGlyZXMgPiBub3cpIHtcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSBjcmVhdGVQYXNzd29yZChmb3JtYXRQYXNzd29yZCwgc2FsdCk7XG4gICAgICAgIHVwZGF0ZSA9IHtwYXNzd29yZH07XG4gICAgICB9XG5cbiAgICAgIGlmKHVwZGF0ZSkge1xuICAgICAgICBjb25zdCB1c2VyRG9jSWQgPSBnZXREb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgZXhpc3RpbmdVc2VyKTtcblxuICAgICAgICBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5VU0VSUywgdXNlckRvY0lkLCB1cGRhdGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kVmVyaWZpY2F0aW9uRW1haWwgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NlbmRWZXJpZmljYXRpb25FbWFpbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2VtYWlsfSA9IHBhcnNlVXNlcih1c2VyKTtcblxuICBpZighZW1haWwpIHtcbiAgICBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHZlcmlmaWVkRW1haWxDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICAgIGNvbnN0IHVwZGF0ZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgdS5lbWFpbCA9PSAke2VtYWlsfVxuICAgICAgICBGSUxURVIgdS5vcmdhbml6YXRpb25BY2NvdW50ICE9IHRydWVcbiAgICAgICAgRklMVEVSIHUudmVyaWZpZWRFbWFpbCAhPSB0cnVlXG4gICAgICAgIEZJTFRFUiAhSEFTKHUsIFwidmVyaWZpZWRFbWFpbEV4cGlyZXNcIikgfHwgdS52ZXJpZmllZEVtYWlsRXhwaXJlcyA8PSAke25vd31cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBVUERBVEUgdSBXSVRIICR7e1xuICAgICAgICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgICAgICAgIHZlcmlmaWVkRW1haWxFeHBpcmVzOiBub3cgKyBWRVJJRklDQVRJT05fRU1BSUxfQ09PTERPV05fTVNcbiAgICAgICAgfX0gSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBORVdcbiAgICBgO1xuXG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSk7XG4gICAgY29uc3QgcmF3VXNlciA9IGF3YWl0IGN1cnNvci5uZXh0KCk7XG4gICAgY29uc3QgZm91bmRVc2VyID0gcmF3VXNlciA/IHBhcnNlVXNlcihyYXdVc2VyKSA6IG51bGw7XG5cbiAgICBpZighZm91bmRVc2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHNlbmRFbWFpbCh7XG4gICAgICBjb250ZXh0LFxuICAgICAgLi4uYnVpbGRWZXJpZmljYXRpb25FbWFpbChjb250ZXh0LCB2ZXJpZmllZEVtYWlsQ29kZSwgdXNlciksXG4gICAgICB1c2VyOiB7XG4gICAgICAgIC4uLmZvdW5kVXNlcixcbiAgICAgICAgdmVyaWZpZWRFbWFpbENvZGVcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvZGUsXG4gICAgdHlwZSxcbiAgICB2YWx1ZVxuICB9OiB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIHR5cGU6ICdzbXMnIHwgJ2VtYWlsJztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbmZpcm1Db2RlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1NtcyA9IHR5cGUgPT09ICdzbXMnO1xuICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGlzU21zID8gcGFyc2VQaG9uZSh2YWx1ZSkgOiBwYXJzZUVtYWlsKHZhbHVlKTtcbiAgY29uc3QgZmlsdGVyQnlUeXBlID0gaXNTbXNcbiAgICA/IGFxbGBGSUxURVIgdS5waG9uZSA9PSAke2Zvcm1hdHRlZFZhbHVlfSAmJiB1LnZlcmlmaWVkU21zQ29kZSA9PSAke2NvZGV9YFxuICAgIDogYXFsYEZJTFRFUiB1LmVtYWlsID09ICR7Zm9ybWF0dGVkVmFsdWV9ICYmIHUudmVyaWZpZWRFbWFpbENvZGUgPT0gJHtjb2RlfWA7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICR7ZmlsdGVyQnlUeXBlfVxuICAgICAgRklMVEVSIHUub3JnYW5pemF0aW9uQWNjb3VudCAhPSB0cnVlXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgICAgaWYodXNlcikge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gaXNTbXNcbiAgICAgICAgICAgID8ge3ZlcmlmaWVkUGhvbmU6IHRydWUsIHZlcmlmaWVkU21zQ29kZTogMH1cbiAgICAgICAgICAgIDoge3ZlcmlmaWVkRW1haWw6IHRydWUsIHZlcmlmaWVkRW1haWxDb2RlOiAwfTtcbiAgICAgICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7dXNlci5fa2V5fSBXSVRIICR7dXBkYXRlZFVzZXJ9IElOIHVzZXJzYDtcblxuICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7Y29kZSwgdHlwZSwgdmFsdWU6IGZvcm1hdHRlZFZhbHVlfSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7Y29kZSwgdHlwZSwgdmFsdWU6IGZvcm1hdHRlZFZhbHVlfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlciA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpZH0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgY29uc3Qgb3JnYW5pemF0aW9uVXNlciA9IGF3YWl0IG9yZ2FuaXphdGlvbkFjY291bnRNdXRhdGlvbihjb250ZXh0LCBpZCwgJ2RlbGV0ZScsIHt9KTtcbiAgaWYob3JnYW5pemF0aW9uVXNlcikge1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKG9yZ2FuaXphdGlvblVzZXIpIGFzIFVzZXJUeXBlO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB1ID0gRE9DVU1FTlQoJHtpZH0pXG4gICAgRklMVEVSICR7b3JnYW5pemF0aW9uQWNjb3VudFdyaXRlR3VhcmQoY29udGV4dCwgJ3VzZXJzJywgJ3UnKX1cbiAgICBSRU1PVkUgdSBJTiB1c2Vyc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXIpID0+IHBhcnNlVXNlclNhZmUodXNlcikpXG4gICAgLnRoZW4oKGRlbGV0ZWRVc2VyKSA9PiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmRlbChkZWxldGVkVXNlcj8uc3RyaXBlQ3VzdG9tZXJJZClcbiAgICAgIC50aGVuKCgpID0+IHN0cmlwZUNsaWVudC5hY2NvdW50cy5kZWwoZGVsZXRlZFVzZXI/LnN0cmlwZUFjY291bnRJZCkpXG4gICAgICAudGhlbigoKSA9PiBkZWxldGVkVXNlciBhcyBVc2VyVHlwZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYWN0aXZhdGVVc2VyID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVhY3RpdmF0ZVVzZXInO1xuICBjb25zdCB7aWR9ID0gcGFyc2VVc2VyKHVzZXIpO1xuICBjb25zdCBvcmdhbml6YXRpb25Vc2VyID0gYXdhaXQgb3JnYW5pemF0aW9uQWNjb3VudE11dGF0aW9uKGNvbnRleHQsIGlkLCAnZGVhY3RpdmF0ZScsIHt9KTtcbiAgaWYob3JnYW5pemF0aW9uVXNlcikge1xuICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHsuLi5vcmdhbml6YXRpb25Vc2VyLCBhY3RpdmU6IGZhbHNlfSkgYXMgVXNlclR5cGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlZDogVXNlclR5cGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBpZCwgdXBkYXRlZClcbiAgICAudGhlbigodXBkYXRlZFVzZXIpID0+IHBhcnNlVXNlclNhZmUodXBkYXRlZFVzZXIpIGFzIFVzZXJUeXBlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2lkfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyRGlzcGxheU5hbWUgPSAodXNlcjogVXNlclR5cGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7Zmlyc3ROYW1lLCBsYXN0TmFtZSwgbmFtZSA9ICcnLCB1c2VybmFtZSA9ICcnfSA9IHVzZXI7XG4gIGNvbnN0IGZ1bGxuYW1lID0gKFtmaXJzdE5hbWUsIGxhc3ROYW1lXSkuam9pbignICcpLnRyaW0oKTtcblxuICBpZihuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0gZWxzZSBpZihmdWxsbmFtZSAhPT0gJycpIHtcbiAgICByZXR1cm4gZnVsbG5hbWU7XG4gIH0gZWxzZSBpZih1c2VybmFtZSkge1xuICAgIHJldHVybiB1c2VybmFtZTtcbiAgfVxuXG4gIHJldHVybiAnVW5rbm93bic7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvblVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFNlc3Npb25Vc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBwYXJzZUFyYW5nb0lkKGB1c2Vycy8ke3Nlc3Npb25JZH1gKTtcblxuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIHUgPSBET0NVTUVOVCgke2Zvcm1hdFNlc3Npb25JZH0pXG4gICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXIpID0+IHBhcnNlVXNlclNhZmUodXNlcikpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJCeUlkJztcbiAgY29uc3Qge2VtYWlsLCBpZCwgcGhvbmUsIHVzZXJJZCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyKHVzZXIpO1xuICBjb25zdCB7ZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuXG4gIGlmKGlkKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1CeTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywge1xuICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICB7ZmllbGQ6ICdfaWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGlkfSxcbiAgICAgICAge2ZpZWxkOiAnYWN0aXZlJywgb3BlcmF0b3I6ICchPScsIHZhbHVlOiBmYWxzZX1cbiAgICAgIF1cbiAgICB9IGFzIGFueSwge1xuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyU2FmZShyZXN1bHQpIGFzIFVzZXJUeXBlKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7aWQsIHVzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHtlbWFpbCwgcGhvbmUsIHVzZXJJZCwgdXNlcm5hbWV9LCB7YWN0aXZlOiB0cnVlfSk7XG5cbiAgaWYoZmlsdGVycy5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCBhcyB1bmtub3duIGFzIFVzZXJUeXBlKTtcbiAgfVxuXG4gIHJldHVybiBnZXRJdGVtQnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGZpbHRlcnMsIHtcbiAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiBwYXJzZVVzZXJTYWZlKHJlc3VsdCkgYXMgVXNlclR5cGUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aWQsIHVzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBVc2VyT3B0aW9ucyk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3QnO1xuICBjb25zdCB7ZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VXNlck9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGNvbmRpdGlvbnM6IGFueVtdID0gW1xuICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gIF07XG5cbiAgaWYodXNlcm5hbWUpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAndXNlcm5hbWUnLCBvcGVyYXRvcjogJ0NPTlRBSU5TJywgdmFsdWU6IHBhcnNlVXNlcm5hbWUodXNlcm5hbWUpLCBjYXNlU2Vuc2l0aXZlOiBmYWxzZX0pO1xuICB9XG5cbiAgcmV0dXJuIGdldExpc3RCeTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zXG4gIH0gYXMgYW55LCB7XG4gICAgc29ydDogW3tmaWVsZDogJ3VzZXJuYW1lJywgZGlyZWN0aW9uOiAnQVNDJ31dLFxuICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gIH0pXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyTGlzdChyZXN1bHQpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtyZWFjdGlvbnMgPSBbXSwgdXNlcm5hbWV9OiB7cmVhY3Rpb25zPzogc3RyaW5nW107IHVzZXJuYW1lPzogc3RyaW5nfSxcbiAgb3B0aW9ucz86IFVzZXJPcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICd1LmFjdGl2ZSAhPSBmYWxzZScsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd1Jyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKCh1c2VycykgPT4gcGFyc2VVc2VyTGlzdCh1c2VycykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFVzZXJUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckxpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt0YWdzLCB1c2VybmFtZX0sXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ3M6IHN0cmluZ1tdID0gdGFncz8ucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgdGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYodGFnTmFtZSkge1xuICAgICAgbGlzdC5wdXNoKHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRVc2VybmFtZSA9IHBhcnNlVXNlcm5hbWUodXNlcm5hbWUpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgYHUuX2tleSAhPSBcIiR7c2Vzc2lvbklkfVwiYCxcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnXG4gIF07XG5cbiAgaWYodXNlcm5hbWUpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBDT05UQUlOUyh1LnVzZXJuYW1lLCBcIiR7Zm9ybWF0VXNlcm5hbWV9XCIpYCk7XG4gIH1cblxuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7Zm9ybWF0VGFnc30sIExPV0VSKHQubmFtZSkpXG4gICAgICBGT1IgdSwgaXQgSU4gT1VUQk9VTkQgdCAke2lzVGFnZ2VkQ29sbGVjdGlvbn1cbiAgICAgICAgT1BUSU9OUyB7YmZzOiB0cnVlLCB1bmlxdWVWZXJ0aWNlczogXCJnbG9iYWxcIiwgdmVydGV4Q29sbGVjdGlvbnM6ICR7Q09MTEVDVElPTlMuVVNFUlN9fVxuICAgICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwge3VzZXJuYW1lfSwgb3B0aW9ucz86IFVzZXJPcHRpb25zKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmaWx0ZXIgPSBbXG4gICAgJ3UuX2lkICE9IHNlc3Npb24uX2lkJyxcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnXG4gIF07XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyLnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKX1cIilgKTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgTEVUIHNlc3Npb24gPSBET0NVTUVOVCgke2B1c2Vycy8ke3VzZXJJZH1gfSlcbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyLmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRSh1LmxhdGl0dWRlIHx8IDAsIHUubG9uZ2l0dWRlIHx8IDAsIHNlc3Npb24ubGF0aXR1ZGUgfHwgMCwgc2Vzc2lvbi5sb25naXR1ZGUgfHwgMClcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSBBU0MsIHUuYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd1Jyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKCh1c2VycykgPT4gcGFyc2VVc2VyTGlzdCh1c2VycykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFVzZXJUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckxpc3RCeUNvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHt1c2VySWR9OiBVc2VyVHlwZSxcbiAgb3B0aW9ucz86IFVzZXJPcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0QnlDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdXNlcm5hbWV9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VXNlck9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlQXJhbmdvSWQoYHVzZXJzLyR7dXNlcklkfWApO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke3BhcnNlVXNlcm5hbWUodXNlcm5hbWUpfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBjdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIExFVCBzZXNzaW9uID0gRE9DVU1FTlQoJHtmb3JtYXRVc2VySWR9KVxuICAgICAgRk9SIHUsIGNvbm5lY3Rpb24gSU4gT1VUQk9VTkQgY3UgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgT1BUSU9OUyB7YmZzOiB0cnVlLCB1bmlxdWVWZXJ0aWNlczogXCJnbG9iYWxcIiwgdmVydGV4Q29sbGVjdGlvbnM6ICR7Q09MTEVDVElPTlMuVVNFUlN9fVxuICAgICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hTZXNzaW9uID0gKHtleHBpcmVzLCB0b2tlbn0pOiBTZXNzaW9uVG9rZW4gfCBTZXNzaW9uRXJyb3IgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHtmaXJzdE5hbWUsIGxhc3ROYW1lLCBwZXJzb25hSWQsIHVzZXJJZCwgdXNlcm5hbWUsIHVzZXJBY2Nlc3N9ID0gZ2V0U2Vzc2lvbih0b2tlbik7XG4gICAgcmV0dXJuIGNyZWF0ZVVzZXJUb2tlbih1c2VySWQsIHBlcnNvbmFJZCB8fCAnJywgdXNlcm5hbWUsIHVzZXJBY2Nlc3MsIGV4cGlyZXMsIHtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdGhlIGVycm9yIGZyb20gZ2V0U2Vzc2lvblxuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHtleHBpcmVzLCB1c2VyfSk6IFByb21pc2U8U2Vzc2lvblRva2VuIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnc2lnbkluJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZW1haWwsIHBhc3N3b3JkLCBwaG9uZSwgdXNlcm5hbWV9ID0gdXNlciB8fCB7fTtcbiAgY29uc3QgZm9ybWF0RW1haWwgPSBwYXJzZUVtYWlsKGVtYWlsKTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcbiAgY29uc3QgZm9ybWF0UGhvbmUgPSBwYXJzZVBob25lKHBob25lKTtcbiAgY29uc3QgZm9ybWF0RXhwaXJlcyA9IHBhcnNlTnVtKGV4cGlyZXMpIHx8IDE1O1xuXG4gIGlmKGZvcm1hdFVzZXJuYW1lID09PSBBRE1JTl9VU0VSTkFNRSkge1xuICAgIGlmKCFpc0FkbWluUGFzc3dvcmQocGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VybmFtZTogZm9ybWF0VXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlVXNlclRva2VuKEFETUlOX1VTRVJOQU1FLCAnJywgQURNSU5fVVNFUk5BTUUsIFVzZXJBY2Nlc3MuQURNSU4sIGZvcm1hdEV4cGlyZXMsIHtmaXJzdE5hbWU6ICdTdXBlcicsIGxhc3ROYW1lOiAnQWRtaW4nfSk7XG4gIH1cblxuICBpZigoIWZvcm1hdFVzZXJuYW1lICYmICFmb3JtYXRFbWFpbCAmJiAhZm9ybWF0UGhvbmUpIHx8ICFmb3JtYXRQYXNzd29yZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBmb3JtYXRFbWFpbCwgZm9ybWF0UGhvbmUsIGZvcm1hdFVzZXJuYW1lLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHtcbiAgICBlbWFpbDogZm9ybWF0RW1haWwsXG4gICAgcGhvbmU6IGZvcm1hdFBob25lLFxuICAgIHVzZXJuYW1lOiBmb3JtYXRVc2VybmFtZVxuICB9KTtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycywgJ3UnKTtcblxuICBjb25zdCBjaGVja1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIFJFVFVSTiB1XG4gIGA7XG5cbiAgbGV0IGNoZWNrVXNlcnM6IFVzZXJUeXBlW107XG5cbiAgdHJ5IHtcbiAgICBjaGVja1VzZXJzID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShjaGVja1F1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBjaGVja1VzZXIgPSBjaGVja1VzZXJzLmZpbmQoKHVzZXJJdGVtID0ge30pID0+IHtcbiAgICBjb25zdCB7cGFzc3dvcmQ6IHZhbGlkUGFzc3dvcmQsIHNhbHR9ID0gdXNlckl0ZW0gYXMgVXNlclR5cGU7XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsaWRQYXNzd29yZCAmJiBzYWx0ICYmIHZhbGlkUGFzc3dvcmQgPT09IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KSk7XG4gIH0pO1xuXG4gIGlmKCFjaGVja1VzZXIpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT05cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGlmKGNoZWNrVXNlci5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgX2tleTogdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBwZXJzb25hSWQsXG4gICAgdXNlckFjY2VzcyxcbiAgICB1c2VybmFtZTogY2hlY2tVc2VybmFtZVxuICB9ID0gY2hlY2tVc2VyIGFzIFVzZXJUeXBlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdG9rZW4gPSBjcmVhdGVVc2VyVG9rZW4odXNlcklkIHx8ICcnLCBwZXJzb25hSWQgfHwgJycsIGNoZWNrVXNlcm5hbWUgfHwgJycsIHVzZXJBY2Nlc3MsIGZvcm1hdEV4cGlyZXMsIHtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJJZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaWduT3V0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NpZ25PdXQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJuYW1lfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBsYXN0T25saW5lOiBEYXRlLm5vdygpLFxuICAgIHNlc3Npb25JZDogbnVsbFxuICB9O1xuICBjb25zdCBzZXNzaW9uUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB1ID0gRE9DVU1FTlQoJHt1c2VyRG9jSWR9KVxuICAgIFVQREFURSB1IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBORVdgO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShzZXNzaW9uUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFjdGl2ZVVzZXJDb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEFjdGl2ZVVzZXJDb3VudCc7XG5cbiAgcmV0dXJuIGNvdW50SXRlbXMoY29udGV4dCwgJ3VzZXJzJywge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbe2ZpZWxkOiAnYWN0aXZlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiB0cnVlfV1cbiAgfSBhcyBhbnkpXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJCeVRva2VuID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyQnlUb2tlbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJJZH0gPSBnZXRTZXNzaW9uKHRva2VuKTtcbiAgY29uc3QgdXNlckRvY0lkID0gcGFyc2VBcmFuZ29JZChgdXNlcnMvJHt1c2VySWR9YCk7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKFwiJHt1c2VyRG9jSWR9XCIpIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICBpZih1c2VyPy5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHBhcmFtczoge3VzZXJJZH0sXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlVXNlclNhZmUodXNlcikgYXMgVXNlclR5cGU7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHt1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJjcmVhdGVQYXNzd29yZCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUVtYWlsIiwicGFyc2VQYXNzd29yZCIsInBhcnNlUGhvbmUiLCJwYXJzZVVzZXJuYW1lIiwiYXFsIiwibGl0ZXJhbCIsImNyZWF0ZUNyeXB0b0hhc2giLCJ0aW1pbmdTYWZlRXF1YWwiLCJEYXRlVGltZSIsInBhcnNlVXNlciIsInBhcnNlVXNlclNhZmUiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwib3JnYW5pemF0aW9uQWNjb3VudE11dGF0aW9uIiwib3JnYW5pemF0aW9uQWNjb3VudFdyaXRlR3VhcmQiLCJvcmdhbml6YXRpb25QYXNzd29yZFJlY292ZXJ5IiwidmVyaWZ5RW1haWxUZW1wbGF0ZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRmlsdGVyQ2xhdXNlIiwiYnVpbGRQcmVzZW50RmlsdGVyR3JvdXAiLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsInVzZURiIiwiZGV0ZWN0TGFuZ3VhZ2UiLCJnZXRTZXNzaW9uIiwic2V0U2Vzc2lvbiIsImdldFN0cmlwZUNsaWVudCIsImFkZEl0ZW0iLCJjb3VudEl0ZW1zIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsInNlbmRFbWFpbCIsImFkZFBlcnNvbmEiLCJzZW5kU21zIiwiZXZlbnRDYXRlZ29yeSIsIkFETUlOX1VTRVJOQU1FIiwiVkVSSUZJQ0FUSU9OX0VNQUlMX0NPT0xET1dOX01TIiwidXNlcnNDb2xsZWN0aW9uIiwiVVNFUlMiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiaXNBZG1pblBhc3N3b3JkIiwicGFzc3dvcmQiLCJhZG1pblBhc3N3b3JkIiwicHJvY2VzcyIsImVudiIsIkFETUlOX1BBU1NXT1JEIiwiYWN0dWFsIiwidXBkYXRlIiwiZGlnZXN0IiwiZXhwZWN0ZWQiLCJnZXRBcHBOYW1lIiwiY29udGV4dCIsImNvbmZpZyIsImRldGFpbHMiLCJuYW1lIiwiZ2V0IiwiZ2V0QXBwVGl0bGUiLCJhcHBOYW1lIiwic3BsaXQiLCJtYXAiLCJwYXJ0IiwidGVzdCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwiYnVpbGRWZXJpZmljYXRpb25FbWFpbCIsInZlcmlmaWVkRW1haWxDb2RlIiwidXNlciIsImFwcFRpdGxlIiwiY29kZSIsInBhcnNlRW1haWxUZW1wbGF0ZSIsInRlbXBsYXRlIiwicmVwbGFjZUFsbCIsImh0bWwiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwic3ViamVjdCIsInZlcmlmaWNhdGlvbkVtYWlsU3ViamVjdCIsInRleHQiLCJ2ZXJpZmljYXRpb25FbWFpbFRleHQiLCJVc2VyQWNjZXNzIiwiY3JlYXRlVXNlclRva2VuIiwidXNlcklkIiwicGVyc29uYUlkIiwidXNlcm5hbWUiLCJ1c2VyQWNjZXNzIiwiZXhwaXJlc0luTWludXRlcyIsIm5vdyIsImxvY2FsIiwic2Vzc2lvbkV4cGlyZXMiLCJwbHVzIiwibWludXRlcyIsImlhdCIsIk1hdGgiLCJmbG9vciIsInRvU2Vjb25kcyIsImV4cCIsInRva2VuIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJleHBpcmVzIiwidG9NaWxsaXMiLCJpc3N1ZWQiLCJwYXJzZVVzZXJMaXN0IiwidXNlcnMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJwYXJzZWRVc2VyIiwicHVzaCIsImJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnMiLCJlbWFpbCIsInBob25lIiwiYWN0aXZlIiwiYXR0cmlidXRlRmlsdGVycyIsIl9rZXkiLCJsb2dpYyIsImNvbmRpdGlvbnMiLCJsZW5ndGgiLCJmaWVsZCIsIm9wZXJhdG9yIiwidmFsdWUiLCJnZXRVc2VyQnlBdHRyaWJ1dGVzIiwib3B0aW9ucyIsImZpbHRlcnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldFVzZXJPcHRpb25hbEZpZWxkcyIsImZpZWxkcyIsInNlbGVjdHMiLCJpbmNsdWRlcyIsIm9iamVjdHMiLCJxdWVyaWVzIiwicGFyc2VVc2VyT3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiYWRkVXNlciIsImFjdGlvbiIsImxhbmd1YWdlQ29udGV4dCIsImNvbmZpcm0iLCJfY29uZmlybSIsIm5ld1VzZXIiLCJfaWQiLCJpbnNlcnRVc2VyIiwiaGFzUGFzc3dvcmQiLCJoYXNVc2VybmFtZSIsImNhdGVnb3J5IiwicGFyYW1zIiwiSU5WQUxJRF9BUkdVTUVOVFMiLCJoYXNoSWQiLCJzYWx0IiwiZW5jcnlwdGVkUGFzc3dvcmQiLCJleGlzdGluZ1VzZXIiLCJpc0NvbnRhY3RPbmx5VXNlciIsInR5cGUiLCJCb29sZWFuIiwic2hvcGlmeUN1c3RvbWVySWQiLCJFWElTVElOR19JVEVNIiwiZXJyb3IiLCJEQVRBQkFTRV9FUlJPUiIsInBob25lQ291bnRyeUNvZGUiLCJyZXBsYWNlIiwic3Vic3RyaW5nIiwibG9jYWxlIiwidXNlclByZWZlcmVuY2UiLCJyYW5kb20iLCJ2ZXJpZmllZFNtc0NvZGUiLCJtYXJrZXRpbmdPcHRJbiIsIm1haWxpbmdMaXN0IiwidGltZXN0YW1wIiwiRGF0ZSIsIm1hcmtldGluZ0ZpZWxkcyIsIm1hcmtldGluZ0NvbnNlbnRTb3VyY2UiLCJtYXJrZXRpbmdPcHRJbkF0IiwibWFya2V0aW5nT3B0T3V0QXQiLCJ1bmRlZmluZWQiLCJpbnNlcnQiLCJ2ZXJpZmllZEVtYWlsIiwidmVyaWZpZWRQaG9uZSIsInNhdmVVc2VyIiwiZXhpc3RpbmdVc2VySWQiLCJfZ2VuZXJhdGVkS2V5IiwidXBncmFkZUZpZWxkcyIsInRoZW4iLCJzYXZlZFVzZXIiLCJzYXZlZFVzZXJJZCIsInBlcnNvbmEiLCJ1cGRhdGVkVXNlciIsInJlc3VsdFVzZXIiLCJwZXJzb25hRXJyb3IiLCJjYXRjaCIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVGaWVsZHMiLCJpZCIsImRhdGFiYXNlTmFtZSIsInF1ZXJ5IiwiY3Vyc29yIiwibmV4dCIsInVwZGF0ZWRVc2VyUmVzdWx0IiwiZm9yZ290UGFzc3dvcmQiLCJjb2RlRXhwaXJlcyIsIm1hbmFnZWQiLCJ2ZXJpZmllZEVtYWlsRXhwaXJlcyIsInZlcmlmaWVkUGhvbmVFeHBpcmVzIiwidXNlckRvY0lkIiwicmVzZXRQYXNzd29yZCIsImZvcm1hdFBhc3N3b3JkIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwidXBkYXRlUXVlcnkiLCJyYXdVc2VyIiwiZm91bmRVc2VyIiwiY29uZmlybUNvZGUiLCJpc1NtcyIsImZvcm1hdHRlZFZhbHVlIiwiZmlsdGVyQnlUeXBlIiwiYXFsUXVlcnkiLCJkZWxldGVVc2VyIiwib3JnYW5pemF0aW9uVXNlciIsInN0cmlwZUNsaWVudCIsImRlbGV0ZWRVc2VyIiwiY3VzdG9tZXJzIiwiZGVsIiwic3RyaXBlQ3VzdG9tZXJJZCIsImFjY291bnRzIiwic3RyaXBlQWNjb3VudElkIiwiZGVhY3RpdmF0ZVVzZXIiLCJ1cGRhdGVkIiwiZ2V0VXNlckRpc3BsYXlOYW1lIiwiZnVsbG5hbWUiLCJ0cmltIiwiZ2V0U2Vzc2lvblVzZXIiLCJzZXNzaW9uIiwic2Vzc2lvbklkIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJmb3JtYXRTZXNzaW9uSWQiLCJnZXRVc2VyQnlJZCIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiZ2V0VXNlckxpc3QiLCJjYXNlU2Vuc2l0aXZlIiwic29ydCIsImRpcmVjdGlvbiIsInN0YXJ0IiwibnVtIiwiZ2V0VXNlckxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9ucyIsImZvcm1hdFJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZSIsInRvTG93ZXJDYXNlIiwiZm9ybWF0VXNlcm5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhbGwiLCJnZXRVc2VyTGlzdEJ5VGFncyIsInRhZ3MiLCJmb3JtYXRUYWdzIiwibGlzdCIsInRhZ05hbWUiLCJnZXRVc2VyTGlzdEJ5TGF0ZXN0IiwiZmlsdGVyIiwiZ2V0VXNlckxpc3RCeUNvbm5lY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJyZWZyZXNoU2Vzc2lvbiIsInNpZ25JbiIsImZvcm1hdEVtYWlsIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRFeHBpcmVzIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImZpbHRlckNsYXVzZSIsImNoZWNrUXVlcnkiLCJjaGVja1VzZXJzIiwiY2hlY2tVc2VyIiwiZmluZCIsInVzZXJJdGVtIiwidmFsaWRQYXNzd29yZCIsImNoZWNrVXNlcm5hbWUiLCJzaWduT3V0IiwibGFzdE9ubGluZSIsInNlc3Npb25RdWVyeSIsImdldEFjdGl2ZVVzZXJDb3VudCIsImdldFVzZXJCeVRva2VuIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQ0VDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsYUFBYSxRQUNSLCtCQUErQjtBQUN0QyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUNyQyxTQUFRVCxjQUFjVSxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFPLFNBQVM7QUFDdkUsU0FBUUMsUUFBUSxRQUFPLFFBQVE7QUFFL0IsU0FBUUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8sNkJBQTZCO0FBQ3BFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQywyQkFBMkIsRUFBRUMsNkJBQTZCLFFBQU8sdUNBQXVDO0FBQ2hILFNBQVFDLDRCQUE0QixRQUFPLHVDQUF1QztBQUNsRixPQUFPQyx5QkFBeUIsb0NBQW9DO0FBQ3BFLFNBQVFDLFVBQVUsUUFBMEIsMEJBQTBCO0FBQ3RFLFNBQVFDLFFBQVEsRUFBRUMsWUFBWSxR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
@@ -40,4 +40,4 @@ import { generateHiggsfieldModel, generateSeedanceReferenceVideo, generateSeedan
40
40
  };
41
41
  };
42
42
 
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb0dlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRIaWdnc2ZpZWxkTW9kZWx9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRNb2RlbENhdGFsb2cuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge2dlbmVyYXRlR2VtaW5pVmlkZW99IGZyb20gJy4vZ2VtaW5pVmlkZW8uanMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhpZ2dzZmllbGRNb2RlbCwgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvLCBnZW5lcmF0ZVNlZWRhbmNlVmlkZW99IGZyb20gJy4vaGlnZ3NmaWVsZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtHZW1pbmlWaWRlb0lucHV0fSBmcm9tICcuLi9hZGFwdGVycy9nZW1pbmlHZW5lcmF0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7U2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCBTZWVkYW5jZVZpZGVvSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRBZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgVmlkZW9HZW5lcmF0aW9uSW5wdXQgPSAoR2VtaW5pVmlkZW9JbnB1dCB8IFNlZWRhbmNlVmlkZW9JbnB1dCB8IFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dCkgJiB7XG4gIHByb3ZpZGVyPzogc3RyaW5nO1xufSB8IHttb2RlbDogc3RyaW5nOyBtb2RlbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgcHJvdmlkZXI6ICdoaWdnc2ZpZWxkJ307XG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNhbmNlbFVybD86IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ3F1ZXVlZCc7XG4gIHN0YXR1c1VybDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0dlbmVyYXRpb25Db25maWcge1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBwcm92aWRlcj86IHN0cmluZztcbn1cblxuLyoqIEdlbmVyaWMgdmlkZW8gc3VibWlzc2lvbjsgcHJvdmlkZXJzIG11c3QgYmUgZXhwbGljaXRseSBzZWxlY3RlZCBpbiB0aGUgaW5wdXQgb3IgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCBpbnB1dDogVmlkZW9HZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogVmlkZW9HZW5lcmF0aW9uQ29uZmlnID0gY29udGV4dC5jb25maWc/LnZpZGVvR2VuZXJhdGlvbiB8fCBDb25maWcuZ2V0KCd2aWRlb0dlbmVyYXRpb24nKSB8fCB7fSxcbiAgd2ViaG9va1VybD86IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb0dlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3Qge3Byb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyLCAuLi5vcHRpb25zfSA9IGlucHV0O1xuICBpZighcHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmlkZW8gZ2VuZXJhdGlvbiBwcm92aWRlciBpcyByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihwcm92aWRlciA9PT0gJ2dlbWluaScpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVHZW1pbmlWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIEdlbWluaVZpZGVvSW5wdXQsIHtcbiAgICAgIGtleTogY29uZmlnLmdlbWluaUtleSwgbW9kZWw6IGNvbmZpZy5nZW1pbmlNb2RlbFxuICAgIH0pO1xuICB9XG4gIGlmKHByb3ZpZGVyICE9PSAnaGlnZ3NmaWVsZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZpZGVvIHByb3ZpZGVyLicpO1xuICB9XG4gIGlmKCdtb2RlbElucHV0JyBpbiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQubW9kZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYoZ2V0SGlnZ3NmaWVsZE1vZGVsKGlucHV0Lm1vZGVsKS5raW5kICE9PSAndmlkZW8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nob29zZSBhIHZpZGVvIG1vZGVsLicpO1xuICAgIH1cbiAgICByZXR1cm4gey4uLmF3YWl0IGdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsKGNvbnRleHQsIGlucHV0Lm1vZGVsLCBpbnB1dC5tb2RlbElucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB3ZWJob29rVXJsKSwgcHJvdmlkZXIsIHN0YXR1czogJ3F1ZXVlZCd9O1xuICB9XG4gIGNvbnN0IG1lZGlhT3B0aW9ucyA9IG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0O1xuICBjb25zdCByZWZlcmVuY2VzID0gW21lZGlhT3B0aW9ucy5pbWFnZVVybHMsIG1lZGlhT3B0aW9ucy5hdWRpb1VybHMsIG1lZGlhT3B0aW9ucy52aWRlb1VybHNdXG4gICAgLnNvbWUoKHVybHMpID0+IEFycmF5LmlzQXJyYXkodXJscykgJiYgdXJscy5sZW5ndGggPiAwKTtcbiAgY29uc3QgcmVzdWx0ID0gcmVmZXJlbmNlc1xuICAgID8gYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKVxuICAgIDogYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKTtcbiAgcmV0dXJuIHsuLi5yZXN1bHQsIHByb3ZpZGVyLCBzdGF0dXM6ICdxdWV1ZWQnfTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0SGlnZ3NmaWVsZE1vZGVsIiwiQ29uZmlnIiwiZ2VuZXJhdGVHZW1pbmlWaWRlbyIsImdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsIiwiZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvIiwiZ2VuZXJhdGVTZWVkYW5jZVZpZGVvIiwiZ2VuZXJhdGVWaWRlbyIsImNvbnRleHQiLCJpbnB1dCIsImNvbmZpZyIsInZpZGVvR2VuZXJhdGlvbiIsImdldCIsIndlYmhvb2tVcmwiLCJwcm92aWRlciIsIm9wdGlvbnMiLCJFcnJvciIsImtleSIsImdlbWluaUtleSIsIm1vZGVsIiwiZ2VtaW5pTW9kZWwiLCJraW5kIiwibW9kZWxJbnB1dCIsInN0YXR1cyIsIm1lZGlhT3B0aW9ucyIsInJlZmVyZW5jZXMiLCJpbWFnZVVybHMiLCJhdWRpb1VybHMiLCJ2aWRlb1VybHMiLCJzb21lIiwidXJscyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsa0JBQWtCLFFBQU8sd0NBQXdDO0FBQ3pFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLG1CQUFtQixRQUFPLG1CQUFtQjtBQUNyRCxTQUFRQyx1QkFBdUIsRUFBRUMsOEJBQThCLEVBQUVDLHFCQUFxQixRQUFPLGtCQUFrQjtBQXNCL0csbUdBQW1HLEdBQ25HLE9BQU8sTUFBTUMsZ0JBQWdCLE9BQzNCQyxTQUFxQkMsT0FDckJDLFNBQWdDRixRQUFRRSxNQUFNLEVBQUVDLG1CQUFtQlQsT0FBT1UsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDdEdDO0lBRUEsTUFBTSxFQUFDQyxXQUFXSixPQUFPSSxRQUFRLEVBQUUsR0FBR0MsU0FBUSxHQUFHTjtJQUNqRCxJQUFHLENBQUNLLFVBQVU7UUFDWixNQUFNLElBQUlFLE1BQU07SUFDbEI7SUFDQSxJQUFHRixhQUFhLFVBQVU7UUFDeEIsT0FBT1gsb0JBQW9CSyxTQUFTTyxTQUE2QjtZQUMvREUsS0FBS1AsT0FBT1EsU0FBUztZQUFFQyxPQUFPVCxPQUFPVSxXQUFXO1FBQ2xEO0lBQ0Y7SUFDQSxJQUFHTixhQUFhLGNBQWM7UUFDNUIsTUFBTSxJQUFJRSxNQUFNO0lBQ2xCO0lBQ0EsSUFBRyxnQkFBZ0JQLFNBQVMsT0FBT0EsTUFBTVUsS0FBSyxLQUFLLFVBQVU7UUFDM0QsSUFBR2xCLG1CQUFtQlEsTUFBTVUsS0FBSyxFQUFFRSxJQUFJLEtBQUssU0FBUztZQUNuRCxNQUFNLElBQUlMLE1BQU07UUFDbEI7UUFDQSxPQUFPO1lBQUMsR0FBRyxNQUFNWix3QkFBd0JJLFNBQVNDLE1BQU1VLEtBQUssRUFBRVYsTUFBTWEsVUFBVSxFQUE2QlQsV0FBVztZQUFFQztZQUFVUyxRQUFRO1FBQVE7SUFDcko7SUFDQSxNQUFNQyxlQUFlVDtJQUNyQixNQUFNVSxhQUFhO1FBQUNELGFBQWFFLFNBQVM7UUFBRUYsYUFBYUcsU0FBUztRQUFFSCxhQUFhSSxTQUFTO0tBQUMsQ0FDeEZDLElBQUksQ0FBQyxDQUFDQyxPQUFTQyxNQUFNQyxPQUFPLENBQUNGLFNBQVNBLEtBQUtHLE1BQU0sR0FBRztJQUN2RCxNQUFNQyxTQUFTVCxhQUNYLE1BQU1wQiwrQkFBK0JHLFNBQVNPLFNBQXdDRixjQUN0RixNQUFNUCxzQkFBc0JFLFNBQVNPLFNBQStCRjtJQUN4RSxPQUFPO1FBQUMsR0FBR3FCLE1BQU07UUFBRXBCO1FBQVVTLFFBQVE7SUFBUTtBQUMvQyxFQUFFIn0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb0dlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRIaWdnc2ZpZWxkTW9kZWx9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRNb2RlbENhdGFsb2cuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge2dlbmVyYXRlR2VtaW5pVmlkZW99IGZyb20gJy4vZ2VtaW5pVmlkZW8uanMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhpZ2dzZmllbGRNb2RlbCwgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvLCBnZW5lcmF0ZVNlZWRhbmNlVmlkZW99IGZyb20gJy4vaGlnZ3NmaWVsZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtHZW1pbmlWaWRlb0lucHV0fSBmcm9tICcuLi9hZGFwdGVycy9nZW1pbmlHZW5lcmF0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7U2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCBTZWVkYW5jZVZpZGVvSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRBZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgVmlkZW9HZW5lcmF0aW9uSW5wdXQgPSAoR2VtaW5pVmlkZW9JbnB1dCB8IFNlZWRhbmNlVmlkZW9JbnB1dCB8IFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dCkgJiB7XG4gIHByb3ZpZGVyPzogc3RyaW5nO1xufSB8IHttb2RlbDogc3RyaW5nOyBtb2RlbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgcHJvdmlkZXI6ICdoaWdnc2ZpZWxkJ307XG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNhbmNlbFVybD86IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ3F1ZXVlZCc7XG4gIHN0YXR1c1VybDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0dlbmVyYXRpb25Db25maWcge1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBwcm92aWRlcj86IHN0cmluZztcbn1cblxuLyoqIEdlbmVyaWMgdmlkZW8gc3VibWlzc2lvbjsgcHJvdmlkZXJzIG11c3QgYmUgZXhwbGljaXRseSBzZWxlY3RlZCBpbiB0aGUgaW5wdXQgb3IgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCBpbnB1dDogVmlkZW9HZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogVmlkZW9HZW5lcmF0aW9uQ29uZmlnID0gY29udGV4dC5jb25maWc/LnZpZGVvR2VuZXJhdGlvbiB8fCBDb25maWcuZ2V0KCd2aWRlb0dlbmVyYXRpb24nKSB8fCB7fSxcbiAgd2ViaG9va1VybD86IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb0dlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3Qge3Byb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyLCAuLi5vcHRpb25zfSA9IGlucHV0O1xuICBpZighcHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmlkZW8gZ2VuZXJhdGlvbiBwcm92aWRlciBpcyByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihwcm92aWRlciA9PT0gJ2dlbWluaScpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVHZW1pbmlWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIEdlbWluaVZpZGVvSW5wdXQsIHtcbiAgICAgIGtleTogY29uZmlnLmdlbWluaUtleSwgbW9kZWw6IGNvbmZpZy5nZW1pbmlNb2RlbFxuICAgIH0pO1xuICB9XG4gIGlmKHByb3ZpZGVyICE9PSAnaGlnZ3NmaWVsZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZpZGVvIHByb3ZpZGVyLicpO1xuICB9XG4gIGlmKCdtb2RlbElucHV0JyBpbiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQubW9kZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYoZ2V0SGlnZ3NmaWVsZE1vZGVsKGlucHV0Lm1vZGVsKS5raW5kICE9PSAndmlkZW8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nob29zZSBhIHZpZGVvIG1vZGVsLicpO1xuICAgIH1cbiAgICByZXR1cm4gey4uLmF3YWl0IGdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsKGNvbnRleHQsIGlucHV0Lm1vZGVsLCBpbnB1dC5tb2RlbElucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB3ZWJob29rVXJsKSwgcHJvdmlkZXIsIHN0YXR1czogJ3F1ZXVlZCd9O1xuICB9XG4gIGNvbnN0IG1lZGlhT3B0aW9ucyA9IG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0O1xuICBjb25zdCByZWZlcmVuY2VzID0gW21lZGlhT3B0aW9ucy5pbWFnZVVybHMsIG1lZGlhT3B0aW9ucy5hdWRpb1VybHMsIG1lZGlhT3B0aW9ucy52aWRlb1VybHNdXG4gICAgLnNvbWUoKHVybHMpID0+IEFycmF5LmlzQXJyYXkodXJscykgJiYgdXJscy5sZW5ndGggPiAwKTtcbiAgY29uc3QgcmVzdWx0ID0gcmVmZXJlbmNlc1xuICAgID8gYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKVxuICAgIDogYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKTtcbiAgcmV0dXJuIHsuLi5yZXN1bHQsIHByb3ZpZGVyLCBzdGF0dXM6ICdxdWV1ZWQnfTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0SGlnZ3NmaWVsZE1vZGVsIiwiQ29uZmlnIiwiZ2VuZXJhdGVHZW1pbmlWaWRlbyIsImdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsIiwiZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvIiwiZ2VuZXJhdGVTZWVkYW5jZVZpZGVvIiwiZ2VuZXJhdGVWaWRlbyIsImNvbnRleHQiLCJpbnB1dCIsImNvbmZpZyIsInZpZGVvR2VuZXJhdGlvbiIsImdldCIsIndlYmhvb2tVcmwiLCJwcm92aWRlciIsIm9wdGlvbnMiLCJFcnJvciIsImtleSIsImdlbWluaUtleSIsIm1vZGVsIiwiZ2VtaW5pTW9kZWwiLCJraW5kIiwibW9kZWxJbnB1dCIsInN0YXR1cyIsIm1lZGlhT3B0aW9ucyIsInJlZmVyZW5jZXMiLCJpbWFnZVVybHMiLCJhdWRpb1VybHMiLCJ2aWRlb1VybHMiLCJzb21lIiwidXJscyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsa0JBQWtCLFFBQU8sd0NBQXdDO0FBQ3pFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLG1CQUFtQixRQUFPLG1CQUFtQjtBQUNyRCxTQUFRQyx1QkFBdUIsRUFBRUMsOEJBQThCLEVBQUVDLHFCQUFxQixRQUFPLGtCQUFrQjtBQXNCL0csbUdBQW1HLEdBQ25HLE9BQU8sTUFBTUMsZ0JBQWdCLE9BQzNCQyxTQUFxQkMsT0FDckJDLFNBQWdDRixRQUFRRSxNQUFNLEVBQUVDLG1CQUFtQlQsT0FBT1UsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDdEdDO0lBRUEsTUFBTSxFQUFDQyxXQUFXSixPQUFPSSxRQUFRLEVBQUUsR0FBR0MsU0FBUSxHQUFHTjtJQUNqRCxJQUFHLENBQUNLLFVBQVU7UUFDWixNQUFNLElBQUlFLE1BQU07SUFDbEI7SUFDQSxJQUFHRixhQUFhLFVBQVU7UUFDeEIsT0FBT1gsb0JBQW9CSyxTQUFTTyxTQUE2QjtZQUMvREUsS0FBS1AsT0FBT1EsU0FBUztZQUFFQyxPQUFPVCxPQUFPVSxXQUFXO1FBQ2xEO0lBQ0Y7SUFDQSxJQUFHTixhQUFhLGNBQWM7UUFDNUIsTUFBTSxJQUFJRSxNQUFNO0lBQ2xCO0lBQ0EsSUFBRyxnQkFBZ0JQLFNBQVMsT0FBT0EsTUFBTVUsS0FBSyxLQUFLLFVBQVU7UUFDM0QsSUFBR2xCLG1CQUFtQlEsTUFBTVUsS0FBSyxFQUFFRSxJQUFJLEtBQUssU0FBUztZQUNuRCxNQUFNLElBQUlMLE1BQU07UUFDbEI7UUFDQSxPQUFPO1lBQUMsR0FBRyxNQUFNWix3QkFBd0JJLFNBQVNDLE1BQU1VLEtBQUssRUFBRVYsTUFBTWEsVUFBVSxFQUE2QlQsV0FBVztZQUFFQztZQUFVUyxRQUFRO1FBQVE7SUFDcko7SUFDQSxNQUFNQyxlQUFlVDtJQUNyQixNQUFNVSxhQUFhO1FBQUNELGFBQWFFLFNBQVM7UUFBRUYsYUFBYUcsU0FBUztRQUFFSCxhQUFhSSxTQUFTO0tBQUMsQ0FDeEZDLElBQUksQ0FBQyxDQUFDQyxPQUFTQyxNQUFNQyxPQUFPLENBQUNGLFNBQVNBLEtBQUtHLE1BQU0sR0FBRztJQUN2RCxNQUFNQyxTQUFTVCxhQUNYLE1BQU1wQiwrQkFBK0JHLFNBQVNPLFNBQXdDRixjQUN0RixNQUFNUCxzQkFBc0JFLFNBQVNPLFNBQStCRjtJQUN4RSxPQUFPO1FBQUMsR0FBR3FCLE1BQU07UUFBRXBCO1FBQVVTLFFBQVE7SUFBUTtBQUMvQyxFQUFFIn0=