@nlabs/reaktor 1.6.3 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +48 -16
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +5 -1
  10. package/lib/actions/crm.js +226 -3
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +143 -45
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.js +59 -6
  45. package/lib/actions/videos.js +2 -2
  46. package/lib/adapters/arangoAdapter.js +1 -1
  47. package/lib/adapters/contentAdapter.js +2 -2
  48. package/lib/adapters/fileAdapter.js +1 -1
  49. package/lib/adapters/imageAdapter.js +1 -1
  50. package/lib/adapters/index.js +1 -1
  51. package/lib/adapters/messageAdapter.js +1 -1
  52. package/lib/adapters/postAdapter.js +1 -1
  53. package/lib/adapters/reaktorAdapter.js +1 -1
  54. package/lib/adapters/tagAdapter.d.ts +0 -1
  55. package/lib/adapters/tagAdapter.js +1 -2
  56. package/lib/adapters/userAdapter.d.ts +0 -1
  57. package/lib/adapters/userAdapter.js +1 -2
  58. package/lib/config.js +8 -2
  59. package/lib/constants/collections.d.ts +5 -1
  60. package/lib/constants/collections.js +6 -2
  61. package/lib/handlers/graphqlHandler.d.ts +2 -2
  62. package/lib/handlers/graphqlHandler.js +2 -19
  63. package/lib/index.d.ts +1 -1
  64. package/lib/index.js +2 -2
  65. package/lib/lambdas/actions/websockets.js +2 -2
  66. package/lib/lambdas/authorizer.js +2 -2
  67. package/lib/lambdas/connection.js +2 -2
  68. package/lib/lambdas/utils/message.js +2 -2
  69. package/lib/lambdas/utils/websocket.d.ts +1 -1
  70. package/lib/lambdas/utils/websocket.js +2 -2
  71. package/lib/mocks/conversation.js +1 -1
  72. package/lib/mocks/file.js +1 -1
  73. package/lib/mocks/group.js +1 -1
  74. package/lib/mocks/image.js +1 -1
  75. package/lib/mocks/post.js +1 -1
  76. package/lib/mocks/tag.js +1 -1
  77. package/lib/mocks/user.js +1 -1
  78. package/lib/mocks/video.js +1 -1
  79. package/lib/mutations/analytics/analytics.d.ts +1 -0
  80. package/lib/mutations/analytics/analytics.js +35 -0
  81. package/lib/mutations/content/content.js +2 -2
  82. package/lib/mutations/crm/crm.js +18 -4
  83. package/lib/mutations/events/events.js +2 -2
  84. package/lib/mutations/flags/flags.d.ts +1 -0
  85. package/lib/mutations/flags/flags.js +33 -0
  86. package/lib/mutations/groups/groups.js +2 -2
  87. package/lib/mutations/images/images.js +2 -2
  88. package/lib/mutations/index.d.ts +3 -1
  89. package/lib/mutations/index.js +13 -3
  90. package/lib/mutations/locations/locations.js +2 -2
  91. package/lib/mutations/messages/messages.js +2 -2
  92. package/lib/mutations/personas/personas.js +2 -2
  93. package/lib/mutations/posts/posts.js +2 -2
  94. package/lib/mutations/reactions/reactions.js +2 -2
  95. package/lib/mutations/rum/rum.js +2 -2
  96. package/lib/mutations/statistics/statistics.js +2 -2
  97. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  98. package/lib/mutations/tags/tags.js +2 -2
  99. package/lib/mutations/users/users.js +30 -17
  100. package/lib/mutations/videos/videos.js +2 -2
  101. package/lib/objectTypes/analytics.d.ts +8 -0
  102. package/lib/objectTypes/analytics.js +147 -0
  103. package/lib/objectTypes/app.js +2 -2
  104. package/lib/objectTypes/bankAccount.js +2 -2
  105. package/lib/objectTypes/connection.js +2 -2
  106. package/lib/objectTypes/content.js +2 -2
  107. package/lib/objectTypes/conversation.js +2 -2
  108. package/lib/objectTypes/creditCard.js +2 -2
  109. package/lib/objectTypes/crm.d.ts +5 -0
  110. package/lib/objectTypes/crm.js +64 -2
  111. package/lib/objectTypes/document.js +1 -1
  112. package/lib/objectTypes/error.js +2 -2
  113. package/lib/objectTypes/event.js +2 -2
  114. package/lib/objectTypes/external.js +2 -2
  115. package/lib/objectTypes/file.js +2 -2
  116. package/lib/objectTypes/filter.js +2 -2
  117. package/lib/objectTypes/flag.d.ts +1 -0
  118. package/lib/objectTypes/flag.js +32 -0
  119. package/lib/objectTypes/group.js +2 -2
  120. package/lib/objectTypes/iapSubscription.js +2 -2
  121. package/lib/objectTypes/image.d.ts +1 -1
  122. package/lib/objectTypes/image.js +2 -2
  123. package/lib/objectTypes/index.d.ts +2 -0
  124. package/lib/objectTypes/index.js +3 -1
  125. package/lib/objectTypes/location.js +2 -2
  126. package/lib/objectTypes/message.js +2 -2
  127. package/lib/objectTypes/passcode.js +2 -2
  128. package/lib/objectTypes/persona.js +2 -2
  129. package/lib/objectTypes/plan.js +2 -2
  130. package/lib/objectTypes/post.js +2 -2
  131. package/lib/objectTypes/query.js +2 -2
  132. package/lib/objectTypes/reaction.js +2 -2
  133. package/lib/objectTypes/relation.js +2 -2
  134. package/lib/objectTypes/rum.js +4 -4
  135. package/lib/objectTypes/search.js +2 -2
  136. package/lib/objectTypes/statistics.js +2 -2
  137. package/lib/objectTypes/subscription.js +2 -2
  138. package/lib/objectTypes/tag.js +2 -2
  139. package/lib/objectTypes/user.js +2 -2
  140. package/lib/objectTypes/video.d.ts +1 -1
  141. package/lib/objectTypes/video.js +2 -2
  142. package/lib/queries/analytics/analytics.d.ts +1 -0
  143. package/lib/queries/analytics/analytics.js +41 -0
  144. package/lib/queries/content/content.js +2 -2
  145. package/lib/queries/crm/crm.js +15 -4
  146. package/lib/queries/events/events.js +2 -2
  147. package/lib/queries/flags/flags.d.ts +1 -0
  148. package/lib/queries/flags/flags.js +16 -0
  149. package/lib/queries/groups/groups.js +2 -2
  150. package/lib/queries/images/images.js +2 -2
  151. package/lib/queries/index.d.ts +3 -1
  152. package/lib/queries/index.js +13 -3
  153. package/lib/queries/locations/locations.js +2 -2
  154. package/lib/queries/messages/messages.js +1 -1
  155. package/lib/queries/personas/personas.js +2 -2
  156. package/lib/queries/posts/posts.js +2 -2
  157. package/lib/queries/query/query.js +2 -2
  158. package/lib/queries/reactions/reactions.js +2 -2
  159. package/lib/queries/statistics/statistics.js +2 -2
  160. package/lib/queries/subscriptions/subscriptions.js +1 -1
  161. package/lib/queries/tags/tags.js +2 -2
  162. package/lib/queries/users/users.js +2 -2
  163. package/lib/queries/videos/videos.js +2 -2
  164. package/lib/templates/email/layout.js +1 -1
  165. package/lib/templates/email/passwordForgot.js +1 -1
  166. package/lib/templates/email/passwordRecovery.js +1 -1
  167. package/lib/templates/email/verifyEmail.js +1 -1
  168. package/lib/templates/email/welcome.js +1 -1
  169. package/lib/templates/sms/passwordForgot.js +1 -1
  170. package/lib/templates/sms/passwordRecovery.js +1 -1
  171. package/lib/templates/sms/verifyEmail.js +1 -1
  172. package/lib/templates/sms/verifyPhone.js +1 -1
  173. package/lib/templates/sms/welcome.js +1 -1
  174. package/lib/types/analytics.types.d.ts +92 -0
  175. package/lib/types/analytics.types.js +6 -0
  176. package/lib/types/apps.types.d.ts +1 -1
  177. package/lib/types/apps.types.js +2 -2
  178. package/lib/types/arangodb.types.d.ts +2 -2
  179. package/lib/types/arangodb.types.js +2 -2
  180. package/lib/types/auth.types.d.ts +3 -1
  181. package/lib/types/auth.types.js +2 -2
  182. package/lib/types/connections.types.d.ts +1 -1
  183. package/lib/types/connections.types.js +2 -2
  184. package/lib/types/content.types.d.ts +1 -1
  185. package/lib/types/content.types.js +2 -2
  186. package/lib/types/conversations.types.d.ts +1 -1
  187. package/lib/types/conversations.types.js +2 -2
  188. package/lib/types/crm.types.d.ts +38 -1
  189. package/lib/types/crm.types.js +2 -2
  190. package/lib/types/email.types.d.ts +1 -1
  191. package/lib/types/email.types.js +2 -2
  192. package/lib/types/error.types.js +1 -1
  193. package/lib/types/files.types.d.ts +1 -1
  194. package/lib/types/files.types.js +2 -2
  195. package/lib/types/flags.types.d.ts +28 -0
  196. package/lib/types/flags.types.js +3 -0
  197. package/lib/types/google.types.d.ts +1 -1
  198. package/lib/types/google.types.js +2 -2
  199. package/lib/types/groups.types.d.ts +1 -1
  200. package/lib/types/groups.types.js +2 -2
  201. package/lib/types/images.types.d.ts +1 -1
  202. package/lib/types/images.types.js +2 -2
  203. package/lib/types/index.d.ts +3 -1
  204. package/lib/types/index.js +4 -2
  205. package/lib/types/locations.types.d.ts +1 -1
  206. package/lib/types/locations.types.js +2 -2
  207. package/lib/types/messages.types.d.ts +1 -1
  208. package/lib/types/messages.types.js +2 -2
  209. package/lib/types/notifications.types.d.ts +1 -1
  210. package/lib/types/notifications.types.js +2 -2
  211. package/lib/types/payments.types.d.ts +4 -1
  212. package/lib/types/payments.types.js +2 -2
  213. package/lib/types/personas.types.js +1 -1
  214. package/lib/types/posts.types.d.ts +1 -1
  215. package/lib/types/posts.types.js +2 -2
  216. package/lib/types/rum.types.d.ts +3 -3
  217. package/lib/types/rum.types.js +2 -2
  218. package/lib/types/statistics.types.js +1 -1
  219. package/lib/types/tags.types.d.ts +1 -1
  220. package/lib/types/tags.types.js +2 -2
  221. package/lib/types/users.types.d.ts +1 -1
  222. package/lib/types/users.types.js +2 -2
  223. package/lib/types/videos.types.d.ts +1 -1
  224. package/lib/types/videos.types.js +2 -2
  225. package/lib/types/websockets.types.d.ts +1 -1
  226. package/lib/types/websockets.types.js +2 -2
  227. package/lib/upload.js +4 -9
  228. package/lib/utils/adapterUtils.d.ts +1 -1
  229. package/lib/utils/adapterUtils.js +2 -2
  230. package/lib/utils/analyticsUtils.d.ts +1 -1
  231. package/lib/utils/analyticsUtils.js +2 -2
  232. package/lib/utils/aqlHelpers.d.ts +1 -1
  233. package/lib/utils/aqlHelpers.js +2 -2
  234. package/lib/utils/arangodbUtils.d.ts +9 -1
  235. package/lib/utils/arangodbUtils.js +10 -2
  236. package/lib/utils/authUtils.js +2 -2
  237. package/lib/utils/awsUtils.js +2 -2
  238. package/lib/utils/collectionRegistry.d.ts +1 -1
  239. package/lib/utils/collectionRegistry.js +17 -2
  240. package/lib/utils/contextUtils.d.ts +2 -2
  241. package/lib/utils/contextUtils.js +2 -2
  242. package/lib/utils/dbI18n.example.d.ts +1 -1
  243. package/lib/utils/dbI18n.example.js +2 -2
  244. package/lib/utils/dbI18n.js +2 -2
  245. package/lib/utils/googleTranslate.d.ts +1 -1
  246. package/lib/utils/googleTranslate.js +2 -2
  247. package/lib/utils/graphqlUtils.d.ts +1 -0
  248. package/lib/utils/graphqlUtils.js +1 -1
  249. package/lib/utils/imageUtils.js +1 -1
  250. package/lib/utils/index.d.ts +1 -1
  251. package/lib/utils/index.js +2 -2
  252. package/lib/utils/languageDetection.js +1 -1
  253. package/lib/utils/localeUtils.d.ts +1 -1
  254. package/lib/utils/localeUtils.example.d.ts +1 -1
  255. package/lib/utils/localeUtils.example.js +2 -2
  256. package/lib/utils/localeUtils.js +2 -2
  257. package/lib/utils/middlewareUtils.js +1 -1
  258. package/lib/utils/queryBuilder.d.ts +1 -1
  259. package/lib/utils/queryBuilder.js +2 -2
  260. package/lib/utils/schemaUtils.js +1 -1
  261. package/lib/utils/sessionUtils.js +2 -2
  262. package/lib/utils/stripeUtils.d.ts +1 -1
  263. package/lib/utils/stripeUtils.js +2 -2
  264. package/lib/utils/templateUtils.js +1 -1
  265. package/lib/utils/testUtils.js +2 -2
  266. package/lib/utils/translationQueue.d.ts +1 -1
  267. package/lib/utils/translationQueue.example.d.ts +1 -1
  268. package/lib/utils/translationQueue.example.js +2 -2
  269. package/lib/utils/translationQueue.js +2 -2
  270. package/lib/videoProcessing.js +1 -1
  271. package/package.json +43 -80
  272. package/lib/actions/websockets.d.ts +0 -20
  273. package/lib/actions/websockets.js +0 -164
  274. package/lib/mocks/nlabs.png +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { CreateJobCommand, DescribeEndpointsCommand, MediaConvertClient } from '@aws-sdk/client-mediaconvert';
5
5
  import { get as httpGet } from '@nlabs/rip-hunter';
6
6
  import { createHash, parseArangoId, parseChar, parseId, parseString } from '@nlabs/utils/parsers/strings';
@@ -1195,4 +1195,4 @@ export const deleteVideo = async (context, videoId)=>{
1195
1195
  }
1196
1196
  };
1197
1197
 
