@nlabs/reaktor 1.8.0 → 1.9.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 (283) hide show
  1. package/README.md +62 -1
  2. package/docs/GENERATION.md +63 -0
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.d.ts +2 -2
  5. package/lib/actions/apps.js +1 -1
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +1 -1
  8. package/lib/actions/contentGeneration.d.ts +40 -0
  9. package/lib/actions/contentGeneration.js +206 -0
  10. package/lib/actions/conversations.js +1 -1
  11. package/lib/actions/crm.js +1 -1
  12. package/lib/actions/crud.d.ts +2 -2
  13. package/lib/actions/crud.js +1 -1
  14. package/lib/actions/dynamodb.js +1 -1
  15. package/lib/actions/email.js +1 -1
  16. package/lib/actions/files.d.ts +42 -4
  17. package/lib/actions/files.js +1 -1
  18. package/lib/actions/flags.js +1 -1
  19. package/lib/actions/geminiVideo.d.ts +19 -0
  20. package/lib/actions/geminiVideo.js +161 -0
  21. package/lib/actions/groups.js +1 -1
  22. package/lib/actions/higgsfield.d.ts +20 -0
  23. package/lib/actions/higgsfield.js +148 -0
  24. package/lib/actions/imageGeneration.d.ts +37 -0
  25. package/lib/actions/imageGeneration.js +121 -0
  26. package/lib/actions/images.js +1 -1
  27. package/lib/actions/index.d.ts +5 -0
  28. package/lib/actions/index.js +6 -1
  29. package/lib/actions/ios.js +1 -1
  30. package/lib/actions/locations.js +1 -1
  31. package/lib/actions/messages.js +1 -1
  32. package/lib/actions/notifications.js +1 -1
  33. package/lib/actions/payments.js +27 -26
  34. package/lib/actions/personas.d.ts +4 -4
  35. package/lib/actions/personas.js +1 -1
  36. package/lib/actions/posts.js +1 -1
  37. package/lib/actions/query.js +1 -1
  38. package/lib/actions/reactions.d.ts +6 -6
  39. package/lib/actions/reactions.js +1 -1
  40. package/lib/actions/rum.js +1 -1
  41. package/lib/actions/s3.d.ts +4 -4
  42. package/lib/actions/s3.js +22 -6
  43. package/lib/actions/search.js +1 -1
  44. package/lib/actions/sms.js +1 -1
  45. package/lib/actions/statistics.js +1 -1
  46. package/lib/actions/subscriptions.js +1 -1
  47. package/lib/actions/tags.d.ts +2 -2
  48. package/lib/actions/tags.js +1 -1
  49. package/lib/actions/users.d.ts +2 -2
  50. package/lib/actions/users.js +1 -1
  51. package/lib/actions/videoGeneration.d.ts +20 -0
  52. package/lib/actions/videoGeneration.js +32 -0
  53. package/lib/actions/videos.js +1 -1
  54. package/lib/adapters/arangoAdapter.js +1 -1
  55. package/lib/adapters/contentAdapter.js +1 -1
  56. package/lib/adapters/fileAdapter.js +1 -1
  57. package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
  58. package/lib/adapters/geminiGenerationAdapter.js +41 -0
  59. package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
  60. package/lib/adapters/higgsfieldAdapter.js +131 -0
  61. package/lib/adapters/imageAdapter.js +1 -1
  62. package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
  63. package/lib/adapters/imageGenerationAdapter.js +18 -0
  64. package/lib/adapters/index.d.ts +3 -0
  65. package/lib/adapters/index.js +4 -1
  66. package/lib/adapters/messageAdapter.js +1 -1
  67. package/lib/adapters/postAdapter.js +1 -1
  68. package/lib/adapters/reaktorAdapter.js +1 -1
  69. package/lib/adapters/tagAdapter.js +1 -1
  70. package/lib/adapters/userAdapter.d.ts +76 -1
  71. package/lib/adapters/userAdapter.js +1 -1
  72. package/lib/config.d.ts +19 -14
  73. package/lib/config.js +9 -1
  74. package/lib/constants/collections.js +1 -1
  75. package/lib/handlers/graphqlHandler.js +1 -1
  76. package/lib/index.d.ts +1 -0
  77. package/lib/index.js +2 -1
  78. package/lib/lambdas/actions/websockets.d.ts +5 -0
  79. package/lib/lambdas/actions/websockets.js +16 -1
  80. package/lib/lambdas/authorizer.js +1 -1
  81. package/lib/lambdas/connection.d.ts +2 -2
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.d.ts +4 -4
  85. package/lib/lambdas/utils/websocket.js +1 -1
  86. package/lib/mocks/conversation.js +1 -1
  87. package/lib/mocks/file.js +1 -1
  88. package/lib/mocks/group.js +1 -1
  89. package/lib/mocks/image.js +1 -1
  90. package/lib/mocks/post.js +1 -1
  91. package/lib/mocks/tag.js +1 -1
  92. package/lib/mocks/user.js +1 -1
  93. package/lib/mocks/video.js +1 -1
  94. package/lib/mutations/analytics/analytics.js +1 -1
  95. package/lib/mutations/content/content.js +15 -1
  96. package/lib/mutations/crm/crm.js +1 -1
  97. package/lib/mutations/events/events.js +1 -1
  98. package/lib/mutations/flags/flags.js +1 -1
  99. package/lib/mutations/groups/groups.js +1 -1
  100. package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
  101. package/lib/mutations/higgsfield/higgsfield.js +62 -0
  102. package/lib/mutations/images/images.js +10 -1
  103. package/lib/mutations/index.d.ts +2 -1
  104. package/lib/mutations/index.js +11 -2
  105. package/lib/mutations/locations/locations.js +1 -1
  106. package/lib/mutations/messages/messages.js +1 -1
  107. package/lib/mutations/personas/personas.js +1 -1
  108. package/lib/mutations/posts/posts.js +1 -1
  109. package/lib/mutations/reactions/reactions.js +1 -1
  110. package/lib/mutations/rum/rum.js +1 -1
  111. package/lib/mutations/statistics/statistics.js +1 -1
  112. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  113. package/lib/mutations/tags/tags.js +1 -1
  114. package/lib/mutations/users/users.js +1 -1
  115. package/lib/mutations/videos/videos.js +24 -10
  116. package/lib/objectTypes/analytics.js +1 -1
  117. package/lib/objectTypes/app.js +1 -1
  118. package/lib/objectTypes/bankAccount.js +1 -1
  119. package/lib/objectTypes/connection.js +1 -1
  120. package/lib/objectTypes/content.js +1 -1
  121. package/lib/objectTypes/contentGeneration.d.ts +2 -0
  122. package/lib/objectTypes/contentGeneration.js +30 -0
  123. package/lib/objectTypes/conversation.js +1 -1
  124. package/lib/objectTypes/creditCard.js +1 -1
  125. package/lib/objectTypes/crm.js +1 -1
  126. package/lib/objectTypes/document.js +1 -1
  127. package/lib/objectTypes/error.js +1 -1
  128. package/lib/objectTypes/event.js +1 -1
  129. package/lib/objectTypes/external.js +1 -1
  130. package/lib/objectTypes/file.js +1 -1
  131. package/lib/objectTypes/filter.js +1 -1
  132. package/lib/objectTypes/flag.js +1 -1
  133. package/lib/objectTypes/group.js +1 -1
  134. package/lib/objectTypes/higgsfield.d.ts +5 -0
  135. package/lib/objectTypes/higgsfield.js +149 -0
  136. package/lib/objectTypes/iapSubscription.js +1 -1
  137. package/lib/objectTypes/image.js +1 -1
  138. package/lib/objectTypes/imageGeneration.d.ts +2 -0
  139. package/lib/objectTypes/imageGeneration.js +33 -0
  140. package/lib/objectTypes/index.d.ts +2 -0
  141. package/lib/objectTypes/index.js +3 -1
  142. package/lib/objectTypes/location.js +1 -1
  143. package/lib/objectTypes/message.js +1 -1
  144. package/lib/objectTypes/passcode.js +1 -1
  145. package/lib/objectTypes/persona.d.ts +37 -2
  146. package/lib/objectTypes/persona.js +1 -1
  147. package/lib/objectTypes/plan.js +1 -1
  148. package/lib/objectTypes/post.js +1 -1
  149. package/lib/objectTypes/query.js +1 -1
  150. package/lib/objectTypes/reaction.js +1 -1
  151. package/lib/objectTypes/relation.js +1 -1
  152. package/lib/objectTypes/rum.js +1 -1
  153. package/lib/objectTypes/search.js +1 -1
  154. package/lib/objectTypes/statistics.js +1 -1
  155. package/lib/objectTypes/subscription.js +1 -1
  156. package/lib/objectTypes/tag.js +1 -1
  157. package/lib/objectTypes/user.js +1 -1
  158. package/lib/objectTypes/video.js +1 -1
  159. package/lib/objectTypes/videoGeneration.d.ts +2 -0
  160. package/lib/objectTypes/videoGeneration.js +31 -0
  161. package/lib/queries/analytics/analytics.js +1 -1
  162. package/lib/queries/content/content.js +1 -1
  163. package/lib/queries/crm/crm.js +1 -1
  164. package/lib/queries/events/events.js +1 -1
  165. package/lib/queries/flags/flags.js +1 -1
  166. package/lib/queries/groups/groups.js +1 -1
  167. package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
  168. package/lib/queries/higgsfield/higgsfield.js +22 -0
  169. package/lib/queries/images/images.js +1 -1
  170. package/lib/queries/index.d.ts +2 -1
  171. package/lib/queries/index.js +7 -2
  172. package/lib/queries/locations/locations.js +1 -1
  173. package/lib/queries/messages/messages.js +1 -1
  174. package/lib/queries/personas/personas.js +1 -1
  175. package/lib/queries/posts/posts.js +1 -1
  176. package/lib/queries/query/query.js +1 -1
  177. package/lib/queries/reactions/reactions.js +1 -1
  178. package/lib/queries/statistics/statistics.js +1 -1
  179. package/lib/queries/subscriptions/subscriptions.js +1 -1
  180. package/lib/queries/tags/tags.js +1 -1
  181. package/lib/queries/users/users.js +1 -1
  182. package/lib/queries/videos/videos.js +1 -1
  183. package/lib/templates/email/layout.js +1 -1
  184. package/lib/templates/email/passwordForgot.js +1 -1
  185. package/lib/templates/email/passwordRecovery.js +1 -1
  186. package/lib/templates/email/verifyEmail.js +1 -1
  187. package/lib/templates/email/welcome.js +1 -1
  188. package/lib/templates/sms/passwordForgot.js +1 -1
  189. package/lib/templates/sms/passwordRecovery.js +1 -1
  190. package/lib/templates/sms/verifyEmail.js +1 -1
  191. package/lib/templates/sms/verifyPhone.js +1 -1
  192. package/lib/templates/sms/welcome.js +1 -1
  193. package/lib/types/analytics.types.d.ts +16 -16
  194. package/lib/types/analytics.types.js +1 -1
  195. package/lib/types/apps.types.d.ts +4 -4
  196. package/lib/types/apps.types.js +1 -1
  197. package/lib/types/arangodb.types.d.ts +20 -20
  198. package/lib/types/arangodb.types.js +1 -1
  199. package/lib/types/auth.types.js +1 -1
  200. package/lib/types/connections.types.d.ts +2 -2
  201. package/lib/types/connections.types.js +1 -1
  202. package/lib/types/content.types.d.ts +6 -6
  203. package/lib/types/content.types.js +1 -1
  204. package/lib/types/conversations.types.d.ts +2 -2
  205. package/lib/types/conversations.types.js +1 -1
  206. package/lib/types/crm.types.d.ts +30 -30
  207. package/lib/types/crm.types.js +1 -1
  208. package/lib/types/email.types.d.ts +2 -2
  209. package/lib/types/email.types.js +1 -1
  210. package/lib/types/error.types.d.ts +1 -0
  211. package/lib/types/error.types.js +2 -1
  212. package/lib/types/files.types.d.ts +2 -2
  213. package/lib/types/files.types.js +1 -1
  214. package/lib/types/flags.types.d.ts +8 -8
  215. package/lib/types/flags.types.js +1 -1
  216. package/lib/types/google.types.js +1 -1
  217. package/lib/types/groups.types.d.ts +2 -2
  218. package/lib/types/groups.types.js +1 -1
  219. package/lib/types/images.types.d.ts +2 -2
  220. package/lib/types/images.types.js +1 -1
  221. package/lib/types/index.js +1 -1
  222. package/lib/types/locations.types.d.ts +2 -2
  223. package/lib/types/locations.types.js +1 -1
  224. package/lib/types/messages.types.d.ts +2 -2
  225. package/lib/types/messages.types.js +1 -1
  226. package/lib/types/notifications.types.js +1 -1
  227. package/lib/types/payments.types.d.ts +14 -14
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.d.ts +2 -2
  230. package/lib/types/personas.types.js +1 -1
  231. package/lib/types/posts.types.d.ts +2 -2
  232. package/lib/types/posts.types.js +1 -1
  233. package/lib/types/rum.types.d.ts +6 -6
  234. package/lib/types/rum.types.js +1 -1
  235. package/lib/types/statistics.types.js +1 -1
  236. package/lib/types/tags.types.d.ts +4 -4
  237. package/lib/types/tags.types.js +1 -1
  238. package/lib/types/users.types.d.ts +2 -2
  239. package/lib/types/users.types.js +1 -1
  240. package/lib/types/videos.types.d.ts +2 -2
  241. package/lib/types/videos.types.js +1 -1
  242. package/lib/types/websockets.types.d.ts +4 -4
  243. package/lib/types/websockets.types.js +1 -1
  244. package/lib/upload.js +1 -1
  245. package/lib/utils/adapterUtils.js +1 -1
  246. package/lib/utils/analyticsUtils.js +1 -1
  247. package/lib/utils/appContext.js +1 -1
  248. package/lib/utils/aqlHelpers.js +1 -1
  249. package/lib/utils/arangodbUtils.js +1 -1
  250. package/lib/utils/authUtils.js +1 -1
  251. package/lib/utils/awsUtils.js +1 -1
  252. package/lib/utils/collectionRegistry.d.ts +2 -2
  253. package/lib/utils/collectionRegistry.js +1 -1
  254. package/lib/utils/contextUtils.js +1 -1
  255. package/lib/utils/dbI18n.example.js +1 -1
  256. package/lib/utils/dbI18n.js +1 -1
  257. package/lib/utils/googleTranslate.js +1 -1
  258. package/lib/utils/graphqlUtils.js +1 -1
  259. package/lib/utils/imageUtils.js +1 -1
  260. package/lib/utils/index.d.ts +3 -0
  261. package/lib/utils/index.js +4 -1
  262. package/lib/utils/languageDetection.js +1 -1
  263. package/lib/utils/localeUtils.example.js +1 -1
  264. package/lib/utils/localeUtils.js +1 -1
  265. package/lib/utils/mediaAccess.d.ts +5 -0
  266. package/lib/utils/mediaAccess.js +57 -0
  267. package/lib/utils/middlewareUtils.js +1 -1
  268. package/lib/utils/nodeRealtime.d.ts +14 -0
  269. package/lib/utils/nodeRealtime.js +84 -0
  270. package/lib/utils/opaqueToken.d.ts +4 -0
  271. package/lib/utils/opaqueToken.js +7 -0
  272. package/lib/utils/queryBuilder.js +1 -1
  273. package/lib/utils/schemaUtils.js +1 -1
  274. package/lib/utils/sessionUtils.js +1 -1
  275. package/lib/utils/stripeUtils.d.ts +1 -1
  276. package/lib/utils/stripeUtils.js +2 -2
  277. package/lib/utils/stripeUtils.ts.bak +12 -0
  278. package/lib/utils/templateUtils.js +1 -1
  279. package/lib/utils/testUtils.js +1 -1
  280. package/lib/utils/translationQueue.example.js +1 -1
  281. package/lib/utils/translationQueue.js +1 -1
  282. package/lib/videoProcessing.js +1 -1
  283. package/package.json +26 -25
@@ -925,4 +925,4 @@ export const getCustomerNotificationsByUser = (context, userId)=>{
925
925
  return useDb(context.databaseName).query(query).then((cursor)=>cursor.all());
926
926
  };
927
927
 
