@nlabs/reaktor 1.19.0 → 1.19.1

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/README.md +14 -0
  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.js +1 -1
  8. package/lib/actions/contentGenerationErrors.js +1 -1
  9. package/lib/actions/conversations.js +1 -1
  10. package/lib/actions/crm.js +1 -1
  11. package/lib/actions/crud.js +1 -1
  12. package/lib/actions/databaseAccounts.js +1 -1
  13. package/lib/actions/databaseProvisioningLease.js +1 -1
  14. package/lib/actions/dynamodb.js +1 -1
  15. package/lib/actions/email.js +1 -1
  16. package/lib/actions/files.js +1 -1
  17. package/lib/actions/flags.js +1 -1
  18. package/lib/actions/geminiVideo.js +1 -1
  19. package/lib/actions/groups.js +1 -1
  20. package/lib/actions/higgsfield.js +1 -1
  21. package/lib/actions/imageGeneration.js +1 -1
  22. package/lib/actions/images.js +1 -1
  23. package/lib/actions/index.js +1 -1
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +1 -1
  26. package/lib/actions/messages.js +1 -1
  27. package/lib/actions/notifications.js +1 -1
  28. package/lib/actions/ollamaGeneration.js +1 -1
  29. package/lib/actions/openaiResponseSession.js +1 -1
  30. package/lib/actions/payments.js +1 -1
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/phoneSupport.js +1 -1
  33. package/lib/actions/posts.js +1 -1
  34. package/lib/actions/query.js +1 -1
  35. package/lib/actions/reactions.js +1 -1
  36. package/lib/actions/rum.js +1 -1
  37. package/lib/actions/s3.d.ts +10 -7
  38. package/lib/actions/s3.js +59 -14
  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
@@ -726,4 +726,4 @@ export const createDurableConversationActions = (identity, repository)=>{
726
726
  };
727
727
  };
728
728
 
