@burgan-tech/morph-touch-runtime 0.0.3 → 0.0.4

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 (261) hide show
  1. package/burgan-tech-morph-touch-runtime-0.0.4.tgz +0 -0
  2. package/{touch → morph-touch}/Functions/check-livekit-room-access.1.0.0.json +2 -2
  3. package/{touch → morph-touch}/Functions/check-livekit-room-access.http +1 -1
  4. package/{touch → morph-touch}/Functions/get-absence-entry.1.0.0.json +2 -2
  5. package/{touch → morph-touch}/Functions/get-advisor-stats.1.0.0.json +2 -2
  6. package/morph-touch/Functions/get-available-slots.1.0.0.json +30 -0
  7. package/{touch → morph-touch}/Functions/get-available-slots.http +4 -2
  8. package/morph-touch/Functions/get-chat-rooms.1.0.0.json +28 -0
  9. package/{touch → morph-touch}/Functions/get-chat-rooms.http +2 -2
  10. package/{touch → morph-touch}/Functions/get-customer-info.1.0.0.json +2 -2
  11. package/{touch → morph-touch}/Functions/get-matrix-sync.1.0.0.json +2 -2
  12. package/morph-touch/Functions/get-rezervations.1.0.0.json +26 -0
  13. package/{touch → morph-touch}/Functions/get-rezervations.http +2 -2
  14. package/{touch → morph-touch}/Functions/get-room-messages.1.0.0.json +2 -2
  15. package/{touch → morph-touch}/Functions/get-room-messages.http +1 -1
  16. package/{touch → morph-touch}/Functions/rezervation-transfer.http +1 -1
  17. package/{touch → morph-touch}/Functions/send-room-message.1.0.0.json +2 -2
  18. package/{touch → morph-touch}/Functions/src/GetAvailableSlotsMapping.csx +125 -1
  19. package/{touch → morph-touch}/Functions/src/GetChatRoomsMapping.csx +6 -7
  20. package/{touch → morph-touch}/Functions/src/GetRezervationsMapping.csx +12 -5
  21. package/{touch → morph-touch}/Schemas/absence-entry.1.0.0.json +3 -3
  22. package/{touch → morph-touch}/Schemas/advisor-chat-rooms.1.0.0.json +2 -2
  23. package/{touch → morph-touch}/Schemas/chat-room.1.0.0.json +2 -2
  24. package/morph-touch/Schemas/chat-room.1.1.0.json +132 -0
  25. package/morph-touch/Schemas/chat-room.1.2.0.json +174 -0
  26. package/{touch → morph-touch}/Schemas/notification-sender.1.0.0.json +2 -2
  27. package/{touch → morph-touch}/Schemas/portfolio-manager.1.0.0.json +2 -2
  28. package/{touch → morph-touch}/Schemas/rezervation.1.0.0.json +2 -2
  29. package/{touch → morph-touch}/Tasks/cancel-absence-entry-for-rezervation.1.0.0.json +2 -2
  30. package/{touch → morph-touch}/Tasks/check-already-completed-chat-room.1.0.0.json +3 -3
  31. package/{touch → morph-touch}/Tasks/check-duplicate-portfolio-manager.1.0.0.json +3 -3
  32. package/{touch → morph-touch}/Tasks/check-duplicate-rezervation.1.0.0.json +3 -3
  33. package/{touch → morph-touch}/Tasks/check-existing-permanent-chat-room.1.0.0.json +3 -3
  34. package/{touch → morph-touch}/Tasks/check-randevu-time.1.0.0.json +1 -1
  35. package/{touch → morph-touch}/Tasks/create-permanent-chat-room.1.0.0.json +1 -1
  36. package/{touch → morph-touch}/Tasks/determine-transfer-type.1.0.0.json +1 -1
  37. package/{touch → morph-touch}/Tasks/enrich-rezervations-for-transfer.1.0.0.json +3 -3
  38. package/{touch → morph-touch}/Tasks/execute-permanent-chatroom-update.1.0.0.json +3 -3
  39. package/{touch → morph-touch}/Tasks/execute-rez-chatroom-transfer.1.0.0.json +2 -2
  40. package/{touch → morph-touch}/Tasks/execute-rezervation-transfer.1.0.0.json +2 -2
  41. package/{touch → morph-touch}/Tasks/fetch-absence-entries-for-transfer.1.0.0.json +3 -3
  42. package/{touch → morph-touch}/Tasks/fetch-advisors-for-transfer.1.0.0.json +3 -3
  43. package/{touch → morph-touch}/Tasks/fetch-permanent-chatrooms-for-transfer.1.0.0.json +3 -3
  44. package/{touch → morph-touch}/Tasks/fetch-rez-chatrooms-for-transfer.1.0.0.json +3 -3
  45. package/{touch → morph-touch}/Tasks/fetch-rezervations-for-transfer.1.0.0.json +3 -3
  46. package/{touch → morph-touch}/Tasks/get-absence-entry-task.1.0.0.json +3 -3
  47. package/{touch → morph-touch}/Tasks/get-available-slots-http.1.0.0.json +2 -2
  48. package/{touch → morph-touch}/Tasks/get-available-slots.1.0.0.json +3 -3
  49. package/{touch → morph-touch}/Tasks/get-chat-room-data-for-rezervation.1.0.0.json +3 -3
  50. package/{touch → morph-touch}/Tasks/get-chat-token.1.0.0.json +1 -1
  51. package/{touch → morph-touch}/Tasks/get-matrix-room-messages.1.0.0.json +1 -1
  52. package/{touch → morph-touch}/Tasks/get-matrix-sync.1.0.0.json +1 -1
  53. package/{touch → morph-touch}/Tasks/get-rezervation-data-task.1.0.0.json +3 -3
  54. package/{touch → morph-touch}/Tasks/get-rezervation-state-task.1.0.0.json +3 -3
  55. package/{touch → morph-touch}/Tasks/get-rezervations-task.1.0.0.json +3 -3
  56. package/{touch → morph-touch}/Tasks/get-user-info-for-rezervation.1.0.0.json +1 -1
  57. package/{touch → morph-touch}/Tasks/get-video-call-url.1.0.0.json +1 -1
  58. package/{touch → morph-touch}/Tasks/invite-user-to-rezervation-room.1.0.0.json +1 -1
  59. package/{touch → morph-touch}/Tasks/join-chat-room-for-rezervation.1.0.0.json +1 -1
  60. package/{touch → morph-touch}/Tasks/join-matrix-room.1.0.0.json +1 -1
  61. package/{touch → morph-touch}/Tasks/join-user-to-room.1.0.0.json +1 -1
  62. package/{touch → morph-touch}/Tasks/merge-invited-user.1.0.0.json +1 -1
  63. package/{touch → morph-touch}/Tasks/merge-rezervation-update.1.0.0.json +1 -1
  64. package/{touch → morph-touch}/Tasks/merge-target-advisor-for-transfer.1.0.0.json +1 -1
  65. package/{touch → morph-touch}/Tasks/merge-update-body-for-randevu-update.1.0.0.json +1 -1
  66. package/{touch → morph-touch}/Tasks/merge-video-call-urls.1.0.0.json +1 -1
  67. package/{touch → morph-touch}/Tasks/query-chat-room-instances.1.0.0.json +3 -3
  68. package/{touch → morph-touch}/Tasks/remove-member-from-room.1.0.0.json +1 -1
  69. package/{touch → morph-touch}/Tasks/send-matrix-room-message.1.0.0.json +1 -1
  70. package/{touch → morph-touch}/Tasks/send-push-notification.1.0.0.json +1 -1
  71. package/{touch → morph-touch}/Tasks/send-sms-notification.1.0.0.json +1 -1
  72. package/{touch → morph-touch}/Tasks/set-chat-room-status-active.1.0.0.json +1 -1
  73. package/{touch → morph-touch}/Tasks/set-chat-room-status-deactive.1.0.0.json +1 -1
  74. package/morph-touch/Tasks/set-matrix-room-history-visibility.1.0.0.json +26 -0
  75. package/{touch → morph-touch}/Tasks/set-previous-advisor.1.0.0.json +1 -1
  76. package/{touch → morph-touch}/Tasks/set-user-from-headers-for-rezervation.1.0.0.json +1 -1
  77. package/{touch → morph-touch}/Tasks/start-absence-entry-for-rezervation.1.0.0.json +2 -2
  78. package/{touch → morph-touch}/Tasks/start-chat-room-for-rezervation.1.0.0.json +2 -2
  79. package/{touch → morph-touch}/Tasks/start-notification-sender.1.0.0.json +2 -2
  80. package/{touch → morph-touch}/Tasks/start-permanent-chat-room.1.0.0.json +2 -2
  81. package/{touch → morph-touch}/Tasks/start-transfer-from-absence-entry.1.0.0.json +2 -2
  82. package/{touch → morph-touch}/Tasks/start-video-call.1.0.0.json +2 -2
  83. package/morph-touch/Tasks/summarize-chat-openai.1.0.0.json +27 -0
  84. package/morph-touch/Tasks/test-get-rezervation-count-by-advisor.1.0.0.json +22 -0
  85. package/morph-touch/Tasks/test-get-rezervation-instances-after-date.1.0.0.json +24 -0
  86. package/{touch → morph-touch}/Tasks/trigger-chat-room-deactivate.1.0.0.json +2 -2
  87. package/{touch → morph-touch}/Tasks/trigger-chat-room-transfer.1.0.0.json +2 -2
  88. package/{touch → morph-touch}/Tasks/trigger-chat-room-update.1.0.0.json +2 -2
  89. package/{touch → morph-touch}/Tasks/trigger-rezervation-add-invited-participant.1.0.0.json +2 -2
  90. package/{touch → morph-touch}/Tasks/trigger-rezervation-apply-update.1.0.0.json +2 -2
  91. package/{touch → morph-touch}/Tasks/trigger-rezervation-to-in-meet.1.0.0.json +2 -2
  92. package/{touch → morph-touch}/Tasks/trigger-rezervation-video-call-update.1.0.0.json +2 -2
  93. package/{touch → morph-touch}/Tasks/validate-date-for-rezervation.1.0.0.json +1 -1
  94. package/{touch → morph-touch}/Tasks/validate-slot-for-rezervation.1.0.0.json +3 -3
  95. package/{touch → morph-touch}/Tasks/validate-transfer-availability.1.0.0.json +3 -3
  96. package/{touch → morph-touch}/Workflows/absence-entry.http +21 -21
  97. package/{touch → morph-touch}/Workflows/absence-entry.json +3 -3
  98. package/{touch → morph-touch}/Workflows/add-participant-to-rezervation.http +3 -3
  99. package/{touch → morph-touch}/Workflows/add-participant-to-rezervation.json +23 -24
  100. package/{touch → morph-touch}/Workflows/chat-room.http +10 -8
  101. package/{touch → morph-touch}/Workflows/chat-room.json +37 -24
  102. package/{touch → morph-touch}/Workflows/investment-advisor.json +2 -2
  103. package/{touch → morph-touch}/Workflows/notification-sender.http +13 -13
  104. package/{touch → morph-touch}/Workflows/notification-sender.json +5 -5
  105. package/{touch → morph-touch}/Workflows/portfolio-manager.json +2 -2
  106. package/{touch → morph-touch}/Workflows/randevu-update.http +6 -6
  107. package/{touch → morph-touch}/Workflows/rezervation-start.json +16 -16
  108. package/{touch → morph-touch}/Workflows/rezervation-transfer.json +125 -22
  109. package/{touch → morph-touch}/Workflows/rezervation-update.http +6 -6
  110. package/{touch → morph-touch}/Workflows/rezervation-update.json +19 -19
  111. package/{touch → morph-touch}/Workflows/rezervation.http +6 -6
  112. package/{touch → morph-touch}/Workflows/rezervation.json +121 -180
  113. package/{touch → morph-touch}/Workflows/src/CancelAbsenceEntryForRezervationMapping.csx +1 -1
  114. package/{touch → morph-touch}/Workflows/src/CancelAbsenceForRandevuUpdateMapping.csx +1 -1
  115. package/{touch → morph-touch}/Workflows/src/ChatRoomRemoveMapping.csx +22 -1
  116. package/{touch → morph-touch}/Workflows/src/ChatRoomTransferInviteMapping.csx +21 -0
  117. package/{touch → morph-touch}/Workflows/src/ChatRoomUpdateMapping.csx +21 -0
  118. package/{touch → morph-touch}/Workflows/src/CreateAbsenceEntryForRezervationMapping.csx +1 -1
  119. package/{touch → morph-touch}/Workflows/src/CreateAbsenceForRandevuUpdateMapping.csx +1 -1
  120. package/{touch → morph-touch}/Workflows/src/CreateChatRoomForRezervationMapping.csx +12 -2
  121. package/{touch → morph-touch}/Workflows/src/CreatePermanentChatRoomMapping.csx +50 -9
  122. package/morph-touch/Workflows/src/DeactivatePermanentChatRoomFromTransferMapping.csx +133 -0
  123. package/{touch → morph-touch}/Workflows/src/EnrichRezervationsForTransferMapping.csx +16 -3
  124. package/{touch → morph-touch}/Workflows/src/ExecutePermanentChatRoomUpdateMapping.csx +23 -18
  125. package/{touch → morph-touch}/Workflows/src/ExecuteRezChatRoomTransferMapping.csx +1 -1
  126. package/{touch → morph-touch}/Workflows/src/ExecuteTransferMapping.csx +15 -12
  127. package/{touch → morph-touch}/Workflows/src/FetchAdvisorsForTransferMapping.csx +55 -7
  128. package/{touch → morph-touch}/Workflows/src/FetchPermanentChatRoomsMapping.csx +65 -2
  129. package/morph-touch/Workflows/src/FetchRoomMessagesForSummaryMapping.csx +182 -0
  130. package/{touch → morph-touch}/Workflows/src/GetChatRoomDataForRezervationMapping.csx +2 -2
  131. package/{touch → morph-touch}/Workflows/src/GetRezervationDataForAddParticipantMapping.csx +1 -1
  132. package/{touch → morph-touch}/Workflows/src/GetRezervationDataForRandevuUpdateMapping.csx +1 -1
  133. package/{touch → morph-touch}/Workflows/src/GetRezervationDataMapping.csx +2 -2
  134. package/{touch → morph-touch}/Workflows/src/GetRezervationStateForRandevuUpdateMapping.csx +1 -1
  135. package/{touch → morph-touch}/Workflows/src/GetRezervationStateMapping.csx +2 -2
  136. package/{touch → morph-touch}/Workflows/src/InvitedUserNotAllowedRule.csx +1 -1
  137. package/{touch → morph-touch}/Workflows/src/JoinUserToRoomMapping.csx +22 -1
  138. package/morph-touch/Workflows/src/NoOpGetInstancesTestMapping.csx +19 -0
  139. package/morph-touch/Workflows/src/PermanentProcessNextTerminationRule.csx +51 -0
  140. package/{touch → morph-touch}/Workflows/src/SendPushNotificationMapping.csx +2 -2
  141. package/{touch → morph-touch}/Workflows/src/SendSmsNotificationMapping.csx +1 -1
  142. package/morph-touch/Workflows/src/SendSummaryToNewRoomMapping.csx +178 -0
  143. package/morph-touch/Workflows/src/SetRoomHistoryVisibilityMapping.csx +109 -0
  144. package/{touch → morph-touch}/Workflows/src/StartChatRoomForRezervationMapping.csx +4 -3
  145. package/{touch → morph-touch}/Workflows/src/StartGetChatTokenForRezervationMapping.csx +1 -1
  146. package/morph-touch/Workflows/src/StartNewPermanentChatRoomFromTransferMapping.csx +197 -0
  147. package/{touch → morph-touch}/Workflows/src/StartNotificationForAdvisorMapping.csx +1 -1
  148. package/{touch → morph-touch}/Workflows/src/StartNotificationForRezervationFromUserInfoMapping.csx +1 -1
  149. package/{touch → morph-touch}/Workflows/src/StartNotificationForUserMapping.csx +1 -1
  150. package/{touch → morph-touch}/Workflows/src/StartPermanentChatRoomMapping.csx +5 -2
  151. package/{touch → morph-touch}/Workflows/src/StartTransferFromAbsenceEntryMapping.csx +6 -14
  152. package/{touch → morph-touch}/Workflows/src/StateInMeetRule.csx +1 -1
  153. package/morph-touch/Workflows/src/SummarizeChatWithOpenAIMapping.csx +172 -0
  154. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomDeactivateMapping.csx +1 -1
  155. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomTransferMapping.csx +1 -1
  156. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomUpdateMapping.csx +3 -3
  157. package/{touch → morph-touch}/Workflows/src/TriggerRezervationAddInvitedParticipantMapping.csx +1 -1
  158. package/{touch → morph-touch}/Workflows/src/TriggerRezervationApplyUpdateMapping.csx +1 -1
  159. package/{touch → morph-touch}/Workflows/src/TriggerRezervationToInMeetMapping.csx +1 -1
  160. package/{touch → morph-touch}/Workflows/src/TriggerRezervationVideoCallUpdateMapping.csx +1 -1
  161. package/{touch → morph-touch}/Workflows/src/ValidateSlotForRandevuUpdateMapping.csx +29 -1
  162. package/{touch → morph-touch}/Workflows/src/ValidateSlotForRezervationMapping.csx +29 -1
  163. package/{touch → morph-touch}/Workflows/src/ValidateTransferMapping.csx +2 -2
  164. package/{touch → morph-touch}/Workflows/start-chat.json +6 -6
  165. package/{touch → morph-touch}/Workflows/start-video-call.http +3 -3
  166. package/{touch → morph-touch}/Workflows/start-video-call.json +4 -4
  167. package/package.json +1 -1
  168. package/vnext.config.json +6 -6
  169. package/burgan-tech-morph-touch-runtime-0.0.3.tgz +0 -0
  170. package/touch/Functions/get-available-slots.1.0.0.json +0 -30
  171. package/touch/Functions/get-chat-rooms.1.0.0.json +0 -28
  172. package/touch/Functions/get-rezervations.1.0.0.json +0 -26
  173. /package/{touch → morph-touch}/Extensions/.gitkeep +0 -0
  174. /package/{touch → morph-touch}/Functions/.gitkeep +0 -0
  175. /package/{touch → morph-touch}/Functions/src/CheckLivekitRoomAccessMapping.csx +0 -0
  176. /package/{touch → morph-touch}/Functions/src/GetAbsenceEntryMapping.csx +0 -0
  177. /package/{touch → morph-touch}/Functions/src/GetAdvisorStatsMapping.csx +0 -0
  178. /package/{touch → morph-touch}/Functions/src/GetCustomerInfoMapping.csx +0 -0
  179. /package/{touch → morph-touch}/Functions/src/GetMatrixSyncMapping.csx +0 -0
  180. /package/{touch → morph-touch}/Functions/src/GetRoomMessagesMapping.csx +0 -0
  181. /package/{touch → morph-touch}/Functions/src/SendCancelNotificationMapping.csx +0 -0
  182. /package/{touch → morph-touch}/Functions/src/SendRoomMessageMapping.csx +0 -0
  183. /package/{touch → morph-touch}/Schemas/.gitkeep +0 -0
  184. /package/{touch → morph-touch}/Tasks/.gitkeep +0 -0
  185. /package/{touch → morph-touch}/Views/.gitkeep +0 -0
  186. /package/{touch → morph-touch}/Workflows/.gitkeep +0 -0
  187. /package/{touch → morph-touch}/Workflows/src/AllChatRoomsSuccessRule.csx +0 -0
  188. /package/{touch → morph-touch}/Workflows/src/AlwaysTrueRule.csx +0 -0
  189. /package/{touch → morph-touch}/Workflows/src/AnyChatRoomFailedRule.csx +0 -0
  190. /package/{touch → morph-touch}/Workflows/src/AutoProcessRule.csx +0 -0
  191. /package/{touch → morph-touch}/Workflows/src/BuildRezChatRoomPlanMapping.csx +0 -0
  192. /package/{touch → morph-touch}/Workflows/src/CanStartRezervationTimerMapping.csx +0 -0
  193. /package/{touch → morph-touch}/Workflows/src/CanStartTransferMapping.csx +0 -0
  194. /package/{touch → morph-touch}/Workflows/src/ChatRoomCreatedFailedRule.csx +0 -0
  195. /package/{touch → morph-touch}/Workflows/src/ChatRoomCreatedSuccessRule.csx +0 -0
  196. /package/{touch → morph-touch}/Workflows/src/ChatRoomTransferRemoveMapping.csx +0 -0
  197. /package/{touch → morph-touch}/Workflows/src/CheckAlreadyCompletedChatRoomMapping.csx +0 -0
  198. /package/{touch → morph-touch}/Workflows/src/CheckDuplicatePortfolioManagerMapping.csx +0 -0
  199. /package/{touch → morph-touch}/Workflows/src/CheckDuplicateRezervationMapping.csx +0 -0
  200. /package/{touch → morph-touch}/Workflows/src/CheckExistingPermanentChatRoomMapping.csx +0 -0
  201. /package/{touch → morph-touch}/Workflows/src/CheckRandevuTimeMapping.csx +0 -0
  202. /package/{touch → morph-touch}/Workflows/src/CheckRezervationStateActiveOrInMeetRule.csx +0 -0
  203. /package/{touch → morph-touch}/Workflows/src/CustomerControlToEndRule.csx +0 -0
  204. /package/{touch → morph-touch}/Workflows/src/DetermineTransferTypeMapping.csx +0 -0
  205. /package/{touch → morph-touch}/Workflows/src/FetchAbsenceEntriesForTransferMapping.csx +0 -0
  206. /package/{touch → morph-touch}/Workflows/src/FetchRezervationsForTransferMapping.csx +0 -0
  207. /package/{touch → morph-touch}/Workflows/src/GetChatTokenMapping.csx +0 -0
  208. /package/{touch → morph-touch}/Workflows/src/GetUserInfoForRezervationMapping.csx +0 -0
  209. /package/{touch → morph-touch}/Workflows/src/GetVideoCallUrlMapping.csx +0 -0
  210. /package/{touch → morph-touch}/Workflows/src/HasChangedAdvisorRule.csx +0 -0
  211. /package/{touch → morph-touch}/Workflows/src/HasChatIntegrationRule.csx +0 -0
  212. /package/{touch → morph-touch}/Workflows/src/HasExistingPermanentRoomRule.csx +0 -0
  213. /package/{touch → morph-touch}/Workflows/src/InviteAdvisorForRandevuUpdateMapping.csx +0 -0
  214. /package/{touch → morph-touch}/Workflows/src/InviteNewAdvisorToRezervationRoomMapping.csx +0 -0
  215. /package/{touch → morph-touch}/Workflows/src/InviteNewParticipantToRandevuRoomMapping.csx +0 -0
  216. /package/{touch → morph-touch}/Workflows/src/InvitedUserMergeMapping.csx +0 -0
  217. /package/{touch → morph-touch}/Workflows/src/InvitedUserNotInMeetRule.csx +0 -0
  218. /package/{touch → morph-touch}/Workflows/src/IsNotfSentRule.csx +0 -0
  219. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForAddParticipantMapping.csx +0 -0
  220. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForRandevuStartMapping.csx +0 -0
  221. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForRezervationMapping.csx +0 -0
  222. /package/{touch → morph-touch}/Workflows/src/JoinMatrixRoomMapping.csx +0 -0
  223. /package/{touch → morph-touch}/Workflows/src/LoginForAddParticipantChatMapping.csx +0 -0
  224. /package/{touch → morph-touch}/Workflows/src/LoginForRandevuStartChatMapping.csx +0 -0
  225. /package/{touch → morph-touch}/Workflows/src/MergeRezervationUpdateMapping.csx +0 -0
  226. /package/{touch → morph-touch}/Workflows/src/MergeTargetAdvisorForTransferMapping.csx +0 -0
  227. /package/{touch → morph-touch}/Workflows/src/MergeUpdateBodyForRandevuUpdateMapping.csx +0 -0
  228. /package/{touch → morph-touch}/Workflows/src/NoExistingPermanentRoomRule.csx +0 -0
  229. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteAlwaysRule.csx +0 -0
  230. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteFromPendingRule.csx +0 -0
  231. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteFromSmsRule.csx +0 -0
  232. /package/{touch → morph-touch}/Workflows/src/NotificationPushFromPendingRule.csx +0 -0
  233. /package/{touch → morph-touch}/Workflows/src/NotificationPushFromSmsRule.csx +0 -0
  234. /package/{touch → morph-touch}/Workflows/src/NotificationSmsPendingRule.csx +0 -0
  235. /package/{touch → morph-touch}/Workflows/src/PermanentDoneRule.csx +0 -0
  236. /package/{touch → morph-touch}/Workflows/src/PermanentProcessNextRule.csx +0 -0
  237. /package/{touch → morph-touch}/Workflows/src/RezChatRoomProcessNextRule.csx +0 -0
  238. /package/{touch → morph-touch}/Workflows/src/RezChatRoomsDoneRule.csx +0 -0
  239. /package/{touch → morph-touch}/Workflows/src/SetChatRoomStatusActiveMapping.csx +0 -0
  240. /package/{touch → morph-touch}/Workflows/src/SetChatRoomStatusDeactiveMapping.csx +0 -0
  241. /package/{touch → morph-touch}/Workflows/src/SetPreviousAdvisorMapping.csx +0 -0
  242. /package/{touch → morph-touch}/Workflows/src/SetUserFromHeadersForRezervationMapping.csx +0 -0
  243. /package/{touch → morph-touch}/Workflows/src/SlotAvailableRule.csx +0 -0
  244. /package/{touch → morph-touch}/Workflows/src/SlotUnavailableRule.csx +0 -0
  245. /package/{touch → morph-touch}/Workflows/src/StartVideoCallCustomerSubFlowMapping.csx +0 -0
  246. /package/{touch → morph-touch}/Workflows/src/StartVideoCallForInvitedParticipantMapping.csx +0 -0
  247. /package/{touch → morph-touch}/Workflows/src/StartVideoCallForRandevuStartMapping.csx +0 -0
  248. /package/{touch → morph-touch}/Workflows/src/StartVideoCallStaffSubFlowMapping.csx +0 -0
  249. /package/{touch → morph-touch}/Workflows/src/StateActiveForUpdateRule.csx +0 -0
  250. /package/{touch → morph-touch}/Workflows/src/StateActiveRule.csx +0 -0
  251. /package/{touch → morph-touch}/Workflows/src/StateNotActiveForUpdateRule.csx +0 -0
  252. /package/{touch → morph-touch}/Workflows/src/StateNotActiveOrInMeetRule.csx +0 -0
  253. /package/{touch → morph-touch}/Workflows/src/StatusCustomerEnterRule.csx +0 -0
  254. /package/{touch → morph-touch}/Workflows/src/StatusStaffEnterRule.csx +0 -0
  255. /package/{touch → morph-touch}/Workflows/src/SyncWorkingHoursRule.csx +0 -0
  256. /package/{touch → morph-touch}/Workflows/src/TokenSuccessRule.csx +0 -0
  257. /package/{touch → morph-touch}/Workflows/src/TransferAllDoneRule.csx +0 -0
  258. /package/{touch → morph-touch}/Workflows/src/TransferHasInvalidRule.csx +0 -0
  259. /package/{touch → morph-touch}/Workflows/src/TransferProcessNextRule.csx +0 -0
  260. /package/{touch → morph-touch}/Workflows/src/ValidateDateForRezervationMapping.csx +0 -0
  261. /package/{touch → morph-touch}/Workflows/src/VideoCallUrlUpdateMergeMapping.csx +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "key": "rezervation-transfer",