928
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NybS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNi1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVBob25lLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2lzQWRtaW5Vc2VyfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtzZXNTZW5kfSBmcm9tICcuL2VtYWlsLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDdXN0b21lck5vdGlmaWNhdGlvblR5cGUsXG4gIEN1c3RvbWVyT3JkZXJUeXBlLFxuICBDcm1DYW1wYWlnbklucHV0LFxuICBDcm1DYW1wYWlnblR5cGUsXG4gIENybUNvbnRhY3RGaWx0ZXIsXG4gIENybUZvcm1TdWJtaXNzaW9uSW5wdXQsXG4gIENybUZvcm1TdWJtaXNzaW9uVHlwZSxcbiAgTWFpbGluZ0xpc3RUeXBlLFxuICBQdWJsaWNTdXBwb3J0VGlja2V0RmVlZCxcbiAgUHVibGljU3VwcG9ydFRpY2tldElucHV0LFxuICBTaG9waWZ5Q3VzdG9tZXJPcmRlcklucHV0LFxuICBTdXBwb3J0VGlja2V0RXZlbnRUeXBlLFxuICBTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGUsXG4gIFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIFN1cHBvcnRUaWNrZXRUeXBlRGF0YVxufSBmcm9tICcuLi90eXBlcy9jcm0udHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IG5vdyA9ICgpOiBudW1iZXIgPT4gRGF0ZS5ub3coKTtcbmNvbnN0IGNvbGxlY3Rpb24gPSAobmFtZTogc3RyaW5nKSA9PiBsaXRlcmFsKG5hbWUpO1xuY29uc3QgZG9jS2V5ID0gKHZhbHVlID0gJycpOiBzdHJpbmcgPT4gcGFyc2VJZChTdHJpbmcodmFsdWUpKTtcbmNvbnN0IGRvY0lkID0gKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIGtleSA9ICcnKTogc3RyaW5nID0+IGAke2NvbGxlY3Rpb25OYW1lfS8ke2RvY0tleShrZXkpfWA7XG5jb25zdCBleHRlcm5hbEtleSA9IChwcmVmaXg6IHN0cmluZywgaWQgPSAnJyk6IHN0cmluZyA9PiBjcmVhdGVIYXNoKGAke3ByZWZpeH0tJHtTdHJpbmcoaWQpfWAsIG51bGwpO1xuY29uc3QgY2xlYW5TdHJpbmcgPSAodmFsdWU6IHVua25vd24sIGxlbmd0aCA9IDY0MCk6IHN0cmluZyA9PiBwYXJzZVN0cmluZyhTdHJpbmcodmFsdWUgfHwgJycpLCBsZW5ndGgpO1xuY29uc3QgY2xlYW5FeHRlcm5hbElkID0gKHZhbHVlOiB1bmtub3duLCBsZW5ndGggPSAzMjApOiBzdHJpbmcgPT4gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgbGVuZ3RoKTtcbmNvbnN0IGVuc3VyZURvY3VtZW50Q29sbGVjdGlvbiA9IGFzeW5jIChkYXRhYmFzZTogUmV0dXJuVHlwZTx0eXBlb2YgdXNlRGI+LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZGF0YWJhc2UuY29sbGVjdGlvbihuYW1lKTtcbiAgaWYoYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSByZXR1cm47XG4gIHRyeSB7XG4gICAgYXdhaXQgZGF0YWJhc2UuY3JlYXRlQ29sbGVjdGlvbihuYW1lKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKCFhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3QgZW5zdXJlRWRnZUNvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZURiPiwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGRhdGFiYXNlLmNvbGxlY3Rpb24obmFtZSk7XG4gIGlmKGF3YWl0IHRhcmdldC5leGlzdHMoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGRhdGFiYXNlLmNyZWF0ZUVkZ2VDb2xsZWN0aW9uKG5hbWUpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoIWF3YWl0IHRhcmdldC5leGlzdHMoKSkgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IHJlcXVpcmVDcm1BZG1pbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogdm9pZCA9PiB7XG4gIGlmKCFpc0FkbWluVXNlcihjb250ZXh0LnNlc3Npb24gYXMgYW55KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYWRtaW5pc3RyYXRvcl9hY2Nlc3NfcmVxdWlyZWQnKTtcbiAgfVxufTtcbmV4cG9ydCBjb25zdCByZXF1aXJlQ3JtQWRtaW5pc3RyYXRvciA9IHJlcXVpcmVDcm1BZG1pbjtcblxuY29uc3QgYWxsb3dlZENvbnRhY3RGaWVsZHMgPSBuZXcgU2V0KFsnZW1haWwnLCAnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3Bob25lJywgJ21hcmtldGluZ0NvbnNlbnRTb3VyY2UnLCAnY3JtU291cmNlJ10pO1xuY29uc3Qgc3VwcG9ydFByaW9yaXRpZXMgPSBuZXcgU2V0KFsnbG93JywgJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddKTtcbmNvbnN0IHN1cHBvcnRTdGF0dXNlcyA9IG5ldyBTZXQoWydzdWJtaXR0ZWQnLCAnaW5fcHJvZ3Jlc3MnLCAnZG9uZScsICdjb21wbGV0ZWQnXSk7XG5jb25zdCBzdXBwb3J0VHlwZXMgPSBuZXcgU2V0KFsnZGVsaXZlcnlfaXNzdWUnLCAncmVmdW5kX3JlcXVlc3QnLCAnYnVnX3JlcG9ydCcsICdhY2NvdW50X2lzc3VlJywgJ2dlbmVyYWxfc3VwcG9ydCddKTtcbmNvbnN0IGVtYWlsUGF0dGVybiA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvdTtcbmNvbnN0IGVzY2FwZUh0bWwgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB2YWx1ZS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuY29uc3Qgc2FuaXRpemVIdG1sID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgLnJlcGxhY2UoLzwoc2NyaXB0fGlmcmFtZXxvYmplY3R8ZW1iZWQpXFxiW14+XSo+W1xcc1xcU10qPzxcXC9cXDE+L2dpLCAnJylcbiAgLnJlcGxhY2UoL1xcc29uXFx3K1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccz5dKykvZ2ksICcnKTtcbmNvbnN0IHNhbml0aXplQ3NzID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgLnJlcGxhY2UoLzxcXC8/c3R5bGVcXGJbXj5dKj4vZ2ksICcnKVxuICAucmVwbGFjZSgvQGltcG9ydFxccytbXjtdKzs/L2dpLCAnJylcbiAgLnJlcGxhY2UoL3VybFxccypcXChcXHMqKFsnXCJdPylqYXZhc2NyaXB0OlteKV0rXFwpL2dpLCAnJyk7XG5jb25zdCBodG1sVG9UZXh0ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUucmVwbGFjZSgvPFtePl0rPi9nLCAnICcpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5jb25zdCBjaHVuayA9IDxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XG4gIGNvbnN0IGdyb3VwczogVFtdW10gPSBbXTtcbiAgZm9yKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCArPSBzaXplKSBncm91cHMucHVzaChpdGVtcy5zbGljZShpbmRleCwgaW5kZXggKyBzaXplKSk7XG4gIHJldHVybiBncm91cHM7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VibWl0Q3JtRm9ybSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IENybUZvcm1TdWJtaXNzaW9uSW5wdXRcbik6IFByb21pc2U8Q3JtRm9ybVN1Ym1pc3Npb25UeXBlPiA9PiB7XG4gIGlmKHR5cGVvZiBpbnB1dD8ubWFya2V0aW5nT3B0SW4gIT09ICdib29sZWFuJykgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9tYXJrZXRpbmdPcHRJbicpO1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGlucHV0LmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJhd1Bob25lID0gY2xlYW5TdHJpbmcoaW5wdXQucGhvbmUsIDgwKTtcbiAgY29uc3QgcGhvbmUgPSByYXdQaG9uZSA/IChwYXJzZVBob25lKHJhd1Bob25lKSB8fCByYXdQaG9uZSkgOiAnJztcbiAgaWYoIWVtYWlsICYmICFwaG9uZSkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9lbWFpbF9vcl9waG9uZScpO1xuXG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBhd2FpdCBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24oZGF0YWJhc2UsIENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKTtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHNvdXJjZSA9IGNsZWFuU3RyaW5nKGlucHV0LnNvdXJjZSB8fCBpbnB1dC5mb3JtSWQgfHwgJ2Zvcm0nLCAxNjApO1xuICBjb25zdCB2YWx1ZXMgPSBpbnB1dC52YWx1ZXMgfHwge307XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSB8fCB2YWx1ZXMuZmlyc3ROYW1lLCAxNjApO1xuICBjb25zdCBsYXN0TmFtZSA9IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lIHx8IHZhbHVlcy5sYXN0TmFtZSwgMTYwKTtcbiAgY29uc3QgZ2VuZXJhdGVkVXNlcktleSA9IGNyZWF0ZUhhc2goZW1haWwgfHwgcGhvbmUsIG51bGwpO1xuICBjb25zdCBjb25zZW50ID0gaW5wdXQubWFya2V0aW5nT3B0SW5cbiAgICA/IHttYXJrZXRpbmdPcHRJbkF0OiB0aW1lc3RhbXAsIG1hcmtldGluZ09wdE91dEF0OiBudWxsfVxuICAgIDoge21hcmtldGluZ09wdE91dEF0OiB0aW1lc3RhbXB9O1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBtYWlsaW5nTGlzdDogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogc291cmNlLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHBob25lLFxuICAgIHR5cGU6ICdjcm1Db250YWN0JyxcbiAgICB1c2VyQWNjZXNzOiAwLFxuICAgIHVzZXJJZDogZ2VuZXJhdGVkVXNlcktleSxcbiAgICB2ZXJpZmllZEVtYWlsOiBmYWxzZSxcbiAgICB2ZXJpZmllZFBob25lOiBmYWxzZSxcbiAgICAuLi5jb25zZW50XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgLi4uKGVtYWlsID8ge2VtYWlsfSA6IHt9KSxcbiAgICAuLi4oZmlyc3ROYW1lID8ge2ZpcnN0TmFtZX0gOiB7fSksXG4gICAgLi4uKGxhc3ROYW1lID8ge2xhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGhvbmUgPyB7cGhvbmV9IDoge30pLFxuICAgIG1haWxpbmdMaXN0OiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBzb3VyY2UsXG4gICAgbWFya2V0aW5nT3B0SW46IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgLi4uY29uc2VudFxuICB9O1xuICBjb25zdCB1c2VyID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIExFVCBleGlzdGluZyA9IEZJUlNUKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSICgke2VtYWlsfSAhPSBcIlwiICYmIExPV0VSKHVzZXIuZW1haWwgfHwgXCJcIikgPT0gJHtlbWFpbH0pXG4gICAgICAgICAgfHwgKCR7cGhvbmV9ICE9IFwiXCIgJiYgdXNlci5waG9uZSA9PSAke3Bob25lfSlcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdXNlclxuICAgIClcbiAgICBMRVQgdXNlcktleSA9IGV4aXN0aW5nID8gZXhpc3RpbmcuX2tleSA6ICR7Z2VuZXJhdGVkVXNlcktleX1cbiAgICBVUFNFUlQge19rZXk6IHVzZXJLZXl9XG4gICAgSU5TRVJUIE1FUkdFKCR7dXNlckluc2VydH0sIHtfa2V5OiB1c2VyS2V5LCB1c2VySWQ6IHVzZXJLZXl9KVxuICAgIFVQREFURSAke3VzZXJVcGRhdGV9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgY29uc3QgdXNlcklkID0gZG9jS2V5KFN0cmluZyh1c2VyPy5fa2V5IHx8IHVzZXI/LnVzZXJJZCB8fCBnZW5lcmF0ZWRVc2VyS2V5KSk7XG5cbiAgY29uc3Qgc3VibWlzc2lvbklkID0gY3JlYXRlSGFzaChgY3JtLXN1Ym1pc3Npb24tJHt0aW1lc3RhbXB9LSR7ZW1haWx9LSR7cGhvbmV9YCwgbnVsbCk7XG4gIGNvbnN0IHN1Ym1pc3Npb24gPSB7XG4gICAgX2tleTogc3VibWlzc2lvbklkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZm9ybUlkOiBjbGVhblN0cmluZyhpbnB1dC5mb3JtSWQsIDE2MCksXG4gICAgbWFya2V0aW5nT3B0SW46IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcGhvbmUsXG4gICAgc291cmNlLFxuICAgIHN1Ym1pc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgdmFsdWVzXG4gIH07XG4gIGNvbnN0IHNhdmVkID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIElOU0VSVCAke3N1Ym1pc3Npb259IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIHJldHVybiBzYXZlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcm1Gb3JtU3VibWlzc2lvbnMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Q3JtRm9ybVN1Ym1pc3Npb25UeXBlW10+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpLmV4aXN0cygpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICAgIEZPUiBzdWJtaXNzaW9uIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyl9XG4gICAgICAgIFNPUlQgc3VibWlzc2lvbi5hZGRlZCBERVNDXG4gICAgICAgIExJTUlUIDUwMFxuICAgICAgICBSRVRVUk4gc3VibWlzc2lvblxuICAgIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcm1Db250YWN0cyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWx0ZXI6IENybUNvbnRhY3RGaWx0ZXIgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaCA9IGNsZWFuU3RyaW5nKGZpbHRlci5zZWFyY2gsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZmllbGQgPSBhbGxvd2VkQ29udGFjdEZpZWxkcy5oYXMoZmlsdGVyLmZpZWxkIHx8ICcnKSA/IFN0cmluZyhmaWx0ZXIuZmllbGQpIDogJyc7XG4gIGNvbnN0IHZhbHVlID0gY2xlYW5TdHJpbmcoZmlsdGVyLnZhbHVlLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG9wdGVkSW5Pbmx5ID0gZmlsdGVyLm9wdGVkSW5Pbmx5ICE9PSBmYWxzZTtcbiAgY29uc3Qgb3BlcmF0b3IgPSBbJ2NvbnRhaW5zJywgJ2VxdWFscycsICdleGlzdHMnXS5pbmNsdWRlcyhmaWx0ZXIub3BlcmF0b3IgfHwgJycpID8gZmlsdGVyLm9wZXJhdG9yIDogJ2NvbnRhaW5zJztcbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgIEZJTFRFUiAkeyFvcHRlZEluT25seX0gfHwgdXNlci5tYXJrZXRpbmdPcHRJbiA9PSB0cnVlXG4gICAgICBGSUxURVIgJHshc2VhcmNofSB8fCBDT05UQUlOUyhMT1dFUihDT05DQVRfU0VQQVJBVE9SKFwiIFwiLCB1c2VyLmZpcnN0TmFtZSwgdXNlci5sYXN0TmFtZSwgdXNlci5lbWFpbCwgdXNlci5waG9uZSkpLCAke3NlYXJjaH0pXG4gICAgICBGSUxURVIgJHshZmllbGR9IHx8ICgke29wZXJhdG9yID09PSAnZXhpc3RzJ31cbiAgICAgICAgPyBIQVModXNlciwgJHtmaWVsZH0pXG4gICAgICAgIDogKCR7b3BlcmF0b3IgPT09ICdlcXVhbHMnfSA/IExPV0VSKFRPX1NUUklORyh1c2VyWyR7ZmllbGR9XSkpID09ICR7dmFsdWV9IDogQ09OVEFJTlMoTE9XRVIoVE9fU1RSSU5HKHVzZXJbJHtmaWVsZH1dKSksICR7dmFsdWV9KSkpXG4gICAgICBTT1JUIHVzZXIuYWRkZWQgREVTQ1xuICAgICAgTElNSVQgMTAwMFxuICAgICAgUkVUVVJOIE1FUkdFKHVzZXIsIHtjcm1Tb3VyY2U6IHVzZXIubWFya2V0aW5nQ29uc2VudFNvdXJjZX0pXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kQ3JtQ2FtcGFpZ24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcm1DYW1wYWlnbklucHV0XG4pOiBQcm9taXNlPENybUNhbXBhaWduVHlwZT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IHN1YmplY3QgPSBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApO1xuICBjb25zdCBib2R5SHRtbCA9IHNhbml0aXplSHRtbChpbnB1dC5odG1sKTtcbiAgY29uc3QgY3NzID0gc2FuaXRpemVDc3MoaW5wdXQuY3NzKTtcbiAgaWYoIXN1YmplY3QgfHwgIWJvZHlIdG1sKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2NhbXBhaWduX2NvbnRlbnQnKTtcblxuICBjb25zdCBjYW5kaWRhdGVzID0gYXdhaXQgZ2V0Q3JtQ29udGFjdHMoY29udGV4dCwgey4uLmlucHV0LmZpbHRlciwgb3B0ZWRJbk9ubHk6IHRydWV9KTtcbiAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KChpbnB1dC51c2VySWRzIHx8IFtdKS5tYXAoKGlkKSA9PiBkb2NLZXkoaWQpKSk7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBjYW5kaWRhdGVzLmZpbHRlcigodXNlcikgPT5cbiAgICBCb29sZWFuKHVzZXIuZW1haWwpICYmICghc2VsZWN0ZWRJZHMuc2l6ZSB8fCBzZWxlY3RlZElkcy5oYXMoZG9jS2V5KHVzZXIudXNlcklkIHx8IHVzZXIuX2tleSkpKSk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBjYW1wYWlnbklkID0gY3JlYXRlSGFzaChgY3JtLWNhbXBhaWduLSR7dGltZXN0YW1wfS0ke3N1YmplY3R9YCwgbnVsbCk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBjb25zdCBjYW1wYWlnbiA9IHtcbiAgICBfa2V5OiBjYW1wYWlnbklkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgY2FtcGFpZ25JZCxcbiAgICBjc3MsXG4gICAgZmFpbGVkQ291bnQ6IDAsXG4gICAgaHRtbDogYm9keUh0bWwsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICByZWNpcGllbnRDb3VudDogcmVjaXBpZW50cy5sZW5ndGgsXG4gICAgc2VudENvdW50OiAwLFxuICAgIHN0YXR1czogJ3NlbmRpbmcnLFxuICAgIHN1YmplY3RcbiAgfTtcbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYElOU0VSVCAke2NhbXBhaWdufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0NBTVBBSUdOUyl9YCk7XG5cbiAgbGV0IGZhaWxlZENvdW50ID0gMDtcbiAgbGV0IHNlbnRDb3VudCA9IDA7XG4gIGZvcihjb25zdCByZWNpcGllbnRzQmF0Y2ggb2YgY2h1bmsocmVjaXBpZW50cywgNTApKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlc1NlbmQoe1xuICAgICAgICBEZXN0aW5hdGlvbjoge0JjY0FkZHJlc3NlczogcmVjaXBpZW50c0JhdGNoLm1hcCgocmVjaXBpZW50KSA9PiBTdHJpbmcocmVjaXBpZW50LmVtYWlsKSl9LFxuICAgICAgICBNZXNzYWdlOiB7XG4gICAgICAgICAgQm9keToge0h0bWw6IHtEYXRhOiBgPHN0eWxlPiR7Y3NzfTwvc3R5bGU+JHtib2R5SHRtbH1gfSwgVGV4dDoge0RhdGE6IGh0bWxUb1RleHQoYm9keUh0bWwpfX0sXG4gICAgICAgICAgU3ViamVjdDoge0RhdGE6IHN1YmplY3R9XG4gICAgICAgIH0sXG4gICAgICAgIFNvdXJjZTogYFwiJHtjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydE5hbWUgfHwgJ1JlYWt0b3InfVwiIDwke2NvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0RW1haWwgfHwgJ3N1cHBvcnRAcmVha3Rvci5pbyd9PmBcbiAgICAgIH0pO1xuICAgICAgc2VudENvdW50ICs9IHJlY2lwaWVudHNCYXRjaC5sZW5ndGg7XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGZhaWxlZENvdW50ICs9IHJlY2lwaWVudHNCYXRjaC5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHsuLi5jYW1wYWlnbiwgZmFpbGVkQ291bnQsIHNlbnRBdDogbm93KCksIHNlbnRDb3VudCwgc3RhdHVzOiBmYWlsZWRDb3VudCA/IChzZW50Q291bnQgPyAncGFydGlhbCcgOiAnZmFpbGVkJykgOiAnc2VudCd9O1xuICBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgVVBEQVRFICR7Y2FtcGFpZ25JZH0gV0lUSCAke3tcbiAgICAgIGZhaWxlZENvdW50OiByZXN1bHQuZmFpbGVkQ291bnQsXG4gICAgICBtb2RpZmllZDogcmVzdWx0LnNlbnRBdCxcbiAgICAgIHNlbnRBdDogcmVzdWx0LnNlbnRBdCxcbiAgICAgIHNlbnRDb3VudDogcmVzdWx0LnNlbnRDb3VudCxcbiAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1c1xuICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fQ0FNUEFJR05TKX1cbiAgYCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBzYXZlRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZWRnZUNvbGxlY3Rpb246IHN0cmluZyxcbiAgZWRnZUtleTogc3RyaW5nLFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZnJvbSxcbiAgICBfa2V5OiBlZGdlS2V5LFxuICAgIF90bzogdG8sXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIC4uLmRhdGFcbiAgfTtcbiAgY29uc3QgcXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtlZGdlS2V5fX1cbiAgICBJTlNFUlQgJHtlZGdlfVxuICAgIFVQREFURSAke2RhdGF9IElOICR7Y29sbGVjdGlvbihlZGdlQ29sbGVjdGlvbil9XG4gIGA7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYWlsaW5nTGlzdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8TWFpbGluZ0xpc3RUeXBlPlxuKTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IG1haWxpbmdMaXN0SWQgPSBkb2NLZXkoU3RyaW5nKGlucHV0Py5tYWlsaW5nTGlzdElkIHx8IGNyZWF0ZUhhc2goYG1haWxpbmctbGlzdC0ke2lucHV0Py5uYW1lfS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBtYWlsaW5nTGlzdCA9IHtcbiAgICBfa2V5OiBtYWlsaW5nTGlzdElkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgY3JlYXRlZEJ5VXNlcklkOiBkb2NLZXkoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgIGRlc2NyaXB0aW9uOiBjbGVhblN0cmluZyhpbnB1dD8uZGVzY3JpcHRpb24sIDIwMDApLFxuICAgIG1haWxpbmdMaXN0SWQsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBuYW1lOiBjbGVhblN0cmluZyhpbnB1dD8ubmFtZSwgMTYwKSxcbiAgICBzdGF0dXM6IGlucHV0Py5zdGF0dXMgfHwgJ2FjdGl2ZSdcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke21haWxpbmdMaXN0SWR9fVxuICAgIElOU0VSVCAke21haWxpbmdMaXN0fVxuICAgIFVQREFURSAke3tcbiAgICAgIGRlc2NyaXB0aW9uOiBtYWlsaW5nTGlzdC5kZXNjcmlwdGlvbixcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBuYW1lOiBtYWlsaW5nTGlzdC5uYW1lLFxuICAgICAgc3RhdHVzOiBtYWlsaW5nTGlzdC5zdGF0dXNcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWFpbGluZ0xpc3RzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsaXN0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTKX1cbiAgICAgIEZJTFRFUiBsaXN0LnN0YXR1cyAhPSBcImFyY2hpdmVkXCJcbiAgICAgIFNPUlQgbGlzdC5hZGRlZCBERVNDXG4gICAgICBSRVRVUk4gbGlzdFxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9NYWlsaW5nTGlzdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIG1haWxpbmdMaXN0SWQ6IHN0cmluZyxcbiAgc291cmNlID0gJ21hbnVhbCdcbik6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KHVzZXJJZCk7XG4gIGNvbnN0IGxpc3RLZXkgPSBkb2NLZXkobWFpbGluZ0xpc3RJZCk7XG4gIGNvbnN0IGVkZ2VLZXkgPSBjcmVhdGVIYXNoKGBoYXNNYWlsaW5nTGlzdC0ke3VzZXJLZXl9LSR7bGlzdEtleX1gKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19NQUlMSU5HX0xJU1QsXG4gICAgZWRnZUtleSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUywgbGlzdEtleSksXG4gICAge1xuICAgICAgYWRkZWRCeVVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICAgIHNvdXJjZTogY2xlYW5TdHJpbmcoc291cmNlLCA4MCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSlcbiAgICAucXVlcnkoYXFsYFJFVFVSTiBET0NVTUVOVCgke2RvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIGxpc3RLZXkpfSlgKVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVVzZXJGcm9tTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KHVzZXJJZCk7XG4gIGNvbnN0IGxpc3RLZXkgPSBkb2NLZXkobWFpbGluZ0xpc3RJZCk7XG4gIGNvbnN0IGVkZ2VLZXkgPSBjcmVhdGVIYXNoKGBoYXNNYWlsaW5nTGlzdC0ke3VzZXJLZXl9LSR7bGlzdEtleX1gKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIG1vZGlmaWVkOiBub3coKSxcbiAgICByZW1vdmVkQXQ6IG5vdygpLFxuICAgIHN0YXR1czogJ3JlbW92ZWQnXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQREFURSAke2VkZ2VLZXl9IFdJVEggJHt1cGRhdGV9IElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfTUFJTElOR19MSVNUKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKS50aGVuKEJvb2xlYW4pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haWxpbmdMaXN0VXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG1haWxpbmdMaXN0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGxpc3RJZCA9IGRvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgdXNlciwgZWRnZSBJTiAxLi4xIElOQk9VTkQgJHtsaXN0SWR9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfTUFJTElOR19MSVNUKX1cbiAgICAgIEZJTFRFUiBlZGdlLnN0YXR1cyA9PSBcImFjdGl2ZVwiXG4gICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICBSRVRVUk4gdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2Vyc0J5UHVyY2hhc2VkUHJvZHVjdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcHJvZHVjdElkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBwcm9kdWN0S2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktcHJvZHVjdCcsIHByb2R1Y3RJZCk7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBvcmRlciBJTiAxLi4xIElOQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TSE9QSUZZX1BST0RVQ1RTLCBwcm9kdWN0S2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCl9XG4gICAgICBGT1IgdXNlciBJTiAxLi4xIElOQk9VTkQgb3JkZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCB1c2VyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsaWdpYmxlTWFpbGluZ1VzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgbWFpbGluZ0xpc3RJZD86IHN0cmluZzsgcmVhZG9ubHkgcHJvZHVjdElkPzogc3RyaW5nOyByZWFkb25seSBleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzPzogYm9vbGVhbn0gPSB7fVxuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgPSBvcHRpb25zLmV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgIT09IGZhbHNlO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBMRVQgYmFzZVVzZXJzID0gKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSIHVzZXIubWFya2V0aW5nT3B0SW4gPT0gdHJ1ZVxuICAgICAgICBGSUxURVIgdXNlci5lbWFpbCAhPSBudWxsICYmIHVzZXIuZW1haWwgIT0gXCJcIlxuICAgICAgICBGSUxURVIgdXNlci5lbWFpbERlbGl2ZXJ5U3RhdHVzID09IG51bGwgfHwgdXNlci5lbWFpbERlbGl2ZXJ5U3RhdHVzID09IFwidmFsaWRcIlxuICAgICAgICAke29wdGlvbnMubWFpbGluZ0xpc3RJZCA/IGFxbGBcbiAgICAgICAgICBGSUxURVIgTEVOR1RIKFxuICAgICAgICAgICAgRk9SIGxpc3QgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgICAgICAgICAgIEZJTFRFUiBsaXN0Ll9rZXkgPT0gJHtkb2NLZXkob3B0aW9ucy5tYWlsaW5nTGlzdElkKX1cbiAgICAgICAgICAgICAgUkVUVVJOIGxpc3RcbiAgICAgICAgICApID4gMFxuICAgICAgICBgIDogYXFsYGB9XG4gICAgICAgICR7b3B0aW9ucy5wcm9kdWN0SWQgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EIHVzZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICAgICAgICBGT1IgcHJvZHVjdCBJTiAxLi4xIE9VVEJPVU5EIG9yZGVyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNUKX1cbiAgICAgICAgICAgICAgICBGSUxURVIgcHJvZHVjdC5wcm9kdWN0SWQgPT0gJHtTdHJpbmcob3B0aW9ucy5wcm9kdWN0SWQpfVxuICAgICAgICAgICAgICAgIFJFVFVSTiBwcm9kdWN0XG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICAke2V4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiB0aWNrZXQgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgICAgICAgICAgICAgRklMVEVSIHRpY2tldC5zdGF0dXMgSU4gW1wib3BlblwiLCBcImluX3Byb2dyZXNzXCIsIFwid2FpdGluZ19vbl9jdXN0b21lclwiLCBcIndhaXRpbmdfb25faW50ZXJuYWxcIl1cbiAgICAgICAgICAgICAgRklMVEVSIHRpY2tldC5wcmlvcml0eSBJTiBbXCJoaWdoXCIsIFwidXJnZW50XCJdXG4gICAgICAgICAgICAgIFJFVFVSTiB0aWNrZXRcbiAgICAgICAgICApID09IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICBSRVRVUk4gdXNlclxuICAgIClcbiAgICBGT1IgdXNlciBJTiBiYXNlVXNlcnNcbiAgICAgIFNPUlQgdXNlci5lbWFpbCBBU0NcbiAgICAgIFJFVFVSTiBESVNUSU5DVCB1c2VyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluZ2VzdFNob3BpZnlDdXN0b21lck9yZGVyID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogU2hvcGlmeUN1c3RvbWVyT3JkZXJJbnB1dFxuKTogUHJvbWlzZTxDdXN0b21lck9yZGVyVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3Qgc2hvcGlmeUN1c3RvbWVySWQgPSBjbGVhbkV4dGVybmFsSWQoaW5wdXQuc2hvcGlmeUN1c3RvbWVySWQsIDE2MCk7XG4gIGNvbnN0IHNob3BpZnlPcmRlcklkID0gY2xlYW5FeHRlcm5hbElkKGlucHV0LnNob3BpZnlPcmRlcklkLCAxNjApO1xuICBjb25zdCBjdXN0b21lciA9IGlucHV0LmN1c3RvbWVyIHx8IHt9O1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLihpbnB1dC5wcm9kdWN0SWRzIHx8IFtdKSwgLi4uKGlucHV0LnByb2R1Y3RzIHx8IFtdKS5tYXAoKHByb2R1Y3QpID0+IHByb2R1Y3QucHJvZHVjdElkKV1cbiAgICAubWFwKChwcm9kdWN0SWQpID0+IGNsZWFuRXh0ZXJuYWxJZChwcm9kdWN0SWQsIDMyMCkpXG4gICAgLmZpbHRlcihCb29sZWFuKSkpO1xuXG4gIGlmKCFzaG9waWZ5Q3VzdG9tZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfc2hvcGlmeUN1c3RvbWVySWQnKTtcbiAgfVxuICBpZighc2hvcGlmeU9yZGVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3Nob3BpZnlPcmRlcklkJyk7XG4gIH1cbiAgaWYoIWVtYWlsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jdXN0b21lckVtYWlsJyk7XG4gIH1cblxuICBjb25zdCB1c2VyS2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktdXNlcicsIHNob3BpZnlDdXN0b21lcklkKTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiB1c2VyS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmxhc3ROYW1lLCAxNjApLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6ICdzaG9waWZ5JyxcbiAgICBtYXJrZXRpbmdPcHRJbjogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUsXG4gICAgbWFya2V0aW5nT3B0SW5BdDogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZCxcbiAgICB0eXBlOiAnY3JtQ29udGFjdCcsXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmxhc3ROYW1lLCAxNjApLFxuICAgIGxhc3RQdXJjaGFzZWRBdDogaW5wdXQucHVyY2hhc2VkQXQgfHwgdGltZXN0YW1wLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6ICdzaG9waWZ5JyxcbiAgICBtYXJrZXRpbmdPcHRJbjogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZFxuICB9O1xuICBjb25zdCB1c2VyUXVlcnkgPSBhcWxgXG4gICAgTEVUIGV4aXN0aW5nID0gRklSU1QoXG4gICAgICBGT1IgdXNlciBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgICBGSUxURVIgdXNlci5zaG9waWZ5Q3VzdG9tZXJJZCA9PSAke3Nob3BpZnlDdXN0b21lcklkfSB8fCB1c2VyLmVtYWlsID09ICR7ZW1haWx9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTEVUIHVzZXJLZXkgPSBleGlzdGluZyA/IGV4aXN0aW5nLl9rZXkgOiAke3VzZXJLZXl9XG4gICAgVVBTRVJUIHtfa2V5OiB1c2VyS2V5fVxuICAgIElOU0VSVCBNRVJHRSgke3VzZXJJbnNlcnR9LCB7X2tleTogdXNlcktleSwgdXNlcklkOiB1c2VyS2V5fSlcbiAgICBVUERBVEUgJHt1c2VyVXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeSh1c2VyUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGU7XG4gIGNvbnN0IHJlc29sdmVkVXNlcktleSA9IGRvY0tleShTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgdXNlcktleSkpO1xuICBjb25zdCBvcmRlcktleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LW9yZGVyJywgc2hvcGlmeU9yZGVySWQpO1xuICBjb25zdCBvcmRlciA9IHtcbiAgICBfa2V5OiBvcmRlcktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGN1cnJlbmN5OiBjbGVhblN0cmluZyhpbnB1dC5jdXJyZW5jeSwgMykudG9VcHBlckNhc2UoKSxcbiAgICBjdXN0b21lck9yZGVySWQ6IG9yZGVyS2V5LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcHJvZHVjdElkcyxcbiAgICBwdXJjaGFzZWRBdDogaW5wdXQucHVyY2hhc2VkQXQgfHwgdGltZXN0YW1wLFxuICAgIHNob3BpZnlDdXN0b21lcklkLFxuICAgIHNob3BpZnlPcmRlcklkLFxuICAgIHRvdGFsUHJpY2U6IE51bWJlcihpbnB1dC50b3RhbFByaWNlIHx8IDApLFxuICAgIHVzZXJJZDogcmVzb2x2ZWRVc2VyS2V5XG4gIH07XG4gIGNvbnN0IG9yZGVyUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke29yZGVyS2V5fX1cbiAgICBJTlNFUlQgJHtvcmRlcn1cbiAgICBVUERBVEUgJHt7XG4gICAgICBjdXJyZW5jeTogb3JkZXIuY3VycmVuY3ksXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgcHJvZHVjdElkcyxcbiAgICAgIHB1cmNoYXNlZEF0OiBvcmRlci5wdXJjaGFzZWRBdCxcbiAgICAgIHRvdGFsUHJpY2U6IG9yZGVyLnRvdGFsUHJpY2UsXG4gICAgICB1c2VySWQ6IHJlc29sdmVkVXNlcktleVxuICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRPcmRlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShvcmRlclF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIEN1c3RvbWVyT3JkZXJUeXBlO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX0NVU1RPTUVSX09SREVSLFxuICAgIGNyZWF0ZUhhc2goYGhhc0N1c3RvbWVyT3JkZXItJHtyZXNvbHZlZFVzZXJLZXl9LSR7b3JkZXJLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHJlc29sdmVkVXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTLCBvcmRlcktleSksXG4gICAge3B1cmNoYXNlZEF0OiBvcmRlci5wdXJjaGFzZWRBdCwgc2hvcGlmeUN1c3RvbWVySWQsIHNob3BpZnlPcmRlcklkfVxuICApO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb2R1Y3RJZHMubWFwKGFzeW5jIChwcm9kdWN0SWQpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0gKGlucHV0LnByb2R1Y3RzIHx8IFtdKS5maW5kKChpdGVtKSA9PiBpdGVtLnByb2R1Y3RJZCA9PT0gcHJvZHVjdElkKSB8fCB7cHJvZHVjdElkfTtcbiAgICBjb25zdCBwcm9kdWN0S2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktcHJvZHVjdCcsIHByb2R1Y3RJZCk7XG4gICAgY29uc3QgcHJvZHVjdERvYyA9IHtcbiAgICAgIF9rZXk6IHByb2R1Y3RLZXksXG4gICAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICAgIHRpdGxlOiBjbGVhblN0cmluZyhwcm9kdWN0LnRpdGxlLCAzMjApLFxuICAgICAgdmFyaWFudElkOiBjbGVhbkV4dGVybmFsSWQocHJvZHVjdC52YXJpYW50SWQsIDE2MClcbiAgICB9O1xuICAgIGNvbnN0IHByb2R1Y3RRdWVyeSA9IGFxbGBcbiAgICAgIFVQU0VSVCB7X2tleTogJHtwcm9kdWN0S2V5fX1cbiAgICAgIElOU0VSVCAke3Byb2R1Y3REb2N9XG4gICAgICBVUERBVEUgJHt7XG4gICAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICAgIHRpdGxlOiBwcm9kdWN0RG9jLnRpdGxlLFxuICAgICAgICB2YXJpYW50SWQ6IHByb2R1Y3REb2MudmFyaWFudElkXG4gICAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUyl9XG4gICAgYDtcbiAgICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocHJvZHVjdFF1ZXJ5KTtcbiAgICBhd2FpdCBzYXZlRWRnZShcbiAgICAgIGNvbnRleHQsXG4gICAgICBFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QsXG4gICAgICBjcmVhdGVIYXNoKGBoYXNQdXJjaGFzZWRQcm9kdWN0LSR7b3JkZXJLZXl9LSR7cHJvZHVjdEtleX1gKSxcbiAgICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUywgb3JkZXJLZXkpLFxuICAgICAgZG9jSWQoQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUywgcHJvZHVjdEtleSksXG4gICAgICB7cHJvZHVjdElkLCBwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXR9XG4gICAgKTtcbiAgfSkpO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgVVBEQVRFICR7cmVzb2x2ZWRVc2VyS2V5fVxuICAgIFdJVEgge1xuICAgICAgbGFzdFB1cmNoYXNlZEF0OiAke29yZGVyLnB1cmNoYXNlZEF0fSxcbiAgICAgIHRvdGFsT3JkZXJDb3VudDogTEVOR1RIKFxuICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICBSRVRVUk4gb3JkZXJcbiAgICAgICksXG4gICAgICB0b3RhbFNwZW5kOiBTVU0oXG4gICAgICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHJlc29sdmVkVXNlcktleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICAgIFJFVFVSTiBUT19OVU1CRVIob3JkZXIudG90YWxQcmljZSlcbiAgICAgIClcbiAgICB9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gIGApO1xuXG4gIHJldHVybiBzYXZlZE9yZGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbWVyT3JkZXJzQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDdXN0b21lck9yZGVyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgU09SVCBvcmRlci5wdXJjaGFzZWRBdCBERVNDXG4gICAgICBSRVRVUk4gb3JkZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5jb25zdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0aWNrZXQ6IFN1cHBvcnRUaWNrZXRUeXBlRGF0YSxcbiAgZGV0YWlsczogc3RyaW5nLFxuICBoZWFkaW5nOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB1c2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdGlja2V0LnVzZXJJZCl9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgaWYoIXVzZXI/LmVtYWlsKSByZXR1cm47XG4gIGNvbnN0IHN1cHBvcnROYW1lID0gY29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnROYW1lIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMuc3VwcG9ydE5hbWUnKSB8fCAnUmVha3RvciBTdXBwb3J0JztcbiAgY29uc3Qgc3VwcG9ydEVtYWlsID0gY29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnRFbWFpbCB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnRFbWFpbCcpIHx8ICdzdXBwb3J0QHJlYWt0b3IuaW8nO1xuICBjb25zdCB0aWNrZXROdW1iZXIgPSBTdHJpbmcodGlja2V0LnRpY2tldE51bWJlciB8fCB0aWNrZXQuc3VwcG9ydFRpY2tldElkIHx8IHRpY2tldC5fa2V5IHx8ICcnKTtcbiAgY29uc3Qgc3RhdHVzVXJsID0gYGh0dHBzOi8vY3JtLnJlYWt0b3IuaW8vc3VwcG9ydC9zdGF0dXM/dGlja2V0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpY2tldE51bWJlcil9YDtcbiAgY29uc3QgdGV4dCA9IGAke2hlYWRpbmd9XFxuXFxuVGlja2V0OiAke3RpY2tldE51bWJlcn1cXG5TdGF0dXM6ICR7dGlja2V0LnN0YXR1cyB8fCAnc3VibWl0dGVkJ31cXG5cXG4ke2RldGFpbHN9XFxuXFxuVHJhY2sgdGhpcyB0aWNrZXQ6ICR7c3RhdHVzVXJsfWA7XG4gIGF3YWl0IHNlc1NlbmQoe1xuICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IFtTdHJpbmcodXNlci5lbWFpbCldfSxcbiAgICBNZXNzYWdlOiB7XG4gICAgICBCb2R5OiB7SHRtbDoge0RhdGE6IGA8aDE+JHtlc2NhcGVIdG1sKGhlYWRpbmcpfTwvaDE+PHA+PHN0cm9uZz5UaWNrZXQ6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbCh0aWNrZXROdW1iZXIpfTwvcD48cD48c3Ryb25nPlN0YXR1czo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKFN0cmluZyh0aWNrZXQuc3RhdHVzIHx8ICdzdWJtaXR0ZWQnKSl9PC9wPjxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTppbmhlcml0XCI+JHtlc2NhcGVIdG1sKGRldGFpbHMpfTwvcHJlPjxwPjxhIGhyZWY9XCIke2VzY2FwZUh0bWwoc3RhdHVzVXJsKX1cIj5UcmFjayB0aGlzIHRpY2tldCBvbmxpbmU8L2E+PC9wPmB9LCBUZXh0OiB7RGF0YTogdGV4dH19LFxuICAgICAgU3ViamVjdDoge0RhdGE6IGBbJHt0aWNrZXROdW1iZXJ9XSAke2hlYWRpbmd9YH1cbiAgICB9LFxuICAgIFNvdXJjZTogYFwiJHtzdXBwb3J0TmFtZX1cIiA8JHtzdXBwb3J0RW1haWx9PmBcbiAgfSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0VHlwZURhdGE+XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQudXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LSR7dXNlcktleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgdGlja2V0TnVtYmVyID0gY2xlYW5TdHJpbmcoaW5wdXQudGlja2V0TnVtYmVyLCA4MCkgfHwgYFJLVC0ke25ldyBEYXRlKHRpbWVzdGFtcCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCkucmVwbGFjZSgvLS9nLCAnJyl9LSR7dGlja2V0S2V5LnNsaWNlKDAsIDgpLnRvVXBwZXJDYXNlKCl9YDtcbiAgY29uc3QgdGlja2V0ID0ge1xuICAgIF9rZXk6IHRpY2tldEtleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGFzc2lnbmVkVG9Vc2VySWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuYXNzaWduZWRUb1VzZXJJZCB8fCAnJykpLFxuICAgIGRlc2NyaXB0aW9uOiBjbGVhblN0cmluZyhpbnB1dC5kZXNjcmlwdGlvbiwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwcmlvcml0eTogaW5wdXQucHJpb3JpdHkgfHwgJ25vcm1hbCcsXG4gICAgcHJvZHVjdElkOiBjbGVhbkV4dGVybmFsSWQoaW5wdXQucHJvZHVjdElkLCAzMjApLFxuICAgIHNob3BpZnlPcmRlcklkOiBjbGVhblN0cmluZyhpbnB1dC5zaG9waWZ5T3JkZXJJZCwgMTYwKSxcbiAgICBzdGF0dXM6ICdzdWJtaXR0ZWQnLFxuICAgIHN1YmplY3Q6IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCksXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgdGlja2V0TnVtYmVyLFxuICAgIHR5cGU6IGlucHV0LnR5cGUgfHwgJ2dlbmVyYWxfc3VwcG9ydCcsXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke3RpY2tldH0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZFRpY2tldCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0LSR7dXNlcktleX0tJHt0aWNrZXRLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICB7cHJpb3JpdHk6IHRpY2tldC5wcmlvcml0eSwgc3RhdHVzOiB0aWNrZXQuc3RhdHVzLCB0eXBlOiB0aWNrZXQudHlwZX1cbiAgKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldEV2ZW50KGNvbnRleHQsIHtcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgdXNlcktleSkpLFxuICAgIGV2ZW50VHlwZTogJ3N1Ym1pdHRlZCcsXG4gICAgbWV0YWRhdGE6IHtkZXRhaWxzOiB0aWNrZXQuZGVzY3JpcHRpb259LFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IHRpY2tldC5zdGF0dXNcbiAgfSk7XG5cbiAgcmV0dXJuIHNhdmVkVGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Ym1pdFB1YmxpY1N1cHBvcnRUaWNrZXQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQdWJsaWNTdXBwb3J0VGlja2V0SW5wdXRcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhPiA9PiB7XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoaW5wdXQuZW1haWwsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBjbGVhblN0cmluZyhpbnB1dC5kZXNjcmlwdGlvbiwgNDAwMCk7XG4gIGNvbnN0IHN1YmplY3QgPSBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApO1xuICBpZighZW1haWxQYXR0ZXJuLnRlc3QoZW1haWwpKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3ZhbGlkX2VtYWlsJyk7XG4gIGlmKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3N1YmplY3QnKTtcbiAgaWYoIWRlc2NyaXB0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2Rlc2NyaXB0aW9uJyk7XG5cbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMsXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMsXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLFxuICAgIENPTExFQ1RJT05TLlVTRVJTXG4gIF0ubWFwKChuYW1lKSA9PiBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24oZGF0YWJhc2UsIG5hbWUpKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5ULFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFXG4gIF0ubWFwKChuYW1lKSA9PiBlbnN1cmVFZGdlQ29sbGVjdGlvbihkYXRhYmFzZSwgbmFtZSkpKTtcblxuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgZ2VuZXJhdGVkVXNlcktleSA9IGNyZWF0ZUhhc2goZW1haWwsIG51bGwpO1xuICBjb25zdCBvcHRlZEluID0gaW5wdXQubWFya2V0aW5nT3B0SW4gPT09IHRydWU7XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogZ2VuZXJhdGVkVXNlcktleSxcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lLCAxNjApLFxuICAgIG1haWxpbmdMaXN0OiBvcHRlZEluLFxuICAgIG1hcmtldGluZ09wdEluOiBvcHRlZEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgdXNlcklkOiBnZW5lcmF0ZWRVc2VyS2V5XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgLi4uKG9wdGVkSW4gPyB7bWFpbGluZ0xpc3Q6IHRydWUsIG1hcmtldGluZ09wdEluOiB0cnVlLCBtYXJrZXRpbmdPcHRJbkF0OiB0aW1lc3RhbXB9IDoge30pLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lLCAxNjApIHx8IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQubGFzdE5hbWUsIDE2MCkgfHwgdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXBcbiAgfTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBVUFNFUlQge2VtYWlsOiAke2VtYWlsfX1cbiAgICAgIElOU0VSVCAke3VzZXJJbnNlcnR9XG4gICAgICBVUERBVEUgJHt1c2VyVXBkYXRlfVxuICAgICAgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZTtcbiAgY29uc3QgdGlja2V0ID0gYXdhaXQgY3JlYXRlU3VwcG9ydFRpY2tldChjb250ZXh0LCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgcHJpb3JpdHk6IHN1cHBvcnRQcmlvcml0aWVzLmhhcyhTdHJpbmcoaW5wdXQucHJpb3JpdHkpKSA/IGlucHV0LnByaW9yaXR5IDogJ25vcm1hbCcsXG4gICAgc3ViamVjdCxcbiAgICB0eXBlOiBzdXBwb3J0VHlwZXMuaGFzKFN0cmluZyhpbnB1dC50eXBlKSkgPyBpbnB1dC50eXBlIDogJ2dlbmVyYWxfc3VwcG9ydCcsXG4gICAgdXNlcklkOiBTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgZ2VuZXJhdGVkVXNlcktleSlcbiAgfSk7XG4gIGF3YWl0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwoY29udGV4dCwgdGlja2V0LCBkZXNjcmlwdGlvbiwgJ1dlIHJlY2VpdmVkIHlvdXIgc3VwcG9ydCB0aWNrZXQnKTtcbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQdWJsaWNTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0aWNrZXROdW1iZXI6IHN0cmluZyxcbiAgZW1haWxBZGRyZXNzOiBzdHJpbmdcbik6IFByb21pc2U8UHVibGljU3VwcG9ydFRpY2tldEZlZWQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoZW1haWxBZGRyZXNzLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG51bWJlciA9IGNsZWFuU3RyaW5nKHRpY2tldE51bWJlciwgODApLnRvVXBwZXJDYXNlKCk7XG4gIGlmKCFlbWFpbFBhdHRlcm4udGVzdChlbWFpbCkgfHwgIW51bWJlcikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpLmV4aXN0cygpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBGT1IgdGlja2V0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgICAgRklMVEVSIFVQUEVSKHRpY2tldC50aWNrZXROdW1iZXIpID09ICR7bnVtYmVyfVxuICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgke0NPTExFQ1RJT05TLlVTRVJTfSwgdGlja2V0LnVzZXJJZClcbiAgICAgIEZJTFRFUiBMT1dFUih1c2VyLmVtYWlsKSA9PSAke2VtYWlsfVxuICAgICAgTEVUIG1lc3NhZ2VzID0gKFxuICAgICAgICBGT1IgbWVzc2FnZSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMpfVxuICAgICAgICAgIEZJTFRFUiBtZXNzYWdlLnN1cHBvcnRUaWNrZXRJZCA9PSB0aWNrZXQuX2tleSBBTkQgbWVzc2FnZS52aXNpYmlsaXR5ID09IFwiY3VzdG9tZXJcIlxuICAgICAgICAgIFNPUlQgbWVzc2FnZS5hZGRlZCBBU0NcbiAgICAgICAgICBSRVRVUk4gbWVzc2FnZVxuICAgICAgKVxuICAgICAgTEVUIGV2ZW50cyA9IChcbiAgICAgICAgRk9SIGV2ZW50IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMpfVxuICAgICAgICAgIEZJTFRFUiBldmVudC5zdXBwb3J0VGlja2V0SWQgPT0gdGlja2V0Ll9rZXlcbiAgICAgICAgICBTT1JUIGV2ZW50LmFkZGVkIEFTQ1xuICAgICAgICAgIFJFVFVSTiBldmVudFxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHt0aWNrZXQsIG1lc3NhZ2VzLCBldmVudHN9XG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgUHJvbWlzZTxQdWJsaWNTdXBwb3J0VGlja2V0RmVlZCB8IG51bGw+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmaWx0ZXJzOiB7cmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nOyByZWFkb25seSB1c2VySWQ/OiBzdHJpbmd9ID0ge31cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhW10+ID0+IHtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUykuZXhpc3RzKCkpIHJldHVybiBbXTtcbiAgICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0aWNrZXQgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgICAgICR7ZmlsdGVycy5zdGF0dXMgPyBhcWxgRklMVEVSIHRpY2tldC5zdGF0dXMgPT0gJHtmaWx0ZXJzLnN0YXR1c31gIDogYXFsYGB9XG4gICAgICAgICR7ZmlsdGVycy51c2VySWQgPyBhcWxgRklMVEVSIHRpY2tldC51c2VySWQgPT0gJHtkb2NLZXkoZmlsdGVycy51c2VySWQpfWAgOiBhcWxgYH1cbiAgICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgke0NPTExFQ1RJT05TLlVTRVJTfSwgdGlja2V0LnVzZXJJZClcbiAgICAgICAgU09SVCB0aWNrZXQuYWRkZWQgREVTQ1xuICAgICAgICBSRVRVUk4gTUVSR0UodGlja2V0LCB7dXNlcn0pXG4gICAgYDtcbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZyxcbiAgc3RhdHVzOiBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICByZXNvbHV0aW9uU3VtbWFyeSA9ICcnXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoc3VwcG9ydFRpY2tldElkKTtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHByZXZpb3VzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpXG4gICAgLnF1ZXJ5KGFxbGBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSl9KWApXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgU3VwcG9ydFRpY2tldFR5cGVEYXRhIHwgbnVsbDtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIC4uLihzdGF0dXMgPT09ICdjb21wbGV0ZWQnICYmIHtjb21wbGV0ZWRBdDogdGltZXN0YW1wLCByZXNvbHV0aW9uU3VtbWFyeTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnksIDQwMDApfSksXG4gICAgLi4uKHN0YXR1cyA9PT0gJ2RvbmUnICYmIHtkb25lQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdyZXNvbHZlZCcgJiYge3Jlc29sdmVkQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdjbG9zZWQnICYmIHtjbG9zZWRBdDogdGltZXN0YW1wfSksXG4gICAgbGFzdFVwZGF0ZURldGFpbHM6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN0YXR1c1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUERBVEUgJHt0aWNrZXRLZXl9IFdJVEggJHt1cGRhdGV9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgdGlja2V0ID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFN1cHBvcnRUaWNrZXRUeXBlRGF0YTtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiBlZGdlIElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQpfVxuICAgICAgRklMVEVSIGVkZ2UuX3RvID09ICR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpfVxuICAgICAgVVBEQVRFIGVkZ2UgV0lUSCAke3tcbiAgICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgICAgcmVzb2x2ZWRBdDogc3RhdHVzID09PSAncmVzb2x2ZWQnID8gdGltZXN0YW1wIDogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXNcbiAgICAgIH19IElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQpfVxuICBgKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldEV2ZW50KGNvbnRleHQsIHtcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBldmVudFR5cGU6ICdzdGF0dXNfY2hhbmdlZCcsXG4gICAgZnJvbVZhbHVlOiBwcmV2aW91cz8uc3RhdHVzLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IHN0YXR1c1xuICB9KTtcblxuICBpZihzdGF0dXMgPT09ICdyZXNvbHZlZCcpIHtcbiAgICBhd2FpdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbihjb250ZXh0LCB7XG4gICAgICBib2R5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSB8fCAnWW91ciBzdXBwb3J0IHRpY2tldCBoYXMgYmVlbiByZXNvbHZlZC4nLCA0MDAwKSxcbiAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG4gICAgICBzdWJqZWN0OiBgUmVzb2x2ZWQ6ICR7dGlja2V0LnN1YmplY3QgfHwgJ1N1cHBvcnQgdGlja2V0J31gLFxuICAgICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgICB0eXBlOiAnc3VwcG9ydF90aWNrZXRfcmVzb2x2ZWQnLFxuICAgICAgdXNlcklkOiB0aWNrZXQudXNlcklkXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVN1cHBvcnRUaWNrZXRQcm9ncmVzcyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgZGV0YWlsczogc3RyaW5nXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGlmKCFzdXBwb3J0U3RhdHVzZXMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcignaW52YWxpZF9zdXBwb3J0X3RpY2tldF9zdGF0dXMnKTtcbiAgY29uc3QgbWFya2Rvd24gPSBjbGVhblN0cmluZyhkZXRhaWxzLCA0MDAwKTtcbiAgaWYoIW1hcmtkb3duKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3VwZGF0ZV9kZXRhaWxzJyk7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IHVwZGF0ZVN1cHBvcnRUaWNrZXRTdGF0dXMoY29udGV4dCwgc3VwcG9ydFRpY2tldElkLCBzdGF0dXMsIG1hcmtkb3duKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldE1lc3NhZ2UoY29udGV4dCwge1xuICAgIGF1dGhvclVzZXJJZDogU3RyaW5nKGNvbnRleHQuc2Vzc2lvbj8udXNlcklkIHx8ICcnKSxcbiAgICBib2R5OiBtYXJrZG93bixcbiAgICBzdXBwb3J0VGlja2V0SWQsXG4gICAgdmlzaWJpbGl0eTogJ2N1c3RvbWVyJ1xuICB9KTtcbiAgYXdhaXQgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24oY29udGV4dCwge1xuICAgIGJvZHk6IG1hcmtkb3duLFxuICAgIHN0YXR1czogJ3NlbnQnLFxuICAgIHN1YmplY3Q6IGBUaWNrZXQgJHt0aWNrZXQudGlja2V0TnVtYmVyIHx8IHN1cHBvcnRUaWNrZXRJZH06ICR7c3RhdHVzLnJlcGxhY2UoL18vZywgJyAnKX1gLFxuICAgIHN1cHBvcnRUaWNrZXRJZCxcbiAgICB0eXBlOiAnc3VwcG9ydF90aWNrZXRfcHJvZ3Jlc3MnLFxuICAgIHVzZXJJZDogdGlja2V0LnVzZXJJZFxuICB9KTtcbiAgYXdhaXQgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbChjb250ZXh0LCB0aWNrZXQsIG1hcmtkb3duLCBgU3VwcG9ydCB0aWNrZXQgJHtzdGF0dXMucmVwbGFjZSgvXy9nLCAnICcpfWApO1xuICByZXR1cm4gdGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGU+XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKTtcbiAgY29uc3QgbWVzc2FnZUtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldE1lc3NhZ2VJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC1tZXNzYWdlLSR7dGlja2V0S2V5fS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIF9rZXk6IG1lc3NhZ2VLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhdXRob3JVc2VySWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuYXV0aG9yVXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgIGJvZHk6IGNsZWFuU3RyaW5nKGlucHV0LmJvZHksIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgc3VwcG9ydFRpY2tldE1lc3NhZ2VJZDogbWVzc2FnZUtleSxcbiAgICB2aXNpYmlsaXR5OiBpbnB1dC52aXNpYmlsaXR5IHx8ICdjdXN0b21lcidcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7bWVzc2FnZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkTWVzc2FnZSA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFLFxuICAgIGNyZWF0ZUhhc2goYGhhc1N1cHBvcnRUaWNrZXRNZXNzYWdlLSR7dGlja2V0S2V5fS0ke21lc3NhZ2VLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTLCBtZXNzYWdlS2V5KSxcbiAgICB7YXV0aG9yVXNlcklkOiBtZXNzYWdlLmF1dGhvclVzZXJJZCwgdmlzaWJpbGl0eTogbWVzc2FnZS52aXNpYmlsaXR5fVxuICApO1xuXG4gIHJldHVybiBzYXZlZE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VwcG9ydFRpY2tldE1lc3NhZ2VzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgbWVzc2FnZSBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCBzdXBwb3J0VGlja2V0SWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0UpfVxuICAgICAgU09SVCBtZXNzYWdlLmFkZGVkIEFTQ1xuICAgICAgUkVUVVJOIG1lc3NhZ2VcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3VwcG9ydFRpY2tldEV2ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0RXZlbnRUeXBlPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0RXZlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpO1xuICBjb25zdCBldmVudEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldEV2ZW50SWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtZXZlbnQtJHt0aWNrZXRLZXl9LSR7dGltZXN0YW1wfS0ke2lucHV0LmV2ZW50VHlwZX1gKSkpO1xuICBjb25zdCBldmVudCA9IHtcbiAgICBfa2V5OiBldmVudEtleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGFjdG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmFjdG9yVXNlcklkIHx8ICcnKSksXG4gICAgZXZlbnRUeXBlOiBjbGVhblN0cmluZyhpbnB1dC5ldmVudFR5cGUsIDE2MCksXG4gICAgZnJvbVZhbHVlOiBjbGVhblN0cmluZyhpbnB1dC5mcm9tVmFsdWUsIDMyMCksXG4gICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhIHx8IHt9LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc3VwcG9ydFRpY2tldEV2ZW50SWQ6IGV2ZW50S2V5LFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IGNsZWFuU3RyaW5nKGlucHV0LnRvVmFsdWUsIDMyMClcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7ZXZlbnR9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRFdmVudCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0RXZlbnQtJHt0aWNrZXRLZXl9LSR7ZXZlbnRLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX0VWRU5UUywgZXZlbnRLZXkpLFxuICAgIHthY3RvclVzZXJJZDogZXZlbnQuYWN0b3JVc2VySWQsIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlfVxuICApO1xuXG4gIHJldHVybiBzYXZlZEV2ZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRFdmVudHMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRFdmVudFR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgZXZlbnQgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgc3VwcG9ydFRpY2tldElkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCl9XG4gICAgICBTT1JUIGV2ZW50LmFkZGVkIEFTQ1xuICAgICAgUkVUVVJOIGV2ZW50XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxDdXN0b21lck5vdGlmaWNhdGlvblR5cGU+XG4pOiBQcm9taXNlPEN1c3RvbWVyTm90aWZpY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQudXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuY3VzdG9tZXJOb3RpZmljYXRpb25JZCB8fCBjcmVhdGVIYXNoKGBjdXN0b21lci1ub3RpZmljYXRpb24tJHt1c2VyS2V5fS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBub3RpZmljYXRpb24gPSB7XG4gICAgX2tleTogbm90aWZpY2F0aW9uS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYm9keTogY2xlYW5TdHJpbmcoaW5wdXQuYm9keSwgNDAwMCksXG4gICAgY3VzdG9tZXJOb3RpZmljYXRpb25JZDogbm90aWZpY2F0aW9uS2V5LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2VudEF0OiBpbnB1dC5zZW50QXQsXG4gICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMgfHwgJ3F1ZXVlZCcsXG4gICAgc3ViamVjdDogY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSksXG4gICAgdHlwZTogY2xlYW5TdHJpbmcoaW5wdXQudHlwZSwgMTYwKSxcbiAgICB1c2VySWQ6IHVzZXJLZXlcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7bm90aWZpY2F0aW9ufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE5vdGlmaWNhdGlvbiA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04sXG4gICAgY3JlYXRlSGFzaChgaGFzQ3VzdG9tZXJOb3RpZmljYXRpb24tJHt1c2VyS2V5fS0ke25vdGlmaWNhdGlvbktleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUywgbm90aWZpY2F0aW9uS2V5KSxcbiAgICB7XG4gICAgICBzdGF0dXM6IG5vdGlmaWNhdGlvbi5zdGF0dXMsXG4gICAgICBzdXBwb3J0VGlja2V0SWQ6IG5vdGlmaWNhdGlvbi5zdXBwb3J0VGlja2V0SWQsXG4gICAgICB0eXBlOiBub3RpZmljYXRpb24udHlwZVxuICAgIH1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWROb3RpZmljYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tZXJOb3RpZmljYXRpb25zQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDdXN0b21lck5vdGlmaWNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igbm90aWZpY2F0aW9uIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcklkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04pfVxuICAgICAgU09SVCBub3RpZmljYXRpb24uYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOIG5vdGlmaWNhdGlvblxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJwYXJzZVBob25lIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkNvbmZpZyIsInVzZURiIiwiaXNBZG1pblVzZXIiLCJzZXNTZW5kIiwibm93IiwiRGF0ZSIsImNvbGxlY3Rpb24iLCJuYW1lIiwiZG9jS2V5IiwidmFsdWUiLCJTdHJpbmciLCJkb2NJZCIsImNvbGxlY3Rpb25OYW1lIiwia2V5IiwiZXh0ZXJuYWxLZXkiLCJwcmVmaXgiLCJpZCIsImNsZWFuU3RyaW5nIiwibGVuZ3RoIiwiY2xlYW5FeHRlcm5hbElkIiwidHJpbSIsInNsaWNlIiwiZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uIiwiZGF0YWJhc2UiLCJ0YXJnZXQiLCJleGlzdHMiLCJjcmVhdGVDb2xsZWN0aW9uIiwiZXJyb3IiLCJlbnN1cmVFZGdlQ29sbGVjdGlvbiIsImNyZWF0ZUVkZ2VDb2xsZWN0aW9uIiwicmVxdWlyZUNybUFkbWluIiwiY29udGV4dCIsInNlc3Npb24iLCJFcnJvciIsInJlcXVpcmVDcm1BZG1pbmlzdHJhdG9yIiwiYWxsb3dlZENvbnRhY3RGaWVsZHMiLCJTZXQiLCJzdXBwb3J0UHJpb3JpdGllcyIsInN1cHBvcnRTdGF0dXNlcyIsInN1cHBvcnRUeXBlcyIsImVtYWlsUGF0dGVybiIsImVzY2FwZUh0bWwiLCJyZXBsYWNlIiwic2FuaXRpemVIdG1sIiwic2FuaXRpemVDc3MiLCJodG1sVG9UZXh0IiwiY2h1bmsiLCJpdGVtcyIsInNpemUiLCJncm91cHMiLCJpbmRleCIsInB1c2giLCJzdWJtaXRDcm1Gb3JtIiwiaW5wdXQiLCJtYXJrZXRpbmdPcHRJbiIsImVtYWlsIiwidG9Mb3dlckNhc2UiLCJyYXdQaG9uZSIsInBob25lIiwiZGF0YWJhc2VOYW1lIiwiQ1JNX0ZPUk1fU1VCTUlTU0lPTlMiLCJ0aW1lc3RhbXAiLCJzb3VyY2UiLCJmb3JtSWQiLCJ2YWx1ZXMiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmVyYXRlZFVzZXJLZXkiLCJjb25zZW50IiwibWFya2V0aW5nT3B0SW5BdCIsIm1hcmtldGluZ09wdE91dEF0IiwidXNlckluc2VydCIsIl9rZXkiLCJhY3RpdmUiLCJhZGRlZCIsIm1haWxpbmdMaXN0IiwibWFya2V0aW5nQ29uc2VudFNvdXJjZSIsIm1vZGlmaWVkIiwidHlwZSIsInVzZXJBY2Nlc3MiLCJ1c2VySWQiLCJ2ZXJpZmllZEVtYWlsIiwidmVyaWZpZWRQaG9uZSIsInVzZXJVcGRhdGUiLCJ1c2VyIiwicXVlcnkiLCJVU0VSUyIsInRoZW4iLCJjdXJzb3IiLCJuZXh0Iiwic3VibWlzc2lvbklkIiwic3VibWlzc2lvbiIsInNhdmVkIiwiZ2V0Q3JtRm9ybVN1Ym1pc3Npb25zIiwiYWxsIiwiZ2V0Q3JtQ29udGFjdHMiLCJmaWx0ZXIiLCJzZWFyY2giLCJmaWVsZCIsImhhcyIsIm9wdGVkSW5Pbmx5Iiwib3BlcmF0b3IiLCJpbmNsdWRlcyIsInNlbmRDcm1DYW1wYWlnbiIsInN1YmplY3QiLCJib2R5SHRtbCIsImh0bWwiLCJjc3MiLCJjYW5kaWRhdGVzIiwic2VsZWN0ZWRJZHMiLCJ1c2VySWRzIiwibWFwIiwicmVjaXBpZW50cyIsIkJvb2xlYW4iLCJjYW1wYWlnbklkIiwiY2FtcGFpZ24iLCJmYWlsZWRDb3VudCIsInJlY2lwaWVudENvdW50Iiwic2VudENvdW50Iiwic3RhdHVzIiwiQ1JNX0NBTVBBSUdOUyIsInJlY2lwaWVudHNCYXRjaCIsIkRlc3RpbmF0aW9uIiwiQmNjQWRkcmVzc2VzIiwicmVjaXBpZW50IiwiTWVzc2FnZSIsIkJvZHkiLCJIdG1sIiwiRGF0YSIsIlRleHQiLCJTdWJqZWN0IiwiU291cmNlIiwiY29uZmlnIiwiZGV0YWlscyIsInN1cHBvcnROYW1lIiwic3VwcG9ydEVtYWlsIiwiX2Vycm9yIiwicmVzdWx0Iiwic2VudEF0Iiwic2F2ZUVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImVkZ2VLZXkiLCJmcm9tIiwidG8iLCJkYXRhIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY3JlYXRlTWFpbGluZ0xpc3QiLCJtYWlsaW5nTGlzdElkIiwiY3JlYXRlZEJ5VXNlcklkIiwiZGVzY3JpcHRpb24iLCJNQUlMSU5HX0xJU1RTIiwiZ2V0TWFpbGluZ0xpc3RzIiwiYWRkVXNlclRvTWFpbGluZ0xpc3QiLCJ1c2VyS2V5IiwibGlzdEtleSIsIkhBU19NQUlMSU5HX0xJU1QiLCJhZGRlZEJ5VXNlcklkIiwicmVtb3ZlVXNlckZyb21NYWlsaW5nTGlzdCIsInVwZGF0ZSIsInJlbW92ZWRBdCIsImdldE1haWxpbmdMaXN0VXNlcnMiLCJsaXN0SWQiLCJnZXRVc2Vyc0J5UHVyY2hhc2VkUHJvZHVjdCIsInByb2R1Y3RJZCIsInByb2R1Y3RLZXkiLCJTSE9QSUZZX1BST0RVQ1RTIiwiSEFTX1BVUkNIQVNFRF9QUk9EVUNUIiwiSEFTX0NVU1RPTUVSX09SREVSIiwiZ2V0RWxpZ2libGVNYWlsaW5nVXNlcnMiLCJvcHRpb25zIiwiZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cyIsIkhBU19TVVBQT1JUX1RJQ0tFVCIsImluZ2VzdFNob3BpZnlDdXN0b21lck9yZGVyIiwic2hvcGlmeUN1c3RvbWVySWQiLCJzaG9waWZ5T3JkZXJJZCIsImN1c3RvbWVyIiwicHJvZHVjdElkcyIsIkFycmF5IiwicHJvZHVjdHMiLCJwcm9kdWN0IiwidW5kZWZpbmVkIiwibGFzdFB1cmNoYXNlZEF0IiwicHVyY2hhc2VkQXQiLCJ1c2VyUXVlcnkiLCJyZXNvbHZlZFVzZXJLZXkiLCJvcmRlcktleSIsIm9yZGVyIiwiY3VycmVuY3kiLCJ0b1VwcGVyQ2FzZSIsImN1c3RvbWVyT3JkZXJJZCIsInRvdGFsUHJpY2UiLCJOdW1iZXIiLCJvcmRlclF1ZXJ5IiwiQ1VTVE9NRVJfT1JERVJTIiwic2F2ZWRPcmRlciIsIlByb21pc2UiLCJmaW5kIiwiaXRlbSIsInByb2R1Y3REb2MiLCJ0aXRsZSIsInZhcmlhbnRJZCIsInByb2R1Y3RRdWVyeSIsImdldEN1c3RvbWVyT3JkZXJzQnlVc2VyIiwic2VuZFN1cHBvcnRUaWNrZXRFbWFpbCIsInRpY2tldCIsImhlYWRpbmciLCJnZXQiLCJ0aWNrZXROdW1iZXIiLCJzdXBwb3J0VGlja2V0SWQiLCJzdGF0dXNVcmwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0ZXh0IiwiVG9BZGRyZXNzZXMiLCJjYXRjaCIsImNyZWF0ZVN1cHBvcnRUaWNrZXQiLCJ0aWNrZXRLZXkiLCJ0b0lTT1N0cmluZyIsImFzc2lnbmVkVG9Vc2VySWQiLCJwcmlvcml0eSIsIlNVUFBPUlRfVElDS0VUUyIsInNhdmVkVGlja2V0IiwiYWRkU3VwcG9ydFRpY2tldEV2ZW50IiwiYWN0b3JVc2VySWQiLCJldmVudFR5cGUiLCJtZXRhZGF0YSIsInRvVmFsdWUiLCJzdWJtaXRQdWJsaWNTdXBwb3J0VGlja2V0IiwidGVzdCIsIlNVUFBPUlRfVElDS0VUX0VWRU5UUyIsIlNVUFBPUlRfVElDS0VUX01FU1NBR0VTIiwiSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5UIiwiSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0UiLCJvcHRlZEluIiwiZ2V0UHVibGljU3VwcG9ydFRpY2tldCIsImVtYWlsQWRkcmVzcyIsIm51bWJlciIsImdldFN1cHBvcnRUaWNrZXRzIiwiZmlsdGVycyIsInVwZGF0ZVN1cHBvcnRUaWNrZXRTdGF0dXMiLCJyZXNvbHV0aW9uU3VtbWFyeSIsInByZXZpb3VzIiwiY29tcGxldGVkQXQiLCJkb25lQXQiLCJyZXNvbHZlZEF0IiwiY2xvc2VkQXQiLCJsYXN0VXBkYXRlRGV0YWlscyIsImZyb21WYWx1ZSIsImNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uIiwiYm9keSIsInVwZGF0ZVN1cHBvcnRUaWNrZXRQcm9ncmVzcyIsIm1hcmtkb3duIiwiYWRkU3VwcG9ydFRpY2tldE1lc3NhZ2UiLCJhdXRob3JVc2VySWQiLCJ2aXNpYmlsaXR5IiwibWVzc2FnZUtleSIsInN1cHBvcnRUaWNrZXRNZXNzYWdlSWQiLCJtZXNzYWdlIiwic2F2ZWRNZXNzYWdlIiwiZ2V0U3VwcG9ydFRpY2tldE1lc3NhZ2VzIiwiZXZlbnRLZXkiLCJzdXBwb3J0VGlja2V0RXZlbnRJZCIsImV2ZW50Iiwic2F2ZWRFdmVudCIsImdldFN1cHBvcnRUaWNrZXRFdmVudHMiLCJub3RpZmljYXRpb25LZXkiLCJjdXN0b21lck5vdGlmaWNhdGlvbklkIiwibm90aWZpY2F0aW9uIiwiQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUyIsInNhdmVkTm90aWZpY2F0aW9uIiwiSEFTX0NVU1RPTUVSX05PVElGSUNBVElPTiIsImdldEN1c3RvbWVyTm90aWZpY2F0aW9uc0J5VXNlciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUMxRixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxXQUFXLFFBQU8sMkJBQTJCO0FBQ3JELFNBQVFDLE9BQU8sUUFBTyxhQUFhO0FBdUJuQyxNQUFNQyxNQUFNLElBQWNDLEtBQUtELEdBQUc7QUFDbEMsTUFBTUUsYUFBYSxDQUFDQyxPQUFpQlYsUUFBUVU7QUFDN0MsTUFBTUMsU0FBUyxDQUFDQyxRQUFRLEVBQUUsR0FBYWhCLFFBQVFpQixPQUFPRDtBQUN0RCxNQUFNRSxRQUFRLENBQUNDLGdCQUF3QkMsTUFBTSxFQUFFLEdBQWEsR0FBR0QsZUFBZSxDQUFDLEVBQUVKLE9BQU9LLE1BQU07QUFDOUYsTUFBTUMsY0FBYyxDQUFDQyxRQUFnQkMsS0FBSyxFQUFFLEdBQWF4QixXQUFXLEdBQUd1QixPQUFPLENBQUMsRUFBRUwsT0FBT00sS0FBSyxFQUFFO0FBQy9GLE1BQU1DLGNBQWMsQ0FBQ1IsT0FBZ0JTLFNBQVMsR0FBRyxHQUFhdkIsWUFBWWUsT0FBT0QsU0FBUyxLQUFLUztBQUMvRixNQUFNQyxrQkFBa0IsQ0FBQ1YsT0FBZ0JTLFNBQVMsR0FBRyxHQUFhUixPQUFPRCxTQUFTLElBQUlXLElBQUksR0FBR0MsS0FBSyxDQUFDLEdBQUdIO0FBQ3RHLE1BQU1JLDJCQUEyQixPQUFPQyxV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
928
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7c2VzU2VuZH0gZnJvbSAnLi9lbWFpbC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ3VzdG9tZXJOb3RpZmljYXRpb25UeXBlLFxuICBDdXN0b21lck9yZGVyVHlwZSxcbiAgQ3JtQ2FtcGFpZ25JbnB1dCxcbiAgQ3JtQ2FtcGFpZ25UeXBlLFxuICBDcm1Db250YWN0RmlsdGVyLFxuICBDcm1Gb3JtU3VibWlzc2lvbklucHV0LFxuICBDcm1Gb3JtU3VibWlzc2lvblR5cGUsXG4gIE1haWxpbmdMaXN0VHlwZSxcbiAgUHVibGljU3VwcG9ydFRpY2tldEZlZWQsXG4gIFB1YmxpY1N1cHBvcnRUaWNrZXRJbnB1dCxcbiAgU2hvcGlmeUN1c3RvbWVyT3JkZXJJbnB1dCxcbiAgU3VwcG9ydFRpY2tldEV2ZW50VHlwZSxcbiAgU3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlLFxuICBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICBTdXBwb3J0VGlja2V0VHlwZURhdGFcbn0gZnJvbSAnLi4vdHlwZXMvY3JtLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBub3cgPSAoKTogbnVtYmVyID0+IERhdGUubm93KCk7XG5jb25zdCBjb2xsZWN0aW9uID0gKG5hbWU6IHN0cmluZykgPT4gbGl0ZXJhbChuYW1lKTtcbmNvbnN0IGRvY0tleSA9ICh2YWx1ZSA9ICcnKTogc3RyaW5nID0+IHBhcnNlSWQoU3RyaW5nKHZhbHVlKSk7XG5jb25zdCBkb2NJZCA9IChjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBrZXkgPSAnJyk6IHN0cmluZyA9PiBgJHtjb2xsZWN0aW9uTmFtZX0vJHtkb2NLZXkoa2V5KX1gO1xuY29uc3QgZXh0ZXJuYWxLZXkgPSAocHJlZml4OiBzdHJpbmcsIGlkID0gJycpOiBzdHJpbmcgPT4gY3JlYXRlSGFzaChgJHtwcmVmaXh9LSR7U3RyaW5nKGlkKX1gLCBudWxsKTtcbmNvbnN0IGNsZWFuU3RyaW5nID0gKHZhbHVlOiB1bmtub3duLCBsZW5ndGggPSA2NDApOiBzdHJpbmcgPT4gcGFyc2VTdHJpbmcoU3RyaW5nKHZhbHVlIHx8ICcnKSwgbGVuZ3RoKTtcbmNvbnN0IGNsZWFuRXh0ZXJuYWxJZCA9ICh2YWx1ZTogdW5rbm93biwgbGVuZ3RoID0gMzIwKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnNsaWNlKDAsIGxlbmd0aCk7XG5jb25zdCBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZURiPiwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGRhdGFiYXNlLmNvbGxlY3Rpb24obmFtZSk7XG4gIGlmKGF3YWl0IHRhcmdldC5leGlzdHMoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGRhdGFiYXNlLmNyZWF0ZUNvbGxlY3Rpb24obmFtZSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IGVuc3VyZUVkZ2VDb2xsZWN0aW9uID0gYXN5bmMgKGRhdGFiYXNlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VEYj4sIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0YXJnZXQgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKG5hbWUpO1xuICBpZihhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkYXRhYmFzZS5jcmVhdGVFZGdlQ29sbGVjdGlvbihuYW1lKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKCFhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCByZXF1aXJlQ3JtQWRtaW4gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IHZvaWQgPT4ge1xuICBpZighaXNBZG1pblVzZXIoY29udGV4dC5zZXNzaW9uIGFzIGFueSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkbWluaXN0cmF0b3JfYWNjZXNzX3JlcXVpcmVkJyk7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcmVxdWlyZUNybUFkbWluaXN0cmF0b3IgPSByZXF1aXJlQ3JtQWRtaW47XG5cbmNvbnN0IGFsbG93ZWRDb250YWN0RmllbGRzID0gbmV3IFNldChbJ2VtYWlsJywgJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICdwaG9uZScsICdtYXJrZXRpbmdDb25zZW50U291cmNlJywgJ2NybVNvdXJjZSddKTtcbmNvbnN0IHN1cHBvcnRQcmlvcml0aWVzID0gbmV3IFNldChbJ2xvdycsICdub3JtYWwnLCAnaGlnaCcsICd1cmdlbnQnXSk7XG5jb25zdCBzdXBwb3J0U3RhdHVzZXMgPSBuZXcgU2V0KFsnc3VibWl0dGVkJywgJ2luX3Byb2dyZXNzJywgJ2RvbmUnLCAnY29tcGxldGVkJ10pO1xuY29uc3Qgc3VwcG9ydFR5cGVzID0gbmV3IFNldChbJ2RlbGl2ZXJ5X2lzc3VlJywgJ3JlZnVuZF9yZXF1ZXN0JywgJ2J1Z19yZXBvcnQnLCAnYWNjb3VudF9pc3N1ZScsICdnZW5lcmFsX3N1cHBvcnQnXSk7XG5jb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskL3U7XG5jb25zdCBlc2NhcGVIdG1sID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbmNvbnN0IHNhbml0aXplSHRtbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88KHNjcmlwdHxpZnJhbWV8b2JqZWN0fGVtYmVkKVxcYltePl0qPltcXHNcXFNdKj88XFwvXFwxPi9naSwgJycpXG4gIC5yZXBsYWNlKC9cXHNvblxcdytcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHM+XSspL2dpLCAnJyk7XG5jb25zdCBzYW5pdGl6ZUNzcyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88XFwvP3N0eWxlXFxiW14+XSo+L2dpLCAnJylcbiAgLnJlcGxhY2UoL0BpbXBvcnRcXHMrW147XSs7Py9naSwgJycpXG4gIC5yZXBsYWNlKC91cmxcXHMqXFwoXFxzKihbJ1wiXT8pamF2YXNjcmlwdDpbXildK1xcKS9naSwgJycpO1xuY29uc3QgaHRtbFRvVGV4dCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHZhbHVlLnJlcGxhY2UoLzxbXj5dKz4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuY29uc3QgY2h1bmsgPSA8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2l6ZTogbnVtYmVyKTogVFtdW10gPT4ge1xuICBjb25zdCBncm91cHM6IFRbXVtdID0gW107XG4gIGZvcihsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXggKz0gc2l6ZSkgZ3JvdXBzLnB1c2goaXRlbXMuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2l6ZSkpO1xuICByZXR1cm4gZ3JvdXBzO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Ym1pdENybUZvcm0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcm1Gb3JtU3VibWlzc2lvbklucHV0XG4pOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZT4gPT4ge1xuICBpZih0eXBlb2YgaW5wdXQ/Lm1hcmtldGluZ09wdEluICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfbWFya2V0aW5nT3B0SW4nKTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhpbnB1dC5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByYXdQaG9uZSA9IGNsZWFuU3RyaW5nKGlucHV0LnBob25lLCA4MCk7XG4gIGNvbnN0IHBob25lID0gcmF3UGhvbmUgPyAocGFyc2VQaG9uZShyYXdQaG9uZSkgfHwgcmF3UGhvbmUpIDogJyc7XG4gIGlmKCFlbWFpbCAmJiAhcGhvbmUpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfZW1haWxfb3JfcGhvbmUnKTtcblxuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgYXdhaXQgZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBzb3VyY2UgPSBjbGVhblN0cmluZyhpbnB1dC5zb3VyY2UgfHwgaW5wdXQuZm9ybUlkIHx8ICdmb3JtJywgMTYwKTtcbiAgY29uc3QgdmFsdWVzID0gaW5wdXQudmFsdWVzIHx8IHt9O1xuICBjb25zdCBmaXJzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUgfHwgdmFsdWVzLmZpcnN0TmFtZSwgMTYwKTtcbiAgY29uc3QgbGFzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSB8fCB2YWx1ZXMubGFzdE5hbWUsIDE2MCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsIHx8IHBob25lLCBudWxsKTtcbiAgY29uc3QgY29uc2VudCA9IGlucHV0Lm1hcmtldGluZ09wdEluXG4gICAgPyB7bWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wLCBtYXJrZXRpbmdPcHRPdXRBdDogbnVsbH1cbiAgICA6IHttYXJrZXRpbmdPcHRPdXRBdDogdGltZXN0YW1wfTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiBnZW5lcmF0ZWRVc2VyS2V5LFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgbWFpbGluZ0xpc3Q6IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6IHNvdXJjZSxcbiAgICBtYXJrZXRpbmdPcHRJbjogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwaG9uZSxcbiAgICB0eXBlOiAnY3JtQ29udGFjdCcsXG4gICAgdXNlckFjY2VzczogMCxcbiAgICB1c2VySWQ6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgdmVyaWZpZWRFbWFpbDogZmFsc2UsXG4gICAgdmVyaWZpZWRQaG9uZTogZmFsc2UsXG4gICAgLi4uY29uc2VudFxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihlbWFpbCA/IHtlbWFpbH0gOiB7fSksXG4gICAgLi4uKGZpcnN0TmFtZSA/IHtmaXJzdE5hbWV9IDoge30pLFxuICAgIC4uLihsYXN0TmFtZSA/IHtsYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBob25lID8ge3Bob25lfSA6IHt9KSxcbiAgICBtYWlsaW5nTGlzdDogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogc291cmNlLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIC4uLmNvbnNlbnRcbiAgfTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBMRVQgZXhpc3RpbmcgPSBGSVJTVChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiAoJHtlbWFpbH0gIT0gXCJcIiAmJiBMT1dFUih1c2VyLmVtYWlsIHx8IFwiXCIpID09ICR7ZW1haWx9KVxuICAgICAgICAgIHx8ICgke3Bob25lfSAhPSBcIlwiICYmIHVzZXIucGhvbmUgPT0gJHtwaG9uZX0pXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTEVUIHVzZXJLZXkgPSBleGlzdGluZyA/IGV4aXN0aW5nLl9rZXkgOiAke2dlbmVyYXRlZFVzZXJLZXl9XG4gICAgVVBTRVJUIHtfa2V5OiB1c2VyS2V5fVxuICAgIElOU0VSVCBNRVJHRSgke3VzZXJJbnNlcnR9LCB7X2tleTogdXNlcktleSwgdXNlcklkOiB1c2VyS2V5fSlcbiAgICBVUERBVEUgJHt1c2VyVXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGNvbnN0IHVzZXJJZCA9IGRvY0tleShTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgZ2VuZXJhdGVkVXNlcktleSkpO1xuXG4gIGNvbnN0IHN1Ym1pc3Npb25JZCA9IGNyZWF0ZUhhc2goYGNybS1zdWJtaXNzaW9uLSR7dGltZXN0YW1wfS0ke2VtYWlsfS0ke3Bob25lfWAsIG51bGwpO1xuICBjb25zdCBzdWJtaXNzaW9uID0ge1xuICAgIF9rZXk6IHN1Ym1pc3Npb25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZvcm1JZDogY2xlYW5TdHJpbmcoaW5wdXQuZm9ybUlkLCAxNjApLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHBob25lLFxuICAgIHNvdXJjZSxcbiAgICBzdWJtaXNzaW9uSWQsXG4gICAgdXNlcklkLFxuICAgIHZhbHVlc1xuICB9O1xuICBjb25zdCBzYXZlZCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBJTlNFUlQgJHtzdWJtaXNzaW9ufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICByZXR1cm4gc2F2ZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtRm9ybVN1Ym1pc3Npb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZVtdPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKS5leGlzdHMoKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgICBGT1Igc3VibWlzc2lvbiBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgICAgICBTT1JUIHN1Ym1pc3Npb24uYWRkZWQgREVTQ1xuICAgICAgICBMSU1JVCA1MDBcbiAgICAgICAgUkVUVVJOIHN1Ym1pc3Npb25cbiAgICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtQ29udGFjdHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsdGVyOiBDcm1Db250YWN0RmlsdGVyID0ge30pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2ggPSBjbGVhblN0cmluZyhmaWx0ZXIuc2VhcmNoLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGZpZWxkID0gYWxsb3dlZENvbnRhY3RGaWVsZHMuaGFzKGZpbHRlci5maWVsZCB8fCAnJykgPyBTdHJpbmcoZmlsdGVyLmZpZWxkKSA6ICcnO1xuICBjb25zdCB2YWx1ZSA9IGNsZWFuU3RyaW5nKGZpbHRlci52YWx1ZSwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBvcHRlZEluT25seSA9IGZpbHRlci5vcHRlZEluT25seSAhPT0gZmFsc2U7XG4gIGNvbnN0IG9wZXJhdG9yID0gWydjb250YWlucycsICdlcXVhbHMnLCAnZXhpc3RzJ10uaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yIHx8ICcnKSA/IGZpbHRlci5vcGVyYXRvciA6ICdjb250YWlucyc7XG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBGSUxURVIgJHshb3B0ZWRJbk9ubHl9IHx8IHVzZXIubWFya2V0aW5nT3B0SW4gPT0gdHJ1ZVxuICAgICAgRklMVEVSICR7IXNlYXJjaH0gfHwgQ09OVEFJTlMoTE9XRVIoQ09OQ0FUX1NFUEFSQVRPUihcIiBcIiwgdXNlci5maXJzdE5hbWUsIHVzZXIubGFzdE5hbWUsIHVzZXIuZW1haWwsIHVzZXIucGhvbmUpKSwgJHtzZWFyY2h9KVxuICAgICAgRklMVEVSICR7IWZpZWxkfSB8fCAoJHtvcGVyYXRvciA9PT0gJ2V4aXN0cyd9XG4gICAgICAgID8gSEFTKHVzZXIsICR7ZmllbGR9KVxuICAgICAgICA6ICgke29wZXJhdG9yID09PSAnZXF1YWxzJ30gPyBMT1dFUihUT19TVFJJTkcodXNlclske2ZpZWxkfV0pKSA9PSAke3ZhbHVlfSA6IENPTlRBSU5TKExPV0VSKFRPX1NUUklORyh1c2VyWyR7ZmllbGR9XSkpLCAke3ZhbHVlfSkpKVxuICAgICAgU09SVCB1c2VyLmFkZGVkIERFU0NcbiAgICAgIExJTUlUIDEwMDBcbiAgICAgIFJFVFVSTiBNRVJHRSh1c2VyLCB7Y3JtU291cmNlOiB1c2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2V9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZENybUNhbXBhaWduID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogQ3JtQ2FtcGFpZ25JbnB1dFxuKTogUHJvbWlzZTxDcm1DYW1wYWlnblR5cGU+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgY29uc3QgYm9keUh0bWwgPSBzYW5pdGl6ZUh0bWwoaW5wdXQuaHRtbCk7XG4gIGNvbnN0IGNzcyA9IHNhbml0aXplQ3NzKGlucHV0LmNzcyk7XG4gIGlmKCFzdWJqZWN0IHx8ICFib2R5SHRtbCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jYW1wYWlnbl9jb250ZW50Jyk7XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IGF3YWl0IGdldENybUNvbnRhY3RzKGNvbnRleHQsIHsuLi5pbnB1dC5maWx0ZXIsIG9wdGVkSW5Pbmx5OiB0cnVlfSk7XG4gIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCgoaW5wdXQudXNlcklkcyB8fCBbXSkubWFwKChpZCkgPT4gZG9jS2V5KGlkKSkpO1xuICBjb25zdCByZWNpcGllbnRzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHVzZXIpID0+XG4gICAgQm9vbGVhbih1c2VyLmVtYWlsKSAmJiAoIXNlbGVjdGVkSWRzLnNpemUgfHwgc2VsZWN0ZWRJZHMuaGFzKGRvY0tleSh1c2VyLnVzZXJJZCB8fCB1c2VyLl9rZXkpKSkpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgY2FtcGFpZ25JZCA9IGNyZWF0ZUhhc2goYGNybS1jYW1wYWlnbi0ke3RpbWVzdGFtcH0tJHtzdWJqZWN0fWAsIG51bGwpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgY2FtcGFpZ24gPSB7XG4gICAgX2tleTogY2FtcGFpZ25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNhbXBhaWduSWQsXG4gICAgY3NzLFxuICAgIGZhaWxlZENvdW50OiAwLFxuICAgIGh0bWw6IGJvZHlIdG1sLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcmVjaXBpZW50Q291bnQ6IHJlY2lwaWVudHMubGVuZ3RoLFxuICAgIHNlbnRDb3VudDogMCxcbiAgICBzdGF0dXM6ICdzZW5kaW5nJyxcbiAgICBzdWJqZWN0XG4gIH07XG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBJTlNFUlQgJHtjYW1wYWlnbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9DQU1QQUlHTlMpfWApO1xuXG4gIGxldCBmYWlsZWRDb3VudCA9IDA7XG4gIGxldCBzZW50Q291bnQgPSAwO1xuICBmb3IoY29uc3QgcmVjaXBpZW50c0JhdGNoIG9mIGNodW5rKHJlY2lwaWVudHMsIDUwKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXNTZW5kKHtcbiAgICAgICAgRGVzdGluYXRpb246IHtCY2NBZGRyZXNzZXM6IHJlY2lwaWVudHNCYXRjaC5tYXAoKHJlY2lwaWVudCkgPT4gU3RyaW5nKHJlY2lwaWVudC5lbWFpbCkpfSxcbiAgICAgICAgTWVzc2FnZToge1xuICAgICAgICAgIEJvZHk6IHtIdG1sOiB7RGF0YTogYDxzdHlsZT4ke2Nzc308L3N0eWxlPiR7Ym9keUh0bWx9YH0sIFRleHQ6IHtEYXRhOiBodG1sVG9UZXh0KGJvZHlIdG1sKX19LFxuICAgICAgICAgIFN1YmplY3Q6IHtEYXRhOiBzdWJqZWN0fVxuICAgICAgICB9LFxuICAgICAgICBTb3VyY2U6IGBcIiR7Y29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnROYW1lIHx8ICdSZWFrdG9yJ31cIiA8JHtjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydEVtYWlsIHx8ICdzdXBwb3J0QHJlYWt0b3IuaW8nfT5gXG4gICAgICB9KTtcbiAgICAgIHNlbnRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBmYWlsZWRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXN1bHQgPSB7Li4uY2FtcGFpZ24sIGZhaWxlZENvdW50LCBzZW50QXQ6IG5vdygpLCBzZW50Q291bnQsIHN0YXR1czogZmFpbGVkQ291bnQgPyAoc2VudENvdW50ID8gJ3BhcnRpYWwnIDogJ2ZhaWxlZCcpIDogJ3NlbnQnfTtcbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIFVQREFURSAke2NhbXBhaWduSWR9IFdJVEggJHt7XG4gICAgICBmYWlsZWRDb3VudDogcmVzdWx0LmZhaWxlZENvdW50LFxuICAgICAgbW9kaWZpZWQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50QXQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50Q291bnQ6IHJlc3VsdC5zZW50Q291bnQsXG4gICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXNcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0NBTVBBSUdOUyl9XG4gIGApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3Qgc2F2ZUVkZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGVkZ2VDb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGVkZ2VLZXk6IHN0cmluZyxcbiAgZnJvbTogc3RyaW5nLFxuICB0bzogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZyb20sXG4gICAgX2tleTogZWRnZUtleSxcbiAgICBfdG86IHRvLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAuLi5kYXRhXG4gIH07XG4gIGNvbnN0IHF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBVUFNFUlQge19rZXk6ICR7ZWRnZUtleX19XG4gICAgSU5TRVJUICR7ZWRnZX1cbiAgICBVUERBVEUgJHtkYXRhfSBJTiAke2NvbGxlY3Rpb24oZWRnZUNvbGxlY3Rpb24pfVxuICBgO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPE1haWxpbmdMaXN0VHlwZT5cbik6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBtYWlsaW5nTGlzdElkID0gZG9jS2V5KFN0cmluZyhpbnB1dD8ubWFpbGluZ0xpc3RJZCB8fCBjcmVhdGVIYXNoKGBtYWlsaW5nLWxpc3QtJHtpbnB1dD8ubmFtZX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWFpbGluZ0xpc3QgPSB7XG4gICAgX2tleTogbWFpbGluZ0xpc3RJZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNyZWF0ZWRCeVVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQ/LmRlc2NyaXB0aW9uLCAyMDAwKSxcbiAgICBtYWlsaW5nTGlzdElkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgbmFtZTogY2xlYW5TdHJpbmcoaW5wdXQ/Lm5hbWUsIDE2MCksXG4gICAgc3RhdHVzOiBpbnB1dD8uc3RhdHVzIHx8ICdhY3RpdmUnXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHttYWlsaW5nTGlzdElkfX1cbiAgICBJTlNFUlQgJHttYWlsaW5nTGlzdH1cbiAgICBVUERBVEUgJHt7XG4gICAgICBkZXNjcmlwdGlvbjogbWFpbGluZ0xpc3QuZGVzY3JpcHRpb24sXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgbmFtZTogbWFpbGluZ0xpc3QubmFtZSxcbiAgICAgIHN0YXR1czogbWFpbGluZ0xpc3Quc3RhdHVzXG4gICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haWxpbmdMaXN0cyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgbGlzdCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUyl9XG4gICAgICBGSUxURVIgbGlzdC5zdGF0dXMgIT0gXCJhcmNoaXZlZFwiXG4gICAgICBTT1JUIGxpc3QuYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOIGxpc3RcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmcsXG4gIHNvdXJjZSA9ICdtYW51YWwnXG4pOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfTUFJTElOR19MSVNULFxuICAgIGVkZ2VLZXksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIGxpc3RLZXkpLFxuICAgIHtcbiAgICAgIGFkZGVkQnlVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgICBzb3VyY2U6IGNsZWFuU3RyaW5nKHNvdXJjZSwgODApLFxuICAgICAgc3RhdHVzOiAnYWN0aXZlJ1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpXG4gICAgLnF1ZXJ5KGFxbGBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBsaXN0S2V5KX0pYClcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVVc2VyRnJvbU1haWxpbmdMaXN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgbWFpbGluZ0xpc3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBtb2RpZmllZDogbm93KCksXG4gICAgcmVtb3ZlZEF0OiBub3coKSxcbiAgICBzdGF0dXM6ICdyZW1vdmVkJ1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUERBVEUgJHtlZGdlS2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkudGhlbihCb29sZWFuKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYWlsaW5nTGlzdFVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBsaXN0SWQgPSBkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBtYWlsaW5nTGlzdElkKTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIsIGVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7bGlzdElkfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgICBGSUxURVIgZWRnZS5zdGF0dXMgPT0gXCJhY3RpdmVcIlxuICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHByb2R1Y3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBJTkJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUywgcHJvZHVjdEtleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QpfVxuICAgICAgRk9SIHVzZXIgSU4gMS4uMSBJTkJPVU5EIG9yZGVyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGlnaWJsZU1haWxpbmdVc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczoge3JlYWRvbmx5IG1haWxpbmdMaXN0SWQ/OiBzdHJpbmc7IHJlYWRvbmx5IHByb2R1Y3RJZD86IHN0cmluZzsgcmVhZG9ubHkgZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID0gb3B0aW9ucy5leGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzICE9PSBmYWxzZTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgTEVUIGJhc2VVc2VycyA9IChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiB1c2VyLm1hcmtldGluZ09wdEluID09IHRydWVcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWwgIT0gbnVsbCAmJiB1c2VyLmVtYWlsICE9IFwiXCJcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBudWxsIHx8IHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBcInZhbGlkXCJcbiAgICAgICAgJHtvcHRpb25zLm1haWxpbmdMaXN0SWQgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiBsaXN0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19NQUlMSU5HX0xJU1QpfVxuICAgICAgICAgICAgICBGSUxURVIgbGlzdC5fa2V5ID09ICR7ZG9jS2V5KG9wdGlvbnMubWFpbGluZ0xpc3RJZCl9XG4gICAgICAgICAgICAgIFJFVFVSTiBsaXN0XG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICAke29wdGlvbnMucHJvZHVjdElkID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICAgICAgRk9SIHByb2R1Y3QgSU4gMS4uMSBPVVRCT1VORCBvcmRlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCl9XG4gICAgICAgICAgICAgICAgRklMVEVSIHByb2R1Y3QucHJvZHVjdElkID09ICR7U3RyaW5nKG9wdGlvbnMucHJvZHVjdElkKX1cbiAgICAgICAgICAgICAgICBSRVRVUk4gcHJvZHVjdFxuICAgICAgICAgICkgPiAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgJHtleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgdGlja2V0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCl9XG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQuc3RhdHVzIElOIFtcIm9wZW5cIiwgXCJpbl9wcm9ncmVzc1wiLCBcIndhaXRpbmdfb25fY3VzdG9tZXJcIiwgXCJ3YWl0aW5nX29uX2ludGVybmFsXCJdXG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQucHJpb3JpdHkgSU4gW1wiaGlnaFwiLCBcInVyZ2VudFwiXVxuICAgICAgICAgICAgICBSRVRVUk4gdGlja2V0XG4gICAgICAgICAgKSA9PSAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgRk9SIHVzZXIgSU4gYmFzZVVzZXJzXG4gICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFNob3BpZnlDdXN0b21lck9yZGVySW5wdXRcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHNob3BpZnlDdXN0b21lcklkID0gY2xlYW5FeHRlcm5hbElkKGlucHV0LnNob3BpZnlDdXN0b21lcklkLCAxNjApO1xuICBjb25zdCBzaG9waWZ5T3JkZXJJZCA9IGNsZWFuRXh0ZXJuYWxJZChpbnB1dC5zaG9waWZ5T3JkZXJJZCwgMTYwKTtcbiAgY29uc3QgY3VzdG9tZXIgPSBpbnB1dC5jdXN0b21lciB8fCB7fTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhjdXN0b21lci5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwcm9kdWN0SWRzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi4oaW5wdXQucHJvZHVjdElkcyB8fCBbXSksIC4uLihpbnB1dC5wcm9kdWN0cyB8fCBbXSkubWFwKChwcm9kdWN0KSA9PiBwcm9kdWN0LnByb2R1Y3RJZCldXG4gICAgLm1hcCgocHJvZHVjdElkKSA9PiBjbGVhbkV4dGVybmFsSWQocHJvZHVjdElkLCAzMjApKVxuICAgIC5maWx0ZXIoQm9vbGVhbikpKTtcblxuICBpZighc2hvcGlmeUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3Nob3BpZnlDdXN0b21lcklkJyk7XG4gIH1cbiAgaWYoIXNob3BpZnlPcmRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zaG9waWZ5T3JkZXJJZCcpO1xuICB9XG4gIGlmKCFlbWFpbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY3VzdG9tZXJFbWFpbCcpO1xuICB9XG5cbiAgY29uc3QgdXNlcktleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXVzZXInLCBzaG9waWZ5Q3VzdG9tZXJJZCk7XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogdXNlcktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1hcmtldGluZ09wdEluQXQ6IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlID8gdGltZXN0YW1wIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWQsXG4gICAgdHlwZTogJ2NybUNvbnRhY3QnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBsYXN0UHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWRcbiAgfTtcbiAgY29uc3QgdXNlclF1ZXJ5ID0gYXFsYFxuICAgIExFVCBleGlzdGluZyA9IEZJUlNUKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSIHVzZXIuc2hvcGlmeUN1c3RvbWVySWQgPT0gJHtzaG9waWZ5Q3VzdG9tZXJJZH0gfHwgdXNlci5lbWFpbCA9PSAke2VtYWlsfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIExFVCB1c2VyS2V5ID0gZXhpc3RpbmcgPyBleGlzdGluZy5fa2V5IDogJHt1c2VyS2V5fVxuICAgIFVQU0VSVCB7X2tleTogdXNlcktleX1cbiAgICBJTlNFUlQgTUVSR0UoJHt1c2VySW5zZXJ0fSwge19rZXk6IHVzZXJLZXksIHVzZXJJZDogdXNlcktleX0pXG4gICAgVVBEQVRFICR7dXNlclVwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXNlclF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlO1xuICBjb25zdCByZXNvbHZlZFVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IHVzZXJLZXkpKTtcbiAgY29uc3Qgb3JkZXJLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS1vcmRlcicsIHNob3BpZnlPcmRlcklkKTtcbiAgY29uc3Qgb3JkZXIgPSB7XG4gICAgX2tleTogb3JkZXJLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBjdXJyZW5jeTogY2xlYW5TdHJpbmcoaW5wdXQuY3VycmVuY3ksIDMpLnRvVXBwZXJDYXNlKCksXG4gICAgY3VzdG9tZXJPcmRlcklkOiBvcmRlcktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHByb2R1Y3RJZHMsXG4gICAgcHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZCxcbiAgICBzaG9waWZ5T3JkZXJJZCxcbiAgICB0b3RhbFByaWNlOiBOdW1iZXIoaW5wdXQudG90YWxQcmljZSB8fCAwKSxcbiAgICB1c2VySWQ6IHJlc29sdmVkVXNlcktleVxuICB9O1xuICBjb25zdCBvcmRlclF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtvcmRlcktleX19XG4gICAgSU5TRVJUICR7b3JkZXJ9XG4gICAgVVBEQVRFICR7e1xuICAgICAgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5LFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHByb2R1Y3RJZHMsXG4gICAgICBwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsXG4gICAgICB0b3RhbFByaWNlOiBvcmRlci50b3RhbFByaWNlLFxuICAgICAgdXNlcklkOiByZXNvbHZlZFVzZXJLZXlcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkT3JkZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkob3JkZXJRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBDdXN0b21lck9yZGVyVHlwZTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19DVVNUT01FUl9PUkRFUixcbiAgICBjcmVhdGVIYXNoKGBoYXNDdXN0b21lck9yZGVyLSR7cmVzb2x2ZWRVc2VyS2V5fS0ke29yZGVyS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUywgb3JkZXJLZXkpLFxuICAgIHtwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsIHNob3BpZnlDdXN0b21lcklkLCBzaG9waWZ5T3JkZXJJZH1cbiAgKTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9kdWN0SWRzLm1hcChhc3luYyAocHJvZHVjdElkKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdCA9IChpbnB1dC5wcm9kdWN0cyB8fCBbXSkuZmluZCgoaXRlbSkgPT4gaXRlbS5wcm9kdWN0SWQgPT09IHByb2R1Y3RJZCkgfHwge3Byb2R1Y3RJZH07XG4gICAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICAgIGNvbnN0IHByb2R1Y3REb2MgPSB7XG4gICAgICBfa2V5OiBwcm9kdWN0S2V5LFxuICAgICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICB0aXRsZTogY2xlYW5TdHJpbmcocHJvZHVjdC50aXRsZSwgMzIwKSxcbiAgICAgIHZhcmlhbnRJZDogY2xlYW5FeHRlcm5hbElkKHByb2R1Y3QudmFyaWFudElkLCAxNjApXG4gICAgfTtcbiAgICBjb25zdCBwcm9kdWN0UXVlcnkgPSBhcWxgXG4gICAgICBVUFNFUlQge19rZXk6ICR7cHJvZHVjdEtleX19XG4gICAgICBJTlNFUlQgJHtwcm9kdWN0RG9jfVxuICAgICAgVVBEQVRFICR7e1xuICAgICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgICB0aXRsZTogcHJvZHVjdERvYy50aXRsZSxcbiAgICAgICAgdmFyaWFudElkOiBwcm9kdWN0RG9jLnZhcmlhbnRJZFxuICAgICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMpfVxuICAgIGA7XG4gICAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHByb2R1Y3RRdWVyeSk7XG4gICAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgICBjb250ZXh0LFxuICAgICAgRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNULFxuICAgICAgY3JlYXRlSGFzaChgaGFzUHVyY2hhc2VkUHJvZHVjdC0ke29yZGVyS2V5fS0ke3Byb2R1Y3RLZXl9YCksXG4gICAgICBkb2NJZChDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMsIG9yZGVyS2V5KSxcbiAgICAgIGRvY0lkKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMsIHByb2R1Y3RLZXkpLFxuICAgICAge3Byb2R1Y3RJZCwgcHVyY2hhc2VkQXQ6IG9yZGVyLnB1cmNoYXNlZEF0fVxuICAgICk7XG4gIH0pKTtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIFVQREFURSAke3Jlc29sdmVkVXNlcktleX1cbiAgICBXSVRIIHtcbiAgICAgIGxhc3RQdXJjaGFzZWRBdDogJHtvcmRlci5wdXJjaGFzZWRBdH0sXG4gICAgICB0b3RhbE9yZGVyQ291bnQ6IExFTkdUSChcbiAgICAgICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgcmVzb2x2ZWRVc2VyS2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgICAgUkVUVVJOIG9yZGVyXG4gICAgICApLFxuICAgICAgdG90YWxTcGVuZDogU1VNKFxuICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICBSRVRVUk4gVE9fTlVNQkVSKG9yZGVyLnRvdGFsUHJpY2UpXG4gICAgICApXG4gICAgfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICBgKTtcblxuICByZXR1cm4gc2F2ZWRPcmRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXN0b21lck9yZGVyc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VySWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgIFNPUlQgb3JkZXIucHVyY2hhc2VkQXQgREVTQ1xuICAgICAgUkVUVVJOIG9yZGVyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuY29uc3Qgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0OiBTdXBwb3J0VGlja2V0VHlwZURhdGEsXG4gIGRldGFpbHM6IHN0cmluZyxcbiAgaGVhZGluZzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHRpY2tldC51c2VySWQpfSlcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGlmKCF1c2VyPy5lbWFpbCkgcmV0dXJuO1xuICBjb25zdCBzdXBwb3J0TmFtZSA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0TmFtZSB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnROYW1lJykgfHwgJ1JlYWt0b3IgU3VwcG9ydCc7XG4gIGNvbnN0IHN1cHBvcnRFbWFpbCA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0RW1haWwgfHwgQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0RW1haWwnKSB8fCAnc3VwcG9ydEByZWFrdG9yLmlvJztcbiAgY29uc3QgdGlja2V0TnVtYmVyID0gU3RyaW5nKHRpY2tldC50aWNrZXROdW1iZXIgfHwgdGlja2V0LnN1cHBvcnRUaWNrZXRJZCB8fCB0aWNrZXQuX2tleSB8fCAnJyk7XG4gIGNvbnN0IHN0YXR1c1VybCA9IGBodHRwczovL2NybS5yZWFrdG9yLmlvL3N1cHBvcnQvc3RhdHVzP3RpY2tldD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aWNrZXROdW1iZXIpfWA7XG4gIGNvbnN0IHRleHQgPSBgJHtoZWFkaW5nfVxcblxcblRpY2tldDogJHt0aWNrZXROdW1iZXJ9XFxuU3RhdHVzOiAke3RpY2tldC5zdGF0dXMgfHwgJ3N1Ym1pdHRlZCd9XFxuXFxuJHtkZXRhaWxzfVxcblxcblRyYWNrIHRoaXMgdGlja2V0OiAke3N0YXR1c1VybH1gO1xuICBhd2FpdCBzZXNTZW5kKHtcbiAgICBEZXN0aW5hdGlvbjoge1RvQWRkcmVzc2VzOiBbU3RyaW5nKHVzZXIuZW1haWwpXX0sXG4gICAgTWVzc2FnZToge1xuICAgICAgQm9keToge0h0bWw6IHtEYXRhOiBgPGgxPiR7ZXNjYXBlSHRtbChoZWFkaW5nKX08L2gxPjxwPjxzdHJvbmc+VGlja2V0Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwodGlja2V0TnVtYmVyKX08L3A+PHA+PHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChTdHJpbmcodGlja2V0LnN0YXR1cyB8fCAnc3VibWl0dGVkJykpfTwvcD48cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6aW5oZXJpdFwiPiR7ZXNjYXBlSHRtbChkZXRhaWxzKX08L3ByZT48cD48YSBocmVmPVwiJHtlc2NhcGVIdG1sKHN0YXR1c1VybCl9XCI+VHJhY2sgdGhpcyB0aWNrZXQgb25saW5lPC9hPjwvcD5gfSwgVGV4dDoge0RhdGE6IHRleHR9fSxcbiAgICAgIFN1YmplY3Q6IHtEYXRhOiBgWyR7dGlja2V0TnVtYmVyfV0gJHtoZWFkaW5nfWB9XG4gICAgfSxcbiAgICBTb3VyY2U6IGBcIiR7c3VwcG9ydE5hbWV9XCIgPCR7c3VwcG9ydEVtYWlsfT5gXG4gIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldFR5cGVEYXRhPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC0ke3VzZXJLZXl9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IHRpY2tldE51bWJlciA9IGNsZWFuU3RyaW5nKGlucHV0LnRpY2tldE51bWJlciwgODApIHx8IGBSS1QtJHtuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApLnJlcGxhY2UoLy0vZywgJycpfS0ke3RpY2tldEtleS5zbGljZSgwLCA4KS50b1VwcGVyQ2FzZSgpfWA7XG4gIGNvbnN0IHRpY2tldCA9IHtcbiAgICBfa2V5OiB0aWNrZXRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhc3NpZ25lZFRvVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmFzc2lnbmVkVG9Vc2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcHJpb3JpdHk6IGlucHV0LnByaW9yaXR5IHx8ICdub3JtYWwnLFxuICAgIHByb2R1Y3RJZDogY2xlYW5FeHRlcm5hbElkKGlucHV0LnByb2R1Y3RJZCwgMzIwKSxcbiAgICBzaG9waWZ5T3JkZXJJZDogY2xlYW5TdHJpbmcoaW5wdXQuc2hvcGlmeU9yZGVySWQsIDE2MCksXG4gICAgc3RhdHVzOiAnc3VibWl0dGVkJyxcbiAgICBzdWJqZWN0OiBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRpY2tldE51bWJlcixcbiAgICB0eXBlOiBpbnB1dC50eXBlIHx8ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHt0aWNrZXR9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRUaWNrZXQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldC0ke3VzZXJLZXl9LSR7dGlja2V0S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSksXG4gICAge3ByaW9yaXR5OiB0aWNrZXQucHJpb3JpdHksIHN0YXR1czogdGlja2V0LnN0YXR1cywgdHlwZTogdGlja2V0LnR5cGV9XG4gICk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8IHVzZXJLZXkpKSxcbiAgICBldmVudFR5cGU6ICdzdWJtaXR0ZWQnLFxuICAgIG1ldGFkYXRhOiB7ZGV0YWlsczogdGlja2V0LmRlc2NyaXB0aW9ufSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiB0aWNrZXQuc3RhdHVzXG4gIH0pO1xuXG4gIHJldHVybiBzYXZlZFRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWJtaXRQdWJsaWNTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUHVibGljU3VwcG9ydFRpY2tldElucHV0XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGlucHV0LmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgaWYoIWVtYWlsUGF0dGVybi50ZXN0KGVtYWlsKSkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF92YWxpZF9lbWFpbCcpO1xuICBpZighc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zdWJqZWN0Jyk7XG4gIGlmKCFkZXNjcmlwdGlvbikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9kZXNjcmlwdGlvbicpO1xuXG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyxcbiAgICBDT0xMRUNUSU9OUy5VU0VSU1xuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBuYW1lKSkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VULFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRVxuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRWRnZUNvbGxlY3Rpb24oZGF0YWJhc2UsIG5hbWUpKSk7XG5cbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsLCBudWxsKTtcbiAgY29uc3Qgb3B0ZWRJbiA9IGlucHV0Lm1hcmtldGluZ09wdEluID09PSB0cnVlO1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYWlsaW5nTGlzdDogb3B0ZWRJbixcbiAgICBtYXJrZXRpbmdPcHRJbjogb3B0ZWRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHVzZXJJZDogZ2VuZXJhdGVkVXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihvcHRlZEluID8ge21haWxpbmdMaXN0OiB0cnVlLCBtYXJrZXRpbmdPcHRJbjogdHJ1ZSwgbWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wfSA6IHt9KSxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSwgMTYwKSB8fCB1bmRlZmluZWQsXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lLCAxNjApIHx8IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wXG4gIH07XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgVVBTRVJUIHtlbWFpbDogJHtlbWFpbH19XG4gICAgICBJTlNFUlQgJHt1c2VySW5zZXJ0fVxuICAgICAgVVBEQVRFICR7dXNlclVwZGF0ZX1cbiAgICAgIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBSRVRVUk4gTkVXXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGU7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IGNyZWF0ZVN1cHBvcnRUaWNrZXQoY29udGV4dCwge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIHByaW9yaXR5OiBzdXBwb3J0UHJpb3JpdGllcy5oYXMoU3RyaW5nKGlucHV0LnByaW9yaXR5KSkgPyBpbnB1dC5wcmlvcml0eSA6ICdub3JtYWwnLFxuICAgIHN1YmplY3QsXG4gICAgdHlwZTogc3VwcG9ydFR5cGVzLmhhcyhTdHJpbmcoaW5wdXQudHlwZSkpID8gaW5wdXQudHlwZSA6ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IGdlbmVyYXRlZFVzZXJLZXkpXG4gIH0pO1xuICBhd2FpdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsKGNvbnRleHQsIHRpY2tldCwgZGVzY3JpcHRpb24sICdXZSByZWNlaXZlZCB5b3VyIHN1cHBvcnQgdGlja2V0Jyk7XG4gIHJldHVybiB0aWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHVibGljU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0TnVtYmVyOiBzdHJpbmcsXG4gIGVtYWlsQWRkcmVzczogc3RyaW5nXG4pOiBQcm9taXNlPFB1YmxpY1N1cHBvcnRUaWNrZXRGZWVkIHwgbnVsbD4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGVtYWlsQWRkcmVzcywgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBudW1iZXIgPSBjbGVhblN0cmluZyh0aWNrZXROdW1iZXIsIDgwKS50b1VwcGVyQ2FzZSgpO1xuICBpZighZW1haWxQYXR0ZXJuLnRlc3QoZW1haWwpIHx8ICFudW1iZXIpIHJldHVybiBudWxsO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKS5leGlzdHMoKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgRk9SIHRpY2tldCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICAgIEZJTFRFUiBVUFBFUih0aWNrZXQudGlja2V0TnVtYmVyKSA9PSAke251bWJlcn1cbiAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICBGSUxURVIgTE9XRVIodXNlci5lbWFpbCkgPT0gJHtlbWFpbH1cbiAgICAgIExFVCBtZXNzYWdlcyA9IChcbiAgICAgICAgRk9SIG1lc3NhZ2UgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTKX1cbiAgICAgICAgICBGSUxURVIgbWVzc2FnZS5zdXBwb3J0VGlja2V0SWQgPT0gdGlja2V0Ll9rZXkgQU5EIG1lc3NhZ2UudmlzaWJpbGl0eSA9PSBcImN1c3RvbWVyXCJcbiAgICAgICAgICBTT1JUIG1lc3NhZ2UuYWRkZWQgQVNDXG4gICAgICAgICAgUkVUVVJOIG1lc3NhZ2VcbiAgICAgIClcbiAgICAgIExFVCBldmVudHMgPSAoXG4gICAgICAgIEZPUiBldmVudCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICAgICAgICBGSUxURVIgZXZlbnQuc3VwcG9ydFRpY2tldElkID09IHRpY2tldC5fa2V5XG4gICAgICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgICAgICBSRVRVUk4gZXZlbnRcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB7dGlja2V0LCBtZXNzYWdlcywgZXZlbnRzfVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFByb21pc2U8UHVibGljU3VwcG9ydFRpY2tldEZlZWQgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0cyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZmlsdGVyczoge3JlYWRvbmx5IHN0YXR1cz86IHN0cmluZzsgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nfSA9IHt9XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YVtdPiA9PiB7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpLmV4aXN0cygpKSByZXR1cm4gW107XG4gICAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdGlja2V0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgICAgICAke2ZpbHRlcnMuc3RhdHVzID8gYXFsYEZJTFRFUiB0aWNrZXQuc3RhdHVzID09ICR7ZmlsdGVycy5zdGF0dXN9YCA6IGFxbGBgfVxuICAgICAgICAke2ZpbHRlcnMudXNlcklkID8gYXFsYEZJTFRFUiB0aWNrZXQudXNlcklkID09ICR7ZG9jS2V5KGZpbHRlcnMudXNlcklkKX1gIDogYXFsYGB9XG4gICAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICAgIFNPUlQgdGlja2V0LmFkZGVkIERFU0NcbiAgICAgICAgUkVUVVJOIE1FUkdFKHRpY2tldCwge3VzZXJ9KVxuICAgIGA7XG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU3VwcG9ydFRpY2tldFN0YXR1cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgcmVzb2x1dGlvblN1bW1hcnkgPSAnJ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KHN1cHBvcnRUaWNrZXRJZCk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpfSlgKVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFN1cHBvcnRUaWNrZXRUeXBlRGF0YSB8IG51bGw7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAuLi4oc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiB7Y29tcGxldGVkQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdkb25lJyAmJiB7ZG9uZUF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAncmVzb2x2ZWQnICYmIHtyZXNvbHZlZEF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAnY2xvc2VkJyAmJiB7Y2xvc2VkQXQ6IHRpbWVzdGFtcH0pLFxuICAgIGxhc3RVcGRhdGVEZXRhaWxzOiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzdGF0dXNcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dGlja2V0S2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBTdXBwb3J0VGlja2V0VHlwZURhdGE7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgZWRnZSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgICAgIEZJTFRFUiBlZGdlLl90byA9PSAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KX1cbiAgICAgIFVQREFURSBlZGdlIFdJVEggJHt7XG4gICAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICAgIHJlc29sdmVkQXQ6IHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzXG4gICAgICB9fSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgYCk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgZXZlbnRUeXBlOiAnc3RhdHVzX2NoYW5nZWQnLFxuICAgIGZyb21WYWx1ZTogcHJldmlvdXM/LnN0YXR1cyxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBzdGF0dXNcbiAgfSk7XG5cbiAgaWYoc3RhdHVzID09PSAncmVzb2x2ZWQnKSB7XG4gICAgYXdhaXQgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24oY29udGV4dCwge1xuICAgICAgYm9keTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnkgfHwgJ1lvdXIgc3VwcG9ydCB0aWNrZXQgaGFzIGJlZW4gcmVzb2x2ZWQuJywgNDAwMCksXG4gICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgc3ViamVjdDogYFJlc29sdmVkOiAke3RpY2tldC5zdWJqZWN0IHx8ICdTdXBwb3J0IHRpY2tldCd9YCxcbiAgICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Jlc29sdmVkJyxcbiAgICAgIHVzZXJJZDogdGlja2V0LnVzZXJJZFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nLFxuICBzdGF0dXM6IFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIGRldGFpbHM6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBpZighc3VwcG9ydFN0YXR1c2VzLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWRfc3VwcG9ydF90aWNrZXRfc3RhdHVzJyk7XG4gIGNvbnN0IG1hcmtkb3duID0gY2xlYW5TdHJpbmcoZGV0YWlscywgNDAwMCk7XG4gIGlmKCFtYXJrZG93bikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF91cGRhdGVfZGV0YWlscycpO1xuICBjb25zdCB0aWNrZXQgPSBhd2FpdCB1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzKGNvbnRleHQsIHN1cHBvcnRUaWNrZXRJZCwgc3RhdHVzLCBtYXJrZG93bik7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlKGNvbnRleHQsIHtcbiAgICBhdXRob3JVc2VySWQ6IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJyksXG4gICAgYm9keTogbWFya2Rvd24sXG4gICAgc3VwcG9ydFRpY2tldElkLFxuICAgIHZpc2liaWxpdHk6ICdjdXN0b21lcidcbiAgfSk7XG4gIGF3YWl0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uKGNvbnRleHQsIHtcbiAgICBib2R5OiBtYXJrZG93bixcbiAgICBzdGF0dXM6ICdzZW50JyxcbiAgICBzdWJqZWN0OiBgVGlja2V0ICR7dGlja2V0LnRpY2tldE51bWJlciB8fCBzdXBwb3J0VGlja2V0SWR9OiAke3N0YXR1cy5yZXBsYWNlKC9fL2csICcgJyl9YCxcbiAgICBzdXBwb3J0VGlja2V0SWQsXG4gICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Byb2dyZXNzJyxcbiAgICB1c2VySWQ6IHRpY2tldC51c2VySWRcbiAgfSk7XG4gIGF3YWl0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwoY29udGV4dCwgdGlja2V0LCBtYXJrZG93biwgYFN1cHBvcnQgdGlja2V0ICR7c3RhdHVzLnJlcGxhY2UoL18vZywgJyAnKX1gKTtcbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTdXBwb3J0VGlja2V0TWVzc2FnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSk7XG4gIGNvbnN0IG1lc3NhZ2VLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRNZXNzYWdlSWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtbWVzc2FnZS0ke3RpY2tldEtleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBfa2V5OiBtZXNzYWdlS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYXV0aG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmF1dGhvclVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBib2R5OiBjbGVhblN0cmluZyhpbnB1dC5ib2R5LCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHN1cHBvcnRUaWNrZXRNZXNzYWdlSWQ6IG1lc3NhZ2VLZXksXG4gICAgdmlzaWJpbGl0eTogaW5wdXQudmlzaWJpbGl0eSB8fCAnY3VzdG9tZXInXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke21lc3NhZ2V9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE1lc3NhZ2UgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRSxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0TWVzc2FnZS0ke3RpY2tldEtleX0tJHttZXNzYWdlS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUywgbWVzc2FnZUtleSksXG4gICAge2F1dGhvclVzZXJJZDogbWVzc2FnZS5hdXRob3JVc2VySWQsIHZpc2liaWxpdHk6IG1lc3NhZ2UudmlzaWJpbGl0eX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRNZXNzYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmdcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG1lc3NhZ2UgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgc3VwcG9ydFRpY2tldElkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFKX1cbiAgICAgIFNPUlQgbWVzc2FnZS5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBtZXNzYWdlXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFN1cHBvcnRUaWNrZXRFdmVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT5cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKTtcbiAgY29uc3QgZXZlbnRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRFdmVudElkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LWV2ZW50LSR7dGlja2V0S2V5fS0ke3RpbWVzdGFtcH0tJHtpbnB1dC5ldmVudFR5cGV9YCkpKTtcbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgX2tleTogZXZlbnRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5hY3RvclVzZXJJZCB8fCAnJykpLFxuICAgIGV2ZW50VHlwZTogY2xlYW5TdHJpbmcoaW5wdXQuZXZlbnRUeXBlLCAxNjApLFxuICAgIGZyb21WYWx1ZTogY2xlYW5TdHJpbmcoaW5wdXQuZnJvbVZhbHVlLCAzMjApLFxuICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSB8fCB7fSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRFdmVudElkOiBldmVudEtleSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBjbGVhblN0cmluZyhpbnB1dC50b1ZhbHVlLCAzMjApXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke2V2ZW50fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkRXZlbnQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldEV2ZW50LSR7dGlja2V0S2V5fS0ke2V2ZW50S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMsIGV2ZW50S2V5KSxcbiAgICB7YWN0b3JVc2VySWQ6IGV2ZW50LmFjdG9yVXNlcklkLCBldmVudFR5cGU6IGV2ZW50LmV2ZW50VHlwZX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRFdmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0RXZlbnRzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0RXZlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIGV2ZW50IElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHN1cHBvcnRUaWNrZXRJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQpfVxuICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBldmVudFxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlPlxuKTogUHJvbWlzZTxDdXN0b21lck5vdGlmaWNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBub3RpZmljYXRpb25LZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LmN1c3RvbWVyTm90aWZpY2F0aW9uSWQgfHwgY3JlYXRlSGFzaChgY3VzdG9tZXItbm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xuICAgIF9rZXk6IG5vdGlmaWNhdGlvbktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGJvZHk6IGNsZWFuU3RyaW5nKGlucHV0LmJvZHksIDQwMDApLFxuICAgIGN1c3RvbWVyTm90aWZpY2F0aW9uSWQ6IG5vdGlmaWNhdGlvbktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHNlbnRBdDogaW5wdXQuc2VudEF0LFxuICAgIHN0YXR1czogaW5wdXQuc3RhdHVzIHx8ICdxdWV1ZWQnLFxuICAgIHN1YmplY3Q6IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCksXG4gICAgc3VwcG9ydFRpY2tldElkOiBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpLFxuICAgIHR5cGU6IGNsZWFuU3RyaW5nKGlucHV0LnR5cGUsIDE2MCksXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke25vdGlmaWNhdGlvbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWROb3RpZmljYXRpb24gPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OLFxuICAgIGNyZWF0ZUhhc2goYGhhc0N1c3RvbWVyTm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHtub3RpZmljYXRpb25LZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMsIG5vdGlmaWNhdGlvbktleSksXG4gICAge1xuICAgICAgc3RhdHVzOiBub3RpZmljYXRpb24uc3RhdHVzLFxuICAgICAgc3VwcG9ydFRpY2tldElkOiBub3RpZmljYXRpb24uc3VwcG9ydFRpY2tldElkLFxuICAgICAgdHlwZTogbm90aWZpY2F0aW9uLnR5cGVcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIHNhdmVkTm90aWZpY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbWVyTm90aWZpY2F0aW9uc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG5vdGlmaWNhdGlvbiBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OKX1cbiAgICAgIFNPUlQgbm90aWZpY2F0aW9uLmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiBub3RpZmljYXRpb25cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25maWciLCJ1c2VEYiIsImlzQWRtaW5Vc2VyIiwic2VzU2VuZCIsIm5vdyIsIkRhdGUiLCJjb2xsZWN0aW9uIiwibmFtZSIsImRvY0tleSIsInZhbHVlIiwiU3RyaW5nIiwiZG9jSWQiLCJjb2xsZWN0aW9uTmFtZSIsImtleSIsImV4dGVybmFsS2V5IiwicHJlZml4IiwiaWQiLCJjbGVhblN0cmluZyIsImxlbmd0aCIsImNsZWFuRXh0ZXJuYWxJZCIsInRyaW0iLCJzbGljZSIsImVuc3VyZURvY3VtZW50Q29sbGVjdGlvbiIsImRhdGFiYXNlIiwidGFyZ2V0IiwiZXhpc3RzIiwiY3JlYXRlQ29sbGVjdGlvbiIsImVycm9yIiwiZW5zdXJlRWRnZUNvbGxlY3Rpb24iLCJjcmVhdGVFZGdlQ29sbGVjdGlvbiIsInJlcXVpcmVDcm1BZG1pbiIsImNvbnRleHQiLCJzZXNzaW9uIiwiRXJyb3IiLCJyZXF1aXJlQ3JtQWRtaW5pc3RyYXRvciIsImFsbG93ZWRDb250YWN0RmllbGRzIiwiU2V0Iiwic3VwcG9ydFByaW9yaXRpZXMiLCJzdXBwb3J0U3RhdHVzZXMiLCJzdXBwb3J0VHlwZXMiLCJlbWFpbFBhdHRlcm4iLCJlc2NhcGVIdG1sIiwicmVwbGFjZSIsInNhbml0aXplSHRtbCIsInNhbml0aXplQ3NzIiwiaHRtbFRvVGV4dCIsImNodW5rIiwiaXRlbXMiLCJzaXplIiwiZ3JvdXBzIiwiaW5kZXgiLCJwdXNoIiwic3VibWl0Q3JtRm9ybSIsImlucHV0IiwibWFya2V0aW5nT3B0SW4iLCJlbWFpbCIsInRvTG93ZXJDYXNlIiwicmF3UGhvbmUiLCJwaG9uZSIsImRhdGFiYXNlTmFtZSIsIkNSTV9GT1JNX1NVQk1JU1NJT05TIiwidGltZXN0YW1wIiwic291cmNlIiwiZm9ybUlkIiwidmFsdWVzIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJnZW5lcmF0ZWRVc2VyS2V5IiwiY29uc2VudCIsIm1hcmtldGluZ09wdEluQXQiLCJtYXJrZXRpbmdPcHRPdXRBdCIsInVzZXJJbnNlcnQiLCJfa2V5IiwiYWN0aXZlIiwiYWRkZWQiLCJtYWlsaW5nTGlzdCIsIm1hcmtldGluZ0NvbnNlbnRTb3VyY2UiLCJtb2RpZmllZCIsInR5cGUiLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkUGhvbmUiLCJ1c2VyVXBkYXRlIiwidXNlciIsInF1ZXJ5IiwiVVNFUlMiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsInN1Ym1pc3Npb25JZCIsInN1Ym1pc3Npb24iLCJzYXZlZCIsImdldENybUZvcm1TdWJtaXNzaW9ucyIsImFsbCIsImdldENybUNvbnRhY3RzIiwiZmlsdGVyIiwic2VhcmNoIiwiZmllbGQiLCJoYXMiLCJvcHRlZEluT25seSIsIm9wZXJhdG9yIiwiaW5jbHVkZXMiLCJzZW5kQ3JtQ2FtcGFpZ24iLCJzdWJqZWN0IiwiYm9keUh0bWwiLCJodG1sIiwiY3NzIiwiY2FuZGlkYXRlcyIsInNlbGVjdGVkSWRzIiwidXNlcklkcyIsIm1hcCIsInJlY2lwaWVudHMiLCJCb29sZWFuIiwiY2FtcGFpZ25JZCIsImNhbXBhaWduIiwiZmFpbGVkQ291bnQiLCJyZWNpcGllbnRDb3VudCIsInNlbnRDb3VudCIsInN0YXR1cyIsIkNSTV9DQU1QQUlHTlMiLCJyZWNpcGllbnRzQmF0Y2giLCJEZXN0aW5hdGlvbiIsIkJjY0FkZHJlc3NlcyIsInJlY2lwaWVudCIsIk1lc3NhZ2UiLCJCb2R5IiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsImNvbmZpZyIsImRldGFpbHMiLCJzdXBwb3J0TmFtZSIsInN1cHBvcnRFbWFpbCIsIl9lcnJvciIsInJlc3VsdCIsInNlbnRBdCIsInNhdmVFZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlS2V5IiwiZnJvbSIsInRvIiwiZGF0YSIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNyZWF0ZU1haWxpbmdMaXN0IiwibWFpbGluZ0xpc3RJZCIsImNyZWF0ZWRCeVVzZXJJZCIsImRlc2NyaXB0aW9uIiwiTUFJTElOR19MSVNUUyIsImdldE1haWxpbmdMaXN0cyIsImFkZFVzZXJUb01haWxpbmdMaXN0IiwidXNlcktleSIsImxpc3RLZXkiLCJIQVNfTUFJTElOR19MSVNUIiwiYWRkZWRCeVVzZXJJZCIsInJlbW92ZVVzZXJGcm9tTWFpbGluZ0xpc3QiLCJ1cGRhdGUiLCJyZW1vdmVkQXQiLCJnZXRNYWlsaW5nTGlzdFVzZXJzIiwibGlzdElkIiwiZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QiLCJwcm9kdWN0SWQiLCJwcm9kdWN0S2V5IiwiU0hPUElGWV9QUk9EVUNUUyIsIkhBU19QVVJDSEFTRURfUFJPRFVDVCIsIkhBU19DVVNUT01FUl9PUkRFUiIsImdldEVsaWdpYmxlTWFpbGluZ1VzZXJzIiwib3B0aW9ucyIsImV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMiLCJIQVNfU1VQUE9SVF9USUNLRVQiLCJpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciIsInNob3BpZnlDdXN0b21lcklkIiwic2hvcGlmeU9yZGVySWQiLCJjdXN0b21lciIsInByb2R1Y3RJZHMiLCJBcnJheSIsInByb2R1Y3RzIiwicHJvZHVjdCIsInVuZGVmaW5lZCIsImxhc3RQdXJjaGFzZWRBdCIsInB1cmNoYXNlZEF0IiwidXNlclF1ZXJ5IiwicmVzb2x2ZWRVc2VyS2V5Iiwib3JkZXJLZXkiLCJvcmRlciIsImN1cnJlbmN5IiwidG9VcHBlckNhc2UiLCJjdXN0b21lck9yZGVySWQiLCJ0b3RhbFByaWNlIiwiTnVtYmVyIiwib3JkZXJRdWVyeSIsIkNVU1RPTUVSX09SREVSUyIsInNhdmVkT3JkZXIiLCJQcm9taXNlIiwiZmluZCIsIml0ZW0iLCJwcm9kdWN0RG9jIiwidGl0bGUiLCJ2YXJpYW50SWQiLCJwcm9kdWN0UXVlcnkiLCJnZXRDdXN0b21lck9yZGVyc0J5VXNlciIsInNlbmRTdXBwb3J0VGlja2V0RW1haWwiLCJ0aWNrZXQiLCJoZWFkaW5nIiwiZ2V0IiwidGlja2V0TnVtYmVyIiwic3VwcG9ydFRpY2tldElkIiwic3RhdHVzVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidGV4dCIsIlRvQWRkcmVzc2VzIiwiY2F0Y2giLCJjcmVhdGVTdXBwb3J0VGlja2V0IiwidGlja2V0S2V5IiwidG9JU09TdHJpbmciLCJhc3NpZ25lZFRvVXNlcklkIiwicHJpb3JpdHkiLCJTVVBQT1JUX1RJQ0tFVFMiLCJzYXZlZFRpY2tldCIsImFkZFN1cHBvcnRUaWNrZXRFdmVudCIsImFjdG9yVXNlcklkIiwiZXZlbnRUeXBlIiwibWV0YWRhdGEiLCJ0b1ZhbHVlIiwic3VibWl0UHVibGljU3VwcG9ydFRpY2tldCIsInRlc3QiLCJTVVBQT1JUX1RJQ0tFVF9FVkVOVFMiLCJTVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyIsIkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCIsIkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFIiwib3B0ZWRJbiIsImdldFB1YmxpY1N1cHBvcnRUaWNrZXQiLCJlbWFpbEFkZHJlc3MiLCJudW1iZXIiLCJnZXRTdXBwb3J0VGlja2V0cyIsImZpbHRlcnMiLCJ1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzIiwicmVzb2x1dGlvblN1bW1hcnkiLCJwcmV2aW91cyIsImNvbXBsZXRlZEF0IiwiZG9uZUF0IiwicmVzb2x2ZWRBdCIsImNsb3NlZEF0IiwibGFzdFVwZGF0ZURldGFpbHMiLCJmcm9tVmFsdWUiLCJjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiIsImJvZHkiLCJ1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MiLCJtYXJrZG93biIsImFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlIiwiYXV0aG9yVXNlcklkIiwidmlzaWJpbGl0eSIsIm1lc3NhZ2VLZXkiLCJzdXBwb3J0VGlja2V0TWVzc2FnZUlkIiwibWVzc2FnZSIsInNhdmVkTWVzc2FnZSIsImdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyIsImV2ZW50S2V5Iiwic3VwcG9ydFRpY2tldEV2ZW50SWQiLCJldmVudCIsInNhdmVkRXZlbnQiLCJnZXRTdXBwb3J0VGlja2V0RXZlbnRzIiwibm90aWZpY2F0aW9uS2V5IiwiY3VzdG9tZXJOb3RpZmljYXRpb25JZCIsIm5vdGlmaWNhdGlvbiIsIkNVU1RPTUVSX05PVElGSUNBVElPTlMiLCJzYXZlZE5vdGlmaWNhdGlvbiIsIkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04iLCJnZXRDdXN0b21lck5vdGlmaWNhdGlvbnNCeVVzZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDMUYsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsV0FBVyxRQUFPLDJCQUEyQjtBQUNyRCxTQUFRQyxPQUFPLFFBQU8sYUFBYTtBQXVCbkMsTUFBTUMsTUFBTSxJQUFjQyxLQUFLRCxHQUFHO0FBQ2xDLE1BQU1FLGFBQWEsQ0FBQ0MsT0FBaUJWLFFBQVFVO0FBQzdDLE1BQU1DLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFLEdBQWFoQixRQUFRaUIsT0FBT0Q7QUFDdEQsTUFBTUUsUUFBUSxDQUFDQyxnQkFBd0JDLE1BQU0sRUFBRSxHQUFhLEdBQUdELGVBQWUsQ0FBQyxFQUFFSixPQUFPSyxNQUFNO0FBQzlGLE1BQU1DLGNBQWMsQ0FBQ0MsUUFBZ0JDLEtBQUssRUFBRSxHQUFheEIsV0FBVyxHQUFHdUIsT0FBTyxDQUFDLEVBQUVMLE9BQU9NLEtBQUssRUFBRTtBQUMvRixNQUFNQyxjQUFjLENBQUNSLE9BQWdCUyxTQUFTLEdBQUcsR0FBYXZCLFlBQVllLE9BQU9ELFNBQVMsS0FBS1M7QUFDL0YsTUFBTUMsa0JBQWtCLENBQUNWLE9BQWdCUyxTQUFTLEdBQUcsR0FBYVIsT0FBT0QsU0FBUyxJQUFJVyxJQUFJLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUN0RyxNQUFNSSwyQkFBMkIsT0FBT0Ms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
@@ -3,7 +3,7 @@ import type { ApiContext } from '../types/auth.types.js';
3
3
  /**
4
4
  * Options for CRUD operations
5
5
  */
6
- export interface CrudOptions {
6
+ export type CrudOptions = Readonly<{
7
7
  readonly sort?: ReadonlyArray<{
8
8
  readonly field: string;
9
9
  readonly direction: 'ASC' | 'DESC';
@@ -18,7 +18,7 @@ export interface CrudOptions {
18
18
  readonly ownership?: boolean;
19
19
  readonly customQueries?: ReadonlyArray<string>;
20
20
  readonly customObjects?: ReadonlyArray<string>;
21
- }
21
+ }>;
22
22
  /**
23
23
  * Get a single item from any collection by filters
24
24
  */