729
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wLCBuby11bmRlcnNjb3JlLWRhbmdsZSAtLSBPcmRlcmVkIHRyYW5zYWN0aW9ucyBhbmQgQXJhbmdvIGlkZW50aXRpZXMuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHJhbmRvbVVVSUR9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHtDaGF0RXJyb3J9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7YXBwZW5kQ2hhdEV2ZW50fSBmcm9tICcuL2V2ZW50cy5qcyc7XG5pbXBvcnQge2NyZWF0ZU1lbWJlcnNoaXBBdXRob3JpemVyLCBpc0NoYXRJZGVudGlmaWVyfSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuaW1wb3J0IHtjcmVhdGVEdXJhYmxlVHJhbnNhY3Rpb259IGZyb20gJy4vdHJhbnNhY3Rpb24uanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXV0aG9yaXplZE1lbWJlcnNoaXAsIENoYXRJZGVudGl0eSwgQ2hhdFF1ZXJ5fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuaW1wb3J0IHR5cGUge1xuICBBY2NlcHRJbnZpdGVJbnB1dCwgQ2hhbmdlTWVtYmVyUm9sZUlucHV0LCBDb252ZXJzYXRpb25JbnZpdGUsIENvbnZlcnNhdGlvbk1lbWJlcnNoaXAsXG4gIENvbnZlcnNhdGlvblN1bW1hcnksIENyZWF0ZURpcmVjdElucHV0LCBDcmVhdGVHcm91cElucHV0LCBJbnZpdGVNZW1iZXJJbnB1dCxcbiAgTGVhdmVDb252ZXJzYXRpb25JbnB1dCwgTWVtYmVyc2hpcFJvbGUsIFJlbW92ZU1lbWJlcklucHV0LCBUcmFuc2Zlck93bmVyc2hpcElucHV0XG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvblJlY29yZCB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWN0aXZlTWVtYmVyQ291bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY2hhdFNjaGVtYVZlcnNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkga2luZDogJ2RpcmVjdCcgfCAnZ3JvdXAnO1xuICByZWFkb25seSBsYXN0U2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVDb250ZW50VmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZURlY2lzaW9uPzogdW5rbm93bjtcbiAgcmVhZG9ubHkgc3RhdGU6ICdhY3RpdmUnIHwgJ2Nsb3NlZCcgfCAnZm9ybWluZyc7XG59XG5pbnRlcmZhY2UgTWVtYmVyUmVjb3JkIGV4dGVuZHMgQ29udmVyc2F0aW9uTWVtYmVyc2hpcCB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgSW52aXRlUmVjb3JkIGV4dGVuZHMgQ29udmVyc2F0aW9uSW52aXRlIHtcbiAgcmVhZG9ubHkgX2tleTogc3RyaW5nO1xuICByZWFkb25seSBpbnZpdGVlUGVyc29uYUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGludml0ZWVVc2VySWQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdExpc3RJbnB1dCB7XG4gIHJlYWRvbmx5IGFmdGVyPzogc3RyaW5nO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbn1cbmNvbnN0IGhhc2ggPSAoaW5wdXQ6IHVua25vd24pOiBzdHJpbmcgPT4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KGlucHV0KSkuZGlnZXN0KCdoZXgnKTtcbmNvbnN0IGludml0ZU1pbGxpc2Vjb25kcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgbWVtYmVyc2hpcER0byA9IChyZWNvcmQ6IENvbnZlcnNhdGlvbk1lbWJlcnNoaXApOiBDb252ZXJzYXRpb25NZW1iZXJzaGlwID0+ICh7XG4gIGNvbnZlcnNhdGlvbklkOiByZWNvcmQuY29udmVyc2F0aW9uSWQsIGVwb2NoOiByZWNvcmQuZXBvY2gsIGpvaW5TZXF1ZW5jZTogcmVjb3JkLmpvaW5TZXF1ZW5jZSxcbiAgbGVmdFNlcXVlbmNlOiByZWNvcmQubGVmdFNlcXVlbmNlLCBwZXJzb25hSWQ6IHJlY29yZC5wZXJzb25hSWQsIHJldmlzaW9uOiByZWNvcmQucmV2aXNpb24sXG4gIHJvbGU6IHJlY29yZC5yb2xlLCBzdGF0ZTogcmVjb3JkLnN0YXRlXG59KTtcbmNvbnN0IGludml0ZUR0byA9IChyZWNvcmQ6IEludml0ZVJlY29yZCk6IENvbnZlcnNhdGlvbkludml0ZSA9PiAoe1xuICBjb252ZXJzYXRpb25JZDogcmVjb3JkLmNvbnZlcnNhdGlvbklkLCBleHBpcmVzQXQ6IHJlY29yZC5leHBpcmVzQXQsIGludml0ZUlkOiByZWNvcmQuX2tleSxcbiAgaW52aXRlZEJ5UGVyc29uYUlkOiByZWNvcmQuaW52aXRlZEJ5UGVyc29uYUlkLCByZXZpc2lvbjogcmVjb3JkLnJldmlzaW9uLCBzdGF0ZTogcmVjb3JkLnN0YXRlXG59KTtcbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUNvbnZlcnNhdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBhdWRpZW5jZT86ICdtb2JpbGUnIHwgJ3dlYic7XG4gIC8qKiBBbGwgcG9saWN5IHJlYWRzIG11c3QgdXNlIHRoaXMgcXVlcnk7IGV4Y2VwdGlvbnMgZmFpbCB0aGUgdHJhbnNhY3Rpb24uICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZUlkZW50aXR5OiAocmVhZDogQ2hhdFF1ZXJ5LCBpZGVudGl0eTogQ2hhdElkZW50aXR5KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBjbGFzc2lmeU5hbWU6IChuYW1lOiBzdHJpbmcsIGNvbnRlbnRWZXJzaW9uOiBzdHJpbmcpID0+IHVua25vd247XG4gIHJlYWRvbmx5IHByb2plY3ROYW1lOiAoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25SZWNvcmQsIGF1ZGllbmNlOiAnbW9iaWxlJyB8ICd3ZWInKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHJlYWRDb2xsZWN0aW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogQ2FsbGVyIG93bnMgdHJhbnNhY3Rpb24vbG9ja3MvY29tbWl0IHdoZW4gc3VwcGxpZWQ7IG5vIGluZGVwZW5kZW50IGRhdGFiYXNlIGFjY2VzcyBvY2N1cnMuICovXG4gIHJlYWRvbmx5IHF1ZXJ5PzogQ2hhdFF1ZXJ5O1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRHVyYWJsZUNvbnZlcnNhdGlvblJlcG9zaXRvcnkgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsIGlkZW50aXR5OiBDaGF0SWRlbnRpdHksIG9wdGlvbnM6IER1cmFibGVDb252ZXJzYXRpb25PcHRpb25zXG4pID0+IHtcbiAgY29uc3QgYXVkaWVuY2UgPSBvcHRpb25zLmF1ZGllbmNlIHx8ICdtb2JpbGUnO1xuICBjb25zdCB0cmFuc2FjdCA9IGNyZWF0ZUR1cmFibGVUcmFuc2FjdGlvbihjb250ZXh0LCB7ZXhjbHVzaXZlOiBbXG4gICAgJ2NoYXRJbnZpdGVzJywgJ2NoYXRPdXRib3gnLCAnY2hhdFJhdGVMaW1pdHMnLCAnY2hhdFJlcXVlc3RzJywgJ2NvbnZlcnNhdGlvbnMnLCAnaGFzQ2hhdE1lbWJlcnNoaXAnLCAnaGFzQ29udmVyc2F0aW9uJ1xuICBdLCByZWFkOiBbJ2hhc0Nvbm5lY3Rpb24nLCAncGVyc29uYXMnLCAndXNlcnMnLCAuLi4ob3B0aW9ucy5yZWFkQ29sbGVjdGlvbnMgfHwgW10pXX0sIG9wdGlvbnMucXVlcnkpO1xuICBjb25zdCBzdW1tYXJ5ID0gKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uUmVjb3JkLCBtZW1iZXI6IENvbnZlcnNhdGlvbk1lbWJlcnNoaXAsXG4gICAgYXVkaWVuY2U6ICdtb2JpbGUnIHwgJ3dlYicsIGluY2x1ZGVOYW1lID0gZmFsc2UpOiBDb252ZXJzYXRpb25TdW1tYXJ5ID0+ICh7XG4gICAgYWN0aXZlTWVtYmVyQ291bnQ6IGNvbnZlcnNhdGlvbi5hY3RpdmVNZW1iZXJDb3VudCwgY29udmVyc2F0aW9uSWQ6IGNvbnZlcnNhdGlvbi5fa2V5LFxuICAgIGtpbmQ6IGNvbnZlcnNhdGlvbi5raW5kLCBtZW1iZXJzaGlwOiBtZW1iZXJzaGlwRHRvKG1lbWJlciksIG1lbWJlcnNoaXBSZXZpc2lvbjogY29udmVyc2F0aW9uLm1lbWJlcnNoaXBSZXZpc2lvbixcbiAgICBuYW1lOiBpbmNsdWRlTmFtZSA/IG9wdGlvbnMucHJvamVjdE5hbWUoY29udmVyc2F0aW9uLCBhdWRpZW5jZSkgOiB1bmRlZmluZWQsIHN0YXRlOiBjb252ZXJzYXRpb24uc3RhdGVcbiAgfSk7XG4gIGNvbnN0IGFjdG9yID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKCdwZXJzb25hcycsIEBwZXJzb25hSWQpXG4gICAgICBMRVQgdXNlciA9IERPQ1VNRU5UKCd1c2VycycsIEB1c2VySWQpXG4gICAgICBSRVRVUk4gcGVyc29uYSAhPSBudWxsIEFORCBwZXJzb25hLnVzZXJJZCA9PSBAdXNlcklkIEFORCBwZXJzb25hLmFjdGl2ZSAhPSBmYWxzZVxuICAgICAgICBBTkQgdXNlciAhPSBudWxsIEFORCB1c2VyLmFjdGl2ZSAhPSBmYWxzZWAsIHsuLi5pZGVudGl0eX0pO1xuICAgIGlmKGFsbG93ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICBhd2FpdCBhZHVsdChyZWFkLCBpZGVudGl0eSk7XG4gIH07XG4gIGNvbnN0IGFkdWx0ID0gKHJlYWQ6IENoYXRRdWVyeSwgd2hvOiBDaGF0SWRlbnRpdHkpOiBQcm9taXNlPHZvaWQ+ID0+IG9wdGlvbnMuYXV0aG9yaXplSWRlbnRpdHkocmVhZCwgd2hvKTtcbiAgY29uc3QgY29ubmVjdGVkID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgZnJvbTogQ2hhdElkZW50aXR5LCBwZXJzb25hSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hhdElkZW50aXR5PiA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgcmVhZDxDaGF0SWRlbnRpdHk+KGBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKCdwZXJzb25hcycsIEBwZXJzb25hSWQpXG4gICAgICBMRVQgdXNlciA9IERPQ1VNRU5UKCd1c2VycycsIHBlcnNvbmEudXNlcklkKVxuICAgICAgTEVUIGZvbGxvd2luZyA9IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb24gRklMVEVSIGVkZ2UuX2Zyb20gPT0gQGZyb20gQU5EIGVkZ2UuX3RvID09IEB0b1xuICAgICAgICBBTkQgZWRnZS50eXBlID09ICdmb2xsb3cnIEFORCBlZGdlLmFjdGl2ZSAhPSBmYWxzZSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgTEVUIGZvbGxvd2VkID0gRklSU1QoRk9SIGVkZ2UgSU4gaGFzQ29ubmVjdGlvbiBGSUxURVIgZWRnZS5fdG8gPT0gQGZyb20gQU5EIGVkZ2UuX2Zyb20gPT0gQHRvXG4gICAgICAgIEFORCBlZGdlLnR5cGUgPT0gJ2ZvbGxvdycgQU5EIGVkZ2UuYWN0aXZlICE9IGZhbHNlIExJTUlUIDEgUkVUVVJOIHRydWUpXG4gICAgICBMRVQgYmxvY2tlZCA9IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb24gRklMVEVSIGVkZ2UudHlwZSA9PSAnYmxvY2snXG4gICAgICAgIEFORCAoKGVkZ2UuX2Zyb20gSU4gW0Bmcm9tLCBAZnJvbVVzZXJdIEFORCBlZGdlLl90byBJTiBbQHRvLCBDT05DQVQoJ3VzZXJzLycsIHBlcnNvbmEudXNlcklkKV0pXG4gICAgICAgICAgT1IgKGVkZ2UuX3RvIElOIFtAZnJvbSwgQGZyb21Vc2VyXSBBTkQgZWRnZS5fZnJvbSBJTiBbQHRvLCBDT05DQVQoJ3VzZXJzLycsIHBlcnNvbmEudXNlcklkKV0pKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbCBBTkQgdXNlciAhPSBudWxsIEFORCBwZXJzb25hLmFjdGl2ZSAhPSBmYWxzZSBBTkQgdXNlci5hY3RpdmUgIT0gZmFsc2VcbiAgICAgICAgQU5EIHBlcnNvbmEudXNlcklkICE9IEBhY3RvclVzZXIgQU5EIGZvbGxvd2luZyA9PSB0cnVlIEFORCBmb2xsb3dlZCA9PSB0cnVlIEFORCBibG9ja2VkICE9IHRydWVcbiAgICAgIFJFVFVSTiB7cGVyc29uYUlkOiBAcGVyc29uYUlkLCB1c2VySWQ6IHBlcnNvbmEudXNlcklkfWAsIHtcbiAgICAgIGFjdG9yVXNlcjogZnJvbS51c2VySWQsIGZyb206IGBwZXJzb25hcy8ke2Zyb20ucGVyc29uYUlkfWAsIGZyb21Vc2VyOiBgdXNlcnMvJHtmcm9tLnVzZXJJZH1gLFxuICAgICAgcGVyc29uYUlkLCB0bzogYHBlcnNvbmFzLyR7cGVyc29uYUlkfWBcbiAgICB9KTtcbiAgICBpZighdGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgYXdhaXQgYWR1bHQocmVhZCwgdGFyZ2V0KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBpZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25SZWNvcmQ+ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHJlYWQ8Q29udmVyc2F0aW9uUmVjb3JkPignUkVUVVJOIERPQ1VNRU5UKFwiY29udmVyc2F0aW9uc1wiLCBAaWQpJywge2lkfSk7XG4gICAgaWYoIXZhbHVlIHx8IHZhbHVlLmNoYXRTY2hlbWFWZXJzaW9uICE9PSAxIHx8IHZhbHVlLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgY29uc3QgbWVtYmVyID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPE1lbWJlclJlY29yZD4gPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmVhZDxNZW1iZXJSZWNvcmQ+KGBGT1IgbWVtYmVyIElOIGhhc0NoYXRNZW1iZXJzaGlwIEZJTFRFUiBtZW1iZXIuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkXG4gICAgICBBTkQgbWVtYmVyLnBlcnNvbmFJZCA9PSBAcGVyc29uYUlkIEFORCBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScgTElNSVQgMSBSRVRVUk4gbWVtYmVyYCwge2NvbnZlcnNhdGlvbklkLCBwZXJzb25hSWR9KTtcbiAgICBpZighdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGNvbnN0IGFjY2VzcyA9IChyZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIHB1cnBvc2U6ICdpbnZpdGUnIHwgJ3BhcnRpY2lwYW50cycgPSAncGFydGljaXBhbnRzJykgPT5cbiAgICBjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplcihyZWFkKShpZGVudGl0eSwge2NvbnZlcnNhdGlvbklkLCBwdXJwb3NlfSk7XG4gIGNvbnN0IGNoZWNrUmV2aXNpb24gPSAoZW50cnk6IEF1dGhvcml6ZWRNZW1iZXJzaGlwLCBleHBlY3RlZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYoZW50cnkubWVtYmVyc2hpcFJldmlzaW9uICE9PSBleHBlY3RlZCB8fCBlbnRyeS5raW5kICE9PSAnZ3JvdXAnKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZXZlbnQgPSBhc3luYyAoXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBlcG9jaDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcsIHJldmlzaW9uOiBudW1iZXJcbiAgKSA9PiB7XG4gICAgYXdhaXQgYXBwZW5kQ2hhdEV2ZW50KHJlYWQsIHthY3RvclBlcnNvbmFJZDogaWRlbnRpdHkucGVyc29uYUlkLCBjb252ZXJzYXRpb25JZCwga2luZDogJ21lbWJlcnNoaXAuY2hhbmdlZCcsXG4gICAgICAuLi4oZXBvY2ggPyB7bWVtYmVyc2hpcEVwb2NoOiBlcG9jaH0gOiB7fSksIHJlc291cmNlSWQsIHJldmlzaW9ufSk7XG4gIH07XG4gIGNvbnN0IHJlY2VpcHQgPSBhc3luYyA8VD4ocmVhZDogQ2hhdFF1ZXJ5LCBhY3Rpb246IHN0cmluZywgaW5wdXQ6IHtyZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nfSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGhhc2goW2lkZW50aXR5LnVzZXJJZCwgaWRlbnRpdHkucGVyc29uYUlkLCBhY3Rpb24sIGlucHV0LmlkZW1wb3RlbmN5S2V5XSk7XG4gICAgY29uc3QgcGF5bG9hZEhhc2ggPSBoYXNoKGlucHV0KTtcbiAgICBjb25zdCBwcmlvciA9IGF3YWl0IHJlYWQ8e3JlYWRvbmx5IHBheWxvYWRIYXNoOiBzdHJpbmc7IHJlYWRvbmx5IHJlc3VsdDogVH0+KCdSRVRVUk4gRE9DVU1FTlQoXCJjaGF0UmVxdWVzdHNcIiwgQGtleSknLCB7a2V5fSk7XG4gICAgaWYocHJpb3IgJiYgcHJpb3IucGF5bG9hZEhhc2ggIT09IHBheWxvYWRIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgICByZXR1cm4ge3ByaW9yOiBwcmlvcj8ucmVzdWx0LCBzYXZlOiAocmVzdWx0OiBUKSA9PiByZWFkKCdJTlNFUlQgQHJlY29yZCBJTiBjaGF0UmVxdWVzdHMgUkVUVVJOIHRydWUnLCB7XG4gICAgICByZWNvcmQ6IHtfa2V5OiBrZXksIGFkZGVkOiBEYXRlLm5vdygpLCBvd25lclVzZXJJZDogaWRlbnRpdHkudXNlcklkLCBwYXlsb2FkSGFzaCxcbiAgICAgICAgcGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWQsIHJlc3VsdH1cbiAgICB9KX07XG4gIH07XG4gIGNvbnN0IHJhdGVMaW1pdCA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnkpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBrZXkgPSBoYXNoKFtpZGVudGl0eS51c2VySWQsIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDM2MDAwMDApXSk7XG4gICAgY29uc3QgYWxsb3dlZCA9IGF3YWl0IHJlYWQ8Ym9vbGVhbj4oYExFVCBidWNrZXQgPSBET0NVTUVOVCgnY2hhdFJhdGVMaW1pdHMnLCBAa2V5KVxuICAgICAgRklMVEVSIGJ1Y2tldCA9PSBudWxsIE9SIGJ1Y2tldC5jb3VudCA8IDUwXG4gICAgICBVUFNFUlQge19rZXk6IEBrZXl9IElOU0VSVCB7X2tleTogQGtleSwgY291bnQ6IDEsIHVzZXJJZDogQHVzZXJJZH0gVVBEQVRFIHtjb3VudDogT0xELmNvdW50ICsgMSwgdXNlcklkOiBAdXNlcklkfVxuICAgICAgSU4gY2hhdFJhdGVMaW1pdHMgUkVUVVJOIHRydWVgLCB7a2V5LCB1c2VySWQ6IGlkZW50aXR5LnVzZXJJZH0pO1xuICAgIGlmKGFsbG93ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3JhdGVfbGltaXRlZCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkTWVtYmVyID0gYXN5bmMgKFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgd2hvOiBDaGF0SWRlbnRpdHksIHJvbGU6IE1lbWJlcnNoaXBSb2xlLCBqb2luU2VxdWVuY2U6IG51bWJlclxuICApOiBQcm9taXNlPE1lbWJlclJlY29yZD4gPT4ge1xuICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgIGNvbnN0IGV2ZW50U2VxdWVuY2UgPSBhd2FpdCByZWFkPG51bWJlcj4oXG4gICAgICAnUkVUVVJOIERPQ1VNRU5UKFwiY29udmVyc2F0aW9uc1wiLCBAY29udmVyc2F0aW9uSWQpLmxhc3RFdmVudFNlcXVlbmNlIHx8IDAnLCB7Y29udmVyc2F0aW9uSWR9KTtcbiAgICBjb25zdCByZWNvcmQgPSB7X2Zyb206IGBwZXJzb25hcy8ke3doby5wZXJzb25hSWR9YCwgX2tleTogaWQsIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgYWNjZXB0ZWRBdDogRGF0ZS5ub3coKSwgY29udmVyc2F0aW9uSWQsIGN1cnJlbnRLZXk6IGAke2NvbnZlcnNhdGlvbklkfToke3doby5wZXJzb25hSWR9YCwgZXBvY2g6IHJhbmRvbVVVSUQoKSxcbiAgICAgIGpvaW5FdmVudFNlcXVlbmNlOiBqb2luU2VxdWVuY2UgPiAwID8gKGV2ZW50U2VxdWVuY2UgfHwgMCkgKyAxIDogMCwgam9pblNlcXVlbmNlLCBwZXJzb25hSWQ6IHdoby5wZXJzb25hSWQsIHJldmlzaW9uOiAxLCByb2xlLCBzdGF0ZTogJ2FjdGl2ZScgYXMgY29uc3QsIHVzZXJJZDogd2hvLnVzZXJJZH07XG4gICAgYXdhaXQgcmVhZCgnSU5TRVJUIEByZWNvcmQgSU4gaGFzQ2hhdE1lbWJlcnNoaXAgUkVUVVJOIHRydWUnLCB7cmVjb3JkfSk7XG4gICAgYXdhaXQgcmVhZChgVVBTRVJUIHtfZnJvbTogQGZyb20sIF90bzogQHRvfVxuICAgICAgSU5TRVJUIHtfZnJvbTogQGZyb20sIF90bzogQHRvLCBhZGRlZDogQG5vdywgY29udmVyc2F0aW9uSWQ6IEBjb252ZXJzYXRpb25JZCwgdXNlcklkOiBAdXNlcklkfVxuICAgICAgVVBEQVRFIHt9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gdHJ1ZWAsIHtcbiAgICAgIGNvbnZlcnNhdGlvbklkLCBmcm9tOiBgdXNlcnMvJHt3aG8udXNlcklkfWAsIG5vdzogRGF0ZS5ub3coKSwgdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCwgdXNlcklkOiB3aG8udXNlcklkXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfTtcbiAgY29uc3QgYWRkSW52aXRlID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgd2hvOiBDaGF0SWRlbnRpdHkpOiBQcm9taXNlPENvbnZlcnNhdGlvbkludml0ZT4gPT4ge1xuICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgIGNvbnN0IHJlY29yZDogSW52aXRlUmVjb3JkID0ge19rZXk6IGlkLCBjb252ZXJzYXRpb25JZCwgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgaW52aXRlTWlsbGlzZWNvbmRzLFxuICAgICAgaW52aXRlSWQ6IGlkLCBpbnZpdGVkQnlQZXJzb25hSWQ6IGlkZW50aXR5LnBlcnNvbmFJZCwgaW52aXRlZVBlcnNvbmFJZDogd2hvLnBlcnNvbmFJZCwgaW52aXRlZVVzZXJJZDogd2hvLnVzZXJJZCwgcmV2aXNpb246IDEsIHN0YXRlOiAncGVuZGluZyd9O1xuICAgIGF3YWl0IHJlYWQoJ0lOU0VSVCBAcmVjb3JkIElOIGNoYXRJbnZpdGVzIFJFVFVSTiB0cnVlJywge3JlY29yZDogey4uLnJlY29yZCxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSwgY3VycmVudEtleTogYCR7Y29udmVyc2F0aW9uSWR9OiR7d2hvLnBlcnNvbmFJZH1gLCByb2xlOiAnbWVtYmVyJ319KTtcbiAgICBhd2FpdCBldmVudChyZWFkLCBjb252ZXJzYXRpb25JZCwgJycsIGlkLCAxKTtcbiAgICByZXR1cm4gaW52aXRlRHRvKHJlY29yZCk7XG4gIH07XG4gIGNvbnN0IGV4cGlyZUludml0ZXMgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgcmVhZChgRk9SIGludml0ZSBJTiBjaGF0SW52aXRlcyBGSUxURVIgaW52aXRlLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgQU5EIGludml0ZS5zdGF0ZSA9PSAncGVuZGluZycgQU5EIGludml0ZS5leHBpcmVzQXQgPD0gQG5vd1xuICAgICAgVVBEQVRFIGludml0ZSBXSVRIIHtjdXJyZW50S2V5OiBudWxsLCByZXNvbHZlZEF0OiBAbm93LCByZXZpc2lvbjogaW52aXRlLnJldmlzaW9uICsgMSwgc3RhdGU6ICdleHBpcmVkJ31cbiAgICAgIElOIGNoYXRJbnZpdGVzIFJFVFVSTiB0cnVlYCwge2NvbnZlcnNhdGlvbklkLCBub3c6IERhdGUubm93KCl9KTtcbiAgfTtcbiAgY29uc3QgZ2V0T3JDcmVhdGVEaXJlY3QgPSAoaW5wdXQ6IENyZWF0ZURpcmVjdElucHV0KTogUHJvbWlzZTxDb252ZXJzYXRpb25TdW1tYXJ5PiA9PiB0cmFuc2FjdChhc3luYyAocmVhZCkgPT4ge1xuICAgIGF3YWl0IGFjdG9yKHJlYWQpO1xuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IGNvbm5lY3RlZChyZWFkLCBpZGVudGl0eSwgaW5wdXQucGFydGljaXBhbnRQZXJzb25hSWQpO1xuICAgIGNvbnN0IHBhaXIgPSBoYXNoKFsnZGlyZWN0LXYxJywgLi4uW2lkZW50aXR5LnBlcnNvbmFJZCwgdGFyZ2V0LnBlcnNvbmFJZF0uc29ydCgpXSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkPENvbnZlcnNhdGlvblJlY29yZD4oJ0ZPUiBjIElOIGNvbnZlcnNhdGlvbnMgRklMVEVSIGMuZGlyZWN0UGFpcktleSA9PSBAcGFpciBMSU1JVCAxIFJFVFVSTiBjJywge3BhaXJ9KTtcbiAgICBpZihleGlzdGluZykge1xuICAgICAgYXdhaXQgYWNjZXNzKHJlYWQsIGV4aXN0aW5nLl9rZXkpO1xuICAgICAgcmV0dXJuIHN1bW1hcnkoZXhpc3RpbmcsIGF3YWl0IG1lbWJlcihyZWFkLCBleGlzdGluZy5fa2V5LCBpZGVudGl0eS5wZXJzb25hSWQpLCBhdWRpZW5jZSk7XG4gICAgfVxuICAgIGF3YWl0IHJhdGVMaW1pdChyZWFkKTtcbiAgICBjb25zdCBpZCA9IGBkaXJlY3QtJHtwYWlyfWA7XG4gICAgY29uc3QgcmVjb3JkOiBDb252ZXJzYXRpb25SZWNvcmQgPSB7X2tleTogaWQsIGFjdGl2ZU1lbWJlckNvdW50OiAyLCBjaGF0U2NoZW1hVmVyc2lvbjogMSxcbiAgICAgIGtpbmQ6ICdkaXJlY3QnLCBsYXN0U2VxdWVuY2U6IDAsIG1lbWJlcnNoaXBSZXZpc2lvbjogMSwgc3RhdGU6ICdhY3RpdmUnfTtcbiAgICBhd2FpdCByZWFkKCdJTlNFUlQgQHJlY29yZCBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiB0cnVlJywge3JlY29yZDogey4uLnJlY29yZCxcbiAgICAgIGFkZGVkOiBEYXRlLm5vdygpLCBjcmVhdGVkQnlQZXJzb25hSWQ6IGlkZW50aXR5LnBlcnNvbmFJZCwgZGlyZWN0UGFpcktleTogcGFpciwgaXNEaXJlY3Q6IHRydWV9fSk7XG4gICAgY29uc3Qgb3duID0gYXdhaXQgYWRkTWVtYmVyKHJlYWQsIGlkLCBpZGVudGl0eSwgJ21lbWJlcicsIDApO1xuICAgIGF3YWl0IGFkZE1lbWJlcihyZWFkLCBpZCwgdGFyZ2V0LCAnbWVtYmVyJywgMCk7XG4gICAgYXdhaXQgZXZlbnQocmVhZCwgaWQsIG93bi5lcG9jaCwgaWQsIDEpO1xuICAgIHJldHVybiBzdW1tYXJ5KHJlY29yZCwgb3duLCBhdWRpZW5jZSk7XG4gIH0pO1xuICBjb25zdCBjcmVhdGVHcm91cCA9IChpbnB1dDogQ3JlYXRlR3JvdXBJbnB1dCk6IFByb21pc2U8Q29udmVyc2F0aW9uU3VtbWFyeT4gPT4gdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBhY3RvcihyZWFkKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxDb252ZXJzYXRpb25TdW1tYXJ5PihyZWFkLCAnY3JlYXRlR3JvdXAnLCBpbnB1dCk7XG4gICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QucHJpb3I7XG4gICAgfVxuICAgIGF3YWl0IHJhdGVMaW1pdChyZWFkKTtcbiAgICBjb25zdCB0YXJnZXRzOiBDaGF0SWRlbnRpdHlbXSA9IFtdO1xuICAgIGZvcihjb25zdCBwZXJzb25hSWQgb2YgaW5wdXQubWVtYmVyUGVyc29uYUlkcykge1xuICAgICAgdGFyZ2V0cy5wdXNoKGF3YWl0IGNvbm5lY3RlZChyZWFkLCBpZGVudGl0eSwgcGVyc29uYUlkKSk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgIGNvbnN0IGNvbnRlbnRWZXJzaW9uID0gaGFzaChbJ2dyb3VwLW5hbWUnLCBpbnB1dC5uYW1lXSk7XG4gICAgY29uc3QgcmVjb3JkOiBDb252ZXJzYXRpb25SZWNvcmQgPSB7X2tleTogaWQsIGFjdGl2ZU1lbWJlckNvdW50OiAxLCBjaGF0U2NoZW1hVmVyc2lvbjogMSwga2luZDogJ2dyb3VwJyxcbiAgICAgIGxhc3RTZXF1ZW5jZTogMCwgbWVtYmVyc2hpcFJldmlzaW9uOiAxLCBuYW1lOiBpbnB1dC5uYW1lLCBuYW1lQ29udGVudFZlcnNpb246IGNvbnRlbnRWZXJzaW9uLFxuICAgICAgbmFtZURlY2lzaW9uOiBvcHRpb25zLmNsYXNzaWZ5TmFtZShpbnB1dC5uYW1lLCBjb250ZW50VmVyc2lvbiksIHN0YXRlOiAnZm9ybWluZyd9O1xuICAgIGF3YWl0IHJlYWQoJ0lOU0VSVCBAcmVjb3JkIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIHRydWUnLCB7cmVjb3JkOiB7Li4ucmVjb3JkLFxuICAgICAgYWRkZWQ6IERhdGUubm93KCksIGNyZWF0ZWRCeVBlcnNvbmFJZDogaWRlbnRpdHkucGVyc29uYUlkLCBpc0RpcmVjdDogZmFsc2V9fSk7XG4gICAgY29uc3Qgb3duID0gYXdhaXQgYWRkTWVtYmVyKHJlYWQsIGlkLCBpZGVudGl0eSwgJ293bmVyJywgMCk7XG4gICAgZm9yKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBhd2FpdCBhZGRJbnZpdGUocmVhZCwgaWQsIHRhcmdldCk7XG4gICAgfVxuICAgIGF3YWl0IGV2ZW50KHJlYWQsIGlkLCBvd24uZXBvY2gsIGlkLCAxKTtcbiAgICBjb25zdCByZXN1bHQgPSBzdW1tYXJ5KHJlY29yZCwgb3duLCBhdWRpZW5jZSk7XG4gICAgYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIGNvbnN0IGludml0ZU1lbWJlciA9IChpbnB1dDogSW52aXRlTWVtYmVySW5wdXQpOiBQcm9taXNlPENvbnZlcnNhdGlvbkludml0ZT4gPT4gdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBhY3RvcihyZWFkKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxDb252ZXJzYXRpb25JbnZpdGU+KHJlYWQsICdpbnZpdGUnLCBpbnB1dCk7XG4gICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QucHJpb3I7XG4gICAgfVxuICAgIGNvbnN0IG93biA9IGF3YWl0IGFjY2VzcyhyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgJ2ludml0ZScpO1xuICAgIGNoZWNrUmV2aXNpb24ob3duLCBpbnB1dC5leHBlY3RlZFJldmlzaW9uKTtcbiAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBjb25uZWN0ZWQocmVhZCwgaWRlbnRpdHksIGlucHV0LnBlcnNvbmFJZCk7XG4gICAgYXdhaXQgZXhwaXJlSW52aXRlcyhyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCk7XG4gICAgY29uc3QgcHJpb3IgPSBhd2FpdCByZWFkPEludml0ZVJlY29yZD4oJ0ZPUiBpbnZpdGUgSU4gY2hhdEludml0ZXMgRklMVEVSIGludml0ZS5jdXJyZW50S2V5ID09IEBrZXkgTElNSVQgMSBSRVRVUk4gaW52aXRlJyxcbiAgICAgIHtrZXk6IGAke2lucHV0LmNvbnZlcnNhdGlvbklkfToke2lucHV0LnBlcnNvbmFJZH1gfSk7XG4gICAgaWYocHJpb3IpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGludml0ZUR0byhwcmlvcik7XG4gICAgICBhd2FpdCByZXF1ZXN0LnNhdmUocmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNvdW50cyA9IGF3YWl0IHJlYWQ8e3JlYWRvbmx5IGFjdGl2ZTogYm9vbGVhbjsgcmVhZG9ubHkgdG90YWw6IG51bWJlcn0+KGBSRVRVUk4ge1xuICAgICAgYWN0aXZlOiBMRU5HVEgoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcCBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgICBBTkQgbWVtYmVyLnBlcnNvbmFJZCA9PSBAcGVyc29uYUlkIEFORCBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScgUkVUVVJOIDEpID4gMCxcbiAgICAgIHRvdGFsOiBMRU5HVEgoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcCBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgICBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnIFJFVFVSTiAxKSArIExFTkdUSChGT1IgaW52aXRlIElOIGNoYXRJbnZpdGVzXG4gICAgICAgIEZJTFRFUiBpbnZpdGUuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkIEFORCBpbnZpdGUuc3RhdGUgPT0gJ3BlbmRpbmcnIEFORCBpbnZpdGUuZXhwaXJlc0F0ID4gQG5vdyBSRVRVUk4gMSlcbiAgICB9YCwge2NvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgbm93OiBEYXRlLm5vdygpLCBwZXJzb25hSWQ6IGlucHV0LnBlcnNvbmFJZH0pO1xuICAgIGlmKCFjb3VudHMgfHwgY291bnRzLmFjdGl2ZSB8fCBjb3VudHMudG90YWwgPj0gMjUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IHJhdGVMaW1pdChyZWFkKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZGRJbnZpdGUocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsIHRhcmdldCk7XG4gICAgYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIGNvbnN0IHJlc29sdmVJbnZpdGUgPSAoXG4gICAgaW5wdXQ6IEFjY2VwdEludml0ZUlucHV0LCBhY2NlcHQ6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxDb252ZXJzYXRpb25TdW1tYXJ5IHwgQ29udmVyc2F0aW9uSW52aXRlPiA9PlxuICAgIHRyYW5zYWN0KGFzeW5jIChyZWFkKSA9PiB7XG4gICAgICBhd2FpdCBhY3RvcihyZWFkKTtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCByZWNlaXB0PENvbnZlcnNhdGlvblN1bW1hcnkgfCBDb252ZXJzYXRpb25JbnZpdGU+KHJlYWQsIGFjY2VwdCA/ICdhY2NlcHQnIDogJ2RlY2xpbmUnLCBpbnB1dCk7XG4gICAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LnByaW9yO1xuICAgICAgfVxuICAgICAgY29uc3QgaW52aXRlID0gYXdhaXQgcmVhZDxJbnZpdGVSZWNvcmQ+KCdSRVRVUk4gRE9DVU1FTlQoXCJjaGF0SW52aXRlc1wiLCBAaWQpJywge2lkOiBpbnB1dC5pbnZpdGVJZH0pO1xuICAgICAgaWYoIWludml0ZSB8fCBpbnZpdGUuaW52aXRlZVBlcnNvbmFJZCAhPT0gaWRlbnRpdHkucGVyc29uYUlkIHx8IGludml0ZS5pbnZpdGVlVXNlcklkICE9PSBpZGVudGl0eS51c2VySWRcbiAgICAgICAgfHwgaW52aXRlLnN0YXRlICE9PSAncGVuZGluZycgfHwgaW52aXRlLmV4cGlyZXNBdCA8PSBEYXRlLm5vdygpKSB7XG4gICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgICAgfVxuICAgICAgaWYoaW52aXRlLnJldmlzaW9uICE9PSBpbnB1dC5leHBlY3RlZFJldmlzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgY29udmVyc2F0aW9uKHJlYWQsIGludml0ZS5jb252ZXJzYXRpb25JZCk7XG4gICAgICBpZihjdXJyZW50LmtpbmQgIT09ICdncm91cCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgICB9XG4gICAgICBsZXQgcmVzdWx0OiBDb252ZXJzYXRpb25TdW1tYXJ5IHwgQ29udmVyc2F0aW9uSW52aXRlO1xuICAgICAgaWYoYWNjZXB0KSB7XG4gICAgICAgIGNvbnN0IGludml0ZXIgPSBhd2FpdCBtZW1iZXIocmVhZCwgY3VycmVudC5fa2V5LCBpbnZpdGUuaW52aXRlZEJ5UGVyc29uYUlkKTtcbiAgICAgICAgaWYoIVsnb3duZXInLCAnYWRtaW4nXS5pbmNsdWRlcyhpbnZpdGVyLnJvbGUpIHx8IGN1cnJlbnQuYWN0aXZlTWVtYmVyQ291bnQgPj0gMjUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBhZHVsdChyZWFkLCB7cGVyc29uYUlkOiBpbnZpdGVyLnBlcnNvbmFJZCwgdXNlcklkOiBpbnZpdGVyLnVzZXJJZH0pO1xuICAgICAgICBhd2FpdCBjb25uZWN0ZWQocmVhZCwge3BlcnNvbmFJZDogaW52aXRlci5wZXJzb25hSWQsIHVzZXJJZDogaW52aXRlci51c2VySWR9LCBpZGVudGl0eS5wZXJzb25hSWQpO1xuICAgICAgICBjb25zdCBvd24gPSBhd2FpdCBhZGRNZW1iZXIocmVhZCwgY3VycmVudC5fa2V5LCBpZGVudGl0eSwgJ21lbWJlcicsIGN1cnJlbnQubGFzdFNlcXVlbmNlICsgMSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCByZWFkPENvbnZlcnNhdGlvblJlY29yZD4oYFVQREFURSBAaWQgV0lUSCB7XG4gICAgICAgICAgYWN0aXZlTWVtYmVyQ291bnQ6IEBjb3VudCwgbWVtYmVyc2hpcFJldmlzaW9uOiBAcmV2aXNpb24sIHN0YXRlOiBAc3RhdGV9XG4gICAgICAgICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYCwge2NvdW50OiBjdXJyZW50LmFjdGl2ZU1lbWJlckNvdW50ICsgMSwgaWQ6IGN1cnJlbnQuX2tleSxcbiAgICAgICAgICByZXZpc2lvbjogY3VycmVudC5tZW1iZXJzaGlwUmV2aXNpb24gKyAxLFxuICAgICAgICAgIHN0YXRlOiBjdXJyZW50LmFjdGl2ZU1lbWJlckNvdW50ICsgMSA+PSAzID8gJ2FjdGl2ZScgOiBjdXJyZW50LnN0YXRlfSk7XG4gICAgICAgIGlmKCF1cGRhdGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcigndW5hdmFpbGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBldmVudChyZWFkLCBjdXJyZW50Ll9rZXksIG93bi5lcG9jaCwgb3duLl9rZXksIHVwZGF0ZWQubWVtYmVyc2hpcFJldmlzaW9uKTtcbiAgICAgICAgcmVzdWx0ID0gc3VtbWFyeSh1cGRhdGVkLCBvd24sIGF1ZGllbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHsuLi5pbnZpdGVEdG8oaW52aXRlKSwgcmV2aXNpb246IGludml0ZS5yZXZpc2lvbiArIDEsIHN0YXRlOiAnZGVjbGluZWQnfTtcbiAgICAgICAgYXdhaXQgZXZlbnQocmVhZCwgY3VycmVudC5fa2V5LCAnJywgaW52aXRlLl9rZXksIGludml0ZS5yZXZpc2lvbiArIDEpO1xuICAgICAgfVxuICAgICAgYXdhaXQgcmVhZChgVVBEQVRFIEBpZCBXSVRIIHtjdXJyZW50S2V5OiBudWxsLCByZXNvbHZlZEF0OiBAbm93LCByZXZpc2lvbjogQHJldmlzaW9uLCBzdGF0ZTogQHN0YXRlfVxuICAgICAgICBJTiBjaGF0SW52aXRlcyBSRVRVUk4gdHJ1ZWAsIHtpZDogaW52aXRlLl9rZXksIG5vdzogRGF0ZS5ub3coKSwgcmV2aXNpb246IGludml0ZS5yZXZpc2lvbiArIDEsXG4gICAgICAgIHN0YXRlOiBhY2NlcHQgPyAnYWNjZXB0ZWQnIDogJ2RlY2xpbmVkJ30pO1xuICAgICAgYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICBjb25zdCBjaGFuZ2VNZW1iZXJzaGlwID0gKFxuICAgIGFjdGlvbjogJ2xlYXZlJyB8ICdyZW1vdmUnIHwgJ3JvbGUnIHwgJ3RyYW5zZmVyJyxcbiAgICBpbnB1dDogQ2hhbmdlTWVtYmVyUm9sZUlucHV0IHwgTGVhdmVDb252ZXJzYXRpb25JbnB1dCB8IFJlbW92ZU1lbWJlcklucHV0XG4gICk6IFByb21pc2U8Q29udmVyc2F0aW9uU3VtbWFyeT4gPT4gdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBhY3RvcihyZWFkKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxDb252ZXJzYXRpb25TdW1tYXJ5PihyZWFkLCBhY3Rpb24sIGlucHV0KTtcbiAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICB9XG4gICAgY29uc3Qgb3duQWNjZXNzID0gYXdhaXQgYWNjZXNzKHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkKTtcbiAgICBjaGVja1JldmlzaW9uKG93bkFjY2VzcywgaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbik7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGNvbnZlcnNhdGlvbihyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCk7XG4gICAgY29uc3Qgb3duID0gYXdhaXQgbWVtYmVyKHJlYWQsIGN1cnJlbnQuX2tleSwgaWRlbnRpdHkucGVyc29uYUlkKTtcbiAgICBjb25zdCB0YXJnZXRQZXJzb25hSWQgPSAncGVyc29uYUlkJyBpbiBpbnB1dCA/IGlucHV0LnBlcnNvbmFJZCA6IGlkZW50aXR5LnBlcnNvbmFJZDtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRQZXJzb25hSWQgPT09IGlkZW50aXR5LnBlcnNvbmFJZCA/IG93biA6IGF3YWl0IG1lbWJlcihyZWFkLCBjdXJyZW50Ll9rZXksIHRhcmdldFBlcnNvbmFJZCk7XG4gICAgY29uc3QgbGVhdmluZyA9IGFjdGlvbiA9PT0gJ2xlYXZlJyB8fCBhY3Rpb24gPT09ICdyZW1vdmUnO1xuICAgIGlmKChhY3Rpb24gPT09ICdyb2xlJyB8fCBhY3Rpb24gPT09ICd0cmFuc2ZlcicpICYmIChvd24ucm9sZSAhPT0gJ293bmVyJyB8fCB0YXJnZXQuX2tleSA9PT0gb3duLl9rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgaWYoYWN0aW9uID09PSAncmVtb3ZlJyAmJiAodGFyZ2V0Ll9rZXkgPT09IG93bi5fa2V5IHx8IHRhcmdldC5yb2xlID09PSAnb3duZXInXG4gICAgICB8fCAhWydvd25lcicsICdhZG1pbiddLmluY2x1ZGVzKG93bi5yb2xlKSB8fCAob3duLnJvbGUgPT09ICdhZG1pbicgJiYgdGFyZ2V0LnJvbGUgIT09ICdtZW1iZXInKSkpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICBpZihhY3Rpb24gPT09ICdsZWF2ZScgJiYgb3duLnJvbGUgPT09ICdvd25lcicgJiYgY3VycmVudC5hY3RpdmVNZW1iZXJDb3VudCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIGlmKGFjdGlvbiA9PT0gJ3JvbGUnICYmIHRhcmdldC5yb2xlID09PSAnb3duZXInKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgaWYoYWN0aW9uID09PSAndHJhbnNmZXInIHx8IChhY3Rpb24gPT09ICdyb2xlJyAmJiAncm9sZScgaW4gaW5wdXQgJiYgaW5wdXQucm9sZSA9PT0gJ2FkbWluJykpIHtcbiAgICAgIGF3YWl0IGFkdWx0KHJlYWQsIHtwZXJzb25hSWQ6IHRhcmdldC5wZXJzb25hSWQsIHVzZXJJZDogdGFyZ2V0LnVzZXJJZH0pO1xuICAgIH1cbiAgICBsZXQgb3duUmVzdWx0ID0gb3duO1xuICAgIGlmKGFjdGlvbiA9PT0gJ3RyYW5zZmVyJykge1xuICAgICAgYXdhaXQgcmVhZCgnVVBEQVRFIEBpZCBXSVRIIHtyb2xlOiBcImFkbWluXCIsIHJldmlzaW9uOiBAcmV2aXNpb259IElOIGhhc0NoYXRNZW1iZXJzaGlwIFJFVFVSTiB0cnVlJyxcbiAgICAgICAge2lkOiBvd24uX2tleSwgcmV2aXNpb246IG93bi5yZXZpc2lvbiArIDF9KTtcbiAgICAgIGF3YWl0IHJlYWQoJ1VQREFURSBAaWQgV0lUSCB7cm9sZTogXCJvd25lclwiLCByZXZpc2lvbjogQHJldmlzaW9ufSBJTiBoYXNDaGF0TWVtYmVyc2hpcCBSRVRVUk4gdHJ1ZScsXG4gICAgICAgIHtpZDogdGFyZ2V0Ll9rZXksIHJldmlzaW9uOiB0YXJnZXQucmV2aXNpb24gKyAxfSk7XG4gICAgICBvd25SZXN1bHQgPSB7Li4ub3duLCByZXZpc2lvbjogb3duLnJldmlzaW9uICsgMSwgcm9sZTogJ2FkbWluJ307XG4gICAgfSBlbHNlIGlmKGFjdGlvbiA9PT0gJ3JvbGUnICYmICdyb2xlJyBpbiBpbnB1dCkge1xuICAgICAgYXdhaXQgcmVhZCgnVVBEQVRFIEBpZCBXSVRIIHtyb2xlOiBAcm9sZSwgcmV2aXNpb246IEByZXZpc2lvbn0gSU4gaGFzQ2hhdE1lbWJlcnNoaXAgUkVUVVJOIHRydWUnLFxuICAgICAgICB7aWQ6IHRhcmdldC5fa2V5LCByZXZpc2lvbjogdGFyZ2V0LnJldmlzaW9uICsgMSwgcm9sZTogaW5wdXQucm9sZX0pO1xuICAgIH0gZWxzZSBpZihsZWF2aW5nKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGFjdGlvbiA9PT0gJ2xlYXZlJyA/ICdsZWZ0JyA6ICdyZW1vdmVkJztcbiAgICAgIGF3YWl0IHJlYWQoYFVQREFURSBAaWQgV0lUSCB7Y3VycmVudEtleTogbnVsbCwgZW5kZWRBdDogQG5vdywgZW5kZWRCeVBlcnNvbmFJZDogQGFjdG9yLFxuICAgICAgICBsZWZ0U2VxdWVuY2U6IEBzZXF1ZW5jZSwgcmV2aXNpb246IEByZXZpc2lvbiwgc3RhdGU6IEBzdGF0ZX0gSU4gaGFzQ2hhdE1lbWJlcnNoaXAgUkVUVVJOIHRydWVgLCB7XG4gICAgICAgIGFjdG9yOiBpZGVudGl0eS5wZXJzb25hSWQsIGlkOiB0YXJnZXQuX2tleSwgbm93OiBEYXRlLm5vdygpLCByZXZpc2lvbjogdGFyZ2V0LnJldmlzaW9uICsgMSxcbiAgICAgICAgc2VxdWVuY2U6IGN1cnJlbnQubGFzdFNlcXVlbmNlLCBzdGF0ZVxuICAgICAgfSk7XG4gICAgICBpZihhY3Rpb24gPT09ICdsZWF2ZScpIHtcbiAgICAgICAgb3duUmVzdWx0ID0gey4uLm93biwgbGVmdFNlcXVlbmNlOiBjdXJyZW50Lmxhc3RTZXF1ZW5jZSwgcmV2aXNpb246IG93bi5yZXZpc2lvbiArIDEsIHN0YXRlfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHJlYWQoYEZPUiBlZGdlIElOIGhhc0NvbnZlcnNhdGlvbiBGSUxURVIgZWRnZS5fZnJvbSA9PSBAZnJvbSBBTkQgZWRnZS5fdG8gPT0gQHRvXG4gICAgICAgIExFVCByZW1haW5pbmcgPSBGSVJTVChGT1IgbWVtYmVyIElOIGhhc0NoYXRNZW1iZXJzaGlwIEZJTFRFUiBtZW1iZXIuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkXG4gICAgICAgICAgQU5EIG1lbWJlci51c2VySWQgPT0gQHVzZXJJZCBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnIExJTUlUIDEgUkVUVVJOIHRydWUpXG4gICAgICAgIEZJTFRFUiByZW1haW5pbmcgIT0gdHJ1ZSBSRU1PVkUgZWRnZSBJTiBoYXNDb252ZXJzYXRpb24gUkVUVVJOIHRydWVgLCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiBjdXJyZW50Ll9rZXksIGZyb206IGB1c2Vycy8ke3RhcmdldC51c2VySWR9YCwgdG86IGBjb252ZXJzYXRpb25zLyR7Y3VycmVudC5fa2V5fWAsIHVzZXJJZDogdGFyZ2V0LnVzZXJJZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmKGxlYXZpbmcgfHwgKGFjdGlvbiA9PT0gJ3JvbGUnICYmICdyb2xlJyBpbiBpbnB1dCAmJiBpbnB1dC5yb2xlID09PSAnbWVtYmVyJykpIHtcbiAgICAgIGF3YWl0IHJlYWQoYEZPUiBpbnZpdGUgSU4gY2hhdEludml0ZXMgRklMVEVSIGludml0ZS5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWRcbiAgICAgICAgQU5EIGludml0ZS5zdGF0ZSA9PSAncGVuZGluZycgQU5EIChpbnZpdGUuaW52aXRlZEJ5UGVyc29uYUlkID09IEBwZXJzb25hSWQgT1IgQGNsb3NlKVxuICAgICAgICBVUERBVEUgaW52aXRlIFdJVEgge2N1cnJlbnRLZXk6IG51bGwsIHJlc29sdmVkQXQ6IEBub3csIHJldmlzaW9uOiBpbnZpdGUucmV2aXNpb24gKyAxLCBzdGF0ZTogJ3Jldm9rZWQnfVxuICAgICAgICBJTiBjaGF0SW52aXRlcyBSRVRVUk4gdHJ1ZWAsIHtjbG9zZTogbGVhdmluZyAmJiBjdXJyZW50LmFjdGl2ZU1lbWJlckNvdW50ID09PSAxLFxuICAgICAgICBjb252ZXJzYXRpb25JZDogY3VycmVudC5fa2V5LCBub3c6IERhdGUubm93KCksIHBlcnNvbmFJZDogdGFyZ2V0LnBlcnNvbmFJZH0pO1xuICAgIH1cbiAgICBjb25zdCBjb3VudCA9IGN1cnJlbnQuYWN0aXZlTWVtYmVyQ291bnQgLSAobGVhdmluZyA/IDEgOiAwKTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgcmVhZDxDb252ZXJzYXRpb25SZWNvcmQ+KGBVUERBVEUgQGlkIFdJVEgge1xuICAgICAgYWN0aXZlTWVtYmVyQ291bnQ6IEBjb3VudCwgbWVtYmVyc2hpcFJldmlzaW9uOiBAcmV2aXNpb24sIHN0YXRlOiBAc3RhdGV9XG4gICAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgLCB7Y291bnQsIGlkOiBjdXJyZW50Ll9rZXksIHJldmlzaW9uOiBjdXJyZW50Lm1lbWJlcnNoaXBSZXZpc2lvbiArIDEsXG4gICAgICBzdGF0ZTogY291bnQgPT09IDAgPyAnY2xvc2VkJyA6IGN1cnJlbnQuc3RhdGV9KTtcbiAgICBpZighdXBkYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcigndW5hdmFpbGFibGUnKTtcbiAgICB9XG4gICAgYXdhaXQgZXZlbnQocmVhZCwgY3VycmVudC5fa2V5LCB0YXJnZXQuZXBvY2gsIHRhcmdldC5fa2V5LCB1cGRhdGVkLm1lbWJlcnNoaXBSZXZpc2lvbik7XG4gICAgY29uc3QgcmVzdWx0ID0gc3VtbWFyeSh1cGRhdGVkLCBvd25SZXN1bHQsIGF1ZGllbmNlKTtcbiAgICBhd2FpdCByZXF1ZXN0LnNhdmUocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgY29uc3QgbGlzdENvbnZlcnNhdGlvbnMgPSAoaW5wdXQ6IENoYXRMaXN0SW5wdXQpOiBQcm9taXNlPHJlYWRvbmx5IENvbnZlcnNhdGlvblN1bW1hcnlbXT4gPT5cbiAgICB0cmFuc2FjdChhc3luYyAocmVhZCkgPT4ge1xuICAgICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCByZWFkPHN0cmluZ1tdPihgUkVUVVJOIChGT1IgbWVtYmVyIElOIGhhc0NoYXRNZW1iZXJzaGlwXG4gICAgICBGSUxURVIgbWVtYmVyLnBlcnNvbmFJZCA9PSBAcGVyc29uYUlkIEFORCBtZW1iZXIudXNlcklkID09IEB1c2VySWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgICBBTkQgbWVtYmVyLmNvbnZlcnNhdGlvbklkID4gQGFmdGVyIFNPUlQgbWVtYmVyLmNvbnZlcnNhdGlvbklkIExJTUlUIEBsaW1pdCBSRVRVUk4gbWVtYmVyLmNvbnZlcnNhdGlvbklkKWAsIHtcbiAgICAgICAgLi4uaWRlbnRpdHksIGFmdGVyOiBpbnB1dC5hZnRlciB8fCAnJywgbGltaXQ6IGlucHV0LmxpbWl0IHx8IDI1XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IENvbnZlcnNhdGlvblN1bW1hcnlbXSA9IFtdO1xuICAgICAgZm9yKGNvbnN0IGlkIG9mIGlkcyB8fCBbXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhyZWFkLCBpZCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGNvbnZlcnNhdGlvbihyZWFkLCBpZCk7XG4gICAgICAgICAgaWYoY3VycmVudC5raW5kID09PSAnZGlyZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgcGVlciA9IGF3YWl0IHJlYWQ8TWVtYmVyUmVjb3JkPihgRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcCBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBpZFxuICAgICAgICAgICAgQU5EIG1lbWJlci5wZXJzb25hSWQgIT0gQHBlcnNvbmFJZCBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnIExJTUlUIDEgUkVUVVJOIG1lbWJlcmAsIHtpZCwgcGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWR9KTtcbiAgICAgICAgICAgIGlmKCFwZWVyKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGVkKHJlYWQsIGlkZW50aXR5LCBwZWVyLnBlcnNvbmFJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdHMucHVzaChzdW1tYXJ5KGN1cnJlbnQsIGF3YWl0IG1lbWJlcihyZWFkLCBpZCwgaWRlbnRpdHkucGVyc29uYUlkKSwgYXVkaWVuY2UsIHRydWUpKTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGlmKCEoZXJyb3IgaW5zdGFuY2VvZiBDaGF0RXJyb3IpIHx8IGVycm9yLmNvZGUgIT09ICdmb3JiaWRkZW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xuICBjb25zdCBsaXN0SW52aXRlcyA9IChpbnB1dDogQ2hhdExpc3RJbnB1dCk6IFByb21pc2U8cmVhZG9ubHkgQ29udmVyc2F0aW9uSW52aXRlW10+ID0+IHRyYW5zYWN0KGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHJlYWQ8SW52aXRlUmVjb3JkW10+KGBSRVRVUk4gKEZPUiBpbnZpdGUgSU4gY2hhdEludml0ZXNcbiAgICAgIEZJTFRFUiBpbnZpdGUuaW52aXRlZVBlcnNvbmFJZCA9PSBAcGVyc29uYUlkIEFORCBpbnZpdGUuaW52aXRlZVVzZXJJZCA9PSBAdXNlcklkIEFORCBpbnZpdGUuc3RhdGUgPT0gJ3BlbmRpbmcnXG4gICAgICAgIEFORCBpbnZpdGUuZXhwaXJlc0F0ID4gQG5vdyBBTkQgaW52aXRlLl9rZXkgPiBAYWZ0ZXJcbiAgICAgIExFVCBjb252ZXJzYXRpb24gPSBET0NVTUVOVCgnY29udmVyc2F0aW9ucycsIGludml0ZS5jb252ZXJzYXRpb25JZClcbiAgICAgIExFVCBpbnZpdGVyID0gRE9DVU1FTlQoJ3BlcnNvbmFzJywgaW52aXRlLmludml0ZWRCeVBlcnNvbmFJZClcbiAgICAgIExFVCBpbnZpdGVyVXNlciA9IERPQ1VNRU5UKCd1c2VycycsIGludml0ZXIudXNlcklkKVxuICAgICAgTEVUIGludml0ZXJNZW1iZXJzaGlwID0gRklSU1QoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcFxuICAgICAgICBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IGludml0ZS5jb252ZXJzYXRpb25JZCBBTkQgbWVtYmVyLnBlcnNvbmFJZCA9PSBpbnZpdGUuaW52aXRlZEJ5UGVyc29uYUlkXG4gICAgICAgICAgQU5EIG1lbWJlci51c2VySWQgPT0gaW52aXRlci51c2VySWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJyBBTkQgbWVtYmVyLnJvbGUgSU4gWydvd25lcicsICdhZG1pbiddXG4gICAgICAgIExJTUlUIDEgUkVUVVJOIHRydWUpXG4gICAgICBMRVQgYmxvY2tlZCA9IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb24gRklMVEVSIGVkZ2UudHlwZSA9PSAnYmxvY2snXG4gICAgICAgIEFORCAoKGVkZ2UuX2Zyb20gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZCksIENPTkNBVCgndXNlcnMvJywgQHVzZXJJZCldXG4gICAgICAgICAgQU5EIGVkZ2UuX3RvIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIGludml0ZS5pbnZpdGVkQnlQZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIGludml0ZXIudXNlcklkKV0pXG4gICAgICAgICAgT1IgKGVkZ2UuX3RvIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIEBwZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIEB1c2VySWQpXVxuICAgICAgICAgIEFORCBlZGdlLl9mcm9tIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIGludml0ZS5pbnZpdGVkQnlQZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIGludml0ZXIudXNlcklkKV0pKVxuICAgICAgICBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgRklMVEVSIGNvbnZlcnNhdGlvbi5jaGF0U2NoZW1hVmVyc2lvbiA9PSAxIEFORCBjb252ZXJzYXRpb24uc3RhdGUgSU4gWydhY3RpdmUnLCAnZm9ybWluZyddXG4gICAgICAgIEFORCBpbnZpdGVyICE9IG51bGwgQU5EIGludml0ZXJVc2VyICE9IG51bGwgQU5EIGludml0ZXIuYWN0aXZlICE9IGZhbHNlIEFORCBpbnZpdGVyVXNlci5hY3RpdmUgIT0gZmFsc2VcbiAgICAgICAgQU5EIGludml0ZXJNZW1iZXJzaGlwID09IHRydWUgQU5EIGJsb2NrZWQgIT0gdHJ1ZVxuICAgICAgU09SVCBpbnZpdGUuX2tleSBMSU1JVCBAbGltaXQgUkVUVVJOIGludml0ZSlgLCB7Li4uaWRlbnRpdHksIGFmdGVyOiBpbnB1dC5hZnRlciB8fCAnJywgbGltaXQ6IGlucHV0LmxpbWl0IHx8IDI1LCBub3c6IERhdGUubm93KCl9KTtcbiAgICByZXR1cm4gKHJlY29yZHMgfHwgW10pLm1hcChpbnZpdGVEdG8pO1xuICB9KTtcbiAgY29uc3QgZ2V0UGFydGljaXBhbnRzID0gKGlucHV0OiB7cmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZ30pOiBQcm9taXNlPHJlYWRvbmx5IENvbnZlcnNhdGlvbk1lbWJlcnNoaXBbXT4gPT5cbiAgICB0cmFuc2FjdChhc3luYyAocmVhZCkgPT4ge1xuICAgICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgICBhd2FpdCBhY2Nlc3MocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQpO1xuICAgICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHJlYWQ8TWVtYmVyUmVjb3JkW10+KGBSRVRVUk4gKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXBcbiAgICAgICAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKCdwZXJzb25hcycsIG1lbWJlci5wZXJzb25hSWQpIExFVCB1c2VyID0gRE9DVU1FTlQoJ3VzZXJzJywgbWVtYmVyLnVzZXJJZClcbiAgICAgICAgTEVUIGJsb2NrZWQgPSBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2Jsb2NrJ1xuICAgICAgICAgIEFORCAoKGVkZ2UuX2Zyb20gSU4gW0B2aWV3ZXJQZXJzb25hLCBAdmlld2VyVXNlcl1cbiAgICAgICAgICAgIEFORCBlZGdlLl90byBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBtZW1iZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBtZW1iZXIudXNlcklkKV0pXG4gICAgICAgICAgT1IgKGVkZ2UuX3RvIElOIFtAdmlld2VyUGVyc29uYSwgQHZpZXdlclVzZXJdXG4gICAgICAgICAgICBBTkQgZWRnZS5fZnJvbSBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBtZW1iZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBtZW1iZXIudXNlcklkKV0pKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgICBGSUxURVIgcGVyc29uYSAhPSBudWxsIEFORCB1c2VyICE9IG51bGwgQU5EIHBlcnNvbmEuYWN0aXZlICE9IGZhbHNlIEFORCB1c2VyLmFjdGl2ZSAhPSBmYWxzZVxuICAgICAgICAgIEFORCBwZXJzb25hLnVzZXJJZCA9PSBtZW1iZXIudXNlcklkIEFORCBibG9ja2VkICE9IHRydWVcbiAgICAgICAgU09SVCBtZW1iZXIucGVyc29uYUlkIExJTUlUIDI1IFJFVFVSTiBtZW1iZXIpYCwge1xuICAgICAgICBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIHZpZXdlclBlcnNvbmE6IGBwZXJzb25hcy8ke2lkZW50aXR5LnBlcnNvbmFJZH1gLCB2aWV3ZXJVc2VyOiBgdXNlcnMvJHtpZGVudGl0eS51c2VySWR9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKHJlY29yZHMgfHwgW10pLm1hcChtZW1iZXJzaGlwRHRvKTtcbiAgICB9KTtcbiAgcmV0dXJuIHtcbiAgICBhY2NlcHRJbnZpdGU6IChpbnB1dDogQWNjZXB0SW52aXRlSW5wdXQpID0+IHJlc29sdmVJbnZpdGUoaW5wdXQsIHRydWUpIGFzIFByb21pc2U8Q29udmVyc2F0aW9uU3VtbWFyeT4sXG4gICAgY2hhbmdlTWVtYmVyUm9sZTogKGlucHV0OiBDaGFuZ2VNZW1iZXJSb2xlSW5wdXQpID0+IGNoYW5nZU1lbWJlcnNoaXAoJ3JvbGUnLCBpbnB1dCksXG4gICAgY3JlYXRlR3JvdXAsXG4gICAgZGVjbGluZUludml0ZTogKGlucHV0OiBBY2NlcHRJbnZpdGVJbnB1dCkgPT4gcmVzb2x2ZUludml0ZShpbnB1dCwgZmFsc2UpIGFzIFByb21pc2U8Q29udmVyc2F0aW9uSW52aXRlPixcbiAgICBnZXRPckNyZWF0ZURpcmVjdCwgZ2V0UGFydGljaXBhbnRzLCBpbnZpdGVNZW1iZXIsXG4gICAgbGVhdmVDb252ZXJzYXRpb246IChpbnB1dDogTGVhdmVDb252ZXJzYXRpb25JbnB1dCkgPT4gY2hhbmdlTWVtYmVyc2hpcCgnbGVhdmUnLCBpbnB1dCksXG4gICAgbGlzdENvbnZlcnNhdGlvbnMsIGxpc3RJbnZpdGVzLFxuICAgIHJlbW92ZU1lbWJlcjogKGlucHV0OiBSZW1vdmVNZW1iZXJJbnB1dCkgPT4gY2hhbmdlTWVtYmVyc2hpcCgncmVtb3ZlJywgaW5wdXQpLFxuICAgIHRyYW5zZmVyT3duZXJzaGlwOiAoaW5wdXQ6IFRyYW5zZmVyT3duZXJzaGlwSW5wdXQpID0+IGNoYW5nZU1lbWJlcnNoaXAoJ3RyYW5zZmVyJywgaW5wdXQpXG4gIH07XG59O1xuZXhwb3J0IHR5cGUgQ2hhdFJlcG9zaXRvcnkgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVEdXJhYmxlQ29udmVyc2F0aW9uUmVwb3NpdG9yeT47XG5cbmNvbnN0IHZhbGlkID0gKGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBpZighY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignaW52YWxpZF9yZXF1ZXN0Jyk7XG4gIH1cbn07XG5jb25zdCBtdXRhdGlvbiA9IChpbnB1dDoge3JlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjsgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZ30pOiB2b2lkID0+IHtcbiAgdmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5pZGVtcG90ZW5jeUtleSlcbiAgICAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5leHBlY3RlZFJldmlzaW9uKSAmJiBpbnB1dC5leHBlY3RlZFJldmlzaW9uID4gMCk7XG59O1xuY29uc3QgY29udmVyc2F0aW9uTXV0YXRpb24gPSAoaW5wdXQ6IExlYXZlQ29udmVyc2F0aW9uSW5wdXQpOiB2b2lkID0+IHtcbiAgbXV0YXRpb24oaW5wdXQpO1xuICB2YWxpZChpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKSk7XG59O1xuY29uc3QgdGFyZ2V0ZWRNdXRhdGlvbiA9IChpbnB1dDogUmVtb3ZlTWVtYmVySW5wdXQpOiB2b2lkID0+IHtcbiAgY29udmVyc2F0aW9uTXV0YXRpb24oaW5wdXQpO1xuICB2YWxpZChpc0NoYXRJZGVudGlmaWVyKGlucHV0LnBlcnNvbmFJZCkpO1xufTtcbmNvbnN0IGxpc3QgPSAoaW5wdXQ6IENoYXRMaXN0SW5wdXQpOiB2b2lkID0+IHZhbGlkKEJvb2xlYW4oaW5wdXQpXG4gICYmIChpbnB1dC5saW1pdCA9PT0gdW5kZWZpbmVkIHx8IChOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5saW1pdCkgJiYgaW5wdXQubGltaXQgPiAwICYmIGlucHV0LmxpbWl0IDw9IDUwKSlcbiAgJiYgKGlucHV0LmFmdGVyID09PSB1bmRlZmluZWQgfHwgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5hZnRlcikpKTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUR1cmFibGVDb252ZXJzYXRpb25BY3Rpb25zID0gKFxuICBpZGVudGl0eTogQ2hhdElkZW50aXR5LCByZXBvc2l0b3J5OiBDaGF0UmVwb3NpdG9yeVxuKSA9PiB7XG4gIGlmKCFpZGVudGl0eSB8fCAhaXNDaGF0SWRlbnRpZmllcihpZGVudGl0eS5wZXJzb25hSWQpIHx8ICFpc0NoYXRJZGVudGlmaWVyKGlkZW50aXR5LnVzZXJJZCkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFjY2VwdEludml0ZTogYXN5bmMgKGlucHV0OiBBY2NlcHRJbnZpdGVJbnB1dCkgPT4ge1xuICAgICAgbXV0YXRpb24oaW5wdXQpO1xuICAgICAgdmFsaWQoaXNDaGF0SWRlbnRpZmllcihpbnB1dC5pbnZpdGVJZCkpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkuYWNjZXB0SW52aXRlKGlucHV0KTtcbiAgICB9LFxuICAgIGNoYW5nZU1lbWJlclJvbGU6IGFzeW5jIChpbnB1dDogQ2hhbmdlTWVtYmVyUm9sZUlucHV0KSA9PiB7XG4gICAgICB0YXJnZXRlZE11dGF0aW9uKGlucHV0KTtcbiAgICAgIHZhbGlkKFsnYWRtaW4nLCAnbWVtYmVyJ10uaW5jbHVkZXMoaW5wdXQucm9sZSkpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkuY2hhbmdlTWVtYmVyUm9sZShpbnB1dCk7XG4gICAgfSxcbiAgICBjcmVhdGVHcm91cDogYXN5bmMgKGlucHV0OiBDcmVhdGVHcm91cElucHV0KSA9PiB7XG4gICAgICB2YWxpZChCb29sZWFuKGlucHV0KSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LmlkZW1wb3RlbmN5S2V5KSAmJiB0eXBlb2YgaW5wdXQubmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgJiYgaW5wdXQubmFtZS50cmltKCkubGVuZ3RoID4gMCAmJiBpbnB1dC5uYW1lLmxlbmd0aCA8PSAyMDBcbiAgICAgICAgJiYgQXJyYXkuaXNBcnJheShpbnB1dC5tZW1iZXJQZXJzb25hSWRzKVxuICAgICAgICAmJiBpbnB1dC5tZW1iZXJQZXJzb25hSWRzLmxlbmd0aCA+PSAyICYmIGlucHV0Lm1lbWJlclBlcnNvbmFJZHMubGVuZ3RoIDw9IDI0XG4gICAgICAgICYmIGlucHV0Lm1lbWJlclBlcnNvbmFJZHMuZXZlcnkoKGlkKSA9PiBpc0NoYXRJZGVudGlmaWVyKGlkKSAmJiBpZCAhPT0gaWRlbnRpdHkucGVyc29uYUlkKVxuICAgICAgICAmJiBuZXcgU2V0KGlucHV0Lm1lbWJlclBlcnNvbmFJZHMpLnNpemUgPT09IGlucHV0Lm1lbWJlclBlcnNvbmFJZHMubGVuZ3RoKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmNyZWF0ZUdyb3VwKGlucHV0KTtcbiAgICB9LFxuICAgIGRlY2xpbmVJbnZpdGU6IGFzeW5jIChpbnB1dDogQWNjZXB0SW52aXRlSW5wdXQpID0+IHtcbiAgICAgIG11dGF0aW9uKGlucHV0KTtcbiAgICAgIHZhbGlkKGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuaW52aXRlSWQpKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmRlY2xpbmVJbnZpdGUoaW5wdXQpO1xuICAgIH0sXG4gICAgZ2V0T3JDcmVhdGVEaXJlY3Q6IGFzeW5jIChpbnB1dDogQ3JlYXRlRGlyZWN0SW5wdXQpID0+IHtcbiAgICAgIHZhbGlkKEJvb2xlYW4oaW5wdXQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQucGFydGljaXBhbnRQZXJzb25hSWQpXG4gICAgICAgICYmIGlucHV0LnBhcnRpY2lwYW50UGVyc29uYUlkICE9PSBpZGVudGl0eS5wZXJzb25hSWQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkuZ2V0T3JDcmVhdGVEaXJlY3QoaW5wdXQpO1xuICAgIH0sXG4gICAgZ2V0UGFydGljaXBhbnRzOiBhc3luYyAoaW5wdXQ6IHtyZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nfSkgPT4ge1xuICAgICAgdmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkuZ2V0UGFydGljaXBhbnRzKGlucHV0KTtcbiAgICB9LFxuICAgIGludml0ZU1lbWJlcjogYXN5bmMgKGlucHV0OiBJbnZpdGVNZW1iZXJJbnB1dCkgPT4ge1xuICAgICAgdGFyZ2V0ZWRNdXRhdGlvbihpbnB1dCk7XG4gICAgICB2YWxpZChpbnB1dC5wZXJzb25hSWQgIT09IGlkZW50aXR5LnBlcnNvbmFJZCk7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5pbnZpdGVNZW1iZXIoaW5wdXQpO1xuICAgIH0sXG4gICAgbGVhdmVDb252ZXJzYXRpb246IGFzeW5jIChpbnB1dDogTGVhdmVDb252ZXJzYXRpb25JbnB1dCkgPT4ge1xuICAgICAgY29udmVyc2F0aW9uTXV0YXRpb24oaW5wdXQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkubGVhdmVDb252ZXJzYXRpb24oaW5wdXQpO1xuICAgIH0sXG4gICAgbGlzdENvbnZlcnNhdGlvbnM6IGFzeW5jIChpbnB1dDogQ2hhdExpc3RJbnB1dCA9IHt9KSA9PiB7XG4gICAgICBsaXN0KGlucHV0KTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5Lmxpc3RDb252ZXJzYXRpb25zKGlucHV0KTtcbiAgICB9LFxuICAgIGxpc3RJbnZpdGVzOiBhc3luYyAoaW5wdXQ6IENoYXRMaXN0SW5wdXQgPSB7fSkgPT4ge1xuICAgICAgbGlzdChpbnB1dCk7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5saXN0SW52aXRlcyhpbnB1dCk7XG4gICAgfSxcbiAgICByZW1vdmVNZW1iZXI6IGFzeW5jIChpbnB1dDogUmVtb3ZlTWVtYmVySW5wdXQpID0+IHtcbiAgICAgIHRhcmdldGVkTXV0YXRpb24oaW5wdXQpO1xuICAgICAgdmFsaWQoaW5wdXQucGVyc29uYUlkICE9PSBpZGVudGl0eS5wZXJzb25hSWQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkucmVtb3ZlTWVtYmVyKGlucHV0KTtcbiAgICB9LFxuICAgIHRyYW5zZmVyT3duZXJzaGlwOiBhc3luYyAoaW5wdXQ6IFRyYW5zZmVyT3duZXJzaGlwSW5wdXQpID0+IHtcbiAgICAgIHRhcmdldGVkTXV0YXRpb24oaW5wdXQpO1xuICAgICAgdmFsaWQoaW5wdXQucGVyc29uYUlkICE9PSBpZGVudGl0eS5wZXJzb25hSWQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkudHJhbnNmZXJPd25lcnNoaXAoaW5wdXQpO1xuICAgIH1cbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInJhbmRvbVVVSUQiLCJDaGF0RXJyb3IiLCJhcHBlbmRDaGF0RXZlbnQiLCJjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciIsImlzQ2hhdElkZW50aWZpZXIiLCJjcmVhdGVEdXJhYmxlVHJhbnNhY3Rpb24iLCJoYXNoIiwiaW5wdXQiLCJ1cGRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwiaW52aXRlTWlsbGlzZWNvbmRzIiwibWVtYmVyc2hpcER0byIsInJlY29yZCIsImNvbnZlcnNhdGlvbklkIiwiZXBvY2giLCJqb2luU2VxdWVuY2UiLCJsZWZ0U2VxdWVuY2UiLCJwZXJzb25hSWQiLCJyZXZpc2lvbiIsInJvbGUiLCJzdGF0ZSIsImludml0ZUR0byIsImV4cGlyZXNBdCIsImludml0ZUlkIiwiX2tleSIsImludml0ZWRCeVBlcnNvbmFJZCIsImNyZWF0ZUR1cmFibGVDb252ZXJzYXRpb25SZXBvc2l0b3J5IiwiY29udGV4dCIsImlkZW50aXR5Iiwib3B0aW9ucyIsImF1ZGllbmNlIiwidHJhbnNhY3QiLCJleGNsdXNpdmUiLCJyZWFkIiwicmVhZENvbGxlY3Rpb25zIiwicXVlcnkiLCJzdW1tYXJ5IiwiY29udmVyc2F0aW9uIiwibWVtYmVyIiwiaW5jbHVkZU5hbWUiLCJhY3RpdmVNZW1iZXJDb3VudCIsImtpbmQiLCJtZW1iZXJzaGlwIiwibWVtYmVyc2hpcFJldmlzaW9uIiwibmFtZSIsInByb2plY3ROYW1lIiwidW5kZWZpbmVkIiwiYWN0b3IiLCJhbGxvd2VkIiwiYWR1bHQiLCJ3aG8iLCJhdXRob3JpemVJZGVudGl0eSIsImNvbm5lY3RlZCIsImZyb20iLCJ0YXJnZXQiLCJhY3RvclVzZXIiLCJ1c2VySWQiLCJmcm9tVXNlciIsInRvIiwiaWQiLCJ2YWx1ZSIsImNoYXRTY2hlbWFWZXJzaW9uIiwiYWNjZXNzIiwicHVycG9zZSIsImNoZWNrUmV2aXNpb24iLCJlbnRyeSIsImV4cGVjdGVkIiwiZXZlbnQiLCJyZXNvdXJjZUlkIiwiYWN0b3JQZXJzb25hSWQiLCJtZW1iZXJzaGlwRXBvY2giLCJyZWNlaXB0IiwiYWN0aW9uIiwia2V5IiwiaWRlbXBvdGVuY3lLZXkiLCJwYXlsb2FkSGFzaCIsInByaW9yIiwicmVzdWx0Iiwic2F2ZSIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsIm93bmVyVXNlcklkIiwicmF0ZUxpbWl0IiwiTWF0aCIsImZsb29yIiwiYWRkTWVtYmVyIiwiZXZlbnRTZXF1ZW5jZSIsIl9mcm9tIiwiX3RvIiwiYWNjZXB0ZWRBdCIsImN1cnJlbnRLZXkiLCJqb2luRXZlbnRTZXF1ZW5jZSIsImFkZEludml0ZSIsImludml0ZWVQZXJzb25hSWQiLCJpbnZpdGVlVXNlcklkIiwiY3JlYXRlZEF0IiwiZXhwaXJlSW52aXRlcyIsImdldE9yQ3JlYXRlRGlyZWN0IiwicGFydGljaXBhbnRQZXJzb25hSWQiLCJwYWlyIiwic29ydCIsImV4aXN0aW5nIiwibGFzdFNlcXVlbmNlIiwiY3JlYXRlZEJ5UGVyc29uYUlkIiwiZGlyZWN0UGFpcktleSIsImlzRGlyZWN0Iiwib3duIiwiY3JlYXRlR3JvdXAiLCJyZXF1ZXN0IiwidGFyZ2V0cyIsIm1lbWJlclBlcnNvbmFJZHMiLCJwdXNoIiwiY29udGVudFZlcnNpb24iLCJuYW1lQ29udGVudFZlcnNpb24iLCJuYW1lRGVjaXNpb24iLCJjbGFzc2lmeU5hbWUiLCJpbnZpdGVNZW1iZXIiLCJleHBlY3RlZFJldmlzaW9uIiwiY291bnRzIiwiYWN0aXZlIiwidG90YWwiLCJyZXNvbHZlSW52aXRlIiwiYWNjZXB0IiwiaW52aXRlIiwiY3VycmVudCIsImludml0ZXIiLCJpbmNsdWRlcyIsInVwZGF0ZWQiLCJjb3VudCIsImNoYW5nZU1lbWJlcnNoaXAiLCJvd25BY2Nlc3MiLCJ0YXJnZXRQZXJzb25hSWQiLCJsZWF2aW5nIiwib3duUmVzdWx0Iiwic2VxdWVuY2UiLCJjbG9zZSIsImxpc3RDb252ZXJzYXRpb25zIiwiaWRzIiwiYWZ0ZXIiLCJsaW1pdCIsInJlc3VsdHMiLCJwZWVyIiwiZXJyb3IiLCJjb2RlIiwibGlzdEludml0ZXMiLCJyZWNvcmRzIiwibWFwIiwiZ2V0UGFydGljaXBhbnRzIiwidmlld2VyUGVyc29uYSIsInZpZXdlclVzZXIiLCJhY2NlcHRJbnZpdGUiLCJjaGFuZ2VNZW1iZXJSb2xlIiwiZGVjbGluZUludml0ZSIsImxlYXZlQ29udmVyc2F0aW9uIiwicmVtb3ZlTWVtYmVyIiwidHJhbnNmZXJPd25lcnNoaXAiLCJ2YWxpZCIsImNvbmRpdGlvbiIsIm11dGF0aW9uIiwiQm9vbGVhbiIsIk51bWJlciIsImlzU2FmZUludGVnZXIiLCJjb252ZXJzYXRpb25NdXRhdGlvbiIsInRhcmdldGVkTXV0YXRpb24iLCJsaXN0IiwiY3JlYXRlRHVyYWJsZUNvbnZlcnNhdGlvbkFjdGlvbnMiLCJyZXBvc2l0b3J5IiwidHJpbSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsImV2ZXJ5IiwiU2V0Iiwic2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUEsd0dBQXdHLEdBQ3hHLFNBQVFBLFVBQVUsRUFBRUMsVUFBVSxRQUFPLGNBQWM7QUFFbkQsU0FBUUMsU0FBUyxRQUFPLGNBQWM7QUFDdEMsU0FBUUMsZUFBZSxRQUFPLGNBQWM7QUFDNUMsU0FBUUMsMEJBQTBCLEVBQUVDLGdCQUFnQixRQUFPLGtCQUFrQjtBQUM3RSxTQUFRQyx3QkFBd0IsUUFBTyxtQkFBbUI7QUFtQzFE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
729
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2NvbnZlcnNhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCwgbm8tdW5kZXJzY29yZS1kYW5nbGUgLS0gT3JkZXJlZCB0cmFuc2FjdGlvbnMgYW5kIEFyYW5nbyBpZGVudGl0aWVzLiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCByYW5kb21VVUlEfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbmltcG9ydCB7Q2hhdEVycm9yfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQge2FwcGVuZENoYXRFdmVudH0gZnJvbSAnLi9ldmVudHMuanMnO1xuaW1wb3J0IHtjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciwgaXNDaGF0SWRlbnRpZmllcn0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcbmltcG9ydCB7Y3JlYXRlRHVyYWJsZVRyYW5zYWN0aW9ufSBmcm9tICcuL3RyYW5zYWN0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0F1dGhvcml6ZWRNZW1iZXJzaGlwLCBDaGF0SWRlbnRpdHksIENoYXRRdWVyeX0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQWNjZXB0SW52aXRlSW5wdXQsIENoYW5nZU1lbWJlclJvbGVJbnB1dCwgQ29udmVyc2F0aW9uSW52aXRlLCBDb252ZXJzYXRpb25NZW1iZXJzaGlwLFxuICBDb252ZXJzYXRpb25TdW1tYXJ5LCBDcmVhdGVEaXJlY3RJbnB1dCwgQ3JlYXRlR3JvdXBJbnB1dCwgSW52aXRlTWVtYmVySW5wdXQsXG4gIExlYXZlQ29udmVyc2F0aW9uSW5wdXQsIE1lbWJlcnNoaXBSb2xlLCBSZW1vdmVNZW1iZXJJbnB1dCwgVHJhbnNmZXJPd25lcnNoaXBJbnB1dFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25SZWNvcmQge1xuICByZWFkb25seSBfa2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjdGl2ZU1lbWJlckNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNoYXRTY2hlbWFWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGtpbmQ6ICdkaXJlY3QnIHwgJ2dyb3VwJztcbiAgcmVhZG9ubHkgbGFzdFNlcXVlbmNlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lQ29udGVudFZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVEZWNpc2lvbj86IHVua25vd247XG4gIHJlYWRvbmx5IHN0YXRlOiAnYWN0aXZlJyB8ICdjbG9zZWQnIHwgJ2Zvcm1pbmcnO1xufVxuaW50ZXJmYWNlIE1lbWJlclJlY29yZCBleHRlbmRzIENvbnZlcnNhdGlvbk1lbWJlcnNoaXAge1xuICByZWFkb25seSBfa2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEludml0ZVJlY29yZCBleHRlbmRzIENvbnZlcnNhdGlvbkludml0ZSB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgaW52aXRlZVBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSBpbnZpdGVlVXNlcklkOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIENoYXRMaXN0SW5wdXQge1xuICByZWFkb25seSBhZnRlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG59XG5jb25zdCBoYXNoID0gKGlucHV0OiB1bmtub3duKTogc3RyaW5nID0+IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShpbnB1dCkpLmRpZ2VzdCgnaGV4Jyk7XG5jb25zdCBpbnZpdGVNaWxsaXNlY29uZHMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDtcbmNvbnN0IG1lbWJlcnNoaXBEdG8gPSAocmVjb3JkOiBDb252ZXJzYXRpb25NZW1iZXJzaGlwKTogQ29udmVyc2F0aW9uTWVtYmVyc2hpcCA9PiAoe1xuICBjb252ZXJzYXRpb25JZDogcmVjb3JkLmNvbnZlcnNhdGlvbklkLCBlcG9jaDogcmVjb3JkLmVwb2NoLCBqb2luU2VxdWVuY2U6IHJlY29yZC5qb2luU2VxdWVuY2UsXG4gIGxlZnRTZXF1ZW5jZTogcmVjb3JkLmxlZnRTZXF1ZW5jZSwgcGVyc29uYUlkOiByZWNvcmQucGVyc29uYUlkLCByZXZpc2lvbjogcmVjb3JkLnJldmlzaW9uLFxuICByb2xlOiByZWNvcmQucm9sZSwgc3RhdGU6IHJlY29yZC5zdGF0ZVxufSk7XG5jb25zdCBpbnZpdGVEdG8gPSAocmVjb3JkOiBJbnZpdGVSZWNvcmQpOiBDb252ZXJzYXRpb25JbnZpdGUgPT4gKHtcbiAgY29udmVyc2F0aW9uSWQ6IHJlY29yZC5jb252ZXJzYXRpb25JZCwgZXhwaXJlc0F0OiByZWNvcmQuZXhwaXJlc0F0LCBpbnZpdGVJZDogcmVjb3JkLl9rZXksXG4gIGludml0ZWRCeVBlcnNvbmFJZDogcmVjb3JkLmludml0ZWRCeVBlcnNvbmFJZCwgcmV2aXNpb246IHJlY29yZC5yZXZpc2lvbiwgc3RhdGU6IHJlY29yZC5zdGF0ZVxufSk7XG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVDb252ZXJzYXRpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgYXVkaWVuY2U/OiAnbW9iaWxlJyB8ICd3ZWInO1xuICAvKiogQWxsIHBvbGljeSByZWFkcyBtdXN0IHVzZSB0aGlzIHF1ZXJ5OyBleGNlcHRpb25zIGZhaWwgdGhlIHRyYW5zYWN0aW9uLiAqL1xuICByZWFkb25seSBhdXRob3JpemVJZGVudGl0eTogKHJlYWQ6IENoYXRRdWVyeSwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgY2xhc3NpZnlOYW1lOiAobmFtZTogc3RyaW5nLCBjb250ZW50VmVyc2lvbjogc3RyaW5nKSA9PiB1bmtub3duO1xuICByZWFkb25seSBwcm9qZWN0TmFtZTogKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uUmVjb3JkLCBhdWRpZW5jZTogJ21vYmlsZScgfCAnd2ViJykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSByZWFkQ29sbGVjdGlvbnM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIENhbGxlciBvd25zIHRyYW5zYWN0aW9uL2xvY2tzL2NvbW1pdCB3aGVuIHN1cHBsaWVkOyBubyBpbmRlcGVuZGVudCBkYXRhYmFzZSBhY2Nlc3Mgb2NjdXJzLiAqL1xuICByZWFkb25seSBxdWVyeT86IENoYXRRdWVyeTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUR1cmFibGVDb252ZXJzYXRpb25SZXBvc2l0b3J5ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCBpZGVudGl0eTogQ2hhdElkZW50aXR5LCBvcHRpb25zOiBEdXJhYmxlQ29udmVyc2F0aW9uT3B0aW9uc1xuKSA9PiB7XG4gIGNvbnN0IGF1ZGllbmNlID0gb3B0aW9ucy5hdWRpZW5jZSB8fCAnbW9iaWxlJztcbiAgY29uc3QgdHJhbnNhY3QgPSBjcmVhdGVEdXJhYmxlVHJhbnNhY3Rpb24oY29udGV4dCwge2V4Y2x1c2l2ZTogW1xuICAgICdjaGF0SW52aXRlcycsICdjaGF0T3V0Ym94JywgJ2NoYXRSYXRlTGltaXRzJywgJ2NoYXRSZXF1ZXN0cycsICdjb252ZXJzYXRpb25zJywgJ2hhc0NoYXRNZW1iZXJzaGlwJywgJ2hhc0NvbnZlcnNhdGlvbidcbiAgXSwgcmVhZDogWydoYXNDb25uZWN0aW9uJywgJ3BlcnNvbmFzJywgJ3VzZXJzJywgLi4uKG9wdGlvbnMucmVhZENvbGxlY3Rpb25zIHx8IFtdKV19LCBvcHRpb25zLnF1ZXJ5KTtcbiAgY29uc3Qgc3VtbWFyeSA9IChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblJlY29yZCwgbWVtYmVyOiBDb252ZXJzYXRpb25NZW1iZXJzaGlwLFxuICAgIGF1ZGllbmNlOiAnbW9iaWxlJyB8ICd3ZWInLCBpbmNsdWRlTmFtZSA9IGZhbHNlKTogQ29udmVyc2F0aW9uU3VtbWFyeSA9PiAoe1xuICAgIGFjdGl2ZU1lbWJlckNvdW50OiBjb252ZXJzYXRpb24uYWN0aXZlTWVtYmVyQ291bnQsIGNvbnZlcnNhdGlvbklkOiBjb252ZXJzYXRpb24uX2tleSxcbiAgICBraW5kOiBjb252ZXJzYXRpb24ua2luZCwgbWVtYmVyc2hpcDogbWVtYmVyc2hpcER0byhtZW1iZXIpLCBtZW1iZXJzaGlwUmV2aXNpb246IGNvbnZlcnNhdGlvbi5tZW1iZXJzaGlwUmV2aXNpb24sXG4gICAgbmFtZTogaW5jbHVkZU5hbWUgPyBvcHRpb25zLnByb2plY3ROYW1lKGNvbnZlcnNhdGlvbiwgYXVkaWVuY2UpIDogdW5kZWZpbmVkLCBzdGF0ZTogY29udmVyc2F0aW9uLnN0YXRlXG4gIH0pO1xuICBjb25zdCBhY3RvciA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnkpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBhbGxvd2VkID0gYXdhaXQgcmVhZDxib29sZWFuPihgTEVUIHBlcnNvbmEgPSBET0NVTUVOVCgncGVyc29uYXMnLCBAcGVyc29uYUlkKVxuICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgndXNlcnMnLCBAdXNlcklkKVxuICAgICAgUkVUVVJOIHBlcnNvbmEgIT0gbnVsbCBBTkQgcGVyc29uYS51c2VySWQgPT0gQHVzZXJJZCBBTkQgcGVyc29uYS5hY3RpdmUgIT0gZmFsc2VcbiAgICAgICAgQU5EIHVzZXIgIT0gbnVsbCBBTkQgdXNlci5hY3RpdmUgIT0gZmFsc2VgLCB7Li4uaWRlbnRpdHl9KTtcbiAgICBpZihhbGxvd2VkICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgYXdhaXQgYWR1bHQocmVhZCwgaWRlbnRpdHkpO1xuICB9O1xuICBjb25zdCBhZHVsdCA9IChyZWFkOiBDaGF0UXVlcnksIHdobzogQ2hhdElkZW50aXR5KTogUHJvbWlzZTx2b2lkPiA9PiBvcHRpb25zLmF1dGhvcml6ZUlkZW50aXR5KHJlYWQsIHdobyk7XG4gIGNvbnN0IGNvbm5lY3RlZCA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnksIGZyb206IENoYXRJZGVudGl0eSwgcGVyc29uYUlkOiBzdHJpbmcpOiBQcm9taXNlPENoYXRJZGVudGl0eT4gPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IHJlYWQ8Q2hhdElkZW50aXR5PihgTEVUIHBlcnNvbmEgPSBET0NVTUVOVCgncGVyc29uYXMnLCBAcGVyc29uYUlkKVxuICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgndXNlcnMnLCBwZXJzb25hLnVzZXJJZClcbiAgICAgIExFVCBmb2xsb3dpbmcgPSBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLl9mcm9tID09IEBmcm9tIEFORCBlZGdlLl90byA9PSBAdG9cbiAgICAgICAgQU5EIGVkZ2UudHlwZSA9PSAnZm9sbG93JyBBTkQgZWRnZS5hY3RpdmUgIT0gZmFsc2UgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICAgIExFVCBmb2xsb3dlZCA9IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb24gRklMVEVSIGVkZ2UuX3RvID09IEBmcm9tIEFORCBlZGdlLl9mcm9tID09IEB0b1xuICAgICAgICBBTkQgZWRnZS50eXBlID09ICdmb2xsb3cnIEFORCBlZGdlLmFjdGl2ZSAhPSBmYWxzZSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgTEVUIGJsb2NrZWQgPSBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2Jsb2NrJ1xuICAgICAgICBBTkQgKChlZGdlLl9mcm9tIElOIFtAZnJvbSwgQGZyb21Vc2VyXSBBTkQgZWRnZS5fdG8gSU4gW0B0bywgQ09OQ0FUKCd1c2Vycy8nLCBwZXJzb25hLnVzZXJJZCldKVxuICAgICAgICAgIE9SIChlZGdlLl90byBJTiBbQGZyb20sIEBmcm9tVXNlcl0gQU5EIGVkZ2UuX2Zyb20gSU4gW0B0bywgQ09OQ0FUKCd1c2Vycy8nLCBwZXJzb25hLnVzZXJJZCldKSkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICAgIEZJTFRFUiBwZXJzb25hICE9IG51bGwgQU5EIHVzZXIgIT0gbnVsbCBBTkQgcGVyc29uYS5hY3RpdmUgIT0gZmFsc2UgQU5EIHVzZXIuYWN0aXZlICE9IGZhbHNlXG4gICAgICAgIEFORCBwZXJzb25hLnVzZXJJZCAhPSBAYWN0b3JVc2VyIEFORCBmb2xsb3dpbmcgPT0gdHJ1ZSBBTkQgZm9sbG93ZWQgPT0gdHJ1ZSBBTkQgYmxvY2tlZCAhPSB0cnVlXG4gICAgICBSRVRVUk4ge3BlcnNvbmFJZDogQHBlcnNvbmFJZCwgdXNlcklkOiBwZXJzb25hLnVzZXJJZH1gLCB7XG4gICAgICBhY3RvclVzZXI6IGZyb20udXNlcklkLCBmcm9tOiBgcGVyc29uYXMvJHtmcm9tLnBlcnNvbmFJZH1gLCBmcm9tVXNlcjogYHVzZXJzLyR7ZnJvbS51c2VySWR9YCxcbiAgICAgIHBlcnNvbmFJZCwgdG86IGBwZXJzb25hcy8ke3BlcnNvbmFJZH1gXG4gICAgfSk7XG4gICAgaWYoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgfVxuICAgIGF3YWl0IGFkdWx0KHJlYWQsIHRhcmdldCk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgaWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uUmVjb3JkPiA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCByZWFkPENvbnZlcnNhdGlvblJlY29yZD4oJ1JFVFVSTiBET0NVTUVOVChcImNvbnZlcnNhdGlvbnNcIiwgQGlkKScsIHtpZH0pO1xuICAgIGlmKCF2YWx1ZSB8fCB2YWx1ZS5jaGF0U2NoZW1hVmVyc2lvbiAhPT0gMSB8fCB2YWx1ZS5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGNvbnN0IG1lbWJlciA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIHBlcnNvbmFJZDogc3RyaW5nKTogUHJvbWlzZTxNZW1iZXJSZWNvcmQ+ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHJlYWQ8TWVtYmVyUmVjb3JkPihgRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcCBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgQU5EIG1lbWJlci5wZXJzb25hSWQgPT0gQHBlcnNvbmFJZCBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnIExJTUlUIDEgUkVUVVJOIG1lbWJlcmAsIHtjb252ZXJzYXRpb25JZCwgcGVyc29uYUlkfSk7XG4gICAgaWYoIXZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuICBjb25zdCBhY2Nlc3MgPSAocmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBwdXJwb3NlOiAnaW52aXRlJyB8ICdwYXJ0aWNpcGFudHMnID0gJ3BhcnRpY2lwYW50cycpID0+XG4gICAgY3JlYXRlTWVtYmVyc2hpcEF1dGhvcml6ZXIocmVhZCkoaWRlbnRpdHksIHtjb252ZXJzYXRpb25JZCwgcHVycG9zZX0pO1xuICBjb25zdCBjaGVja1JldmlzaW9uID0gKGVudHJ5OiBBdXRob3JpemVkTWVtYmVyc2hpcCwgZXhwZWN0ZWQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGlmKGVudHJ5Lm1lbWJlcnNoaXBSZXZpc2lvbiAhPT0gZXhwZWN0ZWQgfHwgZW50cnkua2luZCAhPT0gJ2dyb3VwJykge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGV2ZW50ID0gYXN5bmMgKFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgZXBvY2g6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nLCByZXZpc2lvbjogbnVtYmVyXG4gICkgPT4ge1xuICAgIGF3YWl0IGFwcGVuZENoYXRFdmVudChyZWFkLCB7YWN0b3JQZXJzb25hSWQ6IGlkZW50aXR5LnBlcnNvbmFJZCwgY29udmVyc2F0aW9uSWQsIGtpbmQ6ICdtZW1iZXJzaGlwLmNoYW5nZWQnLFxuICAgICAgLi4uKGVwb2NoID8ge21lbWJlcnNoaXBFcG9jaDogZXBvY2h9IDoge30pLCByZXNvdXJjZUlkLCByZXZpc2lvbn0pO1xuICB9O1xuICBjb25zdCByZWNlaXB0ID0gYXN5bmMgPFQ+KHJlYWQ6IENoYXRRdWVyeSwgYWN0aW9uOiBzdHJpbmcsIGlucHV0OiB7cmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZ30pID0+IHtcbiAgICBjb25zdCBrZXkgPSBoYXNoKFtpZGVudGl0eS51c2VySWQsIGlkZW50aXR5LnBlcnNvbmFJZCwgYWN0aW9uLCBpbnB1dC5pZGVtcG90ZW5jeUtleV0pO1xuICAgIGNvbnN0IHBheWxvYWRIYXNoID0gaGFzaChpbnB1dCk7XG4gICAgY29uc3QgcHJpb3IgPSBhd2FpdCByZWFkPHtyZWFkb25seSBwYXlsb2FkSGFzaDogc3RyaW5nOyByZWFkb25seSByZXN1bHQ6IFR9PignUkVUVVJOIERPQ1VNRU5UKFwiY2hhdFJlcXVlc3RzXCIsIEBrZXkpJywge2tleX0pO1xuICAgIGlmKHByaW9yICYmIHByaW9yLnBheWxvYWRIYXNoICE9PSBwYXlsb2FkSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHtwcmlvcjogcHJpb3I/LnJlc3VsdCwgc2F2ZTogKHJlc3VsdDogVCkgPT4gcmVhZCgnSU5TRVJUIEByZWNvcmQgSU4gY2hhdFJlcXVlc3RzIFJFVFVSTiB0cnVlJywge1xuICAgICAgcmVjb3JkOiB7X2tleToga2V5LCBhZGRlZDogRGF0ZS5ub3coKSwgb3duZXJVc2VySWQ6IGlkZW50aXR5LnVzZXJJZCwgcGF5bG9hZEhhc2gsXG4gICAgICAgIHBlcnNvbmFJZDogaWRlbnRpdHkucGVyc29uYUlkLCByZXN1bHR9XG4gICAgfSl9O1xuICB9O1xuICBjb25zdCByYXRlTGltaXQgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGFzaChbaWRlbnRpdHkudXNlcklkLCBNYXRoLmZsb29yKERhdGUubm93KCkgLyAzNjAwMDAwKV0pO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBMRVQgYnVja2V0ID0gRE9DVU1FTlQoJ2NoYXRSYXRlTGltaXRzJywgQGtleSlcbiAgICAgIEZJTFRFUiBidWNrZXQgPT0gbnVsbCBPUiBidWNrZXQuY291bnQgPCA1MFxuICAgICAgVVBTRVJUIHtfa2V5OiBAa2V5fSBJTlNFUlQge19rZXk6IEBrZXksIGNvdW50OiAxLCB1c2VySWQ6IEB1c2VySWR9IFVQREFURSB7Y291bnQ6IE9MRC5jb3VudCArIDEsIHVzZXJJZDogQHVzZXJJZH1cbiAgICAgIElOIGNoYXRSYXRlTGltaXRzIFJFVFVSTiB0cnVlYCwge2tleSwgdXNlcklkOiBpZGVudGl0eS51c2VySWR9KTtcbiAgICBpZihhbGxvd2VkICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdyYXRlX2xpbWl0ZWQnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFkZE1lbWJlciA9IGFzeW5jIChcbiAgICByZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIHdobzogQ2hhdElkZW50aXR5LCByb2xlOiBNZW1iZXJzaGlwUm9sZSwgam9pblNlcXVlbmNlOiBudW1iZXJcbiAgKTogUHJvbWlzZTxNZW1iZXJSZWNvcmQ+ID0+IHtcbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBldmVudFNlcXVlbmNlID0gYXdhaXQgcmVhZDxudW1iZXI+KFxuICAgICAgJ1JFVFVSTiBET0NVTUVOVChcImNvbnZlcnNhdGlvbnNcIiwgQGNvbnZlcnNhdGlvbklkKS5sYXN0RXZlbnRTZXF1ZW5jZSB8fCAwJywge2NvbnZlcnNhdGlvbklkfSk7XG4gICAgY29uc3QgcmVjb3JkID0ge19mcm9tOiBgcGVyc29uYXMvJHt3aG8ucGVyc29uYUlkfWAsIF9rZXk6IGlkLCBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgIGFjY2VwdGVkQXQ6IERhdGUubm93KCksIGNvbnZlcnNhdGlvbklkLCBjdXJyZW50S2V5OiBgJHtjb252ZXJzYXRpb25JZH06JHt3aG8ucGVyc29uYUlkfWAsIGVwb2NoOiByYW5kb21VVUlEKCksXG4gICAgICBqb2luRXZlbnRTZXF1ZW5jZTogam9pblNlcXVlbmNlID4gMCA/IChldmVudFNlcXVlbmNlIHx8IDApICsgMSA6IDAsIGpvaW5TZXF1ZW5jZSwgcGVyc29uYUlkOiB3aG8ucGVyc29uYUlkLCByZXZpc2lvbjogMSwgcm9sZSwgc3RhdGU6ICdhY3RpdmUnIGFzIGNvbnN0LCB1c2VySWQ6IHdoby51c2VySWR9O1xuICAgIGF3YWl0IHJlYWQoJ0lOU0VSVCBAcmVjb3JkIElOIGhhc0NoYXRNZW1iZXJzaGlwIFJFVFVSTiB0cnVlJywge3JlY29yZH0pO1xuICAgIGF3YWl0IHJlYWQoYFVQU0VSVCB7X2Zyb206IEBmcm9tLCBfdG86IEB0b31cbiAgICAgIElOU0VSVCB7X2Zyb206IEBmcm9tLCBfdG86IEB0bywgYWRkZWQ6IEBub3csIGNvbnZlcnNhdGlvbklkOiBAY29udmVyc2F0aW9uSWQsIHVzZXJJZDogQHVzZXJJZH1cbiAgICAgIFVQREFURSB7fSBJTiBoYXNDb252ZXJzYXRpb24gUkVUVVJOIHRydWVgLCB7XG4gICAgICBjb252ZXJzYXRpb25JZCwgZnJvbTogYHVzZXJzLyR7d2hvLnVzZXJJZH1gLCBub3c6IERhdGUubm93KCksIHRvOiBgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWAsIHVzZXJJZDogd2hvLnVzZXJJZFxuICAgIH0pO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH07XG4gIGNvbnN0IGFkZEludml0ZSA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIHdobzogQ2hhdElkZW50aXR5KTogUHJvbWlzZTxDb252ZXJzYXRpb25JbnZpdGU+ID0+IHtcbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCByZWNvcmQ6IEludml0ZVJlY29yZCA9IHtfa2V5OiBpZCwgY29udmVyc2F0aW9uSWQsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGludml0ZU1pbGxpc2Vjb25kcyxcbiAgICAgIGludml0ZUlkOiBpZCwgaW52aXRlZEJ5UGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWQsIGludml0ZWVQZXJzb25hSWQ6IHdoby5wZXJzb25hSWQsIGludml0ZWVVc2VySWQ6IHdoby51c2VySWQsIHJldmlzaW9uOiAxLCBzdGF0ZTogJ3BlbmRpbmcnfTtcbiAgICBhd2FpdCByZWFkKCdJTlNFUlQgQHJlY29yZCBJTiBjaGF0SW52aXRlcyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmQ6IHsuLi5yZWNvcmQsXG4gICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksIGN1cnJlbnRLZXk6IGAke2NvbnZlcnNhdGlvbklkfToke3doby5wZXJzb25hSWR9YCwgcm9sZTogJ21lbWJlcid9fSk7XG4gICAgYXdhaXQgZXZlbnQocmVhZCwgY29udmVyc2F0aW9uSWQsICcnLCBpZCwgMSk7XG4gICAgcmV0dXJuIGludml0ZUR0byhyZWNvcmQpO1xuICB9O1xuICBjb25zdCBleHBpcmVJbnZpdGVzID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IHJlYWQoYEZPUiBpbnZpdGUgSU4gY2hhdEludml0ZXMgRklMVEVSIGludml0ZS5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWRcbiAgICAgIEFORCBpbnZpdGUuc3RhdGUgPT0gJ3BlbmRpbmcnIEFORCBpbnZpdGUuZXhwaXJlc0F0IDw9IEBub3dcbiAgICAgIFVQREFURSBpbnZpdGUgV0lUSCB7Y3VycmVudEtleTogbnVsbCwgcmVzb2x2ZWRBdDogQG5vdywgcmV2aXNpb246IGludml0ZS5yZXZpc2lvbiArIDEsIHN0YXRlOiAnZXhwaXJlZCd9XG4gICAgICBJTiBjaGF0SW52aXRlcyBSRVRVUk4gdHJ1ZWAsIHtjb252ZXJzYXRpb25JZCwgbm93OiBEYXRlLm5vdygpfSk7XG4gIH07XG4gIGNvbnN0IGdldE9yQ3JlYXRlRGlyZWN0ID0gKGlucHV0OiBDcmVhdGVEaXJlY3RJbnB1dCk6IFByb21pc2U8Q29udmVyc2F0aW9uU3VtbWFyeT4gPT4gdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBhY3RvcihyZWFkKTtcbiAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBjb25uZWN0ZWQocmVhZCwgaWRlbnRpdHksIGlucHV0LnBhcnRpY2lwYW50UGVyc29uYUlkKTtcbiAgICBjb25zdCBwYWlyID0gaGFzaChbJ2RpcmVjdC12MScsIC4uLltpZGVudGl0eS5wZXJzb25hSWQsIHRhcmdldC5wZXJzb25hSWRdLnNvcnQoKV0pO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZDxDb252ZXJzYXRpb25SZWNvcmQ+KCdGT1IgYyBJTiBjb252ZXJzYXRpb25zIEZJTFRFUiBjLmRpcmVjdFBhaXJLZXkgPT0gQHBhaXIgTElNSVQgMSBSRVRVUk4gYycsIHtwYWlyfSk7XG4gICAgaWYoZXhpc3RpbmcpIHtcbiAgICAgIGF3YWl0IGFjY2VzcyhyZWFkLCBleGlzdGluZy5fa2V5KTtcbiAgICAgIHJldHVybiBzdW1tYXJ5KGV4aXN0aW5nLCBhd2FpdCBtZW1iZXIocmVhZCwgZXhpc3RpbmcuX2tleSwgaWRlbnRpdHkucGVyc29uYUlkKSwgYXVkaWVuY2UpO1xuICAgIH1cbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCk7XG4gICAgY29uc3QgaWQgPSBgZGlyZWN0LSR7cGFpcn1gO1xuICAgIGNvbnN0IHJlY29yZDogQ29udmVyc2F0aW9uUmVjb3JkID0ge19rZXk6IGlkLCBhY3RpdmVNZW1iZXJDb3VudDogMiwgY2hhdFNjaGVtYVZlcnNpb246IDEsXG4gICAgICBraW5kOiAnZGlyZWN0JywgbGFzdFNlcXVlbmNlOiAwLCBtZW1iZXJzaGlwUmV2aXNpb246IDEsIHN0YXRlOiAnYWN0aXZlJ307XG4gICAgYXdhaXQgcmVhZCgnSU5TRVJUIEByZWNvcmQgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmQ6IHsuLi5yZWNvcmQsXG4gICAgICBhZGRlZDogRGF0ZS5ub3coKSwgY3JlYXRlZEJ5UGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWQsIGRpcmVjdFBhaXJLZXk6IHBhaXIsIGlzRGlyZWN0OiB0cnVlfX0pO1xuICAgIGNvbnN0IG93biA9IGF3YWl0IGFkZE1lbWJlcihyZWFkLCBpZCwgaWRlbnRpdHksICdtZW1iZXInLCAwKTtcbiAgICBhd2FpdCBhZGRNZW1iZXIocmVhZCwgaWQsIHRhcmdldCwgJ21lbWJlcicsIDApO1xuICAgIGF3YWl0IGV2ZW50KHJlYWQsIGlkLCBvd24uZXBvY2gsIGlkLCAxKTtcbiAgICByZXR1cm4gc3VtbWFyeShyZWNvcmQsIG93biwgYXVkaWVuY2UpO1xuICB9KTtcbiAgY29uc3QgY3JlYXRlR3JvdXAgPSAoaW5wdXQ6IENyZWF0ZUdyb3VwSW5wdXQpOiBQcm9taXNlPENvbnZlcnNhdGlvblN1bW1hcnk+ID0+IHRyYW5zYWN0KGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8Q29udmVyc2F0aW9uU3VtbWFyeT4ocmVhZCwgJ2NyZWF0ZUdyb3VwJywgaW5wdXQpO1xuICAgIGlmKHJlcXVlc3QucHJpb3IpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LnByaW9yO1xuICAgIH1cbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCk7XG4gICAgY29uc3QgdGFyZ2V0czogQ2hhdElkZW50aXR5W10gPSBbXTtcbiAgICBmb3IoY29uc3QgcGVyc29uYUlkIG9mIGlucHV0Lm1lbWJlclBlcnNvbmFJZHMpIHtcbiAgICAgIHRhcmdldHMucHVzaChhd2FpdCBjb25uZWN0ZWQocmVhZCwgaWRlbnRpdHksIHBlcnNvbmFJZCkpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBjb250ZW50VmVyc2lvbiA9IGhhc2goWydncm91cC1uYW1lJywgaW5wdXQubmFtZV0pO1xuICAgIGNvbnN0IHJlY29yZDogQ29udmVyc2F0aW9uUmVjb3JkID0ge19rZXk6IGlkLCBhY3RpdmVNZW1iZXJDb3VudDogMSwgY2hhdFNjaGVtYVZlcnNpb246IDEsIGtpbmQ6ICdncm91cCcsXG4gICAgICBsYXN0U2VxdWVuY2U6IDAsIG1lbWJlcnNoaXBSZXZpc2lvbjogMSwgbmFtZTogaW5wdXQubmFtZSwgbmFtZUNvbnRlbnRWZXJzaW9uOiBjb250ZW50VmVyc2lvbixcbiAgICAgIG5hbWVEZWNpc2lvbjogb3B0aW9ucy5jbGFzc2lmeU5hbWUoaW5wdXQubmFtZSwgY29udGVudFZlcnNpb24pLCBzdGF0ZTogJ2Zvcm1pbmcnfTtcbiAgICBhd2FpdCByZWFkKCdJTlNFUlQgQHJlY29yZCBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiB0cnVlJywge3JlY29yZDogey4uLnJlY29yZCxcbiAgICAgIGFkZGVkOiBEYXRlLm5vdygpLCBjcmVhdGVkQnlQZXJzb25hSWQ6IGlkZW50aXR5LnBlcnNvbmFJZCwgaXNEaXJlY3Q6IGZhbHNlfX0pO1xuICAgIGNvbnN0IG93biA9IGF3YWl0IGFkZE1lbWJlcihyZWFkLCBpZCwgaWRlbnRpdHksICdvd25lcicsIDApO1xuICAgIGZvcihjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgYXdhaXQgYWRkSW52aXRlKHJlYWQsIGlkLCB0YXJnZXQpO1xuICAgIH1cbiAgICBhd2FpdCBldmVudChyZWFkLCBpZCwgb3duLmVwb2NoLCBpZCwgMSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3VtbWFyeShyZWNvcmQsIG93biwgYXVkaWVuY2UpO1xuICAgIGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICBjb25zdCBpbnZpdGVNZW1iZXIgPSAoaW5wdXQ6IEludml0ZU1lbWJlcklucHV0KTogUHJvbWlzZTxDb252ZXJzYXRpb25JbnZpdGU+ID0+IHRyYW5zYWN0KGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8Q29udmVyc2F0aW9uSW52aXRlPihyZWFkLCAnaW52aXRlJywgaW5wdXQpO1xuICAgIGlmKHJlcXVlc3QucHJpb3IpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LnByaW9yO1xuICAgIH1cbiAgICBjb25zdCBvd24gPSBhd2FpdCBhY2Nlc3MocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsICdpbnZpdGUnKTtcbiAgICBjaGVja1JldmlzaW9uKG93biwgaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgY29ubmVjdGVkKHJlYWQsIGlkZW50aXR5LCBpbnB1dC5wZXJzb25hSWQpO1xuICAgIGF3YWl0IGV4cGlyZUludml0ZXMocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQpO1xuICAgIGNvbnN0IHByaW9yID0gYXdhaXQgcmVhZDxJbnZpdGVSZWNvcmQ+KCdGT1IgaW52aXRlIElOIGNoYXRJbnZpdGVzIEZJTFRFUiBpbnZpdGUuY3VycmVudEtleSA9PSBAa2V5IExJTUlUIDEgUkVUVVJOIGludml0ZScsXG4gICAgICB7a2V5OiBgJHtpbnB1dC5jb252ZXJzYXRpb25JZH06JHtpbnB1dC5wZXJzb25hSWR9YH0pO1xuICAgIGlmKHByaW9yKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpbnZpdGVEdG8ocHJpb3IpO1xuICAgICAgYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjb3VudHMgPSBhd2FpdCByZWFkPHtyZWFkb25seSBhY3RpdmU6IGJvb2xlYW47IHJlYWRvbmx5IHRvdGFsOiBudW1iZXJ9PihgUkVUVVJOIHtcbiAgICAgIGFjdGl2ZTogTEVOR1RIKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWRcbiAgICAgICAgQU5EIG1lbWJlci5wZXJzb25hSWQgPT0gQHBlcnNvbmFJZCBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnIFJFVFVSTiAxKSA+IDAsXG4gICAgICB0b3RhbDogTEVOR1RIKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWRcbiAgICAgICAgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJyBSRVRVUk4gMSkgKyBMRU5HVEgoRk9SIGludml0ZSBJTiBjaGF0SW52aXRlc1xuICAgICAgICBGSUxURVIgaW52aXRlLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZCBBTkQgaW52aXRlLnN0YXRlID09ICdwZW5kaW5nJyBBTkQgaW52aXRlLmV4cGlyZXNBdCA+IEBub3cgUkVUVVJOIDEpXG4gICAgfWAsIHtjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIG5vdzogRGF0ZS5ub3coKSwgcGVyc29uYUlkOiBpbnB1dC5wZXJzb25hSWR9KTtcbiAgICBpZighY291bnRzIHx8IGNvdW50cy5hY3RpdmUgfHwgY291bnRzLnRvdGFsID49IDI1KSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWRkSW52aXRlKHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkLCB0YXJnZXQpO1xuICAgIGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICBjb25zdCByZXNvbHZlSW52aXRlID0gKFxuICAgIGlucHV0OiBBY2NlcHRJbnZpdGVJbnB1dCwgYWNjZXB0OiBib29sZWFuXG4gICk6IFByb21pc2U8Q29udmVyc2F0aW9uU3VtbWFyeSB8IENvbnZlcnNhdGlvbkludml0ZT4gPT5cbiAgICB0cmFuc2FjdChhc3luYyAocmVhZCkgPT4ge1xuICAgICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxDb252ZXJzYXRpb25TdW1tYXJ5IHwgQ29udmVyc2F0aW9uSW52aXRlPihyZWFkLCBhY2NlcHQgPyAnYWNjZXB0JyA6ICdkZWNsaW5lJywgaW5wdXQpO1xuICAgICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludml0ZSA9IGF3YWl0IHJlYWQ8SW52aXRlUmVjb3JkPignUkVUVVJOIERPQ1VNRU5UKFwiY2hhdEludml0ZXNcIiwgQGlkKScsIHtpZDogaW5wdXQuaW52aXRlSWR9KTtcbiAgICAgIGlmKCFpbnZpdGUgfHwgaW52aXRlLmludml0ZWVQZXJzb25hSWQgIT09IGlkZW50aXR5LnBlcnNvbmFJZCB8fCBpbnZpdGUuaW52aXRlZVVzZXJJZCAhPT0gaWRlbnRpdHkudXNlcklkXG4gICAgICAgIHx8IGludml0ZS5zdGF0ZSAhPT0gJ3BlbmRpbmcnIHx8IGludml0ZS5leHBpcmVzQXQgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICAgIH1cbiAgICAgIGlmKGludml0ZS5yZXZpc2lvbiAhPT0gaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGNvbnZlcnNhdGlvbihyZWFkLCBpbnZpdGUuY29udmVyc2F0aW9uSWQpO1xuICAgICAgaWYoY3VycmVudC5raW5kICE9PSAnZ3JvdXAnKSB7XG4gICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgICAgfVxuICAgICAgbGV0IHJlc3VsdDogQ29udmVyc2F0aW9uU3VtbWFyeSB8IENvbnZlcnNhdGlvbkludml0ZTtcbiAgICAgIGlmKGFjY2VwdCkge1xuICAgICAgICBjb25zdCBpbnZpdGVyID0gYXdhaXQgbWVtYmVyKHJlYWQsIGN1cnJlbnQuX2tleSwgaW52aXRlLmludml0ZWRCeVBlcnNvbmFJZCk7XG4gICAgICAgIGlmKCFbJ293bmVyJywgJ2FkbWluJ10uaW5jbHVkZXMoaW52aXRlci5yb2xlKSB8fCBjdXJyZW50LmFjdGl2ZU1lbWJlckNvdW50ID49IDI1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYWR1bHQocmVhZCwge3BlcnNvbmFJZDogaW52aXRlci5wZXJzb25hSWQsIHVzZXJJZDogaW52aXRlci51c2VySWR9KTtcbiAgICAgICAgYXdhaXQgY29ubmVjdGVkKHJlYWQsIHtwZXJzb25hSWQ6IGludml0ZXIucGVyc29uYUlkLCB1c2VySWQ6IGludml0ZXIudXNlcklkfSwgaWRlbnRpdHkucGVyc29uYUlkKTtcbiAgICAgICAgY29uc3Qgb3duID0gYXdhaXQgYWRkTWVtYmVyKHJlYWQsIGN1cnJlbnQuX2tleSwgaWRlbnRpdHksICdtZW1iZXInLCBjdXJyZW50Lmxhc3RTZXF1ZW5jZSArIDEpO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgcmVhZDxDb252ZXJzYXRpb25SZWNvcmQ+KGBVUERBVEUgQGlkIFdJVEgge1xuICAgICAgICAgIGFjdGl2ZU1lbWJlckNvdW50OiBAY291bnQsIG1lbWJlcnNoaXBSZXZpc2lvbjogQHJldmlzaW9uLCBzdGF0ZTogQHN0YXRlfVxuICAgICAgICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2AsIHtjb3VudDogY3VycmVudC5hY3RpdmVNZW1iZXJDb3VudCArIDEsIGlkOiBjdXJyZW50Ll9rZXksXG4gICAgICAgICAgcmV2aXNpb246IGN1cnJlbnQubWVtYmVyc2hpcFJldmlzaW9uICsgMSxcbiAgICAgICAgICBzdGF0ZTogY3VycmVudC5hY3RpdmVNZW1iZXJDb3VudCArIDEgPj0gMyA/ICdhY3RpdmUnIDogY3VycmVudC5zdGF0ZX0pO1xuICAgICAgICBpZighdXBkYXRlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZXZlbnQocmVhZCwgY3VycmVudC5fa2V5LCBvd24uZXBvY2gsIG93bi5fa2V5LCB1cGRhdGVkLm1lbWJlcnNoaXBSZXZpc2lvbik7XG4gICAgICAgIHJlc3VsdCA9IHN1bW1hcnkodXBkYXRlZCwgb3duLCBhdWRpZW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSB7Li4uaW52aXRlRHRvKGludml0ZSksIHJldmlzaW9uOiBpbnZpdGUucmV2aXNpb24gKyAxLCBzdGF0ZTogJ2RlY2xpbmVkJ307XG4gICAgICAgIGF3YWl0IGV2ZW50KHJlYWQsIGN1cnJlbnQuX2tleSwgJycsIGludml0ZS5fa2V5LCBpbnZpdGUucmV2aXNpb24gKyAxKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHJlYWQoYFVQREFURSBAaWQgV0lUSCB7Y3VycmVudEtleTogbnVsbCwgcmVzb2x2ZWRBdDogQG5vdywgcmV2aXNpb246IEByZXZpc2lvbiwgc3RhdGU6IEBzdGF0ZX1cbiAgICAgICAgSU4gY2hhdEludml0ZXMgUkVUVVJOIHRydWVgLCB7aWQ6IGludml0ZS5fa2V5LCBub3c6IERhdGUubm93KCksIHJldmlzaW9uOiBpbnZpdGUucmV2aXNpb24gKyAxLFxuICAgICAgICBzdGF0ZTogYWNjZXB0ID8gJ2FjY2VwdGVkJyA6ICdkZWNsaW5lZCd9KTtcbiAgICAgIGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgY29uc3QgY2hhbmdlTWVtYmVyc2hpcCA9IChcbiAgICBhY3Rpb246ICdsZWF2ZScgfCAncmVtb3ZlJyB8ICdyb2xlJyB8ICd0cmFuc2ZlcicsXG4gICAgaW5wdXQ6IENoYW5nZU1lbWJlclJvbGVJbnB1dCB8IExlYXZlQ29udmVyc2F0aW9uSW5wdXQgfCBSZW1vdmVNZW1iZXJJbnB1dFxuICApOiBQcm9taXNlPENvbnZlcnNhdGlvblN1bW1hcnk+ID0+IHRyYW5zYWN0KGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgYWN0b3IocmVhZCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8Q29udmVyc2F0aW9uU3VtbWFyeT4ocmVhZCwgYWN0aW9uLCBpbnB1dCk7XG4gICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QucHJpb3I7XG4gICAgfVxuICAgIGNvbnN0IG93bkFjY2VzcyA9IGF3YWl0IGFjY2VzcyhyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCk7XG4gICAgY2hlY2tSZXZpc2lvbihvd25BY2Nlc3MsIGlucHV0LmV4cGVjdGVkUmV2aXNpb24pO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBjb252ZXJzYXRpb24ocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQpO1xuICAgIGNvbnN0IG93biA9IGF3YWl0IG1lbWJlcihyZWFkLCBjdXJyZW50Ll9rZXksIGlkZW50aXR5LnBlcnNvbmFJZCk7XG4gICAgY29uc3QgdGFyZ2V0UGVyc29uYUlkID0gJ3BlcnNvbmFJZCcgaW4gaW5wdXQgPyBpbnB1dC5wZXJzb25hSWQgOiBpZGVudGl0eS5wZXJzb25hSWQ7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0UGVyc29uYUlkID09PSBpZGVudGl0eS5wZXJzb25hSWQgPyBvd24gOiBhd2FpdCBtZW1iZXIocmVhZCwgY3VycmVudC5fa2V5LCB0YXJnZXRQZXJzb25hSWQpO1xuICAgIGNvbnN0IGxlYXZpbmcgPSBhY3Rpb24gPT09ICdsZWF2ZScgfHwgYWN0aW9uID09PSAncmVtb3ZlJztcbiAgICBpZigoYWN0aW9uID09PSAncm9sZScgfHwgYWN0aW9uID09PSAndHJhbnNmZXInKSAmJiAob3duLnJvbGUgIT09ICdvd25lcicgfHwgdGFyZ2V0Ll9rZXkgPT09IG93bi5fa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgfVxuICAgIGlmKGFjdGlvbiA9PT0gJ3JlbW92ZScgJiYgKHRhcmdldC5fa2V5ID09PSBvd24uX2tleSB8fCB0YXJnZXQucm9sZSA9PT0gJ293bmVyJ1xuICAgICAgfHwgIVsnb3duZXInLCAnYWRtaW4nXS5pbmNsdWRlcyhvd24ucm9sZSkgfHwgKG93bi5yb2xlID09PSAnYWRtaW4nICYmIHRhcmdldC5yb2xlICE9PSAnbWVtYmVyJykpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgaWYoYWN0aW9uID09PSAnbGVhdmUnICYmIG93bi5yb2xlID09PSAnb3duZXInICYmIGN1cnJlbnQuYWN0aXZlTWVtYmVyQ291bnQgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgICBpZihhY3Rpb24gPT09ICdyb2xlJyAmJiB0YXJnZXQucm9sZSA9PT0gJ293bmVyJykge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgfVxuICAgIGlmKGFjdGlvbiA9PT0gJ3RyYW5zZmVyJyB8fCAoYWN0aW9uID09PSAncm9sZScgJiYgJ3JvbGUnIGluIGlucHV0ICYmIGlucHV0LnJvbGUgPT09ICdhZG1pbicpKSB7XG4gICAgICBhd2FpdCBhZHVsdChyZWFkLCB7cGVyc29uYUlkOiB0YXJnZXQucGVyc29uYUlkLCB1c2VySWQ6IHRhcmdldC51c2VySWR9KTtcbiAgICB9XG4gICAgbGV0IG93blJlc3VsdCA9IG93bjtcbiAgICBpZihhY3Rpb24gPT09ICd0cmFuc2ZlcicpIHtcbiAgICAgIGF3YWl0IHJlYWQoJ1VQREFURSBAaWQgV0lUSCB7cm9sZTogXCJhZG1pblwiLCByZXZpc2lvbjogQHJldmlzaW9ufSBJTiBoYXNDaGF0TWVtYmVyc2hpcCBSRVRVUk4gdHJ1ZScsXG4gICAgICAgIHtpZDogb3duLl9rZXksIHJldmlzaW9uOiBvd24ucmV2aXNpb24gKyAxfSk7XG4gICAgICBhd2FpdCByZWFkKCdVUERBVEUgQGlkIFdJVEgge3JvbGU6IFwib3duZXJcIiwgcmV2aXNpb246IEByZXZpc2lvbn0gSU4gaGFzQ2hhdE1lbWJlcnNoaXAgUkVUVVJOIHRydWUnLFxuICAgICAgICB7aWQ6IHRhcmdldC5fa2V5LCByZXZpc2lvbjogdGFyZ2V0LnJldmlzaW9uICsgMX0pO1xuICAgICAgb3duUmVzdWx0ID0gey4uLm93biwgcmV2aXNpb246IG93bi5yZXZpc2lvbiArIDEsIHJvbGU6ICdhZG1pbid9O1xuICAgIH0gZWxzZSBpZihhY3Rpb24gPT09ICdyb2xlJyAmJiAncm9sZScgaW4gaW5wdXQpIHtcbiAgICAgIGF3YWl0IHJlYWQoJ1VQREFURSBAaWQgV0lUSCB7cm9sZTogQHJvbGUsIHJldmlzaW9uOiBAcmV2aXNpb259IElOIGhhc0NoYXRNZW1iZXJzaGlwIFJFVFVSTiB0cnVlJyxcbiAgICAgICAge2lkOiB0YXJnZXQuX2tleSwgcmV2aXNpb246IHRhcmdldC5yZXZpc2lvbiArIDEsIHJvbGU6IGlucHV0LnJvbGV9KTtcbiAgICB9IGVsc2UgaWYobGVhdmluZykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhY3Rpb24gPT09ICdsZWF2ZScgPyAnbGVmdCcgOiAncmVtb3ZlZCc7XG4gICAgICBhd2FpdCByZWFkKGBVUERBVEUgQGlkIFdJVEgge2N1cnJlbnRLZXk6IG51bGwsIGVuZGVkQXQ6IEBub3csIGVuZGVkQnlQZXJzb25hSWQ6IEBhY3RvcixcbiAgICAgICAgbGVmdFNlcXVlbmNlOiBAc2VxdWVuY2UsIHJldmlzaW9uOiBAcmV2aXNpb24sIHN0YXRlOiBAc3RhdGV9IElOIGhhc0NoYXRNZW1iZXJzaGlwIFJFVFVSTiB0cnVlYCwge1xuICAgICAgICBhY3RvcjogaWRlbnRpdHkucGVyc29uYUlkLCBpZDogdGFyZ2V0Ll9rZXksIG5vdzogRGF0ZS5ub3coKSwgcmV2aXNpb246IHRhcmdldC5yZXZpc2lvbiArIDEsXG4gICAgICAgIHNlcXVlbmNlOiBjdXJyZW50Lmxhc3RTZXF1ZW5jZSwgc3RhdGVcbiAgICAgIH0pO1xuICAgICAgaWYoYWN0aW9uID09PSAnbGVhdmUnKSB7XG4gICAgICAgIG93blJlc3VsdCA9IHsuLi5vd24sIGxlZnRTZXF1ZW5jZTogY3VycmVudC5sYXN0U2VxdWVuY2UsIHJldmlzaW9uOiBvd24ucmV2aXNpb24gKyAxLCBzdGF0ZX07XG4gICAgICB9XG4gICAgICBhd2FpdCByZWFkKGBGT1IgZWRnZSBJTiBoYXNDb252ZXJzYXRpb24gRklMVEVSIGVkZ2UuX2Zyb20gPT0gQGZyb20gQU5EIGVkZ2UuX3RvID09IEB0b1xuICAgICAgICBMRVQgcmVtYWluaW5nID0gRklSU1QoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcCBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgICAgIEFORCBtZW1iZXIudXNlcklkID09IEB1c2VySWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJyBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgICBGSUxURVIgcmVtYWluaW5nICE9IHRydWUgUkVNT1ZFIGVkZ2UgSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiB0cnVlYCwge1xuICAgICAgICBjb252ZXJzYXRpb25JZDogY3VycmVudC5fa2V5LCBmcm9tOiBgdXNlcnMvJHt0YXJnZXQudXNlcklkfWAsIHRvOiBgY29udmVyc2F0aW9ucy8ke2N1cnJlbnQuX2tleX1gLCB1c2VySWQ6IHRhcmdldC51c2VySWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZihsZWF2aW5nIHx8IChhY3Rpb24gPT09ICdyb2xlJyAmJiAncm9sZScgaW4gaW5wdXQgJiYgaW5wdXQucm9sZSA9PT0gJ21lbWJlcicpKSB7XG4gICAgICBhd2FpdCByZWFkKGBGT1IgaW52aXRlIElOIGNoYXRJbnZpdGVzIEZJTFRFUiBpbnZpdGUuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkXG4gICAgICAgIEFORCBpbnZpdGUuc3RhdGUgPT0gJ3BlbmRpbmcnIEFORCAoaW52aXRlLmludml0ZWRCeVBlcnNvbmFJZCA9PSBAcGVyc29uYUlkIE9SIEBjbG9zZSlcbiAgICAgICAgVVBEQVRFIGludml0ZSBXSVRIIHtjdXJyZW50S2V5OiBudWxsLCByZXNvbHZlZEF0OiBAbm93LCByZXZpc2lvbjogaW52aXRlLnJldmlzaW9uICsgMSwgc3RhdGU6ICdyZXZva2VkJ31cbiAgICAgICAgSU4gY2hhdEludml0ZXMgUkVUVVJOIHRydWVgLCB7Y2xvc2U6IGxlYXZpbmcgJiYgY3VycmVudC5hY3RpdmVNZW1iZXJDb3VudCA9PT0gMSxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IGN1cnJlbnQuX2tleSwgbm93OiBEYXRlLm5vdygpLCBwZXJzb25hSWQ6IHRhcmdldC5wZXJzb25hSWR9KTtcbiAgICB9XG4gICAgY29uc3QgY291bnQgPSBjdXJyZW50LmFjdGl2ZU1lbWJlckNvdW50IC0gKGxlYXZpbmcgPyAxIDogMCk7XG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHJlYWQ8Q29udmVyc2F0aW9uUmVjb3JkPihgVVBEQVRFIEBpZCBXSVRIIHtcbiAgICAgIGFjdGl2ZU1lbWJlckNvdW50OiBAY291bnQsIG1lbWJlcnNoaXBSZXZpc2lvbjogQHJldmlzaW9uLCBzdGF0ZTogQHN0YXRlfVxuICAgICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYCwge2NvdW50LCBpZDogY3VycmVudC5fa2V5LCByZXZpc2lvbjogY3VycmVudC5tZW1iZXJzaGlwUmV2aXNpb24gKyAxLFxuICAgICAgc3RhdGU6IGNvdW50ID09PSAwID8gJ2Nsb3NlZCcgOiBjdXJyZW50LnN0YXRlfSk7XG4gICAgaWYoIXVwZGF0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIGF3YWl0IGV2ZW50KHJlYWQsIGN1cnJlbnQuX2tleSwgdGFyZ2V0LmVwb2NoLCB0YXJnZXQuX2tleSwgdXBkYXRlZC5tZW1iZXJzaGlwUmV2aXNpb24pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1bW1hcnkodXBkYXRlZCwgb3duUmVzdWx0LCBhdWRpZW5jZSk7XG4gICAgYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIGNvbnN0IGxpc3RDb252ZXJzYXRpb25zID0gKGlucHV0OiBDaGF0TGlzdElucHV0KTogUHJvbWlzZTxyZWFkb25seSBDb252ZXJzYXRpb25TdW1tYXJ5W10+ID0+XG4gICAgdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICAgIGF3YWl0IGFjdG9yKHJlYWQpO1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgcmVhZDxzdHJpbmdbXT4oYFJFVFVSTiAoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcFxuICAgICAgRklMVEVSIG1lbWJlci5wZXJzb25hSWQgPT0gQHBlcnNvbmFJZCBBTkQgbWVtYmVyLnVzZXJJZCA9PSBAdXNlcklkIEFORCBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZSdcbiAgICAgICAgQU5EIG1lbWJlci5jb252ZXJzYXRpb25JZCA+IEBhZnRlciBTT1JUIG1lbWJlci5jb252ZXJzYXRpb25JZCBMSU1JVCBAbGltaXQgUkVUVVJOIG1lbWJlci5jb252ZXJzYXRpb25JZClgLCB7XG4gICAgICAgIC4uLmlkZW50aXR5LCBhZnRlcjogaW5wdXQuYWZ0ZXIgfHwgJycsIGxpbWl0OiBpbnB1dC5saW1pdCB8fCAyNVxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHRzOiBDb252ZXJzYXRpb25TdW1tYXJ5W10gPSBbXTtcbiAgICAgIGZvcihjb25zdCBpZCBvZiBpZHMgfHwgW10pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhY2Nlc3MocmVhZCwgaWQpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBjb252ZXJzYXRpb24ocmVhZCwgaWQpO1xuICAgICAgICAgIGlmKGN1cnJlbnQua2luZCA9PT0gJ2RpcmVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlZXIgPSBhd2FpdCByZWFkPE1lbWJlclJlY29yZD4oYEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAaWRcbiAgICAgICAgICAgIEFORCBtZW1iZXIucGVyc29uYUlkICE9IEBwZXJzb25hSWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJyBMSU1JVCAxIFJFVFVSTiBtZW1iZXJgLCB7aWQsIHBlcnNvbmFJZDogaWRlbnRpdHkucGVyc29uYUlkfSk7XG4gICAgICAgICAgICBpZighcGVlcikge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3RlZChyZWFkLCBpZGVudGl0eSwgcGVlci5wZXJzb25hSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHRzLnB1c2goc3VtbWFyeShjdXJyZW50LCBhd2FpdCBtZW1iZXIocmVhZCwgaWQsIGlkZW50aXR5LnBlcnNvbmFJZCksIGF1ZGllbmNlLCB0cnVlKSk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICBpZighKGVycm9yIGluc3RhbmNlb2YgQ2hhdEVycm9yKSB8fCBlcnJvci5jb2RlICE9PSAnZm9yYmlkZGVuJykge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbiAgY29uc3QgbGlzdEludml0ZXMgPSAoaW5wdXQ6IENoYXRMaXN0SW5wdXQpOiBQcm9taXNlPHJlYWRvbmx5IENvbnZlcnNhdGlvbkludml0ZVtdPiA9PiB0cmFuc2FjdChhc3luYyAocmVhZCkgPT4ge1xuICAgIGF3YWl0IGFjdG9yKHJlYWQpO1xuICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCByZWFkPEludml0ZVJlY29yZFtdPihgUkVUVVJOIChGT1IgaW52aXRlIElOIGNoYXRJbnZpdGVzXG4gICAgICBGSUxURVIgaW52aXRlLmludml0ZWVQZXJzb25hSWQgPT0gQHBlcnNvbmFJZCBBTkQgaW52aXRlLmludml0ZWVVc2VySWQgPT0gQHVzZXJJZCBBTkQgaW52aXRlLnN0YXRlID09ICdwZW5kaW5nJ1xuICAgICAgICBBTkQgaW52aXRlLmV4cGlyZXNBdCA+IEBub3cgQU5EIGludml0ZS5fa2V5ID4gQGFmdGVyXG4gICAgICBMRVQgY29udmVyc2F0aW9uID0gRE9DVU1FTlQoJ2NvbnZlcnNhdGlvbnMnLCBpbnZpdGUuY29udmVyc2F0aW9uSWQpXG4gICAgICBMRVQgaW52aXRlciA9IERPQ1VNRU5UKCdwZXJzb25hcycsIGludml0ZS5pbnZpdGVkQnlQZXJzb25hSWQpXG4gICAgICBMRVQgaW52aXRlclVzZXIgPSBET0NVTUVOVCgndXNlcnMnLCBpbnZpdGVyLnVzZXJJZClcbiAgICAgIExFVCBpbnZpdGVyTWVtYmVyc2hpcCA9IEZJUlNUKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXBcbiAgICAgICAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBpbnZpdGUuY29udmVyc2F0aW9uSWQgQU5EIG1lbWJlci5wZXJzb25hSWQgPT0gaW52aXRlLmludml0ZWRCeVBlcnNvbmFJZFxuICAgICAgICAgIEFORCBtZW1iZXIudXNlcklkID09IGludml0ZXIudXNlcklkIEFORCBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScgQU5EIG1lbWJlci5yb2xlIElOIFsnb3duZXInLCAnYWRtaW4nXVxuICAgICAgICBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgICAgTEVUIGJsb2NrZWQgPSBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2Jsb2NrJ1xuICAgICAgICBBTkQgKChlZGdlLl9mcm9tIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIEBwZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIEB1c2VySWQpXVxuICAgICAgICAgIEFORCBlZGdlLl90byBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBpbnZpdGUuaW52aXRlZEJ5UGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBpbnZpdGVyLnVzZXJJZCldKVxuICAgICAgICAgIE9SIChlZGdlLl90byBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBAdXNlcklkKV1cbiAgICAgICAgICBBTkQgZWRnZS5fZnJvbSBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBpbnZpdGUuaW52aXRlZEJ5UGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBpbnZpdGVyLnVzZXJJZCldKSlcbiAgICAgICAgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICAgIEZJTFRFUiBjb252ZXJzYXRpb24uY2hhdFNjaGVtYVZlcnNpb24gPT0gMSBBTkQgY29udmVyc2F0aW9uLnN0YXRlIElOIFsnYWN0aXZlJywgJ2Zvcm1pbmcnXVxuICAgICAgICBBTkQgaW52aXRlciAhPSBudWxsIEFORCBpbnZpdGVyVXNlciAhPSBudWxsIEFORCBpbnZpdGVyLmFjdGl2ZSAhPSBmYWxzZSBBTkQgaW52aXRlclVzZXIuYWN0aXZlICE9IGZhbHNlXG4gICAgICAgIEFORCBpbnZpdGVyTWVtYmVyc2hpcCA9PSB0cnVlIEFORCBibG9ja2VkICE9IHRydWVcbiAgICAgIFNPUlQgaW52aXRlLl9rZXkgTElNSVQgQGxpbWl0IFJFVFVSTiBpbnZpdGUpYCwgey4uLmlkZW50aXR5LCBhZnRlcjogaW5wdXQuYWZ0ZXIgfHwgJycsIGxpbWl0OiBpbnB1dC5saW1pdCB8fCAyNSwgbm93OiBEYXRlLm5vdygpfSk7XG4gICAgcmV0dXJuIChyZWNvcmRzIHx8IFtdKS5tYXAoaW52aXRlRHRvKTtcbiAgfSk7XG4gIGNvbnN0IGdldFBhcnRpY2lwYW50cyA9IChpbnB1dDoge3JlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmd9KTogUHJvbWlzZTxyZWFkb25seSBDb252ZXJzYXRpb25NZW1iZXJzaGlwW10+ID0+XG4gICAgdHJhbnNhY3QoYXN5bmMgKHJlYWQpID0+IHtcbiAgICAgIGF3YWl0IGFjdG9yKHJlYWQpO1xuICAgICAgYXdhaXQgYWNjZXNzKHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkKTtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCByZWFkPE1lbWJlclJlY29yZFtdPihgUkVUVVJOIChGT1IgbWVtYmVyIElOIGhhc0NoYXRNZW1iZXJzaGlwXG4gICAgICAgIEZJTFRFUiBtZW1iZXIuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkIEFORCBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZSdcbiAgICAgICAgTEVUIHBlcnNvbmEgPSBET0NVTUVOVCgncGVyc29uYXMnLCBtZW1iZXIucGVyc29uYUlkKSBMRVQgdXNlciA9IERPQ1VNRU5UKCd1c2VycycsIG1lbWJlci51c2VySWQpXG4gICAgICAgIExFVCBibG9ja2VkID0gRklSU1QoRk9SIGVkZ2UgSU4gaGFzQ29ubmVjdGlvbiBGSUxURVIgZWRnZS50eXBlID09ICdibG9jaydcbiAgICAgICAgICBBTkQgKChlZGdlLl9mcm9tIElOIFtAdmlld2VyUGVyc29uYSwgQHZpZXdlclVzZXJdXG4gICAgICAgICAgICBBTkQgZWRnZS5fdG8gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgbWVtYmVyLnBlcnNvbmFJZCksIENPTkNBVCgndXNlcnMvJywgbWVtYmVyLnVzZXJJZCldKVxuICAgICAgICAgIE9SIChlZGdlLl90byBJTiBbQHZpZXdlclBlcnNvbmEsIEB2aWV3ZXJVc2VyXVxuICAgICAgICAgICAgQU5EIGVkZ2UuX2Zyb20gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgbWVtYmVyLnBlcnNvbmFJZCksIENPTkNBVCgndXNlcnMvJywgbWVtYmVyLnVzZXJJZCldKSkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICAgICAgRklMVEVSIHBlcnNvbmEgIT0gbnVsbCBBTkQgdXNlciAhPSBudWxsIEFORCBwZXJzb25hLmFjdGl2ZSAhPSBmYWxzZSBBTkQgdXNlci5hY3RpdmUgIT0gZmFsc2VcbiAgICAgICAgICBBTkQgcGVyc29uYS51c2VySWQgPT0gbWVtYmVyLnVzZXJJZCBBTkQgYmxvY2tlZCAhPSB0cnVlXG4gICAgICAgIFNPUlQgbWVtYmVyLnBlcnNvbmFJZCBMSU1JVCAyNSBSRVRVUk4gbWVtYmVyKWAsIHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLCB2aWV3ZXJQZXJzb25hOiBgcGVyc29uYXMvJHtpZGVudGl0eS5wZXJzb25hSWR9YCwgdmlld2VyVXNlcjogYHVzZXJzLyR7aWRlbnRpdHkudXNlcklkfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChyZWNvcmRzIHx8IFtdKS5tYXAobWVtYmVyc2hpcER0byk7XG4gICAgfSk7XG4gIHJldHVybiB7XG4gICAgYWNjZXB0SW52aXRlOiAoaW5wdXQ6IEFjY2VwdEludml0ZUlucHV0KSA9PiByZXNvbHZlSW52aXRlKGlucHV0LCB0cnVlKSBhcyBQcm9taXNlPENvbnZlcnNhdGlvblN1bW1hcnk+LFxuICAgIGNoYW5nZU1lbWJlclJvbGU6IChpbnB1dDogQ2hhbmdlTWVtYmVyUm9sZUlucHV0KSA9PiBjaGFuZ2VNZW1iZXJzaGlwKCdyb2xlJywgaW5wdXQpLFxuICAgIGNyZWF0ZUdyb3VwLFxuICAgIGRlY2xpbmVJbnZpdGU6IChpbnB1dDogQWNjZXB0SW52aXRlSW5wdXQpID0+IHJlc29sdmVJbnZpdGUoaW5wdXQsIGZhbHNlKSBhcyBQcm9taXNlPENvbnZlcnNhdGlvbkludml0ZT4sXG4gICAgZ2V0T3JDcmVhdGVEaXJlY3QsIGdldFBhcnRpY2lwYW50cywgaW52aXRlTWVtYmVyLFxuICAgIGxlYXZlQ29udmVyc2F0aW9uOiAoaW5wdXQ6IExlYXZlQ29udmVyc2F0aW9uSW5wdXQpID0+IGNoYW5nZU1lbWJlcnNoaXAoJ2xlYXZlJywgaW5wdXQpLFxuICAgIGxpc3RDb252ZXJzYXRpb25zLCBsaXN0SW52aXRlcyxcbiAgICByZW1vdmVNZW1iZXI6IChpbnB1dDogUmVtb3ZlTWVtYmVySW5wdXQpID0+IGNoYW5nZU1lbWJlcnNoaXAoJ3JlbW92ZScsIGlucHV0KSxcbiAgICB0cmFuc2Zlck93bmVyc2hpcDogKGlucHV0OiBUcmFuc2Zlck93bmVyc2hpcElucHV0KSA9PiBjaGFuZ2VNZW1iZXJzaGlwKCd0cmFuc2ZlcicsIGlucHV0KVxuICB9O1xufTtcbmV4cG9ydCB0eXBlIENoYXRSZXBvc2l0b3J5ID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlRHVyYWJsZUNvbnZlcnNhdGlvblJlcG9zaXRvcnk+O1xuXG5jb25zdCB2YWxpZCA9IChjb25kaXRpb246IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgaWYoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ludmFsaWRfcmVxdWVzdCcpO1xuICB9XG59O1xuY29uc3QgbXV0YXRpb24gPSAoaW5wdXQ6IHtyZWFkb25seSBleHBlY3RlZFJldmlzaW9uOiBudW1iZXI7IHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmd9KTogdm9pZCA9PiB7XG4gIHZhbGlkKEJvb2xlYW4oaW5wdXQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuaWRlbXBvdGVuY3lLZXkpXG4gICAgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbikgJiYgaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiA+IDApO1xufTtcbmNvbnN0IGNvbnZlcnNhdGlvbk11dGF0aW9uID0gKGlucHV0OiBMZWF2ZUNvbnZlcnNhdGlvbklucHV0KTogdm9pZCA9PiB7XG4gIG11dGF0aW9uKGlucHV0KTtcbiAgdmFsaWQoaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkpO1xufTtcbmNvbnN0IHRhcmdldGVkTXV0YXRpb24gPSAoaW5wdXQ6IFJlbW92ZU1lbWJlcklucHV0KTogdm9pZCA9PiB7XG4gIGNvbnZlcnNhdGlvbk11dGF0aW9uKGlucHV0KTtcbiAgdmFsaWQoaXNDaGF0SWRlbnRpZmllcihpbnB1dC5wZXJzb25hSWQpKTtcbn07XG5jb25zdCBsaXN0ID0gKGlucHV0OiBDaGF0TGlzdElucHV0KTogdm9pZCA9PiB2YWxpZChCb29sZWFuKGlucHV0KVxuICAmJiAoaW5wdXQubGltaXQgPT09IHVuZGVmaW5lZCB8fCAoTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQubGltaXQpICYmIGlucHV0LmxpbWl0ID4gMCAmJiBpbnB1dC5saW1pdCA8PSA1MCkpXG4gICYmIChpbnB1dC5hZnRlciA9PT0gdW5kZWZpbmVkIHx8IGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuYWZ0ZXIpKSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEdXJhYmxlQ29udmVyc2F0aW9uQWN0aW9ucyA9IChcbiAgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgcmVwb3NpdG9yeTogQ2hhdFJlcG9zaXRvcnlcbikgPT4ge1xuICBpZighaWRlbnRpdHkgfHwgIWlzQ2hhdElkZW50aWZpZXIoaWRlbnRpdHkucGVyc29uYUlkKSB8fCAhaXNDaGF0SWRlbnRpZmllcihpZGVudGl0eS51c2VySWQpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhY2NlcHRJbnZpdGU6IGFzeW5jIChpbnB1dDogQWNjZXB0SW52aXRlSW5wdXQpID0+IHtcbiAgICAgIG11dGF0aW9uKGlucHV0KTtcbiAgICAgIHZhbGlkKGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuaW52aXRlSWQpKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmFjY2VwdEludml0ZShpbnB1dCk7XG4gICAgfSxcbiAgICBjaGFuZ2VNZW1iZXJSb2xlOiBhc3luYyAoaW5wdXQ6IENoYW5nZU1lbWJlclJvbGVJbnB1dCkgPT4ge1xuICAgICAgdGFyZ2V0ZWRNdXRhdGlvbihpbnB1dCk7XG4gICAgICB2YWxpZChbJ2FkbWluJywgJ21lbWJlciddLmluY2x1ZGVzKGlucHV0LnJvbGUpKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmNoYW5nZU1lbWJlclJvbGUoaW5wdXQpO1xuICAgIH0sXG4gICAgY3JlYXRlR3JvdXA6IGFzeW5jIChpbnB1dDogQ3JlYXRlR3JvdXBJbnB1dCkgPT4ge1xuICAgICAgdmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5pZGVtcG90ZW5jeUtleSkgJiYgdHlwZW9mIGlucHV0Lm5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICYmIGlucHV0Lm5hbWUudHJpbSgpLmxlbmd0aCA+IDAgJiYgaW5wdXQubmFtZS5sZW5ndGggPD0gMjAwXG4gICAgICAgICYmIEFycmF5LmlzQXJyYXkoaW5wdXQubWVtYmVyUGVyc29uYUlkcylcbiAgICAgICAgJiYgaW5wdXQubWVtYmVyUGVyc29uYUlkcy5sZW5ndGggPj0gMiAmJiBpbnB1dC5tZW1iZXJQZXJzb25hSWRzLmxlbmd0aCA8PSAyNFxuICAgICAgICAmJiBpbnB1dC5tZW1iZXJQZXJzb25hSWRzLmV2ZXJ5KChpZCkgPT4gaXNDaGF0SWRlbnRpZmllcihpZCkgJiYgaWQgIT09IGlkZW50aXR5LnBlcnNvbmFJZClcbiAgICAgICAgJiYgbmV3IFNldChpbnB1dC5tZW1iZXJQZXJzb25hSWRzKS5zaXplID09PSBpbnB1dC5tZW1iZXJQZXJzb25hSWRzLmxlbmd0aCk7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5jcmVhdGVHcm91cChpbnB1dCk7XG4gICAgfSxcbiAgICBkZWNsaW5lSW52aXRlOiBhc3luYyAoaW5wdXQ6IEFjY2VwdEludml0ZUlucHV0KSA9PiB7XG4gICAgICBtdXRhdGlvbihpbnB1dCk7XG4gICAgICB2YWxpZChpc0NoYXRJZGVudGlmaWVyKGlucHV0Lmludml0ZUlkKSk7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5kZWNsaW5lSW52aXRlKGlucHV0KTtcbiAgICB9LFxuICAgIGdldE9yQ3JlYXRlRGlyZWN0OiBhc3luYyAoaW5wdXQ6IENyZWF0ZURpcmVjdElucHV0KSA9PiB7XG4gICAgICB2YWxpZChCb29sZWFuKGlucHV0KSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LnBhcnRpY2lwYW50UGVyc29uYUlkKVxuICAgICAgICAmJiBpbnB1dC5wYXJ0aWNpcGFudFBlcnNvbmFJZCAhPT0gaWRlbnRpdHkucGVyc29uYUlkKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmdldE9yQ3JlYXRlRGlyZWN0KGlucHV0KTtcbiAgICB9LFxuICAgIGdldFBhcnRpY2lwYW50czogYXN5bmMgKGlucHV0OiB7cmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZ30pID0+IHtcbiAgICAgIHZhbGlkKEJvb2xlYW4oaW5wdXQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY29udmVyc2F0aW9uSWQpKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmdldFBhcnRpY2lwYW50cyhpbnB1dCk7XG4gICAgfSxcbiAgICBpbnZpdGVNZW1iZXI6IGFzeW5jIChpbnB1dDogSW52aXRlTWVtYmVySW5wdXQpID0+IHtcbiAgICAgIHRhcmdldGVkTXV0YXRpb24oaW5wdXQpO1xuICAgICAgdmFsaWQoaW5wdXQucGVyc29uYUlkICE9PSBpZGVudGl0eS5wZXJzb25hSWQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkuaW52aXRlTWVtYmVyKGlucHV0KTtcbiAgICB9LFxuICAgIGxlYXZlQ29udmVyc2F0aW9uOiBhc3luYyAoaW5wdXQ6IExlYXZlQ29udmVyc2F0aW9uSW5wdXQpID0+IHtcbiAgICAgIGNvbnZlcnNhdGlvbk11dGF0aW9uKGlucHV0KTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LmxlYXZlQ29udmVyc2F0aW9uKGlucHV0KTtcbiAgICB9LFxuICAgIGxpc3RDb252ZXJzYXRpb25zOiBhc3luYyAoaW5wdXQ6IENoYXRMaXN0SW5wdXQgPSB7fSkgPT4ge1xuICAgICAgbGlzdChpbnB1dCk7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5saXN0Q29udmVyc2F0aW9ucyhpbnB1dCk7XG4gICAgfSxcbiAgICBsaXN0SW52aXRlczogYXN5bmMgKGlucHV0OiBDaGF0TGlzdElucHV0ID0ge30pID0+IHtcbiAgICAgIGxpc3QoaW5wdXQpO1xuICAgICAgcmV0dXJuIHJlcG9zaXRvcnkubGlzdEludml0ZXMoaW5wdXQpO1xuICAgIH0sXG4gICAgcmVtb3ZlTWVtYmVyOiBhc3luYyAoaW5wdXQ6IFJlbW92ZU1lbWJlcklucHV0KSA9PiB7XG4gICAgICB0YXJnZXRlZE11dGF0aW9uKGlucHV0KTtcbiAgICAgIHZhbGlkKGlucHV0LnBlcnNvbmFJZCAhPT0gaWRlbnRpdHkucGVyc29uYUlkKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LnJlbW92ZU1lbWJlcihpbnB1dCk7XG4gICAgfSxcbiAgICB0cmFuc2Zlck93bmVyc2hpcDogYXN5bmMgKGlucHV0OiBUcmFuc2Zlck93bmVyc2hpcElucHV0KSA9PiB7XG4gICAgICB0YXJnZXRlZE11dGF0aW9uKGlucHV0KTtcbiAgICAgIHZhbGlkKGlucHV0LnBlcnNvbmFJZCAhPT0gaWRlbnRpdHkucGVyc29uYUlkKTtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LnRyYW5zZmVyT3duZXJzaGlwKGlucHV0KTtcbiAgICB9XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJyYW5kb21VVUlEIiwiQ2hhdEVycm9yIiwiYXBwZW5kQ2hhdEV2ZW50IiwiY3JlYXRlTWVtYmVyc2hpcEF1dGhvcml6ZXIiLCJpc0NoYXRJZGVudGlmaWVyIiwiY3JlYXRlRHVyYWJsZVRyYW5zYWN0aW9uIiwiaGFzaCIsImlucHV0IiwidXBkYXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsImRpZ2VzdCIsImludml0ZU1pbGxpc2Vjb25kcyIsIm1lbWJlcnNoaXBEdG8iLCJyZWNvcmQiLCJjb252ZXJzYXRpb25JZCIsImVwb2NoIiwiam9pblNlcXVlbmNlIiwibGVmdFNlcXVlbmNlIiwicGVyc29uYUlkIiwicmV2aXNpb24iLCJyb2xlIiwic3RhdGUiLCJpbnZpdGVEdG8iLCJleHBpcmVzQXQiLCJpbnZpdGVJZCIsIl9rZXkiLCJpbnZpdGVkQnlQZXJzb25hSWQiLCJjcmVhdGVEdXJhYmxlQ29udmVyc2F0aW9uUmVwb3NpdG9yeSIsImNvbnRleHQiLCJpZGVudGl0eSIsIm9wdGlvbnMiLCJhdWRpZW5jZSIsInRyYW5zYWN0IiwiZXhjbHVzaXZlIiwicmVhZCIsInJlYWRDb2xsZWN0aW9ucyIsInF1ZXJ5Iiwic3VtbWFyeSIsImNvbnZlcnNhdGlvbiIsIm1lbWJlciIsImluY2x1ZGVOYW1lIiwiYWN0aXZlTWVtYmVyQ291bnQiLCJraW5kIiwibWVtYmVyc2hpcCIsIm1lbWJlcnNoaXBSZXZpc2lvbiIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsInVuZGVmaW5lZCIsImFjdG9yIiwiYWxsb3dlZCIsImFkdWx0Iiwid2hvIiwiYXV0aG9yaXplSWRlbnRpdHkiLCJjb25uZWN0ZWQiLCJmcm9tIiwidGFyZ2V0IiwiYWN0b3JVc2VyIiwidXNlcklkIiwiZnJvbVVzZXIiLCJ0byIsImlkIiwidmFsdWUiLCJjaGF0U2NoZW1hVmVyc2lvbiIsImFjY2VzcyIsInB1cnBvc2UiLCJjaGVja1JldmlzaW9uIiwiZW50cnkiLCJleHBlY3RlZCIsImV2ZW50IiwicmVzb3VyY2VJZCIsImFjdG9yUGVyc29uYUlkIiwibWVtYmVyc2hpcEVwb2NoIiwicmVjZWlwdCIsImFjdGlvbiIsImtleSIsImlkZW1wb3RlbmN5S2V5IiwicGF5bG9hZEhhc2giLCJwcmlvciIsInJlc3VsdCIsInNhdmUiLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJvd25lclVzZXJJZCIsInJhdGVMaW1pdCIsIk1hdGgiLCJmbG9vciIsImFkZE1lbWJlciIsImV2ZW50U2VxdWVuY2UiLCJfZnJvbSIsIl90byIsImFjY2VwdGVkQXQiLCJjdXJyZW50S2V5Iiwiam9pbkV2ZW50U2VxdWVuY2UiLCJhZGRJbnZpdGUiLCJpbnZpdGVlUGVyc29uYUlkIiwiaW52aXRlZVVzZXJJZCIsImNyZWF0ZWRBdCIsImV4cGlyZUludml0ZXMiLCJnZXRPckNyZWF0ZURpcmVjdCIsInBhcnRpY2lwYW50UGVyc29uYUlkIiwicGFpciIsInNvcnQiLCJleGlzdGluZyIsImxhc3RTZXF1ZW5jZSIsImNyZWF0ZWRCeVBlcnNvbmFJZCIsImRpcmVjdFBhaXJLZXkiLCJpc0RpcmVjdCIsIm93biIsImNyZWF0ZUdyb3VwIiwicmVxdWVzdCIsInRhcmdldHMiLCJtZW1iZXJQZXJzb25hSWRzIiwicHVzaCIsImNvbnRlbnRWZXJzaW9uIiwibmFtZUNvbnRlbnRWZXJzaW9uIiwibmFtZURlY2lzaW9uIiwiY2xhc3NpZnlOYW1lIiwiaW52aXRlTWVtYmVyIiwiZXhwZWN0ZWRSZXZpc2lvbiIsImNvdW50cyIsImFjdGl2ZSIsInRvdGFsIiwicmVzb2x2ZUludml0ZSIsImFjY2VwdCIsImludml0ZSIsImN1cnJlbnQiLCJpbnZpdGVyIiwiaW5jbHVkZXMiLCJ1cGRhdGVkIiwiY291bnQiLCJjaGFuZ2VNZW1iZXJzaGlwIiwib3duQWNjZXNzIiwidGFyZ2V0UGVyc29uYUlkIiwibGVhdmluZyIsIm93blJlc3VsdCIsInNlcXVlbmNlIiwiY2xvc2UiLCJsaXN0Q29udmVyc2F0aW9ucyIsImlkcyIsImFmdGVyIiwibGltaXQiLCJyZXN1bHRzIiwicGVlciIsImVycm9yIiwiY29kZSIsImxpc3RJbnZpdGVzIiwicmVjb3JkcyIsIm1hcCIsImdldFBhcnRpY2lwYW50cyIsInZpZXdlclBlcnNvbmEiLCJ2aWV3ZXJVc2VyIiwiYWNjZXB0SW52aXRlIiwiY2hhbmdlTWVtYmVyUm9sZSIsImRlY2xpbmVJbnZpdGUiLCJsZWF2ZUNvbnZlcnNhdGlvbiIsInJlbW92ZU1lbWJlciIsInRyYW5zZmVyT3duZXJzaGlwIiwidmFsaWQiLCJjb25kaXRpb24iLCJtdXRhdGlvbiIsIkJvb2xlYW4iLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwiY29udmVyc2F0aW9uTXV0YXRpb24iLCJ0YXJnZXRlZE11dGF0aW9uIiwibGlzdCIsImNyZWF0ZUR1cmFibGVDb252ZXJzYXRpb25BY3Rpb25zIiwicmVwb3NpdG9yeSIsInRyaW0iLCJsZW5ndGgiLCJBcnJheSIsImlzQXJyYXkiLCJldmVyeSIsIlNldCIsInNpemUiXSwibWFwcGluZ3MiOiJBQUFBLHdHQUF3RyxHQUN4RyxTQUFRQSxVQUFVLEVBQUVDLFVBQVUsUUFBTyxjQUFjO0FBRW5ELFNBQVFDLFNBQVMsUUFBTyxjQUFjO0FBQ3RDLFNBQVFDLGVBQWUsUUFBTyxjQUFjO0FBQzVDLFNBQVFDLDBCQUEwQixFQUFFQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFDN0UsU0FBUUMsd0JBQXdC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
@@ -8,4 +8,4 @@ export class DurableChatError extends Error {
8
8
  }