1198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvdmlkZW9zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBDcmVhdGVKb2JDb21tYW5kLFxuICBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQsXG4gIE1lZGlhQ29udmVydENsaWVudFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtbWVkaWFjb252ZXJ0JztcbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uc0J5VXNlcn0gZnJvbSAnLi4vbGFtYmRhcy9hY3Rpb25zL3dlYnNvY2tldHMuanMnO1xuaW1wb3J0IHt3c0NsaWVudH0gZnJvbSAnLi4vbGFtYmRhcy91dGlscy93ZWJzb2NrZXQuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5LCBidWlsZFRhZ3NRdWVyeX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRBd3NDcmVkZW50aWFsc30gZnJvbSAnLi4vdXRpbHMvYXdzVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7XG4gIHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkLFxuICBzM0RlbGV0ZSxcbiAgczNEZWxldGVMaXN0LFxuICBzM0dldEJ1Y2tldCxcbiAgczNHZXRTaWduZWRVcmwsXG4gIHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCxcbiAgczNQdXRcbn0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBWaWRlb0VkZ2VUeXBlLFxuICBWaWRlb011bHRpcGFydFVwbG9hZFR5cGUsXG4gIFZpZGVvT3B0aW9ucyxcbiAgVmlkZW9UeXBlLFxuICBWaWRlb1VwbG9hZFBhcnRJbnB1dCxcbiAgVmlkZW9VcGxvYWRQYXJ0VXJsLFxuICBWaWRlb1VybERhdGFcbn0gZnJvbSAnLi4vdHlwZXMvdmlkZW9zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICd2aWRlb3MnO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IFZJREVPX1BMQVlCQUNLX0RJUiA9ICd2aWRlby1wbGF5YmFjayc7XG5cbmxldCBtZWRpYUNvbnZlcnRFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRDbGllbnQgPSAoZW5kcG9pbnQ/OiBzdHJpbmcpOiBNZWRpYUNvbnZlcnRDbGllbnQgPT4gbmV3IE1lZGlhQ29udmVydENsaWVudCh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICBlbmRwb2ludCxcbiAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbn0pO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZihtZWRpYUNvbnZlcnRFbmRwb2ludCkge1xuICAgIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbiAgfVxuXG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5lbmRwb2ludCcpO1xuXG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0TWVkaWFDb252ZXJ0Q2xpZW50KCk7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQoe01heFJlc3VsdHM6IDF9KSk7XG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gZW5kcG9pbnRzLkVuZHBvaW50cz8uWzBdPy5Vcmw7XG5cbiAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xufTtcblxuY29uc3QgZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHBhcnNlZERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKHBhcnNlZERvY0lkKSB7XG4gICAgcmV0dXJuIFtwYXJzZWREb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtpdGVtS2V5fWAsXG4gICAgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7aXRlbUtleX1gXG4gIF07XG59O1xuXG5jb25zdCBub3JtYWxpemVWaWRlb1ByaXZhY3kgPSAocHJpdmFjeTogdW5rbm93bik6ICdmcmllbmRzJyB8ICdwcml2YXRlJyB8ICdwdWJsaWMnIHwgJ3ZpcCcgPT4ge1xuICBzd2l0Y2goU3RyaW5nKHByaXZhY3kgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gJ2ZyaWVuZHMnO1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuICdwcml2YXRlJztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuICd2aXAnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbn07XG5cbmNvbnN0IGNhblZpZXdWaWRlbyA9IChcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgdmlld2VyVXNlcklkOiBzdHJpbmcsXG4gIGFjY2Vzczoge1xuICAgIHJlYWRvbmx5IGNhblZpZXdGcmllbmRzOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhblZpZXdWaXA6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXNPd25lcjogYm9vbGVhbjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHByaXZhY3kgPSBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpO1xuXG4gIGlmKGFjY2Vzcy5pc093bmVyIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSA9PT0gdmlld2VyVXNlcklkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2gocHJpdmFjeSkge1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3RnJpZW5kcztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3VmlwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaXN0OiBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9PixcbiAgc2Vzc2lvblVzZXJJZDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBTdHJpbmcobGlzdFswXT8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gIGlmKGlzT3duZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuVmlld0ZyaWVuZHM6IHRydWUsXG4gICAgICBjYW5WaWV3VmlwOiB0cnVlLFxuICAgICAgaXNPd25lcjogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogZmFsc2UsXG4gICAgICBjYW5WaWV3VmlwOiBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGxldCBjYW5WaWV3RnJpZW5kcyA9IGZhbHNlO1xuICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuICBjb25zdCBtZWRpYUl0ZW1LZXkgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbUtleSB8fCAnJyk7XG4gIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbVR5cGUgfHwgJycpO1xuXG4gIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgIGNhblZpZXdGcmllbmRzID0gISFyZWxhdGlvbnNoaXA/LmlzRnJpZW5kO1xuICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhblZpZXdGcmllbmRzLFxuICAgIGNhblZpZXdWaXAsXG4gICAgaXNPd25lcjogZmFsc2VcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVZpZGVvT3B0aW9ucyA9IChvcHRpb25zOiBWaWRlb09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzAsIHR5cGUgPSAnZGVmYXVsdCd9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9PcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgY29uc3QgcmVhY3Rpb25RdWVyeSA9IGJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5KGZpZWxkLnJlcGxhY2UoJ0NvdW50JywgJycpLCAndicsICd2aWRlb3MnKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHJlYWN0aW9uUXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goYCR7ZmllbGR9OiR7ZmllbGR9YCk7XG4gICAgICByZXR1cm4gc2VsZWN0cztcbiAgICB9XG5cbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoRk9SIHZpZGVvLCByIElOIElOQk9VTkQgdi5faWQgcmVhY3Rpb25zIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXMgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgY29uc3QgdGFnc1F1ZXJ5ID0gYnVpbGRUYWdzUXVlcnkoJ3YnKTtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2godGFnc1F1ZXJ5KTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHYudXNlcklkID09IHUuX2tleSBMSU1JVCAxIFJFVFVSTiB1KWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdwcml2YWN5Jzoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb3NCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIgPSAwLFxuICB0bzogbnVtYmVyID0gMzBcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5VXNlcic7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY3VzdG9tUXVlcmllcyA9IFtcbiAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gIF07XG5cbiAgcmV0dXJuIGdldExpc3RCeTxWaWRlb1R5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ3ZpZGVvcycsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgICBjdXN0b21RdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICAgIH1cbiAgKS5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvQ291bnRCeUl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9Db3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIHYgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiB2Ll9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIHYudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb3NCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICBMRVQgdiA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKHYpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvblVzZXJJZCk7XG5cbiAgICBpZihhY2Nlc3MuaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25Vc2VySWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogVmlkZW9PcHRpb25zXG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwidmlkZW9zXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInZpZGVvc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIHYuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh2LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3YnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBtZWRpYSA/IG1lZGlhLml0ZW1LZXkgOiBudWxsLFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBtZWRpYSA/IG1lZGlhLml0ZW1UeXBlIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvbklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gY2FuVmlld1ZpZGVvKHZpZGVvLCBzZXNzaW9uSWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvJztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB7X2tleTogZm9ybWF0VmlkZW9JZH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VyVmlkZW9zID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIHZpZGVvVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICd2aWRlb3MnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gdmlkZW9JZDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0ZpbGVuYW1lID0gKHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1wNGA7XG5cbiAgc3dpdGNoKHZpZGVvVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VicGA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vd2VibSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYm1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vcXVpY2t0aW1lJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubW92YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBmaWxlbmFtZTtcbn07XG5cbmNvbnN0IGdldFZpZGVvVXBsb2FkS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJyk7XG5cbmNvbnN0IHNhdmVWaWRlb1RodW1ibmFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB0aHVtYkJhc2U2NDogc3RyaW5nID0gJycsXG4gIHRodW1iRmlsZVR5cGU6IHN0cmluZyA9ICdpbWFnZS9qcGVnJ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCF0aHVtYkJhc2U2NCB8fCAhdGh1bWJCYXNlNjQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEJhc2U2NCA9IHRodW1iQmFzZTY0LnN1YnN0cih0aHVtYkJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG5cbiAgaWYoIWJ1ZmZlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhd2FpdCBzM1B1dCh7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogdGh1bWJGaWxlVHlwZSxcbiAgICBLZXk6IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdmlkZW9JZCwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpXG4gIH0pO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWREb2MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlbyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXZpZGVvIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSAhPT0gc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICByZXR1cm4gdmlkZW87XG59O1xuXG5jb25zdCBnZXRWaWRlb1BhcnRVcmxzID0gYXN5bmMgKFxuICBrZXk6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydE51bWJlcnM6IG51bWJlcltdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiBQcm9taXNlLmFsbChwYXJ0TnVtYmVycy5tYXAoYXN5bmMgKHBhcnROdW1iZXIpID0+ICh7XG4gIHBhcnROdW1iZXIsXG4gIHVybDogYXdhaXQgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsKHtcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgS2V5OiBrZXksXG4gICAgUGFydE51bWJlcjogcGFydE51bWJlcixcbiAgICBVcGxvYWRJZDogdXBsb2FkSWRcbiAgfSlcbn0pKSk7XG5cbmNvbnN0IGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZighb3duZXJVc2VySWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uZWN0aW9ucyA9IGF3YWl0IGdldENvbm5lY3Rpb25zQnlVc2VyKG93bmVyVXNlcklkKS5jYXRjaCgoKSA9PiBbXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25JZHMgPSBjb25uZWN0aW9uc1xuICAgIC5tYXAoKGNvbm5lY3Rpb24pID0+IHBhcnNlU3RyaW5nKGNvbm5lY3Rpb24/LmNvbm5lY3Rpb25JZCB8fCBjb25uZWN0aW9uPy5zb2NrZXRJZCB8fCAnJywgMzIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmlsdGVyKChjb25uZWN0aW9uSWQsIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoY29ubmVjdGlvbklkKSA9PT0gaW5kZXgpO1xuXG4gIGlmKCFjb25uZWN0aW9uSWRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHdzQ2xpZW50LnNlbmQoY29ubmVjdGlvbklkcywge1xuICAgIGFjdGlvbjogJ3ZpZGVvLnByb2Nlc3NpbmcuY29tcGxldGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICB2aWRlb1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG59O1xuXG5jb25zdCBnZXRWaWRlb1BsYXliYWNrS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgZ2V0UGF0aFVzZXJWaWRlb3ModXNlcklkLCB2aWRlb0lkLCAndmlkZW8vbXA0JywgVklERU9fUExBWUJBQ0tfRElSKTtcblxuY29uc3QgZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QnO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHBsYXliYWNrS2V5ID0gU3RyaW5nKHZpZGVvPy5wbGF5YmFja0tleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzb3VyY2VLZXkgfHwgc291cmNlS2V5ID09PSBwbGF5YmFja0tleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgczNEZWxldGUoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBzb3VyY2VLZXlcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHZpZGVvSWQ6IHZpZGVvPy52aWRlb0lkIHx8IHZpZGVvPy5fa2V5fSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2hvdWxkVHJhbnNjb2RlVmlkZW8gPSAodmlkZW86IFZpZGVvVHlwZSA9IHt9KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZpbGVUeXBlID0gU3RyaW5nKHZpZGVvPy5maWxlVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBpZighZmlsZVR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAhW1xuICAgICd2aWRlby9tcDQnLFxuICAgICd2aWRlby93ZWJtJ1xuICBdLmluY2x1ZGVzKGZpbGVUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iJztcbiAgY29uc3Qgcm9sZUFybiA9IFN0cmluZyhDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LnJvbGVBcm4nKSB8fCAnJyk7XG4gIGNvbnN0IGJ1Y2tldCA9IHMzR2V0QnVja2V0KCkgfHwgQ29uZmlnLmdldCgnYXdzLnMzLkJ1Y2tldCcpO1xuICBjb25zdCB2aWRlb0lkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXkgfHwgJycpKTtcbiAgY29uc3QgdXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3Qgc291cmNlS2V5ID0gU3RyaW5nKHZpZGVvPy5zb3VyY2VLZXkgfHwgdmlkZW8/LnVwbG9hZEtleSB8fCAnJyk7XG5cbiAgaWYoIXJvbGVBcm4gfHwgIWJ1Y2tldCB8fCAhdmlkZW9JZCB8fCAhdXNlcklkIHx8ICFzb3VyY2VLZXkpIHtcbiAgICBpZih2aWRlb0lkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHByb2Nlc3NpbmdFcnJvcjogW1xuICAgICAgICAgICFyb2xlQXJuID8gJ21pc3NpbmdfbWVkaWFjb252ZXJ0X3JvbGVfYXJuJyA6ICcnLFxuICAgICAgICAgICFidWNrZXQgPyAnbWlzc2luZ19zM19idWNrZXQnIDogJycsXG4gICAgICAgICAgIXVzZXJJZCA/ICdtaXNzaW5nX3VzZXJfaWQnIDogJycsXG4gICAgICAgICAgIXNvdXJjZUtleSA/ICdtaXNzaW5nX3NvdXJjZV9rZXknIDogJydcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCcpLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoZW5kcG9pbnQpO1xuICAgIGNvbnN0IHF1ZXVlID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucXVldWVBcm4nKSB8fCAnJyk7XG4gICAgY29uc3Qgb3V0cHV0RGVzdGluYXRpb24gPSBgczM6Ly8ke2J1Y2tldH0vdXNlcnMvJHt1c2VySWR9LyR7VklERU9fUExBWUJBQ0tfRElSfS9gO1xuICAgIGNvbnN0IGpvYiA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVKb2JDb21tYW5kKHtcbiAgICAgIC4uLihxdWV1ZSA/IHtRdWV1ZTogcXVldWV9IDoge30pLFxuICAgICAgUm9sZTogcm9sZUFybixcbiAgICAgIFNldHRpbmdzOiB7XG4gICAgICAgIElucHV0czogW3tcbiAgICAgICAgICBBdWRpb1NlbGVjdG9yczoge1xuICAgICAgICAgICAgJ0F1ZGlvIFNlbGVjdG9yIDEnOiB7XG4gICAgICAgICAgICAgIERlZmF1bHRTZWxlY3Rpb246ICdERUZBVUxUJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgRmlsZUlucHV0OiBgczM6Ly8ke2J1Y2tldH0vJHtzb3VyY2VLZXl9YCxcbiAgICAgICAgICBUaW1lY29kZVNvdXJjZTogJ1pFUk9CQVNFRCcsXG4gICAgICAgICAgVmlkZW9TZWxlY3Rvcjoge1xuICAgICAgICAgICAgUm90YXRlOiAnQVVUTydcbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICBPdXRwdXRHcm91cHM6IFt7XG4gICAgICAgICAgTmFtZTogJ01QNCcsXG4gICAgICAgICAgT3V0cHV0R3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgRmlsZUdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgRGVzdGluYXRpb246IG91dHB1dERlc3RpbmF0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHlwZTogJ0ZJTEVfR1JPVVBfU0VUVElOR1MnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBPdXRwdXRzOiBbe1xuICAgICAgICAgICAgQXVkaW9EZXNjcmlwdGlvbnM6IFt7XG4gICAgICAgICAgICAgIEF1ZGlvU291cmNlTmFtZTogJ0F1ZGlvIFNlbGVjdG9yIDEnLFxuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQWFjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIEJpdHJhdGU6IDEyODAwMCxcbiAgICAgICAgICAgICAgICAgIENvZGluZ01vZGU6ICdDT0RJTkdfTU9ERV8yXzAnLFxuICAgICAgICAgICAgICAgICAgU2FtcGxlUmF0ZTogNDgwMDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvZGVjOiAnQUFDJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIENvbnRhaW5lclNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIENvbnRhaW5lcjogJ01QNCcsXG4gICAgICAgICAgICAgIE1wNFNldHRpbmdzOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFZpZGVvRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgQ29kZWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIENvZGVjOiAnSF8yNjQnLFxuICAgICAgICAgICAgICAgIEgyNjRTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgTWF4Qml0cmF0ZTogTnVtYmVyKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQubWF4Qml0cmF0ZScsIDUwMDAwMDApKSxcbiAgICAgICAgICAgICAgICAgIFJhdGVDb250cm9sTW9kZTogJ1FWQlInLFxuICAgICAgICAgICAgICAgICAgU2NlbmVDaGFuZ2VEZXRlY3Q6ICdUUkFOU0lUSU9OX0RFVEVDVElPTicsXG4gICAgICAgICAgICAgICAgICBRdWFsaXR5VHVuaW5nTGV2ZWw6ICdTSU5HTEVfUEFTUydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIFVzZXJNZXRhZGF0YToge1xuICAgICAgICBwbGF5YmFja0tleTogZ2V0VmlkZW9QbGF5YmFja0tleSh1c2VySWQsIHZpZGVvSWQpLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIHZpZGVvSWRcbiAgICAgIH1cbiAgICB9IGFzIGFueSkpO1xuXG4gICAgY29uc3Qgam9iSWQgPSBTdHJpbmcoam9iPy5Kb2I/LklkIHx8ICcnKTtcblxuICAgIGlmKGpvYklkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbWVkaWFDb252ZXJ0Sm9iSWQ6IGpvYklkLFxuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JJZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdtZWRpYWNvbnZlcnRfam9iX2ZhaWxlZCcsXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7c291cmNlS2V5LCB1c2VySWQsIHZpZGVvSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAge1xuICAgIGhsc0tleSA9ICcnLFxuICAgIHBsYXliYWNrRmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBwbGF5YmFja0tleSA9ICcnLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMgPSAncmVhZHknLFxuICAgIHN0cmVhbVR5cGUgPSAncHJvZ3Jlc3NpdmUnXG4gIH06IHtcbiAgICBobHNLZXk/OiBzdHJpbmc7XG4gICAgcGxheWJhY2tGaWxlVHlwZT86IHN0cmluZztcbiAgICBwbGF5YmFja0tleT86IHN0cmluZztcbiAgICBwcm9jZXNzaW5nU3RhdHVzPzogc3RyaW5nO1xuICAgIHN0cmVhbVR5cGU/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWaWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQpO1xuICBjb25zdCBmb3JtYXRQbGF5YmFja0tleSA9IHBsYXliYWNrS2V5IHx8IGdldFZpZGVvUGxheWJhY2tLZXkoU3RyaW5nKGN1cnJlbnRWaWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IHNvdXJjZURlbGV0ZWQgPSBwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknXG4gICAgPyBhd2FpdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdChjb250ZXh0LCB7XG4gICAgICAuLi5jdXJyZW50VmlkZW8sXG4gICAgICBwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXlcbiAgICB9IGFzIFZpZGVvVHlwZSlcbiAgICA6IGZhbHNlO1xuICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAuLi4oaGxzS2V5ID8ge2hsc0tleX0gOiB7fSksXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICAuLi4oZm9ybWF0UGxheWJhY2tLZXkgPyB7cGxheWJhY2tLZXk6IGZvcm1hdFBsYXliYWNrS2V5fSA6IHt9KSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIC4uLihzb3VyY2VEZWxldGVkID8ge3NvdXJjZUtleTogJycsIHVwbG9hZEtleTogJyd9IDoge30pLFxuICAgIHN0cmVhbVR5cGVcbiAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcblxuICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgYXdhaXQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFZpZGVvO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhaWxWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGltaXQ6IG51bWJlciA9IDEwXG4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNhZmVMaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihsaW1pdCB8fCAxMCksIDUwKSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHYgSU4gdmlkZW9zXG4gICAgICBGSUxURVIgdi51cGxvYWRTdGF0dXMgPT0gXCJ1cGxvYWRlZFwiXG4gICAgICBGSUxURVIgdi5wcm9jZXNzaW5nU3RhdHVzICE9IFwicmVhZHlcIlxuICAgICAgRklMVEVSIHYuZmlsZVR5cGUgIT0gXCJ2aWRlby9tcDRcIlxuICAgICAgRklMVEVSICFIQVModiwgXCJtZWRpYUNvbnZlcnRKb2JJZFwiKSB8fCB2Lm1lZGlhQ29udmVydEpvYklkID09IFwiXCJcbiAgICAgIFNPUlQgdi5hZGRlZCBERVNDXG4gICAgICBMSU1JVCAke3NhZmVMaW1pdH1cbiAgICAgIFJFVFVSTiB2XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBWaWRlb1R5cGVbXSk7XG4gICAgY29uc3Qgam9iSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHZpZGVvIG9mIGxpc3QpIHtcbiAgICAgIGNvbnN0IGpvYklkID0gYXdhaXQgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IoY29udGV4dCwgdmlkZW8pO1xuXG4gICAgICBpZihqb2JJZCkge1xuICAgICAgICBqb2JJZHMucHVzaChqb2JJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkcztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwVmlkZW9VcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICd2aWRlb3MnLFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdmlkZW9JZFxufTogVmlkZW9VcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgdmlkZW9OYW1lID0gZ2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSk7XG4gIGNvbnN0IHZpZGVvVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke3ZpZGVvTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpbWFnZURpciA9ICd2aWRlb3MnLFxuICB2aWRlb0RpciA9ICd2aWRlb3MnLFxuICB2aWRlb0lkLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogYW55KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIXZpZGVvSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrZXlEaXIgPSB2aWRlb0RpciB8fCBpbWFnZURpciB8fCAndmlkZW9zJztcbiAgY29uc3QgdmlkZW9LZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtrZXlEaXJ9LyR7Z2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSl9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke3ZpZGVvS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb1NpZ25lZEtleVVybCA9IGFzeW5jIChrZXk6IHN0cmluZyA9ICcnLCBidWNrZXQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB2aWRlb0tleSA9IFN0cmluZyhrZXkgfHwgJycpLnRyaW0oKTtcblxuICBpZighdmlkZW9LZXkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB2aWRlb09iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgIEJvZHk6IGJ1ZmZlcixcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCBmaWxlVHlwZSwgJ3ZpZGVvcycpXG4gIH07XG5cbiAgYXdhaXQgczNQdXQodmlkZW9PYmopO1xuXG4gIHJldHVybiB7XG4gICAgZmlsZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgZmlsZVR5cGUsXG4gICAgdmlkZW9JZFxuICB9IGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlICYge2ZpbGVOYW1lPzogc3RyaW5nOyBmaWxlU2l6ZT86IG51bWJlcjsgcGFydENvdW50PzogbnVtYmVyfSxcbiAgcGFydENvdW50OiBudW1iZXIgPSAxXG4pOiBQcm9taXNlPFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZmlsZVNpemUsXG4gICAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcHJpdmFjeSxcbiAgICB0aHVtYkJhc2U2NCA9ICcnLFxuICAgIHRodW1iRmlsZVR5cGUgPSAnaW1hZ2UvanBlZycsXG4gICAgdHlwZSA9ICd2aWRlbycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpIHx8IGNyZWF0ZUhhc2goYHZpZGVvLSR7c2Vzc2lvbklkfS0ke0RhdGUubm93KCl9LSR7U3RyaW5nKHZpZGVvPy5maWxlTmFtZSB8fCAnJyl9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBrZXkgPSBnZXRWaWRlb1VwbG9hZEtleShzZXNzaW9uSWQsIGZvcm1hdFZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3Qgc2FmZVBhcnRDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihwYXJ0Q291bnQgfHwgdmlkZW8/LnBhcnRDb3VudCB8fCAxKSwgMTAwMDApKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwbG9hZCA9IGF3YWl0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIEtleToga2V5LFxuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgaXRlbUlkOiBmb3JtYXRJdGVtSWQgfHwgJycsXG4gICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSB8fCAnJyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB1cGxvYWRJZCA9IFN0cmluZyh1cGxvYWQ/LlVwbG9hZElkIHx8ICcnKTtcblxuICAgIGlmKCF1cGxvYWRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHZpZGVvIHVwbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGhhc1RodW1iID0gYXdhaXQgc2F2ZVZpZGVvVGh1bWJuYWlsKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQsIHRodW1iQmFzZTY0LCB0aHVtYkZpbGVUeXBlKTtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBmaWxlU2l6ZSxcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncGVuZGluZ191cGxvYWQnLFxuICAgICAgc291cmNlS2V5OiBrZXksXG4gICAgICAuLi4oaGFzVGh1bWIgPyB7dGh1bWJGaWxlVHlwZX0gOiB7fSksXG4gICAgICB0eXBlLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB1cGxvYWRLZXk6IGtleSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGluZycsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuICAgIGNvbnN0IG5ld1ZpZGVvID0gYXdhaXQgYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpO1xuXG4gICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICBhd2FpdCBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0TnVtYmVycyA9IEFycmF5LmZyb20oe2xlbmd0aDogc2FmZVBhcnRDb3VudH0sIChfdmFsdWUsIGluZGV4KSA9PiBpbmRleCArIDEpO1xuICAgIGNvbnN0IHBhcnRVcmxzID0gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIHVwbG9hZElkLCBwYXJ0TnVtYmVycyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0OiBzM0dldEJ1Y2tldCgpLFxuICAgICAga2V5LFxuICAgICAgcGFydFNpemU6IERFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSxcbiAgICAgIHBhcnRVcmxzLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB2aWRlbzogbmV3VmlkZW8sXG4gICAgICB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkXG4gICAgfTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1VwbG9hZFBhcnRVcmxbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIGZvcm1hdFVwbG9hZElkLCBwYXJ0TnVtYmVycy5tYXAoKHBhcnROdW1iZXIpID0+IE51bWJlcihwYXJ0TnVtYmVyKSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9VcGxvYWRQYXJ0VXJsW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnRzOiBWaWRlb1VwbG9hZFBhcnRJbnB1dFtdID0gW11cbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCwgdmlkZW8/LmZpbGVUeXBlKSk7XG4gICAgY29uc3QgdXBsb2FkUGFydHMgPSBwYXJ0c1xuICAgICAgLm1hcCgocGFydCkgPT4gKHtcbiAgICAgICAgRVRhZzogU3RyaW5nKHBhcnQ/LmV0YWcgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgUGFydE51bWJlcjogTnVtYmVyKHBhcnQ/LnBhcnROdW1iZXIgfHwgMClcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5FVGFnICYmIHBhcnQuUGFydE51bWJlciA+IDApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5QYXJ0TnVtYmVyIC0gYi5QYXJ0TnVtYmVyKTtcblxuICAgIGlmKCFrZXkgfHwgIWZvcm1hdFVwbG9hZElkIHx8ICF1cGxvYWRQYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB2aWRlbyB1cGxvYWQgZGF0YS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIEtleToga2V5LFxuICAgICAgTXVsdGlwYXJ0VXBsb2FkOiB7XG4gICAgICAgIFBhcnRzOiB1cGxvYWRQYXJ0c1xuICAgICAgfSxcbiAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlZFZpZGVvID0gYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIC4uLihzaG91bGRUcmFuc2NvZGVWaWRlbyh2aWRlbylcbiAgICAgICAgPyB7cHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCd9XG4gICAgICAgIDoge1xuICAgICAgICAgIHBsYXliYWNrRmlsZVR5cGU6IHZpZGVvPy5maWxlVHlwZSB8fCAndmlkZW8vbXA0JyxcbiAgICAgICAgICBwbGF5YmFja0tleToga2V5LFxuICAgICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdyZWFkeScsXG4gICAgICAgICAgc3RyZWFtVHlwZTogJ3Byb2dyZXNzaXZlJ1xuICAgICAgICB9KSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGVkJ1xuICAgIH0pO1xuXG4gICAgaWYoc2hvdWxkVHJhbnNjb2RlVmlkZW8odXBkYXRlZFZpZGVvKSkge1xuICAgICAgdm9pZCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgcGFyc2VJZCh2aWRlb0lkKSwgdmlkZW8/LmZpbGVUeXBlKSk7XG5cbiAgICBpZihrZXkgJiYgZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIGF3YWl0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgICBVcGxvYWRJZDogZm9ybWF0VXBsb2FkSWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgcGFyc2VJZCh2aWRlb0lkKSwge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICB1cGxvYWRTdGF0dXM6ICdhYm9ydGVkJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt2aWRlb0lkLCBkZXNjcmlwdGlvbiwgYnVmZmVyLCBmaWxlVHlwZSwgcHJpdmFjeSwgdHlwZSA9ICd2aWRlbycsIHByb3ZpZGVyLCBleHRlcm5hbElkLCBleHRlcm5hbFVybH0gPSB2aWRlbztcblxuICBpZih0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIHNhdmVWaWRlbyhjb250ZXh0LCB2aWRlb0lkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHNhdmVkOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgICAuLi5zYXZlZCxcbiAgICAgICAgX2tleTogdmlkZW9JZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBwcml2YWN5LFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRWaWRlb0VkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gdmlkZW9FZGdlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNNZWRpYS12aWRlby0ke3ZpZGVvSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gZ2V0RG9jSWQoZm9ybWF0SXRlbVR5cGUsIHtfa2V5OiBmb3JtYXRJdGVtSWR9KTtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gIGNvbnN0IGZpbGVEb2NJZCA9IGB2aWRlb3MvJHtmb3JtYXRWaWRlb0lkfWA7XG5cbiAgY29uc3QgZWRnZTogVmlkZW9FZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlLFxuICAgIHR5cGU6ICd2aWRlbydcbiAgfSBhcyBWaWRlb0VkZ2VUeXBlO1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IHZpZGVvQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZXh0ZXJuYWxJZCxcbiAgICBleHRlcm5hbFVybCxcbiAgICBmaWxlVHlwZSxcbiAgICBobHNLZXksXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIHBsYXliYWNrRmlsZVR5cGUsXG4gICAgcGxheWJhY2tLZXksXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyxcbiAgICBwcml2YWN5LFxuICAgIHByb3ZpZGVyLFxuICAgIHN0cmVhbVR5cGUsXG4gICAgdHlwZSxcbiAgICB1cGxvYWRTdGF0dXMsXG4gICAgdXJsID0gJycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG5cbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHZpZGVvSWQgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcgJiYgKGV4dGVybmFsSWQgfHwgZXh0ZXJuYWxVcmwpKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiBmb3JtYXRWaWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgaWYoYmFzZTY0IHx8IHZpZGVvQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gdmlkZW9CdWZmZXIgYXMgQnVmZmVyO1xuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZmlsZVR5cGU6IHVwZGF0ZWRGaWxlVHlwZSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICByZXR1cm4gYWRkVmlkZW8oY29udGV4dCwgey4uLnZQYXJhbXMsIGRlc2NyaXB0aW9uLCBwcml2YWN5fSwgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZQYXJhbXM6IFZpZGVvVHlwZSA9IHtidWZmZXIsIGRlc2NyaXB0aW9uLCBmaWxlVHlwZTogY29udGVudFR5cGUsIHByaXZhY3ksIHVzZXJJZDogc2Vzc2lvbklkLCB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkfSBhcyBWaWRlb1R5cGU7XG4gICAgICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB2UGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHZpZGVvSWQgIT09ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAuLi4oaGxzS2V5ICE9PSB1bmRlZmluZWQgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0ZpbGVUeXBlICE9PSB1bmRlZmluZWQgPyB7cGxheWJhY2tGaWxlVHlwZX0gOiB7fSksXG4gICAgICAuLi4ocGxheWJhY2tLZXkgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0tleX0gOiB7fSksXG4gICAgICAuLi4ocHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkID8ge3Byb2Nlc3NpbmdTdGF0dXN9IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5fSA6IHt9KSxcbiAgICAgIC4uLihzdHJlYW1UeXBlICE9PSB1bmRlZmluZWQgPyB7c3RyZWFtVHlwZX0gOiB7fSksXG4gICAgICAuLi4odXBsb2FkU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7dXBsb2FkU3RhdHVzfSA6IHt9KVxuICAgIH07XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwgdXBkYXRlKVxuICAgICAgLnRoZW4oKHVwZGF0ZWRWaWRlbykgPT4ge1xuICAgICAgICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgICAgICAgdm9pZCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVWaWRlbyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZGVsZXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBjYXNjYWRlOiBbRURHRVMuSEFTX01FRElBLCBFREdFUy5IQVNfUkVBQ1RJT05dLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZih2aWRlbykge1xuICAgICAgY29uc3Qge19rZXk6IHZLZXksIGZpbGVUeXBlLCBobHNLZXksIHBsYXliYWNrS2V5LCBzb3VyY2VLZXksIHRodW1iRmlsZVR5cGUsIHVwbG9hZEtleX0gPSB2aWRlbztcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgIHNvdXJjZUtleSxcbiAgICAgICAgdXBsb2FkS2V5LFxuICAgICAgICBwbGF5YmFja0tleSxcbiAgICAgICAgaGxzS2V5LFxuICAgICAgICBgdXNlcnMvJHtzZXNzaW9uSWR9L3ZpZGVvcy8ke3ZLZXl9Lm1wNGAsXG4gICAgICAgIGZpbGVUeXBlID8gZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2S2V5LCBmaWxlVHlwZSwgJ3ZpZGVvcycpIDogJycsXG4gICAgICAgIHRodW1iRmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIHRodW1iRmlsZVR5cGUsICd2aWRlby10aHVtYnMnKSA6ICcnXG4gICAgICBdXG4gICAgICAgIC5tYXAoKGtleSkgPT4gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5maWx0ZXIoKGtleSwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihrZXkpID09PSBpbmRleCk7XG4gICAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czoga2V5cy5tYXAoKEtleSkgPT4gKHtLZXl9KSksXG4gICAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IHZpZGVvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkNyZWF0ZUpvYkNvbW1hbmQiLCJEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQiLCJNZWRpYUNvbnZlcnRDbGllbnQiLCJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsImdldENvbm5lY3Rpb25zQnlVc2VyIiwid3NDbGllbnQiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZFJlYWN0aW9uQ291bnRRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInVzZURiIiwiZ2V0QXdzQ3JlZGVudGlhbHMiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIiwiczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNEZWxldGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldEJ1Y2tldCIsInMzR2V0U2lnbmVkVXJsIiwiczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwiREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFIiwiVklERU9fUExBWUJBQ0tfRElSIiwibWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJnZXRNZWRpYUNvbnZlcnRDbGllbnQiLCJlbmRwb2ludCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJjbGllbnQiLCJlbmRwb2ludHMiLCJzZW5kIiwiTWF4UmVzdWx0cyIsIkVuZHBvaW50cyIsIlVybCIsImdldFZpZGVvTWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwicGFyc2VkRG9jSWQiLCJpdGVtS2V5IiwiVVNFUlMiLCJQRVJTT05BUyIsIm5vcm1hbGl6ZVZpZGVvUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3VmlkZW8iLCJ2aWRlbyIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJyZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MiLCJjb250ZXh0IiwibGlzdCIsInNlc3Npb25Vc2VySWQiLCJvd25lclVzZXJJZCIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsInBhcnNlVmlkZW9PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldFZpZGVvT3B0aW9uYWwiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJpbmNsdWRlcyIsInJlYWN0aW9uUXVlcnkiLCJyZXBsYWNlIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwidGFnc1F1ZXJ5IiwiZ2V0VmlkZW9zQnlVc2VyIiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwiY3VzdG9tUXVlcmllcyIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFZpZGVvQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0VmlkZW9zQnlJdGVtIiwic2Vzc2lvbiIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImFsbCIsImZpbHRlciIsImdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwic2Vzc2lvbklkIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwibWFwIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyYW1zIiwiZ2V0VmlkZW8iLCJ2aWRlb0lkIiwiZm9ybWF0VmlkZW9JZCIsIl9rZXkiLCJnZXRQYXRoVXNlclZpZGVvcyIsInZpZGVvVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0VmlkZW9GaWxlbmFtZSIsImdldFZpZGVvVXBsb2FkS2V5IiwiZmlsZVR5cGUiLCJzYXZlVmlkZW9UaHVtYm5haWwiLCJ0aHVtYkJhc2U2NCIsInRodW1iRmlsZVR5cGUiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiYnVmZmVyIiwiQnVmZmVyIiwiQm9keSIsIkJ1Y2tldCIsIkNvbnRlbnRUeXBlIiwiS2V5IiwiZ2V0VmlkZW9VcGxvYWREb2MiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJnZXRWaWRlb1BhcnRVcmxzIiwia2V5IiwidXBsb2FkSWQiLCJwYXJ0TnVtYmVycyIsIlByb21pc2UiLCJwYXJ0TnVtYmVyIiwidXJsIiwiUGFydE51bWJlciIsIlVwbG9hZElkIiwiZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlIiwiY29ubmVjdGlvbnMiLCJjb25uZWN0aW9uSWRzIiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25JZCIsInNvY2tldElkIiwiQm9vbGVhbiIsImluZGV4IiwiZGF0YSIsImdldFZpZGVvUGxheWJhY2tLZXkiLCJkZWxldGVWaWRlb1NvdXJjZU9iamVjdCIsInNvdXJjZUtleSIsInVwbG9hZEtleSIsInBsYXliYWNrS2V5Iiwic2hvdWxkVHJhbnNjb2RlVmlkZW8iLCJjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiIsInJvbGVBcm4iLCJidWNrZXQiLCJtb2RpZmllZCIsIkRhdGUiLCJub3ciLCJwcm9jZXNzaW5nRXJyb3IiLCJwcm9jZXNzaW5nU3RhdHVzIiwicXVldWUiLCJvdXRwdXREZXN0aW5hdGlvbiIsImpvYiIsIlF1ZXVlIiwiUm9sZSIsIlNldHRpbmdzIiwiSW5wdXRzIiwiQXVkaW9TZWxlY3RvcnMiLCJEZWZhdWx0U2VsZWN0aW9uIiwiRmlsZUlucHV0IiwiVGltZWNvZGVTb3VyY2UiLCJWaWRlb1NlbGVjdG9yIiwiUm90YXRlIiwiT3V0cHV0R3JvdXBzIiwiTmFtZSIsIk91dHB1dEdyb3VwU2V0dGluZ3MiLCJGaWxlR3JvdXBTZXR0aW5ncyIsIkRlc3RpbmF0aW9uIiwiVHlwZSIsIk91dHB1dHMiLCJBdWRpb0Rlc2NyaXB0aW9ucyIsIkF1ZGlvU291cmNlTmFtZSIsIkNvZGVjU2V0dGluZ3MiLCJBYWNTZXR0aW5ncyIsIkJpdHJhdGUiLCJDb2RpbmdNb2RlIiwiU2FtcGxlUmF0ZSIsIkNvZGVjIiwiQ29udGFpbmVyU2V0dGluZ3MiLCJDb250YWluZXIiLCJNcDRTZXR0aW5ncyIsIlZpZGVvRGVzY3JpcHRpb24iLCJIMjY0U2V0dGluZ3MiLCJNYXhCaXRyYXRlIiwiTnVtYmVyIiwiUmF0ZUNvbnRyb2xNb2RlIiwiU2NlbmVDaGFuZ2VEZXRlY3QiLCJRdWFsaXR5VHVuaW5nTGV2ZWwiLCJVc2VyTWV0YWRhdGEiLCJqb2JJZCIsIkpvYiIsIklkIiwibWVkaWFDb252ZXJ0Sm9iSWQiLCJwbGF5YmFja0ZpbGVUeXBlIiwic3RyZWFtVHlwZSIsIm1lc3NhZ2UiLCJjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyIsImhsc0tleSIsImN1cnJlbnRWaWRlbyIsImZvcm1hdFBsYXliYWNrS2V5Iiwic291cmNlRGVsZXRlZCIsInVwZGF0ZWRWaWRlbyIsImZhaWxWaWRlb1Byb2Nlc3NpbmciLCJxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwiLCJzYWZlTGltaXQiLCJNYXRoIiwibWF4IiwibWluIiwiam9iSWRzIiwiZ2V0QXBwVmlkZW9VcmwiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsInZpZGVvTmFtZSIsInZpZGVvVXJsIiwiZ2V0VmlkZW9VcmwiLCJpbWFnZURpciIsInZpZGVvRGlyIiwidXJsVHlwZSIsImtleURpciIsInZpZGVvS2V5IiwiZGVmYXVsdEJ1Y2tldCIsIkV4cGlyZXMiLCJnZXRWaWRlb1NpZ25lZEtleVVybCIsInNhdmVWaWRlbyIsInMzT3B0aW9ucyIsInZpZGVvT2JqIiwiZmlsZVNpemUiLCJjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRDb3VudCIsImRlc2NyaXB0aW9uIiwiaXRlbVR5cGUiLCJmaWxlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImZvcm1hdEl0ZW1UeXBlIiwic2FmZVBhcnRDb3VudCIsInVwbG9hZCIsIk1ldGFkYXRhIiwiaGFzVGh1bWIiLCJpbnNlcnQiLCJhZGRlZCIsInVwbG9hZFN0YXR1cyIsIm5ld1ZpZGVvIiwidmlkZW9FZGdlIiwiYWRkVmlkZW9FZGdlIiwiQXJyYXkiLCJfdmFsdWUiLCJwYXJ0VXJscyIsInBhcnRTaXplIiwiZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyIsImZvcm1hdFVwbG9hZElkIiwiY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRzIiwidXBsb2FkUGFydHMiLCJwYXJ0IiwiRVRhZyIsImV0YWciLCJhIiwiYiIsIk11bHRpcGFydFVwbG9hZCIsIlBhcnRzIiwiYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCIsImFkZFZpZGVvIiwicHJvdmlkZXIiLCJleHRlcm5hbElkIiwiZXh0ZXJuYWxVcmwiLCJzYXZlZCIsImVkZ2VJZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZVZpZGVvIiwiYmFzZTY0IiwidmlkZW9CdWZmZXIiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwidlBhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJkZWxldGVWaWRlbyIsImNhc2NhZGUiLCJIQVNfUkVBQ1RJT04iLCJvd25lcnNoaXAiLCJ2S2V5Iiwia2V5cyIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FDRUEsZ0JBQWdCLEVBQ2hCQyx3QkFBd0IsRUFDeEJDLGtCQUFrQixRQUNiLCtCQUErQjtBQUV0QyxTQUFRQyxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLG9CQUFvQixRQUFPLG1DQUFtQztBQUN0RSxTQUFRQyxRQUFRLFFBQU8sZ0NBQWdDO0FBQ3ZELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyx1QkFBdUIsRUFBRUMsY0FBYyxRQUFPLHlCQUF5QjtBQUMvRSxTQUFRQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNwRSxTQUFRQyxpQkFBaUIsUUFBTyx1QkFBdUI7QUFDdkQsU0FBUUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxVQUFVLFFBQU8sWUFBWTtBQUNoRixTQUFRQywyQkFBMkIsUUFBTyxnQkFBZ0I7QUFDMUQsU0FDRUMsc0JBQXNCLEVBQ3RCQyx5QkFBeUIsRUFDekJDLHVCQUF1QixFQUN2QkMsUUFBUSxFQUNSQyxZQUFZLEVBQ1pDLFdBQVcsRUFDWEMsY0FBYyxFQUNkQyx3QkFBd0IsRUFDeEJDLEtBQUssUUFDQSxVQUFVO0FBQ2pCLFNBQVFDLHFCQUFxQixRQUFPLHFCQUFxQjtBQWN6RCxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMscUJBQXFCL0IsUUFBUUcsTUFBTTZCLFNBQVM7QUFDbEQsTUFBTUMsaUNBQWlDLEtBQUssT0FBTztBQUNuRCxNQUFNQyxxQkFBcUI7QUFFM0IsSUFBSUM7QUFFSixNQUFNQyx3QkFBd0IsQ0FBQ0MsV0FBMEMsSUFBSTlDLG1CQUFtQjtRQUM5RitDLGFBQWF6QjtRQUNid0I7UUFDQUUsUUFBUXRDLE9BQU9ULEdBQUcsQ0FBQztJQUNyQjtBQUVBLE1BQU1nRCwwQkFBMEI7SUFDOUIsSUFBR0wsc0JBQXNCO1FBQ3ZCLE9BQU9BO0lBQ1Q7SUFFQUEsdUJBQXVCbEMsT0FBT1QsR0FBRyxDQUFDO0lBRWxDLElBQUcyQyxzQkFBc0I7UUFDdkIsT0FBT0E7SUFDVDtJQUVBLE1BQU1NLFNBQVNMO0lBQ2YsTUFBTU0sWUFBWSxNQUFNRCxPQUFPRSxJQUFJLENBQUMsSUFBSXJELHlCQUF5QjtRQUFDc0QsWUFBWTtJQUFDO0lBQy9FVCx1QkFBdUJPLFVBQVVHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRUM7SUFFakQsT0FBT1g7QUFDVDtBQUVBLE1BQU1ZLDBCQUEwQixDQUFDQztJQUMvQixNQUFNQyxjQUFjdEQsY0FBY3FEO0lBRWxDLElBQUdDLGFBQWE7UUFDZCxPQUFPO1lBQUNBO1NBQVk7SUFDdEI7SUFFQSxNQUFNQyxVQUFVckQsUUFBUW1EO0lBRXhCLElBQUcsQ0FBQ0UsU0FBUztRQUNYLE9BQU8sRUFBRTtJQUNYO0lBRUEsT0FBTztRQUNMLEdBQUdoRCxZQUFZaUQsS0FBSyxDQUFDLENBQUMsRUFBRUQsU0FBUztRQUNqQyxHQUFHaEQsWUFBWWtELFFBQVEsQ0FBQyxDQUFDLEVBQUVGLFNBQVM7S0FDckM7QUFDSDtBQUVBLE1BQU1HLHdCQUF3QixDQUFDQztJQUM3QixPQUFPQyxPQUFPRCxXQUFXLElBQUlFLElBQUksR0FBR0MsV0FBVztRQUM3QyxLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFLE9BQU87SUFDWDtBQUNGO0FBRUEsTUFBTUMsZUFBZSxDQUNuQkMsT0FDQUMsY0FDQUM7SUFNQSxNQUFNUCxVQUFVRCxzQkFBc0JNLE9BQU9MO0lBRTdDLElBQUdPLE9BQU9DLE9BQU8sSUFBSVAsT0FBT0ksT0FBT0ksVUFBVSxRQUFRSCxjQUFjO1FBQ2pFLE9BQU87SUFDVDtJQUVBLE9BQU9OO1FBQ0wsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBT08sT0FBT0csY0FBYztRQUM5QixLQUFLO1lBQ0gsT0FBT0gsT0FBT0ksVUFBVTtRQUMxQjtZQUNFLE9BQU87SUFDWDtBQUNGO0FBRUEsTUFBTUMsMkJBQTJCLE9BQy9CQyxTQUNBQyxNQUNBQztJQUVBLE1BQU1DLGNBQWNmLE9BQU9hLElBQUksQ0FBQyxFQUFFLEVBQUVMLFVBQVU7SUFDOUMsTUFBTUQsVUFBVSxDQUFDLENBQUNPLGlCQUFpQixDQUFDLENBQUNDLGVBQWVELGtCQUFrQkM7SUFFdEUsSUFBR1IsU0FBUztRQUNWLE9BQU87WUFDTEUsZ0JBQWdCO1lBQ2hCQyxZQUFZO1lBQ1pILFNBQVM7UUFDWDtJQUNGO0lBRUEsSUFBRyxDQUFDTyxlQUFlO1FBQ2pCLE9BQU87WUFDTEwsZ0JBQWdCO1lBQ2hCQyxZQUFZO1lBQ1pILFNBQVM7UUFDWDtJQUNGO0lBRUEsSUFBSUUsaUJBQWlCO0lBQ3JCLElBQUlDLGFBQWE7SUFDakIsTUFBTU0sZUFBZWhCLE9BQU9hLElBQUksQ0FBQyxFQUFFLEVBQUVJLGlCQUFpQjtJQUN0RCxNQUFNQyxnQkFBZ0JsQixPQUFPYSxJQUFJLENBQUMsRUFBRSxFQUFFTSxrQkFBa0I7SUFFeEQsSUFBR0Qsa0JBQWtCdkUsWUFBWWtELFFBQVEsSUFBSW1CLGNBQWM7UUFDekQsTUFBTUksZUFBZSxNQUFNeEQsNEJBQTRCZ0QsU0FBU0k7UUFDaEVQLGlCQUFpQixDQUFDLENBQUNXLGNBQWNDO1FBQ2pDWCxhQUFhLE1BQU1wQyxzQkFBc0JzQyxTQUFTSSxjQUFjckUsWUFBWWtELFFBQVE7SUFDdEY7SUFFQSxPQUFPO1FBQ0xZO1FBQ0FDO1FBQ0FILFNBQVM7SUFDWDtBQUNGO0FBRUEsT0FBTyxNQUFNZSxvQkFBb0IsQ0FBQ0MsVUFBd0IsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBQ0MsT0FBTyxDQUFDLEVBQUVDLEtBQUssRUFBRSxFQUFFQyxPQUFPLFNBQVMsRUFBQyxHQUFHSDtJQUU5QyxPQUFPO1FBQ0xJLE9BQU92RSxTQUFTb0UsTUFBTUM7UUFDdEJDLE1BQU1yRixVQUFVcUYsTUFBTTtJQUN4QjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1FLG1CQUFtQixDQUFDQyxTQUFtQixFQUFFLEdBQ3BEQSxPQUFPQyxNQUFNLENBQUMsQ0FBQ0MsU0FBU0M7UUFDdEIsSUFBR0EsTUFBTUMsUUFBUSxDQUFDLFVBQVU7WUFDMUIsTUFBTUMsZ0JBQWdCakYsd0JBQXdCK0UsTUFBTUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQy9FSixRQUFRSyxPQUFPLENBQUNDLElBQUksQ0FBQ0g7WUFDckJILFFBQVFPLE9BQU8sQ0FBQ0QsSUFBSSxDQUFDLEdBQUdMLE1BQU0sQ0FBQyxFQUFFQSxPQUFPO1lBQ3hDLE9BQU9EO1FBQ1Q7UUFFQSxPQUFPQztZQUNMLEtBQUs7Z0JBQWE7b0JBQ2hCRCxRQUFRSyxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLGdMQUFnTCxDQUFDO29CQUN2TU4sUUFBUU8sT0FBTyxDQUFDRCxJQUFJLENBQUM7b0JBQ3JCLE9BQU9OO2dCQUNUO1lBQ0EsS0FBSztnQkFBUTtvQkFDWCxNQUFNUSxZQUFZckYsZUFBZTtvQkFDakM2RSxRQUFRSyxPQUFPLENBQUNDLElBQUksQ0FBQ0U7b0JBQ3JCUixRQUFRTyxPQUFPLENBQUNELElBQUksQ0FBQztvQkFDckIsT0FBT047Z0JBQ1Q7WUFDQSxLQUFLO2dCQUFTO29CQUNaQSxRQUFRSyxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLDRFQUE0RSxDQUFDO29CQUNuR04sUUFBUU8sT0FBTyxDQUFDRCxJQUFJLENBQUM7b0JBQ3JCLE9BQU9OO2dCQUNUO1lBQ0EsS0FBSztnQkFBVztvQkFDZCxPQUFPQTtnQkFDVDtZQUNBO2dCQUFTO29CQUNQLE9BQU9BO2dCQUNUO1FBQ0Y7SUFDRixHQUFHO1FBQUNPLFNBQVMsRUFBRTtRQUFFRixTQUFTLEVBQUU7SUFBQSxHQUFHO0FBRWpDLE9BQU8sTUFBTUksa0JBQWtCLENBQzdCNUIsU0FDQUosUUFDQWdCLE9BQWUsQ0FBQyxFQUNoQkMsS0FBYSxFQUFFO0lBRWYsTUFBTWdCLFNBQVM7SUFDZixNQUFNQyxlQUFlcEcsUUFBUWtFO0lBQzdCLE1BQU1tQyxnQkFBZ0I7UUFDcEIsQ0FBQyw2RUFBNkUsQ0FBQztLQUNoRjtJQUVELE9BQU9qRixVQUNMa0QsU0FDQSxVQUNBO1FBQUNKLFFBQVFrQztJQUFZLEdBQ3JCO1FBQ0VFLE1BQU07WUFBQztnQkFBQ1osT0FBTztnQkFBU2EsV0FBVztZQUFNO1NBQUU7UUFDM0NsQixPQUFPO1lBQUNIO1lBQU1DO1FBQUU7UUFDaEJrQjtRQUNBRyxlQUFlO1lBQUM7U0FBWTtJQUM5QixHQUNBQyxLQUFLLENBQUMsQ0FBQ0M7UUFDUGhHLFNBQVM7WUFDUHlGO1lBQ0FRLFVBQVUxRTtZQUNWMkUsT0FBT25HLFdBQVdvRyxjQUFjO1FBQ2xDLEdBQUdILE9BQU9wQztRQUNWLE9BQU8sRUFBRTtJQUNYO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTXdDLHNCQUFzQixDQUFDeEMsU0FBcUJuQjtJQUN2RCxNQUFNZ0QsU0FBUztJQUNmLE1BQU0sRUFBQ1ksWUFBWSxFQUFDLEdBQUd6QztJQUN2QixNQUFNMEMsYUFBYTlELHdCQUF3QkM7SUFDM0MsTUFBTThELFNBQW1CL0csR0FBRyxDQUFDOztlQUVoQixFQUFFZ0MsbUJBQW1COzBCQUNWLEVBQUU4RSxXQUFXOzs7OztFQUtyQyxDQUFDO0lBRUQsT0FBT2pHLE1BQU1nRyxjQUFjRyxLQUFLLENBQUNELFFBQzlCRSxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT0MsSUFBSSxJQUM1QkYsSUFBSSxDQUFDLENBQUMsRUFBQ0csS0FBSyxFQUFDLEdBQUtBLE9BQ2xCYixLQUFLLENBQUMsQ0FBQ0MsUUFBaUJoRyxTQUFTO1lBQ2hDeUY7WUFDQVEsVUFBVTFFO1lBQ1YyRSxPQUFPbkcsV0FBV29HLGNBQWM7UUFDbEMsR0FBR0gsT0FBT3BDO0FBQ2QsRUFBRTtBQUVGLE9BQU8sTUFBTWlELGtCQUFrQixPQUM3QmpELFNBQ0FuQixRQUNBOEIsVUFBd0IsQ0FBQyxDQUFDO0lBRTFCLE1BQU1rQixTQUFTO0lBQ2YsTUFBTSxFQUFDWSxZQUFZLEVBQUV4QixTQUFTLEVBQUUsRUFBRWlDLFNBQVMsRUFBQ3RELFFBQVFNLGdCQUFnQixFQUFFLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxHQUFHRjtJQUNoRixNQUFNMEMsYUFBYTlELHdCQUF3QkM7SUFDM0MsTUFBTSxFQUFDa0MsS0FBSyxFQUFDLEdBQUdMLGtCQUFrQkM7SUFDbEMsTUFBTSxFQUFDZSxTQUFTeUIsYUFBYSxFQUFFM0IsU0FBUzRCLGFBQWEsRUFBQyxHQUFHcEMsaUJBQWlCQztJQUMxRSxNQUFNMEIsU0FBbUIvRyxHQUFHLENBQUM7YUFDbEIsRUFBRWdDLG1CQUFtQjt3QkFDVixFQUFFOEUsV0FBVzs7Ozs2REFJd0IsRUFBRTdHLFFBQVFFLFlBQVlrRCxRQUFRLEVBQUU7TUFDdkYsRUFBRXBELFFBQVF1SCxjQUFjQyxJQUFJLENBQUMsT0FBTzs7TUFFcEMsRUFBRXhILFFBQVFrRixNQUFNbkYsR0FBRyxFQUFFOztRQUVuQixFQUFFdUgsY0FBY0csTUFBTSxHQUFHLElBQUl6SCxRQUFRLENBQUMsVUFBVSxFQUFFc0gsY0FBY0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUl4SCxRQUFRLEtBQUs7Ozs7Ozs7Ozs7OztFQVlyRyxDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU1vRSxPQUFPLE1BQU14RCxNQUFNZ0csY0FBY0csS0FBSyxDQUFDRCxRQUMxQ0UsSUFBSSxDQUFDLENBQUNDLFNBQVdBLE9BQU9TLEdBQUc7UUFFOUIsTUFBTTdELFNBQVMsTUFBTUsseUJBQXlCQyxTQUFTQyxNQUFNQztRQUU3RCxJQUFHUixPQUFPQyxPQUFPLEVBQUU7WUFDakIsT0FBT007UUFDVDtRQUVBLElBQUcsQ0FBQ0MsZUFBZTtZQUNqQixPQUFPRCxLQUFLdUQsTUFBTSxDQUFDLENBQUNoRSxRQUFVTixzQkFBc0JNLE9BQU9MLGFBQWE7UUFDMUU7UUFFQSxPQUFPYyxLQUFLdUQsTUFBTSxDQUFDLENBQUNoRSxRQUFVRCxhQUFhQyxPQUFPVSxlQUFlUjtJQUNuRSxFQUFFLE9BQU0wQyxPQUFPO1FBQ1hoRyxTQUFTO1lBQ1B5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFPcEM7UUFDVixPQUFPLEVBQUU7SUFDYjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU15RCwwQkFBMEIsT0FDckN6RCxTQUNBMEQsWUFBc0IsRUFBRSxFQUN4Qi9DO0lBRUEsTUFBTWtCLFNBQVM7SUFDZixNQUFNLEVBQUNZLFlBQVksRUFBRXhCLFNBQVMsRUFBRSxFQUFFaUMsU0FBUyxFQUFDdEQsUUFBUStELFlBQVksRUFBRSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsR0FBRzNEO0lBRTVFLElBQUcsQ0FBQzJELFdBQVc7UUFDYixPQUFPLEVBQUU7SUFDWDtJQUVBLE1BQU0sRUFBQzVDLEtBQUssRUFBQyxHQUFHTCxrQkFBa0JDO0lBQ2xDLE1BQU0sRUFBQ2UsU0FBU3lCLGFBQWEsRUFBRTNCLFNBQVM0QixhQUFhLEVBQUMsR0FBR3BDLGlCQUFpQkM7SUFDMUUsTUFBTTJDLGtCQUFrQixDQUFDLE1BQU0sRUFBRUQsV0FBVztJQUM1QyxNQUFNRSxrQkFBNEJILFVBQVVJLEdBQUcsQ0FBQyxDQUFDQyxlQUFpQnRJLFVBQVVzSSxjQUFjO0lBQzFGLE1BQU1DLFdBQXFCO1FBQ3pCO1FBQ0EsQ0FBQyxTQUFTLEVBQUVDLEtBQUtDLFNBQVMsQ0FBQ0wsaUJBQWlCLGdCQUFnQixDQUFDO0tBQzlEO0lBQ0QsTUFBTWxCLFNBQW1CL0csR0FBRyxDQUFDO3lCQUNOLEVBQUVnSSxnQkFBZ0I7OztzQ0FHTCxFQUFFaEcsbUJBQW1COzs7Ozs7OzswRUFRZSxFQUFFL0IsUUFBUUUsWUFBWWtELFFBQVEsRUFBRTtNQUNwRyxFQUFFcEQsUUFBUXVILGNBQWNDLElBQUksQ0FBQyxPQUFPO2FBQzdCLEVBQUV4SCxRQUFRbUksU0FBU1gsSUFBSSxDQUFDLFNBQVM7TUFDeEMsRUFBRXhILFFBQVFrRixNQUFNbkYsR0FBRyxFQUFFOztRQUVuQixFQUFFdUgsY0FBY0csTUFBTSxHQUFHLElBQUl6SCxRQUFRLENBQUMsVUFBVSxFQUFFc0gsY0FBY0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUl4SCxRQUFRLEtBQUs7Ozs7Ozs7Ozs7OztFQVlyRyxDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU1vRSxPQUFPLE1BQU14RCxNQUFNZ0csY0FBY0csS0FBSyxDQUFDRCxRQUMxQ0UsSUFBSSxDQUFDLENBQUNDLFNBQVdBLE9BQU9TLEdBQUc7UUFFOUIsTUFBTTdELFNBQVMsTUFBTUsseUJBQXlCQyxTQUFTQyxNQUFNMEQ7UUFFN0QsSUFBR2pFLE9BQU9DLE9BQU8sRUFBRTtZQUNqQixPQUFPTTtRQUNUO1FBRUEsSUFBRyxDQUFDMEQsV0FBVztZQUNiLE9BQU8xRCxLQUFLdUQsTUFBTSxDQUFDLENBQUNoRSxRQUFVTixzQkFBc0JNLE9BQU9MLGFBQWE7UUFDMUU7UUFFQSxPQUFPYyxLQUFLdUQsTUFBTSxDQUFDLENBQUNoRSxRQUFVRCxhQUFhQyxPQUFPbUUsV0FBV2pFO0lBQy9ELEVBQUUsT0FBTTBDLE9BQU87UUFDYmhHLFNBQVM7WUFDUHlGO1lBQ0FRLFVBQVUxRTtZQUNWd0csUUFBUTtnQkFBQ3hEO2dCQUFTK0M7WUFBUztZQUMzQnBCLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO1FBQ25CLE9BQU8sRUFBRTtJQUNYO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTW9FLFdBQVcsQ0FBQ3BFLFNBQXFCcUU7SUFDNUMsTUFBTXhDLFNBQVM7SUFDZixNQUFNeUMsZ0JBQWdCNUksUUFBUTJJO0lBRTlCLE9BQU94SCxVQUFxQm1ELFNBQVMsVUFBVTtRQUFDdUUsTUFBTUQ7SUFBYSxHQUNoRW5DLEtBQUssQ0FBQyxDQUFDQyxRQUFpQmhHLFNBQVM7WUFDaEN5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFPcEM7QUFDZCxFQUFFO0FBRUYsT0FBTyxNQUFNd0Usb0JBQW9CLENBQUM1RSxRQUFnQnlFLFNBQWlCSSxXQUFtQkMsTUFBYyxRQUFRO0lBQzFHLElBQUlDLFdBQVdOO0lBRWYsT0FBT0k7UUFDTCxLQUFLO1lBQ0hFLFdBQVcsR0FBR04sUUFBUSxJQUFJLENBQUM7WUFDM0I7UUFDRixLQUFLO1lBQ0hNLFdBQVcsR0FBR04sUUFBUSxLQUFLLENBQUM7WUFDNUI7UUFDRixLQUFLO1FBQ0wsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsSUFBSSxDQUFDO1lBQzNCO1FBQ0YsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsS0FBSyxDQUFDO1lBQzVCO1FBQ0YsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsSUFBSSxDQUFDO1lBQzNCO1FBQ0Y7WUFDRU0sV0FBVyxHQUFHTixRQUFRLElBQUksQ0FBQztZQUMzQjtJQUNKO0lBRUEsT0FBTyxDQUFDLE1BQU0sRUFBRXpFLE9BQU8sQ0FBQyxFQUFFOEUsSUFBSSxDQUFDLEVBQUVDLFVBQVU7QUFDN0MsRUFBRTtBQUVGLE9BQU8sTUFBTUMsbUJBQW1CLENBQUNQLFNBQWlCSSxZQUFvQixXQUFXO0lBQy9FLElBQUlFLFdBQVcsR0FBR04sUUFBUSxJQUFJLENBQUM7SUFFL0IsT0FBT0k7UUFDTCxLQUFLO1lBQ0hFLFdBQVcsR0FBR04sUUFBUSxJQUFJLENBQUM7WUFDM0I7UUFDRixLQUFLO1lBQ0hNLFdBQVcsR0FBR04sUUFBUSxLQUFLLENBQUM7WUFDNUI7UUFDRixLQUFLO1FBQ0wsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsSUFBSSxDQUFDO1lBQzNCO1FBQ0YsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsS0FBSyxDQUFDO1lBQzVCO1FBQ0YsS0FBSztZQUNITSxXQUFXLEdBQUdOLFFBQVEsSUFBSSxDQUFDO1lBQzNCO1FBQ0Y7WUFDRTtJQUNKO0lBRUEsT0FBT007QUFDVCxFQUFFO0FBRUYsTUFBTUUsb0JBQW9CLENBQUNqRixRQUFnQnlFLFNBQWlCUyxXQUFtQixXQUFXLEdBQ3hGTixrQkFBa0I1RSxRQUFReUUsU0FBU1MsVUFBVTtBQUUvQyxNQUFNQyxxQkFBcUIsT0FDekIvRSxTQUNBcUUsU0FDQVcsY0FBc0IsRUFBRSxFQUN4QkMsZ0JBQXdCLFlBQVk7SUFFcEMsTUFBTSxFQUFDL0IsU0FBUyxFQUFDdEQsUUFBUStELFlBQVksRUFBRSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsR0FBRzNEO0lBRWpELElBQUcsQ0FBQ2dGLGVBQWUsQ0FBQ0EsWUFBWTNELFFBQVEsQ0FBQyxNQUFNO1FBQzdDLE9BQU87SUFDVDtJQUVBLE1BQU02RCxlQUFlRixZQUFZRyxNQUFNLENBQUNILFlBQVlJLE9BQU8sQ0FBQyxPQUFPO0lBQ25FLE1BQU1DLFNBQVNDLE9BQU8xRSxJQUFJLENBQUNzRSxjQUFjO0lBRXpDLElBQUcsQ0FBQ0csT0FBTy9CLE1BQU0sRUFBRTtRQUNqQixPQUFPO0lBQ1Q7SUFFQSxNQUFNN0YsTUFBTTtRQUNWOEgsTUFBTUY7UUFDTkcsUUFBUTtRQUNSQyxhQUFhUjtRQUNiUyxLQUFLbEIsa0JBQWtCYixXQUFXVSxTQUFTWSxlQUFlO0lBQzVEO0lBRUEsT0FBTztBQUNUO0FBRUEsTUFBTVUsb0JBQW9CLE9BQU8zRixTQUFxQnFFO0lBQ3BELE1BQU03RSxRQUFRLE1BQU00RSxTQUFTcEUsU0FBU3FFO0lBQ3RDLE1BQU0sRUFBQ25CLFNBQVMsRUFBQ3RELFFBQVErRCxZQUFZLEVBQUUsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEdBQUczRDtJQUVqRCxJQUFHLENBQUNSLFNBQVNKLE9BQU9JLE9BQU9JLFVBQVUsUUFBUStELFdBQVc7UUFDdEQsTUFBTSxJQUFJaUMsTUFBTXpKLFdBQVcwSixzQkFBc0I7SUFDbkQ7SUFFQSxPQUFPckc7QUFDVDtBQUVBLE1BQU1zRyxtQkFBbUIsT0FDdkJDLEtBQ0FDLFVBQ0FDLGNBQ2tDQyxRQUFRM0MsR0FBRyxDQUFDMEMsWUFBWW5DLEdBQUcsQ0FBQyxPQUFPcUMsYUFBZ0IsQ0FBQTtZQUNyRkE7WUFDQUMsS0FBSyxNQUFNNUkseUJBQXlCO2dCQUNsQ2dJLFFBQVE7Z0JBQ1JFLEtBQUtLO2dCQUNMTSxZQUFZRjtnQkFDWkcsVUFBVU47WUFDWjtRQUNGLENBQUE7QUFFQSxNQUFNTyw4QkFBOEIsT0FDbEN2RyxTQUNBUjtJQUVBLE1BQU1XLGNBQWN6RSxRQUFRMEQsT0FBT0ksT0FBT0ksVUFBVUksU0FBU2tELFNBQVN0RCxVQUFVO0lBRWhGLElBQUcsQ0FBQ08sYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNcUcsY0FBYyxNQUFNdksscUJBQXFCa0UsYUFBYWdDLEtBQUssQ0FBQyxJQUFNLEVBQUU7SUFDMUUsTUFBTXNFLGdCQUFnQkQsWUFDbkIxQyxHQUFHLENBQUMsQ0FBQzRDLGFBQWUvSyxZQUFZK0ssWUFBWUMsZ0JBQWdCRCxZQUFZRSxZQUFZLElBQUksS0FDeEZwRCxNQUFNLENBQUNxRCxTQUNQckQsTUFBTSxDQUFDLENBQUNtRCxjQUFjRyxPQUFPN0csT0FBU0EsS0FBS21GLE9BQU8sQ0FBQ3VCLGtCQUFrQkc7SUFFeEUsSUFBRyxDQUFDTCxjQUFjbkQsTUFBTSxFQUFFO1FBQ3hCO0lBQ0Y7SUFFQSxNQUFNcEgsU0FBU3NDLElBQUksQ0FBQ2lJLGVBQWU7UUFDakM1RSxRQUFRO1FBQ1JrRixNQUFNO1lBQ0p2SDtRQUNGO0lBQ0YsR0FBRzJDLEtBQUssQ0FBQyxJQUFNO0FBQ2pCO0FBRUEsTUFBTTZFLHNCQUFzQixDQUFDcEgsUUFBZ0J5RSxVQUMzQ0csa0JBQWtCNUUsUUFBUXlFLFNBQVMsYUFBYXRHO0FBRWxELE1BQU1rSiwwQkFBMEIsT0FDOUJqSCxTQUNBUjtJQUVBLE1BQU1xQyxTQUFTO0lBQ2YsTUFBTXFGLFlBQVk5SCxPQUFPSSxPQUFPMEgsYUFBYTFILE9BQU8ySCxhQUFhLElBQUk5SCxJQUFJO0lBQ3pFLE1BQU0rSCxjQUFjaEksT0FBT0ksT0FBTzRILGVBQWUsSUFBSS9ILElBQUk7SUFFekQsSUFBRyxDQUFDNkgsYUFBYUEsY0FBY0UsYUFBYTtRQUMxQyxPQUFPO0lBQ1Q7SUFFQSxJQUFJO1FBQ0YsTUFBTWhLLFNBQVM7WUFDYm9JLFFBQVE7WUFDUkUsS0FBS3dCO1FBQ1A7UUFFQSxPQUFPO0lBQ1QsRUFBRSxPQUFNOUUsT0FBTztRQUNiaEcsU0FBUztZQUNQeUY7WUFDQVEsVUFBVTFFO1lBQ1Z3RyxRQUFRO2dCQUFDK0M7Z0JBQVc3QyxTQUFTN0UsT0FBTzZFLFdBQVc3RSxPQUFPK0U7WUFBSTtZQUMxRGpDLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO1FBQ25CLE9BQU87SUFDVDtBQUNGO0FBRUEsTUFBTXFILHVCQUF1QixDQUFDN0gsUUFBbUIsQ0FBQyxDQUFDO0lBQ2pELE1BQU1zRixXQUFXMUYsT0FBT0ksT0FBT3NGLFlBQVksSUFBSXhGLFdBQVc7SUFFMUQsSUFBRyxDQUFDd0YsVUFBVTtRQUNaLE9BQU87SUFDVDtJQUVBLE9BQU8sQ0FBQztRQUNOO1FBQ0E7S0FDRCxDQUFDekQsUUFBUSxDQUFDeUQ7QUFDYjtBQUVBLE9BQU8sTUFBTXdDLDBCQUEwQixPQUNyQ3RILFNBQ0FSO0lBRUEsTUFBTXFDLFNBQVM7SUFDZixNQUFNMEYsVUFBVW5JLE9BQU90RCxPQUFPVCxHQUFHLENBQUMsK0JBQStCO0lBQ2pFLE1BQU1tTSxTQUFTbEssaUJBQWlCeEIsT0FBT1QsR0FBRyxDQUFDO0lBQzNDLE1BQU1nSixVQUFVM0ksUUFBUTBELE9BQU9JLE9BQU82RSxXQUFXN0UsT0FBTytFLFFBQVE7SUFDaEUsTUFBTTNFLFNBQVNsRSxRQUFRMEQsT0FBT0ksT0FBT0ksVUFBVUksU0FBU2tELFNBQVN0RCxVQUFVO0lBQzNFLE1BQU1zSCxZQUFZOUgsT0FBT0ksT0FBTzBILGFBQWExSCxPQUFPMkgsYUFBYTtJQUVqRSxJQUFHLENBQUNJLFdBQVcsQ0FBQ0MsVUFBVSxDQUFDbkQsV0FBVyxDQUFDekUsVUFBVSxDQUFDc0gsV0FBVztRQUMzRCxJQUFHN0MsU0FBUztZQUNWLE1BQU10SCxXQUFzQmlELFNBQVMsVUFBVXFFLFNBQVM7Z0JBQ3REb0QsVUFBVUMsS0FBS0MsR0FBRztnQkFDbEJDLGlCQUFpQjtvQkFDZixDQUFDTCxVQUFVLGtDQUFrQztvQkFDN0MsQ0FBQ0MsU0FBUyxzQkFBc0I7b0JBQ2hDLENBQUM1SCxTQUFTLG9CQUFvQjtvQkFDOUIsQ0FBQ3NILFlBQVksdUJBQXVCO2lCQUNyQyxDQUFDMUQsTUFBTSxDQUFDcUQsU0FBU3hELElBQUksQ0FBQztnQkFDdkJ3RSxrQkFBa0I7WUFDcEIsR0FBc0MxRixLQUFLLENBQUMsSUFBTTtRQUNwRDtRQUVBLE9BQU87SUFDVDtJQUVBLElBQUk7UUFDRixNQUFNakUsV0FBVyxNQUFNRztRQUN2QixNQUFNQyxTQUFTTCxzQkFBc0JDO1FBQ3JDLE1BQU00SixRQUFRMUksT0FBT3RELE9BQU9ULEdBQUcsQ0FBQyxnQ0FBZ0M7UUFDaEUsTUFBTTBNLG9CQUFvQixDQUFDLEtBQUssRUFBRVAsT0FBTyxPQUFPLEVBQUU1SCxPQUFPLENBQUMsRUFBRTdCLG1CQUFtQixDQUFDLENBQUM7UUFDakYsTUFBTWlLLE1BQU0sTUFBTTFKLE9BQU9FLElBQUksQ0FBQyxJQUFJdEQsaUJBQWlCO1lBQ2pELEdBQUk0TSxRQUFRO2dCQUFDRyxPQUFPSDtZQUFLLElBQUksQ0FBQyxDQUFDO1lBQy9CSSxNQUFNWDtZQUNOWSxVQUFVO2dCQUNSQyxRQUFRO29CQUFDO3dCQUNQQyxnQkFBZ0I7NEJBQ2Qsb0JBQW9CO2dDQUNsQkMsa0JBQWtCOzRCQUNwQjt3QkFDRjt3QkFDQUMsV0FBVyxDQUFDLEtBQUssRUFBRWYsT0FBTyxDQUFDLEVBQUVOLFdBQVc7d0JBQ3hDc0IsZ0JBQWdCO3dCQUNoQkMsZUFBZTs0QkFDYkMsUUFBUTt3QkFDVjtvQkFDRjtpQkFBRTtnQkFDRkMsY0FBYztvQkFBQzt3QkFDYkMsTUFBTTt3QkFDTkMscUJBQXFCOzRCQUNuQkMsbUJBQW1CO2dDQUNqQkMsYUFBYWhCOzRCQUNmOzRCQUNBaUIsTUFBTTt3QkFDUjt3QkFDQUMsU0FBUzs0QkFBQztnQ0FDUkMsbUJBQW1CO29DQUFDO3dDQUNsQkMsaUJBQWlCO3dDQUNqQkMsZUFBZTs0Q0FDYkMsYUFBYTtnREFDWEMsU0FBUztnREFDVEMsWUFBWTtnREFDWkMsWUFBWTs0Q0FDZDs0Q0FDQUMsT0FBTzt3Q0FDVDtvQ0FDRjtpQ0FBRTtnQ0FDRkMsbUJBQW1CO29DQUNqQkMsV0FBVztvQ0FDWEMsYUFBYSxDQUFDO2dDQUNoQjtnQ0FDQUMsa0JBQWtCO29DQUNoQlQsZUFBZTt3Q0FDYkssT0FBTzt3Q0FDUEssY0FBYzs0Q0FDWkMsWUFBWUMsT0FBT2xPLE9BQU9ULEdBQUcsQ0FBQywrQkFBK0I7NENBQzdENE8saUJBQWlCOzRDQUNqQkMsbUJBQW1COzRDQUNuQkMsb0JBQW9CO3dDQUN0QjtvQ0FDRjtnQ0FDRjs0QkFDRjt5QkFBRTtvQkFDSjtpQkFBRTtZQUNKO1lBQ0FDLGNBQWM7Z0JBQ1poRCxhQUFhSixvQkFBb0JwSCxRQUFReUU7Z0JBQ3pDekU7Z0JBQ0F5RTtZQUNGO1FBQ0Y7UUFFQSxNQUFNZ0csUUFBUWpMLE9BQU80SSxLQUFLc0MsS0FBS0MsTUFBTTtRQUVyQyxJQUFHRixPQUFPO1lBQ1IsTUFBTXROLFdBQXNCaUQsU0FBUyxVQUFVcUUsU0FBUztnQkFDdERtRyxtQkFBbUJIO2dCQUNuQjVDLFVBQVVDLEtBQUtDLEdBQUc7Z0JBQ2xCOEMsa0JBQWtCO2dCQUNsQnJELGFBQWFKLG9CQUFvQnBILFFBQVF5RTtnQkFDekN3RCxrQkFBa0I7Z0JBQ2xCNkMsWUFBWTtZQUNkO1FBQ0Y7UUFFQSxPQUFPTDtJQUNULEVBQUUsT0FBTWpJLE9BQU87UUFDYixJQUFHaUMsU0FBUztZQUNWLE1BQU10SCxXQUFzQmlELFNBQVMsVUFBVXFFLFNBQVM7Z0JBQ3REb0QsVUFBVUMsS0FBS0MsR0FBRztnQkFDbEJDLGlCQUFpQnhGLGlCQUFpQndELFFBQVF4RCxNQUFNdUksT0FBTyxHQUFHO2dCQUMxRDlDLGtCQUFrQjtZQUNwQixHQUFzQzFGLEtBQUssQ0FBQyxJQUFNO1FBQ3BEO1FBRUEvRixTQUFTO1lBQ1B5RjtZQUNBUSxVQUFVMUU7WUFDVndHLFFBQVE7Z0JBQUMrQztnQkFBV3RIO2dCQUFReUU7WUFBTztZQUNuQy9CLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO1FBQ25CLE9BQU87SUFDVDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU00SywwQkFBMEIsT0FDckM1SyxTQUNBcUUsU0FDQSxFQUNFd0csU0FBUyxFQUFFLEVBQ1hKLG1CQUFtQixXQUFXLEVBQzlCckQsY0FBYyxFQUFFLEVBQ2hCUyxtQkFBbUIsT0FBTyxFQUMxQjZDLGFBQWEsYUFBYSxFQU8zQixHQUFHLENBQUMsQ0FBQztJQUVOLE1BQU1wRyxnQkFBZ0I1SSxRQUFRMkk7SUFFOUIsSUFBRyxDQUFDQyxlQUFlO1FBQ2pCLE9BQU87SUFDVDtJQUVBLE1BQU13RyxlQUFlLE1BQU0xRyxTQUFTcEUsU0FBU3NFO0lBQzdDLE1BQU15RyxvQkFBb0IzRCxlQUFlSixvQkFBb0I1SCxPQUFPMEwsY0FBY2xMLFVBQVUsS0FBSzBFO0lBQ2pHLE1BQU0wRyxnQkFBZ0JuRCxxQkFBcUIsVUFDdkMsTUFBTVosd0JBQXdCakgsU0FBUztRQUN2QyxHQUFHOEssWUFBWTtRQUNmMUQsYUFBYTJEO0lBQ2YsS0FDRTtJQUNKLE1BQU1FLGVBQWUsTUFBTWxPLFdBQXNCaUQsU0FBUyxVQUFVc0UsZUFBZTtRQUNqRixHQUFJdUcsU0FBUztZQUFDQTtRQUFNLElBQUksQ0FBQyxDQUFDO1FBQzFCcEQsVUFBVUMsS0FBS0MsR0FBRztRQUNsQjhDO1FBQ0EsR0FBSU0sb0JBQW9CO1lBQUMzRCxhQUFhMkQ7UUFBaUIsSUFBSSxDQUFDLENBQUM7UUFDN0RsRDtRQUNBLEdBQUltRCxnQkFBZ0I7WUFBQzlELFdBQVc7WUFBSUMsV0FBVztRQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZEdUQ7SUFDRjtJQUVBLElBQUc3QyxxQkFBcUIsU0FBUztRQUMvQixNQUFNdEIsNEJBQTRCdkcsU0FBU2lMO0lBQzdDO0lBRUEsT0FBT0E7QUFDVCxFQUFFO0FBRUYsT0FBTyxNQUFNQyxzQkFBc0IsT0FDakNsTCxTQUNBcUU7SUFFQSxNQUFNQyxnQkFBZ0I1SSxRQUFRMkk7SUFFOUIsSUFBRyxDQUFDQyxlQUFlO1FBQ2pCLE9BQU87SUFDVDtJQUVBLE9BQU92SCxXQUFzQmlELFNBQVMsVUFBVXNFLGVBQWU7UUFDN0RtRCxVQUFVQyxLQUFLQyxHQUFHO1FBQ2xCRSxrQkFBa0I7SUFDcEI7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNc0QsOEJBQThCLE9BQ3pDbkwsU0FDQWUsUUFBZ0IsRUFBRTtJQUVsQixNQUFNYyxTQUFTO0lBQ2YsTUFBTSxFQUFDWSxZQUFZLEVBQUMsR0FBR3pDO0lBQ3ZCLE1BQU1vTCxZQUFZQyxLQUFLQyxHQUFHLENBQUMsR0FBR0QsS0FBS0UsR0FBRyxDQUFDdkIsT0FBT2pKLFNBQVMsS0FBSztJQUM1RCxNQUFNNEIsU0FBbUIvRyxHQUFHLENBQUM7Ozs7Ozs7WUFPbkIsRUFBRXdQLFVBQVU7O0VBRXRCLENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTW5MLE9BQU8sTUFBTXhELE1BQU1nRyxjQUFjRyxLQUFLLENBQUNELFFBQzFDRSxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT1MsR0FBRztRQUM5QixNQUFNaUksU0FBbUIsRUFBRTtRQUUzQixLQUFJLE1BQU1oTSxTQUFTUyxLQUFNO1lBQ3ZCLE1BQU1vSyxRQUFRLE1BQU0vQyx3QkFBd0J0SCxTQUFTUjtZQUVyRCxJQUFHNkssT0FBTztnQkFDUm1CLE9BQU8vSixJQUFJLENBQUM0STtZQUNkO1FBQ0Y7UUFFQSxPQUFPbUI7SUFDVCxFQUFFLE9BQU1wSixPQUFPO1FBQ2JoRyxTQUFTO1lBQ1B5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO1FBQ25CLE9BQU8sRUFBRTtJQUNYO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTXlMLGlCQUFpQixDQUFDLEVBQzdCakUsTUFBTSxFQUNOa0UsWUFBWSxRQUFRLEVBQ3BCNUcsV0FBVyxXQUFXLEVBQ3RCNkcsVUFBVSxLQUFLLEVBQ2Y3SyxJQUFJLEVBQ0o4SyxNQUFNLEVBQ052SCxPQUFPLEVBQ007SUFDYixJQUFHLENBQUN2RCxNQUFNO1FBQ1IsT0FBTztJQUNUO0lBRUEsSUFBRyxDQUFDdUQsU0FBUztRQUNYLE9BQU87SUFDVDtJQUVBLE1BQU13SCxhQUFhckUsVUFBVTFMLE9BQU9ULEdBQUcsQ0FBQyxtQkFBbUI7SUFDM0QsTUFBTXlRLFlBQVlsSCxpQkFBaUJQLFNBQVNTO0lBQzVDLE1BQU1pSCxXQUFXalEsT0FBT1QsR0FBRyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFd1EsWUFBWTtJQUVwRixJQUFHL0ssU0FBUyxRQUFRO1FBQ2xCLE9BQU8sR0FBR2lMLFNBQVMsQ0FBQyxFQUFFakwsS0FBSyxDQUFDLEVBQUU0SyxVQUFVLENBQUMsRUFBRUksV0FBVztJQUN4RDtJQUVBLE9BQU8sR0FBR0MsU0FBUyxDQUFDLEVBQUVqTCxLQUFLLENBQUMsRUFBRThLLE9BQU8sQ0FBQyxFQUFFRixVQUFVLENBQUMsRUFBRUksV0FBVztBQUNsRSxFQUFFO0FBRUYsT0FBTyxNQUFNRSxjQUFjLE9BQU8sRUFDaEN4RSxNQUFNLEVBQ04xQyxXQUFXLFdBQVcsRUFDdEJtSCxXQUFXLFFBQVEsRUFDbkJDLFdBQVcsUUFBUSxFQUNuQjdILE9BQU8sRUFDUHZELElBQUksRUFDSjhLLE1BQU0sRUFDTk8sVUFBVSxRQUFRLEVBQ2Q7SUFDSixJQUFHLENBQUM5SCxTQUFTO1FBQ1gsT0FBTztJQUNUO0lBRUEsTUFBTStILFNBQVNGLFlBQVlELFlBQVk7SUFDdkMsTUFBTUksV0FBVyxHQUFHdkwsS0FBSyxDQUFDLEVBQUU4SyxPQUFPLENBQUMsRUFBRVEsT0FBTyxDQUFDLEVBQUV4SCxpQkFBaUJQLFNBQVNTLFdBQVc7SUFFckYsT0FBT3FIO1FBQ0wsS0FBSztZQUFVO2dCQUNiLE1BQU1HLGdCQUFnQnhRLE9BQU9ULEdBQUcsQ0FBQyxtQkFBbUI7Z0JBQ3BELE9BQU8sTUFBTWtDLGVBQWU7b0JBQUNpSSxRQUFRZ0MsVUFBVThFO29CQUFlQyxTQUFTLEtBQUs7b0JBQUk3RyxLQUFLMkc7Z0JBQVE7WUFDL0Y7UUFDQSxLQUFLO1lBQVU7Z0JBQ2IsT0FBTyxDQUFDLFlBQVksRUFBRXZRLE9BQU9ULEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRWdSLFVBQVU7WUFDM0Q7UUFDQSxLQUFLO1lBQU87Z0JBQ1YsT0FBTyxDQUFDLDZCQUE2QixFQUFFdlEsT0FBT1QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFZ1IsVUFBVTtZQUM1RTtRQUNBO1lBQVM7Z0JBQ1AsT0FBTztZQUNUO0lBQ0Y7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNRyx1QkFBdUIsT0FBT3pHLE1BQWMsRUFBRSxFQUFFeUI7SUFDM0QsTUFBTTZFLFdBQVdqTixPQUFPMkcsT0FBTyxJQUFJMUcsSUFBSTtJQUV2QyxJQUFHLENBQUNnTixVQUFVO1FBQ1osT0FBTztJQUNUO0lBRUEsTUFBTUMsZ0JBQWdCeFEsT0FBT1QsR0FBRyxDQUFDLG1CQUFtQjtJQUNwRCxPQUFPLE1BQU1rQyxlQUFlO1FBQUNpSSxRQUFRZ0MsVUFBVThFO1FBQWVDLFNBQVMsS0FBSztRQUFJN0csS0FBSzJHO0lBQVE7QUFDL0YsRUFBRTtBQUVGLE9BQU8sTUFBTUksWUFBWSxPQUN2QnpNLFNBQ0FxRSxTQUNBZ0IsUUFDQVAsV0FBbUIsV0FBVyxFQUFFNEg7SUFFaEMsTUFBTSxFQUFDeEosU0FBUyxFQUFDdEQsUUFBUStELFNBQVMsRUFBQyxFQUFDLEdBQUczRDtJQUV2QyxNQUFNMk0sV0FBa0M7UUFDdENwSCxNQUFNRjtRQUNORyxRQUFRO1FBQ1JDLGFBQWFYO1FBQ2IsR0FBSTRILGFBQWEsQ0FBQyxDQUFDO1FBQ25CaEgsS0FBS2xCLGtCQUFrQmIsV0FBV1UsU0FBU1MsVUFBVTtJQUN2RDtJQUVBLE1BQU1ySCxNQUFNa1A7SUFFWixPQUFPO1FBQ0xDLFVBQVV2SCxPQUFPL0IsTUFBTTtRQUN2QndCO1FBQ0FUO0lBQ0Y7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNd0ksNkJBQTZCLE9BQ3hDN00sU0FDQVIsT0FDQXNOLFlBQW9CLENBQUM7SUFFckIsTUFBTWpMLFNBQVM7SUFDZixNQUFNLEVBQUNxQixTQUFTLEVBQUN0RCxRQUFRK0QsWUFBWSxFQUFFLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxHQUFHM0Q7SUFDakQsTUFBTSxFQUNKK00sY0FBYyxFQUFFLEVBQ2hCSCxRQUFRLEVBQ1I5SCxXQUFXLFdBQVcsRUFDdEJqRyxNQUFNLEVBQ05tTyxRQUFRLEVBQ1I3TixPQUFPLEVBQ1A2RixjQUFjLEVBQUUsRUFDaEJDLGdCQUFnQixZQUFZLEVBQzVCbkUsT0FBTyxPQUFPLEVBQ2R1RCxPQUFPLEVBQ1IsR0FBRzdFO0lBQ0osTUFBTThFLGdCQUFnQjVJLFFBQVEySSxZQUFZOUksV0FBVyxDQUFDLE1BQU0sRUFBRW9JLFVBQVUsQ0FBQyxFQUFFK0QsS0FBS0MsR0FBRyxHQUFHLENBQUMsRUFBRXZJLE9BQU9JLE9BQU95TixZQUFZLEtBQUs7SUFDeEgsTUFBTUMsZUFBZXhSLFFBQVFtRDtJQUM3QixNQUFNc08saUJBQXFDMVIsVUFBVXVSLFVBQVUsSUFBSTFOLFdBQVc7SUFDOUUsTUFBTXlHLE1BQU1sQixrQkFBa0JsQixXQUFXVyxlQUFlUTtJQUN4RCxNQUFNc0ksZ0JBQWdCL0IsS0FBS0MsR0FBRyxDQUFDLEdBQUdELEtBQUtFLEdBQUcsQ0FBQ3ZCLE9BQU84QyxhQUFhdE4sT0FBT3NOLGFBQWEsSUFBSTtJQUV2RixJQUFJO1FBQ0YsTUFBTU8sU0FBUyxNQUFNbFEsd0JBQXdCO1lBQzNDcUksUUFBUTtZQUNSQyxhQUFhWDtZQUNiWSxLQUFLSztZQUNMdUgsVUFBVTtnQkFDUnpPLFFBQVFxTyxnQkFBZ0I7Z0JBQ3hCRixVQUFVRyxrQkFBa0I7Z0JBQzVCdk4sUUFBUStEO2dCQUNSVSxTQUFTQztZQUNYO1FBQ0Y7UUFDQSxNQUFNMEIsV0FBVzVHLE9BQU9pTyxRQUFRL0csWUFBWTtRQUU1QyxJQUFHLENBQUNOLFVBQVU7WUFDWixNQUFNLElBQUlKLE1BQU07UUFDbEI7UUFFQSxNQUFNK0IsTUFBTUQsS0FBS0MsR0FBRztRQUNwQixNQUFNNEYsV0FBVyxNQUFNeEksbUJBQW1CL0UsU0FBU3NFLGVBQWVVLGFBQWFDO1FBQy9FLE1BQU11SSxTQUFvQjtZQUN4QmpKLE1BQU1EO1lBQ05tSixPQUFPOUY7WUFDUG9GO1lBQ0FIO1lBQ0E5SDtZQUNBMkMsVUFBVUU7WUFDVnhJO1lBQ0EwSSxrQkFBa0I7WUFDbEJYLFdBQVduQjtZQUNYLEdBQUl3SCxXQUFXO2dCQUFDdEk7WUFBYSxJQUFJLENBQUMsQ0FBQztZQUNuQ25FO1lBQ0FrRjtZQUNBbUIsV0FBV3BCO1lBQ1gySCxjQUFjO1lBQ2Q5TixRQUFRK0Q7UUFDVjtRQUNBLE1BQU1nSyxXQUFXLE1BQU1oUixRQUFtQnFELFNBQVMsVUFBVXdOO1FBRTdELElBQUdOLGdCQUFnQkMsZ0JBQWdCO1lBQ2pDLE1BQU1TLFlBQTJCO2dCQUFDdkosU0FBU0M7Z0JBQWV6RixRQUFRcU87Z0JBQWNGLFVBQVVHO2dCQUFnQnJNLE1BQU07WUFBTztZQUN2SCxNQUFNK00sYUFBYTdOLFNBQVM0TjtRQUM5QjtRQUVBLE1BQU0zSCxjQUFjNkgsTUFBTWxOLElBQUksQ0FBQztZQUFDMEMsUUFBUThKO1FBQWEsR0FBRyxDQUFDVyxRQUFRakgsUUFBVUEsUUFBUTtRQUNuRixNQUFNa0gsV0FBVyxNQUFNbEksaUJBQWlCQyxLQUFLQyxVQUFVQztRQUV2RCxPQUFPO1lBQ0x1QixRQUFRbEs7WUFDUnlJO1lBQ0FrSSxVQUFVblE7WUFDVmtRO1lBQ0FoSTtZQUNBeEcsT0FBT21PO1lBQ1B0SixTQUFTQztRQUNYO0lBQ0YsRUFBRSxPQUFNbEMsT0FBTztRQUNiLE9BQU9oRyxTQUFTO1lBQ2R5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO0lBQ3JCO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTWtPLGtDQUFrQyxPQUM3Q2xPLFNBQ0FxRSxTQUNBMkIsVUFDQUMsY0FBd0IsRUFBRTtJQUUxQixNQUFNcEUsU0FBUztJQUVmLElBQUk7UUFDRixNQUFNckMsUUFBUSxNQUFNbUcsa0JBQWtCM0YsU0FBU3FFO1FBQy9DLE1BQU0wQixNQUFNM0csT0FBT0ksT0FBTzJILGFBQWEzSCxPQUFPMEgsYUFBYXJDLGtCQUFrQnpGLE9BQU9JLE9BQU9JLFVBQVUsS0FBS2xFLFFBQVEySSxVQUFVN0UsT0FBT3NGO1FBQ25JLE1BQU1xSixpQkFBaUIvTyxPQUFPNEcsWUFBWXhHLE9BQU93RyxZQUFZO1FBRTdELElBQUcsQ0FBQ0QsT0FBTyxDQUFDb0ksZ0JBQWdCO1lBQzFCLE9BQU8sRUFBRTtRQUNYO1FBRUEsT0FBTyxNQUFNckksaUJBQWlCQyxLQUFLb0ksZ0JBQWdCbEksWUFBWW5DLEdBQUcsQ0FBQyxDQUFDcUMsYUFBZTZELE9BQU83RCxhQUFhM0MsTUFBTSxDQUFDcUQ7SUFDaEgsRUFBRSxPQUFNekUsT0FBTztRQUNiLE9BQU9oRyxTQUFTO1lBQ2R5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO0lBQ3JCO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTW9PLCtCQUErQixPQUMxQ3BPLFNBQ0FxRSxTQUNBMkIsVUFDQXFJLFFBQWdDLEVBQUU7SUFFbEMsTUFBTXhNLFNBQVM7SUFFZixJQUFJO1FBQ0YsTUFBTXJDLFFBQVEsTUFBTW1HLGtCQUFrQjNGLFNBQVNxRTtRQUMvQyxNQUFNQyxnQkFBZ0I1SSxRQUFRMkk7UUFDOUIsTUFBTThKLGlCQUFpQi9PLE9BQU80RyxZQUFZeEcsT0FBT3dHLFlBQVk7UUFDN0QsTUFBTUQsTUFBTTNHLE9BQU9JLE9BQU8ySCxhQUFhM0gsT0FBTzBILGFBQWFyQyxrQkFBa0J6RixPQUFPSSxPQUFPSSxVQUFVLEtBQUswRSxlQUFlOUUsT0FBT3NGO1FBQ2hJLE1BQU13SixjQUFjRCxNQUNqQnZLLEdBQUcsQ0FBQyxDQUFDeUssT0FBVSxDQUFBO2dCQUNkQyxNQUFNcFAsT0FBT21QLE1BQU1FLFFBQVEsSUFBSXBQLElBQUk7Z0JBQ25DZ0gsWUFBWTJELE9BQU91RSxNQUFNcEksY0FBYztZQUN6QyxDQUFBLEdBQ0MzQyxNQUFNLENBQUMsQ0FBQytLLE9BQVNBLEtBQUtDLElBQUksSUFBSUQsS0FBS2xJLFVBQVUsR0FBRyxHQUNoRHJFLElBQUksQ0FBQyxDQUFDME0sR0FBR0MsSUFBTUQsRUFBRXJJLFVBQVUsR0FBR3NJLEVBQUV0SSxVQUFVO1FBRTdDLElBQUcsQ0FBQ04sT0FBTyxDQUFDb0ksa0JBQWtCLENBQUNHLFlBQVloTCxNQUFNLEVBQUU7WUFDakQsTUFBTSxJQUFJc0MsTUFBTTtRQUNsQjtRQUVBLE1BQU0xSSwwQkFBMEI7WUFDOUJzSSxRQUFRO1lBQ1JFLEtBQUtLO1lBQ0w2SSxpQkFBaUI7Z0JBQ2ZDLE9BQU9QO1lBQ1Q7WUFDQWhJLFVBQVU2SDtRQUNaO1FBRUEsTUFBTWxELGVBQWUsTUFBTWxPLFdBQXNCaUQsU0FBUyxVQUFVc0UsZUFBZTtZQUNqRm1ELFVBQVVDLEtBQUtDLEdBQUc7WUFDbEIsR0FBSU4scUJBQXFCN0gsU0FDckI7Z0JBQUNxSSxrQkFBa0I7WUFBUSxJQUMzQjtnQkFDQTRDLGtCQUFrQmpMLE9BQU9zRixZQUFZO2dCQUNyQ3NDLGFBQWFyQjtnQkFDYjhCLGtCQUFrQjtnQkFDbEI2QyxZQUFZO1lBQ2QsQ0FBQztZQUNIZ0QsY0FBYztRQUNoQjtRQUVBLElBQUdyRyxxQkFBcUI0RCxlQUFlO1lBQ3JDLEtBQUszRCx3QkFBd0J0SCxTQUFTaUw7UUFDeEMsT0FBTztZQUNMLEtBQUsxRSw0QkFBNEJ2RyxTQUFTaUw7UUFDNUM7UUFFQSxPQUFPQTtJQUNULEVBQUUsT0FBTTdJLE9BQU87UUFDYixPQUFPaEcsU0FBUztZQUNkeUY7WUFDQVEsVUFBVTFFO1lBQ1YyRSxPQUFPbkcsV0FBV29HLGNBQWM7UUFDbEMsR0FBR0gsT0FBZ0JwQztJQUNyQjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU04Tyw0QkFBNEIsT0FDdkM5TyxTQUNBcUUsU0FDQTJCO0lBRUEsTUFBTW5FLFNBQVM7SUFFZixJQUFJO1FBQ0YsTUFBTXJDLFFBQVEsTUFBTW1HLGtCQUFrQjNGLFNBQVNxRTtRQUMvQyxNQUFNOEosaUJBQWlCL08sT0FBTzRHLFlBQVl4RyxPQUFPd0csWUFBWTtRQUM3RCxNQUFNRCxNQUFNM0csT0FBT0ksT0FBTzJILGFBQWEzSCxPQUFPMEgsYUFBYXJDLGtCQUFrQnpGLE9BQU9JLE9BQU9JLFVBQVUsS0FBS2xFLFFBQVEySSxVQUFVN0UsT0FBT3NGO1FBRW5JLElBQUdpQixPQUFPb0ksZ0JBQWdCO1lBQ3hCLE1BQU1sUix1QkFBdUI7Z0JBQzNCdUksUUFBUTtnQkFDUkUsS0FBS0s7Z0JBQ0xPLFVBQVU2SDtZQUNaO1FBQ0Y7UUFFQSxNQUFNcFIsV0FBc0JpRCxTQUFTLFVBQVV0RSxRQUFRMkksVUFBVTtZQUMvRG9ELFVBQVVDLEtBQUtDLEdBQUc7WUFDbEIrRixjQUFjO1FBQ2hCO1FBRUEsT0FBTztJQUNULEVBQUUsT0FBTXRMLE9BQU87UUFDYmhHLFNBQVM7WUFDUHlGO1lBQ0FRLFVBQVUxRTtZQUNWMkUsT0FBT25HLFdBQVdvRyxjQUFjO1FBQ2xDLEdBQUdILE9BQWdCcEM7UUFDbkIsT0FBTztJQUNUO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTStPLFdBQVcsQ0FDdEIvTyxTQUNBUixPQUNBa047SUFFQSxNQUFNN0ssU0FBUztJQUNmLE1BQU0sRUFBQ3FCLFNBQVMsRUFBQ3RELFFBQVErRCxTQUFTLEVBQUMsRUFBQyxHQUFHM0Q7SUFDdkMsTUFBTSxFQUFDcUUsT0FBTyxFQUFFMEksV0FBVyxFQUFFMUgsTUFBTSxFQUFFUCxRQUFRLEVBQUUzRixPQUFPLEVBQUUyQixPQUFPLE9BQU8sRUFBRWtPLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUMsR0FBRzFQO0lBRTdHLElBQUdzQixTQUFTLFlBQVk7UUFDdEIsTUFBTTBNLFNBQW9CO1lBQ3hCakosTUFBTUY7WUFDTjBJO1lBQ0FrQztZQUNBQztZQUNBL1A7WUFDQTZQO1lBQ0FsTztZQUNBbEIsUUFBUStEO1FBQ1Y7UUFFQSxPQUFPaEgsUUFBbUJxRCxTQUFTLFVBQVV3TixRQUMxQ3JMLEtBQUssQ0FBQyxDQUFDQyxRQUFpQmhHLFNBQVM7Z0JBQ2hDeUY7Z0JBQ0FRLFVBQVUxRTtnQkFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztZQUNsQyxHQUFHSCxPQUFPcEM7SUFDZDtJQUVBLE9BQU95TSxVQUFVek0sU0FBU3FFLFNBQVNnQixRQUFRUCxVQUFVNEgsV0FDbEQ3SixJQUFJLENBQUMsQ0FBQ3NNO1FBQ0wsTUFBTTNCLFNBQW9CO1lBQ3hCLEdBQUcyQixLQUFLO1lBQ1I1SyxNQUFNRjtZQUNOMEk7WUFDQWpJO1lBQ0EzRjtZQUNBMkI7WUFDQWxCLFFBQVErRDtRQUNWO1FBRUEsT0FBT2hILFFBQW1CcUQsU0FBUyxVQUFVd04sUUFDMUNyTCxLQUFLLENBQUMsQ0FBQ0MsUUFBaUJoRyxTQUFTO2dCQUNoQ3lGO2dCQUNBUSxVQUFVMUU7Z0JBQ1YyRSxPQUFPbkcsV0FBV29HLGNBQWM7WUFDbEMsR0FBR0gsT0FBT3BDO0lBQ2Q7QUFDSixFQUFFO0FBRUYsT0FBTyxNQUFNNk4sZUFBZSxPQUFPN04sU0FBcUI0TjtJQUN0RCxNQUFNL0wsU0FBUztJQUNmLE1BQU0sRUFBQ1ksWUFBWSxFQUFFUyxTQUFTLEVBQUN0RCxRQUFRK0QsU0FBUyxFQUFDLEVBQUMsR0FBRzNEO0lBQ3JELE1BQU0sRUFBQ3FFLE9BQU8sRUFBRXhGLE1BQU0sRUFBRW1PLFFBQVEsRUFBQyxHQUFHWTtJQUNwQyxNQUFNakcsTUFBTUQsS0FBS0MsR0FBRztJQUNwQixNQUFNeUgsU0FBUzdULFdBQVcsQ0FBQyxlQUFlLEVBQUU4SSxRQUFRLENBQUMsRUFBRXhGLE9BQU8sQ0FBQyxFQUFFOEUsV0FBVztJQUM1RSxNQUFNd0osaUJBQXFDMVIsVUFBVXVSLFVBQVUxTixXQUFXO0lBQzFFLE1BQU00TixlQUFleFIsUUFBUW1EO0lBQzdCLE1BQU13USxZQUFZOVMsU0FBUzRRLGdCQUFnQjtRQUFDNUksTUFBTTJJO0lBQVk7SUFDOUQsTUFBTTVJLGdCQUFnQjVJLFFBQVEySTtJQUM5QixNQUFNaUwsWUFBWSxDQUFDLE9BQU8sRUFBRWhMLGVBQWU7SUFFM0MsTUFBTWlMLE9BQXNCO1FBQzFCQyxPQUFPSDtRQUNQOUssTUFBTTZLO1FBQ05LLEtBQUtIO1FBQ0w3QixPQUFPOUY7UUFDUHFGO1FBQ0FsTSxNQUFNO0lBQ1I7SUFFQSxJQUFHdU8sV0FBVztRQUNaLE9BQU81UyxNQUFNZ0csY0FBY2lOLFVBQVUsQ0FBQzFULE1BQU02QixTQUFTLEVBQUU4UixJQUFJLENBQUNKLE1BQU07WUFBQ0ssV0FBVztRQUFJLEdBQy9FL00sSUFBSSxDQUFDLENBQUNnTixXQUFhcFQsTUFBTWdHLGNBQWNpTixVQUFVLENBQUMxVCxNQUFNNkIsU0FBUyxFQUFFaVMsUUFBUSxDQUFDRCxXQUM1RTFOLEtBQUssQ0FBQyxDQUFDQyxRQUFpQmhHLFNBQVM7Z0JBQ2hDeUY7Z0JBQ0FRLFVBQVUxRTtnQkFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztZQUNsQyxHQUFHSCxPQUFPcEM7SUFDZDtJQUVBLE9BQU87QUFDVCxFQUFFO0FBRUYsT0FBTyxNQUFNK1AsY0FBYyxPQUN6Qi9QLFNBQ0FSLE9BQ0FrTjtJQUVBLE1BQU03SyxTQUFTO0lBQ2YsTUFBTSxFQUFDcUIsU0FBUyxFQUFDdEQsUUFBUStELFNBQVMsRUFBQyxFQUFDLEdBQUczRDtJQUN2QyxNQUFNLEVBQ0pnUSxTQUFTLEVBQUUsRUFDWDNLLFFBQVE0SyxXQUFXLEVBQ25CbEQsY0FBYyxFQUFFLEVBQ2hCa0MsVUFBVSxFQUNWQyxXQUFXLEVBQ1hwSyxRQUFRLEVBQ1IrRixNQUFNLEVBQ05oTSxNQUFNLEVBQ05tTyxRQUFRLEVBQ1J2QyxnQkFBZ0IsRUFDaEJyRCxXQUFXLEVBQ1hTLGdCQUFnQixFQUNoQjFJLE9BQU8sRUFDUDZQLFFBQVEsRUFDUnRFLFVBQVUsRUFDVjVKLElBQUksRUFDSjRNLFlBQVksRUFDWnRILE1BQU0sRUFBRSxFQUNSL0IsT0FBTyxFQUNSLEdBQUc3RTtJQUVKLE1BQU04RSxnQkFBZ0JELFdBQVc5SSxXQUFXLENBQUMsTUFBTSxFQUFFb0ksV0FBVztJQUNoRSxNQUFNdUosZUFBZXhSLFFBQVFtRDtJQUM3QixNQUFNc08saUJBQXFDMVIsVUFBVXVSLFVBQVUsSUFBSTFOLFdBQVc7SUFFOUUsSUFBR3dCLFNBQVMsY0FBZW1PLENBQUFBLGNBQWNDLFdBQVUsR0FBSTtRQUNyRCxNQUFNMUIsU0FBb0I7WUFDeEJqSixNQUFNRDtZQUNOeUk7WUFDQWtDO1lBQ0FDO1lBQ0EvUDtZQUNBNlA7WUFDQWxPO1lBQ0FsQixRQUFRK0Q7UUFDVjtRQUVBLE9BQU9oSCxRQUFtQnFELFNBQVMsVUFBVXdOLFFBQzFDM0ssSUFBSSxDQUFDLENBQUM4SztZQUNMLElBQUdULGdCQUFnQkMsZ0JBQWdCO2dCQUNqQyxNQUFNUyxZQUEyQjtvQkFBQ3ZKLFNBQVNDO29CQUFlekYsUUFBUXFPO29CQUFjRixVQUFVRztvQkFBZ0JyTSxNQUFNO2dCQUFPO2dCQUN2SCxPQUFPK00sYUFBYTdOLFNBQVM0TixXQUFXL0ssSUFBSSxDQUFDLElBQU04SztZQUNyRDtZQUNBLE9BQU9BO1FBQ1QsR0FDQ3hMLEtBQUssQ0FBQyxDQUFDQyxRQUFpQmhHLFNBQVM7Z0JBQ2hDeUY7Z0JBQ0FRLFVBQVUxRTtnQkFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztZQUNsQyxHQUFHSCxPQUFPcEM7SUFDZDtJQUVBLElBQUdnUSxVQUFVQyxhQUFhO1FBQ3hCLElBQUk1SyxTQUFpQjRLO1FBQ3JCLElBQUdELFFBQVE7WUFDVCxNQUFNOUssZUFBZThLLE9BQU83SyxNQUFNLENBQUM2SyxPQUFPNUssT0FBTyxDQUFDLE9BQU87WUFDekRDLFNBQVNDLE9BQU8xRSxJQUFJLENBQUNzRSxjQUFjO1FBQ3JDO1FBRUEsSUFBSWdMLGtCQUFrQnBMO1FBQ3RCLElBQUcsQ0FBQ0EsVUFBVTtZQUNaLE1BQU0sRUFBQ3FMLGtCQUFrQixFQUFDLEdBQUcsTUFBTSxNQUFNLENBQUM7WUFDMUMsTUFBTSxFQUFDQyxJQUFJLEVBQUMsR0FBRyxNQUFNRCxtQkFBbUI5SztZQUN4QzZLLGtCQUFrQkU7UUFDcEI7UUFFQSxNQUFNQyxVQUFxQjtZQUFDaEw7WUFBUVAsVUFBVW9MO1lBQWlCdFEsUUFBUStEO1lBQVdVLFNBQVNDO1FBQWE7UUFDeEcsT0FBT3lLLFNBQVMvTyxTQUFTO1lBQUMsR0FBR3FRLE9BQU87WUFBRXREO1lBQWE1TjtRQUFPLEdBQUd1TixXQUMxRDdKLElBQUksQ0FBQyxDQUFDOEs7WUFDTCxJQUFHVCxnQkFBZ0JDLGdCQUFnQjtnQkFDakMsTUFBTVMsWUFBMkI7b0JBQUN2SixTQUFTQztvQkFBZXpGLFFBQVFxTztvQkFBY0YsVUFBVUc7b0JBQWdCck0sTUFBTTtnQkFBTztnQkFDdkgsT0FBTytNLGFBQWE3TixTQUFTNE4sV0FBVy9LLElBQUksQ0FBQyxJQUFNOEs7WUFDckQ7WUFDQSxPQUFPQTtRQUNULEdBQ0N4TCxLQUFLLENBQUMsQ0FBQ0MsUUFBaUJoRyxTQUFTO2dCQUNoQ3lGO2dCQUNBUSxVQUFVMUU7Z0JBQ1YyRSxPQUFPbkcsV0FBV29HLGNBQWM7WUFDbEMsR0FBR0gsT0FBT3BDO0lBQ2QsT0FBTyxJQUFHb0csUUFBUSxJQUFJO1FBQ3BCLElBQUlrSztRQUNKLE9BQU9oVixRQUFROEssS0FDWnZELElBQUksQ0FBQyxDQUFDME47WUFDTCxJQUFHQSxJQUFJQyxNQUFNLEtBQUssS0FBSztnQkFDckIsTUFBTSxJQUFJNUssTUFBTXpKLFdBQVdzVSxhQUFhO1lBQzFDO1lBQ0FILGNBQWNDLElBQUlHLE9BQU8sQ0FBQ3JWLEdBQUcsQ0FBQztZQUM5QixPQUFPa1Y7UUFDVCxHQUNDMU4sSUFBSSxDQUFDLENBQUMwTixNQUFRQSxJQUFJbEwsTUFBTSxJQUN4QnhDLElBQUksQ0FBQyxDQUFDd0M7WUFDTCxNQUFNZ0wsVUFBcUI7Z0JBQUNoTDtnQkFBUTBIO2dCQUFhakksVUFBVXdMO2dCQUFhblI7Z0JBQVNTLFFBQVErRDtnQkFBV1UsU0FBU0M7WUFBYTtZQUMxSCxPQUFPeUssU0FBUy9PLFNBQVNxUSxTQUFTM0QsV0FDL0I3SixJQUFJLENBQUMsQ0FBQzhLO2dCQUNMLElBQUdULGdCQUFnQkMsZ0JBQWdCO29CQUNqQyxNQUFNUyxZQUEyQjt3QkFBQ3ZKLFNBQVNDO3dCQUFlekYsUUFBUXFPO3dCQUFjRixVQUFVRzt3QkFBZ0JyTSxNQUFNO29CQUFPO29CQUN2SCxPQUFPK00sYUFBYTdOLFNBQVM0TixXQUFXL0ssSUFBSSxDQUFDLElBQU04SztnQkFDckQ7Z0JBQ0EsT0FBT0E7WUFDVCxHQUNDeEwsS0FBSyxDQUFDLENBQUNDLFFBQWlCaEcsU0FBUztvQkFDaEN5RjtvQkFDQVEsVUFBVTFFO29CQUNWMkUsT0FBT25HLFdBQVdvRyxjQUFjO2dCQUNsQyxHQUFHSCxPQUFPcEM7UUFDZCxHQUNDbUMsS0FBSyxDQUFDLENBQUNDLFFBQWlCaEcsU0FBUztnQkFDaEN5RjtnQkFDQVEsVUFBVTFFO2dCQUNWMkUsT0FBT25HLFdBQVdvRyxjQUFjO1lBQ2xDLEdBQUdILE9BQU9wQztJQUNkLE9BQU8sSUFBR3FFLFlBQVksSUFBSTtRQUN4QixNQUFNc00sU0FBUztZQUNiNUQ7WUFDQSxHQUFJbEMsV0FBVytGLFlBQVk7Z0JBQUMvRjtZQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3hDLEdBQUlKLHFCQUFxQm1HLFlBQVk7Z0JBQUNuRztZQUFnQixJQUFJLENBQUMsQ0FBQztZQUM1RCxHQUFJckQsZ0JBQWdCd0osWUFBWTtnQkFBQ3hKO1lBQVcsSUFBSSxDQUFDLENBQUM7WUFDbEQsR0FBSVMscUJBQXFCK0ksWUFBWTtnQkFBQy9JO1lBQWdCLElBQUksQ0FBQyxDQUFDO1lBQzVELEdBQUkxSSxZQUFZeVIsWUFBWTtnQkFBQ3pSO1lBQU8sSUFBSSxDQUFDLENBQUM7WUFDMUMsR0FBSXVMLGVBQWVrRyxZQUFZO2dCQUFDbEc7WUFBVSxJQUFJLENBQUMsQ0FBQztZQUNoRCxHQUFJZ0QsaUJBQWlCa0QsWUFBWTtnQkFBQ2xEO1lBQVksSUFBSSxDQUFDLENBQUM7UUFDdEQ7UUFDQSxPQUFPM1EsV0FBc0JpRCxTQUFTLFVBQVVzRSxlQUFlcU0sUUFDNUQ5TixJQUFJLENBQUMsQ0FBQ29JO1lBQ0wsSUFBR3BELHFCQUFxQixTQUFTO2dCQUMvQixLQUFLdEIsNEJBQTRCdkcsU0FBU2lMO1lBQzVDO1lBRUEsT0FBT0E7UUFDVCxHQUNDOUksS0FBSyxDQUFDLENBQUNDLFFBQWlCaEcsU0FBUztnQkFDaEN5RjtnQkFDQVEsVUFBVTFFO2dCQUNWMkUsT0FBT25HLFdBQVdvRyxjQUFjO1lBQ2xDLEdBQUdILE9BQU9wQztJQUNkO0lBRUEsT0FBTztBQUNULEVBQUU7QUFFRixPQUFPLE1BQU02USxjQUFjLE9BQU83USxTQUFxQnFFO0lBQ3JELE1BQU14QyxTQUFTO0lBQ2YsTUFBTSxFQUFDcUIsU0FBUyxFQUFDdEQsUUFBUStELFNBQVMsRUFBQyxFQUFDLEdBQUczRDtJQUN2QyxNQUFNc0UsZ0JBQWdCNUksUUFBUTJJO0lBRTlCLElBQUk7UUFDRixNQUFNN0UsUUFBUSxNQUFNNUMsV0FBc0JvRCxTQUFTLFVBQVVzRSxlQUFlO1lBQzFFd00sU0FBUztnQkFBQzlVLE1BQU02QixTQUFTO2dCQUFFN0IsTUFBTStVLFlBQVk7YUFBQztZQUM5Q0MsV0FBVztRQUNiO1FBRUEsSUFBR3hSLE9BQU87WUFDUixNQUFNLEVBQUMrRSxNQUFNME0sSUFBSSxFQUFFbk0sUUFBUSxFQUFFK0YsTUFBTSxFQUFFekQsV0FBVyxFQUFFRixTQUFTLEVBQUVqQyxhQUFhLEVBQUVrQyxTQUFTLEVBQUMsR0FBRzNIO1lBQ3pGLE1BQU0wUixPQUFPO2dCQUNYaEs7Z0JBQ0FDO2dCQUNBQztnQkFDQXlEO2dCQUNBLENBQUMsTUFBTSxFQUFFbEgsVUFBVSxRQUFRLEVBQUVzTixLQUFLLElBQUksQ0FBQztnQkFDdkNuTSxXQUFXTixrQkFBa0JiLFdBQVdzTixNQUFNbk0sVUFBVSxZQUFZO2dCQUNwRUcsZ0JBQWdCVCxrQkFBa0JiLFdBQVdzTixNQUFNaE0sZUFBZSxrQkFBa0I7YUFDckYsQ0FDRW5CLEdBQUcsQ0FBQyxDQUFDaUMsTUFBUTNHLE9BQU8yRyxPQUFPLElBQUkxRyxJQUFJLElBQ25DbUUsTUFBTSxDQUFDcUQsU0FDUHJELE1BQU0sQ0FBQyxDQUFDdUMsS0FBS2UsT0FBTzdHLE9BQVNBLEtBQUttRixPQUFPLENBQUNXLFNBQVNlO1lBQ3RELE1BQU0zQyxTQUFvQztnQkFDeENxQixRQUFRO2dCQUNSMkwsUUFBUTtvQkFDTkMsU0FBU0YsS0FBS3BOLEdBQUcsQ0FBQyxDQUFDNEIsTUFBUyxDQUFBOzRCQUFDQTt3QkFBRyxDQUFBO29CQUNoQzJMLE9BQU87Z0JBQ1Q7WUFDRjtZQUNBLE9BQU9oVSxhQUFhOEcsUUFBUXRCLElBQUksQ0FBQyxJQUFNckQ7UUFDekM7UUFFQSxPQUFPO0lBQ1QsRUFBRSxPQUFNNEMsT0FBTztRQUNiLE9BQU9oRyxTQUFTO1lBQ2R5RjtZQUNBUSxVQUFVMUU7WUFDVjJFLE9BQU9uRyxXQUFXb0csY0FBYztRQUNsQyxHQUFHSCxPQUFnQnBDO0lBQ3JCO0FBQ0YsRUFBRSJ9
1198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvdmlkZW9zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge1xuICBDcmVhdGVKb2JDb21tYW5kLFxuICBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQsXG4gIE1lZGlhQ29udmVydENsaWVudFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtbWVkaWFjb252ZXJ0JztcbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uc0J5VXNlcn0gZnJvbSAnLi4vbGFtYmRhcy9hY3Rpb25zL3dlYnNvY2tldHMuanMnO1xuaW1wb3J0IHt3c0NsaWVudH0gZnJvbSAnLi4vbGFtYmRhcy91dGlscy93ZWJzb2NrZXQuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5LCBidWlsZFRhZ3NRdWVyeX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRBd3NDcmVkZW50aWFsc30gZnJvbSAnLi4vdXRpbHMvYXdzVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7XG4gIHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkLFxuICBzM0RlbGV0ZSxcbiAgczNEZWxldGVMaXN0LFxuICBzM0dldEJ1Y2tldCxcbiAgczNHZXRTaWduZWRVcmwsXG4gIHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCxcbiAgczNQdXRcbn0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBWaWRlb0VkZ2VUeXBlLFxuICBWaWRlb011bHRpcGFydFVwbG9hZFR5cGUsXG4gIFZpZGVvT3B0aW9ucyxcbiAgVmlkZW9UeXBlLFxuICBWaWRlb1VwbG9hZFBhcnRJbnB1dCxcbiAgVmlkZW9VcGxvYWRQYXJ0VXJsLFxuICBWaWRlb1VybERhdGFcbn0gZnJvbSAnLi4vdHlwZXMvdmlkZW9zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICd2aWRlb3MnO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IFZJREVPX1BMQVlCQUNLX0RJUiA9ICd2aWRlby1wbGF5YmFjayc7XG5cbmxldCBtZWRpYUNvbnZlcnRFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRDbGllbnQgPSAoZW5kcG9pbnQ/OiBzdHJpbmcpOiBNZWRpYUNvbnZlcnRDbGllbnQgPT4gbmV3IE1lZGlhQ29udmVydENsaWVudCh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICBlbmRwb2ludCxcbiAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbn0pO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZihtZWRpYUNvbnZlcnRFbmRwb2ludCkge1xuICAgIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbiAgfVxuXG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5lbmRwb2ludCcpO1xuXG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0TWVkaWFDb252ZXJ0Q2xpZW50KCk7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQoe01heFJlc3VsdHM6IDF9KSk7XG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gZW5kcG9pbnRzLkVuZHBvaW50cz8uWzBdPy5Vcmw7XG5cbiAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xufTtcblxuY29uc3QgZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHBhcnNlZERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKHBhcnNlZERvY0lkKSB7XG4gICAgcmV0dXJuIFtwYXJzZWREb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtpdGVtS2V5fWAsXG4gICAgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7aXRlbUtleX1gXG4gIF07XG59O1xuXG5jb25zdCBub3JtYWxpemVWaWRlb1ByaXZhY3kgPSAocHJpdmFjeTogdW5rbm93bik6ICdmcmllbmRzJyB8ICdwcml2YXRlJyB8ICdwdWJsaWMnIHwgJ3ZpcCcgPT4ge1xuICBzd2l0Y2goU3RyaW5nKHByaXZhY3kgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gJ2ZyaWVuZHMnO1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuICdwcml2YXRlJztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuICd2aXAnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbn07XG5cbmNvbnN0IGNhblZpZXdWaWRlbyA9IChcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgdmlld2VyVXNlcklkOiBzdHJpbmcsXG4gIGFjY2Vzczoge1xuICAgIHJlYWRvbmx5IGNhblZpZXdGcmllbmRzOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhblZpZXdWaXA6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXNPd25lcjogYm9vbGVhbjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHByaXZhY3kgPSBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpO1xuXG4gIGlmKGFjY2Vzcy5pc093bmVyIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSA9PT0gdmlld2VyVXNlcklkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2gocHJpdmFjeSkge1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3RnJpZW5kcztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3VmlwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaXN0OiBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9PixcbiAgc2Vzc2lvblVzZXJJZDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBTdHJpbmcobGlzdFswXT8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gIGlmKGlzT3duZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuVmlld0ZyaWVuZHM6IHRydWUsXG4gICAgICBjYW5WaWV3VmlwOiB0cnVlLFxuICAgICAgaXNPd25lcjogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogZmFsc2UsXG4gICAgICBjYW5WaWV3VmlwOiBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGxldCBjYW5WaWV3RnJpZW5kcyA9IGZhbHNlO1xuICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuICBjb25zdCBtZWRpYUl0ZW1LZXkgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbUtleSB8fCAnJyk7XG4gIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbVR5cGUgfHwgJycpO1xuXG4gIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgIGNhblZpZXdGcmllbmRzID0gISFyZWxhdGlvbnNoaXA/LmlzRnJpZW5kO1xuICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhblZpZXdGcmllbmRzLFxuICAgIGNhblZpZXdWaXAsXG4gICAgaXNPd25lcjogZmFsc2VcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVZpZGVvT3B0aW9ucyA9IChvcHRpb25zOiBWaWRlb09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzAsIHR5cGUgPSAnZGVmYXVsdCd9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9PcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgY29uc3QgcmVhY3Rpb25RdWVyeSA9IGJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5KGZpZWxkLnJlcGxhY2UoJ0NvdW50JywgJycpLCAndicsICd2aWRlb3MnKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHJlYWN0aW9uUXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goYCR7ZmllbGR9OiR7ZmllbGR9YCk7XG4gICAgICByZXR1cm4gc2VsZWN0cztcbiAgICB9XG5cbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoRk9SIHZpZGVvLCByIElOIElOQk9VTkQgdi5faWQgcmVhY3Rpb25zIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXMgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgY29uc3QgdGFnc1F1ZXJ5ID0gYnVpbGRUYWdzUXVlcnkoJ3YnKTtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2godGFnc1F1ZXJ5KTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHYudXNlcklkID09IHUuX2tleSBMSU1JVCAxIFJFVFVSTiB1KWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdwcml2YWN5Jzoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb3NCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIgPSAwLFxuICB0bzogbnVtYmVyID0gMzBcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5VXNlcic7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY3VzdG9tUXVlcmllcyA9IFtcbiAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gIF07XG5cbiAgcmV0dXJuIGdldExpc3RCeTxWaWRlb1R5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ3ZpZGVvcycsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgICBjdXN0b21RdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICAgIH1cbiAgKS5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvQ291bnRCeUl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9Db3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIHYgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiB2Ll9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIHYudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb3NCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICBMRVQgdiA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKHYpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvblVzZXJJZCk7XG5cbiAgICBpZihhY2Nlc3MuaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25Vc2VySWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogVmlkZW9PcHRpb25zXG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwidmlkZW9zXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInZpZGVvc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIHYuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh2LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3YnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBtZWRpYSA/IG1lZGlhLml0ZW1LZXkgOiBudWxsLFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBtZWRpYSA/IG1lZGlhLml0ZW1UeXBlIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvbklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gY2FuVmlld1ZpZGVvKHZpZGVvLCBzZXNzaW9uSWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvJztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB7X2tleTogZm9ybWF0VmlkZW9JZH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VyVmlkZW9zID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIHZpZGVvVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICd2aWRlb3MnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gdmlkZW9JZDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0ZpbGVuYW1lID0gKHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1wNGA7XG5cbiAgc3dpdGNoKHZpZGVvVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VicGA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vd2VibSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYm1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vcXVpY2t0aW1lJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubW92YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBmaWxlbmFtZTtcbn07XG5cbmNvbnN0IGdldFZpZGVvVXBsb2FkS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJyk7XG5cbmNvbnN0IHNhdmVWaWRlb1RodW1ibmFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB0aHVtYkJhc2U2NDogc3RyaW5nID0gJycsXG4gIHRodW1iRmlsZVR5cGU6IHN0cmluZyA9ICdpbWFnZS9qcGVnJ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCF0aHVtYkJhc2U2NCB8fCAhdGh1bWJCYXNlNjQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEJhc2U2NCA9IHRodW1iQmFzZTY0LnN1YnN0cih0aHVtYkJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG5cbiAgaWYoIWJ1ZmZlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhd2FpdCBzM1B1dCh7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogdGh1bWJGaWxlVHlwZSxcbiAgICBLZXk6IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdmlkZW9JZCwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpXG4gIH0pO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWREb2MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlbyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXZpZGVvIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSAhPT0gc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICByZXR1cm4gdmlkZW87XG59O1xuXG5jb25zdCBnZXRWaWRlb1BhcnRVcmxzID0gYXN5bmMgKFxuICBrZXk6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydE51bWJlcnM6IG51bWJlcltdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiBQcm9taXNlLmFsbChwYXJ0TnVtYmVycy5tYXAoYXN5bmMgKHBhcnROdW1iZXIpID0+ICh7XG4gIHBhcnROdW1iZXIsXG4gIHVybDogYXdhaXQgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsKHtcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgS2V5OiBrZXksXG4gICAgUGFydE51bWJlcjogcGFydE51bWJlcixcbiAgICBVcGxvYWRJZDogdXBsb2FkSWRcbiAgfSlcbn0pKSk7XG5cbmNvbnN0IGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZighb3duZXJVc2VySWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uZWN0aW9ucyA9IGF3YWl0IGdldENvbm5lY3Rpb25zQnlVc2VyKG93bmVyVXNlcklkKS5jYXRjaCgoKSA9PiBbXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25JZHMgPSBjb25uZWN0aW9uc1xuICAgIC5tYXAoKGNvbm5lY3Rpb24pID0+IHBhcnNlU3RyaW5nKGNvbm5lY3Rpb24/LmNvbm5lY3Rpb25JZCB8fCBjb25uZWN0aW9uPy5zb2NrZXRJZCB8fCAnJywgMzIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmlsdGVyKChjb25uZWN0aW9uSWQsIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoY29ubmVjdGlvbklkKSA9PT0gaW5kZXgpO1xuXG4gIGlmKCFjb25uZWN0aW9uSWRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHdzQ2xpZW50LnNlbmQoY29ubmVjdGlvbklkcywge1xuICAgIGFjdGlvbjogJ3ZpZGVvLnByb2Nlc3NpbmcuY29tcGxldGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICB2aWRlb1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG59O1xuXG5jb25zdCBnZXRWaWRlb1BsYXliYWNrS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgZ2V0UGF0aFVzZXJWaWRlb3ModXNlcklkLCB2aWRlb0lkLCAndmlkZW8vbXA0JywgVklERU9fUExBWUJBQ0tfRElSKTtcblxuY29uc3QgZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QnO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHBsYXliYWNrS2V5ID0gU3RyaW5nKHZpZGVvPy5wbGF5YmFja0tleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzb3VyY2VLZXkgfHwgc291cmNlS2V5ID09PSBwbGF5YmFja0tleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgczNEZWxldGUoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBzb3VyY2VLZXlcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHZpZGVvSWQ6IHZpZGVvPy52aWRlb0lkIHx8IHZpZGVvPy5fa2V5fSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2hvdWxkVHJhbnNjb2RlVmlkZW8gPSAodmlkZW86IFZpZGVvVHlwZSA9IHt9KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZpbGVUeXBlID0gU3RyaW5nKHZpZGVvPy5maWxlVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBpZighZmlsZVR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAhW1xuICAgICd2aWRlby9tcDQnLFxuICAgICd2aWRlby93ZWJtJ1xuICBdLmluY2x1ZGVzKGZpbGVUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iJztcbiAgY29uc3Qgcm9sZUFybiA9IFN0cmluZyhDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LnJvbGVBcm4nKSB8fCAnJyk7XG4gIGNvbnN0IGJ1Y2tldCA9IHMzR2V0QnVja2V0KCkgfHwgQ29uZmlnLmdldCgnYXdzLnMzLkJ1Y2tldCcpO1xuICBjb25zdCB2aWRlb0lkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXkgfHwgJycpKTtcbiAgY29uc3QgdXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3Qgc291cmNlS2V5ID0gU3RyaW5nKHZpZGVvPy5zb3VyY2VLZXkgfHwgdmlkZW8/LnVwbG9hZEtleSB8fCAnJyk7XG5cbiAgaWYoIXJvbGVBcm4gfHwgIWJ1Y2tldCB8fCAhdmlkZW9JZCB8fCAhdXNlcklkIHx8ICFzb3VyY2VLZXkpIHtcbiAgICBpZih2aWRlb0lkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHByb2Nlc3NpbmdFcnJvcjogW1xuICAgICAgICAgICFyb2xlQXJuID8gJ21pc3NpbmdfbWVkaWFjb252ZXJ0X3JvbGVfYXJuJyA6ICcnLFxuICAgICAgICAgICFidWNrZXQgPyAnbWlzc2luZ19zM19idWNrZXQnIDogJycsXG4gICAgICAgICAgIXVzZXJJZCA/ICdtaXNzaW5nX3VzZXJfaWQnIDogJycsXG4gICAgICAgICAgIXNvdXJjZUtleSA/ICdtaXNzaW5nX3NvdXJjZV9rZXknIDogJydcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCcpLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoZW5kcG9pbnQpO1xuICAgIGNvbnN0IHF1ZXVlID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucXVldWVBcm4nKSB8fCAnJyk7XG4gICAgY29uc3Qgb3V0cHV0RGVzdGluYXRpb24gPSBgczM6Ly8ke2J1Y2tldH0vdXNlcnMvJHt1c2VySWR9LyR7VklERU9fUExBWUJBQ0tfRElSfS9gO1xuICAgIGNvbnN0IGpvYiA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVKb2JDb21tYW5kKHtcbiAgICAgIC4uLihxdWV1ZSA/IHtRdWV1ZTogcXVldWV9IDoge30pLFxuICAgICAgUm9sZTogcm9sZUFybixcbiAgICAgIFNldHRpbmdzOiB7XG4gICAgICAgIElucHV0czogW3tcbiAgICAgICAgICBBdWRpb1NlbGVjdG9yczoge1xuICAgICAgICAgICAgJ0F1ZGlvIFNlbGVjdG9yIDEnOiB7XG4gICAgICAgICAgICAgIERlZmF1bHRTZWxlY3Rpb246ICdERUZBVUxUJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgRmlsZUlucHV0OiBgczM6Ly8ke2J1Y2tldH0vJHtzb3VyY2VLZXl9YCxcbiAgICAgICAgICBUaW1lY29kZVNvdXJjZTogJ1pFUk9CQVNFRCcsXG4gICAgICAgICAgVmlkZW9TZWxlY3Rvcjoge1xuICAgICAgICAgICAgUm90YXRlOiAnQVVUTydcbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICBPdXRwdXRHcm91cHM6IFt7XG4gICAgICAgICAgTmFtZTogJ01QNCcsXG4gICAgICAgICAgT3V0cHV0R3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgRmlsZUdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgRGVzdGluYXRpb246IG91dHB1dERlc3RpbmF0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHlwZTogJ0ZJTEVfR1JPVVBfU0VUVElOR1MnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBPdXRwdXRzOiBbe1xuICAgICAgICAgICAgQXVkaW9EZXNjcmlwdGlvbnM6IFt7XG4gICAgICAgICAgICAgIEF1ZGlvU291cmNlTmFtZTogJ0F1ZGlvIFNlbGVjdG9yIDEnLFxuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQWFjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIEJpdHJhdGU6IDEyODAwMCxcbiAgICAgICAgICAgICAgICAgIENvZGluZ01vZGU6ICdDT0RJTkdfTU9ERV8yXzAnLFxuICAgICAgICAgICAgICAgICAgU2FtcGxlUmF0ZTogNDgwMDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvZGVjOiAnQUFDJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIENvbnRhaW5lclNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIENvbnRhaW5lcjogJ01QNCcsXG4gICAgICAgICAgICAgIE1wNFNldHRpbmdzOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFZpZGVvRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgQ29kZWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIENvZGVjOiAnSF8yNjQnLFxuICAgICAgICAgICAgICAgIEgyNjRTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgTWF4Qml0cmF0ZTogTnVtYmVyKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQubWF4Qml0cmF0ZScsIDUwMDAwMDApKSxcbiAgICAgICAgICAgICAgICAgIFJhdGVDb250cm9sTW9kZTogJ1FWQlInLFxuICAgICAgICAgICAgICAgICAgU2NlbmVDaGFuZ2VEZXRlY3Q6ICdUUkFOU0lUSU9OX0RFVEVDVElPTicsXG4gICAgICAgICAgICAgICAgICBRdWFsaXR5VHVuaW5nTGV2ZWw6ICdTSU5HTEVfUEFTUydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIFVzZXJNZXRhZGF0YToge1xuICAgICAgICBwbGF5YmFja0tleTogZ2V0VmlkZW9QbGF5YmFja0tleSh1c2VySWQsIHZpZGVvSWQpLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIHZpZGVvSWRcbiAgICAgIH1cbiAgICB9IGFzIGFueSkpO1xuXG4gICAgY29uc3Qgam9iSWQgPSBTdHJpbmcoam9iPy5Kb2I/LklkIHx8ICcnKTtcblxuICAgIGlmKGpvYklkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbWVkaWFDb252ZXJ0Sm9iSWQ6IGpvYklkLFxuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JJZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdtZWRpYWNvbnZlcnRfam9iX2ZhaWxlZCcsXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7c291cmNlS2V5LCB1c2VySWQsIHZpZGVvSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAge1xuICAgIGhsc0tleSA9ICcnLFxuICAgIHBsYXliYWNrRmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBwbGF5YmFja0tleSA9ICcnLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMgPSAncmVhZHknLFxuICAgIHN0cmVhbVR5cGUgPSAncHJvZ3Jlc3NpdmUnXG4gIH06IHtcbiAgICBobHNLZXk/OiBzdHJpbmc7XG4gICAgcGxheWJhY2tGaWxlVHlwZT86IHN0cmluZztcbiAgICBwbGF5YmFja0tleT86IHN0cmluZztcbiAgICBwcm9jZXNzaW5nU3RhdHVzPzogc3RyaW5nO1xuICAgIHN0cmVhbVR5cGU/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWaWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQpO1xuICBjb25zdCBmb3JtYXRQbGF5YmFja0tleSA9IHBsYXliYWNrS2V5IHx8IGdldFZpZGVvUGxheWJhY2tLZXkoU3RyaW5nKGN1cnJlbnRWaWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IHNvdXJjZURlbGV0ZWQgPSBwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknXG4gICAgPyBhd2FpdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdChjb250ZXh0LCB7XG4gICAgICAuLi5jdXJyZW50VmlkZW8sXG4gICAgICBwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXlcbiAgICB9IGFzIFZpZGVvVHlwZSlcbiAgICA6IGZhbHNlO1xuICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAuLi4oaGxzS2V5ID8ge2hsc0tleX0gOiB7fSksXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICAuLi4oZm9ybWF0UGxheWJhY2tLZXkgPyB7cGxheWJhY2tLZXk6IGZvcm1hdFBsYXliYWNrS2V5fSA6IHt9KSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIC4uLihzb3VyY2VEZWxldGVkID8ge3NvdXJjZUtleTogJycsIHVwbG9hZEtleTogJyd9IDoge30pLFxuICAgIHN0cmVhbVR5cGVcbiAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcblxuICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgYXdhaXQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFZpZGVvO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhaWxWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGltaXQ6IG51bWJlciA9IDEwXG4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNhZmVMaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihsaW1pdCB8fCAxMCksIDUwKSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHYgSU4gdmlkZW9zXG4gICAgICBGSUxURVIgdi51cGxvYWRTdGF0dXMgPT0gXCJ1cGxvYWRlZFwiXG4gICAgICBGSUxURVIgdi5wcm9jZXNzaW5nU3RhdHVzICE9IFwicmVhZHlcIlxuICAgICAgRklMVEVSIHYuZmlsZVR5cGUgIT0gXCJ2aWRlby9tcDRcIlxuICAgICAgRklMVEVSICFIQVModiwgXCJtZWRpYUNvbnZlcnRKb2JJZFwiKSB8fCB2Lm1lZGlhQ29udmVydEpvYklkID09IFwiXCJcbiAgICAgIFNPUlQgdi5hZGRlZCBERVNDXG4gICAgICBMSU1JVCAke3NhZmVMaW1pdH1cbiAgICAgIFJFVFVSTiB2XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBWaWRlb1R5cGVbXSk7XG4gICAgY29uc3Qgam9iSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHZpZGVvIG9mIGxpc3QpIHtcbiAgICAgIGNvbnN0IGpvYklkID0gYXdhaXQgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IoY29udGV4dCwgdmlkZW8pO1xuXG4gICAgICBpZihqb2JJZCkge1xuICAgICAgICBqb2JJZHMucHVzaChqb2JJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkcztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwVmlkZW9VcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICd2aWRlb3MnLFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdmlkZW9JZFxufTogVmlkZW9VcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgdmlkZW9OYW1lID0gZ2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSk7XG4gIGNvbnN0IHZpZGVvVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke3ZpZGVvTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpbWFnZURpciA9ICd2aWRlb3MnLFxuICB2aWRlb0RpciA9ICd2aWRlb3MnLFxuICB2aWRlb0lkLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogYW55KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIXZpZGVvSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrZXlEaXIgPSB2aWRlb0RpciB8fCBpbWFnZURpciB8fCAndmlkZW9zJztcbiAgY29uc3QgdmlkZW9LZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtrZXlEaXJ9LyR7Z2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSl9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke3ZpZGVvS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb1NpZ25lZEtleVVybCA9IGFzeW5jIChrZXk6IHN0cmluZyA9ICcnLCBidWNrZXQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB2aWRlb0tleSA9IFN0cmluZyhrZXkgfHwgJycpLnRyaW0oKTtcblxuICBpZighdmlkZW9LZXkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB2aWRlb09iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgIEJvZHk6IGJ1ZmZlcixcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCBmaWxlVHlwZSwgJ3ZpZGVvcycpXG4gIH07XG5cbiAgYXdhaXQgczNQdXQodmlkZW9PYmopO1xuXG4gIHJldHVybiB7XG4gICAgZmlsZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgZmlsZVR5cGUsXG4gICAgdmlkZW9JZFxuICB9IGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlICYge2ZpbGVOYW1lPzogc3RyaW5nOyBmaWxlU2l6ZT86IG51bWJlcjsgcGFydENvdW50PzogbnVtYmVyfSxcbiAgcGFydENvdW50OiBudW1iZXIgPSAxXG4pOiBQcm9taXNlPFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZmlsZVNpemUsXG4gICAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcHJpdmFjeSxcbiAgICB0aHVtYkJhc2U2NCA9ICcnLFxuICAgIHRodW1iRmlsZVR5cGUgPSAnaW1hZ2UvanBlZycsXG4gICAgdHlwZSA9ICd2aWRlbycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpIHx8IGNyZWF0ZUhhc2goYHZpZGVvLSR7c2Vzc2lvbklkfS0ke0RhdGUubm93KCl9LSR7U3RyaW5nKHZpZGVvPy5maWxlTmFtZSB8fCAnJyl9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBrZXkgPSBnZXRWaWRlb1VwbG9hZEtleShzZXNzaW9uSWQsIGZvcm1hdFZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3Qgc2FmZVBhcnRDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihwYXJ0Q291bnQgfHwgdmlkZW8/LnBhcnRDb3VudCB8fCAxKSwgMTAwMDApKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwbG9hZCA9IGF3YWl0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIEtleToga2V5LFxuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgaXRlbUlkOiBmb3JtYXRJdGVtSWQgfHwgJycsXG4gICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSB8fCAnJyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB1cGxvYWRJZCA9IFN0cmluZyh1cGxvYWQ/LlVwbG9hZElkIHx8ICcnKTtcblxuICAgIGlmKCF1cGxvYWRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHZpZGVvIHVwbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGhhc1RodW1iID0gYXdhaXQgc2F2ZVZpZGVvVGh1bWJuYWlsKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQsIHRodW1iQmFzZTY0LCB0aHVtYkZpbGVUeXBlKTtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBmaWxlU2l6ZSxcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncGVuZGluZ191cGxvYWQnLFxuICAgICAgc291cmNlS2V5OiBrZXksXG4gICAgICAuLi4oaGFzVGh1bWIgPyB7dGh1bWJGaWxlVHlwZX0gOiB7fSksXG4gICAgICB0eXBlLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB1cGxvYWRLZXk6IGtleSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGluZycsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuICAgIGNvbnN0IG5ld1ZpZGVvID0gYXdhaXQgYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpO1xuXG4gICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICBhd2FpdCBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0TnVtYmVycyA9IEFycmF5LmZyb20oe2xlbmd0aDogc2FmZVBhcnRDb3VudH0sIChfdmFsdWUsIGluZGV4KSA9PiBpbmRleCArIDEpO1xuICAgIGNvbnN0IHBhcnRVcmxzID0gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIHVwbG9hZElkLCBwYXJ0TnVtYmVycyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0OiBzM0dldEJ1Y2tldCgpLFxuICAgICAga2V5LFxuICAgICAgcGFydFNpemU6IERFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSxcbiAgICAgIHBhcnRVcmxzLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB2aWRlbzogbmV3VmlkZW8sXG4gICAgICB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkXG4gICAgfTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1VwbG9hZFBhcnRVcmxbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIGZvcm1hdFVwbG9hZElkLCBwYXJ0TnVtYmVycy5tYXAoKHBhcnROdW1iZXIpID0+IE51bWJlcihwYXJ0TnVtYmVyKSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9VcGxvYWRQYXJ0VXJsW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnRzOiBWaWRlb1VwbG9hZFBhcnRJbnB1dFtdID0gW11cbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCwgdmlkZW8/LmZpbGVUeXBlKSk7XG4gICAgY29uc3QgdXBsb2FkUGFydHMgPSBwYXJ0c1xuICAgICAgLm1hcCgocGFydCkgPT4gKHtcbiAgICAgICAgRVRhZzogU3RyaW5nKHBhcnQ/LmV0YWcgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgUGFydE51bWJlcjogTnVtYmVyKHBhcnQ/LnBhcnROdW1iZXIgfHwgMClcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5FVGFnICYmIHBhcnQuUGFydE51bWJlciA+IDApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5QYXJ0TnVtYmVyIC0gYi5QYXJ0TnVtYmVyKTtcblxuICAgIGlmKCFrZXkgfHwgIWZvcm1hdFVwbG9hZElkIHx8ICF1cGxvYWRQYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB2aWRlbyB1cGxvYWQgZGF0YS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIEtleToga2V5LFxuICAgICAgTXVsdGlwYXJ0VXBsb2FkOiB7XG4gICAgICAgIFBhcnRzOiB1cGxvYWRQYXJ0c1xuICAgICAgfSxcbiAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlZFZpZGVvID0gYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIC4uLihzaG91bGRUcmFuc2NvZGVWaWRlbyh2aWRlbylcbiAgICAgICAgPyB7cHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCd9XG4gICAgICAgIDoge1xuICAgICAgICAgIHBsYXliYWNrRmlsZVR5cGU6IHZpZGVvPy5maWxlVHlwZSB8fCAndmlkZW8vbXA0JyxcbiAgICAgICAgICBwbGF5YmFja0tleToga2V5LFxuICAgICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdyZWFkeScsXG4gICAgICAgICAgc3RyZWFtVHlwZTogJ3Byb2dyZXNzaXZlJ1xuICAgICAgICB9KSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGVkJ1xuICAgIH0pO1xuXG4gICAgaWYoc2hvdWxkVHJhbnNjb2RlVmlkZW8odXBkYXRlZFZpZGVvKSkge1xuICAgICAgdm9pZCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgcGFyc2VJZCh2aWRlb0lkKSwgdmlkZW8/LmZpbGVUeXBlKSk7XG5cbiAgICBpZihrZXkgJiYgZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIGF3YWl0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgICBVcGxvYWRJZDogZm9ybWF0VXBsb2FkSWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgcGFyc2VJZCh2aWRlb0lkKSwge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICB1cGxvYWRTdGF0dXM6ICdhYm9ydGVkJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt2aWRlb0lkLCBkZXNjcmlwdGlvbiwgYnVmZmVyLCBmaWxlVHlwZSwgcHJpdmFjeSwgdHlwZSA9ICd2aWRlbycsIHByb3ZpZGVyLCBleHRlcm5hbElkLCBleHRlcm5hbFVybH0gPSB2aWRlbztcblxuICBpZih0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIHNhdmVWaWRlbyhjb250ZXh0LCB2aWRlb0lkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHNhdmVkOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgICAuLi5zYXZlZCxcbiAgICAgICAgX2tleTogdmlkZW9JZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBwcml2YWN5LFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRWaWRlb0VkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gdmlkZW9FZGdlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNNZWRpYS12aWRlby0ke3ZpZGVvSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gZ2V0RG9jSWQoZm9ybWF0SXRlbVR5cGUsIHtfa2V5OiBmb3JtYXRJdGVtSWR9KTtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gIGNvbnN0IGZpbGVEb2NJZCA9IGB2aWRlb3MvJHtmb3JtYXRWaWRlb0lkfWA7XG5cbiAgY29uc3QgZWRnZTogVmlkZW9FZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlLFxuICAgIHR5cGU6ICd2aWRlbydcbiAgfSBhcyBWaWRlb0VkZ2VUeXBlO1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IHZpZGVvQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZXh0ZXJuYWxJZCxcbiAgICBleHRlcm5hbFVybCxcbiAgICBmaWxlVHlwZSxcbiAgICBobHNLZXksXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIHBsYXliYWNrRmlsZVR5cGUsXG4gICAgcGxheWJhY2tLZXksXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyxcbiAgICBwcml2YWN5LFxuICAgIHByb3ZpZGVyLFxuICAgIHN0cmVhbVR5cGUsXG4gICAgdHlwZSxcbiAgICB1cGxvYWRTdGF0dXMsXG4gICAgdXJsID0gJycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG5cbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHZpZGVvSWQgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcgJiYgKGV4dGVybmFsSWQgfHwgZXh0ZXJuYWxVcmwpKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiBmb3JtYXRWaWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgaWYoYmFzZTY0IHx8IHZpZGVvQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gdmlkZW9CdWZmZXIgYXMgQnVmZmVyO1xuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZmlsZVR5cGU6IHVwZGF0ZWRGaWxlVHlwZSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICByZXR1cm4gYWRkVmlkZW8oY29udGV4dCwgey4uLnZQYXJhbXMsIGRlc2NyaXB0aW9uLCBwcml2YWN5fSwgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZQYXJhbXM6IFZpZGVvVHlwZSA9IHtidWZmZXIsIGRlc2NyaXB0aW9uLCBmaWxlVHlwZTogY29udGVudFR5cGUsIHByaXZhY3ksIHVzZXJJZDogc2Vzc2lvbklkLCB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkfSBhcyBWaWRlb1R5cGU7XG4gICAgICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB2UGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHZpZGVvSWQgIT09ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAuLi4oaGxzS2V5ICE9PSB1bmRlZmluZWQgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0ZpbGVUeXBlICE9PSB1bmRlZmluZWQgPyB7cGxheWJhY2tGaWxlVHlwZX0gOiB7fSksXG4gICAgICAuLi4ocGxheWJhY2tLZXkgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0tleX0gOiB7fSksXG4gICAgICAuLi4ocHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkID8ge3Byb2Nlc3NpbmdTdGF0dXN9IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5fSA6IHt9KSxcbiAgICAgIC4uLihzdHJlYW1UeXBlICE9PSB1bmRlZmluZWQgPyB7c3RyZWFtVHlwZX0gOiB7fSksXG4gICAgICAuLi4odXBsb2FkU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7dXBsb2FkU3RhdHVzfSA6IHt9KVxuICAgIH07XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwgdXBkYXRlKVxuICAgICAgLnRoZW4oKHVwZGF0ZWRWaWRlbykgPT4ge1xuICAgICAgICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgICAgICAgdm9pZCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVWaWRlbyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZGVsZXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBjYXNjYWRlOiBbRURHRVMuSEFTX01FRElBLCBFREdFUy5IQVNfUkVBQ1RJT05dLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZih2aWRlbykge1xuICAgICAgY29uc3Qge19rZXk6IHZLZXksIGZpbGVUeXBlLCBobHNLZXksIHBsYXliYWNrS2V5LCBzb3VyY2VLZXksIHRodW1iRmlsZVR5cGUsIHVwbG9hZEtleX0gPSB2aWRlbztcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgIHNvdXJjZUtleSxcbiAgICAgICAgdXBsb2FkS2V5LFxuICAgICAgICBwbGF5YmFja0tleSxcbiAgICAgICAgaGxzS2V5LFxuICAgICAgICBgdXNlcnMvJHtzZXNzaW9uSWR9L3ZpZGVvcy8ke3ZLZXl9Lm1wNGAsXG4gICAgICAgIGZpbGVUeXBlID8gZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2S2V5LCBmaWxlVHlwZSwgJ3ZpZGVvcycpIDogJycsXG4gICAgICAgIHRodW1iRmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIHRodW1iRmlsZVR5cGUsICd2aWRlby10aHVtYnMnKSA6ICcnXG4gICAgICBdXG4gICAgICAgIC5tYXAoKGtleSkgPT4gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5maWx0ZXIoKGtleSwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihrZXkpID09PSBpbmRleCk7XG4gICAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czoga2V5cy5tYXAoKEtleSkgPT4gKHtLZXl9KSksXG4gICAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IHZpZGVvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkNyZWF0ZUpvYkNvbW1hbmQiLCJEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQiLCJNZWRpYUNvbnZlcnRDbGllbnQiLCJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsImdldENvbm5lY3Rpb25zQnlVc2VyIiwid3NDbGllbnQiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZFJlYWN0aW9uQ291bnRRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInVzZURiIiwiZ2V0QXdzQ3JlZGVudGlhbHMiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIiwiczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNEZWxldGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldEJ1Y2tldCIsInMzR2V0U2lnbmVkVXJsIiwiczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwiREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFIiwiVklERU9fUExBWUJBQ0tfRElSIiwibWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJnZXRNZWRpYUNvbnZlcnRDbGllbnQiLCJlbmRwb2ludCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJjbGllbnQiLCJlbmRwb2ludHMiLCJzZW5kIiwiTWF4UmVzdWx0cyIsIkVuZHBvaW50cyIsIlVybCIsImdldFZpZGVvTWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwicGFyc2VkRG9jSWQiLCJpdGVtS2V5IiwiVVNFUlMiLCJQRVJTT05BUyIsIm5vcm1hbGl6ZVZpZGVvUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3VmlkZW8iLCJ2aWRlbyIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJyZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MiLCJjb250ZXh0IiwibGlzdCIsInNlc3Npb25Vc2VySWQiLCJvd25lclVzZXJJZCIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsInBhcnNlVmlkZW9PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldFZpZGVvT3B0aW9uYWwiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJpbmNsdWRlcyIsInJlYWN0aW9uUXVlcnkiLCJyZXBsYWNlIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwidGFnc1F1ZXJ5IiwiZ2V0VmlkZW9zQnlVc2VyIiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwiY3VzdG9tUXVlcmllcyIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFZpZGVvQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0VmlkZW9zQnlJdGVtIiwic2Vzc2lvbiIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImFsbCIsImZpbHRlciIsImdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwic2Vzc2lvbklkIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwibWFwIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyYW1zIiwiZ2V0VmlkZW8iLCJ2aWRlb0lkIiwiZm9ybWF0VmlkZW9JZCIsIl9rZXkiLCJnZXRQYXRoVXNlclZpZGVvcyIsInZpZGVvVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0VmlkZW9GaWxlbmFtZSIsImdldFZpZGVvVXBsb2FkS2V5IiwiZmlsZVR5cGUiLCJzYXZlVmlkZW9UaHVtYm5haWwiLCJ0aHVtYkJhc2U2NCIsInRodW1iRmlsZVR5cGUiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiYnVmZmVyIiwiQnVmZmVyIiwiQm9keSIsIkJ1Y2tldCIsIkNvbnRlbnRUeXBlIiwiS2V5IiwiZ2V0VmlkZW9VcGxvYWREb2MiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJnZXRWaWRlb1BhcnRVcmxzIiwia2V5IiwidXBsb2FkSWQiLCJwYXJ0TnVtYmVycyIsIlByb21pc2UiLCJwYXJ0TnVtYmVyIiwidXJsIiwiUGFydE51bWJlciIsIlVwbG9hZElkIiwiZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlIiwiY29ubmVjdGlvbnMiLCJjb25uZWN0aW9uSWRzIiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25JZCIsInNvY2tldElkIiwiQm9vbGVhbiIsImluZGV4IiwiZGF0YSIsImdldFZpZGVvUGxheWJhY2tLZXkiLCJkZWxldGVWaWRlb1NvdXJjZU9iamVjdCIsInNvdXJjZUtleSIsInVwbG9hZEtleSIsInBsYXliYWNrS2V5Iiwic2hvdWxkVHJhbnNjb2RlVmlkZW8iLCJjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiIsInJvbGVBcm4iLCJidWNrZXQiLCJtb2RpZmllZCIsIkRhdGUiLCJub3ciLCJwcm9jZXNzaW5nRXJyb3IiLCJwcm9jZXNzaW5nU3RhdHVzIiwicXVldWUiLCJvdXRwdXREZXN0aW5hdGlvbiIsImpvYiIsIlF1ZXVlIiwiUm9sZSIsIlNldHRpbmdzIiwiSW5wdXRzIiwiQXVkaW9TZWxlY3RvcnMiLCJEZWZhdWx0U2VsZWN0aW9uIiwiRmlsZUlucHV0IiwiVGltZWNvZGVTb3VyY2UiLCJWaWRlb1NlbGVjdG9yIiwiUm90YXRlIiwiT3V0cHV0R3JvdXBzIiwiTmFtZSIsIk91dHB1dEdyb3VwU2V0dGluZ3MiLCJGaWxlR3JvdXBTZXR0aW5ncyIsIkRlc3RpbmF0aW9uIiwiVHlwZSIsIk91dHB1dHMiLCJBdWRpb0Rlc2NyaXB0aW9ucyIsIkF1ZGlvU291cmNlTmFtZSIsIkNvZGVjU2V0dGluZ3MiLCJBYWNTZXR0aW5ncyIsIkJpdHJhdGUiLCJDb2RpbmdNb2RlIiwiU2FtcGxlUmF0ZSIsIkNvZGVjIiwiQ29udGFpbmVyU2V0dGluZ3MiLCJDb250YWluZXIiLCJNcDRTZXR0aW5ncyIsIlZpZGVvRGVzY3JpcHRpb24iLCJIMjY0U2V0dGluZ3MiLCJNYXhCaXRyYXRlIiwiTnVtYmVyIiwiUmF0ZUNvbnRyb2xNb2RlIiwiU2NlbmVDaGFuZ2VEZXRlY3QiLCJRdWFsaXR5VHVuaW5nTGV2ZWwiLCJVc2VyTWV0YWRhdGEiLCJqb2JJZCIsIkpvYiIsIklkIiwibWVkaWFDb252ZXJ0Sm9iSWQiLCJwbGF5YmFja0ZpbGVUeXBlIiwic3RyZWFtVHlwZSIsIm1lc3NhZ2UiLCJjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyIsImhsc0tleSIsImN1cnJlbnRWaWRlbyIsImZvcm1hdFBsYXliYWNrS2V5Iiwic291cmNlRGVsZXRlZCIsInVwZGF0ZWRWaWRlbyIsImZhaWxWaWRlb1Byb2Nlc3NpbmciLCJxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwiLCJzYWZlTGltaXQiLCJNYXRoIiwibWF4IiwibWluIiwiam9iSWRzIiwiZ2V0QXBwVmlkZW9VcmwiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsInZpZGVvTmFtZSIsInZpZGVvVXJsIiwiZ2V0VmlkZW9VcmwiLCJpbWFnZURpciIsInZpZGVvRGlyIiwidXJsVHlwZSIsImtleURpciIsInZpZGVvS2V5IiwiZGVmYXVsdEJ1Y2tldCIsIkV4cGlyZXMiLCJnZXRWaWRlb1NpZ25lZEtleVVybCIsInNhdmVWaWRlbyIsInMzT3B0aW9ucyIsInZpZGVvT2JqIiwiZmlsZVNpemUiLCJjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRDb3VudCIsImRlc2NyaXB0aW9uIiwiaXRlbVR5cGUiLCJmaWxlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImZvcm1hdEl0ZW1UeXBlIiwic2FmZVBhcnRDb3VudCIsInVwbG9hZCIsIk1ldGFkYXRhIiwiaGFzVGh1bWIiLCJpbnNlcnQiLCJhZGRlZCIsInVwbG9hZFN0YXR1cyIsIm5ld1ZpZGVvIiwidmlkZW9FZGdlIiwiYWRkVmlkZW9FZGdlIiwiQXJyYXkiLCJfdmFsdWUiLCJwYXJ0VXJscyIsInBhcnRTaXplIiwiZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyIsImZvcm1hdFVwbG9hZElkIiwiY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRzIiwidXBsb2FkUGFydHMiLCJwYXJ0IiwiRVRhZyIsImV0YWciLCJhIiwiYiIsIk11bHRpcGFydFVwbG9hZCIsIlBhcnRzIiwiYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCIsImFkZFZpZGVvIiwicHJvdmlkZXIiLCJleHRlcm5hbElkIiwiZXh0ZXJuYWxVcmwiLCJzYXZlZCIsImVkZ2VJZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZVZpZGVvIiwiYmFzZTY0IiwidmlkZW9CdWZmZXIiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwidlBhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJkZWxldGVWaWRlbyIsImNhc2NhZGUiLCJIQVNfUkVBQ1RJT04iLCJvd25lcnNoaXAiLCJ2S2V5Iiwia2V5cyIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FDRUEsZ0JBQWdCLEVBQ2hCQyx3QkFBd0IsRUFDeEJDLGtCQUFrQixRQUNiLCtCQUErQjtBQUV0QyxTQUFRQyxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsTUFBTSxRQUFPLGVB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
@@ -65,4 +65,4 @@ const performDocumentTransformation = (doc)=>{
65
65
  });