3
3
  "flow": "sys-flows",
4
- "domain": "touch",
4
+ "domain": "morph-touch",
5
5
  "version": "1.0.0",
6
6
  "flowVersion": "1.0.0",
7
7
  "tags": [
@@ -63,7 +63,7 @@
63
63
  {
64
64
  "order": 1,
65
65
  "task": {
66
- "domain": "touch",
66
+ "domain": "morph-touch",
67
67
  "flow": "sys-tasks",
68
68
  "key": "determine-transfer-type",
69
69
  "version": "1.0.0"
@@ -76,7 +76,7 @@
76
76
  {
77
77
  "order": 2,
78
78
  "task": {
79
- "domain": "touch",
79
+ "domain": "morph-touch",
80
80
  "flow": "sys-tasks",
81
81
  "key": "fetch-rezervations-for-transfer",
82
82
  "version": "1.0.0"
@@ -89,20 +89,20 @@
89
89
  {
90
90
  "order": 3,
91
91
  "task": {
92
- "domain": "touch",
92
+ "domain": "morph-touch",
93
93
  "flow": "sys-tasks",
94
94
  "key": "fetch-advisors-for-transfer",
95
95
  "version": "1.0.0"
96
96
  },
97
97
  "mapping": {
98
98
  "location": "./src/FetchAdvisorsForTransferMapping.csx",
99
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgZmV0Y2gtYWR2aXNvcnMtZm9yLXRyYW5zZmVyIHRhc2sgKERhcHJTZXJ2aWNlVGFzayAtIFR5cGUgMykuCi8vLyBSZWFkcyBhZHZpc29yVHlwZSBmcm9tIGluc3RhbmNlIGRhdGEgYW5kIHF1ZXJpZXMgYWxsIGFjdGl2ZSBhZHZpc29yIGluc3RhbmNlcy4KLy8vIE91dHB1dEhhbmRsZXIgYnVpbGRzIGFsbEFkdmlzb3JLZXlzIGxpc3QgaW4ge2RvbWFpbn0ue2Fkdmlzb3JUeXBlfS57a2V5fSBmb3JtYXQuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBGZXRjaEFkdmlzb3JzRm9yVHJhbnNmZXJNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgIGlmIChzZXJ2aWNlVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGFwclNlcnZpY2VUYXNrIik7CgogICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoYXBwSWQpKQogICAgICAgICAgICBzZXJ2aWNlVGFzay5TZXRBcHBJZChhcHBJZCk7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZCIpOwoKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3JUeXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJhZHZpc29yVHlwZSBpcyByZXF1aXJlZC4iLCAiYWR2aXNvclR5cGUiKTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0TWV0aG9kTmFtZSgkImFwaS92MS90b3VjaC93b3JrZmxvd3Mve2Fkdmlzb3JUeXBlfS9pbnN0YW5jZXMiKTsKCiAgICAgICAgdmFyIGNvbmRpdGlvbnMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAie1wib3JcIjpbIiArCiAgICAgICAgICAgICAgICAie1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcIm9ubGluZVwifX0sIiArCiAgICAgICAgICAgICAgICAie1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcIm9mZmxpbmVcIn19LCIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJidXN5XCJ9fSwiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYXdheVwifX0iICsKICAgICAgICAgICAgIl19IiwKICAgICAgICAgICAgIntcInN0YXR1c1wiOntcImVxXCI6XCJBXCJ9fSIKICAgICAgICB9OwoKICAgICAgICB2YXIgZmlsdGVySnNvbiA9ICJ7XCJhbmRcIjpbIiArIHN0cmluZy5Kb2luKCIsIiwgY29uZGl0aW9ucykgKyAiXX0iOwogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0xMDAiLAogICAgICAgICAgICAiZmlsdGVyPSIgKyBmaWx0ZXJKc29uCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBib2R5ID0gY29udGV4dC5Cb2R5OwogICAgICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CgogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsICYmIGJvZHkuaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gYm9keS5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCkgPz8gIkZhaWxlZCB0byBmZXRjaCBhZHZpc29ycyI7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGVycm9yTWVzc2FnZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBhZHZpc29yVHlwZSA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvclR5cGUiKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9IGJvZHk/LmRhdGE7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHJlc3BvbnNlRGF0YT8uaXRlbXM7CgogICAgICAgICAgICB2YXIgYWR2aXNvcktleXMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CgogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IEdldFN0cmluZyhpdGVtLCAiZG9tYWluIikgPz8gInRvdWNoIjsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gR2V0U3RyaW5nKGl0ZW0sICJrZXkiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGtleSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbEtleSA9IGtleS5Db250YWlucygiLiIpID8ga2V5IDogJCJ7ZG9tYWlufS57YWR2aXNvclR5cGV9LntrZXl9IjsKICAgICAgICAgICAgICAgICAgICAgICAgYWR2aXNvcktleXMuQWRkKGZ1bGxLZXkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInNvdXJjZUFkdmlzb3JJZCIpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJUeXBlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5kRGF0ZSIpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlemVydmF0aW9ucyIpOwogICAgICAgICAgICByZXN1bHRbImFsbEFkdmlzb3JLZXlzIl0gPSBhZHZpc29yS2V5czsKCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSByZXN1bHQKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiRmFpbGVkIHRvIGZldGNoIGFkdmlzb3JzIGZvciB0cmFuc2ZlciIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDb3B5SWZQcmVzZW50KERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHRhcmdldCwgZHluYW1pYyBzb3VyY2UsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHNvdXJjZSwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShzb3VyY2UsIG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdGFyZ2V0W25hbWVdID0gdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgIH0KfQo="
99
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgZmV0Y2gtYWR2aXNvcnMtZm9yLXRyYW5zZmVyIHRhc2sgKERhcHJTZXJ2aWNlVGFzayAtIFR5cGUgMykuCi8vLyBSZWFkcyBhZHZpc29yVHlwZSBmcm9tIGluc3RhbmNlIGRhdGEgYW5kIHF1ZXJpZXMgYWxsIGFjdGl2ZSBhZHZpc29yIGluc3RhbmNlcy4KLy8vIE91dHB1dEhhbmRsZXIgYnVpbGRzIGFsbEFkdmlzb3JLZXlzIGxpc3QgaW4ge2RvbWFpbn0ue2Fkdmlzb3JUeXBlfS57a2V5fSBmb3JtYXQuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBGZXRjaEFkdmlzb3JzRm9yVHJhbnNmZXJNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgIGlmIChzZXJ2aWNlVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGFwclNlcnZpY2VUYXNrIik7CgogICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoYXBwSWQpKQogICAgICAgICAgICBzZXJ2aWNlVGFzay5TZXRBcHBJZChhcHBJZCk7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZCIpOwoKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgYWR2aXNvclR5cGUgPSBSZXNvbHZlQWR2aXNvcldvcmtmbG93S2V5KGFkdmlzb3JUeXBlLCBHZXRTdHJpbmcoZGF0YSwgInNvdXJjZUFkdmlzb3JJZCIpKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvclR5cGUpKQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oImFkdmlzb3JUeXBlIGlzIHJlcXVpcmVkLiIsICJhZHZpc29yVHlwZSIpOwoKICAgICAgICBzZXJ2aWNlVGFzay5TZXRNZXRob2ROYW1lKCQiYXBpL3YxL21vcnBoLXRvdWNoL3dvcmtmbG93cy97YWR2aXNvclR5cGV9L2luc3RhbmNlcyIpOwoKICAgICAgICB2YXIgY29uZGl0aW9ucyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJ7XCJvclwiOlsiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwib25saW5lXCJ9fSwiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwib2ZmbGluZVwifX0sIiArCiAgICAgICAgICAgICAgICAie1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImJ1c3lcIn19LCIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJhd2F5XCJ9fSIgKwogICAgICAgICAgICAiXX0iLAogICAgICAgICAgICAie1wic3RhdHVzXCI6e1wiZXFcIjpcIkFcIn19IgogICAgICAgIH07CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBjb25kaXRpb25zKSArICJdfSI7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwMCIsCiAgICAgICAgICAgICJmaWx0ZXI9IiArIGZpbHRlckpzb24KICAgICAgICB9OwoKICAgICAgICBzZXJ2aWNlVGFzay5TZXRRdWVyeVN0cmluZyhzdHJpbmcuSm9pbigiJiIsIHF1ZXJ5UGFyYW1zKSk7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJvZHkgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKCiAgICAgICAgICAgIGlmIChib2R5ICE9IG51bGwgJiYgYm9keS5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBib2R5LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIGZldGNoIGFkdmlzb3JzIjsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oZXJyb3JNZXNzYWdlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFkdmlzb3JUeXBlID0gR2V0U3RyaW5nKGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgICAgICBhZHZpc29yVHlwZSA9IFJlc29sdmVBZHZpc29yV29ya2Zsb3dLZXkoYWR2aXNvclR5cGUsIEdldFN0cmluZyhkYXRhLCAic291cmNlQWR2aXNvcklkIikpOwogICAgICAgICAgICB2YXIgaXRlbXMgPSBHZXRXb3JrZmxvd0luc3RhbmNlSXRlbXMoYm9keSk7CgogICAgICAgICAgICB2YXIgYWR2aXNvcktleXMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CgogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IEdldFN0cmluZyhpdGVtLCAiZG9tYWluIikgPz8gR2V0U3RyaW5nKGl0ZW0sICJEb21haW4iKSA/PyAibW9ycGgtdG91Y2giOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBHZXRJbnN0YW5jZUl0ZW1LZXkoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShrZXkpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgZnVsbEtleSA9IGtleS5Db250YWlucygiLiIpID8ga2V5IDogJCJ7a2V5fSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JLZXlzLkFkZChrZXkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInNvdXJjZUFkdmlzb3JJZCIpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJUeXBlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5kRGF0ZSIpOwogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlemVydmF0aW9ucyIpOwogICAgICAgICAgICByZXN1bHRbImFsbEFkdmlzb3JLZXlzIl0gPSBhZHZpc29yS2V5czsKCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSByZXN1bHQKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiRmFpbGVkIHRvIGZldGNoIGFkdmlzb3JzIGZvciB0cmFuc2ZlciIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBFbnN1cmVzIHdlIHF1ZXJ5IHRoZSBzYW1lIGFkdmlzb3Igd29ya2Zsb3cgYXMgdGhlIHNvdXJjZSAoSUEgdnMgUE0pLCBldmVuIGlmIGluc3RhbmNlCiAgICAvLy8gZGF0YS5hZHZpc29yVHlwZSB3YXMgd3Jvbmcgb3IgdGFzayBkZWZhdWx0IHBvaW50ZWQgYXQgcG9ydGZvbGlvLW1hbmFnZXIgb25seS4KICAgIC8vLyA8L3N1bW1hcnk+CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gUnVudGltZSBtYXkgcmV0dXJuIHsgZGF0YTogeyBpdGVtcyB9IH0gb3IgeyBkYXRhOiB7IGRhdGE6IHsgaXRlbXMgfSB9IH0gKHNhbWUgYXMgd2VhbHRoLWFwcCBleHRyYWN0SXRlbXMpLgogICAgLy8vIDwvc3VtbWFyeT4KICAgIHByaXZhdGUgc3RhdGljIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZSBHZXRXb3JrZmxvd0luc3RhbmNlSXRlbXMoZHluYW1pYyBib2R5KQogICAgewogICAgICAgIGlmIChib2R5ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgZHluYW1pYyByZXNwb25zZURhdGEgPSBib2R5LmRhdGEgPz8gYm9keS5EYXRhOwogICAgICAgICAgICBpZiAocmVzcG9uc2VEYXRhID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICB2YXIgaXRlbXMgPSByZXNwb25zZURhdGEuaXRlbXMgPz8gcmVzcG9uc2VEYXRhLkl0ZW1zOwogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkgcmV0dXJuIGl0ZW1zOwogICAgICAgICAgICBkeW5hbWljIGlubmVyID0gcmVzcG9uc2VEYXRhLmRhdGEgPz8gcmVzcG9uc2VEYXRhLkRhdGE7CiAgICAgICAgICAgIGlmIChpbm5lciAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpdGVtcyA9IGlubmVyLml0ZW1zID8/IGlubmVyLkl0ZW1zOwogICAgICAgICAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpIHJldHVybiBpdGVtczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRJbnN0YW5jZUl0ZW1LZXkoZHluYW1pYyBpdGVtKQogICAgewogICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHZhciBrZXkgPSBHZXRTdHJpbmcoaXRlbSwgImtleSIpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoa2V5KSkgcmV0dXJuIGtleTsKICAgICAgICByZXR1cm4gR2V0U3RyaW5nKGl0ZW0sICJLZXkiKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgUmVzb2x2ZUFkdmlzb3JXb3JrZmxvd0tleShzdHJpbmcgYWR2aXNvclR5cGUsIHN0cmluZyBzb3VyY2VBZHZpc29ySWQpCiAgICB7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzb3VyY2VBZHZpc29ySWQpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNvdXJjZUFkdmlzb3JJZC5JbmRleE9mKCJpbnZlc3RtZW50LWFkdmlzb3IiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSA+PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuICJpbnZlc3RtZW50LWFkdmlzb3IiOwogICAgICAgICAgICBpZiAoc291cmNlQWR2aXNvcklkLkluZGV4T2YoInBvcnRmb2xpby1tYW5hZ2VyIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkgPj0gMCkKICAgICAgICAgICAgICAgIHJldHVybiAicG9ydGZvbGlvLW1hbmFnZXIiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWR2aXNvclR5cGU7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
100
100
  }
101
101
  },
102
102
  {
103
103
  "order": 4,
104
104
  "task": {
105
- "domain": "touch",
105
+ "domain": "morph-touch",
106
106
  "flow": "sys-tasks",
107
107
  "key": "fetch-absence-entries-for-transfer",
108
108
  "version": "1.0.0"
@@ -115,14 +115,14 @@
115
115
  {
116
116
  "order": 5,
117
117
  "task": {
118
- "domain": "touch",
118
+ "domain": "morph-touch",
119
119
  "flow": "sys-tasks",
120
120
  "key": "enrich-rezervations-for-transfer",
121
121
  "version": "1.0.0"
122
122
  },
123
123
  "mapping": {
124
124
  "location": "./src/EnrichRezervationsForTransferMapping.csx",
125
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGVucmljaC1yZXplcnZhdGlvbnMtZm9yLXRyYW5zZmVyIHRhc2sgKERhcHJTZXJ2aWNlVGFzayAtIFR5cGUgMykuCi8vLyBRdWVyaWVzIEFMTCBhY3RpdmUgcmVzZXJ2YXRpb25zIGluIHRoZSBkYXRlIHJhbmdlIGFjcm9zcyBhbGwgYWR2aXNvcnMuCi8vLyBPdXRwdXRIYW5kbGVyIGVucmljaGVzIGVhY2ggc291cmNlIGFkdmlzb3IncyByZXNlcnZhdGlvbiB3aXRoIGEgbGlzdCBvZiBhZHZpc29ycwovLy8gdGhhdCBhcmUgYXZhaWxhYmxlIGJhc2VkIG9uOiByZXNlcnZhdGlvbiBjb25mbGljdHMsIHdvcmtpbmcgaG91cnMsIHB1YmxpYyBob2xpZGF5cywKLy8vIGFuZCBwZXJzb25hbCBsZWF2ZXMgKHVzaW5nIGFic2VuY2VFbnRyaWVzIGZyb20gcHJldmlvdXMgdGFzaykuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBFbnJpY2hSZXplcnZhdGlvbnNGb3JUcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciBzdGFydERhdGUgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZSIpOwogICAgICAgIHZhciBlbmREYXRlID0gR2V0U3RyaW5nKGRhdGEsICJlbmREYXRlIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydERhdGUpKQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0RGF0ZSBpcyByZXF1aXJlZC4iLCAic3RhcnREYXRlIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGUpKQogICAgICAgICAgICBlbmREYXRlID0gIjIwOTktMTItMzEiOwoKICAgICAgICB2YXIgY29uZGl0aW9ucyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJ7XCJvclwiOlsiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYWN0aXZlXCJ9fSwiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiaW4tbWVldFwifX0iICsKICAgICAgICAgICAgIl19IiwKICAgICAgICAgICAgIntcInN0YXR1c1wiOntcImVxXCI6XCJBXCJ9fSIsCiAgICAgICAgICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wic3RhcnREYXRlVGltZVwiOntcImd0ZVwiOlwiIiArIHN0YXJ0RGF0ZSArICJcIn19fSIsCiAgICAgICAgICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wiZW5kRGF0ZVRpbWVcIjp7XCJsdGVcIjpcIiIgKyBlbmREYXRlICsgIlwifX19IgogICAgICAgIH07CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBjb25kaXRpb25zKSArICJdfSI7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwMCIsCiAgICAgICAgICAgICJmaWx0ZXI9IiArIGZpbHRlckpzb24KICAgICAgICB9OwoKICAgICAgICBzZXJ2aWNlVGFzay5TZXRRdWVyeVN0cmluZyhzdHJpbmcuSm9pbigiJiIsIHF1ZXJ5UGFyYW1zKSk7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJvZHkgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKCiAgICAgICAgICAgIGlmIChib2R5ICE9IG51bGwgJiYgYm9keS5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBib2R5LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIGZldGNoIGFsbCByZXNlcnZhdGlvbnMiOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc291cmNlQWR2aXNvcklkID0gR2V0U3RyaW5nKGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICAgICAgdmFyIHNvdXJjZVJlemVydmF0aW9ucyA9IGRhdGE/LnJlemVydmF0aW9uczsKCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBib2R5Py5kYXRhOwogICAgICAgICAgICB2YXIgYWxsSXRlbXMgPSByZXNwb25zZURhdGE/Lml0ZW1zOwoKICAgICAgICAgICAgdmFyIHB1YmxpY0hvbGlkYXlzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIGFkdmlzb3JXb3JrSG91cnNNYXAgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIExpc3Q8ZHluYW1pYz4+KCk7CiAgICAgICAgICAgIHZhciBjb21wYW55V29ya0hvdXJzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIHBlcnNvbmFsTGVhdmVzTWFwID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PGR5bmFtaWM+PigpOwoKICAgICAgICAgICAgdmFyIGFic2VuY2VFbnRyaWVzID0gZGF0YT8uYWJzZW5jZUVudHJpZXM7CiAgICAgICAgICAgIGlmIChhYnNlbmNlRW50cmllcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgZW50cnkgaW4gYWJzZW5jZUVudHJpZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIHZhciBhdHRycyA9IGVudHJ5Py5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgICAgIGlmIChhdHRycyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGFic2VuY2VUeXBlID0gR2V0U3RyaW5nKGF0dHJzLCAiYWJzZW5jZVR5cGUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhhdHRycywgImFkdmlzb3IiKTsKCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhYnNlbmNlVHlwZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInB1YmxpYy1ob2xpZGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0hvbGlkYXlzLkFkZChlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAid29ya2luZy1ob3Vycy1jaGFuZ2UiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmlzb3JXb3JrSG91cnNNYXAuQ29udGFpbnNLZXkoYWR2aXNvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcl0gPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcl0uQWRkKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYW55V29ya0hvdXJzLkFkZChlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicGVyc29uYWwtbGVhdmUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlcnNvbmFsTGVhdmVzTWFwLkNvbnRhaW5zS2V5KGFkdmlzb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbExlYXZlc01hcFthZHZpc29yXSA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYWxMZWF2ZXNNYXBbYWR2aXNvcl0uQWRkKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGVucmljaGVkID0gbmV3IExpc3Q8b2JqZWN0PigpOwoKICAgICAgICAgICAgaWYgKHNvdXJjZVJlemVydmF0aW9ucyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcmV6IGluIHNvdXJjZVJlemVydmF0aW9ucykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmV6ID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6U3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcocmV6LCAiYXR0cmlidXRlcyIsICJzdGFydERhdGVUaW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKHJleiwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6RW5kU3RyID0gR2V0TmVzdGVkU3RyaW5nKHJleiwgImF0dHJpYnV0ZXMiLCAiZW5kRGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcocmV6LCAiZW5kRGF0ZVRpbWUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6S2V5ID0gSGFzUHJvcGVydHkocmV6LCAia2V5IikgPyByZXoua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlelVzZXIgPSBHZXROZXN0ZWRTdHJpbmcocmV6LCAiYXR0cmlidXRlcyIsICJ1c2VyIikKICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKHJleiwgInVzZXIiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6QWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhyZXosICJhdHRyaWJ1dGVzIiwgImFkdmlzb3IiKQogICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcocmV6LCAiYWR2aXNvciIpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgYnVzeUFkdmlzb3JzID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoc291cmNlQWR2aXNvcklkKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnVzeUFkdmlzb3JzLkFkZChzb3VyY2VBZHZpc29ySWQpOwoKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSByZXpTdGFydCA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIHJlekVuZCA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkocmV6U3RhcnRTdHIpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShyZXpFbmRTdHIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLlRyeVBhcnNlKHJlelN0YXJ0U3RyLCBvdXQgcmV6U3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKHJlekVuZFN0ciwgb3V0IHJlekVuZCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgYWxsSXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGFsbEl0ZW1zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJhZHZpc29yIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcoaXRlbSwgImFkdmlzb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtU3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAic3RhcnREYXRlVGltZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKGl0ZW0sICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUVuZFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJlbmREYXRlVGltZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKGl0ZW0sICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtQWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoaXRlbVN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtRW5kU3RyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBpdGVtU3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlVGltZS5UcnlQYXJzZShpdGVtU3RhcnRTdHIsIG91dCBpdGVtU3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKGl0ZW1FbmRTdHIsIG91dCBpdGVtRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXJ0IDwgcmV6RW5kICYmIGl0ZW1FbmQgPiByZXpTdGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c3lBZHZpc29ycy5BZGQoaXRlbUFkdmlzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIGFsbEFkdmlzb3JzID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgICAgICAgICAgICAgIHZhciBhZHZpc29yS2V5cyA9IGRhdGE/LmFsbEFkdmlzb3JLZXlzOwogICAgICAgICAgICAgICAgICAgIGlmIChhZHZpc29yS2V5cyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFrIGluIGFkdmlzb3JLZXlzKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWsgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gYWs/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsQWR2aXNvcnMuQWRkKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGUgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFkdiBpbiBhbGxBZHZpc29ycykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidXN5QWR2aXNvcnMuQ29udGFpbnMoYWR2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlelN0YXJ0ICE9IERhdGVUaW1lLk1pblZhbHVlICYmIHJlekVuZCAhPSBEYXRlVGltZS5NaW5WYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1Nsb3RBdmFpbGFibGVGb3JBZHZpc29yKGFkdiwgcmV6U3RhcnQsIHJlekVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNIb2xpZGF5cywgYWR2aXNvcldvcmtIb3Vyc01hcCwgY29tcGFueVdvcmtIb3VycywgcGVyc29uYWxMZWF2ZXNNYXApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuQWRkKGFkdik7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlbnJpY2hlZC5BZGQobmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSByZXpLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSByZXpTdGFydFN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZVRpbWUgPSByZXpFbmRTdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSByZXpVc2VyLAogICAgICAgICAgICAgICAgICAgICAgICBhZHZpc29yID0gcmV6QWR2aXNvciwKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQWR2aXNvcnMgPSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgICAgICByZXN1bHRbInNvdXJjZUFkdmlzb3JJZCJdID0gc291cmNlQWR2aXNvcklkOwogICAgICAgICAgICByZXN1bHRbImFkdmlzb3JUeXBlIl0gPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgICAgIHJlc3VsdFsic3RhcnREYXRlIl0gPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZSIpOwogICAgICAgICAgICByZXN1bHRbImVuZERhdGUiXSA9IEdldFN0cmluZyhkYXRhLCAiZW5kRGF0ZSIpOwogICAgICAgICAgICByZXN1bHRbInRyYW5zZmVyVHlwZSJdID0gR2V0U3RyaW5nKGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICAgICAgcmVzdWx0WyJlbnJpY2hlZFJlemVydmF0aW9ucyJdID0gZW5yaWNoZWQ7CiAgICAgICAgICAgIHJlc3VsdFsicmV6ZXJ2YXRpb25zIl0gPSBuZXcgTGlzdDxvYmplY3Q+KCk7CiAgICAgICAgICAgIHJlc3VsdFsiYWJzZW5jZUVudHJpZXMiXSA9IG5ldyBMaXN0PG9iamVjdD4oKTsKICAgICAgICAgICAgcmVzdWx0WyJhbGxBZHZpc29yS2V5cyJdID0gbmV3IExpc3Q8c3RyaW5nPigpOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IHJlc3VsdAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZW5yaWNoIHJlc2VydmF0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgICNyZWdpb24gU2xvdCBBdmFpbGFiaWxpdHkKCiAgICBwcml2YXRlIGJvb2wgSXNTbG90QXZhaWxhYmxlRm9yQWR2aXNvcihzdHJpbmcgYWR2aXNvcktleSwgRGF0ZVRpbWUgcmV6U3RhcnQsIERhdGVUaW1lIHJlekVuZCwKICAgICAgICBMaXN0PGR5bmFtaWM+IHB1YmxpY0hvbGlkYXlzLAogICAgICAgIERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PGR5bmFtaWM+PiBhZHZpc29yV29ya0hvdXJzTWFwLAogICAgICAgIExpc3Q8ZHluYW1pYz4gY29tcGFueVdvcmtIb3VycywKICAgICAgICBEaWN0aW9uYXJ5PHN0cmluZywgTGlzdDxkeW5hbWljPj4gcGVyc29uYWxMZWF2ZXNNYXApCiAgICB7CiAgICAgICAgdmFyIHJlekRhdGUgPSByZXpTdGFydC5EYXRlOwogICAgICAgIHZhciBkYXlPZldlZWsgPSByZXpEYXRlLkRheU9mV2Vlay5Ub1N0cmluZygpLlRvTG93ZXIoKTsKICAgICAgICB2YXIgc2xvdFN0YXJ0ID0gcmV6U3RhcnQuVGltZU9mRGF5OwogICAgICAgIHZhciBzbG90RW5kID0gcmV6RW5kLlRpbWVPZkRheTsKCiAgICAgICAgdmFyIGhvbGlkYXlSYW5nZXMgPSBHZXRIb2xpZGF5UmFuZ2VzKHB1YmxpY0hvbGlkYXlzLCByZXpEYXRlKTsKICAgICAgICBpZiAoaG9saWRheVJhbmdlcyAhPSBudWxsICYmIGhvbGlkYXlSYW5nZXMuQ291bnQgPT0gMQogICAgICAgICAgICAmJiBob2xpZGF5UmFuZ2VzWzBdLkl0ZW0xID09IFRpbWVTcGFuLlplcm8KICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMiA+PSBuZXcgVGltZVNwYW4oMjMsIDU5LCAwKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBMaXN0PGR5bmFtaWM+IGFkdldvcmtIb3VycyA9IG51bGw7CiAgICAgICAgaWYgKGFkdmlzb3JXb3JrSG91cnNNYXAuQ29udGFpbnNLZXkoYWR2aXNvcktleSkpCiAgICAgICAgICAgIGFkdldvcmtIb3VycyA9IGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcktleV07CgogICAgICAgIHZhciB3b3JrSG91cnMgPSBHZXRXb3JraW5nSG91cnNGb3JEYXkoYWR2V29ya0hvdXJzLCBkYXlPZldlZWspOwogICAgICAgIGlmICh3b3JrSG91cnMgPT0gbnVsbCB8fCB3b3JrSG91cnMuQ291bnQgPT0gMCkKICAgICAgICAgICAgd29ya0hvdXJzID0gR2V0V29ya2luZ0hvdXJzRm9yRGF5KGNvbXBhbnlXb3JrSG91cnMsIGRheU9mV2Vlayk7CgogICAgICAgIGlmICh3b3JrSG91cnMgPT0gbnVsbCB8fCB3b3JrSG91cnMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBib29sIHNsb3RJbldvcmtIb3VycyA9IGZhbHNlOwogICAgICAgIGZvcmVhY2ggKHZhciB3aCBpbiB3b3JrSG91cnMpCiAgICAgICAgewogICAgICAgICAgICBkeW5hbWljIHdoRHluID0gd2g7CiAgICAgICAgICAgIHZhciBzdGFydFN0ciA9IHdoRHluPy5zdGFydD8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGVuZFN0ciA9IHdoRHluPy5lbmQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgVGltZVNwYW4gd2hTdGFydCA9IFRpbWVTcGFuLk1pblZhbHVlOwogICAgICAgICAgICBUaW1lU3BhbiB3aEVuZCA9IFRpbWVTcGFuLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIVRpbWVTcGFuLlRyeVBhcnNlKHN0YXJ0U3RyLCBvdXQgd2hTdGFydCkgfHwgIVRpbWVTcGFuLlRyeVBhcnNlKGVuZFN0ciwgb3V0IHdoRW5kKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHNsb3RTdGFydCA+PSB3aFN0YXJ0ICYmIHNsb3RFbmQgPD0gd2hFbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RJbldvcmtIb3VycyA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFzbG90SW5Xb3JrSG91cnMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdmFyIHVuYXZhaWxhYmxlUmFuZ2VzID0gbmV3IExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4oKTsKCiAgICAgICAgTGlzdDxkeW5hbWljPiBhZHZMZWF2ZXMgPSBudWxsOwogICAgICAgIGlmIChwZXJzb25hbExlYXZlc01hcC5Db250YWluc0tleShhZHZpc29yS2V5KSkKICAgICAgICAgICAgYWR2TGVhdmVzID0gcGVyc29uYWxMZWF2ZXNNYXBbYWR2aXNvcktleV07CiAgICAgICAgaWYgKGFkdkxlYXZlcyAhPSBudWxsKQogICAgICAgICAgICB1bmF2YWlsYWJsZVJhbmdlcy5BZGRSYW5nZShHZXRVbmF2YWlsYWJsZVJhbmdlcyhhZHZMZWF2ZXMsIHJlekRhdGUpKTsKCiAgICAgICAgaWYgKGhvbGlkYXlSYW5nZXMgIT0gbnVsbCkKICAgICAgICAgICAgdW5hdmFpbGFibGVSYW5nZXMuQWRkUmFuZ2UoaG9saWRheVJhbmdlcyk7CgogICAgICAgIGZvcmVhY2ggKHZhciB1ciBpbiB1bmF2YWlsYWJsZVJhbmdlcykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzbG90U3RhcnQgPCB1ci5JdGVtMiAmJiBzbG90RW5kID4gdXIuSXRlbTEpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0SG9saWRheVJhbmdlcyhMaXN0PGR5bmFtaWM+IGhvbGlkYXlzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwogICAgICAgIGJvb2wgaGFzSG9saWRheSA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICh2YXIgaG9saWRheSBpbiBob2xpZGF5cykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBob2xpZGF5RGF0YSA9IGhvbGlkYXk/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChob2xpZGF5RGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHN0cmluZyBzdGFydERhdGVUaW1lU3RyID0gR2V0U3RyaW5nKGhvbGlkYXlEYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBzdHJpbmcgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoaG9saWRheURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSB8fCAhRGF0ZVRpbWUuVHJ5UGFyc2UoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREYXRlVGltZSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPCBzdGFydERhdGVUaW1lLkRhdGUgfHwgZGF0ZS5EYXRlID4gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaGFzSG9saWRheSA9IHRydWU7CgogICAgICAgICAgICBpZiAoc3RhcnREYXRlVGltZS5EYXRlICE9IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPT0gc3RhcnREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKHN0YXJ0RGF0ZVRpbWUuVGltZU9mRGF5LCBuZXcgVGltZVNwYW4oMjMsIDU5LCA1OSkpKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGUuRGF0ZSA9PSBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKFRpbWVTcGFuLlplcm8sIGVuZERhdGVUaW1lLlRpbWVPZkRheSkpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKFRpbWVTcGFuLlplcm8sIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIGVuZERhdGVUaW1lLlRpbWVPZkRheSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaGFzSG9saWRheSA/IHJhbmdlcyA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PG9iamVjdD4gR2V0V29ya2luZ0hvdXJzRm9yRGF5KExpc3Q8ZHluYW1pYz4gd29ya2luZ0hvdXJzQ2hhbmdlcywgc3RyaW5nIGRheU9mV2VlaykKICAgIHsKICAgICAgICBpZiAod29ya2luZ0hvdXJzQ2hhbmdlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAodmFyIGNoYW5nZSBpbiB3b3JraW5nSG91cnNDaGFuZ2VzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoYW5nZURhdGEgPSBjaGFuZ2U/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChjaGFuZ2VEYXRhID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGN1c3RvbVdIID0gY2hhbmdlRGF0YT8uY3VzdG9tV29ya2luZ0hvdXJzOwogICAgICAgICAgICBpZiAoY3VzdG9tV0ggPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICB2YXIgZGF5SG91cnMgPSBHZXREYXlIb3Vyc0Zyb21DdXN0b20oY3VzdG9tV0gsIGRheU9mV2Vlayk7CiAgICAgICAgICAgIGlmIChkYXlIb3VycyAhPSBudWxsKSByZXR1cm4gZGF5SG91cnM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8b2JqZWN0PiBHZXREYXlIb3Vyc0Zyb21DdXN0b20oZHluYW1pYyBjdXN0b21XSCwgc3RyaW5nIGRheU9mV2VlaykKICAgIHsKICAgICAgICBkeW5hbWljIGRheUhvdXJzID0gbnVsbDsKICAgICAgICBzd2l0Y2ggKGRheU9mV2VlaykKICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgIm1vbmRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/Lm1vbmRheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInR1ZXNkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy50dWVzZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAid2VkbmVzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8ud2VkbmVzZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAidGh1cnNkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy50aHVyc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZyaWRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LmZyaWRheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNhdHVyZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8uc2F0dXJkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdW5kYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5zdW5kYXk7IGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRheUhvdXJzID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExpc3Q8b2JqZWN0PigpOwogICAgICAgIGZvcmVhY2ggKHZhciByYW5nZSBpbiBkYXlIb3VycykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlPy5zdGFydD8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHJhbmdlPy5lbmQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnQpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShlbmQpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHQuQWRkKG5ldyB7IHN0YXJ0LCBlbmQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdC5Db3VudCA+IDAgPyByZXN1bHQgOiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PiBHZXRVbmF2YWlsYWJsZVJhbmdlcyhMaXN0PGR5bmFtaWM+IHBlcnNvbmFsTGVhdmVzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwoKICAgICAgICBmb3JlYWNoICh2YXIgbGVhdmUgaW4gcGVyc29uYWxMZWF2ZXMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgbGVhdmVEYXRhID0gbGVhdmU/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChsZWF2ZURhdGEgPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICBzdHJpbmcgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhsZWF2ZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgIHN0cmluZyBlbmREYXRlVGltZVN0ciA9IEdldFN0cmluZyhsZWF2ZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSB8fCAhRGF0ZVRpbWUuVHJ5UGFyc2UoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREYXRlVGltZSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPCBzdGFydERhdGVUaW1lLkRhdGUgfHwgZGF0ZS5EYXRlID4gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZVRpbWUuRGF0ZSAhPSBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoZGF0ZS5EYXRlID09IHN0YXJ0RGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRlLkRhdGUgPT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShUaW1lU3Bhbi5aZXJvLCBlbmREYXRlVGltZS5UaW1lT2ZEYXkpKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShUaW1lU3Bhbi5aZXJvLCBuZXcgVGltZVNwYW4oMjMsIDU5LCA1OSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKHN0YXJ0RGF0ZVRpbWUuVGltZU9mRGF5LCBlbmREYXRlVGltZS5UaW1lT2ZEYXkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgIH0KCiAgICAjZW5kcmVnaW9uCgogICAgI3JlZ2lvbiBIZWxwZXJzCgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgI2VuZHJlZ2lvbgp9Cg=="
125
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGVucmljaC1yZXplcnZhdGlvbnMtZm9yLXRyYW5zZmVyIHRhc2sgKERhcHJTZXJ2aWNlVGFzayAtIFR5cGUgMykuCi8vLyBRdWVyaWVzIEFMTCBhY3RpdmUgcmVzZXJ2YXRpb25zIGluIHRoZSBkYXRlIHJhbmdlIGFjcm9zcyBhbGwgYWR2aXNvcnMuCi8vLyBPdXRwdXRIYW5kbGVyIGVucmljaGVzIGVhY2ggc291cmNlIGFkdmlzb3IncyByZXNlcnZhdGlvbiB3aXRoIGEgbGlzdCBvZiBhZHZpc29ycwovLy8gdGhhdCBhcmUgYXZhaWxhYmxlIGJhc2VkIG9uOiByZXNlcnZhdGlvbiBjb25mbGljdHMsIHdvcmtpbmcgaG91cnMsIHB1YmxpYyBob2xpZGF5cywKLy8vIGFuZCBwZXJzb25hbCBsZWF2ZXMgKHVzaW5nIGFic2VuY2VFbnRyaWVzIGZyb20gcHJldmlvdXMgdGFzaykuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBFbnJpY2hSZXplcnZhdGlvbnNGb3JUcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciBzdGFydERhdGUgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZSIpOwogICAgICAgIHZhciBlbmREYXRlID0gR2V0U3RyaW5nKGRhdGEsICJlbmREYXRlIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydERhdGUpKQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0RGF0ZSBpcyByZXF1aXJlZC4iLCAic3RhcnREYXRlIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGUpKQogICAgICAgICAgICBlbmREYXRlID0gIjIwOTktMTItMzEiOwoKICAgICAgICB2YXIgY29uZGl0aW9ucyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJ7XCJvclwiOlsiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYWN0aXZlXCJ9fSwiICsKICAgICAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiaW4tbWVldFwifX0iICsKICAgICAgICAgICAgIl19IiwKICAgICAgICAgICAgIntcInN0YXR1c1wiOntcImVxXCI6XCJBXCJ9fSIsCiAgICAgICAgICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wic3RhcnREYXRlVGltZVwiOntcImRndFwiOlwiIiArIHN0YXJ0RGF0ZSArICJcIn19fSIsCiAgICAgICAgICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wiZW5kRGF0ZVRpbWVcIjp7XCJkbHRcIjpcIiIgKyBlbmREYXRlICsgIlwifX19IgogICAgICAgIH07CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBjb25kaXRpb25zKSArICJdfSI7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwMCIsCiAgICAgICAgICAgICJmaWx0ZXI9IiArIGZpbHRlckpzb24KICAgICAgICB9OwoKICAgICAgICBzZXJ2aWNlVGFzay5TZXRRdWVyeVN0cmluZyhzdHJpbmcuSm9pbigiJiIsIHF1ZXJ5UGFyYW1zKSk7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJvZHkgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKCiAgICAgICAgICAgIGlmIChib2R5ICE9IG51bGwgJiYgYm9keS5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBib2R5LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIGZldGNoIGFsbCByZXNlcnZhdGlvbnMiOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc291cmNlQWR2aXNvcklkID0gR2V0U3RyaW5nKGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICAgICAgdmFyIHNvdXJjZVJlemVydmF0aW9ucyA9IGRhdGE/LnJlemVydmF0aW9uczsKCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBib2R5Py5kYXRhOwogICAgICAgICAgICB2YXIgYWxsSXRlbXMgPSByZXNwb25zZURhdGE/Lml0ZW1zOwoKICAgICAgICAgICAgdmFyIHB1YmxpY0hvbGlkYXlzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIGFkdmlzb3JXb3JrSG91cnNNYXAgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIExpc3Q8ZHluYW1pYz4+KCk7CiAgICAgICAgICAgIHZhciBjb21wYW55V29ya0hvdXJzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIHBlcnNvbmFsTGVhdmVzTWFwID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PGR5bmFtaWM+PigpOwoKICAgICAgICAgICAgdmFyIGFic2VuY2VFbnRyaWVzID0gZGF0YT8uYWJzZW5jZUVudHJpZXM7CiAgICAgICAgICAgIGlmIChhYnNlbmNlRW50cmllcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgZW50cnkgaW4gYWJzZW5jZUVudHJpZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIHZhciBhdHRycyA9IGVudHJ5Py5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgICAgIGlmIChhdHRycyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGFic2VuY2VUeXBlID0gR2V0U3RyaW5nKGF0dHJzLCAiYWJzZW5jZVR5cGUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhhdHRycywgImFkdmlzb3IiKTsKCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhYnNlbmNlVHlwZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInB1YmxpYy1ob2xpZGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0hvbGlkYXlzLkFkZChlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAid29ya2luZy1ob3Vycy1jaGFuZ2UiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmlzb3JXb3JrSG91cnNNYXAuQ29udGFpbnNLZXkoYWR2aXNvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcl0gPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcl0uQWRkKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYW55V29ya0hvdXJzLkFkZChlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicGVyc29uYWwtbGVhdmUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlcnNvbmFsTGVhdmVzTWFwLkNvbnRhaW5zS2V5KGFkdmlzb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbExlYXZlc01hcFthZHZpc29yXSA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYWxMZWF2ZXNNYXBbYWR2aXNvcl0uQWRkKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGVucmljaGVkID0gbmV3IExpc3Q8b2JqZWN0PigpOwoKICAgICAgICAgICAgaWYgKHNvdXJjZVJlemVydmF0aW9ucyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcmV6IGluIHNvdXJjZVJlemVydmF0aW9ucykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmV6ID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6U3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcocmV6LCAiYXR0cmlidXRlcyIsICJzdGFydERhdGVUaW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKHJleiwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6RW5kU3RyID0gR2V0TmVzdGVkU3RyaW5nKHJleiwgImF0dHJpYnV0ZXMiLCAiZW5kRGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcocmV6LCAiZW5kRGF0ZVRpbWUiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6S2V5ID0gSGFzUHJvcGVydHkocmV6LCAia2V5IikgPyByZXoua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlelVzZXIgPSBHZXROZXN0ZWRTdHJpbmcocmV6LCAiYXR0cmlidXRlcyIsICJ1c2VyIikKICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKHJleiwgInVzZXIiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV6QWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhyZXosICJhdHRyaWJ1dGVzIiwgImFkdmlzb3IiKQogICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcocmV6LCAiYWR2aXNvciIpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgYnVzeUFkdmlzb3JzID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoc291cmNlQWR2aXNvcklkKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnVzeUFkdmlzb3JzLkFkZChzb3VyY2VBZHZpc29ySWQpOwoKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSByZXpTdGFydCA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIHJlekVuZCA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkocmV6U3RhcnRTdHIpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShyZXpFbmRTdHIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLlRyeVBhcnNlKHJlelN0YXJ0U3RyLCBvdXQgcmV6U3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKHJlekVuZFN0ciwgb3V0IHJlekVuZCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgYWxsSXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGFsbEl0ZW1zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJhZHZpc29yIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcoaXRlbSwgImFkdmlzb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtU3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAic3RhcnREYXRlVGltZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKGl0ZW0sICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUVuZFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJlbmREYXRlVGltZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz8gR2V0U3RyaW5nKGl0ZW0sICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtQWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoaXRlbVN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtRW5kU3RyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBpdGVtU3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlVGltZS5UcnlQYXJzZShpdGVtU3RhcnRTdHIsIG91dCBpdGVtU3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKGl0ZW1FbmRTdHIsIG91dCBpdGVtRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXJ0IDwgcmV6RW5kICYmIGl0ZW1FbmQgPiByZXpTdGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c3lBZHZpc29ycy5BZGQoaXRlbUFkdmlzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIGFsbEFkdmlzb3JzID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgICAgICAgICAgICAgIHZhciBhZHZpc29yS2V5cyA9IGRhdGE/LmFsbEFkdmlzb3JLZXlzOwogICAgICAgICAgICAgICAgICAgIGlmIChhZHZpc29yS2V5cyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFrIGluIGFkdmlzb3JLZXlzKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWsgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gYWs/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsQWR2aXNvcnMuQWRkKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGUgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFkdiBpbiBhbGxBZHZpc29ycykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidXN5QWR2aXNvcnMuQ29udGFpbnMoYWR2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlelN0YXJ0ICE9IERhdGVUaW1lLk1pblZhbHVlICYmIHJlekVuZCAhPSBEYXRlVGltZS5NaW5WYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1Nsb3RBdmFpbGFibGVGb3JBZHZpc29yKGFkdiwgcmV6U3RhcnQsIHJlekVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNIb2xpZGF5cywgYWR2aXNvcldvcmtIb3Vyc01hcCwgY29tcGFueVdvcmtIb3VycywgcGVyc29uYWxMZWF2ZXNNYXApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuQWRkKGFkdik7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlbnJpY2hlZC5BZGQobmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSByZXpLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSByZXpTdGFydFN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZVRpbWUgPSByZXpFbmRTdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSByZXpVc2VyLAogICAgICAgICAgICAgICAgICAgICAgICBhZHZpc29yID0gcmV6QWR2aXNvciwKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQWR2aXNvcnMgPSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgICAgICByZXN1bHRbInNvdXJjZUFkdmlzb3JJZCJdID0gc291cmNlQWR2aXNvcklkOwogICAgICAgICAgICByZXN1bHRbImFkdmlzb3JUeXBlIl0gPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgICAgIHJlc3VsdFsic3RhcnREYXRlIl0gPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZSIpOwogICAgICAgICAgICByZXN1bHRbImVuZERhdGUiXSA9IEdldFN0cmluZyhkYXRhLCAiZW5kRGF0ZSIpOwogICAgICAgICAgICByZXN1bHRbInRyYW5zZmVyVHlwZSJdID0gR2V0U3RyaW5nKGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICAgICAgcmVzdWx0WyJlbnJpY2hlZFJlemVydmF0aW9ucyJdID0gZW5yaWNoZWQ7CiAgICAgICAgICAgIHJlc3VsdFsicmV6ZXJ2YXRpb25zIl0gPSBuZXcgTGlzdDxvYmplY3Q+KCk7CiAgICAgICAgICAgIHJlc3VsdFsiYWJzZW5jZUVudHJpZXMiXSA9IG5ldyBMaXN0PG9iamVjdD4oKTsKICAgICAgICAgICAgLy8gUHJlc2VydmUga2V5cyBmcm9tIGZldGNoLWFkdmlzb3JzLWZvci10cmFuc2ZlciAocHJldmlvdXNseSBjbGVhcmVkLCBzbyBHRVQgaW5zdGFuY2VzIGFsd2F5cyBzaG93ZWQgW10pLgogICAgICAgICAgICB2YXIgcHJlc2VydmVkQWR2aXNvcktleXMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgICAgIHZhciBpbmNvbWluZ0tleXMgPSBkYXRhPy5hbGxBZHZpc29yS2V5czsKICAgICAgICAgICAgaWYgKGluY29taW5nS2V5cyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgYWsgaW4gaW5jb21pbmdLZXlzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChhayA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IGFrLlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzKSkKICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVkQWR2aXNvcktleXMuQWRkKHMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3VsdFsiYWxsQWR2aXNvcktleXMiXSA9IHByZXNlcnZlZEFkdmlzb3JLZXlzOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IHJlc3VsdAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZW5yaWNoIHJlc2VydmF0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgICNyZWdpb24gU2xvdCBBdmFpbGFiaWxpdHkKCiAgICBwcml2YXRlIGJvb2wgSXNTbG90QXZhaWxhYmxlRm9yQWR2aXNvcihzdHJpbmcgYWR2aXNvcktleSwgRGF0ZVRpbWUgcmV6U3RhcnQsIERhdGVUaW1lIHJlekVuZCwKICAgICAgICBMaXN0PGR5bmFtaWM+IHB1YmxpY0hvbGlkYXlzLAogICAgICAgIERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PGR5bmFtaWM+PiBhZHZpc29yV29ya0hvdXJzTWFwLAogICAgICAgIExpc3Q8ZHluYW1pYz4gY29tcGFueVdvcmtIb3VycywKICAgICAgICBEaWN0aW9uYXJ5PHN0cmluZywgTGlzdDxkeW5hbWljPj4gcGVyc29uYWxMZWF2ZXNNYXApCiAgICB7CiAgICAgICAgdmFyIHJlekRhdGUgPSByZXpTdGFydC5EYXRlOwogICAgICAgIHZhciBkYXlPZldlZWsgPSByZXpEYXRlLkRheU9mV2Vlay5Ub1N0cmluZygpLlRvTG93ZXIoKTsKICAgICAgICB2YXIgc2xvdFN0YXJ0ID0gcmV6U3RhcnQuVGltZU9mRGF5OwogICAgICAgIHZhciBzbG90RW5kID0gcmV6RW5kLlRpbWVPZkRheTsKCiAgICAgICAgdmFyIGhvbGlkYXlSYW5nZXMgPSBHZXRIb2xpZGF5UmFuZ2VzKHB1YmxpY0hvbGlkYXlzLCByZXpEYXRlKTsKICAgICAgICBpZiAoaG9saWRheVJhbmdlcyAhPSBudWxsICYmIGhvbGlkYXlSYW5nZXMuQ291bnQgPT0gMQogICAgICAgICAgICAmJiBob2xpZGF5UmFuZ2VzWzBdLkl0ZW0xID09IFRpbWVTcGFuLlplcm8KICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMiA+PSBuZXcgVGltZVNwYW4oMjMsIDU5LCAwKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBMaXN0PGR5bmFtaWM+IGFkdldvcmtIb3VycyA9IG51bGw7CiAgICAgICAgaWYgKGFkdmlzb3JXb3JrSG91cnNNYXAuQ29udGFpbnNLZXkoYWR2aXNvcktleSkpCiAgICAgICAgICAgIGFkdldvcmtIb3VycyA9IGFkdmlzb3JXb3JrSG91cnNNYXBbYWR2aXNvcktleV07CgogICAgICAgIHZhciB3b3JrSG91cnMgPSBHZXRXb3JraW5nSG91cnNGb3JEYXkoYWR2V29ya0hvdXJzLCBkYXlPZldlZWspOwogICAgICAgIGlmICh3b3JrSG91cnMgPT0gbnVsbCB8fCB3b3JrSG91cnMuQ291bnQgPT0gMCkKICAgICAgICAgICAgd29ya0hvdXJzID0gR2V0V29ya2luZ0hvdXJzRm9yRGF5KGNvbXBhbnlXb3JrSG91cnMsIGRheU9mV2Vlayk7CgogICAgICAgIGlmICh3b3JrSG91cnMgPT0gbnVsbCB8fCB3b3JrSG91cnMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBib29sIHNsb3RJbldvcmtIb3VycyA9IGZhbHNlOwogICAgICAgIGZvcmVhY2ggKHZhciB3aCBpbiB3b3JrSG91cnMpCiAgICAgICAgewogICAgICAgICAgICBkeW5hbWljIHdoRHluID0gd2g7CiAgICAgICAgICAgIHZhciBzdGFydFN0ciA9IHdoRHluPy5zdGFydD8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGVuZFN0ciA9IHdoRHluPy5lbmQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgVGltZVNwYW4gd2hTdGFydCA9IFRpbWVTcGFuLk1pblZhbHVlOwogICAgICAgICAgICBUaW1lU3BhbiB3aEVuZCA9IFRpbWVTcGFuLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIVRpbWVTcGFuLlRyeVBhcnNlKHN0YXJ0U3RyLCBvdXQgd2hTdGFydCkgfHwgIVRpbWVTcGFuLlRyeVBhcnNlKGVuZFN0ciwgb3V0IHdoRW5kKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHNsb3RTdGFydCA+PSB3aFN0YXJ0ICYmIHNsb3RFbmQgPD0gd2hFbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RJbldvcmtIb3VycyA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFzbG90SW5Xb3JrSG91cnMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdmFyIHVuYXZhaWxhYmxlUmFuZ2VzID0gbmV3IExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4oKTsKCiAgICAgICAgTGlzdDxkeW5hbWljPiBhZHZMZWF2ZXMgPSBudWxsOwogICAgICAgIGlmIChwZXJzb25hbExlYXZlc01hcC5Db250YWluc0tleShhZHZpc29yS2V5KSkKICAgICAgICAgICAgYWR2TGVhdmVzID0gcGVyc29uYWxMZWF2ZXNNYXBbYWR2aXNvcktleV07CiAgICAgICAgaWYgKGFkdkxlYXZlcyAhPSBudWxsKQogICAgICAgICAgICB1bmF2YWlsYWJsZVJhbmdlcy5BZGRSYW5nZShHZXRVbmF2YWlsYWJsZVJhbmdlcyhhZHZMZWF2ZXMsIHJlekRhdGUpKTsKCiAgICAgICAgaWYgKGhvbGlkYXlSYW5nZXMgIT0gbnVsbCkKICAgICAgICAgICAgdW5hdmFpbGFibGVSYW5nZXMuQWRkUmFuZ2UoaG9saWRheVJhbmdlcyk7CgogICAgICAgIGZvcmVhY2ggKHZhciB1ciBpbiB1bmF2YWlsYWJsZVJhbmdlcykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzbG90U3RhcnQgPCB1ci5JdGVtMiAmJiBzbG90RW5kID4gdXIuSXRlbTEpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0SG9saWRheVJhbmdlcyhMaXN0PGR5bmFtaWM+IGhvbGlkYXlzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwogICAgICAgIGJvb2wgaGFzSG9saWRheSA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICh2YXIgaG9saWRheSBpbiBob2xpZGF5cykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBob2xpZGF5RGF0YSA9IGhvbGlkYXk/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChob2xpZGF5RGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHN0cmluZyBzdGFydERhdGVUaW1lU3RyID0gR2V0U3RyaW5nKGhvbGlkYXlEYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBzdHJpbmcgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoaG9saWRheURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSB8fCAhRGF0ZVRpbWUuVHJ5UGFyc2UoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREYXRlVGltZSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPCBzdGFydERhdGVUaW1lLkRhdGUgfHwgZGF0ZS5EYXRlID4gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaGFzSG9saWRheSA9IHRydWU7CgogICAgICAgICAgICBpZiAoc3RhcnREYXRlVGltZS5EYXRlICE9IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPT0gc3RhcnREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKHN0YXJ0RGF0ZVRpbWUuVGltZU9mRGF5LCBuZXcgVGltZVNwYW4oMjMsIDU5LCA1OSkpKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGUuRGF0ZSA9PSBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKFRpbWVTcGFuLlplcm8sIGVuZERhdGVUaW1lLlRpbWVPZkRheSkpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKFRpbWVTcGFuLlplcm8sIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIGVuZERhdGVUaW1lLlRpbWVPZkRheSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaGFzSG9saWRheSA/IHJhbmdlcyA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PG9iamVjdD4gR2V0V29ya2luZ0hvdXJzRm9yRGF5KExpc3Q8ZHluYW1pYz4gd29ya2luZ0hvdXJzQ2hhbmdlcywgc3RyaW5nIGRheU9mV2VlaykKICAgIHsKICAgICAgICBpZiAod29ya2luZ0hvdXJzQ2hhbmdlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAodmFyIGNoYW5nZSBpbiB3b3JraW5nSG91cnNDaGFuZ2VzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoYW5nZURhdGEgPSBjaGFuZ2U/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChjaGFuZ2VEYXRhID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGN1c3RvbVdIID0gY2hhbmdlRGF0YT8uY3VzdG9tV29ya2luZ0hvdXJzOwogICAgICAgICAgICBpZiAoY3VzdG9tV0ggPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICB2YXIgZGF5SG91cnMgPSBHZXREYXlIb3Vyc0Zyb21DdXN0b20oY3VzdG9tV0gsIGRheU9mV2Vlayk7CiAgICAgICAgICAgIGlmIChkYXlIb3VycyAhPSBudWxsKSByZXR1cm4gZGF5SG91cnM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8b2JqZWN0PiBHZXREYXlIb3Vyc0Zyb21DdXN0b20oZHluYW1pYyBjdXN0b21XSCwgc3RyaW5nIGRheU9mV2VlaykKICAgIHsKICAgICAgICBkeW5hbWljIGRheUhvdXJzID0gbnVsbDsKICAgICAgICBzd2l0Y2ggKGRheU9mV2VlaykKICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgIm1vbmRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/Lm1vbmRheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInR1ZXNkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy50dWVzZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAid2VkbmVzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8ud2VkbmVzZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAidGh1cnNkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy50aHVyc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZyaWRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LmZyaWRheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNhdHVyZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8uc2F0dXJkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdW5kYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5zdW5kYXk7IGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRheUhvdXJzID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExpc3Q8b2JqZWN0PigpOwogICAgICAgIGZvcmVhY2ggKHZhciByYW5nZSBpbiBkYXlIb3VycykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlPy5zdGFydD8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHJhbmdlPy5lbmQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnQpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShlbmQpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHQuQWRkKG5ldyB7IHN0YXJ0LCBlbmQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdC5Db3VudCA+IDAgPyByZXN1bHQgOiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PiBHZXRVbmF2YWlsYWJsZVJhbmdlcyhMaXN0PGR5bmFtaWM+IHBlcnNvbmFsTGVhdmVzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwoKICAgICAgICBmb3JlYWNoICh2YXIgbGVhdmUgaW4gcGVyc29uYWxMZWF2ZXMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgbGVhdmVEYXRhID0gbGVhdmU/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChsZWF2ZURhdGEgPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICBzdHJpbmcgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhsZWF2ZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgIHN0cmluZyBlbmREYXRlVGltZVN0ciA9IEdldFN0cmluZyhsZWF2ZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREYXRlVGltZSA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSB8fCAhRGF0ZVRpbWUuVHJ5UGFyc2UoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREYXRlVGltZSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChkYXRlLkRhdGUgPCBzdGFydERhdGVUaW1lLkRhdGUgfHwgZGF0ZS5EYXRlID4gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZVRpbWUuRGF0ZSAhPSBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoZGF0ZS5EYXRlID09IHN0YXJ0RGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRlLkRhdGUgPT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShUaW1lU3Bhbi5aZXJvLCBlbmREYXRlVGltZS5UaW1lT2ZEYXkpKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShUaW1lU3Bhbi5aZXJvLCBuZXcgVGltZVNwYW4oMjMsIDU5LCA1OSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJhbmdlcy5BZGQoVHVwbGUuQ3JlYXRlKHN0YXJ0RGF0ZVRpbWUuVGltZU9mRGF5LCBlbmREYXRlVGltZS5UaW1lT2ZEYXkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgIH0KCiAgICAjZW5kcmVnaW9uCgogICAgI3JlZ2lvbiBIZWxwZXJzCgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgI2VuZHJlZ2lvbgp9Cg=="
126
126
  }
127
127
  }
128
128
  ]
@@ -162,14 +162,14 @@
162
162
  {
163
163
  "order": 1,
164
164
  "task": {
165
- "domain": "touch",
165
+ "domain": "morph-touch",
166
166
  "flow": "sys-tasks",
167
167
  "key": "validate-transfer-availability",
168
168
  "version": "1.0.0"
169
169
  },
170
170
  "mapping": {
171
171
  "location": "./src/ValidateTransferMapping.csx",
172
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXRyYW5zZmVyLWF2YWlsYWJpbGl0eSB0YXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyBhbGwgYWN0aXZlIHJlc2VydmF0aW9ucyBpbiB0aGUgZGF0ZSByYW5nZSBmb3IgdGFyZ2V0IGFkdmlzb3JzLgovLy8gT3V0cHV0SGFuZGxlciBjaGVja3MgZWFjaCB0cmFuc2ZlclBsYW4gaXRlbSB0byBzZWUgaWYgdGhlIHRhcmdldCBhZHZpc29yCi8vLyBzdGlsbCBoYXMgYSBmcmVlIHNsb3QgYXQgdGhlIHJlc2VydmF0aW9uJ3MgdGltZXNsb3QuCi8vLyBTZXRzIHZhbGlkYXRpb25SZXN1bHQuYWxsVmFsaWQgPSB0cnVlL2ZhbHNlIGFjY29yZGluZ2x5LgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVUcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciB0cmFuc2ZlclBsYW4gPSBkYXRhLnRyYW5zZmVyUGxhbjsKICAgICAgICBpZiAodHJhbnNmZXJQbGFuID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigidHJhbnNmZXJQbGFuIGlzIHJlcXVpcmVkLiIsICJ0cmFuc2ZlclBsYW4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgdmFyIGVuZERhdGUgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGUiKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZSkpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigic3RhcnREYXRlIGlzIHJlcXVpcmVkLiIsICJzdGFydERhdGUiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZSkpCiAgICAgICAgICAgIGVuZERhdGUgPSAiMjA5OS0xMi0zMSI7CgogICAgICAgIHZhciBjb25kaXRpb25zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgIntcIm9yXCI6WyIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJhY3RpdmVcIn19LCIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJpbi1tZWV0XCJ9fSIgKwogICAgICAgICAgICAiXX0iLAogICAgICAgICAgICAie1wic3RhdHVzXCI6e1wiZXFcIjpcIkFcIn19IiwKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJzdGFydERhdGVUaW1lXCI6e1wiZ3RlXCI6XCIiICsgc3RhcnREYXRlICsgIlwifX19IiwKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJlbmREYXRlVGltZVwiOntcImx0ZVwiOlwiIiArIGVuZERhdGUgKyAiXCJ9fX0iCiAgICAgICAgfTsKCiAgICAgICAgdmFyIGZpbHRlckpzb24gPSAie1wiYW5kXCI6WyIgKyBzdHJpbmcuSm9pbigiLCIsIGNvbmRpdGlvbnMpICsgIl19IjsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAicGFnZVNpemU9MTAwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsgZmlsdGVySnNvbgogICAgICAgIH07CgogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwoKICAgICAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGJvZHkuZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJWYWxpZGF0aW9uIHNlcnZpY2UgZXJyb3IiOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gYm9keT8uZGF0YTsKICAgICAgICAgICAgdmFyIGFsbEl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgICAgIHZhciB0cmFuc2ZlclBsYW4gPSBkYXRhPy50cmFuc2ZlclBsYW47CiAgICAgICAgICAgIHZhciBlbnJpY2hlZFJlemVydmF0aW9ucyA9IGRhdGE/LmVucmljaGVkUmV6ZXJ2YXRpb25zOwoKICAgICAgICAgICAgYm9vbCBhbGxWYWxpZCA9IHRydWU7CiAgICAgICAgICAgIHZhciBkZXRhaWxzID0gbmV3IExpc3Q8b2JqZWN0PigpOwoKICAgICAgICAgICAgaWYgKHRyYW5zZmVyUGxhbiAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcGxhbkl0ZW0gaW4gdHJhbnNmZXJQbGFuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChwbGFuSXRlbSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgZHluYW1pYyBwaSA9IHBsYW5JdGVtOwogICAgICAgICAgICAgICAgICAgIHZhciByZXplcnZhdGlvbktleSA9IHBpLnJlemVydmF0aW9uS2V5Py5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBZHZpc29yID0gcGkudGFyZ2V0QWR2aXNvcj8uVG9TdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJlemVydmF0aW9uS2V5KSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eSh0YXJnZXRBZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuQWRkKG5ldyB7IHJlemVydmF0aW9uS2V5LCB0YXJnZXRBZHZpc29yLCB2YWxpZCA9IGZhbHNlLCByZWFzb24gPSAibWlzc2luZy1kYXRhIiB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzdHJpbmcgcmV6U3RhcnRTdHIgPSBudWxsLCByZXpFbmRTdHIgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmIChlbnJpY2hlZFJlemVydmF0aW9ucyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGVyIGluIGVucmljaGVkUmV6ZXJ2YXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXIgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJLZXkgPSBIYXNQcm9wZXJ0eShlciwgImtleSIpID8gZXIua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJLZXkgPT0gcmV6ZXJ2YXRpb25LZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV6U3RhcnRTdHIgPSBIYXNQcm9wZXJ0eShlciwgInN0YXJ0RGF0ZVRpbWUiKSA/IGVyLnN0YXJ0RGF0ZVRpbWU/LlRvU3RyaW5nKCkgOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlekVuZFN0ciA9IEhhc1Byb3BlcnR5KGVyLCAiZW5kRGF0ZVRpbWUiKSA/IGVyLmVuZERhdGVUaW1lPy5Ub1N0cmluZygpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJlelN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShyZXpFbmRTdHIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5BZGQobmV3IHsgcmV6ZXJ2YXRpb25LZXksIHRhcmdldEFkdmlzb3IsIHZhbGlkID0gdHJ1ZSwgcmVhc29uID0gIm5vLXRpbWUtZGF0YS10by12YWxpZGF0ZSIgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUgcmV6U3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSByZXpFbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHJlelN0YXJ0U3RyLCBvdXQgcmV6U3RhcnQpIHx8ICFEYXRlVGltZS5UcnlQYXJzZShyZXpFbmRTdHIsIG91dCByZXpFbmQpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5BZGQobmV3IHsgcmV6ZXJ2YXRpb25LZXksIHRhcmdldEFkdmlzb3IsIHZhbGlkID0gdHJ1ZSwgcmVhc29uID0gInVucGFyc2VhYmxlLXRpbWUiIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzQ29uZmxpY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAoYWxsSXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGFsbEl0ZW1zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJhZHZpc29yIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcoaXRlbSwgImFkdmlzb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQWR2aXNvciAhPSB0YXJnZXRBZHZpc29yKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVN0YXJ0U3RyID0gR2V0TmVzdGVkU3RyaW5nKGl0ZW0sICJhdHRyaWJ1dGVzIiwgInN0YXJ0RGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IEdldFN0cmluZyhpdGVtLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1FbmRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAiZW5kRGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IEdldFN0cmluZyhpdGVtLCAiZW5kRGF0ZVRpbWUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoaXRlbVN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtRW5kU3RyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBpdGVtU3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlVGltZS5UcnlQYXJzZShpdGVtU3RhcnRTdHIsIG91dCBpdGVtU3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKGl0ZW1FbmRTdHIsIG91dCBpdGVtRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUtleSA9IEhhc1Byb3BlcnR5KGl0ZW0sICJrZXkiKSA/IGl0ZW0ua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1LZXkgPT0gcmV6ZXJ2YXRpb25LZXkpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXJ0IDwgcmV6RW5kICYmIGl0ZW1FbmQgPiByZXpTdGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uZmxpY3QpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhbGxWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLkFkZChuZXcgeyByZXplcnZhdGlvbktleSwgdGFyZ2V0QWR2aXNvciwgdmFsaWQgPSBmYWxzZSwgcmVhc29uID0gInNsb3QtY29uZmxpY3QiIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLkFkZChuZXcgeyByZXplcnZhdGlvbktleSwgdGFyZ2V0QWR2aXNvciwgdmFsaWQgPSB0cnVlIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFZhbGlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRJbmRleCA9IDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBleC5NZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KCg=="
172
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXRyYW5zZmVyLWF2YWlsYWJpbGl0eSB0YXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyBhbGwgYWN0aXZlIHJlc2VydmF0aW9ucyBpbiB0aGUgZGF0ZSByYW5nZSBmb3IgdGFyZ2V0IGFkdmlzb3JzLgovLy8gT3V0cHV0SGFuZGxlciBjaGVja3MgZWFjaCB0cmFuc2ZlclBsYW4gaXRlbSB0byBzZWUgaWYgdGhlIHRhcmdldCBhZHZpc29yCi8vLyBzdGlsbCBoYXMgYSBmcmVlIHNsb3QgYXQgdGhlIHJlc2VydmF0aW9uJ3MgdGltZXNsb3QuCi8vLyBTZXRzIHZhbGlkYXRpb25SZXN1bHQuYWxsVmFsaWQgPSB0cnVlL2ZhbHNlIGFjY29yZGluZ2x5LgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVUcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciB0cmFuc2ZlclBsYW4gPSBkYXRhLnRyYW5zZmVyUGxhbjsKICAgICAgICBpZiAodHJhbnNmZXJQbGFuID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigidHJhbnNmZXJQbGFuIGlzIHJlcXVpcmVkLiIsICJ0cmFuc2ZlclBsYW4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgdmFyIGVuZERhdGUgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGUiKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZSkpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigic3RhcnREYXRlIGlzIHJlcXVpcmVkLiIsICJzdGFydERhdGUiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZSkpCiAgICAgICAgICAgIGVuZERhdGUgPSAiMjA5OS0xMi0zMSI7CgogICAgICAgIHZhciBjb25kaXRpb25zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgIntcIm9yXCI6WyIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJhY3RpdmVcIn19LCIgKwogICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJpbi1tZWV0XCJ9fSIgKwogICAgICAgICAgICAiXX0iLAogICAgICAgICAgICAie1wic3RhdHVzXCI6e1wiZXFcIjpcIkFcIn19IiwKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJzdGFydERhdGVUaW1lXCI6e1wiZGd0XCI6XCIiICsgc3RhcnREYXRlICsgIlwifX19IiwKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJlbmREYXRlVGltZVwiOntcImRsdFwiOlwiIiArIGVuZERhdGUgKyAiXCJ9fX0iCiAgICAgICAgfTsKCiAgICAgICAgdmFyIGZpbHRlckpzb24gPSAie1wiYW5kXCI6WyIgKyBzdHJpbmcuSm9pbigiLCIsIGNvbmRpdGlvbnMpICsgIl19IjsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAicGFnZVNpemU9MTAwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsgZmlsdGVySnNvbgogICAgICAgIH07CgogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwoKICAgICAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGJvZHkuZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJWYWxpZGF0aW9uIHNlcnZpY2UgZXJyb3IiOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gYm9keT8uZGF0YTsKICAgICAgICAgICAgdmFyIGFsbEl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgICAgIHZhciB0cmFuc2ZlclBsYW4gPSBkYXRhPy50cmFuc2ZlclBsYW47CiAgICAgICAgICAgIHZhciBlbnJpY2hlZFJlemVydmF0aW9ucyA9IGRhdGE/LmVucmljaGVkUmV6ZXJ2YXRpb25zOwoKICAgICAgICAgICAgYm9vbCBhbGxWYWxpZCA9IHRydWU7CiAgICAgICAgICAgIHZhciBkZXRhaWxzID0gbmV3IExpc3Q8b2JqZWN0PigpOwoKICAgICAgICAgICAgaWYgKHRyYW5zZmVyUGxhbiAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcGxhbkl0ZW0gaW4gdHJhbnNmZXJQbGFuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChwbGFuSXRlbSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgZHluYW1pYyBwaSA9IHBsYW5JdGVtOwogICAgICAgICAgICAgICAgICAgIHZhciByZXplcnZhdGlvbktleSA9IHBpLnJlemVydmF0aW9uS2V5Py5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBZHZpc29yID0gcGkudGFyZ2V0QWR2aXNvcj8uVG9TdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJlemVydmF0aW9uS2V5KSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eSh0YXJnZXRBZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuQWRkKG5ldyB7IHJlemVydmF0aW9uS2V5LCB0YXJnZXRBZHZpc29yLCB2YWxpZCA9IGZhbHNlLCByZWFzb24gPSAibWlzc2luZy1kYXRhIiB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzdHJpbmcgcmV6U3RhcnRTdHIgPSBudWxsLCByZXpFbmRTdHIgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmIChlbnJpY2hlZFJlemVydmF0aW9ucyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGVyIGluIGVucmljaGVkUmV6ZXJ2YXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXIgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJLZXkgPSBIYXNQcm9wZXJ0eShlciwgImtleSIpID8gZXIua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJLZXkgPT0gcmV6ZXJ2YXRpb25LZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV6U3RhcnRTdHIgPSBIYXNQcm9wZXJ0eShlciwgInN0YXJ0RGF0ZVRpbWUiKSA/IGVyLnN0YXJ0RGF0ZVRpbWU/LlRvU3RyaW5nKCkgOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlekVuZFN0ciA9IEhhc1Byb3BlcnR5KGVyLCAiZW5kRGF0ZVRpbWUiKSA/IGVyLmVuZERhdGVUaW1lPy5Ub1N0cmluZygpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJlelN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShyZXpFbmRTdHIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5BZGQobmV3IHsgcmV6ZXJ2YXRpb25LZXksIHRhcmdldEFkdmlzb3IsIHZhbGlkID0gdHJ1ZSwgcmVhc29uID0gIm5vLXRpbWUtZGF0YS10by12YWxpZGF0ZSIgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUgcmV6U3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSByZXpFbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHJlelN0YXJ0U3RyLCBvdXQgcmV6U3RhcnQpIHx8ICFEYXRlVGltZS5UcnlQYXJzZShyZXpFbmRTdHIsIG91dCByZXpFbmQpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5BZGQobmV3IHsgcmV6ZXJ2YXRpb25LZXksIHRhcmdldEFkdmlzb3IsIHZhbGlkID0gdHJ1ZSwgcmVhc29uID0gInVucGFyc2VhYmxlLXRpbWUiIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzQ29uZmxpY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAoYWxsSXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGFsbEl0ZW1zKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQWR2aXNvciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJhZHZpc29yIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PyBHZXRTdHJpbmcoaXRlbSwgImFkdmlzb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQWR2aXNvciAhPSB0YXJnZXRBZHZpc29yKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVN0YXJ0U3RyID0gR2V0TmVzdGVkU3RyaW5nKGl0ZW0sICJhdHRyaWJ1dGVzIiwgInN0YXJ0RGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IEdldFN0cmluZyhpdGVtLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1FbmRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAiZW5kRGF0ZVRpbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IEdldFN0cmluZyhpdGVtLCAiZW5kRGF0ZVRpbWUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoaXRlbVN0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtRW5kU3RyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBpdGVtU3RhcnQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlVGltZS5UcnlQYXJzZShpdGVtU3RhcnRTdHIsIG91dCBpdGVtU3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKGl0ZW1FbmRTdHIsIG91dCBpdGVtRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUtleSA9IEhhc1Byb3BlcnR5KGl0ZW0sICJrZXkiKSA/IGl0ZW0ua2V5Py5Ub1N0cmluZygpIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1LZXkgPT0gcmV6ZXJ2YXRpb25LZXkpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXJ0IDwgcmV6RW5kICYmIGl0ZW1FbmQgPiByZXpTdGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uZmxpY3QpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhbGxWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLkFkZChuZXcgeyByZXplcnZhdGlvbktleSwgdGFyZ2V0QWR2aXNvciwgdmFsaWQgPSBmYWxzZSwgcmVhc29uID0gInNsb3QtY29uZmxpY3QiIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLkFkZChuZXcgeyByZXplcnZhdGlvbktleSwgdGFyZ2V0QWR2aXNvciwgdmFsaWQgPSB0cnVlIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFZhbGlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRJbmRleCA9IDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBleC5NZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KCg=="
173
173
  }
174
174
  }
175
175
  ]
@@ -214,30 +214,30 @@
214
214
  {
215
215
  "order": 1,
216
216
  "task": {
217
- "domain": "touch",
217
+ "domain": "morph-touch",
218
218
  "flow": "sys-tasks",
219
219
  "key": "execute-rezervation-transfer",
220
220
  "version": "1.0.0"
221
221
  },
222
222
  "mapping": {
223
223
  "location": "./src/ExecuteTransferMapping.csx",
224
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcmV6ZXJ2YXRpb24tdHJhbnNmZXIgdGFzayAoU3RhcnRUYXNrIC0gVHlwZSAxMSkuCi8vLyBQcm9jZXNzZXMgT05FIHRyYW5zZmVyIGl0ZW0gYXQgYSB0aW1lIHVzaW5nIHByb2Nlc3NlZEluZGV4IGNvdW50ZXIuCi8vLyBFYWNoIGludm9jYXRpb24gc3RhcnRzIGEgcmV6ZXJ2YXRpb24tdXBkYXRlIHN1YmZsb3cgaW5zdGFuY2UgZm9yIGEgc2luZ2xlIHJlemVydmF0aW9uLgovLy8gVGhlIHNlbGYtbG9vcCBwYXR0ZXJuIGluIHZhbGlkYXRpbmcgc3RhdGUgY2FsbHMgdGhpcyByZXBlYXRlZGx5IHVudGlsIGFsbCBpdGVtcyBhcmUgcHJvY2Vzc2VkLgovLy8KLy8vIElNUE9SVEFOVDogcHJvY2Vzc2VkSW5kZXggaW5jcmVtZW50IGhhcHBlbnMgaW4gT3V0cHV0SGFuZGxlci4KLy8vIElucHV0SGFuZGxlciBNVVNUIHJldHVybiBub24tbnVsbCBEYXRhIGZvciBTdGFydFRhc2sgdG8gZXhlY3V0ZS4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIEV4ZWN1dGVUcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN0YXJ0VGFzayA9IHRhc2sgYXMgU3RhcnRUYXNrOwogICAgICAgIGlmIChzdGFydFRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIFN0YXJ0VGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHRyYW5zZmVyUGxhbiA9IGRhdGEudHJhbnNmZXJQbGFuOwogICAgICAgIGlmICh0cmFuc2ZlclBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJ0cmFuc2ZlclBsYW4gaXMgcmVxdWlyZWQuIiwgInRyYW5zZmVyUGxhbiIpOwoKICAgICAgICB2YXIgdHJhbnNmZXJJdGVtcyA9IHRyYW5zZmVyUGxhbiBhcyBJRW51bWVyYWJsZTxvYmplY3Q+OwogICAgICAgIGlmICh0cmFuc2Zlckl0ZW1zID09IG51bGwgfHwgIXRyYW5zZmVySXRlbXMuQW55KCkpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHRyYW5zZmVyU2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoSGFzUHJvcGVydHkoZGF0YSwgInByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgewogICAgICAgICAgICBpbnQuVHJ5UGFyc2UoZGF0YS5wcm9jZXNzZWRJbmRleD8uVG9TdHJpbmcoKSA/PyAiMCIsIG91dCBwcm9jZXNzZWRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgaXRlbXNMaXN0ID0gdHJhbnNmZXJJdGVtcy5Ub0xpc3QoKTsKICAgICAgICBpZiAocHJvY2Vzc2VkSW5kZXggPj0gaXRlbXNMaXN0LkNvdW50KQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyB0cmFuc2ZlclNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciByZXplcnZhdGlvbktleSA9IGN1cnJlbnRJdGVtLnJlemVydmF0aW9uS2V5Py5Ub1N0cmluZygpOwogICAgICAgIHZhciB0YXJnZXRBZHZpc29yID0gY3VycmVudEl0ZW0udGFyZ2V0QWR2aXNvcj8uVG9TdHJpbmcoKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJlemVydmF0aW9uS2V5KSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eSh0YXJnZXRBZHZpc29yKSkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgdHJhbnNmZXJTa2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICB2YXIgcGFyZW50S2V5ID0gY29udGV4dC5JbnN0YW5jZT8uS2V5ID8/IERhdGVUaW1lLlV0Y05vdy5UaWNrcy5Ub1N0cmluZygpOwogICAgICAgIHZhciBpbnN0YW5jZUtleSA9IENyZWF0ZVNob3J0S2V5KHBhcmVudEtleSwgcmV6ZXJ2YXRpb25LZXkpOwoKICAgICAgICBzdGFydFRhc2suU2V0RG9tYWluKCJ0b3VjaCIpOwogICAgICAgIHN0YXJ0VGFzay5TZXRGbG93KCJyZXplcnZhdGlvbi11cGRhdGUiKTsKICAgICAgICBzdGFydFRhc2suU2V0S2V5KGluc3RhbmNlS2V5KTsKICAgICAgICBzdGFydFRhc2suU2V0Qm9keShuZXcKICAgICAgICB7CiAgICAgICAgICAgIHJhbmRldnVLZXkgPSByZXplcnZhdGlvbktleSwKICAgICAgICAgICAgdGFyZ2V0QWR2aXNvciA9IHRhcmdldEFkdmlzb3IsCiAgICAgICAgICAgIGF1dG9Qcm9jZXNzID0gdHJ1ZQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgIHsKICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJbmRleCA9IHByb2Nlc3NlZEluZGV4ICsgMSwKICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2ZlcktleSA9IHJlemVydmF0aW9uS2V5LAogICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEFkdmlzb3IgPSB0YXJnZXRBZHZpc29yCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGEsICJwcm9jZXNzZWRJbmRleCIpKQogICAgICAgIHsKICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHRyYW5zZmVyUGxhbiA9IGRhdGE/LnRyYW5zZmVyUGxhbjsKICAgICAgICBzdHJpbmcgY3VycmVudFRyYW5zZmVyS2V5ID0gbnVsbDsKICAgICAgICBzdHJpbmcgY3VycmVudFRhcmdldEFkdmlzb3IgPSBudWxsOwoKICAgICAgICBpZiAodHJhbnNmZXJQbGFuICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaXRlbXMgPSB0cmFuc2ZlclBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBpdGVtc0xpc3QgPSBpdGVtcy5Ub0xpc3QoKTsKICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA8IGl0ZW1zTGlzdC5Db3VudCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkeW5hbWljIGN1cnJlbnRJdGVtID0gaXRlbXNMaXN0W3Byb2Nlc3NlZEluZGV4XTsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNmZXJLZXkgPSBjdXJyZW50SXRlbT8ucmV6ZXJ2YXRpb25LZXk/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEFkdmlzb3IgPSBjdXJyZW50SXRlbT8udGFyZ2V0QWR2aXNvcj8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJQbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ2YWxpZGF0aW9uUmVzdWx0Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzdGFydERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVuZERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5yaWNoZWRSZXplcnZhdGlvbnMiKTsKICAgICAgICByZXN1bHRbInByb2Nlc3NlZEluZGV4Il0gPSBwcm9jZXNzZWRJbmRleCArIDE7CiAgICAgICAgcmVzdWx0WyJjdXJyZW50VHJhbnNmZXJLZXkiXSA9IGN1cnJlbnRUcmFuc2ZlcktleTsKICAgICAgICByZXN1bHRbImN1cnJlbnRUYXJnZXRBZHZpc29yIl0gPSBjdXJyZW50VGFyZ2V0QWR2aXNvcjsKICAgICAgICByZXN1bHRbImxhc3RUcmFuc2ZlclN1Y2Nlc3MiXSA9IHN1Y2Nlc3M7CiAgICAgICAgcmVzdWx0WyJsYXN0VHJhbnNmZXJFcnJvciJdID0gIXN1Y2Nlc3MgPyAoY29udGV4dC5Cb2R5Py5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCkgPz8gIlRyYW5zZmVyIGV4ZWN1dGlvbiBmYWlsZWQiKSA6IG51bGw7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBEYXRhID0gcmVzdWx0CiAgICAgICAgfSk7CiAgICB9CgogICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZXMgYSBrZXkgJmx0Oz0gMTAwIGNoYXJzIGJ5IHRydW5jYXRpbmcgcGFyZW50S2V5IGFuZCByZXplcnZhdGlvbktleS48L3N1bW1hcnk+CiAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgQ3JlYXRlU2hvcnRLZXkoc3RyaW5nIHBhcmVudEtleSwgc3RyaW5nIHJlemVydmF0aW9uS2V5KQogICAgewogICAgICAgIHZhciBtYXhQYXJlbnQgPSA0MDsKICAgICAgICB2YXIgbWF4UmV6ID0gNTA7CiAgICAgICAgdmFyIHAgPSBwYXJlbnRLZXkuTGVuZ3RoIDw9IG1heFBhcmVudCA/IHBhcmVudEtleSA6IHBhcmVudEtleS5TdWJzdHJpbmcocGFyZW50S2V5Lkxlbmd0aCAtIG1heFBhcmVudCk7CiAgICAgICAgdmFyIHIgPSByZXplcnZhdGlvbktleS5MZW5ndGggPD0gbWF4UmV6ID8gcmV6ZXJ2YXRpb25LZXkgOiByZXplcnZhdGlvbktleS5TdWJzdHJpbmcocmV6ZXJ2YXRpb25LZXkuTGVuZ3RoIC0gbWF4UmV6KTsKICAgICAgICByZXR1cm4gJCJ0dS17cH0te3J9IjsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUlmUHJlc2VudChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB0YXJnZXQsIGR5bmFtaWMgc291cmNlLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShzb3VyY2UsIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHRhcmdldFtuYW1lXSA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9Cn0K"
224
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcmV6ZXJ2YXRpb24tdHJhbnNmZXIgdGFzayAoU3RhcnRUYXNrIC0gVHlwZSAxMSkuCi8vLyBQcm9jZXNzZXMgT05FIHRyYW5zZmVyIGl0ZW0gYXQgYSB0aW1lIHVzaW5nIHByb2Nlc3NlZEluZGV4IGNvdW50ZXIuCi8vLyBFYWNoIGludm9jYXRpb24gc3RhcnRzIGFuIGFkZC1wYXJ0aWNpcGFudC10by1yZXplcnZhdGlvbiBzdWJmbG93IGZvciBhIHNpbmdsZSByZXplcnZhdGlvbi4KLy8vIHRyYW5zZmVyUGxhbi50YXJnZXRBZHZpc29yIGlzIHJldXNlZCBhcyB0aGUgaW52aXRlZCBwYXJ0aWNpcGFudCBNYXRyaXggdXNlciBpZCAobmV3VXNlcklkKS4KLy8vIFRoZSBzZWxmLWxvb3AgcGF0dGVybiBpbiB2YWxpZGF0aW5nIHN0YXRlIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB1bnRpbCBhbGwgaXRlbXMgYXJlIHByb2Nlc3NlZC4KLy8vCi8vLyBJTVBPUlRBTlQ6IHByb2Nlc3NlZEluZGV4IGluY3JlbWVudCBoYXBwZW5zIGluIE91dHB1dEhhbmRsZXIuCi8vLyBJbnB1dEhhbmRsZXIgTVVTVCByZXR1cm4gbm9uLW51bGwgRGF0YSBmb3IgU3RhcnRUYXNrIHRvIGV4ZWN1dGUuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBFeGVjdXRlVHJhbnNmZXJNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzdGFydFRhc2sgPSB0YXNrIGFzIFN0YXJ0VGFzazsKICAgICAgICBpZiAoc3RhcnRUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBTdGFydFRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciB0cmFuc2ZlclBsYW4gPSBkYXRhLnRyYW5zZmVyUGxhbjsKICAgICAgICBpZiAodHJhbnNmZXJQbGFuID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigidHJhbnNmZXJQbGFuIGlzIHJlcXVpcmVkLiIsICJ0cmFuc2ZlclBsYW4iKTsKCiAgICAgICAgdmFyIHRyYW5zZmVySXRlbXMgPSB0cmFuc2ZlclBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAodHJhbnNmZXJJdGVtcyA9PSBudWxsIHx8ICF0cmFuc2Zlckl0ZW1zLkFueSgpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyB0cmFuc2ZlclNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGludCBwcm9jZXNzZWRJbmRleCA9IDA7CiAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJwcm9jZXNzZWRJbmRleCIpKQogICAgICAgIHsKICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IHRyYW5zZmVySXRlbXMuVG9MaXN0KCk7CiAgICAgICAgaWYgKHByb2Nlc3NlZEluZGV4ID49IGl0ZW1zTGlzdC5Db3VudCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgdHJhbnNmZXJTa2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICBkeW5hbWljIGN1cnJlbnRJdGVtID0gaXRlbXNMaXN0W3Byb2Nlc3NlZEluZGV4XTsKICAgICAgICB2YXIgcmV6ZXJ2YXRpb25LZXkgPSBjdXJyZW50SXRlbS5yZXplcnZhdGlvbktleT8uVG9TdHJpbmcoKTsKICAgICAgICAvLyBTY2hlbWEgZmllbGQgbmFtZSBrZXB0IGZvciBVSS92YWxpZGF0aW9uOyB2YWx1ZSBpcyB0aGUgbmV3IHBhcnRpY2lwYW50IE1hdHJpeCB1c2VyIGlkLgogICAgICAgIHZhciBuZXdVc2VySWQgPSBjdXJyZW50SXRlbS50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkocmV6ZXJ2YXRpb25LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KG5ld1VzZXJJZCkpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHRyYW5zZmVyU2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIHBhcmVudEtleSA9IGNvbnRleHQuSW5zdGFuY2U/LktleSA/PyBEYXRlVGltZS5VdGNOb3cuVGlja3MuVG9TdHJpbmcoKTsKICAgICAgICB2YXIgaW5zdGFuY2VLZXkgPSBDcmVhdGVTaG9ydEtleShwYXJlbnRLZXksIHJlemVydmF0aW9uS2V5KTsKCiAgICAgICAgc3RhcnRUYXNrLlNldERvbWFpbigibW9ycGgtdG91Y2giKTsKICAgICAgICBzdGFydFRhc2suU2V0RmxvdygiYWRkLXBhcnRpY2lwYW50LXRvLXJlemVydmF0aW9uIik7CiAgICAgICAgc3RhcnRUYXNrLlNldEtleShpbnN0YW5jZUtleSk7CiAgICAgICAgc3RhcnRUYXNrLlNldEJvZHkobmV3CiAgICAgICAgewogICAgICAgICAgICByYW5kZXZ1S2V5ID0gcmV6ZXJ2YXRpb25LZXksCiAgICAgICAgICAgIG5ld1VzZXJJZCA9IG5ld1VzZXJJZAogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgIHsKICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJbmRleCA9IHByb2Nlc3NlZEluZGV4ICsgMSwKICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2ZlcktleSA9IHJlemVydmF0aW9uS2V5LAogICAgICAgICAgICAgICAgY3VycmVudE5ld1VzZXJJZCA9IG5ld1VzZXJJZCwKICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRBZHZpc29yID0gbmV3VXNlcklkCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGEsICJwcm9jZXNzZWRJbmRleCIpKQogICAgICAgIHsKICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHRyYW5zZmVyUGxhbiA9IGRhdGE/LnRyYW5zZmVyUGxhbjsKICAgICAgICBzdHJpbmcgY3VycmVudFRyYW5zZmVyS2V5ID0gbnVsbDsKICAgICAgICBzdHJpbmcgY3VycmVudE5ld1VzZXJJZCA9IG51bGw7CgogICAgICAgIGlmICh0cmFuc2ZlclBsYW4gIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRyYW5zZmVyUGxhbiBhcyBJRW51bWVyYWJsZTxvYmplY3Q+OwogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZEluZGV4IDwgaXRlbXNMaXN0LkNvdW50KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2ZlcktleSA9IGN1cnJlbnRJdGVtPy5yZXplcnZhdGlvbktleT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50TmV3VXNlcklkID0gY3VycmVudEl0ZW0/LnRhcmdldEFkdmlzb3I/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgcmVzdWx0WyJwcm9jZXNzZWRJbmRleCJdID0gcHJvY2Vzc2VkSW5kZXggKyAxOwogICAgICAgIHJlc3VsdFsiY3VycmVudFRyYW5zZmVyS2V5Il0gPSBjdXJyZW50VHJhbnNmZXJLZXk7CiAgICAgICAgcmVzdWx0WyJjdXJyZW50TmV3VXNlcklkIl0gPSBjdXJyZW50TmV3VXNlcklkOwogICAgICAgIHJlc3VsdFsiY3VycmVudFRhcmdldEFkdmlzb3IiXSA9IGN1cnJlbnROZXdVc2VySWQ7CiAgICAgICAgcmVzdWx0WyJsYXN0VHJhbnNmZXJTdWNjZXNzIl0gPSBzdWNjZXNzOwogICAgICAgIHJlc3VsdFsibGFzdFRyYW5zZmVyRXJyb3IiXSA9ICFzdWNjZXNzID8gKGNvbnRleHQuQm9keT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJBZGQgcGFydGljaXBhbnQgZXhlY3V0aW9uIGZhaWxlZCIpIDogbnVsbDsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICB7CiAgICAgICAgICAgIERhdGEgPSByZXN1bHQKICAgICAgICB9KTsKICAgIH0KCiAgICAvLy8gPHN1bW1hcnk+Q3JlYXRlcyBhIGtleSAmbHQ7PSAxMDAgY2hhcnMgYnkgdHJ1bmNhdGluZyBwYXJlbnRLZXkgYW5kIHJlemVydmF0aW9uS2V5Ljwvc3VtbWFyeT4KICAgIHByaXZhdGUgc3RhdGljIHN0cmluZyBDcmVhdGVTaG9ydEtleShzdHJpbmcgcGFyZW50S2V5LCBzdHJpbmcgcmV6ZXJ2YXRpb25LZXkpCiAgICB7CiAgICAgICAgdmFyIG1heFBhcmVudCA9IDQwOwogICAgICAgIHZhciBtYXhSZXogPSA1MDsKICAgICAgICB2YXIgcCA9IHBhcmVudEtleS5MZW5ndGggPD0gbWF4UGFyZW50ID8gcGFyZW50S2V5IDogcGFyZW50S2V5LlN1YnN0cmluZyhwYXJlbnRLZXkuTGVuZ3RoIC0gbWF4UGFyZW50KTsKICAgICAgICB2YXIgciA9IHJlemVydmF0aW9uS2V5Lkxlbmd0aCA8PSBtYXhSZXogPyByZXplcnZhdGlvbktleSA6IHJlemVydmF0aW9uS2V5LlN1YnN0cmluZyhyZXplcnZhdGlvbktleS5MZW5ndGggLSBtYXhSZXopOwogICAgICAgIHJldHVybiAkInR1LXtwfS17cn0iOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDb3B5SWZQcmVzZW50KERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHRhcmdldCwgZHluYW1pYyBzb3VyY2UsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHNvdXJjZSwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShzb3VyY2UsIG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdGFyZ2V0W25hbWVdID0gdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgIH0KfQo="
225
225
  }
226
226
  }
227
227
  ]
228
228
  },
229
229
  {
230
230
  "key": "all-done",
231
- "target": "updating-rez-chatrooms",
231
+ "target": "awaiting-permanent-assignment",
232
232
  "triggerType": 1,
233
233
  "versionStrategy": "Minor",
234
234
  "labels": [
235
235
  {
236
- "label": "All Transfers Done",
236
+ "label": "Proceed to Permanent Room Assignment",
237
237
  "language": "en-US"
238
238
  },
239
239
  {
240
- "label": "Tüm Transferler Tamamlandı",
240
+ "label": "Kalıcı Oda Atamasına Geç",
241
241
  "language": "tr-TR"
242
242
  }
243
243
  ],
@@ -286,7 +286,7 @@
286
286
  {
287
287
  "order": 1,
288
288
  "task": {
289
- "domain": "touch",
289
+ "domain": "morph-touch",
290
290
  "flow": "sys-tasks",
291
291
  "key": "fetch-rez-chatrooms-for-transfer",
292
292
  "version": "1.0.0"
@@ -321,14 +321,14 @@
321
321
  {
322
322
  "order": 1,
323
323
  "task": {
324
- "domain": "touch",
324
+ "domain": "morph-touch",
325
325
  "flow": "sys-tasks",
326
326
  "key": "execute-rez-chatroom-transfer",
327
327
  "version": "1.0.0"
328
328
  },
329
329
  "mapping": {
330
330
  "location": "./src/ExecuteRezChatRoomTransferMapping.csx",
331
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcmV6LWNoYXRyb29tLXRyYW5zZmVyIERpcmVjdFRyaWdnZXJUYXNrIChUeXBlIDEyKS4KLy8vIFRyaWdnZXJzIHRoZSAndHJhbnNmZXInIHRyYW5zaXRpb24gb24gYSBjaGF0LXJvb20gaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IGl0ZW0gaW4gcmV6Q2hhdFJvb21QbGFuLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgRXhlY3V0ZVJlekNoYXRSb29tVHJhbnNmZXJNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHJlekNoYXRSb29tUGxhbiA9IGRhdGEucmV6Q2hhdFJvb21QbGFuOwogICAgICAgIGlmIChyZXpDaGF0Um9vbVBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1yZXpDaGF0Um9vbVBsYW4iIH0gfSk7CgogICAgICAgIGludCBwcm9jZXNzZWRJbmRleCA9IDA7CiAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJyZXpDaGF0Um9vbVByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwoKICAgICAgICB2YXIgaXRlbXMgPSByZXpDaGF0Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA+PSBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IGN1cnJlbnRJdGVtPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICB2YXIgdGFyZ2V0QWR2aXNvciA9IGN1cnJlbnRJdGVtPy50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KHRhcmdldEFkdmlzb3IpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICB0cmlnZ2VyVGFzay5TZXREb21haW4oInRvdWNoIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0RmxvdygiY2hhdC1yb29tIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0S2V5KGNoYXRSb29tS2V5KTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidHJhbnNmZXIiKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyB7IG5ld0Fkdmlzb3JJZCA9IHRhcmdldEFkdmlzb3IgfSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwoKICAgICAgICBpbnQgcHJvY2Vzc2VkSW5kZXggPSAwOwogICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YSwgInJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXgiKSkKICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucmV6Q2hhdFJvb21Qcm9jZXNzZWRJbmRleD8uVG9TdHJpbmcoKSA/PyAiMCIsIG91dCBwcm9jZXNzZWRJbmRleCk7CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwcm9jZXNzZWRJbmRleCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicmV6Q2hhdFJvb21QbGFuIik7CiAgICAgICAgcmVzdWx0WyJyZXpDaGF0Um9vbVByb2Nlc3NlZEluZGV4Il0gPSBwcm9jZXNzZWRJbmRleCArIDE7CiAgICAgICAgcmVzdWx0WyJsYXN0UmV6Q2hhdFJvb21UcmFuc2ZlclN1Y2Nlc3MiXSA9IHN1Y2Nlc3M7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUlmUHJlc2VudChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB0YXJnZXQsIGR5bmFtaWMgc291cmNlLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShzb3VyY2UsIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHRhcmdldFtuYW1lXSA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9Cn0K"
331
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcmV6LWNoYXRyb29tLXRyYW5zZmVyIERpcmVjdFRyaWdnZXJUYXNrIChUeXBlIDEyKS4KLy8vIFRyaWdnZXJzIHRoZSAndHJhbnNmZXInIHRyYW5zaXRpb24gb24gYSBjaGF0LXJvb20gaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IGl0ZW0gaW4gcmV6Q2hhdFJvb21QbGFuLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgRXhlY3V0ZVJlekNoYXRSb29tVHJhbnNmZXJNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHJlekNoYXRSb29tUGxhbiA9IGRhdGEucmV6Q2hhdFJvb21QbGFuOwogICAgICAgIGlmIChyZXpDaGF0Um9vbVBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1yZXpDaGF0Um9vbVBsYW4iIH0gfSk7CgogICAgICAgIGludCBwcm9jZXNzZWRJbmRleCA9IDA7CiAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJyZXpDaGF0Um9vbVByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwoKICAgICAgICB2YXIgaXRlbXMgPSByZXpDaGF0Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA+PSBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IGN1cnJlbnRJdGVtPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICB2YXIgdGFyZ2V0QWR2aXNvciA9IGN1cnJlbnRJdGVtPy50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KHRhcmdldEFkdmlzb3IpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICB0cmlnZ2VyVGFzay5TZXREb21haW4oIm1vcnBoLXRvdWNoIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0RmxvdygiY2hhdC1yb29tIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0S2V5KGNoYXRSb29tS2V5KTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidHJhbnNmZXIiKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyB7IG5ld0Fkdmlzb3JJZCA9IHRhcmdldEFkdmlzb3IgfSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwoKICAgICAgICBpbnQgcHJvY2Vzc2VkSW5kZXggPSAwOwogICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YSwgInJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXgiKSkKICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucmV6Q2hhdFJvb21Qcm9jZXNzZWRJbmRleD8uVG9TdHJpbmcoKSA/PyAiMCIsIG91dCBwcm9jZXNzZWRJbmRleCk7CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwcm9jZXNzZWRJbmRleCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicmV6Q2hhdFJvb21QbGFuIik7CiAgICAgICAgcmVzdWx0WyJyZXpDaGF0Um9vbVByb2Nlc3NlZEluZGV4Il0gPSBwcm9jZXNzZWRJbmRleCArIDE7CiAgICAgICAgcmVzdWx0WyJsYXN0UmV6Q2hhdFJvb21UcmFuc2ZlclN1Y2Nlc3MiXSA9IHN1Y2Nlc3M7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUlmUHJlc2VudChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB0YXJnZXQsIGR5bmFtaWMgc291cmNlLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShzb3VyY2UsIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHRhcmdldFtuYW1lXSA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9Cn0K"
332
332
  }
333
333
  }
334
334
  ]
@@ -373,14 +373,14 @@
373
373
  {
374
374
  "order": 1,
375
375
  "task": {
376
- "domain": "touch",
376
+ "domain": "morph-touch",
377
377
  "flow": "sys-tasks",
378
378
  "key": "fetch-permanent-chatrooms-for-transfer",
379
379
  "version": "1.0.0"
380
380
  },
381
381
  "mapping": {
382
382
  "location": "./src/FetchPermanentChatRoomsMapping.csx",
383
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgZmV0Y2gtcGVybWFuZW50LWNoYXRyb29tcy1mb3ItdHJhbnNmZXIgRGFwclNlcnZpY2VUYXNrIChUeXBlIDMpLgovLy8gSW5wdXRIYW5kbGVyOiBxdWVyaWVzIGNoYXQtcm9vbSBpbnN0YW5jZXMgd2hlcmUgYWR2aXNvcklkIG1hdGNoZXMgc291cmNlQWR2aXNvcklkIGFuZCByb29tVHlwZSAhPSByZXplcnZhdGlvbi4KLy8vIE91dHB1dEhhbmRsZXI6IHN0b3JlcyB0aGUgcGVybWFuZW50IHJvb21zIGxpc3QgZm9yIHVzZXIgc2VsZWN0aW9uLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgRmV0Y2hQZXJtYW5lbnRDaGF0Um9vbXNNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgIGlmIChzZXJ2aWNlVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGFwclNlcnZpY2VUYXNrIik7CgogICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoYXBwSWQpKQogICAgICAgICAgICBzZXJ2aWNlVGFzay5TZXRBcHBJZChhcHBJZCk7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZCIpOwoKICAgICAgICB2YXIgc291cmNlQWR2aXNvcklkID0gR2V0U3RyaW5nKGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc291cmNlQWR2aXNvcklkKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJzb3VyY2VBZHZpc29ySWQgaXMgcmVxdWlyZWQuIiwgInNvdXJjZUFkdmlzb3JJZCIpOwoKICAgICAgICB2YXIgZXNjYXBlZEFkdmlzb3IgPSBzb3VyY2VBZHZpc29ySWQuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICB2YXIgZmlsdGVyUGFydHMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImFkdmlzb3JJZFwiOntcImVxXCI6XCIiICsgZXNjYXBlZEFkdmlzb3IgKyAiXCJ9fX0iLAogICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcInJvb21UeXBlXCI6e1wibmVcIjpcInJlemVydmF0aW9uXCJ9fX0iLAogICAgICAgICAgICAie1wib3JcIjpbe1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImFjdGl2YXRlZFwifX0se1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImRlYWN0aXZhdGVkXCJ9fV19IgogICAgICAgIH07CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBmaWx0ZXJQYXJ0cykgKyAiXX0iOwogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0xMDAiLAogICAgICAgICAgICAiZmlsdGVyPSIgKyBmaWx0ZXJKc29uCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CgogICAgICAgIHZhciByZXNwb25zZURhdGEgPSBib2R5Py5kYXRhOwogICAgICAgIHZhciBpdGVtcyA9IHJlc3BvbnNlRGF0YT8uaXRlbXM7CgogICAgICAgIHZhciBwZXJtYW5lbnRDaGF0Um9vbXMgPSBuZXcgTGlzdDxvYmplY3Q+KCk7CgogICAgICAgIGlmIChpdGVtcyAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSBHZXRTdHJpbmcoaXRlbSwgImtleSIpOwogICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gaXRlbT8uYXR0cmlidXRlczsKICAgICAgICAgICAgICAgIHZhciB1c2VyID0gYXR0cnMgIT0gbnVsbCA/IEdldFN0cmluZyhhdHRycywgInVzZXIiKSA6IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgcm9vbVR5cGUgPSBhdHRycyAhPSBudWxsID8gR2V0U3RyaW5nKGF0dHJzLCAicm9vbVR5cGUiKSA6IG51bGw7CgogICAgICAgICAgICAgICAgc3RyaW5nIHJvb21JZCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoYXR0cnMgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShhdHRycywgImNoYXRJbnRlZ3JhdGlvbiIpICYmIGF0dHJzLmNoYXRJbnRlZ3JhdGlvbiAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHJvb21JZCA9IEdldFN0cmluZyhhdHRycy5jaGF0SW50ZWdyYXRpb24sICJyb29tSWQiKTsKCiAgICAgICAgICAgICAgICBwZXJtYW5lbnRDaGF0Um9vbXMuQWRkKG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFsiY2hhdFJvb21LZXkiXSA9IGtleSwKICAgICAgICAgICAgICAgICAgICBbInVzZXIiXSA9IHVzZXIsCiAgICAgICAgICAgICAgICAgICAgWyJyb29tVHlwZSJdID0gcm9vbVR5cGUsCiAgICAgICAgICAgICAgICAgICAgWyJyb29tSWQiXSA9IHJvb21JZAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJyZXpDaGF0Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXgiKTsKICAgICAgICByZXN1bHRbInBlcm1hbmVudENoYXRSb29tcyJdID0gcGVybWFuZW50Q2hhdFJvb21zOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
383
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGZldGNoLXBlcm1hbmVudC1jaGF0cm9vbXMtZm9yLXRyYW5zZmVyIERhcHJTZXJ2aWNlVGFzayAoVHlwZSAzKS4KLy8vIElucHV0SGFuZGxlcjogcXVlcmllcyBjaGF0LXJvb20gaW5zdGFuY2VzIHdoZXJlIGFkdmlzb3JJZCBtYXRjaGVzIHNvdXJjZUFkdmlzb3JJZCBhbmQgcm9vbVR5cGUgIT0gcmV6ZXJ2YXRpb24uCi8vLyBPdXRwdXRIYW5kbGVyOiBzdG9yZXMgdGhlIHBlcm1hbmVudCByb29tcyBsaXN0IGZvciB1c2VyIHNlbGVjdGlvbi4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIEZldGNoUGVybWFuZW50Q2hhdFJvb21zTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHNvdXJjZUFkdmlzb3JJZCA9IEdldFN0cmluZyhkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHNvdXJjZUFkdmlzb3JJZCkpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigic291cmNlQWR2aXNvcklkIGlzIHJlcXVpcmVkLiIsICJzb3VyY2VBZHZpc29ySWQiKTsKCiAgICAgICAgdmFyIGVzY2FwZWRBZHZpc29yID0gc291cmNlQWR2aXNvcklkLlJlcGxhY2UoIlxcIiwgIlxcXFwiKS5SZXBsYWNlKCJcIiIsICJcXFwiIik7CiAgICAgICAgdmFyIGZpbHRlclBhcnRzID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJhZHZpc29ySWRcIjp7XCJlcVwiOlwiIiArIGVzY2FwZWRBZHZpc29yICsgIlwifX19IiwKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJyb29tVHlwZVwiOntcIm5lXCI6XCJyZXplcnZhdGlvblwifX19IiwKICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJhY3RpdmF0ZWRcIn19IgogICAgICAgIH07CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBmaWx0ZXJQYXJ0cykgKyAiXX0iOwogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0xMDAiLAogICAgICAgICAgICAiZmlsdGVyPSIgKyBmaWx0ZXJKc29uCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CgogICAgICAgIHZhciByZXNwb25zZURhdGEgPSBib2R5Py5kYXRhOwogICAgICAgIHZhciBpdGVtcyA9IHJlc3BvbnNlRGF0YT8uaXRlbXM7CgogICAgICAgIHZhciBwZXJtYW5lbnRDaGF0Um9vbXMgPSBuZXcgTGlzdDxvYmplY3Q+KCk7CgogICAgICAgIGlmIChpdGVtcyAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSBHZXRTdHJpbmcoaXRlbSwgImtleSIpOwogICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gaXRlbT8uYXR0cmlidXRlczsKICAgICAgICAgICAgICAgIHZhciB1c2VyID0gYXR0cnMgIT0gbnVsbCA/IEdldFN0cmluZyhhdHRycywgInVzZXIiKSA6IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgcm9vbVR5cGUgPSBhdHRycyAhPSBudWxsID8gR2V0U3RyaW5nKGF0dHJzLCAicm9vbVR5cGUiKSA6IG51bGw7CgogICAgICAgICAgICAgICAgc3RyaW5nIHJvb21JZCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoYXR0cnMgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShhdHRycywgImNoYXRJbnRlZ3JhdGlvbiIpICYmIGF0dHJzLmNoYXRJbnRlZ3JhdGlvbiAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHJvb21JZCA9IEdldFN0cmluZyhhdHRycy5jaGF0SW50ZWdyYXRpb24sICJyb29tSWQiKTsKCiAgICAgICAgICAgICAgICB2YXIgYWR2aXNvclR5cGVBdHRyID0gYXR0cnMgIT0gbnVsbCA/IEdldFN0cmluZyhhdHRycywgImFkdmlzb3JUeXBlIikgOiBudWxsOwogICAgICAgICAgICAgICAgdmFyIG9jY3VwaWVkQWR2aXNvcklkcyA9IEJ1aWxkT2NjdXBpZWRBZHZpc29ySWRzKGF0dHJzKTsKCiAgICAgICAgICAgICAgICBwZXJtYW5lbnRDaGF0Um9vbXMuQWRkKG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFsiY2hhdFJvb21LZXkiXSA9IGtleSwKICAgICAgICAgICAgICAgICAgICBbInVzZXIiXSA9IHVzZXIsCiAgICAgICAgICAgICAgICAgICAgWyJyb29tVHlwZSJdID0gcm9vbVR5cGUsCiAgICAgICAgICAgICAgICAgICAgWyJyb29tSWQiXSA9IHJvb21JZCwKICAgICAgICAgICAgICAgICAgICBbImFkdmlzb3JUeXBlIl0gPSBhZHZpc29yVHlwZUF0dHIsCiAgICAgICAgICAgICAgICAgICAgWyJvY2N1cGllZEFkdmlzb3JJZHMiXSA9IG9jY3VwaWVkQWR2aXNvcklkcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJyZXpDaGF0Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUHJvY2Vzc2VkSW5kZXgiKTsKICAgICAgICByZXN1bHRbInBlcm1hbmVudENoYXRSb29tcyJdID0gcGVybWFuZW50Q2hhdFJvb21zOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICB9CgogICAgLy8vIDxzdW1tYXJ5PlByaW1hcnkgYWR2aXNvciwgbWVtYmVycyBhcnJheSwgYW5kIG1lbWJlcldpdGhvdXRBcnJheSBrZXlzIOKAlCBmb3IgZXhjbHVkaW5nIGFscmVhZHktaW4tcm9vbSBhZHZpc29ycyBmcm9tIHRyYW5zZmVyIHBpY2tlcnMuPC9zdW1tYXJ5PgogICAgcHJpdmF0ZSBMaXN0PHN0cmluZz4gQnVpbGRPY2N1cGllZEFkdmlzb3JJZHMoZHluYW1pYyBhdHRycykKICAgIHsKICAgICAgICB2YXIgc2V0ID0gbmV3IEhhc2hTZXQ8c3RyaW5nPihTdHJpbmdDb21wYXJlci5PcmRpbmFsSWdub3JlQ2FzZSk7CiAgICAgICAgaWYgKGF0dHJzID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdDxzdHJpbmc+KCk7CgogICAgICAgIHZhciBwcmltYXJ5ID0gR2V0U3RyaW5nKGF0dHJzLCAiYWR2aXNvcklkIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHByaW1hcnkpKQogICAgICAgICAgICBzZXQuQWRkKHByaW1hcnkuVHJpbSgpKTsKCiAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGF0dHJzLCAibWVtYmVycyIpICYmIGF0dHJzLm1lbWJlcnMgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBtIGluIGF0dHJzLm1lbWJlcnMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBtaWQgPSBHZXRTdHJpbmcobSwgIm1lbWJlcklkIik7CiAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShtaWQpKQogICAgICAgICAgICAgICAgICAgIG1pZCA9IEdldFN0cmluZyhtLCAiYWR2aXNvcklkIik7CiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UobWlkKSkKICAgICAgICAgICAgICAgICAgICBzZXQuQWRkKG1pZC5UcmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBBZGRLZXlzRnJvbU1lbWJlcldpdGhvdXRBcnJheShhdHRycywgc2V0KTsKCiAgICAgICAgcmV0dXJuIHNldC5PcmRlckJ5KHggPT4geCwgU3RyaW5nQ29tcGFyZXIuT3JkaW5hbElnbm9yZUNhc2UpLlRvTGlzdCgpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBBZGRLZXlzRnJvbU1lbWJlcldpdGhvdXRBcnJheShkeW5hbWljIGF0dHJzLCBIYXNoU2V0PHN0cmluZz4gc2V0KQogICAgewogICAgICAgIGlmIChhdHRycyA9PSBudWxsIHx8ICFIYXNQcm9wZXJ0eShhdHRycywgIm1lbWJlcldpdGhvdXRBcnJheSIpIHx8IGF0dHJzLm1lbWJlcldpdGhvdXRBcnJheSA9PSBudWxsKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgbXdhID0gYXR0cnMubWVtYmVyV2l0aG91dEFycmF5OwogICAgICAgICAgICBpZiAobXdhIGlzIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgayBpbiBkLktleXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGspKQogICAgICAgICAgICAgICAgICAgICAgICBzZXQuQWRkKGsuVHJpbSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobXdhIGlzIFN5c3RlbS5Db2xsZWN0aW9ucy5JRGljdGlvbmFyeSByYXcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKFN5c3RlbS5Db2xsZWN0aW9ucy5EaWN0aW9uYXJ5RW50cnkgZGUgaW4gcmF3KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBrID0gZGUuS2V5Py5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShrKSkKICAgICAgICAgICAgICAgICAgICAgICAgc2V0LkFkZChrLlRyaW0oKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
384
384
  }
385
385
  }
386
386
  ],
@@ -418,6 +418,109 @@
418
418
  }
419
419
  ],
420
420
  "transitions": [
421
+ {
422
+ "key": "confirm-permanent-rooms",
423
+ "target": "updating-permanent-chatrooms",
424
+ "triggerType": 0,
425
+ "versionStrategy": "Minor",
426
+ "labels": [
427
+ {
428
+ "label": "Confirm Permanent Rooms (idempotent while updating)",
429
+ "language": "en-US"
430
+ },
431
+ {
432
+ "label": "Kalıcı onay (işlem sürerken yinelenen istek)",
433
+ "language": "tr-TR"
434
+ }
435
+ ]
436
+ },
437
+ {
438
+ "key": "process-next-permanent-termination",
439
+ "target": "updating-permanent-chatrooms",
440
+ "triggerType": 1,
441
+ "versionStrategy": "Minor",
442
+ "labels": [
443
+ {
444
+ "label": "Process Next Permanent Room (Termination: Deactivate + Create New)",
445
+ "language": "en-US"
446
+ },
447
+ {
448
+ "label": "Sonraki Kalıcı Odayı İşle (İşten Çıkma: Pasife Al + Yeni Oda Aç)",
449
+ "language": "tr-TR"
450
+ }
451
+ ],
452
+ "rule": {
453
+ "location": "./src/PermanentProcessNextTerminationRule.csx",
454
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwoKLy8vIDxzdW1tYXJ5PgovLy8gQ29uZGl0aW9uIGZvciBwcm9jZXNzLW5leHQtcGVybWFuZW50LXRlcm1pbmF0aW9uIGF1dG8gdHJhbnNpdGlvbiBpbiB1cGRhdGluZy1wZXJtYW5lbnQtY2hhdHJvb21zIHN0YXRlLgovLy8gUnVsZTogdHJhbnNmZXJUeXBlID09ICJ0ZXJtaW5hdGlvbiIgQU5EIHBlcm1hbmVudFByb2Nlc3NlZEluZGV4IGxlc3MgdGhhbiBwZXJtYW5lbnRSb29tUGxhbi5Db3VudAovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgUGVybWFuZW50UHJvY2Vzc05leHRUZXJtaW5hdGlvblJ1bGUgOiBTY3JpcHRCYXNlLCBJQ29uZGl0aW9uTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxib29sPiBIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChjb250ZXh0Py5JbnN0YW5jZT8uRGF0YSA9PSBudWxsKQogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChmYWxzZSk7CgogICAgICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2UuRGF0YTsKCiAgICAgICAgICAgIGlmICghSGFzUHJvcGVydHkoZGF0YSwgInRyYW5zZmVyVHlwZSIpIHx8IGRhdGEudHJhbnNmZXJUeXBlID09IG51bGwpCiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KGZhbHNlKTsKCiAgICAgICAgICAgIHZhciB0cmFuc2ZlclR5cGUgPSBkYXRhLnRyYW5zZmVyVHlwZT8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5FcXVhbHModHJhbnNmZXJUeXBlLCAidGVybWluYXRpb24iLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQoZmFsc2UpOwoKICAgICAgICAgICAgaWYgKCFIYXNQcm9wZXJ0eShkYXRhLCAicGVybWFuZW50Um9vbVBsYW4iKSB8fCBkYXRhLnBlcm1hbmVudFJvb21QbGFuID09IG51bGwpCiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KGZhbHNlKTsKCiAgICAgICAgICAgIHZhciBwbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbiBhcyBTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGU7CiAgICAgICAgICAgIGlmIChwbGFuID09IG51bGwpCiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KGZhbHNlKTsKCiAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gcGxhbikgdG90YWxDb3VudCsrOwoKICAgICAgICAgICAgaWYgKHRvdGFsQ291bnQgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQoZmFsc2UpOwoKICAgICAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpKQogICAgICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucGVybWFuZW50UHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChwcm9jZXNzZWRJbmRleCA8IHRvdGFsQ291bnQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChmYWxzZSk7CiAgICAgICAgfQogICAgfQp9Cg=="
455
+ },
456
+ "onExecutionTasks": [
457
+ {
458
+ "order": 1,
459
+ "task": {
460
+ "domain": "morph-touch",
461
+ "flow": "sys-tasks",
462
+ "key": "trigger-chat-room-deactivate",
463
+ "version": "1.0.0"
464
+ },
465
+ "mapping": {
466
+ "location": "./src/DeactivatePermanentChatRoomFromTransferMapping.csx",
467
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHRyaWdnZXItY2hhdC1yb29tLWRlYWN0aXZhdGUgRGlyZWN0VHJpZ2dlclRhc2sgKFR5cGUgMTIpIGluIHRoZSB0ZXJtaW5hdGlvbiB0cmFuc2ZlciBsb29wLgovLy8gUmVhZHMgcGVybWFuZW50Um9vbVBsYW5bcGVybWFuZW50UHJvY2Vzc2VkSW5kZXhdIGFuZCB0cmlnZ2VycyAnZGVhY3RpdmF0ZScgb24gdGhlIGNoYXQtcm9vbSBpbnN0YW5jZS4KLy8vIERvZXMgTk9UIGluY3JlbWVudCBwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCDigJQgdGhlIHN1YnNlcXVlbnQgU3RhcnROZXdQZXJtYW5lbnRDaGF0Um9vbUZyb21UcmFuc2Zlck1hcHBpbmcgaGFuZGxlcyB0aGF0LgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgRGVhY3RpdmF0ZVBlcm1hbmVudENoYXRSb29tRnJvbVRyYW5zZmVyTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgdHJpZ2dlclRhc2sgPSB0YXNrIGFzIERpcmVjdFRyaWdnZXJUYXNrOwogICAgICAgIGlmICh0cmlnZ2VyVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGlyZWN0VHJpZ2dlclRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHZhciBwZXJtYW5lbnRSb29tUGxhbiA9IGRhdGEucGVybWFuZW50Um9vbVBsYW47CiAgICAgICAgaWYgKHBlcm1hbmVudFJvb21QbGFuID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tcGVybWFuZW50Um9vbVBsYW4iIH0gfSk7CgogICAgICAgIGludCBwcm9jZXNzZWRJbmRleCA9IDA7CiAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpKQogICAgICAgICAgICBpbnQuVHJ5UGFyc2UoZGF0YS5wZXJtYW5lbnRQcm9jZXNzZWRJbmRleD8uVG9TdHJpbmcoKSA/PyAiMCIsIG91dCBwcm9jZXNzZWRJbmRleCk7CgogICAgICAgIHZhciBpdGVtcyA9IHBlcm1hbmVudFJvb21QbGFuIGFzIElFbnVtZXJhYmxlPG9iamVjdD47CiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIHZhciBpdGVtc0xpc3QgPSBpdGVtcy5Ub0xpc3QoKTsKICAgICAgICBpZiAocHJvY2Vzc2VkSW5kZXggPj0gaXRlbXNMaXN0LkNvdW50KQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICBkeW5hbWljIGN1cnJlbnRJdGVtID0gaXRlbXNMaXN0W3Byb2Nlc3NlZEluZGV4XTsKICAgICAgICB2YXIgY2hhdFJvb21LZXkgPSBjdXJyZW50SXRlbT8uY2hhdFJvb21LZXk/LlRvU3RyaW5nKCk7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShjaGF0Um9vbUtleSkpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIHRyaWdnZXJUYXNrLlNldERvbWFpbigibW9ycGgtdG91Y2giKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRGbG93KCJjaGF0LXJvb20iKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRLZXkoY2hhdFJvb21LZXkpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldFRyYW5zaXRpb25OYW1lKCJkZWFjdGl2YXRlIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0Qm9keShuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgYm9vbCBzdWNjZXNzID0gY29udGV4dC5Cb2R5Py5pc1N1Y2Nlc3MgPT0gdHJ1ZTsKCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJQbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ2YWxpZGF0aW9uUmVzdWx0Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzdGFydERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVuZERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5yaWNoZWRSZXplcnZhdGlvbnMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudENoYXRSb29tcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50UHJvY2Vzc2VkSW5kZXgiKTsKCiAgICAgICAgcmVzdWx0WyJsYXN0UGVybWFuZW50RGVhY3RpdmF0ZVN1Y2Nlc3MiXSA9IHN1Y2Nlc3M7CgogICAgICAgIHN0cmluZyByb29tSWQgPSBMb29rdXBSb29tSWQoZGF0YSk7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHJvb21JZCkpCiAgICAgICAgICAgIHJlc3VsdFsibGFzdERlYWN0aXZhdGVkUm9vbUlkIl0gPSByb29tSWQ7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBMb29rdXBSb29tSWQoZHluYW1pYyBkYXRhKQogICAgewogICAgICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHBlcm1hbmVudFJvb21QbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbjsKICAgICAgICAgICAgaWYgKHBlcm1hbmVudFJvb21QbGFuID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpKQogICAgICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucGVybWFuZW50UHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwoKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcGVybWFuZW50Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgaWYgKGl0ZW1zID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgICAgICBpZiAocHJvY2Vzc2VkSW5kZXggPj0gaXRlbXNMaXN0LkNvdW50KSByZXR1cm4gbnVsbDsKCiAgICAgICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgICAgICB2YXIgY2hhdFJvb21LZXkgPSBjdXJyZW50SXRlbT8uY2hhdFJvb21LZXk/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShjaGF0Um9vbUtleSkpIHJldHVybiBudWxsOwoKICAgICAgICAgICAgaWYgKCFIYXNQcm9wZXJ0eShkYXRhLCAicGVybWFuZW50Q2hhdFJvb21zIikgfHwgZGF0YS5wZXJtYW5lbnRDaGF0Um9vbXMgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICAgICAgZm9yZWFjaCAodmFyIHJvb20gaW4gZGF0YS5wZXJtYW5lbnRDaGF0Um9vbXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSByb29tPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuRXF1YWxzKGtleSwgY2hhdFJvb21LZXksIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiByb29tPy5yb29tSWQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
468
+ }
469
+ },
470
+ {
471
+ "order": 2,
472
+ "task": {
473
+ "domain": "morph-touch",
474
+ "flow": "sys-tasks",
475
+ "key": "get-matrix-room-messages",
476
+ "version": "1.0.0"
477
+ },
478
+ "mapping": {
479
+ "location": "./src/FetchRoomMessagesForSummaryMapping.csx",
480
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGdldC1tYXRyaXgtcm9vbS1tZXNzYWdlcyBIdHRwVGFzayAoVHlwZSA2KSBpbiB0aGUgdGVybWluYXRpb24gdHJhbnNmZXIgbG9vcC4KLy8vIFJlYWRzIHJvb21JZCBmcm9tIHBlcm1hbmVudENoYXRSb29tcyAobWF0Y2hlZCBieSBjaGF0Um9vbUtleSkgYW5kIGZldGNoZXMgdGhlIGxhc3QgMTAwIG1lc3NhZ2VzLgovLy8gU3RvcmVzIGZvcm1hdHRlZCBtZXNzYWdlcyBpbiBsYXN0Um9vbU1lc3NhZ2VzIGZvciBBSSBzdW1tYXJpemF0aW9uLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgRmV0Y2hSb29tTWVzc2FnZXNGb3JTdW1tYXJ5TWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBhc3luYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgaHR0cFRhc2sgPSB0YXNrIGFzIEh0dHBUYXNrOwogICAgICAgIGlmIChodHRwVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGFuIEh0dHBUYXNrIik7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8taW5zdGFuY2UtZGF0YSIgfSB9OwoKICAgICAgICB2YXIgcm9vbUlkID0gR2V0U3RyaW5nKGRhdGEsICJsYXN0RGVhY3RpdmF0ZWRSb29tSWQiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShyb29tSWQpKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tcm9vbUlkIiB9IH07CgogICAgICAgIHN0cmluZyB1c2VyID0gbnVsbDsKICAgICAgICB2YXIgcGVybWFuZW50Um9vbVBsYW4gPSBkYXRhLnBlcm1hbmVudFJvb21QbGFuOwogICAgICAgIGlmIChwZXJtYW5lbnRSb29tUGxhbiAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpKQogICAgICAgICAgICAgICAgaW50LlRyeVBhcnNlKGRhdGEucGVybWFuZW50UHJvY2Vzc2VkSW5kZXg/LlRvU3RyaW5nKCkgPz8gIjAiLCBvdXQgcHJvY2Vzc2VkSW5kZXgpOwoKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcGVybWFuZW50Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBpdGVtc0xpc3QgPSBpdGVtcy5Ub0xpc3QoKTsKICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA8IGl0ZW1zTGlzdC5Db3VudCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkeW5hbWljIGN1cnJlbnRJdGVtID0gaXRlbXNMaXN0W3Byb2Nlc3NlZEluZGV4XTsKICAgICAgICAgICAgICAgICAgICB2YXIgY2hhdFJvb21LZXkgPSBjdXJyZW50SXRlbT8uY2hhdFJvb21LZXk/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShjaGF0Um9vbUtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBMb29rdXBVc2VyKGRhdGEsIGNoYXRSb29tS2V5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UodXNlcikpCiAgICAgICAgICAgIHJldHVybiBuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby11c2VyIiB9IH07CgogICAgICAgIHZhciBtYXRyaXhCYXNlVXJsID0gYXdhaXQgR2V0U2VjcmV0QXN5bmMoInZuZXh0LXNlY3JldCIsICJ3b3JrZmxvdy1zZWNyZXQiLCAiTWF0cml4QmFzZVVybCIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKG1hdHJpeEJhc2VVcmwpKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tTWF0cml4QmFzZVVybCIgfSB9OwoKICAgICAgICB2YXIgZnVsbFVybCA9IG1hdHJpeEJhc2VVcmwuVHJpbUVuZCgnLycpICsKICAgICAgICAgICAgIi9fbWF0cml4L2NsaWVudC92My9yb29tcy8iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcocm9vbUlkKSArCiAgICAgICAgICAgICIvbWVzc2FnZXM/ZGlyPWImbGltaXQ9MTAwIjsKCiAgICAgICAgaHR0cFRhc2suU2V0VXJsKGZ1bGxVcmwpOwogICAgICAgIGh0dHBUYXNrLlNldEhlYWRlcnMobmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICBbIkFjY2VwdCJdID0gImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICBbIlgtTWF0cml4LVVzZXIiXSA9IHVzZXIKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSgpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlBbGxGaWVsZHMocmVzdWx0LCBkYXRhKTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBib2R5RGF0YSA9IHJlc3BvbnNlPy5kYXRhOwoKICAgICAgICAgICAgc3RyaW5nIGVycmNvZGUgPSBHZXRTdHJpbmcoYm9keURhdGEsICJlcnJjb2RlIik7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoZXJyY29kZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdFsibGFzdFJvb21NZXNzYWdlcyJdID0gbmV3IExpc3Q8c3RyaW5nPigpOwogICAgICAgICAgICAgICAgcmVzdWx0WyJsYXN0Um9vbU1lc3NhZ2VzU3VjY2VzcyJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IG5ldyBMaXN0PHN0cmluZz4oKTsKICAgICAgICAgICAgaWYgKGJvZHlEYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkoYm9keURhdGEsICJjaHVuayIpICYmIGJvZHlEYXRhLmNodW5rICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBldnQgaW4gYm9keURhdGEuY2h1bmspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV2dFR5cGUgPSBHZXRTdHJpbmcoZXZ0LCAidHlwZSIpOwogICAgICAgICAgICAgICAgICAgIGlmIChldnRUeXBlICE9ICJtLnJvb20ubWVzc2FnZSIpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGV2dD8uY29udGVudDsKICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGJvZHkgPSBHZXRTdHJpbmcoY29udGVudCwgImJvZHkiKTsKICAgICAgICAgICAgICAgICAgICBzdHJpbmcgc2VuZGVyID0gR2V0U3RyaW5nKGV2dCwgInNlbmRlciIpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShib2R5KSAmJiAhc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShzZW5kZXIpKQogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5BZGQoc2VuZGVyICsgIjogIiArIGJvZHkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBtZXNzYWdlcy5SZXZlcnNlKCk7CiAgICAgICAgICAgIHJlc3VsdFsibGFzdFJvb21NZXNzYWdlcyJdID0gbWVzc2FnZXM7CiAgICAgICAgICAgIHJlc3VsdFsibGFzdFJvb21NZXNzYWdlc1N1Y2Nlc3MiXSA9IG1lc3NhZ2VzLkNvdW50ID4gMDsKICAgICAgICB9CiAgICAgICAgY2F0Y2gKICAgICAgICB7CiAgICAgICAgICAgIHJlc3VsdFsibGFzdFJvb21NZXNzYWdlcyJdID0gbmV3IExpc3Q8c3RyaW5nPigpOwogICAgICAgICAgICByZXN1bHRbImxhc3RSb29tTWVzc2FnZXNTdWNjZXNzIl0gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBMb29rdXBVc2VyKGR5bmFtaWMgZGF0YSwgc3RyaW5nIGNoYXRSb29tS2V5KQogICAgewogICAgICAgIGlmICghSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudENoYXRSb29tcyIpIHx8IGRhdGEucGVybWFuZW50Q2hhdFJvb21zID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICBmb3JlYWNoICh2YXIgcm9vbSBpbiBkYXRhLnBlcm1hbmVudENoYXRSb29tcykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBrZXkgPSBHZXRTdHJpbmcocm9vbSwgImNoYXRSb29tS2V5Iik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuRXF1YWxzKGtleSwgY2hhdFJvb21LZXksIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICAgICAgcmV0dXJuIEdldFN0cmluZyhyb29tLCAidXNlciIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDb3B5QWxsRmllbGRzKERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHJlc3VsdCwgZHluYW1pYyBkYXRhKQogICAgewogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJQbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ2YWxpZGF0aW9uUmVzdWx0Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzdGFydERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVuZERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5yaWNoZWRSZXplcnZhdGlvbnMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudENoYXRSb29tcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50UHJvY2Vzc2VkSW5kZXgiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImxhc3RQZXJtYW5lbnREZWFjdGl2YXRlU3VjY2VzcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdERlYWN0aXZhdGVkUm9vbUlkIik7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
481
+ }
482
+ },
483
+ {
484
+ "order": 3,
485
+ "task": {
486
+ "domain": "morph-touch",
487
+ "flow": "sys-tasks",
488
+ "key": "summarize-chat-openai",
489
+ "version": "1.0.0"
490
+ },
491
+ "mapping": {
492
+ "location": "./src/SummarizeChatWithOpenAIMapping.csx",
493
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHN1bW1hcml6ZS1jaGF0LW9wZW5haSBIdHRwVGFzayAoVHlwZSA2KSBpbiB0aGUgdGVybWluYXRpb24gdHJhbnNmZXIgbG9vcC4KLy8vIFJlYWRzIGxhc3RSb29tTWVzc2FnZXMgZnJvbSBpbnN0YW5jZSBkYXRhLCBzZW5kcyB0aGVtIHRvIE9wZW5BSSBDaGF0IENvbXBsZXRpb25zIEFQSSwKLy8vIGFuZCBzdG9yZXMgdGhlIHN1bW1hcnkgaW4gY2hhdFN1bW1hcnkuCi8vLyBTa2lwcyBncmFjZWZ1bGx5IGlmIG5vIG1lc3NhZ2VzIG9yIG9uIGVycm9yIC0tIHRyYW5zZmVyIGlzIG5ldmVyIGJsb2NrZWQuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBTdW1tYXJpemVDaGF0V2l0aE9wZW5BSU1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwcml2YXRlIGNvbnN0IHN0cmluZyBTeXN0ZW1Qcm9tcHQgPQogICAgICAgICJBc2FnaWRha2kgbXVzdGVyaS1kYW5pc21hbiBzb2hiZXQgZ2VjbWlzaW5pIFR1cmtjZSBvbGFyYWsgMy01IGN1bWxlIGlsZSBvemV0bGUuICIgKwogICAgICAgICJPbmVtbGkga29udWxhcmksIGthcmFybGFyaSB2ZSBha3NpeW9ubGFyaSB2dXJndWxhLiAiICsKICAgICAgICAiS2lzaXNlbCB2ZXJpbGVyaSAoVEMga2ltbGlrLCBoZXNhcCBudW1hcmFzaSB2Yi4pIG96ZXRsZW1lLiI7CgogICAgcHVibGljIGFzeW5jIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBodHRwVGFzayA9IHRhc2sgYXMgSHR0cFRhc2s7CiAgICAgICAgaWYgKGh0dHBUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYW4gSHR0cFRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1pbnN0YW5jZS1kYXRhIiB9IH07CgogICAgICAgIGJvb2wgbWVzc2FnZXNPayA9IGZhbHNlOwogICAgICAgIGlmIChIYXNQcm9wZXJ0eShkYXRhLCAibGFzdFJvb21NZXNzYWdlc1N1Y2Nlc3MiKSkKICAgICAgICAgICAgYm9vbC5UcnlQYXJzZShkYXRhLmxhc3RSb29tTWVzc2FnZXNTdWNjZXNzPy5Ub1N0cmluZygpLCBvdXQgbWVzc2FnZXNPayk7CgogICAgICAgIGlmICghbWVzc2FnZXNPayB8fCAhSGFzUHJvcGVydHkoZGF0YSwgImxhc3RSb29tTWVzc2FnZXMiKSB8fCBkYXRhLmxhc3RSb29tTWVzc2FnZXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gIm5vLW1lc3NhZ2VzIiB9IH07CgogICAgICAgIHZhciBtc2dzID0gZGF0YS5sYXN0Um9vbU1lc3NhZ2VzIGFzIElFbnVtZXJhYmxlPG9iamVjdD47CiAgICAgICAgaWYgKG1zZ3MgPT0gbnVsbCB8fCAhbXNncy5BbnkoKSkKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gImVtcHR5LW1lc3NhZ2VzIiB9IH07CgogICAgICAgIHZhciBjb21iaW5lZCA9IHN0cmluZy5Kb2luKCJcbiIsIG1zZ3MuU2VsZWN0KG0gPT4gbT8uVG9TdHJpbmcoKSA/PyAiIikpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGNvbWJpbmVkKSkKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gImJsYW5rLW1lc3NhZ2VzIiB9IH07CgogICAgICAgIHZhciBhcGlLZXkgPSBhd2FpdCBHZXRTZWNyZXRBc3luYygidm5leHQtc2VjcmV0IiwgIndvcmtmbG93LXNlY3JldCIsICJPcGVuQUlBcGlLZXkiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShhcGlLZXkpKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tT3BlbkFJQXBpS2V5IiB9IH07CgogICAgICAgIGh0dHBUYXNrLlNldFVybCgiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jaGF0L2NvbXBsZXRpb25zIik7CiAgICAgICAgaHR0cFRhc2suU2V0SGVhZGVycyhuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgIFsiQ29udGVudC1UeXBlIl0gPSAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgIFsiQWNjZXB0Il0gPSAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgIFsiQXV0aG9yaXphdGlvbiJdID0gIkJlYXJlciAiICsgYXBpS2V5LlRyaW0oKQogICAgICAgIH0pOwogICAgICAgIGh0dHBUYXNrLlNldEJvZHkobmV3CiAgICAgICAgewogICAgICAgICAgICBtb2RlbCA9ICJncHQtNG8tbWluaSIsCiAgICAgICAgICAgIG1lc3NhZ2VzID0gbmV3IG9iamVjdFtdCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5ldyB7IHJvbGUgPSAic3lzdGVtIiwgY29udGVudCA9IFN5c3RlbVByb21wdCB9LAogICAgICAgICAgICAgICAgbmV3IHsgcm9sZSA9ICJ1c2VyIiwgY29udGVudCA9IGNvbWJpbmVkIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgbWF4X3Rva2VucyA9IDUwMCwKICAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAwLjMKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSgpOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlBbGxGaWVsZHMocmVzdWx0LCBkYXRhKTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBib2R5RGF0YSA9IHJlc3BvbnNlPy5kYXRhOwoKICAgICAgICAgICAgaWYgKGJvZHlEYXRhID09IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdFsiY2hhdFN1bW1hcnkiXSA9IG51bGw7CiAgICAgICAgICAgICAgICByZXN1bHRbImNoYXRTdW1tYXJ5U3VjY2VzcyJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0cmluZyBlcnJUeXBlID0gR2V0U3RyaW5nKGJvZHlEYXRhLCAiZXJyb3IiKTsKICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShlcnJUeXBlKSAmJiBIYXNQcm9wZXJ0eShib2R5RGF0YSwgIm1lc3NhZ2UiKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0WyJjaGF0U3VtbWFyeSJdID0gbnVsbDsKICAgICAgICAgICAgICAgIHJlc3VsdFsiY2hhdFN1bW1hcnlTdWNjZXNzIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RyaW5nIHN1bW1hcnkgPSBudWxsOwogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoYm9keURhdGEsICJjaG9pY2VzIikgJiYgYm9keURhdGEuY2hvaWNlcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgY2hvaWNlIGluIGJvZHlEYXRhLmNob2ljZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBjaG9pY2U/Lm1lc3NhZ2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBHZXRTdHJpbmcobWVzc2FnZSwgImNvbnRlbnQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXN1bHRbImNoYXRTdW1tYXJ5Il0gPSBzdW1tYXJ5OwogICAgICAgICAgICByZXN1bHRbImNoYXRTdW1tYXJ5U3VjY2VzcyJdID0gIXN0cmluZy5Jc051bGxPcldoaXRlU3BhY2Uoc3VtbWFyeSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoCiAgICAgICAgewogICAgICAgICAgICByZXN1bHRbImNoYXRTdW1tYXJ5Il0gPSBudWxsOwogICAgICAgICAgICByZXN1bHRbImNoYXRTdW1tYXJ5U3VjY2VzcyJdID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUFsbEZpZWxkcyhEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiByZXN1bHQsIGR5bmFtaWMgZGF0YSkKICAgIHsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJyZXpDaGF0Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFJvb21QbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwZXJtYW5lbnRDaGF0Um9vbXMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJsYXN0UGVybWFuZW50RGVhY3RpdmF0ZVN1Y2Nlc3MiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImxhc3REZWFjdGl2YXRlZFJvb21JZCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFJvb21NZXNzYWdlcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFJvb21NZXNzYWdlc1N1Y2Nlc3MiKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUlmUHJlc2VudChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB0YXJnZXQsIGR5bmFtaWMgc291cmNlLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShzb3VyY2UsIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHRhcmdldFtuYW1lXSA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9Cn0K"
494
+ }
495
+ },
496
+ {
497
+ "order": 4,
498
+ "task": {
499
+ "domain": "morph-touch",
500
+ "flow": "sys-tasks",
501
+ "key": "start-permanent-chat-room",
502
+ "version": "1.0.0"
503
+ },
504
+ "mapping": {
505
+ "location": "./src/StartNewPermanentChatRoomFromTransferMapping.csx",
506
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHN0YXJ0LXBlcm1hbmVudC1jaGF0LXJvb20gU3RhcnRUYXNrIChUeXBlIDExKSBpbiB0aGUgdGVybWluYXRpb24gdHJhbnNmZXIgbG9vcC4KLy8vIFJlYWRzIHBlcm1hbmVudFJvb21QbGFuW3Blcm1hbmVudFByb2Nlc3NlZEluZGV4XSB0byBnZXQgY2hhdFJvb21LZXkgYW5kIHRhcmdldEFkdmlzb3IsCi8vLyBsb29rcyB1cCB1c2VyIGFuZCBhZHZpc29yVHlwZSBmcm9tIHBlcm1hbmVudENoYXRSb29tcywgdGhlbiBzdGFydHMgYSBuZXcgY2hhdC1yb29tIGluc3RhbmNlLgovLy8gSW5jcmVtZW50cyBwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCBvbiBzdWNjZXNzLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgU3RhcnROZXdQZXJtYW5lbnRDaGF0Um9vbUZyb21UcmFuc2Zlck1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN0YXJ0VGFzayA9IHRhc2sgYXMgU3RhcnRUYXNrOwogICAgICAgIGlmIChzdGFydFRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIFN0YXJ0VGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHBlcm1hbmVudFJvb21QbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbjsKICAgICAgICBpZiAocGVybWFuZW50Um9vbVBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1wZXJtYW5lbnRSb29tUGxhbiIgfSB9KTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgdmFyIGl0ZW1zID0gcGVybWFuZW50Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA+PSBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IGN1cnJlbnRJdGVtPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICB2YXIgdGFyZ2V0QWR2aXNvciA9IGN1cnJlbnRJdGVtPy50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KHRhcmdldEFkdmlzb3IpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICBzdHJpbmcgdXNlciA9IG51bGw7CiAgICAgICAgc3RyaW5nIGFkdmlzb3JUeXBlID0gbnVsbDsKICAgICAgICBMb29rdXBSb29tRGV0YWlscyhkYXRhLCBjaGF0Um9vbUtleSwgb3V0IHVzZXIsIG91dCBhZHZpc29yVHlwZSk7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gInVzZXItbm90LWZvdW5kLWZvci0iICsgY2hhdFJvb21LZXkgfSB9KTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoYWR2aXNvclR5cGUpKQogICAgICAgICAgICBhZHZpc29yVHlwZSA9ICJJQSI7CgogICAgICAgIHZhciBuZXdDaGF0Um9vbUtleSA9IE5vcm1hbGl6ZUZvcktleSh1c2VyKSArICItIiArIE5vcm1hbGl6ZUZvcktleShhZHZpc29yVHlwZSkgKyAiLSIgKyBOb3JtYWxpemVGb3JLZXkodGFyZ2V0QWR2aXNvcik7CgogICAgICAgIHN0YXJ0VGFzay5TZXREb21haW4oIm1vcnBoLXRvdWNoIik7CiAgICAgICAgc3RhcnRUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHN0YXJ0VGFzay5TZXRLZXkobmV3Q2hhdFJvb21LZXkpOwogICAgICAgIHN0YXJ0VGFzay5TZXRTeW5jKHRydWUpOwogICAgICAgIHN0YXJ0VGFzay5TZXRCb2R5KG5ldwogICAgICAgIHsKICAgICAgICAgICAgdXNlciwKICAgICAgICAgICAgYWR2aXNvclR5cGUsCiAgICAgICAgICAgIGFkdmlzb3JJZCA9IHRhcmdldEFkdmlzb3IsCiAgICAgICAgICAgIHJvb21UeXBlID0gInBlcm1hbmVudCIKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBib29sIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwoKICAgICAgICBpbnQgcHJvY2Vzc2VkSW5kZXggPSAwOwogICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJQbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ2YWxpZGF0aW9uUmVzdWx0Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzdGFydERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVuZERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5yaWNoZWRSZXplcnZhdGlvbnMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudENoYXRSb29tcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFBlcm1hbmVudERlYWN0aXZhdGVTdWNjZXNzIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJsYXN0RGVhY3RpdmF0ZWRSb29tSWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImxhc3RSb29tTWVzc2FnZXMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImxhc3RSb29tTWVzc2FnZXNTdWNjZXNzIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJjaGF0U3VtbWFyeSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiY2hhdFN1bW1hcnlTdWNjZXNzIik7CgogICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICByZXN1bHRbInBlcm1hbmVudFByb2Nlc3NlZEluZGV4Il0gPSBwcm9jZXNzZWRJbmRleCArIDE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4Iik7CgogICAgICAgIHJlc3VsdFsibGFzdFBlcm1hbmVudENoYXRSb29tU3VjY2VzcyJdID0gc3VjY2VzczsKCiAgICAgICAgc3RyaW5nIG5ld1Jvb21JZCA9IEV4dHJhY3ROZXdSb29tSWQoY29udGV4dCk7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKG5ld1Jvb21JZCkpCiAgICAgICAgICAgIHJlc3VsdFsibmV3Um9vbUlkIl0gPSBuZXdSb29tSWQ7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBFeHRyYWN0TmV3Um9vbUlkKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBib2R5ID0gY29udGV4dC5Cb2R5OwogICAgICAgICAgICBpZiAoYm9keSA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShib2R5LCAiZGF0YSIpICYmIGJvZHkuZGF0YSAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gYm9keS5kYXRhOwogICAgICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHJlc3BvbnNlRGF0YSwgImNoYXRJbnRlZ3JhdGlvbiIpICYmIHJlc3BvbnNlRGF0YS5jaGF0SW50ZWdyYXRpb24gIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZWdyYXRpb24gPSByZXNwb25zZURhdGEuY2hhdEludGVncmF0aW9uOwogICAgICAgICAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShpbnRlZ3JhdGlvbiwgInJvb21JZCIpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZWdyYXRpb24ucm9vbUlkPy5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHJlc3BvbnNlRGF0YSwgInJvb21JZCIpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZURhdGEucm9vbUlkPy5Ub1N0cmluZygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vLyA8c3VtbWFyeT5GaW5kcyB1c2VyIGFuZCBhZHZpc29yVHlwZSBmcm9tIHRoZSBwZXJtYW5lbnRDaGF0Um9vbXMgYXJyYXkgYnkgbWF0Y2hpbmcgY2hhdFJvb21LZXkuPC9zdW1tYXJ5PgogICAgcHJpdmF0ZSB2b2lkIExvb2t1cFJvb21EZXRhaWxzKGR5bmFtaWMgZGF0YSwgc3RyaW5nIGNoYXRSb29tS2V5LCBvdXQgc3RyaW5nIHVzZXIsIG91dCBzdHJpbmcgYWR2aXNvclR5cGUpCiAgICB7CiAgICAgICAgdXNlciA9IG51bGw7CiAgICAgICAgYWR2aXNvclR5cGUgPSBudWxsOwoKICAgICAgICBpZiAoZGF0YSA9PSBudWxsIHx8ICFIYXNQcm9wZXJ0eShkYXRhLCAicGVybWFuZW50Q2hhdFJvb21zIikgfHwgZGF0YS5wZXJtYW5lbnRDaGF0Um9vbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBmb3JlYWNoICh2YXIgcm9vbSBpbiBkYXRhLnBlcm1hbmVudENoYXRSb29tcykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBrZXkgPSBHZXRTdHJpbmcocm9vbSwgImNoYXRSb29tS2V5Iik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuRXF1YWxzKGtleSwgY2hhdFJvb21LZXksIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1c2VyID0gR2V0U3RyaW5nKHJvb20sICJ1c2VyIik7CiAgICAgICAgICAgICAgICBhZHZpc29yVHlwZSA9IEdldFN0cmluZyhyb29tLCAiYWR2aXNvclR5cGUiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIE5vcm1hbGl6ZUZvcktleShzdHJpbmcgdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHZhbHVlKSkgcmV0dXJuIHZhbHVlID8/ICIiOwogICAgICAgIHJldHVybiB2YWx1ZS5SZXBsYWNlKCI6IiwgIi0iKS5SZXBsYWNlKCIgIiwgIi0iKS5SZXBsYWNlKCJAIiwgIi0iKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUlmUHJlc2VudChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB0YXJnZXQsIGR5bmFtaWMgc291cmNlLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShzb3VyY2UsIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHRhcmdldFtuYW1lXSA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICB9Cn0K"
507
+ }
508
+ },
509
+ {
510
+ "order": 5,
511
+ "task": {
512
+ "domain": "morph-touch",
513
+ "flow": "sys-tasks",
514
+ "key": "send-matrix-room-message",
515
+ "version": "1.0.0"
516
+ },
517
+ "mapping": {
518
+ "location": "./src/SendSummaryToNewRoomMapping.csx",
519
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHNlbmQtbWF0cml4LXJvb20tbWVzc2FnZSBIdHRwVGFzayAoVHlwZSA2KSBpbiB0aGUgdGVybWluYXRpb24gdHJhbnNmZXIgbG9vcC4KLy8vIFNlbmRzIHRoZSBBSS1nZW5lcmF0ZWQgY2hhdFN1bW1hcnkgYXMgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgcm9vbS4KLy8vIFNraXBzIGdyYWNlZnVsbHkgaWYgbm8gc3VtbWFyeSBpcyBhdmFpbGFibGUgLS0gdHJhbnNmZXIgaXMgbmV2ZXIgYmxvY2tlZC4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFNlbmRTdW1tYXJ5VG9OZXdSb29tTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBhc3luYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgaHR0cFRhc2sgPSB0YXNrIGFzIEh0dHBUYXNrOwogICAgICAgIGlmIChodHRwVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGFuIEh0dHBUYXNrIik7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8taW5zdGFuY2UtZGF0YSIgfSB9OwoKICAgICAgICB2YXIgY2hhdFN1bW1hcnkgPSBHZXRTdHJpbmcoZGF0YSwgImNoYXRTdW1tYXJ5Iik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoY2hhdFN1bW1hcnkpKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tY2hhdFN1bW1hcnkiIH0gfTsKCiAgICAgICAgdmFyIG5ld1Jvb21JZCA9IEdldFN0cmluZyhkYXRhLCAibmV3Um9vbUlkIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UobmV3Um9vbUlkKSkKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gIm5vLW5ld1Jvb21JZCIgfSB9OwoKICAgICAgICBzdHJpbmcgdXNlciA9IG51bGw7CiAgICAgICAgdmFyIHBlcm1hbmVudFJvb21QbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbjsKICAgICAgICBpZiAocGVybWFuZW50Um9vbVBsYW4gIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBwcm9jZXNzZWRJbmRleCA9IDA7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShkYXRhLCAicGVybWFuZW50UHJvY2Vzc2VkSW5kZXgiKSkKICAgICAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgICAgIHZhciBpdGVtcyA9IHBlcm1hbmVudFJvb21QbGFuIGFzIElFbnVtZXJhYmxlPG9iamVjdD47CiAgICAgICAgICAgIGlmIChpdGVtcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgaXRlbXNMaXN0ID0gaXRlbXMuVG9MaXN0KCk7CiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkSW5kZXggPCBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZHluYW1pYyBjdXJyZW50SXRlbSA9IGl0ZW1zTGlzdFtwcm9jZXNzZWRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXRSb29tS2V5ID0gY3VycmVudEl0ZW0/LmNoYXRSb29tS2V5Py5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpKQogICAgICAgICAgICAgICAgICAgICAgICB1c2VyID0gTG9va3VwVXNlcihkYXRhLCBjaGF0Um9vbUtleSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlLCByZWFzb24gPSAibm8tdXNlciIgfSB9OwoKICAgICAgICB2YXIgbWF0cml4QmFzZVVybCA9IGF3YWl0IEdldFNlY3JldEFzeW5jKCJ2bmV4dC1zZWNyZXQiLCAid29ya2Zsb3ctc2VjcmV0IiwgIk1hdHJpeEJhc2VVcmwiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShtYXRyaXhCYXNlVXJsKSkKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSwgcmVhc29uID0gIm5vLU1hdHJpeEJhc2VVcmwiIH0gfTsKCiAgICAgICAgdmFyIHR4bklkID0gR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoIk4iKTsKICAgICAgICB2YXIgZnVsbFVybCA9IG1hdHJpeEJhc2VVcmwuVHJpbUVuZCgnLycpICsKICAgICAgICAgICAgIi9fbWF0cml4L2NsaWVudC92My9yb29tcy8iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcobmV3Um9vbUlkKSArCiAgICAgICAgICAgICIvc2VuZC9tLnJvb20ubWVzc2FnZS8iICsgdHhuSWQ7CgogICAgICAgIGh0dHBUYXNrLlNldFVybChmdWxsVXJsKTsKICAgICAgICBodHRwVGFzay5TZXRIZWFkZXJzKG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgWyJDb250ZW50LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgWyJBY2NlcHQiXSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgWyJYLU1hdHJpeC1Vc2VyIl0gPSB1c2VyCiAgICAgICAgfSk7CgogICAgICAgIHZhciBtZXNzYWdlQm9keSA9CiAgICAgICAgICAgICJPbmNla2kgZGFuaXNtYW4gaWxlIHlhcGlsYW4gZ29ydXNtZSBvemV0aTpcblxuIiArCiAgICAgICAgICAgIGNoYXRTdW1tYXJ5ICsgIlxuXG4iICsKICAgICAgICAgICAgIi0tLVxuIiArCiAgICAgICAgICAgICJCdSBvemV0IG90b21hdGlrIG9sYXJhayBvbHVzdHVydWxtdXN0dXIuIjsKCiAgICAgICAgaHR0cFRhc2suU2V0Qm9keShuZXcKICAgICAgICB7CiAgICAgICAgICAgIG1zZ3R5cGUgPSAibS50ZXh0IiwKICAgICAgICAgICAgYm9keSA9IG1lc3NhZ2VCb2R5CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBuZXcgU2NyaXB0UmVzcG9uc2UoKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5QWxsRmllbGRzKHJlc3VsdCwgZGF0YSk7CgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwogICAgICAgICAgICB2YXIgYm9keURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICAgICAgc3RyaW5nIGVycmNvZGUgPSBHZXRTdHJpbmcoYm9keURhdGEsICJlcnJjb2RlIik7CgogICAgICAgICAgICByZXN1bHRbInNlbmRTdW1tYXJ5U3VjY2VzcyJdID0gc3RyaW5nLklzTnVsbE9yRW1wdHkoZXJyY29kZSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoCiAgICAgICAgewogICAgICAgICAgICByZXN1bHRbInNlbmRTdW1tYXJ5U3VjY2VzcyJdID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgTG9va3VwVXNlcihkeW5hbWljIGRhdGEsIHN0cmluZyBjaGF0Um9vbUtleSkKICAgIHsKICAgICAgICBpZiAoIUhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRDaGF0Um9vbXMiKSB8fCBkYXRhLnBlcm1hbmVudENoYXRSb29tcyA9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAodmFyIHJvb20gaW4gZGF0YS5wZXJtYW5lbnRDaGF0Um9vbXMpCiAgICAgICAgewogICAgICAgICAgICB2YXIga2V5ID0gR2V0U3RyaW5nKHJvb20sICJjaGF0Um9vbUtleSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLkVxdWFscyhrZXksIGNoYXRSb29tS2V5LCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgICAgIHJldHVybiBHZXRTdHJpbmcocm9vbSwgInVzZXIiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29weUFsbEZpZWxkcyhEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiByZXN1bHQsIGR5bmFtaWMgZGF0YSkKICAgIHsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJyZXpDaGF0Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFJvb21QbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwZXJtYW5lbnRDaGF0Um9vbXMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJsYXN0UGVybWFuZW50RGVhY3RpdmF0ZVN1Y2Nlc3MiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImxhc3REZWFjdGl2YXRlZFJvb21JZCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFJvb21NZXNzYWdlcyIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFJvb21NZXNzYWdlc1N1Y2Nlc3MiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImNoYXRTdW1tYXJ5Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJjaGF0U3VtbWFyeVN1Y2Nlc3MiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgIm5ld1Jvb21JZCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAibGFzdFBlcm1hbmVudENoYXRSb29tU3VjY2VzcyIpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDb3B5SWZQcmVzZW50KERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHRhcmdldCwgZHluYW1pYyBzb3VyY2UsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHNvdXJjZSwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShzb3VyY2UsIG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdGFyZ2V0W25hbWVdID0gdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgIH0KfQo="
520
+ }
521
+ }
522
+ ]
523
+ },
421
524
  {
422
525
  "key": "process-next-permanent",
423
526
  "target": "updating-permanent-chatrooms",
@@ -441,14 +544,14 @@
441
544
  {
442
545
  "order": 1,
443
546
  "task": {
444
- "domain": "touch",
547
+ "domain": "morph-touch",
445
548
  "flow": "sys-tasks",
446
549
  "key": "execute-permanent-chatroom-update",
447
550
  "version": "1.0.0"
448
551
  },
449
552
  "mapping": {
450
553
  "location": "./src/ExecutePermanentChatRoomUpdateMapping.csx",
451
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcGVybWFuZW50LWNoYXRyb29tLXVwZGF0ZSBEaXJlY3RUcmlnZ2VyVGFzayAoVHlwZSAxMikuCi8vLyBQcm9jZXNzZXMgb25lIHBlcm1hbmVudCBjaGF0IHJvb20gYXQgYSB0aW1lIGZyb20gcGVybWFuZW50Um9vbVBsYW4uCi8vLyBUZXJtaW5hdGlvbiAodHJhbnNmZXJUeXBlID09ICJ0ZXJtaW5hdGlvbiIpIOKGkiB0cmlnZ2VycyAndHJhbnNmZXInIHRyYW5zaXRpb24gKG9sZCBhZHZpc29yIG91dCwgbmV3IGluKS4KLy8vIEFubnVhbCBMZWF2ZSAodHJhbnNmZXJUeXBlID09ICJhbm51YWwtbGVhdmUiKSDihpIgdHJpZ2dlcnMgJ3VwZGF0ZScgdHJhbnNpdGlvbiAoYWRkIG5ldyBhZHZpc29yLCBrZWVwIG9sZCkuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBFeGVjdXRlUGVybWFuZW50Q2hhdFJvb21VcGRhdGVNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHBlcm1hbmVudFJvb21QbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbjsKICAgICAgICBpZiAocGVybWFuZW50Um9vbVBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1wZXJtYW5lbnRSb29tUGxhbiIgfSB9KTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgdmFyIGl0ZW1zID0gcGVybWFuZW50Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA+PSBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IGN1cnJlbnRJdGVtPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICB2YXIgdGFyZ2V0QWR2aXNvciA9IGN1cnJlbnRJdGVtPy50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KHRhcmdldEFkdmlzb3IpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICB2YXIgdHJhbnNmZXJUeXBlID0gR2V0U3RyaW5nKGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJ0b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEtleShjaGF0Um9vbUtleSk7CgogICAgICAgIGlmICh0cmFuc2ZlclR5cGUgPT0gInRlcm1pbmF0aW9uIikKICAgICAgICB7CiAgICAgICAgICAgIHRyaWdnZXJUYXNrLlNldFRyYW5zaXRpb25OYW1lKCJ0cmFuc2ZlciIpOwogICAgICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyB7IG5ld0Fkdmlzb3JJZCA9IHRhcmdldEFkdmlzb3IgfSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRyaWdnZXJUYXNrLlNldFRyYW5zaXRpb25OYW1lKCJ1cGRhdGUiKTsKICAgICAgICAgICAgdHJpZ2dlclRhc2suU2V0Qm9keShuZXcgeyBuZXdNZW1iZXJJZCA9IHRhcmdldEFkdmlzb3IgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBzdWNjZXNzID0gY29udGV4dC5Cb2R5Py5pc1N1Y2Nlc3MgPT0gdHJ1ZTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpKQogICAgICAgICAgICBpbnQuVHJ5UGFyc2UoZGF0YS5wZXJtYW5lbnRQcm9jZXNzZWRJbmRleD8uVG9TdHJpbmcoKSA/PyAiMCIsIG91dCBwcm9jZXNzZWRJbmRleCk7CgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidmFsaWRhdGlvblJlc3VsdCIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic291cmNlQWR2aXNvcklkIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJhZHZpc29yVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAic3RhcnREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJlbmREYXRlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ0cmFuc2ZlclR5cGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVucmljaGVkUmV6ZXJ2YXRpb25zIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJyZXpDaGF0Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudFJvb21QbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwZXJtYW5lbnRDaGF0Um9vbXMiKTsKICAgICAgICByZXN1bHRbInBlcm1hbmVudFByb2Nlc3NlZEluZGV4Il0gPSBwcm9jZXNzZWRJbmRleCArIDE7CiAgICAgICAgcmVzdWx0WyJsYXN0UGVybWFuZW50Q2hhdFJvb21TdWNjZXNzIl0gPSBzdWNjZXNzOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSByZXN1bHQgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENvcHlJZlByZXNlbnQoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gdGFyZ2V0LCBkeW5hbWljIHNvdXJjZSwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoc291cmNlLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKHNvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB0YXJnZXRbbmFtZV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgfQp9Cg=="
554
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIGV4ZWN1dGUtcGVybWFuZW50LWNoYXRyb29tLXVwZGF0ZSBEaXJlY3RUcmlnZ2VyVGFzayAoVHlwZSAxMikuCi8vLyBQcm9jZXNzZXMgb25lIHBlcm1hbmVudCBjaGF0IHJvb20gYXQgYSB0aW1lIGZyb20gcGVybWFuZW50Um9vbVBsYW4uCi8vLyBUcmlnZ2VycyBjaGF0LXJvb20gJ3VwZGF0ZScgKG5ldyBhZHZpc29yICsgaGlzdG9yeVZpc2liaWxpdHkpIGZvciBib3RoIGFubnVhbC1sZWF2ZSBhbmQgdGVybWluYXRpb24uCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBFeGVjdXRlUGVybWFuZW50Q2hhdFJvb21VcGRhdGVNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHBlcm1hbmVudFJvb21QbGFuID0gZGF0YS5wZXJtYW5lbnRSb29tUGxhbjsKICAgICAgICBpZiAocGVybWFuZW50Um9vbVBsYW4gPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUsIHJlYXNvbiA9ICJuby1wZXJtYW5lbnRSb29tUGxhbiIgfSB9KTsKCiAgICAgICAgaW50IHByb2Nlc3NlZEluZGV4ID0gMDsKICAgICAgICBpZiAoSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgdmFyIGl0ZW1zID0gcGVybWFuZW50Um9vbVBsYW4gYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UgeyBEYXRhID0gbmV3IHsgc2tpcHBlZCA9IHRydWUgfSB9KTsKCiAgICAgICAgdmFyIGl0ZW1zTGlzdCA9IGl0ZW1zLlRvTGlzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRJbmRleCA+PSBpdGVtc0xpc3QuQ291bnQpCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IG5ldyB7IHNraXBwZWQgPSB0cnVlIH0gfSk7CgogICAgICAgIGR5bmFtaWMgY3VycmVudEl0ZW0gPSBpdGVtc0xpc3RbcHJvY2Vzc2VkSW5kZXhdOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IGN1cnJlbnRJdGVtPy5jaGF0Um9vbUtleT8uVG9TdHJpbmcoKTsKICAgICAgICB2YXIgdGFyZ2V0QWR2aXNvciA9IGN1cnJlbnRJdGVtPy50YXJnZXRBZHZpc29yPy5Ub1N0cmluZygpOwogICAgICAgIHZhciBoaXN0b3J5VmlzaWJpbGl0eSA9IE5vcm1hbGl6ZUhpc3RvcnlWaXNpYmlsaXR5KEdldFN0cmluZyhjdXJyZW50SXRlbSwgImhpc3RvcnlWaXNpYmlsaXR5IikpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY2hhdFJvb21LZXkpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KHRhcmdldEFkdmlzb3IpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBza2lwcGVkID0gdHJ1ZSB9IH0pOwoKICAgICAgICB0cmlnZ2VyVGFzay5TZXREb21haW4oIm1vcnBoLXRvdWNoIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0RmxvdygiY2hhdC1yb29tIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0S2V5KGNoYXRSb29tS2V5KTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidXBkYXRlIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0Qm9keShuZXcgeyBuZXdNZW1iZXJJZCA9IHRhcmdldEFkdmlzb3IsIGhpc3RvcnlWaXNpYmlsaXR5IH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwoKICAgICAgICBib29sIHN1Y2Nlc3MgPSBjb250ZXh0LkJvZHk/LmlzU3VjY2VzcyA9PSB0cnVlOwoKICAgICAgICBpbnQgcHJvY2Vzc2VkSW5kZXggPSAwOwogICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YSwgInBlcm1hbmVudFByb2Nlc3NlZEluZGV4IikpCiAgICAgICAgICAgIGludC5UcnlQYXJzZShkYXRhLnBlcm1hbmVudFByb2Nlc3NlZEluZGV4Py5Ub1N0cmluZygpID8/ICIwIiwgb3V0IHByb2Nlc3NlZEluZGV4KTsKCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAidHJhbnNmZXJQbGFuIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJ2YWxpZGF0aW9uUmVzdWx0Iik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzb3VyY2VBZHZpc29ySWQiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJzdGFydERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgImVuZERhdGUiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInRyYW5zZmVyVHlwZSIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAiZW5yaWNoZWRSZXplcnZhdGlvbnMiKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInJlekNoYXRSb29tUGxhbiIpOwogICAgICAgIENvcHlJZlByZXNlbnQocmVzdWx0LCBkYXRhLCAicGVybWFuZW50Um9vbVBsYW4iKTsKICAgICAgICBDb3B5SWZQcmVzZW50KHJlc3VsdCwgZGF0YSwgInBlcm1hbmVudENoYXRSb29tcyIpOwoKICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgcmVzdWx0WyJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCJdID0gcHJvY2Vzc2VkSW5kZXggKyAxOwogICAgICAgIGVsc2UKICAgICAgICAgICAgQ29weUlmUHJlc2VudChyZXN1bHQsIGRhdGEsICJwZXJtYW5lbnRQcm9jZXNzZWRJbmRleCIpOwoKICAgICAgICByZXN1bHRbImxhc3RQZXJtYW5lbnRDaGF0Um9vbVN1Y2Nlc3MiXSA9IHN1Y2Nlc3M7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlIHsgRGF0YSA9IHJlc3VsdCB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgTm9ybWFsaXplSGlzdG9yeVZpc2liaWxpdHkoc3RyaW5nIHJhdykKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShyYXcpKQogICAgICAgICAgICByZXR1cm4gInNoYXJlZCI7CiAgICAgICAgdmFyIGxvd2VyID0gcmF3LlRyaW0oKS5Ub0xvd2VySW52YXJpYW50KCk7CiAgICAgICAgaWYgKGxvd2VyID09ICJzaGFyZWQiIHx8IGxvd2VyID09ICJpbnZpdGVkIiB8fCBsb3dlciA9PSAiam9pbmVkIiB8fCBsb3dlciA9PSAid29ybGRfcmVhZGFibGUiKQogICAgICAgICAgICByZXR1cm4gbG93ZXI7CiAgICAgICAgcmV0dXJuICJzaGFyZWQiOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDb3B5SWZQcmVzZW50KERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHRhcmdldCwgZHluYW1pYyBzb3VyY2UsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHNvdXJjZSwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShzb3VyY2UsIG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdGFyZ2V0W25hbWVdID0gdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgIH0KfQo="
452
555
  }
453
556
  }
454
557
  ]