9
9
  export { DurableChatError as ChatError };
10
10
 
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIENoYXRFcnJvckNvZGUgPSAnY29uZmxpY3QnIHwgJ2ZvcmJpZGRlbicgfCAnaW52YWxpZF9yZXF1ZXN0JyB8ICdyYXRlX2xpbWl0ZWQnIHwgJ3VuYXZhaWxhYmxlJztcblxuZXhwb3J0IGNsYXNzIER1cmFibGVDaGF0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGU6IENoYXRFcnJvckNvZGU7XG5cbiAgY29uc3RydWN0b3IoY29kZTogQ2hhdEVycm9yQ29kZSkge1xuICAgIHN1cGVyKGNvZGUpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5uYW1lID0gJ0NoYXRFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IHtEdXJhYmxlQ2hhdEVycm9yIGFzIENoYXRFcnJvcn07XG4iXSwibmFtZXMiOlsiRHVyYWJsZUNoYXRFcnJvciIsIkVycm9yIiwiY29kZSIsIm5hbWUiLCJDaGF0RXJyb3IiXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sTUFBTUEseUJBQXlCQztJQUMzQkMsS0FBb0I7SUFFN0IsWUFBWUEsSUFBbUIsQ0FBRTtRQUMvQixLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQSxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsU0FBUUgsb0JBQW9CSSxTQUFTLEdBQUUifQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2Vycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDaGF0RXJyb3JDb2RlID0gJ2NvbmZsaWN0JyB8ICdmb3JiaWRkZW4nIHwgJ2ludmFsaWRfcmVxdWVzdCcgfCAncmF0ZV9saW1pdGVkJyB8ICd1bmF2YWlsYWJsZSc7XG5cbmV4cG9ydCBjbGFzcyBEdXJhYmxlQ2hhdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlOiBDaGF0RXJyb3JDb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGNvZGU6IENoYXRFcnJvckNvZGUpIHtcbiAgICBzdXBlcihjb2RlKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMubmFtZSA9ICdDaGF0RXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCB7RHVyYWJsZUNoYXRFcnJvciBhcyBDaGF0RXJyb3J9O1xuIl0sIm5hbWVzIjpbIkR1cmFibGVDaGF0RXJyb3IiLCJFcnJvciIsImNvZGUiLCJuYW1lIiwiQ2hhdEVycm9yIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU1BLHlCQUF5QkM7SUFDM0JDLEtBQW9CO0lBRTdCLFlBQVlBLElBQW1CLENBQUU7UUFDL0IsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLFNBQVFILG9CQUFvQkksU0FBUyxHQUFFIn0=
@@ -47,4 +47,4 @@ import { isChatIdentifier } from './membership.js';
47
47
  return record;