66
66
  };
67
67
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2FyYW5nb0FkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0RvY3VtZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FyYW5nb1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgRG9jdW1lbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgX2Zyb206IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfcmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RpZmllZDogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KS5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEb2N1bWVudElucHV0ID0gKGRvYzogdW5rbm93bik6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gRG9jdW1lbnRJbnB1dFNjaGVtYS5wYXJzZShkb2MpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgRG9jdW1lbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RG9jdW1lbnRPdXRwdXQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4gZG9jO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEb2N1bWVudCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uKGRvYyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEFyYW5nb1ZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBhZGRlZCxcbiAgICBpZCxcbiAgICBtb2RpZmllZFxuICB9ID0gZG9jO1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLmRvYyxcbiAgICAuLi4oX2lkICYmIHtfaWQ6IHBhcnNlQXJhbmdvSWQoX2lkKX0pLFxuICAgIC4uLihfa2V5ICYmIHtfa2V5OiBwYXJzZUlkKF9rZXkpfSksXG4gICAgLi4uKGFkZGVkICE9PSB1bmRlZmluZWQgJiYge2FkZGVkOiBwYXJzZU51bShhZGRlZCwgMTMpfSksXG4gICAgLi4uKChfaWQgfHwgaWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQpfSksXG4gICAgLi4uKG1vZGlmaWVkICE9PSB1bmRlZmluZWQgJiYge21vZGlmaWVkOiBwYXJzZU51bShtb2RpZmllZCwgMTMpfSlcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwiQXJhbmdvVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiRG9jdW1lbnRJbnB1dFNjaGVtYSIsIm9iamVjdCIsIl9mcm9tIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfaWQiLCJfa2V5IiwiX29sZFJldiIsIl9yZXYiLCJfdG8iLCJhZGRlZCIsIm51bWJlciIsImlkIiwibW9kaWZpZWQiLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlRG9jdW1lbnRJbnB1dCIsImRvYyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0RG9jdW1lbnRPdXRwdXQiLCJwYXJzZURvY3VtZW50IiwicGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24iLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsYUFBYSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ3BFLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBR3RCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFFekQsT0FBTyxNQUFNQyw4QkFBOEJDOztJQUN6QyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLHNCQUFzQlAsRUFBRVEsTUFBTSxDQUFDO0lBQ25DQyxPQUFPVCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDMUJDLEtBQUtaLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4QkUsTUFBTWIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCRyxTQUFTZCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDNUJJLE1BQU1mLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkssS0FBS2hCLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4Qk0sT0FBT2pCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7SUFDMUJRLElBQUluQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDdkJTLFVBQVVwQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0FBQy9CLEdBQUdVLFdBQVc7QUFFZCxPQUFPLE1BQU1DLHdCQUF3QixDQUFDQztJQUNwQyxJQUFJO1FBQ0YsTUFBTUMsWUFBWWpCLG9CQUFvQmtCLEtBQUssQ0FBQ0Y7UUFDNUMsT0FBT0M7SUFDVCxFQUFFLE9BQU1FLE9BQU87UUFDYixJQUFHQSxpQkFBaUIxQixFQUFFMkIsUUFBUSxFQUFFO1lBQzlCLE1BQU1DLGNBQWNGLE1BQU1HLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUNDLElBQU0sR0FBR0EsRUFBRUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUVGLEVBQUUzQixPQUFPLEVBQUUsRUFBRTZCLElBQUksQ0FBQztZQUN0RixNQUFNLElBQUkvQixzQkFBc0IsQ0FBQyw0QkFBNEIsRUFBRTBCLGFBQWE7UUFDOUU7UUFDQSxNQUFNRjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTVEsdUJBQXVCLENBQUNYLE1BQW9DQSxJQUFJO0FBRTdFLE9BQU8sTUFBTVksZ0JBQWdCLENBQUNaO0lBQzVCLElBQUk7UUFDRixPQUFPYSw4QkFBOEJiO0lBQ3ZDLEVBQUUsT0FBTUcsT0FBTztRQUNiLElBQUdBLGlCQUFpQnhCLHVCQUF1QjtZQUN6QyxNQUFNd0I7UUFDUjtRQUNBLE1BQU0sSUFBSXhCLHNCQUFzQixDQUFDLHlCQUF5QixFQUFFd0IsaUJBQWlCdkIsUUFBUXVCLE1BQU10QixPQUFPLEdBQUcsaUJBQWlCO0lBQ3hIO0FBQ0YsRUFBRTtBQUVGLE1BQU1nQyxnQ0FBZ0MsQ0FBQ2I7SUFDckMsTUFBTSxFQUNKWCxHQUFHLEVBQ0hDLElBQUksRUFDSkksS0FBSyxFQUNMRSxFQUFFLEVBQ0ZDLFFBQVEsRUFDVCxHQUFHRztJQUVKLE9BQU90QixnQkFBZ0I7UUFDckIsR0FBR3NCLEdBQUc7UUFDTixHQUFJWCxPQUFPO1lBQUNBLEtBQUtkLGNBQWNjO1FBQUksQ0FBQztRQUNwQyxHQUFJQyxRQUFRO1lBQUNBLE1BQU1kLFFBQVFjO1FBQUssQ0FBQztRQUNqQyxHQUFJSSxVQUFVb0IsYUFBYTtZQUFDcEIsT0FBT3BCLFNBQVNvQixPQUFPO1FBQUcsQ0FBQztRQUN2RCxHQUFJLEFBQUNMLENBQUFBLE9BQU9PLEVBQUMsS0FBTTtZQUFDQSxJQUFJckIsY0FBY2MsT0FBT087UUFBRyxDQUFDO1FBQ2pELEdBQUlDLGFBQWFpQixhQUFhO1lBQUNqQixVQUFVdkIsU0FBU3VCLFVBQVU7UUFBRyxDQUFDO0lBQ2xFO0FBQ0YifQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2FyYW5nb0FkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0RvY3VtZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FyYW5nb1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgRG9jdW1lbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgX2Zyb206IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfcmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RpZmllZDogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KS5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEb2N1bWVudElucHV0ID0gKGRvYzogdW5rbm93bik6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gRG9jdW1lbnRJbnB1dFNjaGVtYS5wYXJzZShkb2MpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgRG9jdW1lbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RG9jdW1lbnRPdXRwdXQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4gZG9jO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEb2N1bWVudCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uKGRvYyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEFyYW5nb1ZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBhZGRlZCxcbiAgICBpZCxcbiAgICBtb2RpZmllZFxuICB9ID0gZG9jO1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLmRvYyxcbiAgICAuLi4oX2lkICYmIHtfaWQ6IHBhcnNlQXJhbmdvSWQoX2lkKX0pLFxuICAgIC4uLihfa2V5ICYmIHtfa2V5OiBwYXJzZUlkKF9rZXkpfSksXG4gICAgLi4uKGFkZGVkICE9PSB1bmRlZmluZWQgJiYge2FkZGVkOiBwYXJzZU51bShhZGRlZCwgMTMpfSksXG4gICAgLi4uKChfaWQgfHwgaWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQpfSksXG4gICAgLi4uKG1vZGlmaWVkICE9PSB1bmRlZmluZWQgJiYge21vZGlmaWVkOiBwYXJzZU51bShtb2RpZmllZCwgMTMpfSlcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwiQXJhbmdvVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiRG9jdW1lbnRJbnB1dFNjaGVtYSIsIm9iamVjdCIsIl9mcm9tIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfaWQiLCJfa2V5IiwiX29sZFJldiIsIl9yZXYiLCJfdG8iLCJhZGRlZCIsIm51bWJlciIsImlkIiwibW9kaWZpZWQiLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlRG9jdW1lbnRJbnB1dCIsImRvYyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0RG9jdW1lbnRPdXRwdXQiLCJwYXJzZURvY3VtZW50IiwicGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24iLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsYUFBYSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ3BFLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBR3RCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFFekQsT0FBTyxNQUFNQyw4QkFBOEJDOztJQUN6QyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLHNCQUFzQlAsRUFBRVEsTUFBTSxDQUFDO0lBQ25DQyxPQUFPVCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDMUJDLEtBQUtaLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4QkUsTUFBTWIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCRyxTQUFTZCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDNUJJLE1BQU1mLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkssS0FBS2hCLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4Qk0sT0FBT2pCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7SUFDMUJRLElBQUluQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDdkJTLFVBQVVwQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0FBQy9CLEdBQUdVLFdBQVc7QUFFZCxPQUFPLE1BQU1DLHdCQUF3QixDQUFDQztJQUNwQyxJQUFJO1FBQ0YsTUFBTUMsWUFBWWpCLG9CQUFvQmtCLEtBQUssQ0FBQ0Y7UUFDNUMsT0FBT0M7SUFDVCxFQUFFLE9BQU1FLE9BQU87UUFDYixJQUFHQSxpQkFBaUIxQixFQUFFMkIsUUFBUSxFQUFFO1lBQzlCLE1BQU1DLGNBQWNGLE1BQU1HLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUNDLElBQU0sR0FBR0EsRUFBRUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUVGLEVBQUUzQixPQUFPLEVBQUUsRUFBRTZCLElBQUksQ0FBQztZQUN0RixNQUFNLElBQUkvQixzQkFBc0IsQ0FBQyw0QkFBNEIsRUFBRTBCLGFBQWE7UUFDOUU7UUFDQSxNQUFNRjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTVEsdUJBQXVCLENBQUNYLE1BQW9DQSxJQUFJO0FBRTdFLE9BQU8sTUFBTVksZ0JBQWdCLENBQUNaO0lBQzVCLElBQUk7UUFDRixPQUFPYSw4QkFBOEJiO0lBQ3ZDLEVBQUUsT0FBTUcsT0FBTztRQUNiLElBQUdBLGlCQUFpQnhCLHVCQUF1QjtZQUN6QyxNQUFNd0I7UUFDUjtRQUNBLE1BQU0sSUFBSXhCLHNCQUFzQixDQUFDLHlCQUF5QixFQUFFd0IsaUJBQWlCdkIsUUFBUXVCLE1BQU10QixPQUFPLEdBQUcsaUJBQWlCO0lBQ3hIO0FBQ0YsRUFBRTtBQUVGLE1BQU1nQyxnQ0FBZ0MsQ0FBQ2I7SUFDckMsTUFBTSxFQUNKWCxHQUFHLEVBQ0hDLElBQUksRUFDSkksS0FBSyxFQUNMRSxFQUFFLEVBQ0ZDLFFBQVEsRUFDVCxHQUFHRztJQUVKLE9BQU90QixnQkFBZ0I7UUFDckIsR0FBR3NCLEdBQUc7UUFDTixHQUFJWCxPQUFPO1lBQUNBLEtBQUtkLGNBQWNjO1FBQUksQ0FBQztRQUNwQyxHQUFJQyxRQUFRO1lBQUNBLE1BQU1kLFFBQVFjO1FBQUssQ0FBQztRQUNqQyxHQUFJSSxVQUFVb0IsYUFBYTtZQUFDcEIsT0FBT3BCLFNBQVNvQixPQUFPO1FBQUcsQ0FBQztRQUN2RCxHQUFJLEFBQUNMLENBQUFBLE9BQU9PLEVBQUMsS0FBTTtZQUFDQSxJQUFJckIsY0FBY2MsT0FBT087UUFBRyxDQUFDO1FBQ2pELEdBQUlDLGFBQWFpQixhQUFhO1lBQUNqQixVQUFVdkIsU0FBU3VCLFVBQVU7UUFBRyxDQUFDO0lBQ2xFO0FBQ0YifQ==
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { parseArangoId, parseId, parseString } from '@nlabs/utils/parsers/strings';
5
5
  import { z } from 'zod';
