@myclub_se/data-access 2.15.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/{esm2020 → esm2022}/index.mjs +2 -1
  2. package/{esm2020 → esm2022}/lib/api-models/api-bookable-item.mjs +1 -1
  3. package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-application-time.mjs +1 -1
  4. package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot-session.mjs +1 -1
  5. package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar.mjs +1 -1
  6. package/esm2022/lib/api-models/api-feature-flags.mjs +2 -0
  7. package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +11 -0
  8. package/esm2022/lib/api-models/index.mjs +57 -0
  9. package/esm2022/lib/authentication/authentication.interceptor.mjs +101 -0
  10. package/esm2022/lib/authentication/authentication.service.mjs +109 -0
  11. package/esm2022/lib/authentication/guards/authenticated.guard.mjs +38 -0
  12. package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +31 -0
  13. package/esm2022/lib/data-access.module.mjs +39 -0
  14. package/esm2022/lib/maintenance/maintenance.interceptor.mjs +30 -0
  15. package/esm2022/lib/models/activity-extra-member.mjs +19 -0
  16. package/esm2022/lib/models/activity-invite.mjs +35 -0
  17. package/esm2022/lib/models/activity-location-group.mjs +27 -0
  18. package/esm2022/lib/models/activity-location-part.mjs +16 -0
  19. package/esm2022/lib/models/activity-location-tag.mjs +22 -0
  20. package/esm2022/lib/models/activity-location.mjs +46 -0
  21. package/esm2022/lib/models/activity-participant.mjs +19 -0
  22. package/esm2022/lib/models/activity-settings.mjs +27 -0
  23. package/esm2022/lib/models/activity-type.mjs +34 -0
  24. package/esm2022/lib/models/activity.mjs +137 -0
  25. package/esm2022/lib/models/auth/auth-member.mjs +13 -0
  26. package/{esm2020 → esm2022}/lib/models/auth/auth-section.mjs +3 -1
  27. package/{esm2020 → esm2022}/lib/models/auth/auth-team-section.mjs +3 -1
  28. package/esm2022/lib/models/auth/auth-team.mjs +13 -0
  29. package/esm2022/lib/models/auth/auth.mjs +25 -0
  30. package/{esm2020 → esm2022}/lib/models/authentication.mjs +3 -1
  31. package/esm2022/lib/models/bookable-group.mjs +27 -0
  32. package/esm2022/lib/models/bookable-item.mjs +49 -0
  33. package/esm2022/lib/models/bookable-part.mjs +16 -0
  34. package/esm2022/lib/models/bookable-tag.mjs +22 -0
  35. package/esm2022/lib/models/booking-calendar-application-time.mjs +86 -0
  36. package/esm2022/lib/models/booking-calendar-slot-session.mjs +87 -0
  37. package/esm2022/lib/models/booking-calendar-slot.mjs +79 -0
  38. package/esm2022/lib/models/booking-calendar.mjs +74 -0
  39. package/esm2022/lib/models/booking-settings.mjs +29 -0
  40. package/esm2022/lib/models/booking-slot-filter.mjs +72 -0
  41. package/esm2022/lib/models/calendar-event.mjs +35 -0
  42. package/esm2022/lib/models/calendar.mjs +15 -0
  43. package/esm2022/lib/models/card/card-deal.mjs +15 -0
  44. package/esm2022/lib/models/card/card-logo-urls.mjs +21 -0
  45. package/esm2022/lib/models/card/card-logo.mjs +11 -0
  46. package/esm2022/lib/models/card/card-member-ticket.mjs +17 -0
  47. package/esm2022/lib/models/card/card-theme.mjs +15 -0
  48. package/esm2022/lib/models/card/card-ticket-location.mjs +13 -0
  49. package/esm2022/lib/models/card/card-ticket.mjs +37 -0
  50. package/{esm2020 → esm2022}/lib/models/card/card.mjs +9 -1
  51. package/esm2022/lib/models/card/home-team.mjs +11 -0
  52. package/esm2022/lib/models/card/member-card.mjs +23 -0
  53. package/esm2022/lib/models/card/search-member-card.mjs +13 -0
  54. package/esm2022/lib/models/club-image.mjs +31 -0
  55. package/{esm2020 → esm2022}/lib/models/club-section.mjs +3 -1
  56. package/{esm2020 → esm2022}/lib/models/club.mjs +3 -1
  57. package/esm2022/lib/models/collection.mjs +19 -0
  58. package/esm2022/lib/models/contact.mjs +61 -0
  59. package/esm2022/lib/models/directory.mjs +38 -0
  60. package/esm2022/lib/models/email.mjs +11 -0
  61. package/esm2022/lib/models/event.mjs +47 -0
  62. package/{esm2020 → esm2022}/lib/models/external-link.mjs +3 -1
  63. package/esm2022/lib/models/feature-flags.mjs +14 -0
  64. package/esm2022/lib/models/file-object.mjs +23 -0
  65. package/esm2022/lib/models/general-image.mjs +11 -0
  66. package/esm2022/lib/models/group-role.mjs +17 -0
  67. package/esm2022/lib/models/image-urls.mjs +15 -0
  68. package/esm2022/lib/models/index.mjs +64 -0
  69. package/esm2022/lib/models/invoice/member-fee.mjs +13 -0
  70. package/esm2022/lib/models/invoice/member-invoice-row.mjs +31 -0
  71. package/esm2022/lib/models/invoice/member-invoice.mjs +45 -0
  72. package/esm2022/lib/models/invoice/payment-attempt.mjs +21 -0
  73. package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +27 -0
  74. package/esm2022/lib/models/invoice/payment-types/giro.mjs +17 -0
  75. package/esm2022/lib/models/invoice/payment-types/swish.mjs +31 -0
  76. package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +19 -0
  77. package/esm2022/lib/models/invoice/search-member-invoice.mjs +26 -0
  78. package/{esm2020 → esm2022}/lib/models/invoice/swish-qr-code.mjs +2 -1
  79. package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +13 -0
  80. package/esm2022/lib/models/member/member-attribute.mjs +44 -0
  81. package/esm2022/lib/models/member/member-contact.mjs +26 -0
  82. package/esm2022/lib/models/member/member-function.mjs +24 -0
  83. package/esm2022/lib/models/member/member-validation-settings.mjs +21 -0
  84. package/esm2022/lib/models/member/member.mjs +101 -0
  85. package/{esm2020 → esm2022}/lib/models/member/other-member-field.mjs +4 -1
  86. package/esm2022/lib/models/member/other-member.mjs +21 -0
  87. package/esm2022/lib/models/member/search-member.mjs +35 -0
  88. package/esm2022/lib/models/member-activity-invite.mjs +42 -0
  89. package/esm2022/lib/models/member-public-form-field-option.mjs +13 -0
  90. package/esm2022/lib/models/member-public-form-field.mjs +27 -0
  91. package/esm2022/lib/models/member-public-form.mjs +55 -0
  92. package/esm2022/lib/models/member-team-through.mjs +23 -0
  93. package/esm2022/lib/models/member-team.mjs +21 -0
  94. package/esm2022/lib/models/member-type.mjs +11 -0
  95. package/esm2022/lib/models/news.mjs +66 -0
  96. package/esm2022/lib/models/open-activity.mjs +117 -0
  97. package/esm2022/lib/models/optional-fee.mjs +16 -0
  98. package/esm2022/lib/models/overbooked-bookable-item.mjs +15 -0
  99. package/esm2022/lib/models/overbooked-location.mjs +15 -0
  100. package/esm2022/lib/models/partner.mjs +13 -0
  101. package/esm2022/lib/models/public-authentication.mjs +9 -0
  102. package/esm2022/lib/models/registration-qr-code.mjs +19 -0
  103. package/esm2022/lib/models/search-club.mjs +23 -0
  104. package/esm2022/lib/models/search-team.mjs +24 -0
  105. package/{esm2020 → esm2022}/lib/models/section.mjs +3 -1
  106. package/esm2022/lib/models/token.mjs +11 -0
  107. package/esm2022/lib/models/user-notification.mjs +21 -0
  108. package/esm2022/lib/models/user.mjs +41 -0
  109. package/esm2022/lib/services/activity.service.mjs +508 -0
  110. package/esm2022/lib/services/api.service.mjs +108 -0
  111. package/esm2022/lib/services/auth.service.mjs +62 -0
  112. package/esm2022/lib/services/bookable.service.mjs +279 -0
  113. package/esm2022/lib/services/booking-calendar.service.mjs +736 -0
  114. package/esm2022/lib/services/club.service.mjs +35 -0
  115. package/esm2022/lib/services/constant.service.mjs +97 -0
  116. package/esm2022/lib/services/email.service.mjs +28 -0
  117. package/esm2022/lib/services/external-link.service.mjs +25 -0
  118. package/esm2022/lib/services/factories/activity-settings-factory.mjs +3 -0
  119. package/esm2022/lib/services/factories/bookable-item-factory.mjs +5 -0
  120. package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-application-time-factory.mjs +2 -2
  121. package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-factory.mjs +2 -2
  122. package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-session-factory.mjs +2 -2
  123. package/esm2022/lib/services/factories/feature-flags-factory.mjs +5 -0
  124. package/esm2022/lib/services/factories/index.mjs +87 -0
  125. package/esm2022/lib/services/factories/member-public-form-factory.mjs +26 -0
  126. package/esm2022/lib/services/factories/payment-attempt-factory.mjs +23 -0
  127. package/esm2022/lib/services/feature-flags.service.mjs +44 -0
  128. package/esm2022/lib/services/file.service.mjs +65 -0
  129. package/esm2022/lib/services/index.mjs +24 -0
  130. package/esm2022/lib/services/invoice/invoice.service.mjs +42 -0
  131. package/esm2022/lib/services/invoice/payment-attempt.service.mjs +52 -0
  132. package/esm2022/lib/services/maintenance-mode.service.mjs +20 -0
  133. package/esm2022/lib/services/member-card.service.mjs +104 -0
  134. package/esm2022/lib/services/member-public-form.service.mjs +33 -0
  135. package/esm2022/lib/services/member.service.mjs +85 -0
  136. package/esm2022/lib/services/news.service.mjs +94 -0
  137. package/esm2022/lib/services/registration-qr-code.service.mjs +37 -0
  138. package/esm2022/lib/services/section.service.mjs +24 -0
  139. package/esm2022/lib/services/storage.service.mjs +44 -0
  140. package/esm2022/lib/services/team.service.mjs +89 -0
  141. package/esm2022/lib/services/token.service.mjs +58 -0
  142. package/esm2022/lib/services/user-notification.service.mjs +24 -0
  143. package/esm2022/lib/services/user.service.mjs +69 -0
  144. package/esm2022/lib/store/actions/activity.actions.mjs +177 -0
  145. package/esm2022/lib/store/actions/auth.actions.mjs +45 -0
  146. package/esm2022/lib/store/actions/booking.actions.mjs +187 -0
  147. package/esm2022/lib/store/actions/calendar.actions.mjs +77 -0
  148. package/esm2022/lib/store/actions/club-info.actions.mjs +23 -0
  149. package/esm2022/lib/store/actions/constant.actions.mjs +124 -0
  150. package/esm2022/lib/store/actions/email.actions.mjs +19 -0
  151. package/esm2022/lib/store/actions/external-link.actions.mjs +11 -0
  152. package/esm2022/lib/store/actions/file.actions.mjs +41 -0
  153. package/esm2022/lib/store/actions/index.mjs +19 -0
  154. package/esm2022/lib/store/actions/invoice.actions.mjs +73 -0
  155. package/esm2022/lib/store/actions/member-card.actions.mjs +71 -0
  156. package/esm2022/lib/store/actions/member.actions.mjs +65 -0
  157. package/esm2022/lib/store/actions/news.actions.mjs +47 -0
  158. package/esm2022/lib/store/actions/public-form.actions.mjs +17 -0
  159. package/esm2022/lib/store/actions/store.actions.mjs +7 -0
  160. package/esm2022/lib/store/actions/team.actions.mjs +83 -0
  161. package/esm2022/lib/store/actions/token.actions.mjs +53 -0
  162. package/esm2022/lib/store/actions/user.actions.mjs +49 -0
  163. package/esm2022/lib/store/effects/activity.effects.mjs +211 -0
  164. package/esm2022/lib/store/effects/auth.effects.mjs +96 -0
  165. package/esm2022/lib/store/effects/booking.effects.mjs +102 -0
  166. package/esm2022/lib/store/effects/calendar.effects.mjs +84 -0
  167. package/esm2022/lib/store/effects/club-info.effects.mjs +26 -0
  168. package/esm2022/lib/store/effects/constant.effects.mjs +69 -0
  169. package/esm2022/lib/store/effects/data-access.effects.mjs +37 -0
  170. package/esm2022/lib/store/effects/email.effects.mjs +27 -0
  171. package/esm2022/lib/store/effects/external-link.effects.mjs +20 -0
  172. package/esm2022/lib/store/effects/file.effects.mjs +149 -0
  173. package/esm2022/lib/store/effects/index.mjs +2 -0
  174. package/esm2022/lib/store/effects/invoice.effects.mjs +72 -0
  175. package/esm2022/lib/store/effects/member-card.effects.mjs +80 -0
  176. package/esm2022/lib/store/effects/member.effects.mjs +75 -0
  177. package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +60 -0
  178. package/esm2022/lib/store/effects/news.effects.mjs +82 -0
  179. package/esm2022/lib/store/effects/public-form.effects.mjs +33 -0
  180. package/esm2022/lib/store/effects/team.effects.mjs +82 -0
  181. package/esm2022/lib/store/effects/token.effects.mjs +81 -0
  182. package/esm2022/lib/store/effects/user.effects.mjs +59 -0
  183. package/esm2022/lib/store/index.mjs +8 -0
  184. package/esm2022/lib/store/interfaces/activate-card-ticket.interface.mjs +2 -0
  185. package/esm2022/lib/store/interfaces/activate-user.interface.mjs +2 -0
  186. package/esm2022/lib/store/interfaces/calendar-activity-locations.interface.mjs +2 -0
  187. package/esm2022/lib/store/interfaces/calendar-activity-types.interface.mjs +2 -0
  188. package/esm2022/lib/store/interfaces/calendar-open-activity-result.interface.mjs +2 -0
  189. package/esm2022/lib/store/interfaces/calendar-public-open-activity-results.interface.mjs +2 -0
  190. package/esm2022/lib/store/interfaces/directory-result.interface.mjs +2 -0
  191. package/esm2022/lib/store/interfaces/email-settings.interface.mjs +2 -0
  192. package/esm2022/lib/store/interfaces/index.mjs +20 -0
  193. package/esm2022/lib/store/interfaces/list-result-interface.mjs +4 -0
  194. package/esm2022/lib/store/interfaces/location.interface.mjs +2 -0
  195. package/esm2022/lib/store/interfaces/member-calendar-event-result.interface.mjs +2 -0
  196. package/esm2022/lib/store/interfaces/member-card-deals.interface.mjs +2 -0
  197. package/esm2022/lib/store/interfaces/member-card-tickets.interface.mjs +2 -0
  198. package/esm2022/lib/store/interfaces/public-activate-card-ticket.interface.mjs +2 -0
  199. package/esm2022/lib/store/interfaces/remove-member-auth.interface.mjs +2 -0
  200. package/esm2022/lib/store/interfaces/remove-team-auth.interface.mjs +2 -0
  201. package/esm2022/lib/store/interfaces/retrieve-result.interface.mjs +4 -0
  202. package/esm2022/lib/store/interfaces/team-activity.interface.mjs +2 -0
  203. package/esm2022/lib/store/interfaces/team-calendar-event-result.interface.mjs +2 -0
  204. package/esm2022/lib/store/operators/ensure-activity.mjs +8 -0
  205. package/esm2022/lib/store/operators/ensure-auths.mjs +18 -0
  206. package/esm2022/lib/store/operators/ensure-calendar-events-loading-done.mjs +23 -0
  207. package/esm2022/lib/store/operators/ensure-constants.mjs +21 -0
  208. package/esm2022/lib/store/operators/ensure-current-auth.mjs +17 -0
  209. package/esm2022/lib/store/operators/ensure-current-user.mjs +16 -0
  210. package/esm2022/lib/store/operators/ensure-loading-done.mjs +24 -0
  211. package/esm2022/lib/store/operators/ensure-open-activities-loading-done.mjs +5 -0
  212. package/esm2022/lib/store/operators/ensure-public-open-activities-loading-done.mjs +5 -0
  213. package/esm2022/lib/store/operators/ensure-updated-data.mjs +10 -0
  214. package/esm2022/lib/store/operators/index.mjs +11 -0
  215. package/esm2022/lib/store/reducers/auth.reducer.mjs +52 -0
  216. package/esm2022/lib/store/reducers/booking.reducers.mjs +79 -0
  217. package/esm2022/lib/store/reducers/calendar.reducer.mjs +449 -0
  218. package/esm2022/lib/store/reducers/club-info.reducer.mjs +9 -0
  219. package/esm2022/lib/store/reducers/constant.reducer.mjs +181 -0
  220. package/esm2022/lib/store/reducers/data-access.reducer.mjs +37 -0
  221. package/esm2022/lib/store/reducers/email.reducer.mjs +21 -0
  222. package/esm2022/lib/store/reducers/external-link.reducer.mjs +6 -0
  223. package/esm2022/lib/store/reducers/file.reducer.mjs +118 -0
  224. package/esm2022/lib/store/reducers/index.mjs +2 -0
  225. package/esm2022/lib/store/reducers/invoice.reducer.mjs +6 -0
  226. package/esm2022/lib/store/reducers/member-card.reducer.mjs +33 -0
  227. package/esm2022/lib/store/reducers/member.reducer.mjs +21 -0
  228. package/esm2022/lib/store/reducers/news.reducer.mjs +96 -0
  229. package/esm2022/lib/store/reducers/public-form.reducer.mjs +21 -0
  230. package/esm2022/lib/store/reducers/public.reducer.mjs +109 -0
  231. package/esm2022/lib/store/reducers/reducer-helpers.mjs +61 -0
  232. package/esm2022/lib/store/reducers/team.reducer.mjs +77 -0
  233. package/esm2022/lib/store/reducers/token.reducer.mjs +21 -0
  234. package/esm2022/lib/store/reducers/user.reducer.mjs +18 -0
  235. package/esm2022/lib/store/selectors/auth.selectors.mjs +6 -0
  236. package/esm2022/lib/store/selectors/booking.selectors.mjs +15 -0
  237. package/esm2022/lib/store/selectors/calendar.selectors.mjs +18 -0
  238. package/esm2022/lib/store/selectors/club-info.selectors.mjs +5 -0
  239. package/esm2022/lib/store/selectors/constant.selectors.mjs +38 -0
  240. package/esm2022/lib/store/selectors/email.selectors.mjs +5 -0
  241. package/esm2022/lib/store/selectors/external-links.selectors.mjs +5 -0
  242. package/esm2022/lib/store/selectors/file.selectors.mjs +6 -0
  243. package/esm2022/lib/store/selectors/index.mjs +18 -0
  244. package/esm2022/lib/store/selectors/invoice.selectors.mjs +6 -0
  245. package/esm2022/lib/store/selectors/member-card.selectors.mjs +8 -0
  246. package/esm2022/lib/store/selectors/member.selectors.mjs +10 -0
  247. package/esm2022/lib/store/selectors/news.selectors.mjs +8 -0
  248. package/esm2022/lib/store/selectors/public-form.selectors.mjs +5 -0
  249. package/esm2022/lib/store/selectors/public.selectors.mjs +18 -0
  250. package/esm2022/lib/store/selectors/team.selectors.mjs +12 -0
  251. package/esm2022/lib/store/selectors/token.selectors.mjs +6 -0
  252. package/esm2022/lib/store/selectors/user.selectors.mjs +6 -0
  253. package/esm2022/lib/store/state/auth.state.mjs +5 -0
  254. package/esm2022/lib/store/state/booking.state.mjs +16 -0
  255. package/esm2022/lib/store/state/calendar.state.mjs +17 -0
  256. package/esm2022/lib/store/state/club-info.state.mjs +4 -0
  257. package/esm2022/lib/store/state/constant.state.mjs +21 -0
  258. package/esm2022/lib/store/state/data-access.state.mjs +2 -0
  259. package/esm2022/lib/store/state/email.state.mjs +7 -0
  260. package/esm2022/lib/store/state/external-link.state.mjs +4 -0
  261. package/esm2022/lib/store/state/file.state.mjs +5 -0
  262. package/esm2022/lib/store/state/index.mjs +19 -0
  263. package/esm2022/lib/store/state/invoice.state.mjs +5 -0
  264. package/esm2022/lib/store/state/member-card.state.mjs +7 -0
  265. package/esm2022/lib/store/state/member.state.mjs +10 -0
  266. package/esm2022/lib/store/state/news.state.mjs +7 -0
  267. package/esm2022/lib/store/state/public-form.state.mjs +5 -0
  268. package/esm2022/lib/store/state/public.state.mjs +17 -0
  269. package/esm2022/lib/store/state/team.state.mjs +11 -0
  270. package/esm2022/lib/store/state/token.state.mjs +5 -0
  271. package/esm2022/lib/store/state/user.state.mjs +5 -0
  272. package/fesm2022/myclub_se-data-access.mjs +10080 -0
  273. package/fesm2022/myclub_se-data-access.mjs.map +1 -0
  274. package/index.d.ts +1 -0
  275. package/lib/api-models/api-bookable-item.d.ts +2 -0
  276. package/lib/api-models/api-booking-calendar-application-time.d.ts +3 -0
  277. package/lib/api-models/api-booking-calendar-slot-session.d.ts +3 -0
  278. package/lib/api-models/api-booking-calendar.d.ts +2 -0
  279. package/lib/api-models/api-feature-flags.d.ts +5 -0
  280. package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.d.ts +1 -1
  281. package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.d.ts +1 -1
  282. package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.d.ts +1 -1
  283. package/lib/api-models/index.d.ts +1 -0
  284. package/lib/authentication/authentication.interceptor.d.ts +12 -7
  285. package/lib/data-access.module.d.ts +3 -1
  286. package/lib/models/activity-settings.d.ts +3 -1
  287. package/lib/models/auth/auth.d.ts +3 -2
  288. package/lib/models/bookable-item.d.ts +6 -1
  289. package/lib/models/booking-calendar-application-time.d.ts +8 -3
  290. package/lib/models/booking-calendar-slot-session.d.ts +10 -5
  291. package/lib/models/booking-calendar-slot.d.ts +7 -6
  292. package/lib/models/booking-calendar.d.ts +4 -1
  293. package/lib/models/booking-settings.d.ts +5 -4
  294. package/lib/models/booking-slot-filter.d.ts +17 -0
  295. package/lib/models/directory.d.ts +1 -0
  296. package/lib/models/feature-flags.d.ts +7 -0
  297. package/lib/models/index.d.ts +2 -0
  298. package/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.d.ts +1 -1
  299. package/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.d.ts +1 -1
  300. package/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.d.ts +1 -1
  301. package/lib/services/activity.service.d.ts +55 -52
  302. package/lib/services/bookable.service.d.ts +12 -9
  303. package/lib/services/booking-calendar.service.d.ts +6 -23
  304. package/lib/services/constant.service.d.ts +5 -11
  305. package/lib/services/email.service.d.ts +0 -9
  306. package/lib/services/factories/feature-flags-factory.d.ts +3 -0
  307. package/lib/services/factories/index.d.ts +1 -0
  308. package/lib/services/feature-flags.service.d.ts +13 -0
  309. package/lib/services/index.d.ts +2 -0
  310. package/lib/services/member.service.d.ts +7 -3
  311. package/lib/services/storage.service.d.ts +20 -0
  312. package/lib/store/actions/activity.actions.d.ts +641 -0
  313. package/lib/store/actions/auth.actions.d.ts +83 -0
  314. package/lib/store/actions/booking.actions.d.ts +652 -0
  315. package/lib/store/actions/calendar.actions.d.ts +381 -0
  316. package/lib/store/actions/club-info.actions.d.ts +54 -0
  317. package/lib/store/actions/constant.actions.d.ts +249 -0
  318. package/lib/store/actions/email.actions.d.ts +57 -0
  319. package/lib/store/actions/external-link.actions.d.ts +22 -0
  320. package/lib/store/actions/file.actions.d.ts +169 -0
  321. package/lib/store/actions/index.d.ts +18 -0
  322. package/lib/store/actions/invoice.actions.d.ts +298 -0
  323. package/lib/store/actions/member-card.actions.d.ts +251 -0
  324. package/lib/store/actions/member.actions.d.ts +212 -0
  325. package/lib/store/actions/news.actions.d.ts +164 -0
  326. package/lib/store/actions/public-form.actions.d.ts +46 -0
  327. package/lib/store/actions/store.actions.d.ts +4 -0
  328. package/lib/store/actions/team.actions.d.ts +326 -0
  329. package/lib/store/actions/token.actions.d.ts +151 -0
  330. package/lib/store/actions/user.actions.d.ts +102 -0
  331. package/lib/store/effects/activity.effects.d.ts +152 -0
  332. package/lib/store/effects/auth.effects.d.ts +35 -0
  333. package/lib/store/effects/booking.effects.d.ts +196 -0
  334. package/lib/store/effects/calendar.effects.d.ts +129 -0
  335. package/lib/store/effects/club-info.effects.d.ts +24 -0
  336. package/lib/store/effects/constant.effects.d.ts +96 -0
  337. package/lib/store/effects/data-access.effects.d.ts +18 -0
  338. package/lib/store/effects/email.effects.d.ts +14 -0
  339. package/lib/store/effects/external-link.effects.d.ts +14 -0
  340. package/lib/store/effects/file.effects.d.ts +55 -0
  341. package/lib/store/effects/index.d.ts +1 -0
  342. package/lib/store/effects/invoice.effects.d.ts +80 -0
  343. package/lib/store/effects/member-card.effects.d.ts +69 -0
  344. package/lib/store/effects/member.effects.d.ts +58 -0
  345. package/lib/store/effects/mixins/extra-members-mixin.d.ts +10 -0
  346. package/lib/store/effects/news.effects.d.ts +49 -0
  347. package/lib/store/effects/public-form.effects.d.ts +19 -0
  348. package/lib/store/effects/team.effects.d.ts +80 -0
  349. package/lib/store/effects/token.effects.d.ts +66 -0
  350. package/lib/store/effects/user.effects.d.ts +36 -0
  351. package/lib/store/index.d.ts +7 -0
  352. package/lib/store/interfaces/activate-card-ticket.interface.d.ts +6 -0
  353. package/lib/store/interfaces/activate-user.interface.d.ts +4 -0
  354. package/lib/store/interfaces/calendar-activity-locations.interface.d.ts +7 -0
  355. package/lib/store/interfaces/calendar-activity-types.interface.d.ts +7 -0
  356. package/lib/store/interfaces/calendar-open-activity-result.interface.d.ts +8 -0
  357. package/lib/store/interfaces/calendar-public-open-activity-results.interface.d.ts +7 -0
  358. package/lib/store/interfaces/directory-result.interface.d.ts +5 -0
  359. package/lib/store/interfaces/email-settings.interface.d.ts +5 -0
  360. package/lib/store/interfaces/index.d.ts +19 -0
  361. package/lib/store/interfaces/list-result-interface.d.ts +13 -0
  362. package/lib/store/interfaces/location.interface.d.ts +7 -0
  363. package/lib/store/interfaces/member-calendar-event-result.interface.d.ts +8 -0
  364. package/lib/store/interfaces/member-card-deals.interface.d.ts +5 -0
  365. package/lib/store/interfaces/member-card-tickets.interface.d.ts +5 -0
  366. package/lib/store/interfaces/public-activate-card-ticket.interface.d.ts +6 -0
  367. package/lib/store/interfaces/remove-member-auth.interface.d.ts +4 -0
  368. package/lib/store/interfaces/remove-team-auth.interface.d.ts +4 -0
  369. package/lib/store/interfaces/retrieve-result.interface.d.ts +13 -0
  370. package/lib/store/interfaces/team-activity.interface.d.ts +9 -0
  371. package/lib/store/interfaces/team-calendar-event-result.interface.d.ts +8 -0
  372. package/lib/store/operators/ensure-activity.d.ts +4 -0
  373. package/lib/store/operators/ensure-auths.d.ts +13 -0
  374. package/lib/store/operators/ensure-calendar-events-loading-done.d.ts +19 -0
  375. package/lib/store/operators/ensure-constants.d.ts +12 -0
  376. package/lib/store/operators/ensure-current-auth.d.ts +12 -0
  377. package/lib/store/operators/ensure-current-user.d.ts +11 -0
  378. package/lib/store/operators/ensure-loading-done.d.ts +20 -0
  379. package/lib/store/operators/ensure-open-activities-loading-done.d.ts +3 -0
  380. package/lib/store/operators/ensure-public-open-activities-loading-done.d.ts +3 -0
  381. package/lib/store/operators/ensure-updated-data.d.ts +4 -0
  382. package/lib/store/operators/index.d.ts +10 -0
  383. package/lib/store/reducers/auth.reducer.d.ts +2 -0
  384. package/lib/store/reducers/booking.reducers.d.ts +2 -0
  385. package/lib/store/reducers/calendar.reducer.d.ts +2 -0
  386. package/lib/store/reducers/club-info.reducer.d.ts +2 -0
  387. package/lib/store/reducers/constant.reducer.d.ts +2 -0
  388. package/lib/store/reducers/data-access.reducer.d.ts +3 -0
  389. package/lib/store/reducers/email.reducer.d.ts +2 -0
  390. package/lib/store/reducers/external-link.reducer.d.ts +2 -0
  391. package/lib/store/reducers/file.reducer.d.ts +2 -0
  392. package/lib/store/reducers/index.d.ts +1 -0
  393. package/lib/store/reducers/invoice.reducer.d.ts +2 -0
  394. package/lib/store/reducers/member-card.reducer.d.ts +2 -0
  395. package/lib/store/reducers/member.reducer.d.ts +2 -0
  396. package/lib/store/reducers/news.reducer.d.ts +2 -0
  397. package/lib/store/reducers/public-form.reducer.d.ts +2 -0
  398. package/lib/store/reducers/public.reducer.d.ts +2 -0
  399. package/lib/store/reducers/reducer-helpers.d.ts +8 -0
  400. package/lib/store/reducers/team.reducer.d.ts +2 -0
  401. package/lib/store/reducers/token.reducer.d.ts +2 -0
  402. package/lib/store/reducers/user.reducer.d.ts +2 -0
  403. package/lib/store/selectors/auth.selectors.d.ts +4 -0
  404. package/lib/store/selectors/booking.selectors.d.ts +13 -0
  405. package/lib/store/selectors/calendar.selectors.d.ts +16 -0
  406. package/lib/store/selectors/club-info.selectors.d.ts +3 -0
  407. package/lib/store/selectors/constant.selectors.d.ts +19 -0
  408. package/lib/store/selectors/email.selectors.d.ts +3 -0
  409. package/lib/store/selectors/external-links.selectors.d.ts +3 -0
  410. package/lib/store/selectors/file.selectors.d.ts +4 -0
  411. package/lib/store/selectors/index.d.ts +17 -0
  412. package/lib/store/selectors/invoice.selectors.d.ts +4 -0
  413. package/lib/store/selectors/member-card.selectors.d.ts +6 -0
  414. package/lib/store/selectors/member.selectors.d.ts +8 -0
  415. package/lib/store/selectors/news.selectors.d.ts +6 -0
  416. package/lib/store/selectors/public-form.selectors.d.ts +3 -0
  417. package/lib/store/selectors/public.selectors.d.ts +16 -0
  418. package/lib/store/selectors/team.selectors.d.ts +10 -0
  419. package/lib/store/selectors/token.selectors.d.ts +4 -0
  420. package/lib/store/selectors/user.selectors.d.ts +4 -0
  421. package/lib/store/state/auth.state.d.ts +7 -0
  422. package/lib/store/state/booking.state.d.ts +16 -0
  423. package/lib/store/state/calendar.state.d.ts +19 -0
  424. package/lib/store/state/club-info.state.d.ts +6 -0
  425. package/lib/store/state/constant.state.d.ts +23 -0
  426. package/lib/store/state/data-access.state.d.ts +36 -0
  427. package/lib/store/state/email.state.d.ts +5 -0
  428. package/lib/store/state/external-link.state.d.ts +6 -0
  429. package/lib/store/state/file.state.d.ts +6 -0
  430. package/lib/store/state/index.d.ts +18 -0
  431. package/lib/store/state/invoice.state.d.ts +7 -0
  432. package/lib/store/state/member-card.state.d.ts +9 -0
  433. package/lib/store/state/member.state.d.ts +11 -0
  434. package/lib/store/state/news.state.d.ts +9 -0
  435. package/lib/store/state/public-form.state.d.ts +7 -0
  436. package/lib/store/state/public.state.d.ts +19 -0
  437. package/lib/store/state/team.state.d.ts +13 -0
  438. package/lib/store/state/token.state.d.ts +7 -0
  439. package/lib/store/state/user.state.d.ts +7 -0
  440. package/lib/types/attribute-type.d.ts +1 -1
  441. package/lib/types/booking-calendar-slot-reserved-time-position.d.ts +1 -1
  442. package/lib/types/booking-calendar-slot-type.d.ts +1 -1
  443. package/lib/types/contact-type.d.ts +1 -1
  444. package/lib/types/grant-type.d.ts +1 -1
  445. package/lib/types/payment-attempt-status-type.d.ts +1 -1
  446. package/lib/types/payment-attempt-type.d.ts +1 -1
  447. package/lib/types/sex-type.d.ts +1 -1
  448. package/package.json +13 -18
  449. package/esm2020/lib/api-models/api-invoice/api-payment-attempt-create.mjs +0 -8
  450. package/esm2020/lib/api-models/index.mjs +0 -56
  451. package/esm2020/lib/authentication/authentication.interceptor.mjs +0 -66
  452. package/esm2020/lib/authentication/authentication.service.mjs +0 -106
  453. package/esm2020/lib/authentication/guards/authenticated.guard.mjs +0 -36
  454. package/esm2020/lib/authentication/guards/handle-grant-token.guard.mjs +0 -29
  455. package/esm2020/lib/data-access.module.mjs +0 -30
  456. package/esm2020/lib/maintenance/maintenance.interceptor.mjs +0 -29
  457. package/esm2020/lib/models/activity-extra-member.mjs +0 -12
  458. package/esm2020/lib/models/activity-invite.mjs +0 -20
  459. package/esm2020/lib/models/activity-location-group.mjs +0 -21
  460. package/esm2020/lib/models/activity-location-part.mjs +0 -14
  461. package/esm2020/lib/models/activity-location-tag.mjs +0 -17
  462. package/esm2020/lib/models/activity-location.mjs +0 -36
  463. package/esm2020/lib/models/activity-participant.mjs +0 -12
  464. package/esm2020/lib/models/activity-settings.mjs +0 -14
  465. package/esm2020/lib/models/activity-type.mjs +0 -26
  466. package/esm2020/lib/models/activity.mjs +0 -92
  467. package/esm2020/lib/models/auth/auth-member.mjs +0 -10
  468. package/esm2020/lib/models/auth/auth-team.mjs +0 -9
  469. package/esm2020/lib/models/auth/auth.mjs +0 -15
  470. package/esm2020/lib/models/bookable-group.mjs +0 -21
  471. package/esm2020/lib/models/bookable-item.mjs +0 -34
  472. package/esm2020/lib/models/bookable-part.mjs +0 -14
  473. package/esm2020/lib/models/bookable-tag.mjs +0 -17
  474. package/esm2020/lib/models/booking-calendar-application-time.mjs +0 -52
  475. package/esm2020/lib/models/booking-calendar-slot-session.mjs +0 -54
  476. package/esm2020/lib/models/booking-calendar-slot.mjs +0 -53
  477. package/esm2020/lib/models/booking-calendar.mjs +0 -54
  478. package/esm2020/lib/models/booking-settings.mjs +0 -22
  479. package/esm2020/lib/models/calendar-event.mjs +0 -20
  480. package/esm2020/lib/models/calendar.mjs +0 -10
  481. package/esm2020/lib/models/card/card-deal.mjs +0 -10
  482. package/esm2020/lib/models/card/card-logo-urls.mjs +0 -13
  483. package/esm2020/lib/models/card/card-logo.mjs +0 -8
  484. package/esm2020/lib/models/card/card-member-ticket.mjs +0 -11
  485. package/esm2020/lib/models/card/card-theme.mjs +0 -10
  486. package/esm2020/lib/models/card/card-ticket-location.mjs +0 -9
  487. package/esm2020/lib/models/card/card-ticket.mjs +0 -21
  488. package/esm2020/lib/models/card/home-team.mjs +0 -8
  489. package/esm2020/lib/models/card/member-card.mjs +0 -14
  490. package/esm2020/lib/models/card/search-member-card.mjs +0 -9
  491. package/esm2020/lib/models/club-image.mjs +0 -18
  492. package/esm2020/lib/models/collection.mjs +0 -15
  493. package/esm2020/lib/models/contact.mjs +0 -46
  494. package/esm2020/lib/models/directory.mjs +0 -26
  495. package/esm2020/lib/models/email.mjs +0 -8
  496. package/esm2020/lib/models/event.mjs +0 -26
  497. package/esm2020/lib/models/file-object.mjs +0 -14
  498. package/esm2020/lib/models/general-image.mjs +0 -8
  499. package/esm2020/lib/models/group-role.mjs +0 -11
  500. package/esm2020/lib/models/image-urls.mjs +0 -10
  501. package/esm2020/lib/models/index.mjs +0 -62
  502. package/esm2020/lib/models/invoice/member-fee.mjs +0 -9
  503. package/esm2020/lib/models/invoice/member-invoice-row.mjs +0 -18
  504. package/esm2020/lib/models/invoice/member-invoice.mjs +0 -25
  505. package/esm2020/lib/models/invoice/payment-attempt.mjs +0 -13
  506. package/esm2020/lib/models/invoice/payment-types/credit-card.mjs +0 -16
  507. package/esm2020/lib/models/invoice/payment-types/giro.mjs +0 -11
  508. package/esm2020/lib/models/invoice/payment-types/swish.mjs +0 -18
  509. package/esm2020/lib/models/invoice/payment-types/zimpler.mjs +0 -12
  510. package/esm2020/lib/models/invoice/search-member-invoice.mjs +0 -17
  511. package/esm2020/lib/models/invoice/unpaid-member-invoice.mjs +0 -9
  512. package/esm2020/lib/models/member/member-attribute.mjs +0 -33
  513. package/esm2020/lib/models/member/member-contact.mjs +0 -21
  514. package/esm2020/lib/models/member/member-function.mjs +0 -19
  515. package/esm2020/lib/models/member/member-validation-settings.mjs +0 -13
  516. package/esm2020/lib/models/member/member.mjs +0 -75
  517. package/esm2020/lib/models/member/other-member.mjs +0 -13
  518. package/esm2020/lib/models/member/search-member.mjs +0 -20
  519. package/esm2020/lib/models/member-activity-invite.mjs +0 -31
  520. package/esm2020/lib/models/member-public-form-field-option.mjs +0 -9
  521. package/esm2020/lib/models/member-public-form-field.mjs +0 -16
  522. package/esm2020/lib/models/member-public-form.mjs +0 -30
  523. package/esm2020/lib/models/member-team-through.mjs +0 -14
  524. package/esm2020/lib/models/member-team.mjs +0 -13
  525. package/esm2020/lib/models/member-type.mjs +0 -8
  526. package/esm2020/lib/models/news.mjs +0 -47
  527. package/esm2020/lib/models/open-activity.mjs +0 -62
  528. package/esm2020/lib/models/optional-fee.mjs +0 -11
  529. package/esm2020/lib/models/overbooked-bookable-item.mjs +0 -10
  530. package/esm2020/lib/models/overbooked-location.mjs +0 -10
  531. package/esm2020/lib/models/partner.mjs +0 -9
  532. package/esm2020/lib/models/public-authentication.mjs +0 -7
  533. package/esm2020/lib/models/registration-qr-code.mjs +0 -12
  534. package/esm2020/lib/models/search-club.mjs +0 -14
  535. package/esm2020/lib/models/search-team.mjs +0 -18
  536. package/esm2020/lib/models/token.mjs +0 -8
  537. package/esm2020/lib/models/user-notification.mjs +0 -13
  538. package/esm2020/lib/models/user.mjs +0 -31
  539. package/esm2020/lib/services/activity.service.mjs +0 -470
  540. package/esm2020/lib/services/api.service.mjs +0 -106
  541. package/esm2020/lib/services/auth.service.mjs +0 -61
  542. package/esm2020/lib/services/bookable.service.mjs +0 -258
  543. package/esm2020/lib/services/booking-calendar.service.mjs +0 -794
  544. package/esm2020/lib/services/club.service.mjs +0 -34
  545. package/esm2020/lib/services/constant.service.mjs +0 -131
  546. package/esm2020/lib/services/email.service.mjs +0 -53
  547. package/esm2020/lib/services/external-link.service.mjs +0 -24
  548. package/esm2020/lib/services/factories/activity-settings-factory.mjs +0 -3
  549. package/esm2020/lib/services/factories/bookable-item-factory.mjs +0 -5
  550. package/esm2020/lib/services/factories/index.mjs +0 -86
  551. package/esm2020/lib/services/factories/member-public-form-factory.mjs +0 -26
  552. package/esm2020/lib/services/factories/payment-attempt-factory.mjs +0 -23
  553. package/esm2020/lib/services/file.service.mjs +0 -64
  554. package/esm2020/lib/services/index.mjs +0 -22
  555. package/esm2020/lib/services/invoice/invoice.service.mjs +0 -41
  556. package/esm2020/lib/services/invoice/payment-attempt.service.mjs +0 -51
  557. package/esm2020/lib/services/maintenance-mode.service.mjs +0 -21
  558. package/esm2020/lib/services/member-card.service.mjs +0 -103
  559. package/esm2020/lib/services/member-public-form.service.mjs +0 -32
  560. package/esm2020/lib/services/member.service.mjs +0 -63
  561. package/esm2020/lib/services/news.service.mjs +0 -102
  562. package/esm2020/lib/services/registration-qr-code.service.mjs +0 -36
  563. package/esm2020/lib/services/section.service.mjs +0 -23
  564. package/esm2020/lib/services/team.service.mjs +0 -88
  565. package/esm2020/lib/services/token.service.mjs +0 -57
  566. package/esm2020/lib/services/user-notification.service.mjs +0 -23
  567. package/esm2020/lib/services/user.service.mjs +0 -68
  568. package/fesm2015/myclub_se-data-access.mjs +0 -4810
  569. package/fesm2015/myclub_se-data-access.mjs.map +0 -1
  570. package/fesm2020/myclub_se-data-access.mjs +0 -4806
  571. package/fesm2020/myclub_se-data-access.mjs.map +0 -1
  572. /package/{esm2020 → esm2022}/lib/api-models/api-activity-extra-member.mjs +0 -0
  573. /package/{esm2020 → esm2022}/lib/api-models/api-activity-invite.mjs +0 -0
  574. /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-group.mjs +0 -0
  575. /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-part.mjs +0 -0
  576. /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-tag.mjs +0 -0
  577. /package/{esm2020 → esm2022}/lib/api-models/api-activity-location.mjs +0 -0
  578. /package/{esm2020 → esm2022}/lib/api-models/api-activity-participant.mjs +0 -0
  579. /package/{esm2020 → esm2022}/lib/api-models/api-activity-settings.mjs +0 -0
  580. /package/{esm2020 → esm2022}/lib/api-models/api-activity-type.mjs +0 -0
  581. /package/{esm2020 → esm2022}/lib/api-models/api-activity.mjs +0 -0
  582. /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-member.mjs +0 -0
  583. /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-section.mjs +0 -0
  584. /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team-section.mjs +0 -0
  585. /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team.mjs +0 -0
  586. /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth.mjs +0 -0
  587. /package/{esm2020 → esm2022}/lib/api-models/api-auth/index.mjs +0 -0
  588. /package/{esm2020 → esm2022}/lib/api-models/api-bookable-group.mjs +0 -0
  589. /package/{esm2020 → esm2022}/lib/api-models/api-bookable-part.mjs +0 -0
  590. /package/{esm2020 → esm2022}/lib/api-models/api-bookable-tag.mjs +0 -0
  591. /package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot.mjs +0 -0
  592. /package/{esm2020 → esm2022}/lib/api-models/api-booking-settings.mjs +0 -0
  593. /package/{esm2020 → esm2022}/lib/api-models/api-calendar-event.mjs +0 -0
  594. /package/{esm2020 → esm2022}/lib/api-models/api-calendar.mjs +0 -0
  595. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-deal.mjs +0 -0
  596. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo-urls.mjs +0 -0
  597. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo.mjs +0 -0
  598. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-member-ticket.mjs +0 -0
  599. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-theme.mjs +0 -0
  600. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket-location.mjs +0 -0
  601. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket.mjs +0 -0
  602. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card.mjs +0 -0
  603. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-home-team.mjs +0 -0
  604. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-member-card.mjs +0 -0
  605. /package/{esm2020 → esm2022}/lib/api-models/api-card/api-search-member-card.mjs +0 -0
  606. /package/{esm2020 → esm2022}/lib/api-models/api-card/index.mjs +0 -0
  607. /package/{esm2020 → esm2022}/lib/api-models/api-club-image.mjs +0 -0
  608. /package/{esm2020 → esm2022}/lib/api-models/api-club-section.mjs +0 -0
  609. /package/{esm2020 → esm2022}/lib/api-models/api-club.mjs +0 -0
  610. /package/{esm2020 → esm2022}/lib/api-models/api-collection.mjs +0 -0
  611. /package/{esm2020 → esm2022}/lib/api-models/api-directory.mjs +0 -0
  612. /package/{esm2020 → esm2022}/lib/api-models/api-event.mjs +0 -0
  613. /package/{esm2020 → esm2022}/lib/api-models/api-external-link.mjs +0 -0
  614. /package/{esm2020 → esm2022}/lib/api-models/api-file-object.mjs +0 -0
  615. /package/{esm2020 → esm2022}/lib/api-models/api-general-image.mjs +0 -0
  616. /package/{esm2020 → esm2022}/lib/api-models/api-group-role.mjs +0 -0
  617. /package/{esm2020 → esm2022}/lib/api-models/api-image-urls.mjs +0 -0
  618. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-credit-card.mjs +0 -0
  619. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-giro.mjs +0 -0
  620. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-swish.mjs +0 -0
  621. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-zimpler.mjs +0 -0
  622. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/index.mjs +0 -0
  623. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-fee.mjs +0 -0
  624. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice-row.mjs +0 -0
  625. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice.mjs +0 -0
  626. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-payment-attempt.mjs +0 -0
  627. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-search-member-invoice.mjs +0 -0
  628. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-swish-qr-code.mjs +0 -0
  629. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-unpaid-member-invoice.mjs +0 -0
  630. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/index.mjs +0 -0
  631. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.mjs +0 -0
  632. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.mjs +0 -0
  633. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.mjs +0 -0
  634. /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/index.mjs +0 -0
  635. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-contact.mjs +0 -0
  636. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-attribute.mjs +0 -0
  637. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-contact.mjs +0 -0
  638. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-function.mjs +0 -0
  639. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-validation-settings.mjs +0 -0
  640. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member.mjs +0 -0
  641. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member-field.mjs +0 -0
  642. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member.mjs +0 -0
  643. /package/{esm2020 → esm2022}/lib/api-models/api-member/api-search-member.mjs +0 -0
  644. /package/{esm2020 → esm2022}/lib/api-models/api-member/index.mjs +0 -0
  645. /package/{esm2020 → esm2022}/lib/api-models/api-member-activity-invite.mjs +0 -0
  646. /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field-option.mjs +0 -0
  647. /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field.mjs +0 -0
  648. /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form.mjs +0 -0
  649. /package/{esm2020 → esm2022}/lib/api-models/api-member-team-through.mjs +0 -0
  650. /package/{esm2020 → esm2022}/lib/api-models/api-member-team.mjs +0 -0
  651. /package/{esm2020 → esm2022}/lib/api-models/api-member-type.mjs +0 -0
  652. /package/{esm2020 → esm2022}/lib/api-models/api-news.mjs +0 -0
  653. /package/{esm2020 → esm2022}/lib/api-models/api-open-activity.mjs +0 -0
  654. /package/{esm2020 → esm2022}/lib/api-models/api-optional-fee.mjs +0 -0
  655. /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-bookable-item.mjs +0 -0
  656. /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-location.mjs +0 -0
  657. /package/{esm2020 → esm2022}/lib/api-models/api-partner.mjs +0 -0
  658. /package/{esm2020 → esm2022}/lib/api-models/api-public-token.mjs +0 -0
  659. /package/{esm2020 → esm2022}/lib/api-models/api-registration-qr-code.mjs +0 -0
  660. /package/{esm2020 → esm2022}/lib/api-models/api-search-club.mjs +0 -0
  661. /package/{esm2020 → esm2022}/lib/api-models/api-search-team.mjs +0 -0
  662. /package/{esm2020 → esm2022}/lib/api-models/api-section.mjs +0 -0
  663. /package/{esm2020 → esm2022}/lib/api-models/api-token.mjs +0 -0
  664. /package/{esm2020 → esm2022}/lib/api-models/api-user-notification.mjs +0 -0
  665. /package/{esm2020 → esm2022}/lib/api-models/api-user.mjs +0 -0
  666. /package/{esm2020 → esm2022}/lib/authentication/authentication.config.mjs +0 -0
  667. /package/{esm2020 → esm2022}/lib/authentication/index.mjs +0 -0
  668. /package/{esm2020 → esm2022}/lib/interfaces/email-recipient.interface.mjs +0 -0
  669. /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
  670. /package/{esm2020 → esm2022}/lib/interfaces/new-account.interface.mjs +0 -0
  671. /package/{esm2020 → esm2022}/lib/interfaces/open-activity-search-params.interface.mjs +0 -0
  672. /package/{esm2020 → esm2022}/lib/interfaces/option.interface.mjs +0 -0
  673. /package/{esm2020 → esm2022}/lib/interfaces/sms-recipient.interface.mjs +0 -0
  674. /package/{esm2020 → esm2022}/lib/maintenance/index.mjs +0 -0
  675. /package/{esm2020 → esm2022}/lib/models/auth/index.mjs +0 -0
  676. /package/{esm2020 → esm2022}/lib/models/card/index.mjs +0 -0
  677. /package/{esm2020 → esm2022}/lib/models/invoice/index.mjs +0 -0
  678. /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/index.mjs +0 -0
  679. /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.mjs +0 -0
  680. /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.mjs +0 -0
  681. /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.mjs +0 -0
  682. /package/{esm2020 → esm2022}/lib/models/invoice/payment-types/index.mjs +0 -0
  683. /package/{esm2020 → esm2022}/lib/models/member/index.mjs +0 -0
  684. /package/{esm2020 → esm2022}/lib/models/role.mjs +0 -0
  685. /package/{esm2020 → esm2022}/lib/services/factories/activity-extra-member-factory.mjs +0 -0
  686. /package/{esm2020 → esm2022}/lib/services/factories/activity-factory.mjs +0 -0
  687. /package/{esm2020 → esm2022}/lib/services/factories/activity-invite-factory.mjs +0 -0
  688. /package/{esm2020 → esm2022}/lib/services/factories/activity-location-factory.mjs +0 -0
  689. /package/{esm2020 → esm2022}/lib/services/factories/activity-location-group-factory.mjs +0 -0
  690. /package/{esm2020 → esm2022}/lib/services/factories/activity-location-part-factory.mjs +0 -0
  691. /package/{esm2020 → esm2022}/lib/services/factories/activity-location-tag-factory.mjs +0 -0
  692. /package/{esm2020 → esm2022}/lib/services/factories/activity-participant-factory.mjs +0 -0
  693. /package/{esm2020 → esm2022}/lib/services/factories/activity-type-factory.mjs +0 -0
  694. /package/{esm2020 → esm2022}/lib/services/factories/auth-factory.mjs +0 -0
  695. /package/{esm2020 → esm2022}/lib/services/factories/auth-member-factory.mjs +0 -0
  696. /package/{esm2020 → esm2022}/lib/services/factories/auth-section-factory.mjs +0 -0
  697. /package/{esm2020 → esm2022}/lib/services/factories/auth-team-factory.mjs +0 -0
  698. /package/{esm2020 → esm2022}/lib/services/factories/auth-team-section-factory.mjs +0 -0
  699. /package/{esm2020 → esm2022}/lib/services/factories/bookable-group-factory.mjs +0 -0
  700. /package/{esm2020 → esm2022}/lib/services/factories/bookable-part-factory.mjs +0 -0
  701. /package/{esm2020 → esm2022}/lib/services/factories/bookable-tag-factory.mjs +0 -0
  702. /package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-factory.mjs +0 -0
  703. /package/{esm2020 → esm2022}/lib/services/factories/booking-settings-factory.mjs +0 -0
  704. /package/{esm2020 → esm2022}/lib/services/factories/card-deal-factory.mjs +0 -0
  705. /package/{esm2020 → esm2022}/lib/services/factories/card-factory.mjs +0 -0
  706. /package/{esm2020 → esm2022}/lib/services/factories/card-logo-factory.mjs +0 -0
  707. /package/{esm2020 → esm2022}/lib/services/factories/card-logo-urls-factory.mjs +0 -0
  708. /package/{esm2020 → esm2022}/lib/services/factories/card-member-ticket-factory.mjs +0 -0
  709. /package/{esm2020 → esm2022}/lib/services/factories/card-theme-factory.mjs +0 -0
  710. /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-factory.mjs +0 -0
  711. /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-location-factory.mjs +0 -0
  712. /package/{esm2020 → esm2022}/lib/services/factories/club-factory.mjs +0 -0
  713. /package/{esm2020 → esm2022}/lib/services/factories/club-image-factory.mjs +0 -0
  714. /package/{esm2020 → esm2022}/lib/services/factories/club-section-factory.mjs +0 -0
  715. /package/{esm2020 → esm2022}/lib/services/factories/contact-factory.mjs +0 -0
  716. /package/{esm2020 → esm2022}/lib/services/factories/credit-card-factory.mjs +0 -0
  717. /package/{esm2020 → esm2022}/lib/services/factories/directory-factory.mjs +0 -0
  718. /package/{esm2020 → esm2022}/lib/services/factories/event-factory.mjs +0 -0
  719. /package/{esm2020 → esm2022}/lib/services/factories/external-link-factory.mjs +0 -0
  720. /package/{esm2020 → esm2022}/lib/services/factories/file-factory.mjs +0 -0
  721. /package/{esm2020 → esm2022}/lib/services/factories/general-image-factory.mjs +0 -0
  722. /package/{esm2020 → esm2022}/lib/services/factories/giro-factory.mjs +0 -0
  723. /package/{esm2020 → esm2022}/lib/services/factories/group-role-factory.mjs +0 -0
  724. /package/{esm2020 → esm2022}/lib/services/factories/home-team-factory.mjs +0 -0
  725. /package/{esm2020 → esm2022}/lib/services/factories/image-urls-factory.mjs +0 -0
  726. /package/{esm2020 → esm2022}/lib/services/factories/member-attribute-factory.mjs +0 -0
  727. /package/{esm2020 → esm2022}/lib/services/factories/member-card-factory.mjs +0 -0
  728. /package/{esm2020 → esm2022}/lib/services/factories/member-contact-factory.mjs +0 -0
  729. /package/{esm2020 → esm2022}/lib/services/factories/member-factory.mjs +0 -0
  730. /package/{esm2020 → esm2022}/lib/services/factories/member-fee-factory.mjs +0 -0
  731. /package/{esm2020 → esm2022}/lib/services/factories/member-function-factory.mjs +0 -0
  732. /package/{esm2020 → esm2022}/lib/services/factories/member-invite-factory.mjs +0 -0
  733. /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-factory.mjs +0 -0
  734. /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-row-factory.mjs +0 -0
  735. /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-factory.mjs +0 -0
  736. /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-option-factory.mjs +0 -0
  737. /package/{esm2020 → esm2022}/lib/services/factories/member-team-factory.mjs +0 -0
  738. /package/{esm2020 → esm2022}/lib/services/factories/member-team-through-factory.mjs +0 -0
  739. /package/{esm2020 → esm2022}/lib/services/factories/member-type-factory.mjs +0 -0
  740. /package/{esm2020 → esm2022}/lib/services/factories/member-validation-settings-factory.mjs +0 -0
  741. /package/{esm2020 → esm2022}/lib/services/factories/news-factory.mjs +0 -0
  742. /package/{esm2020 → esm2022}/lib/services/factories/open-activity-factory.mjs +0 -0
  743. /package/{esm2020 → esm2022}/lib/services/factories/optional-fee-factory.mjs +0 -0
  744. /package/{esm2020 → esm2022}/lib/services/factories/other-member-factory.mjs +0 -0
  745. /package/{esm2020 → esm2022}/lib/services/factories/other-member-field-factory.mjs +0 -0
  746. /package/{esm2020 → esm2022}/lib/services/factories/overbooked-bookable-item-factory.mjs +0 -0
  747. /package/{esm2020 → esm2022}/lib/services/factories/overbooked-location-factory.mjs +0 -0
  748. /package/{esm2020 → esm2022}/lib/services/factories/partner-factory.mjs +0 -0
  749. /package/{esm2020 → esm2022}/lib/services/factories/public-authentication-factory.mjs +0 -0
  750. /package/{esm2020 → esm2022}/lib/services/factories/registration-qr-code-factory.mjs +0 -0
  751. /package/{esm2020 → esm2022}/lib/services/factories/search-club-factory.mjs +0 -0
  752. /package/{esm2020 → esm2022}/lib/services/factories/search-member-card-factory.mjs +0 -0
  753. /package/{esm2020 → esm2022}/lib/services/factories/search-member-factory.mjs +0 -0
  754. /package/{esm2020 → esm2022}/lib/services/factories/search-member-invoice-factory.mjs +0 -0
  755. /package/{esm2020 → esm2022}/lib/services/factories/search-member-team-through-factory.mjs +0 -0
  756. /package/{esm2020 → esm2022}/lib/services/factories/search-team-factory.mjs +0 -0
  757. /package/{esm2020 → esm2022}/lib/services/factories/section-factory.mjs +0 -0
  758. /package/{esm2020 → esm2022}/lib/services/factories/swish-factory.mjs +0 -0
  759. /package/{esm2020 → esm2022}/lib/services/factories/token-factory.mjs +0 -0
  760. /package/{esm2020 → esm2022}/lib/services/factories/unpaid-invoice-factory.mjs +0 -0
  761. /package/{esm2020 → esm2022}/lib/services/factories/user-factory.mjs +0 -0
  762. /package/{esm2020 → esm2022}/lib/services/factories/user-notification-factory.mjs +0 -0
  763. /package/{esm2020 → esm2022}/lib/services/factories/zimpler-factory.mjs +0 -0
  764. /package/{esm2020 → esm2022}/lib/services/invoice/index.mjs +0 -0
  765. /package/{esm2020 → esm2022}/lib/types/attribute-type.mjs +0 -0
  766. /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-reserved-time-position.mjs +0 -0
  767. /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-type.mjs +0 -0
  768. /package/{esm2020 → esm2022}/lib/types/contact-type.mjs +0 -0
  769. /package/{esm2020 → esm2022}/lib/types/grant-type.mjs +0 -0
  770. /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
  771. /package/{esm2020 → esm2022}/lib/types/payment-attempt-status-type.mjs +0 -0
  772. /package/{esm2020 → esm2022}/lib/types/payment-attempt-type.mjs +0 -0
  773. /package/{esm2020 → esm2022}/lib/types/sex-type.mjs +0 -0
  774. /package/{esm2020 → esm2022}/myclub_se-data-access.mjs +0 -0