48
48
  };
49
49
 
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvZXZlbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmFuZG9tVVVJRH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5pbXBvcnQge0NoYXRFcnJvcn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHtpc0NoYXRJZGVudGlmaWVyfSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuXG5pbXBvcnQgdHlwZSB7Q2hhdFF1ZXJ5fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuaW1wb3J0IHR5cGUge0NoYXRFdmVudH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwZW5kQ2hhdEV2ZW50SW5wdXQge1xuICByZWFkb25seSBhY3RvclBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBDaGF0RXZlbnRbJ2tpbmQnXTtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcEVwb2NoPzogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVkQ2hhdEV2ZW50IGV4dGVuZHMgQ2hhdEV2ZW50IHtcbiAgcmVhZG9ubHkgX2tleTogc3RyaW5nO1xuICByZWFkb25seSBhY3RvclBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgbGVhc2VVbnRpbDogbnVtYmVyO1xuICByZWFkb25seSBtZW1iZXJzaGlwRXBvY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5leHRBdHRlbXB0QXQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgc3RhdHVzOiAncGVuZGluZyc7XG4gIHJlYWRvbmx5IHR5cGU6IENoYXRFdmVudFsna2luZCddO1xufVxuXG4vKiogUmVxdWlyZXMgdGhlIGNhbGxlcidzIGV4Y2x1c2l2ZSBjb252ZXJzYXRpb25zL2NoYXRPdXRib3ggbG9ja3M7IG5ldmVyIGNvbW1pdHMgaW5kZXBlbmRlbnRseS4gKi9cbmV4cG9ydCBjb25zdCBhcHBlbmRDaGF0RXZlbnQgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBpbnB1dDogQXBwZW5kQ2hhdEV2ZW50SW5wdXQpOiBQcm9taXNlPFN0b3JlZENoYXRFdmVudD4gPT4ge1xuICBpZighaW5wdXQgfHwgIWlzQ2hhdElkZW50aWZpZXIoaW5wdXQuYWN0b3JQZXJzb25hSWQpIHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKVxuICAgIHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LnJlc291cmNlSWQpIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5yZXZpc2lvbikgfHwgaW5wdXQucmV2aXNpb24gPCAxXG4gICAgfHwgKGlucHV0Lm1lbWJlcnNoaXBFcG9jaCAhPT0gdW5kZWZpbmVkICYmICFpc0NoYXRJZGVudGlmaWVyKGlucHV0Lm1lbWJlcnNoaXBFcG9jaCkpXG4gICAgfHwgIVsnbWVtYmVyc2hpcC5jaGFuZ2VkJywgJ21lc3NhZ2UuY2hhbmdlZCcsICdyZWNlaXB0LmNoYW5nZWQnXS5pbmNsdWRlcyhpbnB1dC5raW5kKSkge1xuICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ludmFsaWRfcmVxdWVzdCcpO1xuICB9XG4gIGNvbnN0IHNlcXVlbmNlID0gYXdhaXQgcmVhZDxudW1iZXI+KGBMRVQgY29udmVyc2F0aW9uID0gRE9DVU1FTlQoJ2NvbnZlcnNhdGlvbnMnLCBAaWQpXG4gICAgRklMVEVSIGNvbnZlcnNhdGlvbiAhPSBudWxsIEFORCBjb252ZXJzYXRpb24uY2hhdFNjaGVtYVZlcnNpb24gPT0gMVxuICAgICAgQU5EIChjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPT0gbnVsbCBPUlxuICAgICAgICAoSVNfTlVNQkVSKGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZSkgQU5EIGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZSA+PSAwXG4gICAgICAgICAgQU5EIEZMT09SKGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZSkgPT0gY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlXG4gICAgICAgICAgQU5EIGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZSA8IDkwMDcxOTkyNTQ3NDA5OTEpKVxuICAgIFVQREFURSBAaWQgV0lUSCB7bGFzdEV2ZW50U2VxdWVuY2U6IChjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPT0gbnVsbCA/IDAgOiBjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UpICsgMX1cbiAgICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FVy5sYXN0RXZlbnRTZXF1ZW5jZWAsIHtpZDogaW5wdXQuY29udmVyc2F0aW9uSWR9KTtcbiAgaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHNlcXVlbmNlKSB8fCBOdW1iZXIoc2VxdWVuY2UpIDwgMSkge1xuICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gIH1cbiAgY29uc3QgaWQgPSByYW5kb21VVUlEKCk7XG4gIGNvbnN0IHJlY29yZDogU3RvcmVkQ2hhdEV2ZW50ID0ge1xuICAgIF9rZXk6IGlkLCBhY3RvclBlcnNvbmFJZDogaW5wdXQuYWN0b3JQZXJzb25hSWQsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgIGV2ZW50SWQ6IGlkLCBldmVudFNlcXVlbmNlOiBzZXF1ZW5jZSEsIGtpbmQ6IGlucHV0LmtpbmQsIGxlYXNlVW50aWw6IDAsXG4gICAgbWVtYmVyc2hpcEVwb2NoOiBpbnB1dC5tZW1iZXJzaGlwRXBvY2gsIG5leHRBdHRlbXB0QXQ6IDAsIHJlc291cmNlSWQ6IGlucHV0LnJlc291cmNlSWQsXG4gICAgcmV2aXNpb246IGlucHV0LnJldmlzaW9uLCBzdGF0dXM6ICdwZW5kaW5nJywgdHlwZTogaW5wdXQua2luZFxuICB9O1xuICBpZihhd2FpdCByZWFkPGJvb2xlYW4+KCdJTlNFUlQgQHJlY29yZCBJTiBjaGF0T3V0Ym94IFJFVFVSTiB0cnVlJywge3JlY29yZH0pICE9PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcigndW5hdmFpbGFibGUnKTtcbiAgfVxuICByZXR1cm4gcmVjb3JkO1xufTtcbiJdLCJuYW1lcyI6WyJyYW5kb21VVUlEIiwiQ2hhdEVycm9yIiwiaXNDaGF0SWRlbnRpZmllciIsImFwcGVuZENoYXRFdmVudCIsInJlYWQiLCJpbnB1dCIsImFjdG9yUGVyc29uYUlkIiwiY29udmVyc2F0aW9uSWQiLCJyZXNvdXJjZUlkIiwiTnVtYmVyIiwiaXNTYWZlSW50ZWdlciIsInJldmlzaW9uIiwibWVtYmVyc2hpcEVwb2NoIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJraW5kIiwic2VxdWVuY2UiLCJpZCIsInJlY29yZCIsIl9rZXkiLCJjcmVhdGVkQXQiLCJEYXRlIiwibm93IiwiZXZlbnRJZCIsImV2ZW50U2VxdWVuY2UiLCJsZWFzZVVudGlsIiwibmV4dEF0dGVtcHRBdCIsInN0YXR1cyIsInR5cGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFVBQVUsUUFBTyxjQUFjO0FBRXZDLFNBQVFDLFNBQVMsUUFBTyxjQUFjO0FBQ3RDLFNBQVFDLGdCQUFnQixRQUFPLGtCQUFrQjtBQXlCakQsaUdBQWlHLEdBQ2pHLE9BQU8sTUFBTUMsa0JBQWtCLE9BQU9DLE1BQWlCQztJQUNyRCxJQUFHLENBQUNBLFNBQVMsQ0FBQ0gsaUJBQWlCRyxNQUFNQyxjQUFjLEtBQUssQ0FBQ0osaUJBQWlCRyxNQUFNRSxjQUFjLEtBQ3pGLENBQUNMLGlCQUFpQkcsTUFBTUcsVUFBVSxLQUFLLENBQUNDLE9BQU9DLGFBQWEsQ0FBQ0wsTUFBTU0sUUFBUSxLQUFLTixNQUFNTSxRQUFRLEdBQUcsS0FDaEdOLE1BQU1PLGVBQWUsS0FBS0MsYUFBYSxDQUFDWCxpQkFBaUJHLE1BQU1PLGVBQWUsS0FDL0UsQ0FBQztRQUFDO1FBQXNCO1FBQW1CO0tBQWtCLENBQUNFLFFBQVEsQ0FBQ1QsTUFBTVUsSUFBSSxHQUFHO1FBQ3ZGLE1BQU0sSUFBSWQsVUFBVTtJQUN0QjtJQUNBLE1BQU1lLFdBQVcsTUFBTVosS0FBYSxDQUFDOzs7Ozs7O21EQU9ZLENBQUMsRUFBRTtRQUFDYSxJQUFJWixNQUFNRSxjQUFjO0lBQUE7SUFDN0UsSUFBRyxDQUFDRSxPQUFPQyxhQUFhLENBQUNNLGFBQWFQLE9BQU9PLFlBQVksR0FBRztRQUMxRCxNQUFNLElBQUlmLFVBQVU7SUFDdEI7SUFDQSxNQUFNZ0IsS0FBS2pCO0lBQ1gsTUFBTWtCLFNBQTBCO1FBQzlCQyxNQUFNRjtRQUFJWCxnQkFBZ0JELE1BQU1DLGNBQWM7UUFBRUMsZ0JBQWdCRixNQUFNRSxjQUFjO1FBQUVhLFdBQVdDLEtBQUtDLEdBQUc7UUFDekdDLFNBQVNOO1FBQUlPLGVBQWVSO1FBQVdELE1BQU1WLE1BQU1VLElBQUk7UUFBRVUsWUFBWTtRQUNyRWIsaUJBQWlCUCxNQUFNTyxlQUFlO1FBQUVjLGVBQWU7UUFBR2xCLFlBQVlILE1BQU1HLFVBQVU7UUFDdEZHLFVBQVVOLE1BQU1NLFFBQVE7UUFBRWdCLFFBQVE7UUFBV0MsTUFBTXZCLE1BQU1VLElBQUk7SUFDL0Q7SUFDQSxJQUFHLE1BQU1YLEtBQWMsNENBQTRDO1FBQUNjO0lBQU0sT0FBTyxNQUFNO1FBQ3JGLE1BQU0sSUFBSWpCLFVBQVU7SUFDdEI7SUFDQSxPQUFPaUI7QUFDVCxFQUFFIn0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2V2ZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHtDaGF0RXJyb3J9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7aXNDaGF0SWRlbnRpZmllcn0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcblxuaW1wb3J0IHR5cGUge0NoYXRRdWVyeX0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcbmltcG9ydCB0eXBlIHtDaGF0RXZlbnR9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGVuZENoYXRFdmVudElucHV0IHtcbiAgcmVhZG9ubHkgYWN0b3JQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogQ2hhdEV2ZW50WydraW5kJ107XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBFcG9jaD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlZENoYXRFdmVudCBleHRlbmRzIENoYXRFdmVudCB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWN0b3JQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY3JlYXRlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGxlYXNlVW50aWw6IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcEVwb2NoPzogc3RyaW5nO1xuICByZWFkb25seSBuZXh0QXR0ZW1wdEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXR1czogJ3BlbmRpbmcnO1xuICByZWFkb25seSB0eXBlOiBDaGF0RXZlbnRbJ2tpbmQnXTtcbn1cblxuLyoqIFJlcXVpcmVzIHRoZSBjYWxsZXIncyBleGNsdXNpdmUgY29udmVyc2F0aW9ucy9jaGF0T3V0Ym94IGxvY2tzOyBuZXZlciBjb21taXRzIGluZGVwZW5kZW50bHkuICovXG5leHBvcnQgY29uc3QgYXBwZW5kQ2hhdEV2ZW50ID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgaW5wdXQ6IEFwcGVuZENoYXRFdmVudElucHV0KTogUHJvbWlzZTxTdG9yZWRDaGF0RXZlbnQ+ID0+IHtcbiAgaWYoIWlucHV0IHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LmFjdG9yUGVyc29uYUlkKSB8fCAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZClcbiAgICB8fCAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5yZXNvdXJjZUlkKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQucmV2aXNpb24pIHx8IGlucHV0LnJldmlzaW9uIDwgMVxuICAgIHx8IChpbnB1dC5tZW1iZXJzaGlwRXBvY2ggIT09IHVuZGVmaW5lZCAmJiAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5tZW1iZXJzaGlwRXBvY2gpKVxuICAgIHx8ICFbJ21lbWJlcnNoaXAuY2hhbmdlZCcsICdtZXNzYWdlLmNoYW5nZWQnLCAncmVjZWlwdC5jaGFuZ2VkJ10uaW5jbHVkZXMoaW5wdXQua2luZCkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdpbnZhbGlkX3JlcXVlc3QnKTtcbiAgfVxuICBjb25zdCBzZXF1ZW5jZSA9IGF3YWl0IHJlYWQ8bnVtYmVyPihgTEVUIGNvbnZlcnNhdGlvbiA9IERPQ1VNRU5UKCdjb252ZXJzYXRpb25zJywgQGlkKVxuICAgIEZJTFRFUiBjb252ZXJzYXRpb24gIT0gbnVsbCBBTkQgY29udmVyc2F0aW9uLmNoYXRTY2hlbWFWZXJzaW9uID09IDFcbiAgICAgIEFORCAoY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlID09IG51bGwgT1JcbiAgICAgICAgKElTX05VTUJFUihjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UpIEFORCBjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPj0gMFxuICAgICAgICAgIEFORCBGTE9PUihjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UpID09IGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZVxuICAgICAgICAgIEFORCBjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPCA5MDA3MTk5MjU0NzQwOTkxKSlcbiAgICBVUERBVEUgQGlkIFdJVEgge2xhc3RFdmVudFNlcXVlbmNlOiAoY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlID09IG51bGwgPyAwIDogY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlKSArIDF9XG4gICAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVcubGFzdEV2ZW50U2VxdWVuY2VgLCB7aWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkfSk7XG4gIGlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzZXF1ZW5jZSkgfHwgTnVtYmVyKHNlcXVlbmNlKSA8IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICB9XG4gIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICBjb25zdCByZWNvcmQ6IFN0b3JlZENoYXRFdmVudCA9IHtcbiAgICBfa2V5OiBpZCwgYWN0b3JQZXJzb25hSWQ6IGlucHV0LmFjdG9yUGVyc29uYUlkLCBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICBldmVudElkOiBpZCwgZXZlbnRTZXF1ZW5jZTogc2VxdWVuY2UhLCBraW5kOiBpbnB1dC5raW5kLCBsZWFzZVVudGlsOiAwLFxuICAgIG1lbWJlcnNoaXBFcG9jaDogaW5wdXQubWVtYmVyc2hpcEVwb2NoLCBuZXh0QXR0ZW1wdEF0OiAwLCByZXNvdXJjZUlkOiBpbnB1dC5yZXNvdXJjZUlkLFxuICAgIHJldmlzaW9uOiBpbnB1dC5yZXZpc2lvbiwgc3RhdHVzOiAncGVuZGluZycsIHR5cGU6IGlucHV0LmtpbmRcbiAgfTtcbiAgaWYoYXdhaXQgcmVhZDxib29sZWFuPignSU5TRVJUIEByZWNvcmQgSU4gY2hhdE91dGJveCBSRVRVUk4gdHJ1ZScsIHtyZWNvcmR9KSAhPT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZDtcbn07XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsIkNoYXRFcnJvciIsImlzQ2hhdElkZW50aWZpZXIiLCJhcHBlbmRDaGF0RXZlbnQiLCJyZWFkIiwiaW5wdXQiLCJhY3RvclBlcnNvbmFJZCIsImNvbnZlcnNhdGlvbklkIiwicmVzb3VyY2VJZCIsIk51bWJlciIsImlzU2FmZUludGVnZXIiLCJyZXZpc2lvbiIsIm1lbWJlcnNoaXBFcG9jaCIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwia2luZCIsInNlcXVlbmNlIiwiaWQiLCJyZWNvcmQiLCJfa2V5IiwiY3JlYXRlZEF0IiwiRGF0ZSIsIm5vdyIsImV2ZW50SWQiLCJldmVudFNlcXVlbmNlIiwibGVhc2VVbnRpbCIsIm5leHRBdHRlbXB0QXQiLCJzdGF0dXMiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxVQUFVLFFBQU8sY0FBYztBQUV2QyxTQUFRQyxTQUFTLFFBQU8sY0FBYztBQUN0QyxTQUFRQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUF5QmpELGlHQUFpRyxHQUNqRyxPQUFPLE1BQU1DLGtCQUFrQixPQUFPQyxNQUFpQkM7SUFDckQsSUFBRyxDQUFDQSxTQUFTLENBQUNILGlCQUFpQkcsTUFBTUMsY0FBYyxLQUFLLENBQUNKLGlCQUFpQkcsTUFBTUUsY0FBYyxLQUN6RixDQUFDTCxpQkFBaUJHLE1BQU1HLFVBQVUsS0FBSyxDQUFDQyxPQUFPQyxhQUFhLENBQUNMLE1BQU1NLFFBQVEsS0FBS04sTUFBTU0sUUFBUSxHQUFHLEtBQ2hHTixNQUFNTyxlQUFlLEtBQUtDLGFBQWEsQ0FBQ1gsaUJBQWlCRyxNQUFNTyxlQUFlLEtBQy9FLENBQUM7UUFBQztRQUFzQjtRQUFtQjtLQUFrQixDQUFDRSxRQUFRLENBQUNULE1BQU1VLElBQUksR0FBRztRQUN2RixNQUFNLElBQUlkLFVBQVU7SUFDdEI7SUFDQSxNQUFNZSxXQUFXLE1BQU1aLEtBQWEsQ0FBQzs7Ozs7OzttREFPWSxDQUFDLEVBQUU7UUFBQ2EsSUFBSVosTUFBTUUsY0FBYztJQUFBO0lBQzdFLElBQUcsQ0FBQ0UsT0FBT0MsYUFBYSxDQUFDTSxhQUFhUCxPQUFPTyxZQUFZLEdBQUc7UUFDMUQsTUFBTSxJQUFJZixVQUFVO0lBQ3RCO0lBQ0EsTUFBTWdCLEtBQUtqQjtJQUNYLE1BQU1rQixTQUEwQjtRQUM5QkMsTUFBTUY7UUFBSVgsZ0JBQWdCRCxNQUFNQyxjQUFjO1FBQUVDLGdCQUFnQkYsTUFBTUUsY0FBYztRQUFFYSxXQUFXQyxLQUFLQyxHQUFHO1FBQ3pHQyxTQUFTTjtRQUFJTyxlQUFlUjtRQUFXRCxNQUFNVixNQUFNVSxJQUFJO1FBQUVVLFlBQVk7UUFDckViLGlCQUFpQlAsTUFBTU8sZUFBZTtRQUFFYyxlQUFlO1FBQUdsQixZQUFZSCxNQUFNRyxVQUFVO1FBQ3RGRyxVQUFVTixNQUFNTSxRQUFRO1FBQUVnQixRQUFRO1FBQVdDLE1BQU12QixNQUFNVSxJQUFJO0lBQy9EO0lBQ0EsSUFBRyxNQUFNWCxLQUFjLDRDQUE0QztRQUFDYztJQUFNLE9BQU8sTUFBTTtRQUNyRixNQUFNLElBQUlqQixVQUFVO0lBQ3RCO0lBQ0EsT0FBT2lCO0FBQ1QsRUFBRSJ9
@@ -7,4 +7,4 @@ export * from './types.js';
7
7
  export * from './messages.js';