6
6
  import { removeEmptyKeys } from '../utils/adapterUtils.js';
@@ -97,4 +97,4 @@ const performContentTransformation = (content)=>{
97
97
  };
98
98
  export const parseContentFromDb = (content)=>performContentTransformation(content);
99
99
 
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcbmltcG9ydCB7cGFyc2VEb2N1bWVudH0gZnJvbSAnLi9hcmFuZ29BZGFwdGVyLmpzJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbnRlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMgPSBbJ2VuJywgJ2VzJywgJ2ZyJywgJ2RlJywgJ3B0JywgJ2l0J10gYXMgY29uc3Q7XG5cbmNvbnN0IGNvbnRlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgY29udGVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSkub3B0aW9uYWwoKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50ID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50SW5wdXQgPSAoY29udGVudDogQ29udGVudElucHV0VHlwZSk6IENvbnRlbnRJbnB1dFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50SW5wdXRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudElucHV0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnRlbnRJZCxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRUZXh0LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlLFxuICAgIHVzZXJJZFxuICB9ID0gY29udGVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICAuLi5wYXJzZURvY3VtZW50KGNvbnRlbnQpLFxuICAgIC4uLigoX2tleSB8fCBjb250ZW50SWQpICYmIHtjb250ZW50SWQ6IHBhcnNlSWQoX2tleSB8fCBjb250ZW50SWQpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBjb250ZW50SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnRlbnQvJHtfa2V5IHx8IGNvbnRlbnRJZH1gKX0pLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50VGV4dCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7ZGVzY3JpcHRpb246IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApfSksXG4gICAgLi4uKGNhdGVnb3J5ICYmIHtjYXRlZ29yeTogcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCl9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh0cmFuc2Zvcm1lZCkgYXMgQ29udGVudFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50RnJvbURiID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4gcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb250ZW50KTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsInBhcnNlRG9jdW1lbnQiLCJDb250ZW50VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyIsImNvbnRlbnRTY2hlbWEiLCJvYmplY3QiLCJjb250ZW50SWQiLCJzdHJpbmciLCJvcHRpb25hbCIsImtleSIsIm1pbiIsIm1heCIsImxvY2FsZSIsImVudW0iLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwiYm9vbGVhbiIsInVzZXJJZCIsImNvbnRlbnRJbnB1dFNjaGVtYSIsInBhcnNlQ29udGVudCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImlzc3VlcyIsInBhdGgiLCJqb2luIiwicGFyc2VDb250ZW50SW5wdXQiLCJwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uIiwiX2lkIiwiX2tleSIsImlkIiwiY29udGVudFRleHQiLCJ0cmFuc2Zvcm1lZCIs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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcbmltcG9ydCB7cGFyc2VEb2N1bWVudH0gZnJvbSAnLi9hcmFuZ29BZGFwdGVyLmpzJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbnRlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMgPSBbJ2VuJywgJ2VzJywgJ2ZyJywgJ2RlJywgJ3B0JywgJ2l0J10gYXMgY29uc3Q7XG5cbmNvbnN0IGNvbnRlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgY29udGVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSkub3B0aW9uYWwoKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50ID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50SW5wdXQgPSAoY29udGVudDogQ29udGVudElucHV0VHlwZSk6IENvbnRlbnRJbnB1dFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50SW5wdXRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudElucHV0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnRlbnRJZCxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRUZXh0LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlLFxuICAgIHVzZXJJZFxuICB9ID0gY29udGVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICAuLi5wYXJzZURvY3VtZW50KGNvbnRlbnQpLFxuICAgIC4uLigoX2tleSB8fCBjb250ZW50SWQpICYmIHtjb250ZW50SWQ6IHBhcnNlSWQoX2tleSB8fCBjb250ZW50SWQpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBjb250ZW50SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnRlbnQvJHtfa2V5IHx8IGNvbnRlbnRJZH1gKX0pLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50VGV4dCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7ZGVzY3JpcHRpb246IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApfSksXG4gICAgLi4uKGNhdGVnb3J5ICYmIHtjYXRlZ29yeTogcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCl9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh0cmFuc2Zvcm1lZCkgYXMgQ29udGVudFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50RnJvbURiID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4gcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb250ZW50KTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsInBhcnNlRG9jdW1lbnQiLCJDb250ZW50VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyIsImNvbnRlbnRTY2hlbWEiLCJvYmplY3QiLCJjb250ZW50SWQiLCJzdHJpbmciLCJvcHRpb25hbCIsImtleSIsIm1pbiIsIm1heCIsImxvY2FsZSIsImVudW0iLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwiYm9vbGVhbiIsInVzZXJJZCIsImNvbnRlbnRJbnB1dFNjaGVtYSIsInBhcnNlQ29udGVudCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImlzc3VlcyIsInBhdGgiLCJqb2luIiwicGFyc2VDb250ZW50SW5wdXQiLCJwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uIiwiX2lkIiwiX2tleSIsImlkIiwiY29udGVu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