@@ -1,794 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Role, } from '../models';
3
- import { bookingCalendarApplicationTimeFactory, bookingCalendarFactory, bookingCalendarSlotFactory, bookingCalendarSlotSessionFactory, bookingSettingsFactory, overbookedBookableItemFactory, } from "./factories";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./api.service";
6
- const CLUB_BOOKING_CALENDARS_PATH = ':clubId/activities/calendars/';
7
- const CLUB_BOOKING_CALENDAR_PATH = ':clubId/activities/calendars/:id/';
8
- const CLUB_BOOKING_CALENDAR_SLOTS_PATH = ':clubId/activities/slots/';
9
- const CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':clubId/activities/slots/application-times/';
10
- const CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':clubId/activities/slots/copy/';
11
- const CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':clubId/activities/slots/clear/';
12
- const CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':clubId/activities/slots/sync/';
13
- const CLUB_BOOKING_CALENDAR_SLOT_PATH = ':clubId/activities/slots/:id/';
14
- const CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':clubId/activities/slots/:id/all/';
15
- const CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':clubId/activities/sessions/';
16
- const CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':clubId/activities/sessions/:id/';
17
- const CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':clubId/activities/sessions/:id/all/';
18
- const CLUB_BOOKING_SETTINGS_PATH = ':clubId/activities/booking-settings/';
19
- const CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':clubId/activities/application-times/:id/';
20
- const CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':clubId/activities/application-times/';
21
- const CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH = ':clubId/activities/overbooked/sessions/';
22
- const CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':clubId/activities/overbooked/bookables/';
23
- const SECTION_BOOKING_CALENDARS_PATH = ':sectionId/activities/calendars/';
24
- const SECTION_BOOKING_CALENDAR_PATH = ':sectionId/activities/calendars/:id/';
25
- const SECTION_BOOKING_CALENDAR_SLOTS_PATH = ':sectionId/activities/slots/';
26
- const SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':sectionId/activities/slots/application-times/';
27
- const SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':sectionId/activities/slots/copy/';
28
- const SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':sectionId/activities/slots/clear/';
29
- const SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':sectionId/activities/slots/sync/';
30
- const SECTION_BOOKING_CALENDAR_SLOT_PATH = ':sectionId/activities/slots/:id/';
31
- const SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':sectionId/activities/slots/:id/all/';
32
- const SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':sectionId/activities/sessions/';
33
- const SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':sectionId/activities/sessions/:id/';
34
- const SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':sectionId/activities/sessions/:id/all/';
35
- const SECTION_BOOKING_SETTINGS_PATH = ':sectionId/activities/booking-settings/';
36
- const SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':sectionId/activities/application-times/:id/';
37
- const SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':sectionId/activities/application-times/';
38
- const SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH = ':sectionId/activities/overbooked/sessions/';
39
- const SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':sectionId/activities/overbooked/bookables/';
40
- const TEAM_BOOKING_CALENDARS_PATH = ':teamId/activities/calendars/';
41
- const TEAM_BOOKING_CALENDAR_SLOTS_PATH = ':teamId/activities/slots/';
42
- const TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':teamId/activities/slots/sync/';
43
- const TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':teamId/activities/slots/application-times/';
44
- const TEAM_BOOKING_SETTINGS_PATH = ':teamId/activities/booking-settings/';
45
- const TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':teamId/activities/sessions/';
46
- const TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':teamId/activities/sessions/:id/';
47
- const TEAM_BOOKING_CALENDAR_SLOT_PATH = ':teamId/activities/slots/:id/';
48
- const TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':teamId/activities/application-times/';
49
- const TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':teamId/activities/application-times/:id/';
50
- export class BookingSlotFilter {
51
- constructor(startDate = null, endDate = null, calendarIds = [], locationIds = [], bookableItemIds = [], tagIds = [], teamIds = [], bookableGroupIds = [], activityTypeIds = [], hasOpenSessions = null, showApplicationTimes = null, sortBy = null) {
52
- this.startDate = startDate;
53
- this.endDate = endDate;
54
- this.calendarIds = calendarIds;
55
- this.locationIds = locationIds;
56
- this.bookableItemIds = bookableItemIds;
57
- this.tagIds = tagIds;
58
- this.teamIds = teamIds;
59
- this.bookableGroupIds = bookableGroupIds;
60
- this.activityTypeIds = activityTypeIds;
61
- this.hasOpenSessions = hasOpenSessions;
62
- this.showApplicationTimes = showApplicationTimes;
63
- this.sortBy = sortBy;
64
- }
65
- static fromFilter(filter) {
66
- return new this(filter.startDate, filter.endDate, filter.calendarIds, filter.locationIds, filter.bookableItemIds, filter.tagIds, filter.teamIds, filter.bookableGroupIds, filter.activityTypeIds, filter.hasOpenSessions, filter.showApplicationTimes, filter.sortBy);
67
- }
68
- toParams() {
69
- const params = { limit: 'null' };
70
- if (this.startDate) {
71
- params['day__gte'] = this.startDate;
72
- }
73
- if (this.endDate) {
74
- params['day__lte'] = this.endDate;
75
- }
76
- if (this.calendarIds && this.calendarIds.length) {
77
- params['calendar_id'] = this.calendarIds.join(',');
78
- }
79
- if (this.locationIds && this.locationIds.length) {
80
- params['location_id'] = this.locationIds.join(',');
81
- }
82
- if (this.bookableItemIds && this.bookableItemIds.length) {
83
- params['bookable_id'] = this.bookableItemIds.join(',');
84
- }
85
- if (this.bookableGroupIds && this.bookableGroupIds.length) {
86
- params['bookable_group_id'] = this.bookableGroupIds.join(',');
87
- }
88
- if (this.tagIds && this.tagIds.length) {
89
- params['bookable_tag_id'] = this.tagIds.join(',');
90
- }
91
- if (this.teamIds && this.teamIds.length) {
92
- params['team_id'] = this.teamIds.join(',');
93
- }
94
- if (this.activityTypeIds && this.activityTypeIds.length) {
95
- params["activity_type_id"] = this.activityTypeIds.join(",");
96
- }
97
- if (typeof this.hasOpenSessions === 'boolean') {
98
- params['has_open_sessions'] = String(this.hasOpenSessions);
99
- }
100
- if (typeof this.showApplicationTimes === 'boolean') {
101
- params['show_application_times'] = String(this.showApplicationTimes);
102
- }
103
- if (this.sortBy) {
104
- params['order'] = this.sortBy;
105
- }
106
- return params;
107
- }
108
- }
109
- export class BookingCalendarService {
110
- constructor(apiService) {
111
- this.apiService = apiService;
112
- }
113
- // region Booking calendar
114
- createBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
115
- if (role === Role.ClubAdmin) {
116
- return this.createClubBookingCalendar(clubOrSectionOrTeamId, calendar);
117
- }
118
- return this.createSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
119
- }
120
- createClubBookingCalendar(clubId, calendar) {
121
- delete calendar.id;
122
- return this.apiService
123
- .postResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, {
124
- clubId,
125
- }, calendar);
126
- }
127
- createSectionBookingCalendar(sectionId, calendar) {
128
- delete calendar.id;
129
- return this.apiService
130
- .postResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, {
131
- sectionId,
132
- }, calendar);
133
- }
134
- getBookingCalendars(role, clubOrSectionOrTeamId, name = null) {
135
- if (role == Role.ClubAdmin) {
136
- return this.getClubBookingCalendars(clubOrSectionOrTeamId, name);
137
- }
138
- else if (role == Role.SectionAdmin) {
139
- return this.getSectionBookingCalendars(clubOrSectionOrTeamId, name);
140
- }
141
- return this.getTeamBookingCalendars(clubOrSectionOrTeamId, name);
142
- }
143
- getClubBookingCalendars(clubId, name = null) {
144
- const params = { limit: 'null' };
145
- if (name) {
146
- params['name'] = name;
147
- }
148
- return this.apiService
149
- .getCollection(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, { clubId }, {
150
- params
151
- });
152
- }
153
- getSectionBookingCalendars(sectionId, name = null) {
154
- const params = { limit: 'null' };
155
- if (name) {
156
- params['name'] = name;
157
- }
158
- return this.apiService
159
- .getCollection(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, { sectionId }, {
160
- params
161
- });
162
- }
163
- getTeamBookingCalendars(teamId, name = null) {
164
- const params = { limit: 'null' };
165
- if (name) {
166
- params['name'] = name;
167
- }
168
- return this.apiService
169
- .getCollection(bookingCalendarFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDARS_PATH, { teamId }, {
170
- params
171
- });
172
- }
173
- updateBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
174
- if (role === Role.ClubAdmin) {
175
- return this.updateClubBookingCalendar(clubOrSectionOrTeamId, calendar);
176
- }
177
- return this.updateSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
178
- }
179
- updateClubBookingCalendar(clubId, calendar) {
180
- return this.apiService
181
- .updateResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
182
- clubId,
183
- id: calendar.id
184
- }, calendar);
185
- }
186
- updateSectionBookingCalendar(sectionId, calendar) {
187
- return this.apiService
188
- .updateResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
189
- sectionId,
190
- id: calendar.id
191
- }, calendar);
192
- }
193
- deleteBookingCalendar(role, clubOrSectionOrTeamId, id) {
194
- if (role === Role.ClubAdmin) {
195
- return this.deleteClubBookingCalendar(clubOrSectionOrTeamId, id);
196
- }
197
- return this.deleteSectionBookingCalendar(clubOrSectionOrTeamId, id);
198
- }
199
- deleteClubBookingCalendar(clubId, id) {
200
- return this.apiService
201
- .deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
202
- clubId,
203
- id
204
- });
205
- }
206
- deleteSectionBookingCalendar(sectionId, id) {
207
- return this.apiService
208
- .deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
209
- sectionId,
210
- id
211
- });
212
- }
213
- // endregion
214
- // region Booking calendar slot
215
- createBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
216
- if (role === Role.ClubAdmin) {
217
- return this.createClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
218
- }
219
- return this.createSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
220
- }
221
- createClubBookingCalendarSlot(clubId, slot) {
222
- delete slot.id;
223
- return this.apiService
224
- .postResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, {
225
- clubId,
226
- }, slot);
227
- }
228
- createSectionBookingCalendarSlot(sectionId, slot) {
229
- delete slot.id;
230
- return this.apiService
231
- .postResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, {
232
- sectionId,
233
- }, slot);
234
- }
235
- getBookingCalendarSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
236
- if (role == Role.ClubAdmin) {
237
- return this.getClubBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
238
- }
239
- else if (role == Role.SectionAdmin) {
240
- return this.getSectionBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
241
- }
242
- return this.getTeamBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
243
- }
244
- getClubBookingCalendarSlots(clubId, bookingSlotFilter) {
245
- const params = bookingSlotFilter.toParams();
246
- return this.apiService
247
- .getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, { clubId }, {
248
- params
249
- });
250
- }
251
- getSectionBookingCalendarSlots(sectionId, bookingSlotFilter) {
252
- const params = bookingSlotFilter.toParams();
253
- return this.apiService
254
- .getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, { sectionId }, {
255
- params
256
- });
257
- }
258
- getTeamBookingCalendarSlots(teamId, bookingSlotFilter) {
259
- const params = bookingSlotFilter.toParams();
260
- return this.apiService
261
- .getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_PATH, { teamId }, {
262
- params
263
- });
264
- }
265
- getBookingCalendarSlot(role, clubOrSectionOrTeamId, slotId) {
266
- if (role == Role.ClubAdmin) {
267
- return this.getClubBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
268
- }
269
- else if (role == Role.SectionAdmin) {
270
- return this.getSectionBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
271
- }
272
- return this.getTeamBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
273
- }
274
- getClubBookingCalendarSlot(clubId, slotId) {
275
- return this.apiService
276
- .getResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
277
- clubId,
278
- id: slotId
279
- });
280
- }
281
- getSectionBookingCalendarSlot(sectionId, slotId) {
282
- return this.apiService
283
- .getResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
284
- sectionId,
285
- id: slotId
286
- });
287
- }
288
- getTeamBookingCalendarSlot(teamId, slotId) {
289
- return this.apiService
290
- .getResource(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_PATH, {
291
- teamId,
292
- id: slotId
293
- });
294
- }
295
- getBookingCalendarApplicationTimeSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
296
- if (role == Role.ClubAdmin) {
297
- return this.getClubBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
298
- }
299
- else if (role == Role.SectionAdmin) {
300
- return this.getSectionBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
301
- }
302
- return this.getTeamBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
303
- }
304
- getClubBookingCalendarApplicationTimeSlots(clubId, bookingSlotFilter) {
305
- const params = bookingSlotFilter.toParams();
306
- return this.apiService
307
- .getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { clubId }, {
308
- params
309
- });
310
- }
311
- getSectionBookingCalendarApplicationTimeSlots(sectionId, bookingSlotFilter) {
312
- const params = bookingSlotFilter.toParams();
313
- return this.apiService
314
- .getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { sectionId }, {
315
- params
316
- });
317
- }
318
- getTeamBookingCalendarApplicationTimeSlots(teamId, bookingSlotFilter) {
319
- const params = bookingSlotFilter.toParams();
320
- return this.apiService
321
- .getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { teamId }, {
322
- params
323
- });
324
- }
325
- getBookingCalendarApplicationTimes(role, clubOrSectionOrTeamId, bookingSlotFilter) {
326
- if (role == Role.ClubAdmin) {
327
- return this.getClubBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
328
- }
329
- else if (role == Role.SectionAdmin) {
330
- return this.getSectionBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
331
- }
332
- return this.getTeamBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
333
- }
334
- getClubBookingCalendarApplicationTimes(clubId, bookingSlotFilter) {
335
- const params = bookingSlotFilter.toParams();
336
- return this.apiService
337
- .getCollection(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { clubId }, {
338
- params
339
- });
340
- }
341
- getSectionBookingCalendarApplicationTimes(sectionId, bookingSlotFilter) {
342
- const params = bookingSlotFilter.toParams();
343
- return this.apiService
344
- .getCollection(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { sectionId }, {
345
- params
346
- });
347
- }
348
- getTeamBookingCalendarApplicationTimes(teamId, bookingSlotFilter) {
349
- const params = bookingSlotFilter.toParams();
350
- return this.apiService
351
- .getCollection(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { teamId }, {
352
- params
353
- });
354
- }
355
- copyBookingCalendarSlots(role, clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
356
- if (role === Role.ClubAdmin) {
357
- return this.copyClubBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
358
- }
359
- return this.copySectionBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
360
- }
361
- copyClubBookingCalendarSlots(clubId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
362
- const params = bookingSlotFilter.toParams();
363
- return this.apiService
364
- .postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH, { clubId }, {
365
- week_relative_indexes: weekRelativeIndexes,
366
- only_copy_slots: onlyCopySlots,
367
- weekdays: weekdays,
368
- }, {
369
- params
370
- });
371
- }
372
- copySectionBookingCalendarSlots(sectionId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
373
- const params = bookingSlotFilter.toParams();
374
- return this.apiService
375
- .postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH, { sectionId }, {
376
- week_relative_indexes: weekRelativeIndexes,
377
- only_copy_slots: onlyCopySlots,
378
- weekdays: weekdays,
379
- }, {
380
- params
381
- });
382
- }
383
- clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
384
- if (role === Role.ClubAdmin) {
385
- return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
386
- }
387
- return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
388
- }
389
- clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
390
- const params = bookingSlotFilter.toParams();
391
- return this.apiService
392
- .deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { clubId }, {
393
- body: {
394
- current_week_start_date: currentWeekStartDate,
395
- week_relative_indexes: weekRelativeIndexes,
396
- only_delete_sessions: onlyDeleteSessions,
397
- should_delete_repeating_slots: shouldDeleteRepeatingSlots,
398
- weekdays: weekdays,
399
- },
400
- params,
401
- });
402
- }
403
- clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
404
- const params = bookingSlotFilter.toParams();
405
- return this.apiService
406
- .deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { sectionId }, {
407
- body: {
408
- current_week_start_date: currentWeekStartDate,
409
- week_relative_indexes: weekRelativeIndexes,
410
- only_delete_sessions: onlyDeleteSessions,
411
- should_delete_repeating_slots: shouldDeleteRepeatingSlots,
412
- weekdays: weekdays,
413
- },
414
- params,
415
- });
416
- }
417
- syncBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
418
- if (role == Role.ClubAdmin) {
419
- return this.syncClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
420
- }
421
- else if (role == Role.SectionAdmin) {
422
- return this.syncSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
423
- }
424
- return this.syncTeamBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
425
- }
426
- syncClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
427
- const params = bookingSlotFilter.toParams();
428
- return this.apiService
429
- .postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { clubId }, {
430
- current_week_start_date: currentWeekStartDate,
431
- week_relative_indexes: weekRelativeIndexes,
432
- }, { params });
433
- }
434
- syncSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
435
- const params = bookingSlotFilter.toParams();
436
- return this.apiService
437
- .postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { sectionId }, {
438
- current_week_start_date: currentWeekStartDate,
439
- week_relative_indexes: weekRelativeIndexes,
440
- }, { params });
441
- }
442
- syncTeamBookingCalendarSlots(teamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
443
- const params = bookingSlotFilter.toParams();
444
- return this.apiService
445
- .postResourceNoResponse(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { teamId }, {
446
- current_week_start_date: currentWeekStartDate,
447
- week_relative_indexes: weekRelativeIndexes,
448
- }, { params });
449
- }
450
- updateBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
451
- if (role === Role.ClubAdmin) {
452
- return this.updateClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
453
- }
454
- return this.updateSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
455
- }
456
- updateClubBookingCalendarSlot(clubId, slot) {
457
- return this.apiService
458
- .updateResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
459
- clubId,
460
- id: slot.id
461
- }, slot);
462
- }
463
- updateSectionBookingCalendarSlot(sectionId, slot) {
464
- return this.apiService
465
- .updateResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
466
- sectionId,
467
- id: slot.id
468
- }, slot);
469
- }
470
- deleteBookingCalendarSlot(role, clubOrSectionOrTeamId, id) {
471
- if (role === Role.ClubAdmin) {
472
- return this.deleteClubBookingCalendarSlot(clubOrSectionOrTeamId, id);
473
- }
474
- return this.deleteSectionBookingCalendarSlot(clubOrSectionOrTeamId, id);
475
- }
476
- deleteClubBookingCalendarSlot(clubId, id) {
477
- return this.apiService
478
- .deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
479
- clubId,
480
- id
481
- });
482
- }
483
- deleteSectionBookingCalendarSlot(sectionId, id) {
484
- return this.apiService
485
- .deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
486
- sectionId,
487
- id
488
- });
489
- }
490
- deleteBookingCalendarSlotRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
491
- if (role === Role.ClubAdmin) {
492
- return this.deleteClubBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
493
- }
494
- return this.deleteSectionBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
495
- }
496
- deleteClubBookingCalendarSlotRepeatable(clubId, id, deleteUntilDate) {
497
- return this.apiService
498
- .deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
499
- clubId,
500
- id
501
- }, { body: { delete_until_date: deleteUntilDate } });
502
- }
503
- deleteSectionBookingCalendarSlotRepeatable(sectionId, id, deleteUntilDate) {
504
- return this.apiService
505
- .deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
506
- sectionId,
507
- id
508
- }, { body: { delete_until_date: deleteUntilDate } });
509
- }
510
- // endregion
511
- // region Booking calendar slot session
512
- createBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
513
- if (role === Role.ClubAdmin) {
514
- return this.createClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
515
- }
516
- else if (role === Role.SectionAdmin) {
517
- return this.createSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
518
- }
519
- return this.createTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
520
- }
521
- createClubBookingCalendarSlotSession(clubId, session) {
522
- delete session.id;
523
- return this.apiService
524
- .postResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
525
- clubId,
526
- }, session);
527
- }
528
- createSectionBookingCalendarSlotSession(sectionId, session) {
529
- delete session.id;
530
- return this.apiService
531
- .postResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
532
- sectionId,
533
- }, session);
534
- }
535
- createTeamBookingCalendarSlotSession(teamId, session) {
536
- delete session.id;
537
- return this.apiService
538
- .postResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
539
- teamId,
540
- }, session);
541
- }
542
- updateBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
543
- if (role === Role.ClubAdmin) {
544
- return this.updateClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
545
- }
546
- else if (role === Role.SectionAdmin) {
547
- return this.updateSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
548
- }
549
- return this.updateTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
550
- }
551
- updateClubBookingCalendarSlotSession(clubId, session) {
552
- return this.apiService
553
- .updateResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
554
- clubId,
555
- id: session.id
556
- }, session);
557
- }
558
- updateSectionBookingCalendarSlotSession(sectionId, session) {
559
- return this.apiService
560
- .updateResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
561
- sectionId,
562
- id: session.id
563
- }, session);
564
- }
565
- updateTeamBookingCalendarSlotSession(teamId, session) {
566
- return this.apiService
567
- .updateResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
568
- teamId,
569
- id: session.id
570
- }, session);
571
- }
572
- deleteBookingCalendarSlotSession(role, clubOrSectionOrTeamId, id) {
573
- if (role == Role.ClubAdmin) {
574
- return this.deleteClubBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
575
- }
576
- else if (role == Role.SectionAdmin) {
577
- return this.deleteSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
578
- }
579
- return this.deleteTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
580
- }
581
- deleteClubBookingCalendarSlotSession(clubId, id) {
582
- return this.apiService
583
- .deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
584
- clubId,
585
- id
586
- });
587
- }
588
- deleteSectionBookingCalendarSlotSession(sectionId, id) {
589
- return this.apiService
590
- .deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
591
- sectionId,
592
- id
593
- });
594
- }
595
- deleteTeamBookingCalendarSlotSession(teamId, id) {
596
- return this.apiService
597
- .deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
598
- teamId,
599
- id
600
- });
601
- }
602
- deleteBookingCalendarSlotSessionRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
603
- if (role === Role.ClubAdmin) {
604
- return this.deleteClubBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
605
- }
606
- return this.deleteSectionBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
607
- }
608
- deleteClubBookingCalendarSlotSessionRepeatable(clubId, id, deleteUntilDate) {
609
- return this.apiService
610
- .deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
611
- clubId,
612
- id
613
- }, { body: { delete_until_date: deleteUntilDate } });
614
- }
615
- deleteSectionBookingCalendarSlotSessionRepeatable(sectionId, id, deleteUntilDate) {
616
- return this.apiService
617
- .deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
618
- sectionId,
619
- id
620
- }, { body: { delete_until_date: deleteUntilDate } });
621
- }
622
- // endregion
623
- // region Booking Setting
624
- getBookingSettings(role, clubOrSectionOrTeamId) {
625
- if (role == Role.ClubAdmin) {
626
- return this.getClubBookingSettings(clubOrSectionOrTeamId);
627
- }
628
- else if (role == Role.SectionAdmin) {
629
- return this.getSectionBookingSettings(clubOrSectionOrTeamId);
630
- }
631
- return this.getTeamBookingSettings(clubOrSectionOrTeamId);
632
- }
633
- getClubBookingSettings(clubId) {
634
- return this.apiService
635
- .getResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, { clubId });
636
- }
637
- getSectionBookingSettings(sectionId) {
638
- return this.apiService
639
- .getResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, { sectionId });
640
- }
641
- getTeamBookingSettings(teamId) {
642
- return this.apiService
643
- .getResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, { teamId });
644
- }
645
- updateBookingSettings(role, clubOrSectionOrTeamId, bookingSettings) {
646
- if (role == Role.ClubAdmin) {
647
- return this.updateClubBookingSettings(clubOrSectionOrTeamId, bookingSettings);
648
- }
649
- else if (role == Role.SectionAdmin) {
650
- return this.updateSectionBookingSettings(clubOrSectionOrTeamId, bookingSettings);
651
- }
652
- return this.updateTeamBookingSettings(clubOrSectionOrTeamId, bookingSettings);
653
- }
654
- updateClubBookingSettings(clubId, bookingSettings) {
655
- return this.apiService
656
- .updateResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, {
657
- clubId,
658
- }, bookingSettings);
659
- }
660
- updateSectionBookingSettings(sectionId, bookingSettings) {
661
- return this.apiService
662
- .updateResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, {
663
- sectionId,
664
- }, bookingSettings);
665
- }
666
- updateTeamBookingSettings(teamId, bookingSettings) {
667
- return this.apiService
668
- .updateResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, {
669
- teamId,
670
- }, bookingSettings);
671
- }
672
- // endregion
673
- // region Booking Calendar Application Times
674
- updateBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTime) {
675
- if (role == Role.ClubAdmin) {
676
- return this.updateClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
677
- }
678
- else if (role == Role.SectionAdmin) {
679
- return this.updateSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
680
- }
681
- return this.updateTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
682
- }
683
- updateClubBookingCalendarApplicationTime(clubId, availableTime) {
684
- return this.apiService
685
- .updateResource(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
686
- clubId,
687
- id: availableTime.id
688
- }, availableTime);
689
- }
690
- updateSectionBookingCalendarApplicationTime(sectionId, availableTime) {
691
- return this.apiService
692
- .updateResource(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
693
- sectionId,
694
- id: availableTime.id
695
- }, availableTime);
696
- }
697
- updateTeamBookingCalendarApplicationTime(teamId, availableTime) {
698
- return this.apiService
699
- .updateResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
700
- teamId,
701
- id: availableTime.id
702
- }, availableTime);
703
- }
704
- createTeamBookingCalendarApplicationTime(teamId, availableTime) {
705
- delete availableTime.id;
706
- return this.apiService
707
- .postResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, {
708
- teamId,
709
- }, availableTime);
710
- }
711
- deleteBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTimeId) {
712
- if (role == Role.ClubAdmin) {
713
- return this.deleteClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
714
- }
715
- else if (role == Role.SectionAdmin) {
716
- return this.deleteSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
717
- }
718
- return this.deleteTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
719
- }
720
- deleteClubBookingCalendarApplicationTime(clubId, id) {
721
- return this.apiService
722
- .deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
723
- clubId,
724
- id
725
- });
726
- }
727
- deleteSectionBookingCalendarApplicationTime(sectionId, id) {
728
- return this.apiService
729
- .deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
730
- sectionId,
731
- id
732
- });
733
- }
734
- deleteTeamBookingCalendarApplicationTime(teamId, id) {
735
- return this.apiService
736
- .deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
737
- teamId,
738
- id
739
- });
740
- }
741
- // endregion
742
- // region Overbooked sessions
743
- getOverbookedSessions(role, clubOrSectionOrTeamId, bookingSlotFilter) {
744
- if (role == Role.ClubAdmin) {
745
- return this.getClubOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
746
- }
747
- return this.getSectionOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
748
- }
749
- getClubOverbookedSessions(clubId, bookingSlotFilter) {
750
- const params = bookingSlotFilter.toParams();
751
- return this.apiService
752
- .getCollection(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH, { clubId }, {
753
- params
754
- });
755
- }
756
- getSectionOverbookedSessions(sectionId, bookingSlotFilter) {
757
- const params = bookingSlotFilter.toParams();
758
- return this.apiService
759
- .getCollection(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH, { sectionId }, {
760
- params
761
- });
762
- }
763
- // endregion
764
- // region Overbooked bookables
765
- getOverbookedBookables(role, clubOrSectionOrTeamId, bookingSlotFilter) {
766
- if (role == Role.ClubAdmin) {
767
- return this.getClubOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
768
- }
769
- return this.getSectionOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
770
- }
771
- getClubOverbookedBookables(clubId, bookingSlotFilter) {
772
- const params = bookingSlotFilter.toParams();
773
- return this.apiService
774
- .getCollection(overbookedBookableItemFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH, { clubId }, {
775
- params
776
- });
777
- }
778
- getSectionOverbookedBookables(sectionId, bookingSlotFilter) {
779
- const params = bookingSlotFilter.toParams();
780
- return this.apiService
781
- .getCollection(overbookedBookableItemFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH, { sectionId }, {
782
- params
783
- });
784
- }
785
- }
786
- BookingCalendarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
787
- BookingCalendarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, providedIn: 'root' });
788
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, decorators: [{
789
- type: Injectable,
790
- args: [{
791
- providedIn: 'root'
792
- }]
793
- }], ctorParameters: function () { return [{ type: i1.ApiService }]; } });
794
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3RCLDZCQUE2QixHQUM5QixNQUFNLGFBQWEsQ0FBQzs7O0FBRXJCLE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUM7QUFDcEUsTUFBTSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQUN2RSxNQUFNLGdDQUFnQyxHQUFHLDJCQUEyQixDQUFDO0FBQ3JFLE1BQU0sa0RBQWtELEdBQUcsNkNBQTZDLENBQUM7QUFDekcsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLHNDQUFzQyxHQUFHLGlDQUFpQyxDQUFDO0FBQ2pGLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSwrQkFBK0IsR0FBRywrQkFBK0IsQ0FBQztBQUN4RSxNQUFNLDBDQUEwQyxHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZGLE1BQU0sd0NBQXdDLEdBQUcsOEJBQThCLENBQUM7QUFDaEYsTUFBTSx1Q0FBdUMsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRixNQUFNLDZDQUE2QyxHQUFHLHNDQUFzQyxDQUFDO0FBQzdGLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUM7QUFDMUUsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRyxNQUFNLDRDQUE0QyxHQUFHLHVDQUF1QyxDQUFD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SSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ08sMEJBQTBCLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUNyRixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWiw2QkFBNkIsRUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFDZCxzQ0FBc0MsRUFDdEMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBQ08sNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxpQkFBb0M7UUFDM0YsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osNkJBQTZCLEVBQzdCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHlDQUF5QyxFQUN6QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7O29IQWpyQ1Usc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBpU2VydmljZX0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuICBCb29raW5nQ2FsZW5kYXIsXG4gIEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdCxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24sXG4gIEJvb2tpbmdTZXR0aW5ncyxcbiAgUm9sZSxcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL292ZXJib29rZWQvYm9va2FibGVzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NvcHkvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jbGVhci8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL292ZXJib29rZWQvc2Vzc2lvbnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX0JPT0tBQkxFU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9vdmVyYm9va2VkL2Jvb2thYmxlcy8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuXG5cbmV4cG9ydCBjbGFzcyBCb29raW5nU2xvdEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGJvb2thYmxlSXRlbUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIHRhZ0lkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBib29rYWJsZUdyb3VwSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgYWN0aXZpdHlUeXBlSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgaGFzT3BlblNlc3Npb25zOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHNob3dBcHBsaWNhdGlvblRpbWVzOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHNvcnRCeTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWx0ZXIoZmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcik6IEJvb2tpbmdTbG90RmlsdGVyIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoXG4gICAgICBmaWx0ZXIuc3RhcnREYXRlLFxuICAgICAgZmlsdGVyLmVuZERhdGUsXG4gICAgICBmaWx0ZXIuY2FsZW5kYXJJZHMsXG4gICAgICBmaWx0ZXIubG9jYXRpb25JZHMsXG4gICAgICBmaWx0ZXIuYm9va2FibGVJdGVtSWRzLFxuICAgICAgZmlsdGVyLnRhZ0lkcyxcbiAgICAgIGZpbHRlci50ZWFtSWRzLFxuICAgICAgZmlsdGVyLmJvb2thYmxlR3JvdXBJZHMsXG4gICAgICBmaWx0ZXIuYWN0aXZpdHlUeXBlSWRzLFxuICAgICAgZmlsdGVyLmhhc09wZW5TZXNzaW9ucyxcbiAgICAgIGZpbHRlci5zaG93QXBwbGljYXRpb25UaW1lcyxcbiAgICAgIGZpbHRlci5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHRvUGFyYW1zKCk6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSB0aGlzLmVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJJZHMgJiYgdGhpcy5jYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IHRoaXMuY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25JZHMgJiYgdGhpcy5sb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IHRoaXMubG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYm9va2FibGVJdGVtSWRzICYmIHRoaXMuYm9va2FibGVJdGVtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydib29rYWJsZV9pZCddID0gdGhpcy5ib29rYWJsZUl0ZW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYm9va2FibGVHcm91cElkcyAmJiB0aGlzLmJvb2thYmxlR3JvdXBJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2Jvb2thYmxlX2dyb3VwX2lkJ10gPSB0aGlzLmJvb2thYmxlR3JvdXBJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnSWRzICYmIHRoaXMudGFnSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydib29rYWJsZV90YWdfaWQnXSA9IHRoaXMudGFnSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlYW1JZHMgJiYgdGhpcy50ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0aGlzLnRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZpdHlUeXBlSWRzICYmIHRoaXMuYWN0aXZpdHlUeXBlSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zW1wiYWN0aXZpdHlfdHlwZV9pZFwiXSA9IHRoaXMuYWN0aXZpdHlUeXBlSWRzLmpvaW4oXCIsXCIpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcodGhpcy5oYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ3Nob3dfYXBwbGljYXRpb25fdGltZXMnXSA9IFN0cmluZyh0aGlzLnNob3dBcHBsaWNhdGlvblRpbWVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0QnkpIHtcbiAgICAgIHBhcmFtc1snb3JkZXInXSA9IHRoaXMuc29ydEJ5O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2luZ0NhbGVuZGFyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXJcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoc2VjdGlvbklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFycyh0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdFxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3RzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KHRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjb3B5Qm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNsZWFyQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBzeW5jQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuc3luY1NlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIHN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IHNsb3QuaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90IHNlc3Npb25cblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBTZXR0aW5nXG5cbiAgZ2V0Qm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7dGVhbUlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgQ2FsZW5kYXIgQXBwbGljYXRpb24gVGltZXNcblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoc2VjdGlvbklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIGRlbGV0ZSBhdmFpbGFibGVUaW1lLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lSWQpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgc2Vzc2lvbnNcbiAgZ2V0T3ZlcmJvb2tlZFNlc3Npb25zKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbk92ZXJib29rZWRTZXNzaW9ucyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25PdmVyYm9va2VkU2Vzc2lvbnMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgYm9va2FibGVzXG4gIGdldE92ZXJib29rZWRCb29rYWJsZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDbHViT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgb3ZlcmJvb2tlZEJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG4gIHByaXZhdGUgZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuICAvLyBlbmRyZWdpb25cblxufVxuIl19