8
8
  export * from './messageTypes.js';
9
9
 
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJzYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3JzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2VUeXBlcy5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLGFBQWE7QUFDM0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxvQkFBb0IifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udmVyc2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlVHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsY0FBYztBQUM1QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsb0JBQW9CIn0=
@@ -82,4 +82,4 @@ export const createMembershipAuthorizer = (read)=>async (identity, input)=>{
82
82
  };
83
83
  export const authorizeConversationAccess = (context, identity, input)=>createMembershipAuthorizer(createDurableQuery(context))(identity, input);
84
84
 
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvbWVtYmVyc2hpcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYXRFcnJvcn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHtjcmVhdGVEdXJhYmxlUXVlcnl9IGZyb20gJy4vdHJhbnNhY3Rpb24uanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29udmVyc2F0aW9uS2luZCwgQ29udmVyc2F0aW9uTWVtYmVyc2hpcCwgQ29udmVyc2F0aW9uU3RhdGV9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRJZGVudGl0eSB7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSB1c2VySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJzaGlwQWNjZXNzSW5wdXQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBtZW1iZXJzaGlwRXBvY2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2VTZXF1ZW5jZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgcHVycG9zZTogJ2hpc3RvcnknIHwgJ2ludml0ZScgfCAncGFydGljaXBhbnRzJyB8ICdyZXBvcnQnIHwgJ3NlbmQnIHwgJ3NvY2tldCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXplZE1lbWJlcnNoaXAgZXh0ZW5kcyBDb252ZXJzYXRpb25NZW1iZXJzaGlwIHtcbiAgcmVhZG9ubHkgYWN0aXZlTWVtYmVyQ291bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uU3RhdGU6IENvbnZlcnNhdGlvblN0YXRlO1xuICByZWFkb25seSBraW5kOiBDb252ZXJzYXRpb25LaW5kO1xuICByZWFkb25seSBsYXN0U2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcFJldmlzaW9uOiBudW1iZXI7XG59XG5cbi8qKiBJbmplY3QgdGhlIHRyYW5zYWN0aW9uJ3MgcXVlcnkgYWRhcHRlciB3aGVuIHRoaXMgY2hlY2sgZ3VhcmRzIGEgd3JpdGUuICovXG5leHBvcnQgdHlwZSBDaGF0UXVlcnkgPSA8VD4ocXVlcnk6IHN0cmluZywgYmluZFZhcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgY29uc3QgaXNDaGF0SWRlbnRpZmllciA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eW2EtekEtWjAtOV8tXXsxLDEyOH0kLy50ZXN0KHZhbHVlKTtcblxuY29uc3QgcHVycG9zZXM6IHJlYWRvbmx5IE1lbWJlcnNoaXBBY2Nlc3NJbnB1dFsncHVycG9zZSddW10gPSBbJ2hpc3RvcnknLCAnaW52aXRlJywgJ3BhcnRpY2lwYW50cycsICdyZXBvcnQnLCAnc2VuZCcsICdzb2NrZXQnXTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1lbWJlcnNoaXBBdXRob3JpemVyID0gKHJlYWQ6IENoYXRRdWVyeSkgPT4gYXN5bmMgKFxuICBpZGVudGl0eTogQ2hhdElkZW50aXR5LCBpbnB1dDogTWVtYmVyc2hpcEFjY2Vzc0lucHV0XG4pOiBQcm9taXNlPEF1dGhvcml6ZWRNZW1iZXJzaGlwPiA9PiB7XG4gIGlmKCFpZGVudGl0eSB8fCAhaXNDaGF0SWRlbnRpZmllcihpZGVudGl0eS51c2VySWQpIHx8ICFpc0NoYXRJZGVudGlmaWVyKGlkZW50aXR5LnBlcnNvbmFJZCkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgfVxuICBpZighaW5wdXQgfHwgIWlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY29udmVyc2F0aW9uSWQpIHx8ICFwdXJwb3Nlcy5pbmNsdWRlcyhpbnB1dC5wdXJwb3NlKVxuICAgIHx8IChpbnB1dC5tZW1iZXJzaGlwRXBvY2ggIT09IHVuZGVmaW5lZCAmJiAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5tZW1iZXJzaGlwRXBvY2gpKVxuICAgIHx8IChpbnB1dC5tZXNzYWdlU2VxdWVuY2UgIT09IHVuZGVmaW5lZFxuICAgICAgJiYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5tZXNzYWdlU2VxdWVuY2UpIHx8IGlucHV0Lm1lc3NhZ2VTZXF1ZW5jZSA8IDEpKVxuICAgIHx8IChpbnB1dC5wdXJwb3NlID09PSAncmVwb3J0JyAmJiBpbnB1dC5tZXNzYWdlU2VxdWVuY2UgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdpbnZhbGlkX3JlcXVlc3QnKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkPEF1dGhvcml6ZWRNZW1iZXJzaGlwPihgXG4gICAgTEVUIHVzZXIgPSBET0NVTUVOVCgndXNlcnMnLCBAdXNlcklkKVxuICAgIExFVCBwZXJzb25hID0gRE9DVU1FTlQoJ3BlcnNvbmFzJywgQHBlcnNvbmFJZClcbiAgICBMRVQgY29udmVyc2F0aW9uID0gRE9DVU1FTlQoJ2NvbnZlcnNhdGlvbnMnLCBAY29udmVyc2F0aW9uSWQpXG4gICAgRklMVEVSIHVzZXIgIT0gbnVsbCBBTkQgdXNlci5hY3RpdmUgIT0gZmFsc2UgQU5EIHBlcnNvbmEgIT0gbnVsbCBBTkQgcGVyc29uYS5hY3RpdmUgIT0gZmFsc2VcbiAgICAgIEFORCBwZXJzb25hLnVzZXJJZCA9PSBAdXNlcklkIEFORCBjb252ZXJzYXRpb24gIT0gbnVsbCBBTkQgY29udmVyc2F0aW9uLmNoYXRTY2hlbWFWZXJzaW9uID09IDFcbiAgICAgIEFORCBjb252ZXJzYXRpb24ua2luZCBJTiBbJ2RpcmVjdCcsICdncm91cCddIEFORCBjb252ZXJzYXRpb24uc3RhdGUgSU4gWydhY3RpdmUnLCAnZm9ybWluZycsICdjbG9zZWQnXVxuICAgIExFVCBtZW1iZXJzaGlwID0gRklSU1QoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcFxuICAgICAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWQgQU5EIG1lbWJlci5wZXJzb25hSWQgPT0gQHBlcnNvbmFJZFxuICAgICAgICBBTkQgbWVtYmVyLnVzZXJJZCA9PSBAdXNlcklkIEFORCBtZW1iZXIuX2Zyb20gPT0gQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKVxuICAgICAgICBBTkQgbWVtYmVyLl90byA9PSBDT05DQVQoJ2NvbnZlcnNhdGlvbnMvJywgQGNvbnZlcnNhdGlvbklkKVxuICAgICAgICBBTkQgKEBlcG9jaCA9PSBudWxsIE9SIG1lbWJlci5lcG9jaCA9PSBAZXBvY2gpXG4gICAgICAgIEFORCAoQHB1cnBvc2UgPT0gJ3JlcG9ydCcgPyBtZW1iZXIuc3RhdGUgSU4gWydhY3RpdmUnLCAnbGVmdCcsICdyZW1vdmVkJ10gOiBtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScpXG4gICAgICAgIEFORCAoQHNlcXVlbmNlID09IG51bGwgT1IgKElTX05VTUJFUihtZW1iZXIuam9pblNlcXVlbmNlKSBBTkQgQHNlcXVlbmNlID49IG1lbWJlci5qb2luU2VxdWVuY2VcbiAgICAgICAgICBBTkQgQHNlcXVlbmNlIDw9IGNvbnZlcnNhdGlvbi5sYXN0U2VxdWVuY2VcbiAgICAgICAgICBBTkQgKG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJyBPUiAoSVNfTlVNQkVSKG1lbWJlci5sZWZ0U2VxdWVuY2UpIEFORCBAc2VxdWVuY2UgPD0gbWVtYmVyLmxlZnRTZXF1ZW5jZSkpKSlcbiAgICAgIFNPUlQgbWVtYmVyLmFjY2VwdGVkQXQgREVTQywgbWVtYmVyLl9rZXkgREVTQyBMSU1JVCAxIFJFVFVSTiBtZW1iZXIpXG4gICAgRklMVEVSIG1lbWJlcnNoaXAgIT0gbnVsbFxuICAgIExFVCBwZWVycyA9IChGT1IgbWVtYmVyIElOIGhhc0NoYXRNZW1iZXJzaGlwXG4gICAgICBGSUxURVIgbWVtYmVyLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZCBBTkQgbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnXG4gICAgICAgIEFORCBtZW1iZXIucGVyc29uYUlkICE9IEBwZXJzb25hSWQgUkVUVVJOIG1lbWJlcilcbiAgICBMRVQgcGVlciA9IEZJUlNUKHBlZXJzKVxuICAgIExFVCBwZWVyUGVyc29uYSA9IHBlZXIgPT0gbnVsbCA/IG51bGwgOiBET0NVTUVOVCgncGVyc29uYXMnLCBwZWVyLnBlcnNvbmFJZClcbiAgICBMRVQgcGVlclVzZXIgPSBwZWVyID09IG51bGwgPyBudWxsIDogRE9DVU1FTlQoJ3VzZXJzJywgcGVlci51c2VySWQpXG4gICAgTEVUIGJsb2NrZWQgPSBwZWVyID09IG51bGwgPyBmYWxzZSA6IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb24gRklMVEVSIGVkZ2UudHlwZSA9PSAnYmxvY2snXG4gICAgICBBTkQgKChlZGdlLl9mcm9tIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIEBwZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIEB1c2VySWQpXVxuICAgICAgICBBTkQgZWRnZS5fdG8gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgcGVlci5wZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIHBlZXIudXNlcklkKV0pXG4gICAgICAgIE9SIChlZGdlLl90byBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBAdXNlcklkKV1cbiAgICAgICAgQU5EIGVkZ2UuX2Zyb20gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgcGVlci5wZXJzb25hSWQpLCBDT05DQVQoJ3VzZXJzLycsIHBlZXIudXNlcklkKV0pKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgIExFVCBmb2xsb3dpbmcgPSBwZWVyID09IG51bGwgPyBmYWxzZSA6IEZJUlNUKEZPUiBlZGdlIElOIGhhc0Nvbm5lY3Rpb25cbiAgICAgIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2ZvbGxvdycgQU5EIGVkZ2UuYWN0aXZlICE9IGZhbHNlIEFORCBlZGdlLl9mcm9tID09IENPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZClcbiAgICAgICAgQU5EIGVkZ2UuX3RvID09IENPTkNBVCgncGVyc29uYXMvJywgcGVlci5wZXJzb25hSWQpIExJTUlUIDEgUkVUVVJOIHRydWUpXG4gICAgTEVUIGZvbGxvd2VkID0gcGVlciA9PSBudWxsID8gZmFsc2UgOiBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZWRnZS50eXBlID09ICdmb2xsb3cnIEFORCBlZGdlLmFjdGl2ZSAhPSBmYWxzZSBBTkQgZWRnZS5fdG8gPT0gQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKVxuICAgICAgICBBTkQgZWRnZS5fZnJvbSA9PSBDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgIEZJTFRFUiBAcHVycG9zZSBOT1QgSU4gWydzZW5kJywgJ3NvY2tldCddIE9SIChjb252ZXJzYXRpb24uc3RhdGUgPT0gJ2FjdGl2ZSdcbiAgICAgIEFORCAoY29udmVyc2F0aW9uLmtpbmQgIT0gJ2RpcmVjdCcgT1IgKExFTkdUSChwZWVycykgPT0gMSBBTkQgcGVlclBlcnNvbmEgIT0gbnVsbCBBTkQgcGVlclVzZXIgIT0gbnVsbFxuICAgICAgICBBTkQgcGVlclBlcnNvbmEuYWN0aXZlICE9IGZhbHNlIEFORCBwZWVyVXNlci5hY3RpdmUgIT0gZmFsc2UgQU5EIHBlZXJQZXJzb25hLnVzZXJJZCA9PSBwZWVyLnVzZXJJZFxuICAgICAgICBBTkQgYmxvY2tlZCAhPSB0cnVlIEFORCBmb2xsb3dpbmcgPT0gdHJ1ZSBBTkQgZm9sbG93ZWQgPT0gdHJ1ZSkpKVxuICAgIEZJTFRFUiBAcHVycG9zZSAhPSAnaW52aXRlJyBPUiAoY29udmVyc2F0aW9uLmtpbmQgPT0gJ2dyb3VwJyBBTkQgY29udmVyc2F0aW9uLnN0YXRlICE9ICdjbG9zZWQnXG4gICAgICBBTkQgbWVtYmVyc2hpcC5yb2xlIElOIFsnb3duZXInLCAnYWRtaW4nXSlcbiAgICBGSUxURVIgQHB1cnBvc2UgPT0gJ3JlcG9ydCcgT1IgY29udmVyc2F0aW9uLnN0YXRlICE9ICdjbG9zZWQnXG4gICAgUkVUVVJOIHthY3RpdmVNZW1iZXJDb3VudDogY29udmVyc2F0aW9uLmFjdGl2ZU1lbWJlckNvdW50LCBjb252ZXJzYXRpb25JZDogQGNvbnZlcnNhdGlvbklkLFxuICAgICAgY29udmVyc2F0aW9uU3RhdGU6IGNvbnZlcnNhdGlvbi5zdGF0ZSwgZXBvY2g6IG1lbWJlcnNoaXAuZXBvY2gsIGpvaW5TZXF1ZW5jZTogbWVtYmVyc2hpcC5qb2luU2VxdWVuY2UsXG4gICAgICBraW5kOiBjb252ZXJzYXRpb24ua2luZCwgbGFzdFNlcXVlbmNlOiBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlLCBsZWZ0U2VxdWVuY2U6IG1lbWJlcnNoaXAubGVmdFNlcXVlbmNlLFxuICAgICAgbWVtYmVyc2hpcFJldmlzaW9uOiBjb252ZXJzYXRpb24ubWVtYmVyc2hpcFJldmlzaW9uLCBwZXJzb25hSWQ6IEBwZXJzb25hSWQsIHJldmlzaW9uOiBtZW1iZXJzaGlwLnJldmlzaW9uLFxuICAgICAgcm9sZTogbWVtYmVyc2hpcC5yb2xlLCBzdGF0ZTogbWVtYmVyc2hpcC5zdGF0ZX1cbiAgYCwge1xuICAgIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgZXBvY2g6IGlucHV0Lm1lbWJlcnNoaXBFcG9jaCA/PyBudWxsLCBwZXJzb25hSWQ6IGlkZW50aXR5LnBlcnNvbmFJZCxcbiAgICBwdXJwb3NlOiBpbnB1dC5wdXJwb3NlLCBzZXF1ZW5jZTogaW5wdXQubWVzc2FnZVNlcXVlbmNlID8/IG51bGwsIHVzZXJJZDogaWRlbnRpdHkudXNlcklkXG4gIH0pO1xuICBpZighcmVzdWx0IHx8ICFpc0NoYXRJZGVudGlmaWVyKHJlc3VsdC5lcG9jaCkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdC5qb2luU2VxdWVuY2UpXG4gICAgfHwgcmVzdWx0LmpvaW5TZXF1ZW5jZSA8IDAgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdC5sYXN0U2VxdWVuY2UpIHx8IHJlc3VsdC5sYXN0U2VxdWVuY2UgPCAwXG4gICAgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdC5yZXZpc2lvbikgfHwgcmVzdWx0LnJldmlzaW9uIDwgMVxuICAgIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQubWVtYmVyc2hpcFJldmlzaW9uKSB8fCByZXN1bHQubWVtYmVyc2hpcFJldmlzaW9uIDwgMVxuICAgIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQuYWN0aXZlTWVtYmVyQ291bnQpIHx8IHJlc3VsdC5hY3RpdmVNZW1iZXJDb3VudCA8IDBcbiAgICB8fCByZXN1bHQuYWN0aXZlTWVtYmVyQ291bnQgPiAyNSB8fCAhWydvd25lcicsICdhZG1pbicsICdtZW1iZXInXS5pbmNsdWRlcyhyZXN1bHQucm9sZSkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGF1dGhvcml6ZUNvbnZlcnNhdGlvbkFjY2VzcyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgaW5wdXQ6IE1lbWJlcnNoaXBBY2Nlc3NJbnB1dFxuKTogUHJvbWlzZTxBdXRob3JpemVkTWVtYmVyc2hpcD4gPT4gY3JlYXRlTWVtYmVyc2hpcEF1dGhvcml6ZXIoXG4gIGNyZWF0ZUR1cmFibGVRdWVyeShjb250ZXh0KVxuKShpZGVudGl0eSwgaW5wdXQpO1xuIl0sIm5hbWVzIjpbIkNoYXRFcnJvciIsImNyZWF0ZUR1cmFibGVRdWVyeSIsImlzQ2hhdElkZW50aWZpZXIiLCJ2YWx1ZSIsInRlc3QiLCJwdXJwb3NlcyIsImNyZWF0ZU1lbWJlcnNoaXBBdXRob3JpemVyIiwicmVhZCIsImlkZW50aXR5IiwiaW5wdXQiLCJ1c2VySWQiLCJwZXJzb25hSWQiLCJjb252ZXJzYXRpb25JZCIsImluY2x1ZGVzIiwicHVycG9zZSIsIm1lbWJlcnNoaXBFcG9jaCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VTZXF1ZW5jZSIsIk51bWJlciIsImlzU2FmZUludGVnZXIiLCJyZXN1bHQiLCJlcG9jaCIsInNlcXVlbmNlIiwiam9pblNlcXVlbmNlIiwibGFzdFNlcXVlbmNlIiwicmV2aXNpb24iLCJtZW1iZXJzaGlwUmV2aXNpb24iLCJhY3RpdmVNZW1iZXJDb3VudCIsInJvbGUiLCJhdXRob3JpemVDb252ZXJzYXRpb25BY2Nlc3MiLCJjb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxTQUFTLFFBQU8sY0FBYztBQUN0QyxTQUFRQyxrQkFBa0IsUUFBTyxtQkFBbUI7QUE0QnBELE9BQU8sTUFBTUMsbUJBQW1CLENBQUNDLFFBQy9CLE9BQU9BLFVBQVUsWUFBWSx5QkFBeUJDLElBQUksQ0FBQ0QsT0FBTztBQUVwRSxNQUFNRSxXQUF3RDtJQUFDO0lBQVc7SUFBVTtJQUFnQjtJQUFVO0lBQVE7Q0FBUztBQUUvSCxPQUFPLE1BQU1DLDZCQUE2QixDQUFDQyxPQUFvQixPQUM3REMsVUFBd0JDO1FBRXhCLElBQUcsQ0FBQ0QsWUFBWSxDQUFDTixpQkFBaUJNLFNBQVNFLE1BQU0sS0FBSyxDQUFDUixpQkFBaUJNLFNBQVNHLFNBQVMsR0FBRztZQUMzRixNQUFNLElBQUlYLFVBQVU7UUFDdEI7UUFDQSxJQUFHLENBQUNTLFNBQVMsQ0FBQ1AsaUJBQWlCTyxNQUFNRyxjQUFjLEtBQUssQ0FBQ1AsU0FBU1EsUUFBUSxDQUFDSixNQUFNSyxPQUFPLEtBQ2xGTCxNQUFNTSxlQUFlLEtBQUtDLGFBQWEsQ0FBQ2QsaUJBQWlCTyxNQUFNTSxlQUFlLEtBQzlFTixNQUFNUSxlQUFlLEtBQUtELGFBQ3hCLENBQUEsQ0FBQ0UsT0FBT0MsYUFBYSxDQUFDVixNQUFNUSxlQUFlLEtBQUtSLE1BQU1RLGVBQWUsR0FBRyxDQUFBLEtBQzFFUixNQUFNSyxPQUFPLEtBQUssWUFBWUwsTUFBTVEsZUFBZSxLQUFLRCxXQUFZO1lBQ3hFLE1BQU0sSUFBSWhCLFVBQVU7UUFDdEI7UUFDQSxNQUFNb0IsU0FBUyxNQUFNYixLQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStDakQsQ0FBQyxFQUFFO1lBQ0RLLGdCQUFnQkgsTUFBTUcsY0FBYztZQUFFUyxPQUFPWixNQUFNTSxlQUFlLElBQUk7WUFBTUosV0FBV0gsU0FBU0csU0FBUztZQUN6R0csU0FBU0wsTUFBTUssT0FBTztZQUFFUSxVQUFVYixNQUFNUSxlQUFlLElBQUk7WUFBTVAsUUFBUUYsU0FBU0UsTUFBTTtRQUMxRjtRQUNBLElBQUcsQ0FBQ1UsVUFBVSxDQUFDbEIsaUJBQWlCa0IsT0FBT0MsS0FBSyxLQUFLLENBQUNILE9BQU9DLGFBQWEsQ0FBQ0MsT0FBT0csWUFBWSxLQUNyRkgsT0FBT0csWUFBWSxHQUFHLEtBQUssQ0FBQ0wsT0FBT0MsYUFBYSxDQUFDQyxPQUFPSSxZQUFZLEtBQUtKLE9BQU9JLFlBQVksR0FBRyxLQUMvRixDQUFDTixPQUFPQyxhQUFhLENBQUNDLE9BQU9LLFFBQVEsS0FBS0wsT0FBT0ssUUFBUSxHQUFHLEtBQzVELENBQUNQLE9BQU9DLGFBQWEsQ0FBQ0MsT0FBT00sa0JBQWtCLEtBQUtOLE9BQU9NLGtCQUFrQixHQUFHLEtBQ2hGLENBQUNSLE9BQU9DLGFBQWEsQ0FBQ0MsT0FBT08saUJBQWlCLEtBQUtQLE9BQU9PLGlCQUFpQixHQUFHLEtBQzlFUCxPQUFPTyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7WUFBQztZQUFTO1lBQVM7U0FBUyxDQUFDZCxRQUFRLENBQUNPLE9BQU9RLElBQUksR0FBRztZQUN6RixNQUFNLElBQUk1QixVQUFVO1FBQ3RCO1FBQ0EsT0FBT29CO0lBQ1QsRUFBRTtBQUVGLE9BQU8sTUFBTVMsOEJBQThCLENBQ3pDQyxTQUFxQnRCLFVBQXdCQyxRQUNYSCwyQkFDbENMLG1CQUFtQjZCLFVBQ25CdEIsVUFBVUMsT0FBTyJ9
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lbWJlcnNoaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGF0RXJyb3J9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7Y3JlYXRlRHVyYWJsZVF1ZXJ5fSBmcm9tICcuL3RyYW5zYWN0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0NvbnZlcnNhdGlvbktpbmQsIENvbnZlcnNhdGlvbk1lbWJlcnNoaXAsIENvbnZlcnNhdGlvblN0YXRlfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0SWRlbnRpdHkge1xuICByZWFkb25seSBwZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyc2hpcEFjY2Vzc0lucHV0IHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcEVwb2NoPzogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlU2VxdWVuY2U/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHB1cnBvc2U6ICdoaXN0b3J5JyB8ICdpbnZpdGUnIHwgJ3BhcnRpY2lwYW50cycgfCAncmVwb3J0JyB8ICdzZW5kJyB8ICdzb2NrZXQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZWRNZW1iZXJzaGlwIGV4dGVuZHMgQ29udmVyc2F0aW9uTWVtYmVyc2hpcCB7XG4gIHJlYWRvbmx5IGFjdGl2ZU1lbWJlckNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvblN0YXRlOiBDb252ZXJzYXRpb25TdGF0ZTtcbiAgcmVhZG9ubHkga2luZDogQ29udmVyc2F0aW9uS2luZDtcbiAgcmVhZG9ubHkgbGFzdFNlcXVlbmNlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBSZXZpc2lvbjogbnVtYmVyO1xufVxuXG4vKiogSW5qZWN0IHRoZSB0cmFuc2FjdGlvbidzIHF1ZXJ5IGFkYXB0ZXIgd2hlbiB0aGlzIGNoZWNrIGd1YXJkcyBhIHdyaXRlLiAqL1xuZXhwb3J0IHR5cGUgQ2hhdFF1ZXJ5ID0gPFQ+KHF1ZXJ5OiBzdHJpbmcsIGJpbmRWYXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcblxuZXhwb3J0IGNvbnN0IGlzQ2hhdElkZW50aWZpZXIgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlthLXpBLVowLTlfLV17MSwxMjh9JC8udGVzdCh2YWx1ZSk7XG5cbmNvbnN0IHB1cnBvc2VzOiByZWFkb25seSBNZW1iZXJzaGlwQWNjZXNzSW5wdXRbJ3B1cnBvc2UnXVtdID0gWydoaXN0b3J5JywgJ2ludml0ZScsICdwYXJ0aWNpcGFudHMnLCAncmVwb3J0JywgJ3NlbmQnLCAnc29ja2V0J107XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciA9IChyZWFkOiBDaGF0UXVlcnkpID0+IGFzeW5jIChcbiAgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgaW5wdXQ6IE1lbWJlcnNoaXBBY2Nlc3NJbnB1dFxuKTogUHJvbWlzZTxBdXRob3JpemVkTWVtYmVyc2hpcD4gPT4ge1xuICBpZighaWRlbnRpdHkgfHwgIWlzQ2hhdElkZW50aWZpZXIoaWRlbnRpdHkudXNlcklkKSB8fCAhaXNDaGF0SWRlbnRpZmllcihpZGVudGl0eS5wZXJzb25hSWQpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgaWYoIWlucHV0IHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKSB8fCAhcHVycG9zZXMuaW5jbHVkZXMoaW5wdXQucHVycG9zZSlcbiAgICB8fCAoaW5wdXQubWVtYmVyc2hpcEVwb2NoICE9PSB1bmRlZmluZWQgJiYgIWlzQ2hhdElkZW50aWZpZXIoaW5wdXQubWVtYmVyc2hpcEVwb2NoKSlcbiAgICB8fCAoaW5wdXQubWVzc2FnZVNlcXVlbmNlICE9PSB1bmRlZmluZWRcbiAgICAgICYmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQubWVzc2FnZVNlcXVlbmNlKSB8fCBpbnB1dC5tZXNzYWdlU2VxdWVuY2UgPCAxKSlcbiAgICB8fCAoaW5wdXQucHVycG9zZSA9PT0gJ3JlcG9ydCcgJiYgaW5wdXQubWVzc2FnZVNlcXVlbmNlID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignaW52YWxpZF9yZXF1ZXN0Jyk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZDxBdXRob3JpemVkTWVtYmVyc2hpcD4oYFxuICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJ3VzZXJzJywgQHVzZXJJZClcbiAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKCdwZXJzb25hcycsIEBwZXJzb25hSWQpXG4gICAgTEVUIGNvbnZlcnNhdGlvbiA9IERPQ1VNRU5UKCdjb252ZXJzYXRpb25zJywgQGNvbnZlcnNhdGlvbklkKVxuICAgIEZJTFRFUiB1c2VyICE9IG51bGwgQU5EIHVzZXIuYWN0aXZlICE9IGZhbHNlIEFORCBwZXJzb25hICE9IG51bGwgQU5EIHBlcnNvbmEuYWN0aXZlICE9IGZhbHNlXG4gICAgICBBTkQgcGVyc29uYS51c2VySWQgPT0gQHVzZXJJZCBBTkQgY29udmVyc2F0aW9uICE9IG51bGwgQU5EIGNvbnZlcnNhdGlvbi5jaGF0U2NoZW1hVmVyc2lvbiA9PSAxXG4gICAgICBBTkQgY29udmVyc2F0aW9uLmtpbmQgSU4gWydkaXJlY3QnLCAnZ3JvdXAnXSBBTkQgY29udmVyc2F0aW9uLnN0YXRlIElOIFsnYWN0aXZlJywgJ2Zvcm1pbmcnLCAnY2xvc2VkJ11cbiAgICBMRVQgbWVtYmVyc2hpcCA9IEZJUlNUKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXBcbiAgICAgIEZJTFRFUiBtZW1iZXIuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkIEFORCBtZW1iZXIucGVyc29uYUlkID09IEBwZXJzb25hSWRcbiAgICAgICAgQU5EIG1lbWJlci51c2VySWQgPT0gQHVzZXJJZCBBTkQgbWVtYmVyLl9mcm9tID09IENPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZClcbiAgICAgICAgQU5EIG1lbWJlci5fdG8gPT0gQ09OQ0FUKCdjb252ZXJzYXRpb25zLycsIEBjb252ZXJzYXRpb25JZClcbiAgICAgICAgQU5EIChAZXBvY2ggPT0gbnVsbCBPUiBtZW1iZXIuZXBvY2ggPT0gQGVwb2NoKVxuICAgICAgICBBTkQgKEBwdXJwb3NlID09ICdyZXBvcnQnID8gbWVtYmVyLnN0YXRlIElOIFsnYWN0aXZlJywgJ2xlZnQnLCAncmVtb3ZlZCddIDogbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnKVxuICAgICAgICBBTkQgKEBzZXF1ZW5jZSA9PSBudWxsIE9SIChJU19OVU1CRVIobWVtYmVyLmpvaW5TZXF1ZW5jZSkgQU5EIEBzZXF1ZW5jZSA+PSBtZW1iZXIuam9pblNlcXVlbmNlXG4gICAgICAgICAgQU5EIEBzZXF1ZW5jZSA8PSBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlXG4gICAgICAgICAgQU5EIChtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScgT1IgKElTX05VTUJFUihtZW1iZXIubGVmdFNlcXVlbmNlKSBBTkQgQHNlcXVlbmNlIDw9IG1lbWJlci5sZWZ0U2VxdWVuY2UpKSkpXG4gICAgICBTT1JUIG1lbWJlci5hY2NlcHRlZEF0IERFU0MsIG1lbWJlci5fa2V5IERFU0MgTElNSVQgMSBSRVRVUk4gbWVtYmVyKVxuICAgIEZJTFRFUiBtZW1iZXJzaGlwICE9IG51bGxcbiAgICBMRVQgcGVlcnMgPSAoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcFxuICAgICAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgICBBTkQgbWVtYmVyLnBlcnNvbmFJZCAhPSBAcGVyc29uYUlkIFJFVFVSTiBtZW1iZXIpXG4gICAgTEVUIHBlZXIgPSBGSVJTVChwZWVycylcbiAgICBMRVQgcGVlclBlcnNvbmEgPSBwZWVyID09IG51bGwgPyBudWxsIDogRE9DVU1FTlQoJ3BlcnNvbmFzJywgcGVlci5wZXJzb25hSWQpXG4gICAgTEVUIHBlZXJVc2VyID0gcGVlciA9PSBudWxsID8gbnVsbCA6IERPQ1VNRU5UKCd1c2VycycsIHBlZXIudXNlcklkKVxuICAgIExFVCBibG9ja2VkID0gcGVlciA9PSBudWxsID8gZmFsc2UgOiBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2Jsb2NrJ1xuICAgICAgQU5EICgoZWRnZS5fZnJvbSBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBAdXNlcklkKV1cbiAgICAgICAgQU5EIGVkZ2UuX3RvIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBwZWVyLnVzZXJJZCldKVxuICAgICAgICBPUiAoZWRnZS5fdG8gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZCksIENPTkNBVCgndXNlcnMvJywgQHVzZXJJZCldXG4gICAgICAgIEFORCBlZGdlLl9mcm9tIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBwZWVyLnVzZXJJZCldKSkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICBMRVQgZm9sbG93aW5nID0gcGVlciA9PSBudWxsID8gZmFsc2UgOiBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZWRnZS50eXBlID09ICdmb2xsb3cnIEFORCBlZGdlLmFjdGl2ZSAhPSBmYWxzZSBBTkQgZWRnZS5fZnJvbSA9PSBDT05DQVQoJ3BlcnNvbmFzLycsIEBwZXJzb25hSWQpXG4gICAgICAgIEFORCBlZGdlLl90byA9PSBDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgIExFVCBmb2xsb3dlZCA9IHBlZXIgPT0gbnVsbCA/IGZhbHNlIDogRklSU1QoRk9SIGVkZ2UgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgRklMVEVSIGVkZ2UudHlwZSA9PSAnZm9sbG93JyBBTkQgZWRnZS5hY3RpdmUgIT0gZmFsc2UgQU5EIGVkZ2UuX3RvID09IENPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZClcbiAgICAgICAgQU5EIGVkZ2UuX2Zyb20gPT0gQ09OQ0FUKCdwZXJzb25hcy8nLCBwZWVyLnBlcnNvbmFJZCkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICBGSUxURVIgQHB1cnBvc2UgTk9UIElOIFsnc2VuZCcsICdzb2NrZXQnXSBPUiAoY29udmVyc2F0aW9uLnN0YXRlID09ICdhY3RpdmUnXG4gICAgICBBTkQgKGNvbnZlcnNhdGlvbi5raW5kICE9ICdkaXJlY3QnIE9SIChMRU5HVEgocGVlcnMpID09IDEgQU5EIHBlZXJQZXJzb25hICE9IG51bGwgQU5EIHBlZXJVc2VyICE9IG51bGxcbiAgICAgICAgQU5EIHBlZXJQZXJzb25hLmFjdGl2ZSAhPSBmYWxzZSBBTkQgcGVlclVzZXIuYWN0aXZlICE9IGZhbHNlIEFORCBwZWVyUGVyc29uYS51c2VySWQgPT0gcGVlci51c2VySWRcbiAgICAgICAgQU5EIGJsb2NrZWQgIT0gdHJ1ZSBBTkQgZm9sbG93aW5nID09IHRydWUgQU5EIGZvbGxvd2VkID09IHRydWUpKSlcbiAgICBGSUxURVIgQHB1cnBvc2UgIT0gJ2ludml0ZScgT1IgKGNvbnZlcnNhdGlvbi5raW5kID09ICdncm91cCcgQU5EIGNvbnZlcnNhdGlvbi5zdGF0ZSAhPSAnY2xvc2VkJ1xuICAgICAgQU5EIG1lbWJlcnNoaXAucm9sZSBJTiBbJ293bmVyJywgJ2FkbWluJ10pXG4gICAgRklMVEVSIEBwdXJwb3NlID09ICdyZXBvcnQnIE9SIGNvbnZlcnNhdGlvbi5zdGF0ZSAhPSAnY2xvc2VkJ1xuICAgIFJFVFVSTiB7YWN0aXZlTWVtYmVyQ291bnQ6IGNvbnZlcnNhdGlvbi5hY3RpdmVNZW1iZXJDb3VudCwgY29udmVyc2F0aW9uSWQ6IEBjb252ZXJzYXRpb25JZCxcbiAgICAgIGNvbnZlcnNhdGlvblN0YXRlOiBjb252ZXJzYXRpb24uc3RhdGUsIGVwb2NoOiBtZW1iZXJzaGlwLmVwb2NoLCBqb2luU2VxdWVuY2U6IG1lbWJlcnNoaXAuam9pblNlcXVlbmNlLFxuICAgICAga2luZDogY29udmVyc2F0aW9uLmtpbmQsIGxhc3RTZXF1ZW5jZTogY29udmVyc2F0aW9uLmxhc3RTZXF1ZW5jZSwgbGVmdFNlcXVlbmNlOiBtZW1iZXJzaGlwLmxlZnRTZXF1ZW5jZSxcbiAgICAgIG1lbWJlcnNoaXBSZXZpc2lvbjogY29udmVyc2F0aW9uLm1lbWJlcnNoaXBSZXZpc2lvbiwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCByZXZpc2lvbjogbWVtYmVyc2hpcC5yZXZpc2lvbixcbiAgICAgIHJvbGU6IG1lbWJlcnNoaXAucm9sZSwgc3RhdGU6IG1lbWJlcnNoaXAuc3RhdGV9XG4gIGAsIHtcbiAgICBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIGVwb2NoOiBpbnB1dC5tZW1iZXJzaGlwRXBvY2ggPz8gbnVsbCwgcGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWQsXG4gICAgcHVycG9zZTogaW5wdXQucHVycG9zZSwgc2VxdWVuY2U6IGlucHV0Lm1lc3NhZ2VTZXF1ZW5jZSA/PyBudWxsLCB1c2VySWQ6IGlkZW50aXR5LnVzZXJJZFxuICB9KTtcbiAgaWYoIXJlc3VsdCB8fCAhaXNDaGF0SWRlbnRpZmllcihyZXN1bHQuZXBvY2gpIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQuam9pblNlcXVlbmNlKVxuICAgIHx8IHJlc3VsdC5qb2luU2VxdWVuY2UgPCAwIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQubGFzdFNlcXVlbmNlKSB8fCByZXN1bHQubGFzdFNlcXVlbmNlIDwgMFxuICAgIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQucmV2aXNpb24pIHx8IHJlc3VsdC5yZXZpc2lvbiA8IDFcbiAgICB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIocmVzdWx0Lm1lbWJlcnNoaXBSZXZpc2lvbikgfHwgcmVzdWx0Lm1lbWJlcnNoaXBSZXZpc2lvbiA8IDFcbiAgICB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIocmVzdWx0LmFjdGl2ZU1lbWJlckNvdW50KSB8fCByZXN1bHQuYWN0aXZlTWVtYmVyQ291bnQgPCAwXG4gICAgfHwgcmVzdWx0LmFjdGl2ZU1lbWJlckNvdW50ID4gMjUgfHwgIVsnb3duZXInLCAnYWRtaW4nLCAnbWVtYmVyJ10uaW5jbHVkZXMocmVzdWx0LnJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBhdXRob3JpemVDb252ZXJzYXRpb25BY2Nlc3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsIGlkZW50aXR5OiBDaGF0SWRlbnRpdHksIGlucHV0OiBNZW1iZXJzaGlwQWNjZXNzSW5wdXRcbik6IFByb21pc2U8QXV0aG9yaXplZE1lbWJlcnNoaXA+ID0+IGNyZWF0ZU1lbWJlcnNoaXBBdXRob3JpemVyKFxuICBjcmVhdGVEdXJhYmxlUXVlcnkoY29udGV4dClcbikoaWRlbnRpdHksIGlucHV0KTtcbiJdLCJuYW1lcyI6WyJDaGF0RXJyb3IiLCJjcmVhdGVEdXJhYmxlUXVlcnkiLCJpc0NoYXRJZGVudGlmaWVyIiwidmFsdWUiLCJ0ZXN0IiwicHVycG9zZXMiLCJjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciIsInJlYWQiLCJpZGVudGl0eSIsImlucHV0IiwidXNlcklkIiwicGVyc29uYUlkIiwiY29udmVyc2F0aW9uSWQiLCJpbmNsdWRlcyIsInB1cnBvc2UiLCJtZW1iZXJzaGlwRXBvY2giLCJ1bmRlZmluZWQiLCJtZXNzYWdlU2VxdWVuY2UiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwicmVzdWx0IiwiZXBvY2giLCJzZXF1ZW5jZSIsImpvaW5TZXF1ZW5jZSIsImxhc3RTZXF1ZW5jZSIsInJldmlzaW9uIiwibWVtYmVyc2hpcFJldmlzaW9uIiwiYWN0aXZlTWVtYmVyQ291bnQiLCJyb2xlIiwiYXV0aG9yaXplQ29udmVyc2F0aW9uQWNjZXNzIiwiY29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsU0FBUyxRQUFPLGNBQWM7QUFDdEMsU0FBUUMsa0JBQWtCLFFBQU8sbUJBQW1CO0FBNEJwRCxPQUFPLE1BQU1DLG1CQUFtQixDQUFDQyxRQUMvQixPQUFPQSxVQUFVLFlBQVkseUJBQXlCQyxJQUFJLENBQUNELE9BQU87QUFFcEUsTUFBTUUsV0FBd0Q7SUFBQztJQUFXO0lBQVU7SUFBZ0I7SUFBVTtJQUFRO0NBQVM7QUFFL0gsT0FBTyxNQUFNQyw2QkFBNkIsQ0FBQ0MsT0FBb0IsT0FDN0RDLFVBQXdCQztRQUV4QixJQUFHLENBQUNELFlBQVksQ0FBQ04saUJBQWlCTSxTQUFTRSxNQUFNLEtBQUssQ0FBQ1IsaUJBQWlCTSxTQUFTRyxTQUFTLEdBQUc7WUFDM0YsTUFBTSxJQUFJWCxVQUFVO1FBQ3RCO1FBQ0EsSUFBRyxDQUFDUyxTQUFTLENBQUNQLGlCQUFpQk8sTUFBTUcsY0FBYyxLQUFLLENBQUNQLFNBQVNRLFFBQVEsQ0FBQ0osTUFBTUssT0FBTyxLQUNsRkwsTUFBTU0sZUFBZSxLQUFLQyxhQUFhLENBQUNkLGlCQUFpQk8sTUFBTU0sZUFBZSxLQUM5RU4sTUFBTVEsZUFBZSxLQUFLRCxhQUN4QixDQUFBLENBQUNFLE9BQU9DLGFBQWEsQ0FBQ1YsTUFBTVEsZUFBZSxLQUFLUixNQUFNUSxlQUFlLEdBQUcsQ0FBQSxLQUMxRVIsTUFBTUssT0FBTyxLQUFLLFlBQVlMLE1BQU1RLGVBQWUsS0FBS0QsV0FBWTtZQUN4RSxNQUFNLElBQUloQixVQUFVO1FBQ3RCO1FBQ0EsTUFBTW9CLFNBQVMsTUFBTWIsS0FBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUErQ2pELENBQUMsRUFBRTtZQUNESyxnQkFBZ0JILE1BQU1HLGNBQWM7WUFBRVMsT0FBT1osTUFBTU0sZUFBZSxJQUFJO1lBQU1KLFdBQVdILFNBQVNHLFNBQVM7WUFDekdHLFNBQVNMLE1BQU1LLE9BQU87WUFBRVEsVUFBVWIsTUFBTVEsZUFBZSxJQUFJO1lBQU1QLFFBQVFGLFNBQVNFLE1BQU07UUFDMUY7UUFDQSxJQUFHLENBQUNVLFVBQVUsQ0FBQ2xCLGlCQUFpQmtCLE9BQU9DLEtBQUssS0FBSyxDQUFDSCxPQUFPQyxhQUFhLENBQUNDLE9BQU9HLFlBQVksS0FDckZILE9BQU9HLFlBQVksR0FBRyxLQUFLLENBQUNMLE9BQU9DLGFBQWEsQ0FBQ0MsT0FBT0ksWUFBWSxLQUFLSixPQUFPSSxZQUFZLEdBQUcsS0FDL0YsQ0FBQ04sT0FBT0MsYUFBYSxDQUFDQyxPQUFPSyxRQUFRLEtBQUtMLE9BQU9LLFFBQVEsR0FBRyxLQUM1RCxDQUFDUCxPQUFPQyxhQUFhLENBQUNDLE9BQU9NLGtCQUFrQixLQUFLTixPQUFPTSxrQkFBa0IsR0FBRyxLQUNoRixDQUFDUixPQUFPQyxhQUFhLENBQUNDLE9BQU9PLGlCQUFpQixLQUFLUCxPQUFPTyxpQkFBaUIsR0FBRyxLQUM5RVAsT0FBT08saUJBQWlCLEdBQUcsTUFBTSxDQUFDO1lBQUM7WUFBUztZQUFTO1NBQVMsQ0FBQ2QsUUFBUSxDQUFDTyxPQUFPUSxJQUFJLEdBQUc7WUFDekYsTUFBTSxJQUFJNUIsVUFBVTtRQUN0QjtRQUNBLE9BQU9vQjtJQUNULEVBQUU7QUFFRixPQUFPLE1BQU1TLDhCQUE4QixDQUN6Q0MsU0FBcUJ0QixVQUF3QkMsUUFDWEgsMkJBQ2xDTCxtQkFBbUI2QixVQUNuQnRCLFVBQVVDLE9BQU8ifQ==
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvbWVzc2FnZVR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtBcHBlbmRDaGF0RXZlbnRJbnB1dH0gZnJvbSAnLi9ldmVudHMuanMnO1xuaW1wb3J0IHR5cGUge0F1dGhvcml6ZWRNZW1iZXJzaGlwLCBDaGF0SWRlbnRpdHksIENoYXRRdWVyeX0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBEdXJhYmxlQ2hhdEF0dGFjaG1lbnQge1xuICByZWFkb25seSBjb250ZW50VmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBpbWFnZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUNoYXRNZXNzYWdlPFREZWNpc2lvbiA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgX2tleTogc3RyaW5nO1xuICByZWFkb25seSBhZGRlZDogbnVtYmVyO1xuICByZWFkb25seSBhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgYXR0YWNobWVudHM6IHJlYWRvbmx5IER1cmFibGVDaGF0QXR0YWNobWVudFtdO1xuICByZWFkb25seSBjaGF0U2NoZW1hVmVyc2lvbjogMTtcbiAgcmVhZG9ubHkgY2xpZW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGVudFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlbGV0ZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRlbGV0ZWRBdXRob3JQcm9vZklkPzogc3RyaW5nO1xuICByZWFkb25seSBtb2JpbGVDb250ZW50VmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2JpbGVEZWNpc2lvbjogVERlY2lzaW9uO1xuICByZWFkb25seSBtb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGlmaWVkOiBudW1iZXI7XG4gIHJlYWRvbmx5IHJlcGx5VG9NZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNlbmRlclBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSBzZXF1ZW5jZTogbnVtYmVyO1xuICByZWFkb25seSB1c2VySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhYmxlU2VuZE1lc3NhZ2VJbnB1dCB7XG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBjbGllbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBzZW5kZXJQZXJzb25hSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCB7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwZWN0ZWRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRHVyYWJsZURlbGV0ZU1lc3NhZ2VJbnB1dCA9IE9taXQ8RHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQsICdjb250ZW50Jz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQge1xuICByZWFkb25seSBjbGllbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNlcXVlbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZU1lc3NhZ2VNdXRhdGlvblJlc3VsdCB7XG4gIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzZXF1ZW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVDb250ZW50UHJvamVjdGlvbjxURGVjaXNpb24+IHtcbiAgcmVhZG9ubHkgZGVjaXNpb246IFREZWNpc2lvbjtcbiAgcmVhZG9ubHkgcGxhdGZvcm1EaXNwb3NpdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRHVyYWJsZU1lc3NhZ2VSdW4gPSA8VD4ob3BlcmF0aW9uOiAocmVhZDogQ2hhdFF1ZXJ5KSA9PiBQcm9taXNlPFQ+LCB3cml0ZT86IGJvb2xlYW4pID0+IFByb21pc2U8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZU1lc3NhZ2VIb29rczxURGVjaXNpb24+IHtcbiAgcmVhZG9ubHkgYXBwZW5kRXZlbnQ6IChyZWFkOiBDaGF0UXVlcnksIGlucHV0OiBBcHBlbmRDaGF0RXZlbnRJbnB1dCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgcmVhZG9ubHkgYXV0aG9yaXplQXR0YWNobWVudDogKHJlYWQ6IENoYXRRdWVyeSwgaW1hZ2VJZDogc3RyaW5nKSA9PiBQcm9taXNlPER1cmFibGVDaGF0QXR0YWNobWVudD47XG4gIHJlYWRvbmx5IGF1dGhvcml6ZUlkZW50aXR5OiAocmVhZDogQ2hhdFF1ZXJ5LCBpZGVudGl0eTogQ2hhdElkZW50aXR5KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBhdXRob3JpemVNZW1iZXJzaGlwOiAoXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBpZGVudGl0eTogQ2hhdElkZW50aXR5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBwdXJwb3NlOiAnaGlzdG9yeScgfCAnc2VuZCdcbiAgKSA9PiBQcm9taXNlPEF1dGhvcml6ZWRNZW1iZXJzaGlwPjtcbiAgcmVhZG9ubHkgYXV0aG9yaXplTWVzc2FnZVZpc2libGU6IChcbiAgICByZWFkOiBDaGF0UXVlcnksIGlkZW50aXR5OiBDaGF0SWRlbnRpdHksIG1lc3NhZ2U6IER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+LCBtZW1iZXJzaGlwOiBBdXRob3JpemVkTWVtYmVyc2hpcFxuICApID0+IFByb21pc2U8dm9pZD47XG4gIHJlYWRvbmx5IGNsYXNzaWZ5Q29udGVudDogKGlucHV0OiB7XG4gICAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbnRlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIH0pID0+IER1cmFibGVDb250ZW50UHJvamVjdGlvbjxURGVjaXNpb24+IHwgUHJvbWlzZTxEdXJhYmxlQ29udGVudFByb2plY3Rpb248VERlY2lzaW9uPj47XG4gIHJlYWRvbmx5IGhhc2g/OiAodmFsdWU6IHVua25vd24pID0+IHN0cmluZztcbiAgcmVhZG9ubHkgaWRlbnRpdHk6IENoYXRJZGVudGl0eTtcbiAgcmVhZG9ubHkgbm93PzogKCkgPT4gbnVtYmVyO1xuICByZWFkb25seSBydW46IER1cmFibGVNZXNzYWdlUnVuO1xuICByZWFkb25seSB1dWlkPzogKCkgPT4gc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNFQSxXQW1CQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lc3NhZ2VUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7QXBwZW5kQ2hhdEV2ZW50SW5wdXR9IGZyb20gJy4vZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHtBdXRob3JpemVkTWVtYmVyc2hpcCwgQ2hhdElkZW50aXR5LCBDaGF0UXVlcnl9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUNoYXRBdHRhY2htZW50IHtcbiAgcmVhZG9ubHkgY29udGVudFZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgaW1hZ2VJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24gPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRzOiByZWFkb25seSBEdXJhYmxlQ2hhdEF0dGFjaG1lbnRbXTtcbiAgcmVhZG9ubHkgY2hhdFNjaGVtYVZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGNsaWVudE1lc3NhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBkZWxldGVkOiBib29sZWFuO1xuICByZWFkb25seSBkZWxldGVkQXV0aG9yUHJvb2ZJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbW9iaWxlQ29udGVudFZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbW9iaWxlRGVjaXNpb246IFREZWNpc2lvbjtcbiAgcmVhZG9ubHkgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2RpZmllZDogbnVtYmVyO1xuICByZWFkb25seSByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzZW5kZXJQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZVNlbmRNZXNzYWdlSW5wdXQge1xuICByZWFkb25seSBhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgY2xpZW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVwbHlUb01lc3NhZ2VJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc2VuZGVyUGVyc29uYUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQge1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgbWVzc2FnZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIER1cmFibGVEZWxldGVNZXNzYWdlSW5wdXQgPSBPbWl0PER1cmFibGVFZGl0TWVzc2FnZUlucHV0LCAnY29udGVudCc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50IHtcbiAgcmVhZG9ubHkgY2xpZW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzZXF1ZW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQge1xuICByZWFkb25seSBtZXNzYWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhYmxlQ29udGVudFByb2plY3Rpb248VERlY2lzaW9uPiB7XG4gIHJlYWRvbmx5IGRlY2lzaW9uOiBURGVjaXNpb247XG4gIHJlYWRvbmx5IHBsYXRmb3JtRGlzcG9zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIER1cmFibGVNZXNzYWdlUnVuID0gPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPiwgd3JpdGU/OiBib29sZWFuKSA9PiBQcm9taXNlPFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlSG9va3M8VERlY2lzaW9uPiB7XG4gIHJlYWRvbmx5IGFwcGVuZEV2ZW50OiAocmVhZDogQ2hhdFF1ZXJ5LCBpbnB1dDogQXBwZW5kQ2hhdEV2ZW50SW5wdXQpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGF1dGhvcml6ZUF0dGFjaG1lbnQ6IChyZWFkOiBDaGF0UXVlcnksIGltYWdlSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxEdXJhYmxlQ2hhdEF0dGFjaG1lbnQ+O1xuICByZWFkb25seSBhdXRob3JpemVJZGVudGl0eTogKHJlYWQ6IENoYXRRdWVyeSwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgYXV0aG9yaXplTWVtYmVyc2hpcDogKFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgcHVycG9zZTogJ2hpc3RvcnknIHwgJ3NlbmQnXG4gICkgPT4gUHJvbWlzZTxBdXRob3JpemVkTWVtYmVyc2hpcD47XG4gIHJlYWRvbmx5IGF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlOiAoXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBpZGVudGl0eTogQ2hhdElkZW50aXR5LCBtZXNzYWdlOiBEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPiwgbWVtYmVyc2hpcDogQXV0aG9yaXplZE1lbWJlcnNoaXBcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBjbGFzc2lmeUNvbnRlbnQ6IChpbnB1dDoge1xuICAgIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgICByZWFkb25seSBjb250ZW50VmVyc2lvbjogc3RyaW5nO1xuICB9KSA9PiBEdXJhYmxlQ29udGVudFByb2plY3Rpb248VERlY2lzaW9uPiB8IFByb21pc2U8RHVyYWJsZUNvbnRlbnRQcm9qZWN0aW9uPFREZWNpc2lvbj4+O1xuICByZWFkb25seSBoYXNoPzogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkZW50aXR5OiBDaGF0SWRlbnRpdHk7XG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IG51bWJlcjtcbiAgcmVhZG9ubHkgcnVuOiBEdXJhYmxlTWVzc2FnZVJ1bjtcbiAgcmVhZG9ubHkgdXVpZD86ICgpID0+IHN0cmluZztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzRUEsV0FtQkMifQ==
@@ -254,4 +254,4 @@ export const createDurableMessagePersistence = (hooks)=>{
254
254
  };
255
255
  };
256
256
 
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCwgbm8tdW5kZXJzY29yZS1kYW5nbGUgLS0gT3JkZXJlZCBjaGVja3MgYW5kIEFyYW5nbyBkb2N1bWVudCBpZGVudGl0aWVzLiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCByYW5kb21VVUlEfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbmltcG9ydCB7Q2hhdEVycm9yfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQge2lzQ2hhdElkZW50aWZpZXJ9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5cbmltcG9ydCB0eXBlIHtDaGF0UXVlcnl9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIER1cmFibGVDaGF0QXR0YWNobWVudCwgRHVyYWJsZUNoYXRNZXNzYWdlLCBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0LCBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCxcbiAgRHVyYWJsZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQsIER1cmFibGVNZXNzYWdlSG9va3MsIER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQsIER1cmFibGVTZW5kTWVzc2FnZUlucHV0XG59IGZyb20gJy4vbWVzc2FnZVR5cGVzLmpzJztcblxuY29uc3QgZGVmYXVsdEhhc2ggPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZGlnZXN0KCdoZXgnKTtcbmNvbnN0IHZhbGlkVGV4dCA9IChjb250ZW50OiB1bmtub3duKTogY29udGVudCBpcyBzdHJpbmcgPT4gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnXG4gICYmIEFycmF5LmZyb20oY29udGVudCkubGVuZ3RoIDw9IDQwMDBcbiAgJiYgIS9bXFx1MDAwMFxcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD88IVtcXHVEODAwLVxcdURCRkZdKVtcXHVEQzAwLVxcdURGRkZdL3UudGVzdChjb250ZW50KTtcbmNvbnN0IHJlcXVpcmVWYWxpZCA9ICh2YWxpZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBpZighdmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdpbnZhbGlkX3JlcXVlc3QnKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWREdXJhYmxlTWVzc2FnZSA9IGFzeW5jIDxURGVjaXNpb24+KFxuICByZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBQcm9taXNlPER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+PiA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCByZWFkPER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+PignUkVUVVJOIERPQ1VNRU5UKFwibWVzc2FnZXNcIiwgQG1lc3NhZ2VJZCknLCB7bWVzc2FnZUlkfSk7XG4gIGlmKCFtZXNzYWdlIHx8IG1lc3NhZ2UuY29udmVyc2F0aW9uSWQgIT09IGNvbnZlcnNhdGlvbklkIHx8IG1lc3NhZ2UuY2hhdFNjaGVtYVZlcnNpb24gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEdXJhYmxlTWVzc2FnZVBlcnNpc3RlbmNlID0gPFREZWNpc2lvbj4oaG9va3M6IER1cmFibGVNZXNzYWdlSG9va3M8VERlY2lzaW9uPikgPT4ge1xuICBjb25zdCBoYXNoID0gaG9va3MuaGFzaCB8fCBkZWZhdWx0SGFzaDtcbiAgY29uc3Qgbm93ID0gaG9va3Mubm93IHx8IERhdGUubm93O1xuICBjb25zdCB1dWlkID0gaG9va3MudXVpZCB8fCByYW5kb21VVUlEO1xuICBjb25zdCBhdXRob3JpemUgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBwdXJwb3NlOiAnaGlzdG9yeScgfCAnc2VuZCcgPSAnaGlzdG9yeScpID0+IHtcbiAgICBjb25zdCBtZW1iZXJzaGlwID0gYXdhaXQgaG9va3MuYXV0aG9yaXplTWVtYmVyc2hpcChyZWFkLCBob29rcy5pZGVudGl0eSwgY29udmVyc2F0aW9uSWQsIHB1cnBvc2UpO1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IHJlYWQ8Ym9vbGVhbj4oYFJFVFVSTiBGSVJTVChGT1IgbWVzc2FnZSBJTiBtZXNzYWdlc1xuICAgICAgRklMVEVSIG1lc3NhZ2UuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkXG4gICAgICAgIEFORCAobWVzc2FnZS5jaGF0U2NoZW1hVmVyc2lvbiAhPSAxIE9SICFJU19OVU1CRVIobWVzc2FnZS5zZXF1ZW5jZSkgT1IgbWVzc2FnZS5zZXF1ZW5jZSA8IDEpXG4gICAgICBMSU1JVCAxIFJFVFVSTiB0cnVlKWAsIHtjb252ZXJzYXRpb25JZH0pO1xuICAgIGlmKGxlZ2FjeSA9PT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbWJlcnNoaXA7XG4gIH07XG4gIGNvbnN0IHJlY2VpcHQgPSBhc3luYyA8VD4oXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBhY3Rpb246IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd25cbiAgKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gaGFzaChbYWN0aW9uLCBjb252ZXJzYXRpb25JZCwgaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBrZXldKTtcbiAgICBjb25zdCBwYXlsb2FkSGFzaCA9IGhhc2gocGF5bG9hZCk7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgcmVhZDx7cmVhZG9ubHkgcGF5bG9hZEhhc2g6IHN0cmluZzsgcmVhZG9ubHkgcmVzdWx0OiBUOyByZWFkb25seSB1c2VySWQ6IHN0cmluZ30+KFxuICAgICAgJ1JFVFVSTiBET0NVTUVOVChcImNoYXRNZXNzYWdlUmVxdWVzdHNcIiwgQGtleSknLCB7a2V5OiByZXF1ZXN0SWR9KTtcbiAgICBpZihyZWNvcmQgJiYgKHJlY29yZC5wYXlsb2FkSGFzaCAhPT0gcGF5bG9hZEhhc2ggfHwgcmVjb3JkLnVzZXJJZCAhPT0gaG9va3MuaWRlbnRpdHkudXNlcklkKSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHtwcmlvcjogcmVjb3JkPy5yZXN1bHQsIHNhdmU6IChyZXN1bHQ6IFQpID0+IHJlYWQ8Ym9vbGVhbj4oXG4gICAgICAnSU5TRVJUIEByZWNvcmQgSU4gY2hhdE1lc3NhZ2VSZXF1ZXN0cyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmQ6IHtfa2V5OiByZXF1ZXN0SWQsIGFkZGVkOiBub3coKSwgY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHBheWxvYWRIYXNoLCBwZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgcmVzdWx0LCB1c2VySWQ6IGhvb2tzLmlkZW50aXR5LnVzZXJJZH19KX07XG4gIH07XG4gIGNvbnN0IHJhdGVMaW1pdCA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnksIGFjdGlvbjogc3RyaW5nLCBsaW1pdDogbnVtYmVyLCBpbnRlcnZhbCA9IDYwMDAwKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGFzaChbaG9va3MuaWRlbnRpdHkudXNlcklkLCBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGFjdGlvbiwgTWF0aC5mbG9vcihub3coKSAvIGludGVydmFsKV0pO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBMRVQgYnVja2V0ID0gRE9DVU1FTlQoJ2NoYXRSYXRlTGltaXRzJywgQGtleSlcbiAgICAgIEZJTFRFUiBidWNrZXQgPT0gbnVsbCBPUiBidWNrZXQuY291bnQgPCBAbGltaXRcbiAgICAgIFVQU0VSVCB7X2tleTogQGtleX0gSU5TRVJUIHtfa2V5OiBAa2V5LCBjb3VudDogMSwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCB1c2VySWQ6IEB1c2VySWR9XG4gICAgICBVUERBVEUge2NvdW50OiBPTEQuY291bnQgKyAxLCBwZXJzb25hSWQ6IEBwZXJzb25hSWQsIHVzZXJJZDogQHVzZXJJZH1cbiAgICAgIElOIGNoYXRSYXRlTGltaXRzIFJFVFVSTiB0cnVlYCwge2tleSwgbGltaXQsIHBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCB1c2VySWQ6IGhvb2tzLmlkZW50aXR5LnVzZXJJZH0pO1xuICAgIGlmKGFsbG93ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3JhdGVfbGltaXRlZCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcnVuID0gPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPiwgd3JpdGUgPSB0cnVlKTogUHJvbWlzZTxUPiA9PiBob29rcy5ydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBob29rcy5hdXRob3JpemVJZGVudGl0eShyZWFkLCBob29rcy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIG9wZXJhdGlvbihyZWFkKTtcbiAgfSwgd3JpdGUpO1xuICBjb25zdCBzZW5kTWVzc2FnZSA9IChpbnB1dDogRHVyYWJsZVNlbmRNZXNzYWdlSW5wdXQpOiBQcm9taXNlPER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50PiA9PiBydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICByZXF1aXJlVmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jbGllbnRNZXNzYWdlSWQpXG4gICAgICAmJiBpbnB1dC5zZW5kZXJQZXJzb25hSWQgPT09IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCAmJiB2YWxpZFRleHQoaW5wdXQuY29udGVudClcbiAgICAgICYmIEFycmF5LmlzQXJyYXkoaW5wdXQuYXR0YWNobWVudElkcykgJiYgaW5wdXQuYXR0YWNobWVudElkcy5sZW5ndGggPD0gNFxuICAgICAgJiYgaW5wdXQuYXR0YWNobWVudElkcy5ldmVyeShpc0NoYXRJZGVudGlmaWVyKSAmJiBuZXcgU2V0KGlucHV0LmF0dGFjaG1lbnRJZHMpLnNpemUgPT09IGlucHV0LmF0dGFjaG1lbnRJZHMubGVuZ3RoXG4gICAgICAmJiAoaW5wdXQuY29udGVudC50cmltKCkubGVuZ3RoID4gMCB8fCBpbnB1dC5hdHRhY2htZW50SWRzLmxlbmd0aCA+IDApXG4gICAgICAmJiAoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCA9PT0gdW5kZWZpbmVkIHx8IGlzQ2hhdElkZW50aWZpZXIoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCkpKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxEdXJhYmxlTWVzc2FnZUFja25vd2xlZGdlbWVudD4oXG4gICAgICByZWFkLCAnc2VuZCcsIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5jbGllbnRNZXNzYWdlSWQsIGlucHV0KTtcbiAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICB9XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGF1dGhvcml6ZShyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgJ3NlbmQnKTtcbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCwgJ3NlbmQnLCA2MCk7XG4gICAgY29uc3QgYXR0YWNobWVudHM6IER1cmFibGVDaGF0QXR0YWNobWVudFtdID0gW107XG4gICAgZm9yKGNvbnN0IGltYWdlSWQgb2YgaW5wdXQuYXR0YWNobWVudElkcykge1xuICAgICAgYXR0YWNobWVudHMucHVzaChhd2FpdCBob29rcy5hdXRob3JpemVBdHRhY2htZW50KHJlYWQsIGltYWdlSWQpKTtcbiAgICB9XG4gICAgaWYoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCkge1xuICAgICAgY29uc3QgcXVvdGVkID0gYXdhaXQgcmVhZER1cmFibGVNZXNzYWdlPFREZWNpc2lvbj4ocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsIGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpO1xuICAgICAgYXdhaXQgaG9va3MuYXV0aG9yaXplTWVzc2FnZVZpc2libGUocmVhZCwgaG9va3MuaWRlbnRpdHksIHF1b3RlZCwgbWVtYmVyc2hpcCk7XG4gICAgICBpZihxdW90ZWQuZGVsZXRlZCB8fCBxdW90ZWQubW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiAhPT0gJ2FsbG93ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgICBjb25zdCBzZXF1ZW5jZSA9IGF3YWl0IHJlYWQ8bnVtYmVyPihgRk9SIGNvbnZlcnNhdGlvbiBJTiBjb252ZXJzYXRpb25zIEZJTFRFUiBjb252ZXJzYXRpb24uX2tleSA9PSBAaWRcbiAgICAgIEFORCBjb252ZXJzYXRpb24uY2hhdFNjaGVtYVZlcnNpb24gPT0gMSBBTkQgY29udmVyc2F0aW9uLnN0YXRlID09ICdhY3RpdmUnXG4gICAgICBBTkQgSVNfTlVNQkVSKGNvbnZlcnNhdGlvbi5sYXN0U2VxdWVuY2UpIEFORCBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlIDwgOTAwNzE5OTI1NDc0MDk5MVxuICAgICAgVVBEQVRFIGNvbnZlcnNhdGlvbiBXSVRIIHtsYXN0U2VxdWVuY2U6IGNvbnZlcnNhdGlvbi5sYXN0U2VxdWVuY2UgKyAxLCBtb2RpZmllZDogQG5vd31cbiAgICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FVy5sYXN0U2VxdWVuY2VgLCB7aWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLCBub3c6IHRpbWVzdGFtcH0pO1xuICAgIGlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzZXF1ZW5jZSkgfHwgTnVtYmVyKHNlcXVlbmNlKSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHV1aWQoKTtcbiAgICBjb25zdCBjb250ZW50VmVyc2lvbiA9IGhhc2goW21lc3NhZ2VJZCwgMSwgaW5wdXQuY29udGVudF0pO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBhd2FpdCBob29rcy5jbGFzc2lmeUNvbnRlbnQoe2NvbnRlbnQ6IGlucHV0LmNvbnRlbnQgfHwgJyAnLCBjb250ZW50VmVyc2lvbn0pO1xuICAgIGNvbnN0IHJlY29yZDogRHVyYWJsZUNoYXRNZXNzYWdlPFREZWNpc2lvbj4gPSB7X2tleTogbWVzc2FnZUlkLCBhZGRlZDogdGltZXN0YW1wLFxuICAgICAgYXR0YWNobWVudElkczogaW5wdXQuYXR0YWNobWVudElkcywgYXR0YWNobWVudHMsIGNoYXRTY2hlbWFWZXJzaW9uOiAxLCBjbGllbnRNZXNzYWdlSWQ6IGlucHV0LmNsaWVudE1lc3NhZ2VJZCxcbiAgICAgIGNvbnRlbnQ6IGlucHV0LmNvbnRlbnQsIGNvbnRlbnRSZXZpc2lvbjogMSwgY29udmVyc2F0aW9uSWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLCBkZWxldGVkOiBmYWxzZSxcbiAgICAgIG1vYmlsZUNvbnRlbnRWZXJzaW9uOiBjb250ZW50VmVyc2lvbiwgbW9iaWxlRGVjaXNpb246IHByb2plY3Rpb24uZGVjaXNpb24sXG4gICAgICBtb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uOiBwcm9qZWN0aW9uLnBsYXRmb3JtRGlzcG9zaXRpb24gfHwgJ2FsbG93ZWQnLCBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgcmVwbHlUb01lc3NhZ2VJZDogaW5wdXQucmVwbHlUb01lc3NhZ2VJZCwgcmV2aXNpb246IDEsIHNlbmRlclBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLFxuICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlISwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9O1xuICAgIGlmKGF3YWl0IHJlYWQ8Ym9vbGVhbj4oJ0lOU0VSVCBAcmVjb3JkIElOIG1lc3NhZ2VzIFJFVFVSTiB0cnVlJywge3JlY29yZH0pICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICBhd2FpdCBob29rcy5hcHBlbmRFdmVudChyZWFkLCB7YWN0b3JQZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgY29udmVyc2F0aW9uSWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLFxuICAgICAga2luZDogJ21lc3NhZ2UuY2hhbmdlZCcsIG1lbWJlcnNoaXBFcG9jaDogbWVtYmVyc2hpcC5lcG9jaCwgcmVzb3VyY2VJZDogbWVzc2FnZUlkLCByZXZpc2lvbjogMX0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtjbGllbnRNZXNzYWdlSWQ6IGlucHV0LmNsaWVudE1lc3NhZ2VJZCwgbWVzc2FnZUlkLCByZXZpc2lvbjogMSwgc2VxdWVuY2U6IHNlcXVlbmNlIX07XG4gICAgaWYoYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCkgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICBjb25zdCBtdXRhdGVNZXNzYWdlID0gKFxuICAgIGlucHV0OiBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCB8IER1cmFibGVEZWxldGVNZXNzYWdlSW5wdXQsIHJlbW92ZTogYm9vbGVhblxuICApOiBQcm9taXNlPER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQ+ID0+IHJ1bihhc3luYyAocmVhZCkgPT4ge1xuICAgIHJlcXVpcmVWYWxpZChCb29sZWFuKGlucHV0KSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0Lm1lc3NhZ2VJZClcbiAgICAgICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuaWRlbXBvdGVuY3lLZXkpICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0LmV4cGVjdGVkUmV2aXNpb24pXG4gICAgICAmJiBpbnB1dC5leHBlY3RlZFJldmlzaW9uID49IDEgJiYgKHJlbW92ZSB8fCAoJ2NvbnRlbnQnIGluIGlucHV0ICYmIHZhbGlkVGV4dChpbnB1dC5jb250ZW50KSkpKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0PihyZWFkLCByZW1vdmUgPyAnZGVsZXRlJyA6ICdlZGl0JyxcbiAgICAgIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5pZGVtcG90ZW5jeUtleSwgaW5wdXQpO1xuICAgIGlmKHJlcXVlc3QucHJpb3IpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LnByaW9yO1xuICAgIH1cbiAgICBjb25zdCBtZW1iZXJzaGlwID0gYXdhaXQgYXV0aG9yaXplKHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkLCAnc2VuZCcpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCByZWFkRHVyYWJsZU1lc3NhZ2U8VERlY2lzaW9uPihyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQubWVzc2FnZUlkKTtcbiAgICBpZihtZXNzYWdlLnNlbmRlclBlcnNvbmFJZCAhPT0gaG9va3MuaWRlbnRpdHkucGVyc29uYUlkIHx8IG1lc3NhZ2UudXNlcklkICE9PSBob29rcy5pZGVudGl0eS51c2VySWRcbiAgICAgIHx8IG1lc3NhZ2Uuc2VxdWVuY2UgPCBtZW1iZXJzaGlwLmpvaW5TZXF1ZW5jZSB8fCBtZXNzYWdlLmRlbGV0ZWQgfHwgbWVzc2FnZS5tb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uICE9PSAnYWxsb3dlZCcpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICBpZihtZXNzYWdlLnJldmlzaW9uICE9PSBpbnB1dC5leHBlY3RlZFJldmlzaW9uIHx8ICghcmVtb3ZlICYmIG5vdygpIC0gbWVzc2FnZS5hZGRlZCA+IDE1ICogNjAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCwgcmVtb3ZlID8gJ2RlbGV0ZScgOiAnZWRpdCcsIDYwKTtcbiAgICBjb25zdCBjb250ZW50ID0gIXJlbW92ZSAmJiAnY29udGVudCcgaW4gaW5wdXQgPyBpbnB1dC5jb250ZW50IDogJyc7XG4gICAgY29uc3QgcmV2aXNpb24gPSBtZXNzYWdlLnJldmlzaW9uICsgMTtcbiAgICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBtZXNzYWdlLmNvbnRlbnRSZXZpc2lvbiArIDE7XG4gICAgY29uc3QgY29udGVudFZlcnNpb24gPSBoYXNoKFttZXNzYWdlLl9rZXksIGNvbnRlbnRSZXZpc2lvbiwgY29udGVudF0pO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBhd2FpdCBob29rcy5jbGFzc2lmeUNvbnRlbnQoe2NvbnRlbnQ6IGNvbnRlbnQgfHwgJyAnLCBjb250ZW50VmVyc2lvbn0pO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBGT1IgY3VycmVudCBJTiBtZXNzYWdlc1xuICAgICAgRklMVEVSIGN1cnJlbnQuX2tleSA9PSBAaWQgQU5EIGN1cnJlbnQucmV2aXNpb24gPT0gQGV4cGVjdGVkUmV2aXNpb25cbiAgICAgIFVQREFURSBjdXJyZW50IFdJVEgge2NvbnRlbnQ6IEBjb250ZW50LCBjb250ZW50UmV2aXNpb246IEBjb250ZW50UmV2aXNpb24sIGRlbGV0ZWQ6IEBkZWxldGVkLFxuICAgICAgICBhdHRhY2htZW50SWRzOiBAYXR0YWNobWVudElkcywgYXR0YWNobWVudHM6IEBhdHRhY2htZW50cywgcmVwbHlUb01lc3NhZ2VJZDogQHJlcGx5LFxuICAgICAgICBtb2JpbGVDb250ZW50VmVyc2lvbjogQGNvbnRlbnRWZXJzaW9uLCBtb2JpbGVEZWNpc2lvbjogQGRlY2lzaW9uLFxuICAgICAgICBtb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uOiBAcGxhdGZvcm1EaXNwb3NpdGlvbiwgbW9kaWZpZWQ6IEBub3csIHJldmlzaW9uOiBAcmV2aXNpb259XG4gICAgICBJTiBtZXNzYWdlcyBSRVRVUk4gdHJ1ZWAsIHthdHRhY2htZW50SWRzOiByZW1vdmUgPyBbXSA6IG1lc3NhZ2UuYXR0YWNobWVudElkcyxcbiAgICAgIGF0dGFjaG1lbnRzOiByZW1vdmUgPyBbXSA6IG1lc3NhZ2UuYXR0YWNobWVudHMsIGNvbnRlbnQsIGNvbnRlbnRSZXZpc2lvbiwgY29udGVudFZlcnNpb24sXG4gICAgICBkZWNpc2lvbjogcHJvamVjdGlvbi5kZWNpc2lvbiwgZGVsZXRlZDogcmVtb3ZlLCBleHBlY3RlZFJldmlzaW9uOiBpbnB1dC5leHBlY3RlZFJldmlzaW9uLCBpZDogbWVzc2FnZS5fa2V5LFxuICAgICAgbm93OiBub3coKSwgcGxhdGZvcm1EaXNwb3NpdGlvbjogcHJvamVjdGlvbi5wbGF0Zm9ybURpc3Bvc2l0aW9uIHx8ICdhbGxvd2VkJyxcbiAgICAgIHJlcGx5OiByZW1vdmUgPyBudWxsIDogbWVzc2FnZS5yZXBseVRvTWVzc2FnZUlkIHx8IG51bGwsIHJldmlzaW9ufSk7XG4gICAgaWYodXBkYXRlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgYXdhaXQgaG9va3MuYXBwZW5kRXZlbnQocmVhZCwge2FjdG9yUGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGtpbmQ6ICdtZXNzYWdlLmNoYW5nZWQnLCBtZW1iZXJzaGlwRXBvY2g6IG1lbWJlcnNoaXAuZXBvY2gsIHJlc291cmNlSWQ6IG1lc3NhZ2UuX2tleSwgcmV2aXNpb259KTtcbiAgICBjb25zdCByZXN1bHQgPSB7bWVzc2FnZUlkOiBtZXNzYWdlLl9rZXksIHJldmlzaW9uLCBzZXF1ZW5jZTogbWVzc2FnZS5zZXF1ZW5jZX07XG4gICAgaWYoYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCkgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4ge2F1dGhvcml6ZSwgZGVsZXRlTWVzc2FnZTogKGlucHV0OiBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0KSA9PiBtdXRhdGVNZXNzYWdlKGlucHV0LCB0cnVlKSxcbiAgICBlZGl0TWVzc2FnZTogKGlucHV0OiBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCkgPT4gbXV0YXRlTWVzc2FnZShpbnB1dCwgZmFsc2UpLCByYXRlTGltaXQsIHJlY2VpcHQsIHJ1biwgc2VuZE1lc3NhZ2V9O1xufTtcblxuZXhwb3J0IHR5cGUgRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZTxURGVjaXNpb24gPSB1bmtub3duPiA9XG4gIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUR1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2U8VERlY2lzaW9uPj47XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInJhbmRvbVVVSUQiLCJDaGF0RXJyb3IiLCJpc0NoYXRJZGVudGlmaWVyIiwiZGVmYXVsdEhhc2giLCJ2YWx1ZSIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ2YWxpZFRleHQiLCJjb250ZW50IiwiQXJyYXkiLCJmcm9tIiwibGVuZ3RoIiwidGVzdCIsInJlcXVpcmVWYWxpZCIsInZhbGlkIiwicmVhZER1cmFibGVNZXNzYWdlIiwicmVhZCIsImNvbnZlcnNhdGlvbklkIiwibWVzc2FnZUlkIiwibWVzc2FnZSIsImNoYXRTY2hlbWFWZXJzaW9uIiwiY3JlYXRlRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZSIsImhvb2tzIiwiaGFzaCIsIm5vdyIsIkRhdGUiLCJ1dWlkIiwiYXV0aG9yaXplIiwicHVycG9zZSIsIm1lbWJlcnNoaXAiLCJhdXRob3JpemVNZW1iZXJzaGlwIiwiaWRlbnRpdHkiLCJsZWdhY3kiLCJyZWNlaXB0IiwiYWN0aW9uIiwia2V5IiwicGF5bG9hZCIsInJlcXVlc3RJZCIsInBlcnNvbmFJZCIsInBheWxvYWRIYXNoIiwicmVjb3JkIiwidXNlcklkIiwicHJpb3IiLCJyZXN1bHQiLCJzYXZlIiwiX2tleSIsImFkZGVkIiwicmF0ZUxpbWl0IiwibGltaXQiLCJpbnRlcnZhbCIsIk1hdGgiLCJmbG9vciIsImFsbG93ZWQiLCJydW4iLCJvcGVyYXRpb24iLCJ3cml0ZSIsImF1dGhvcml6ZUlkZW50aXR5Iiwic2VuZE1lc3NhZ2UiLCJpbnB1dCIsIkJvb2xlYW4iLCJjbGllbnRNZXNzYWdlSWQiLCJzZW5kZXJQZXJzb25hSWQiLCJpc0FycmF5IiwiYXR0YWNobWVudElkcyIsImV2ZXJ5IiwiU2V0Iiwic2l6ZSIsInRyaW0iLCJyZXBseVRvTWVzc2FnZUlkIiwidW5kZWZpbmVkIiwicmVxdWVzdCIsImF0dGFjaG1lbnRzIiwiaW1hZ2VJZCIsInB1c2giLCJhdXRob3JpemVBdHRhY2htZW50IiwicXVvdGVkIiwiYXV0aG9yaXplTWVzc2FnZVZpc2libGUiLCJkZWxldGVkIiwibW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiIsInRpbWVzdGFtcCIsInNlcXVlbmNlIiwiaWQiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwiY29udGVudFZlcnNpb24iLCJwcm9qZWN0aW9uIiwiY2xhc3NpZnlDb250ZW50IiwiY29udGVudFJldmlzaW9uIiwibW9iaWxlQ29udGVudFZlcnNpb24iLCJtb2JpbGVEZWNpc2lvbiIsImRlY2lzaW9uIiwicGxhdGZvcm1EaXNwb3NpdGlvbiIsIm1vZGlmaWVkIiwicmV2aXNpb24iLCJhcHBlbmRFdmVudCIsImFjdG9yUGVyc29uYUlkIiwia2luZCIsIm1lbWJlcnNoaXBFcG9jaCIsImVwb2NoIiwicmVzb3VyY2VJZCIsIm11dGF0ZU1lc3NhZ2UiLCJyZW1vdmUiLCJpZGVtcG90ZW5jeUtleSIsImV4cGVjdGVkUmV2aXNpb24iLCJqb2luU2VxdWVuY2UiLCJ1cGRhdGVkIiwicmVwbHkiLCJkZWxldGVNZXNzYWdlIiwiZWRpdE1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLDJHQUEyRyxHQUMzRyxTQUFRQSxVQUFVLEVBQUVDLFVBQVUsUUFBTyxjQUFjO0FBRW5ELFNBQVFDLFNBQVMsUUFBTyxjQUFjO0FBQ3RDLFNBQVFDLGdCQUFnQixRQUFPLGtCQUFrQjtBQVFqRCxNQUFNQyxjQUFjLENBQUNDLFFBQTJCTCxXQUFXLFVBQVVNLE1BQU0sQ0FBQ0MsS0FBS0MsU0FBUyxDQUFDSCxRQUFRSSxNQUFNLENBQUM7QUFDMUcsTUFBTUMsWUFBWSxDQUFDQyxVQUF3QyxPQUFPQSxZQUFZLFlBQ3pFQyxNQUFNQyxJQUFJLENBQUNGLFNBQVNHLE1BQU0sSUFBSSxRQUM5QixDQUFDLGdGQUFnRkMsSUFBSSxDQUFDSjtBQUMzRixNQUFNSyxlQUFlLENBQUNDO0lBQ3BCLElBQUcsQ0FBQ0EsT0FBTztRQUNULE1BQU0sSUFBSWYsVUFBVTtJQUN0QjtBQUNGO0FBRUEsT0FBTyxNQUFNZ0IscUJBQXFCLE9BQ2hDQyxNQUFpQkMsZ0JBQXdCQztJQUV6QyxNQUFNQyxVQUFVLE1BQU1ILEtBQW9DLDJDQUEyQztRQUFDRTtJQUFTO0lBQy9HLElBQUcsQ0FBQ0MsV0FBV0EsUUFBUUYsY0FBYyxLQUFLQSxrQkFBa0JFLFFBQVFDLGlCQUFpQixLQUFLLEdBQUc7UUFDM0YsTUFBTSxJQUFJckIsVUFBVTtJQUN0QjtJQUNBLE9BQU9vQjtBQUNULEVBQUU7QUFFRixP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
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lc3NhZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AsIG5vLXVuZGVyc2NvcmUtZGFuZ2xlIC0tIE9yZGVyZWQgY2hlY2tzIGFuZCBBcmFuZ28gZG9jdW1lbnQgaWRlbnRpdGllcy4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcmFuZG9tVVVJRH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5pbXBvcnQge0NoYXRFcnJvcn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHtpc0NoYXRJZGVudGlmaWVyfSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuXG5pbXBvcnQgdHlwZSB7Q2hhdFF1ZXJ5fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuaW1wb3J0IHR5cGUge1xuICBEdXJhYmxlQ2hhdEF0dGFjaG1lbnQsIER1cmFibGVDaGF0TWVzc2FnZSwgRHVyYWJsZURlbGV0ZU1lc3NhZ2VJbnB1dCwgRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQsXG4gIER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50LCBEdXJhYmxlTWVzc2FnZUhvb2tzLCBEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0LCBEdXJhYmxlU2VuZE1lc3NhZ2VJbnB1dFxufSBmcm9tICcuL21lc3NhZ2VUeXBlcy5qcyc7XG5cbmNvbnN0IGRlZmF1bHRIYXNoID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLmRpZ2VzdCgnaGV4Jyk7XG5jb25zdCB2YWxpZFRleHQgPSAoY29udGVudDogdW5rbm93bik6IGNvbnRlbnQgaXMgc3RyaW5nID0+IHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJ1xuICAmJiBBcnJheS5mcm9tKGNvbnRlbnQpLmxlbmd0aCA8PSA0MDAwXG4gICYmICEvW1xcdTAwMDBcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/PCFbXFx1RDgwMC1cXHVEQkZGXSlbXFx1REMwMC1cXHVERkZGXS91LnRlc3QoY29udGVudCk7XG5jb25zdCByZXF1aXJlVmFsaWQgPSAodmFsaWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgaWYoIXZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignaW52YWxpZF9yZXF1ZXN0Jyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWFkRHVyYWJsZU1lc3NhZ2UgPSBhc3luYyA8VERlY2lzaW9uPihcbiAgcmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPj4gPT4ge1xuICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVhZDxEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPj4oJ1JFVFVSTiBET0NVTUVOVChcIm1lc3NhZ2VzXCIsIEBtZXNzYWdlSWQpJywge21lc3NhZ2VJZH0pO1xuICBpZighbWVzc2FnZSB8fCBtZXNzYWdlLmNvbnZlcnNhdGlvbklkICE9PSBjb252ZXJzYXRpb25JZCB8fCBtZXNzYWdlLmNoYXRTY2hlbWFWZXJzaW9uICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZSA9IDxURGVjaXNpb24+KGhvb2tzOiBEdXJhYmxlTWVzc2FnZUhvb2tzPFREZWNpc2lvbj4pID0+IHtcbiAgY29uc3QgaGFzaCA9IGhvb2tzLmhhc2ggfHwgZGVmYXVsdEhhc2g7XG4gIGNvbnN0IG5vdyA9IGhvb2tzLm5vdyB8fCBEYXRlLm5vdztcbiAgY29uc3QgdXVpZCA9IGhvb2tzLnV1aWQgfHwgcmFuZG9tVVVJRDtcbiAgY29uc3QgYXV0aG9yaXplID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgcHVycG9zZTogJ2hpc3RvcnknIHwgJ3NlbmQnID0gJ2hpc3RvcnknKSA9PiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGhvb2tzLmF1dGhvcml6ZU1lbWJlcnNoaXAocmVhZCwgaG9va3MuaWRlbnRpdHksIGNvbnZlcnNhdGlvbklkLCBwdXJwb3NlKTtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBSRVRVUk4gRklSU1QoRk9SIG1lc3NhZ2UgSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBtZXNzYWdlLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgICBBTkQgKG1lc3NhZ2UuY2hhdFNjaGVtYVZlcnNpb24gIT0gMSBPUiAhSVNfTlVNQkVSKG1lc3NhZ2Uuc2VxdWVuY2UpIE9SIG1lc3NhZ2Uuc2VxdWVuY2UgPCAxKVxuICAgICAgTElNSVQgMSBSRVRVUk4gdHJ1ZSlgLCB7Y29udmVyc2F0aW9uSWR9KTtcbiAgICBpZihsZWdhY3kgPT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1iZXJzaGlwO1xuICB9O1xuICBjb25zdCByZWNlaXB0ID0gYXN5bmMgPFQ+KFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgYWN0aW9uOiBzdHJpbmcsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IGhhc2goW2FjdGlvbiwgY29udmVyc2F0aW9uSWQsIGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwga2V5XSk7XG4gICAgY29uc3QgcGF5bG9hZEhhc2ggPSBoYXNoKHBheWxvYWQpO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHJlYWQ8e3JlYWRvbmx5IHBheWxvYWRIYXNoOiBzdHJpbmc7IHJlYWRvbmx5IHJlc3VsdDogVDsgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmd9PihcbiAgICAgICdSRVRVUk4gRE9DVU1FTlQoXCJjaGF0TWVzc2FnZVJlcXVlc3RzXCIsIEBrZXkpJywge2tleTogcmVxdWVzdElkfSk7XG4gICAgaWYocmVjb3JkICYmIChyZWNvcmQucGF5bG9hZEhhc2ggIT09IHBheWxvYWRIYXNoIHx8IHJlY29yZC51c2VySWQgIT09IGhvb2tzLmlkZW50aXR5LnVzZXJJZCkpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7cHJpb3I6IHJlY29yZD8ucmVzdWx0LCBzYXZlOiAocmVzdWx0OiBUKSA9PiByZWFkPGJvb2xlYW4+KFxuICAgICAgJ0lOU0VSVCBAcmVjb3JkIElOIGNoYXRNZXNzYWdlUmVxdWVzdHMgUkVUVVJOIHRydWUnLCB7cmVjb3JkOiB7X2tleTogcmVxdWVzdElkLCBhZGRlZDogbm93KCksIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICBwYXlsb2FkSGFzaCwgcGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIHJlc3VsdCwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9fSl9O1xuICB9O1xuICBjb25zdCByYXRlTGltaXQgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBhY3Rpb246IHN0cmluZywgbGltaXQ6IG51bWJlciwgaW50ZXJ2YWwgPSA2MDAwMCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGtleSA9IGhhc2goW2hvb2tzLmlkZW50aXR5LnVzZXJJZCwgaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBhY3Rpb24sIE1hdGguZmxvb3Iobm93KCkgLyBpbnRlcnZhbCldKTtcbiAgICBjb25zdCBhbGxvd2VkID0gYXdhaXQgcmVhZDxib29sZWFuPihgTEVUIGJ1Y2tldCA9IERPQ1VNRU5UKCdjaGF0UmF0ZUxpbWl0cycsIEBrZXkpXG4gICAgICBGSUxURVIgYnVja2V0ID09IG51bGwgT1IgYnVja2V0LmNvdW50IDwgQGxpbWl0XG4gICAgICBVUFNFUlQge19rZXk6IEBrZXl9IElOU0VSVCB7X2tleTogQGtleSwgY291bnQ6IDEsIHBlcnNvbmFJZDogQHBlcnNvbmFJZCwgdXNlcklkOiBAdXNlcklkfVxuICAgICAgVVBEQVRFIHtjb3VudDogT0xELmNvdW50ICsgMSwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCB1c2VySWQ6IEB1c2VySWR9XG4gICAgICBJTiBjaGF0UmF0ZUxpbWl0cyBSRVRVUk4gdHJ1ZWAsIHtrZXksIGxpbWl0LCBwZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9KTtcbiAgICBpZihhbGxvd2VkICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdyYXRlX2xpbWl0ZWQnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJ1biA9IDxUPihvcGVyYXRpb246IChyZWFkOiBDaGF0UXVlcnkpID0+IFByb21pc2U8VD4sIHdyaXRlID0gdHJ1ZSk6IFByb21pc2U8VD4gPT4gaG9va3MucnVuKGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgaG9va3MuYXV0aG9yaXplSWRlbnRpdHkocmVhZCwgaG9va3MuaWRlbnRpdHkpO1xuICAgIHJldHVybiBvcGVyYXRpb24ocmVhZCk7XG4gIH0sIHdyaXRlKTtcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSAoaW5wdXQ6IER1cmFibGVTZW5kTWVzc2FnZUlucHV0KTogUHJvbWlzZTxEdXJhYmxlTWVzc2FnZUFja25vd2xlZGdlbWVudD4gPT4gcnVuKGFzeW5jIChyZWFkKSA9PiB7XG4gICAgcmVxdWlyZVZhbGlkKEJvb2xlYW4oaW5wdXQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY29udmVyc2F0aW9uSWQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY2xpZW50TWVzc2FnZUlkKVxuICAgICAgJiYgaW5wdXQuc2VuZGVyUGVyc29uYUlkID09PSBob29rcy5pZGVudGl0eS5wZXJzb25hSWQgJiYgdmFsaWRUZXh0KGlucHV0LmNvbnRlbnQpXG4gICAgICAmJiBBcnJheS5pc0FycmF5KGlucHV0LmF0dGFjaG1lbnRJZHMpICYmIGlucHV0LmF0dGFjaG1lbnRJZHMubGVuZ3RoIDw9IDRcbiAgICAgICYmIGlucHV0LmF0dGFjaG1lbnRJZHMuZXZlcnkoaXNDaGF0SWRlbnRpZmllcikgJiYgbmV3IFNldChpbnB1dC5hdHRhY2htZW50SWRzKS5zaXplID09PSBpbnB1dC5hdHRhY2htZW50SWRzLmxlbmd0aFxuICAgICAgJiYgKGlucHV0LmNvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDAgfHwgaW5wdXQuYXR0YWNobWVudElkcy5sZW5ndGggPiAwKVxuICAgICAgJiYgKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQgPT09IHVuZGVmaW5lZCB8fCBpc0NoYXRJZGVudGlmaWVyKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpKSk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8RHVyYWJsZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQ+KFxuICAgICAgcmVhZCwgJ3NlbmQnLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQuY2xpZW50TWVzc2FnZUlkLCBpbnB1dCk7XG4gICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QucHJpb3I7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlcnNoaXAgPSBhd2FpdCBhdXRob3JpemUocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsICdzZW5kJyk7XG4gICAgYXdhaXQgcmF0ZUxpbWl0KHJlYWQsICdzZW5kJywgNjApO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzOiBEdXJhYmxlQ2hhdEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgIGZvcihjb25zdCBpbWFnZUlkIG9mIGlucHV0LmF0dGFjaG1lbnRJZHMpIHtcbiAgICAgIGF0dGFjaG1lbnRzLnB1c2goYXdhaXQgaG9va3MuYXV0aG9yaXplQXR0YWNobWVudChyZWFkLCBpbWFnZUlkKSk7XG4gICAgfVxuICAgIGlmKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpIHtcbiAgICAgIGNvbnN0IHF1b3RlZCA9IGF3YWl0IHJlYWREdXJhYmxlTWVzc2FnZTxURGVjaXNpb24+KHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5yZXBseVRvTWVzc2FnZUlkKTtcbiAgICAgIGF3YWl0IGhvb2tzLmF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlKHJlYWQsIGhvb2tzLmlkZW50aXR5LCBxdW90ZWQsIG1lbWJlcnNoaXApO1xuICAgICAgaWYocXVvdGVkLmRlbGV0ZWQgfHwgcXVvdGVkLm1vYmlsZVBsYXRmb3JtRGlzcG9zaXRpb24gIT09ICdhbGxvd2VkJykge1xuICAgICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhd2FpdCByZWFkPG51bWJlcj4oYEZPUiBjb252ZXJzYXRpb24gSU4gY29udmVyc2F0aW9ucyBGSUxURVIgY29udmVyc2F0aW9uLl9rZXkgPT0gQGlkXG4gICAgICBBTkQgY29udmVyc2F0aW9uLmNoYXRTY2hlbWFWZXJzaW9uID09IDEgQU5EIGNvbnZlcnNhdGlvbi5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgQU5EIElTX05VTUJFUihjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlKSBBTkQgY29udmVyc2F0aW9uLmxhc3RTZXF1ZW5jZSA8IDkwMDcxOTkyNTQ3NDA5OTFcbiAgICAgIFVQREFURSBjb252ZXJzYXRpb24gV0lUSCB7bGFzdFNlcXVlbmNlOiBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlICsgMSwgbW9kaWZpZWQ6IEBub3d9XG4gICAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVcubGFzdFNlcXVlbmNlYCwge2lkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgbm93OiB0aW1lc3RhbXB9KTtcbiAgICBpZighTnVtYmVyLmlzU2FmZUludGVnZXIoc2VxdWVuY2UpIHx8IE51bWJlcihzZXF1ZW5jZSkgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlSWQgPSB1dWlkKCk7XG4gICAgY29uc3QgY29udGVudFZlcnNpb24gPSBoYXNoKFttZXNzYWdlSWQsIDEsIGlucHV0LmNvbnRlbnRdKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gYXdhaXQgaG9va3MuY2xhc3NpZnlDb250ZW50KHtjb250ZW50OiBpbnB1dC5jb250ZW50IHx8ICcgJywgY29udGVudFZlcnNpb259KTtcbiAgICBjb25zdCByZWNvcmQ6IER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+ID0ge19rZXk6IG1lc3NhZ2VJZCwgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICAgIGF0dGFjaG1lbnRJZHM6IGlucHV0LmF0dGFjaG1lbnRJZHMsIGF0dGFjaG1lbnRzLCBjaGF0U2NoZW1hVmVyc2lvbjogMSwgY2xpZW50TWVzc2FnZUlkOiBpbnB1dC5jbGllbnRNZXNzYWdlSWQsXG4gICAgICBjb250ZW50OiBpbnB1dC5jb250ZW50LCBjb250ZW50UmV2aXNpb246IDEsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgZGVsZXRlZDogZmFsc2UsXG4gICAgICBtb2JpbGVDb250ZW50VmVyc2lvbjogY29udGVudFZlcnNpb24sIG1vYmlsZURlY2lzaW9uOiBwcm9qZWN0aW9uLmRlY2lzaW9uLFxuICAgICAgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogcHJvamVjdGlvbi5wbGF0Zm9ybURpc3Bvc2l0aW9uIHx8ICdhbGxvd2VkJywgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IGlucHV0LnJlcGx5VG9NZXNzYWdlSWQsIHJldmlzaW9uOiAxLCBzZW5kZXJQZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCxcbiAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSEsIHVzZXJJZDogaG9va3MuaWRlbnRpdHkudXNlcklkfTtcbiAgICBpZihhd2FpdCByZWFkPGJvb2xlYW4+KCdJTlNFUlQgQHJlY29yZCBJTiBtZXNzYWdlcyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmR9KSAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcigndW5hdmFpbGFibGUnKTtcbiAgICB9XG4gICAgYXdhaXQgaG9va3MuYXBwZW5kRXZlbnQocmVhZCwge2FjdG9yUGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGtpbmQ6ICdtZXNzYWdlLmNoYW5nZWQnLCBtZW1iZXJzaGlwRXBvY2g6IG1lbWJlcnNoaXAuZXBvY2gsIHJlc291cmNlSWQ6IG1lc3NhZ2VJZCwgcmV2aXNpb246IDF9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7Y2xpZW50TWVzc2FnZUlkOiBpbnB1dC5jbGllbnRNZXNzYWdlSWQsIG1lc3NhZ2VJZCwgcmV2aXNpb246IDEsIHNlcXVlbmNlOiBzZXF1ZW5jZSF9O1xuICAgIGlmKGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgY29uc3QgbXV0YXRlTWVzc2FnZSA9IChcbiAgICBpbnB1dDogRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQgfCBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0LCByZW1vdmU6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0PiA9PiBydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICByZXF1aXJlVmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5tZXNzYWdlSWQpXG4gICAgICAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LmlkZW1wb3RlbmN5S2V5KSAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5leHBlY3RlZFJldmlzaW9uKVxuICAgICAgJiYgaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiA+PSAxICYmIChyZW1vdmUgfHwgKCdjb250ZW50JyBpbiBpbnB1dCAmJiB2YWxpZFRleHQoaW5wdXQuY29udGVudCkpKSk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8RHVyYWJsZU1lc3NhZ2VNdXRhdGlvblJlc3VsdD4ocmVhZCwgcmVtb3ZlID8gJ2RlbGV0ZScgOiAnZWRpdCcsXG4gICAgICBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQuaWRlbXBvdGVuY3lLZXksIGlucHV0KTtcbiAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICB9XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGF1dGhvcml6ZShyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgJ3NlbmQnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVhZER1cmFibGVNZXNzYWdlPFREZWNpc2lvbj4ocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsIGlucHV0Lm1lc3NhZ2VJZCk7XG4gICAgaWYobWVzc2FnZS5zZW5kZXJQZXJzb25hSWQgIT09IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCB8fCBtZXNzYWdlLnVzZXJJZCAhPT0gaG9va3MuaWRlbnRpdHkudXNlcklkXG4gICAgICB8fCBtZXNzYWdlLnNlcXVlbmNlIDwgbWVtYmVyc2hpcC5qb2luU2VxdWVuY2UgfHwgbWVzc2FnZS5kZWxldGVkIHx8IG1lc3NhZ2UubW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiAhPT0gJ2FsbG93ZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgaWYobWVzc2FnZS5yZXZpc2lvbiAhPT0gaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiB8fCAoIXJlbW92ZSAmJiBub3coKSAtIG1lc3NhZ2UuYWRkZWQgPiAxNSAqIDYwMDAwKSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgYXdhaXQgcmF0ZUxpbWl0KHJlYWQsIHJlbW92ZSA/ICdkZWxldGUnIDogJ2VkaXQnLCA2MCk7XG4gICAgY29uc3QgY29udGVudCA9ICFyZW1vdmUgJiYgJ2NvbnRlbnQnIGluIGlucHV0ID8gaW5wdXQuY29udGVudCA6ICcnO1xuICAgIGNvbnN0IHJldmlzaW9uID0gbWVzc2FnZS5yZXZpc2lvbiArIDE7XG4gICAgY29uc3QgY29udGVudFJldmlzaW9uID0gbWVzc2FnZS5jb250ZW50UmV2aXNpb24gKyAxO1xuICAgIGNvbnN0IGNvbnRlbnRWZXJzaW9uID0gaGFzaChbbWVzc2FnZS5fa2V5LCBjb250ZW50UmV2aXNpb24sIGNvbnRlbnRdKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gYXdhaXQgaG9va3MuY2xhc3NpZnlDb250ZW50KHtjb250ZW50OiBjb250ZW50IHx8ICcgJywgY29udGVudFZlcnNpb259KTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgcmVhZDxib29sZWFuPihgRk9SIGN1cnJlbnQgSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBjdXJyZW50Ll9rZXkgPT0gQGlkIEFORCBjdXJyZW50LnJldmlzaW9uID09IEBleHBlY3RlZFJldmlzaW9uXG4gICAgICBVUERBVEUgY3VycmVudCBXSVRIIHtjb250ZW50OiBAY29udGVudCwgY29udGVudFJldmlzaW9uOiBAY29udGVudFJldmlzaW9uLCBkZWxldGVkOiBAZGVsZXRlZCxcbiAgICAgICAgYXR0YWNobWVudElkczogQGF0dGFjaG1lbnRJZHMsIGF0dGFjaG1lbnRzOiBAYXR0YWNobWVudHMsIHJlcGx5VG9NZXNzYWdlSWQ6IEByZXBseSxcbiAgICAgICAgbW9iaWxlQ29udGVudFZlcnNpb246IEBjb250ZW50VmVyc2lvbiwgbW9iaWxlRGVjaXNpb246IEBkZWNpc2lvbixcbiAgICAgICAgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogQHBsYXRmb3JtRGlzcG9zaXRpb24sIG1vZGlmaWVkOiBAbm93LCByZXZpc2lvbjogQHJldmlzaW9ufVxuICAgICAgSU4gbWVzc2FnZXMgUkVUVVJOIHRydWVgLCB7YXR0YWNobWVudElkczogcmVtb3ZlID8gW10gOiBtZXNzYWdlLmF0dGFjaG1lbnRJZHMsXG4gICAgICBhdHRhY2htZW50czogcmVtb3ZlID8gW10gOiBtZXNzYWdlLmF0dGFjaG1lbnRzLCBjb250ZW50LCBjb250ZW50UmV2aXNpb24sIGNvbnRlbnRWZXJzaW9uLFxuICAgICAgZGVjaXNpb246IHByb2plY3Rpb24uZGVjaXNpb24sIGRlbGV0ZWQ6IHJlbW92ZSwgZXhwZWN0ZWRSZXZpc2lvbjogaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiwgaWQ6IG1lc3NhZ2UuX2tleSxcbiAgICAgIG5vdzogbm93KCksIHBsYXRmb3JtRGlzcG9zaXRpb246IHByb2plY3Rpb24ucGxhdGZvcm1EaXNwb3NpdGlvbiB8fCAnYWxsb3dlZCcsXG4gICAgICByZXBseTogcmVtb3ZlID8gbnVsbCA6IG1lc3NhZ2UucmVwbHlUb01lc3NhZ2VJZCB8fCBudWxsLCByZXZpc2lvbn0pO1xuICAgIGlmKHVwZGF0ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IGhvb2tzLmFwcGVuZEV2ZW50KHJlYWQsIHthY3RvclBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsXG4gICAgICBraW5kOiAnbWVzc2FnZS5jaGFuZ2VkJywgbWVtYmVyc2hpcEVwb2NoOiBtZW1iZXJzaGlwLmVwb2NoLCByZXNvdXJjZUlkOiBtZXNzYWdlLl9rZXksIHJldmlzaW9ufSk7XG4gICAgY29uc3QgcmVzdWx0ID0ge21lc3NhZ2VJZDogbWVzc2FnZS5fa2V5LCByZXZpc2lvbiwgc2VxdWVuY2U6IG1lc3NhZ2Uuc2VxdWVuY2V9O1xuICAgIGlmKGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuIHthdXRob3JpemUsIGRlbGV0ZU1lc3NhZ2U6IChpbnB1dDogRHVyYWJsZURlbGV0ZU1lc3NhZ2VJbnB1dCkgPT4gbXV0YXRlTWVzc2FnZShpbnB1dCwgdHJ1ZSksXG4gICAgZWRpdE1lc3NhZ2U6IChpbnB1dDogRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQpID0+IG11dGF0ZU1lc3NhZ2UoaW5wdXQsIGZhbHNlKSwgcmF0ZUxpbWl0LCByZWNlaXB0LCBydW4sIHNlbmRNZXNzYWdlfTtcbn07XG5cbmV4cG9ydCB0eXBlIER1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2U8VERlY2lzaW9uID0gdW5rbm93bj4gPVxuICBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVEdXJhYmxlTWVzc2FnZVBlcnNpc3RlbmNlPFREZWNpc2lvbj4+O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJyYW5kb21VVUlEIiwiQ2hhdEVycm9yIiwiaXNDaGF0SWRlbnRpZmllciIsImRlZmF1bHRIYXNoIiwidmFsdWUiLCJ1cGRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwidmFsaWRUZXh0IiwiY29udGVudCIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsInRlc3QiLCJyZXF1aXJlVmFsaWQiLCJ2YWxpZCIsInJlYWREdXJhYmxlTWVzc2FnZSIsInJlYWQiLCJjb252ZXJzYXRpb25JZCIsIm1lc3NhZ2VJZCIsIm1lc3NhZ2UiLCJjaGF0U2NoZW1hVmVyc2lvbiIsImNyZWF0ZUR1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2UiLCJob29rcyIsImhhc2giLCJub3ciLCJEYXRlIiwidXVpZCIsImF1dGhvcml6ZSIsInB1cnBvc2UiLCJtZW1iZXJzaGlwIiwiYXV0aG9yaXplTWVtYmVyc2hpcCIsImlkZW50aXR5IiwibGVnYWN5IiwicmVjZWlwdCIsImFjdGlvbiIsImtleSIsInBheWxvYWQiLCJyZXF1ZXN0SWQiLCJwZXJzb25hSWQiLCJwYXlsb2FkSGFzaCIsInJlY29yZCIsInVzZXJJZCIsInByaW9yIiwicmVzdWx0Iiwic2F2ZSIsIl9rZXkiLCJhZGRlZCIsInJhdGVMaW1pdCIsImxpbWl0IiwiaW50ZXJ2YWwiLCJNYXRoIiwiZmxvb3IiLCJhbGxvd2VkIiwicnVuIiwib3BlcmF0aW9uIiwid3JpdGUiLCJhdXRob3JpemVJZGVudGl0eSIsInNlbmRNZXNzYWdlIiwiaW5wdXQiLCJCb29sZWFuIiwiY2xpZW50TWVzc2FnZUlkIiwic2VuZGVyUGVyc29uYUlkIiwiaXNBcnJheSIsImF0dGFjaG1lbnRJZHMiLCJldmVyeSIsIlNldCIsInNpemUiLCJ0cmltIiwicmVwbHlUb01lc3NhZ2VJZCIsInVuZGVmaW5lZCIsInJlcXVlc3QiLCJhdHRhY2htZW50cyIsImltYWdlSWQiLCJwdXNoIiwiYXV0aG9yaXplQXR0YWNobWVudCIsInF1b3RlZCIsImF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlIiwiZGVsZXRlZCIsIm1vYmlsZVBsYXRmb3JtRGlzcG9zaXRpb24iLCJ0aW1lc3RhbXAiLCJzZXF1ZW5jZSIsImlkIiwiTnVtYmVyIiwiaXNTYWZlSW50ZWdlciIsImNvbnRlbnRWZXJzaW9uIiwicHJvamVjdGlvbiIsImNsYXNzaWZ5Q29udGVudCIsImNvbnRlbnRSZXZpc2lvbiIsIm1vYmlsZUNvbnRlbnRWZXJzaW9uIiwibW9iaWxlRGVjaXNpb24iLCJkZWNpc2lvbiIsInBsYXRmb3JtRGlzcG9zaXRpb24iLCJtb2RpZmllZCIsInJldmlzaW9uIiwiYXBwZW5kRXZlbnQiLCJhY3RvclBlcnNvbmFJZCIsImtpbmQiLCJtZW1iZXJzaGlwRXBvY2giLCJlcG9jaCIsInJlc291cmNlSWQiLCJtdXRhdGVNZXNzYWdlIiwicmVtb3ZlIiwiaWRlbXBvdGVuY3lLZXkiLCJleHBlY3RlZFJldmlzaW9uIiwiam9pblNlcXVlbmNlIiwidXBkYXRlZCIsInJlcGx5IiwiZGVsZXRlTWVzc2FnZSIsImVkaXRNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSwyR0FBMkcsR0FDM0csU0FBUUEsVUFBVSxFQUFFQyxVQUFVLFFBQU8sY0FBYztBQUVuRCxTQUFRQyxTQUFTLFFBQU8sY0FBYztBQUN0QyxTQUFRQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFRakQsTUFBTUMsY0FBYyxDQUFDQyxRQUEyQkwsV0FBVyxVQUFVTSxNQUFNLENBQUNDLEtBQUtDLFNBQVMsQ0FBQ0gsUUFBUUksTUFBTSxDQUFDO0FBQzFHLE1BQU1DLFlBQVksQ0FBQ0MsVUFBd0MsT0FBT0EsWUFBWSxZQUN6RUMsTUFBTUMsSUFBSSxDQUFDRixTQUFTRyxNQUFNLElBQUksUUFDOUIsQ0FBQyxnRkFBZ0ZDLElBQUksQ0FBQ0o7QUFDM0YsTUFBTUssZUFBZSxDQUFDQztJQUNwQixJQUFHLENBQUNBLE9BQU87UUFDVCxNQUFNLElBQUlmLFVBQVU7SUFDdEI7QUFDRjtBQUVBLE9BQU8sTUFBTWdCLHFCQUFxQixPQUNoQ0MsTUFBaUJDLGdCQUF3QkM7SUFFekMsTUFBTUMsVUFBVSxNQUFNSCxLQUFvQywyQ0FBMkM7UUFBQ0U7SUFBUztJQUMvRyxJQUFHLENBQUNDLFdBQVdBLFFBQVFGLGNBQWMsS0FBS0Esa0JBQWtCRSxRQUFRQyxpQkFBaUIsS0FBSyxHQUFHO1FBQzNGLE1BQU0sSUFBSXJCLFVBQVU7SUFDdEI7SUFDQSxPQUFP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