@sabstravtech/obtservices 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (895) hide show
  1. package/dist/obtservices/angular/components/basket-panel.d.ts +34 -0
  2. package/dist/obtservices/angular/components/with-component.d.ts +12 -0
  3. package/dist/obtservices/angular/data.d.ts +5530 -0
  4. package/dist/obtservices/angular/fetchers.d.ts +32 -0
  5. package/dist/obtservices/angular/lib/vendor/classes/environment.d.ts +3 -0
  6. package/dist/obtservices/angular/lib/vendor/classes/event-messenager.d.ts +4 -0
  7. package/dist/obtservices/angular/lib/vendor/classes/helpers.d.ts +15 -0
  8. package/dist/obtservices/angular/lib/vendor/fetchers/basket-fetcher.d.ts +6 -0
  9. package/dist/obtservices/angular/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +7 -0
  10. package/dist/obtservices/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +7 -0
  11. package/dist/obtservices/angular/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +7 -0
  12. package/dist/obtservices/angular/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +7 -0
  13. package/dist/obtservices/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +7 -0
  14. package/dist/obtservices/angular/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +7 -0
  15. package/dist/obtservices/angular/lib/vendor/fetchers/flight-quote.fetcher.d.ts +7 -0
  16. package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +7 -0
  17. package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +7 -0
  18. package/dist/obtservices/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +7 -0
  19. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +7 -0
  20. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +7 -0
  21. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +7 -0
  22. package/dist/obtservices/angular/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +7 -0
  23. package/dist/obtservices/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +7 -0
  24. package/dist/obtservices/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +7 -0
  25. package/dist/obtservices/angular/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +7 -0
  26. package/dist/obtservices/angular/lib/vendor/fetchers/irl-quote-fetcher.d.ts +7 -0
  27. package/dist/obtservices/angular/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +7 -0
  28. package/dist/obtservices/angular/lib/vendor/fetchers/parking-quote-fetcher.d.ts +7 -0
  29. package/dist/obtservices/angular/lib/vendor/fetchers/rail-quote-fetcher.d.ts +7 -0
  30. package/dist/obtservices/angular/lib/vendor/fetchers/search-airlines-fetcher.d.ts +6 -0
  31. package/dist/obtservices/angular/lib/vendor/fetchers/search-airports-fetcher.d.ts +6 -0
  32. package/dist/obtservices/angular/lib/vendor/fetchers/search-cities.fetcher.d.ts +7 -0
  33. package/dist/obtservices/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +6 -0
  34. package/dist/obtservices/angular/lib/vendor/fetchers/search-depots.fetcher.d.ts +7 -0
  35. package/dist/obtservices/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +7 -0
  36. package/dist/obtservices/angular/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +7 -0
  37. package/dist/obtservices/angular/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +7 -0
  38. package/dist/obtservices/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +7 -0
  39. package/dist/obtservices/angular/lib/vendor/fetchers/user-addresses.fetcher.d.ts +7 -0
  40. package/dist/obtservices/angular/lib/vendor/fetchers/user-fetcher.d.ts +6 -0
  41. package/dist/obtservices/angular/lib/vendor/fetchers/user-message.fetcher.d.ts +7 -0
  42. package/dist/obtservices/angular/lib/vendor/fetchers/user-products-fetcher.d.ts +7 -0
  43. package/dist/obtservices/angular/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +7 -0
  44. package/dist/obtservices/angular/lib/vendor/services/enterprise-basket.service.d.ts +29 -0
  45. package/dist/obtservices/angular/lib/vendor/services/hotel-avallibility.service.d.ts +9 -0
  46. package/dist/obtservices/angular/lib/vendor/services/http-call.service.d.ts +48 -0
  47. package/dist/obtservices/angular/lib/vendor/services/logon.service.d.ts +18 -0
  48. package/dist/obtservices/angular/lib/vendor/services/modal-opener.service.d.ts +4 -0
  49. package/dist/obtservices/angular/lib/vendor/services/my-bookings.service.d.ts +7 -0
  50. package/dist/obtservices/angular/lib/vendor/services/route-happy.service.d.ts +6 -0
  51. package/dist/obtservices/angular/lib/vendor/services/search.service.d.ts +47 -0
  52. package/dist/obtservices/angular/lib/vendor/services/storage.service.d.ts +18 -0
  53. package/dist/obtservices/angular/lib/vendor/services/user.service.d.ts +10 -0
  54. package/dist/obtservices/angular/lib/vendor/services/webtoken.service.d.ts +7 -0
  55. package/dist/obtservices/angular/lib/vendor/testers/postcode-validate.tester.d.ts +6 -0
  56. package/dist/obtservices/angular/lib/vendor/testers/validate-mi-free-value.tester.d.ts +6 -0
  57. package/dist/obtservices/angular/lib/vendor/types/graphql.angular.types.d.ts +5915 -0
  58. package/dist/obtservices/angular/lib/vendor/updaters/accept-new-price.updater.d.ts +6 -0
  59. package/dist/obtservices/angular/lib/vendor/updaters/add-item-to-basket.updater.d.ts +6 -0
  60. package/dist/obtservices/angular/lib/vendor/updaters/addUserToBasketItem.d.ts +6 -0
  61. package/dist/obtservices/angular/lib/vendor/updaters/book-basket-updater.d.ts +6 -0
  62. package/dist/obtservices/angular/lib/vendor/updaters/create-basket-updater.d.ts +6 -0
  63. package/dist/obtservices/angular/lib/vendor/updaters/move-basket-item-to-basket.d.ts +6 -0
  64. package/dist/obtservices/angular/lib/vendor/updaters/remove-basket-updater.d.ts +6 -0
  65. package/dist/obtservices/angular/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +6 -0
  66. package/dist/obtservices/angular/lib/vendor/updaters/remove-recent-search.updater.d.ts +6 -0
  67. package/dist/obtservices/angular/lib/vendor/updaters/remove-user-address.updater.d.ts +6 -0
  68. package/dist/obtservices/angular/lib/vendor/updaters/revalidate-basket-updater.d.ts +6 -0
  69. package/dist/obtservices/angular/lib/vendor/updaters/save-recent-search.updater.d.ts +6 -0
  70. package/dist/obtservices/angular/lib/vendor/updaters/save-user-address.updater.d.ts +6 -0
  71. package/dist/obtservices/angular/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +6 -0
  72. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +6 -0
  73. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-group.d.ts +6 -0
  74. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +6 -0
  75. package/dist/obtservices/angular/lib/vendor/updaters/set-payment-option.updater.d.ts +6 -0
  76. package/dist/obtservices/angular/lib/vendor/updaters/update-basket-notes-updater.d.ts +6 -0
  77. package/dist/obtservices/angular/lib/vendor/updaters/update-basket-title-updater.d.ts +6 -0
  78. package/dist/obtservices/angular/obtservices-angular.d.ts +17 -0
  79. package/dist/obtservices/angular/obtservices-angular.metadata.json +1 -0
  80. package/dist/obtservices/angular/obtservices.module.d.ts +7 -0
  81. package/dist/obtservices/angular/package.json +11 -0
  82. package/dist/obtservices/base/fetchers.d.ts +36 -0
  83. package/dist/obtservices/base/lib/vendor/classes/base-enterprise.d.ts +39 -0
  84. package/dist/obtservices/base/lib/vendor/classes/base-network-call.d.ts +10 -0
  85. package/dist/obtservices/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +20 -0
  86. package/dist/obtservices/base/lib/vendor/classes/bookable-basket.d.ts +40 -0
  87. package/dist/obtservices/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +138 -0
  88. package/dist/obtservices/base/lib/vendor/classes/carhire-enterprise-search.d.ts +203 -0
  89. package/dist/obtservices/base/lib/vendor/classes/enviroment.d.ts +24 -0
  90. package/dist/obtservices/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +268 -0
  91. package/dist/obtservices/base/lib/vendor/classes/eurostar-search-type.enum.d.ts +4 -0
  92. package/dist/obtservices/base/lib/vendor/classes/event-messenager.d.ts +12 -0
  93. package/dist/obtservices/base/lib/vendor/classes/flight-enterprise-search.d.ts +251 -0
  94. package/dist/obtservices/base/lib/vendor/classes/flight-search-type.enum.d.ts +5 -0
  95. package/dist/obtservices/base/lib/vendor/classes/helpers.d.ts +173 -0
  96. package/dist/obtservices/base/lib/vendor/classes/hotel-enterprise-search.d.ts +176 -0
  97. package/dist/obtservices/base/lib/vendor/classes/irl-enterprise-search.d.ts +139 -0
  98. package/dist/obtservices/base/lib/vendor/classes/limited-cache.class.d.ts +21 -0
  99. package/dist/obtservices/base/lib/vendor/classes/lounges-enterprise-search.d.ts +68 -0
  100. package/dist/obtservices/base/lib/vendor/classes/management-info-and-valid.d.ts +41 -0
  101. package/dist/obtservices/base/lib/vendor/classes/modal-types.enum.d.ts +12 -0
  102. package/dist/obtservices/base/lib/vendor/classes/parking-enterprise-search.d.ts +103 -0
  103. package/dist/obtservices/base/lib/vendor/classes/rail-direction.enum.d.ts +4 -0
  104. package/dist/obtservices/base/lib/vendor/classes/rail-enterprise-search.d.ts +193 -0
  105. package/dist/obtservices/base/lib/vendor/classes/routehappy-request.d.ts +126 -0
  106. package/dist/obtservices/base/lib/vendor/classes/routehappy-response.d.ts +107 -0
  107. package/dist/obtservices/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +62 -0
  108. package/dist/obtservices/base/lib/vendor/classes/user-favourite.enum.d.ts +12 -0
  109. package/dist/obtservices/base/lib/vendor/classes/validator.checker.d.ts +6 -0
  110. package/dist/obtservices/base/lib/vendor/fetchers/basket-fetcher.d.ts +20 -0
  111. package/dist/obtservices/base/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +23 -0
  112. package/dist/obtservices/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +20 -0
  113. package/dist/obtservices/base/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +23 -0
  114. package/dist/obtservices/base/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +21 -0
  115. package/dist/obtservices/base/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +23 -0
  116. package/dist/obtservices/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +23 -0
  117. package/dist/obtservices/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +23 -0
  118. package/dist/obtservices/base/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +21 -0
  119. package/dist/obtservices/base/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +21 -0
  120. package/dist/obtservices/base/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +21 -0
  121. package/dist/obtservices/base/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +21 -0
  122. package/dist/obtservices/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +20 -0
  123. package/dist/obtservices/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +21 -0
  124. package/dist/obtservices/base/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +21 -0
  125. package/dist/obtservices/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +21 -0
  126. package/dist/obtservices/base/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +24 -0
  127. package/dist/obtservices/base/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +23 -0
  128. package/dist/obtservices/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +23 -0
  129. package/dist/obtservices/base/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +20 -0
  130. package/dist/obtservices/base/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +23 -0
  131. package/dist/obtservices/base/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +11 -0
  132. package/dist/obtservices/base/lib/vendor/fetchers/parking-quote-fetcher.d.ts +23 -0
  133. package/dist/obtservices/base/lib/vendor/fetchers/rail-quote-fetcher.d.ts +23 -0
  134. package/dist/obtservices/base/lib/vendor/fetchers/search-airlines.fetcher.d.ts +20 -0
  135. package/dist/obtservices/base/lib/vendor/fetchers/search-airports-fetcher.d.ts +20 -0
  136. package/dist/obtservices/base/lib/vendor/fetchers/search-cities.fetcher.d.ts +21 -0
  137. package/dist/obtservices/base/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +20 -0
  138. package/dist/obtservices/base/lib/vendor/fetchers/search-depots.fetcher.d.ts +20 -0
  139. package/dist/obtservices/base/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +21 -0
  140. package/dist/obtservices/base/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +21 -0
  141. package/dist/obtservices/base/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +21 -0
  142. package/dist/obtservices/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +21 -0
  143. package/dist/obtservices/base/lib/vendor/fetchers/user-addresses.fetcher.d.ts +21 -0
  144. package/dist/obtservices/base/lib/vendor/fetchers/user-fetcher.d.ts +20 -0
  145. package/dist/obtservices/base/lib/vendor/fetchers/user-message.fetcher.d.ts +21 -0
  146. package/dist/obtservices/base/lib/vendor/fetchers/user-products-fetcher.d.ts +21 -0
  147. package/dist/obtservices/base/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +23 -0
  148. package/dist/obtservices/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +133 -0
  149. package/dist/obtservices/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +99 -0
  150. package/dist/obtservices/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +64 -0
  151. package/dist/obtservices/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +124 -0
  152. package/dist/obtservices/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +123 -0
  153. package/dist/obtservices/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +192 -0
  154. package/dist/obtservices/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +45 -0
  155. package/dist/obtservices/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +36 -0
  156. package/dist/obtservices/base/lib/vendor/interfaces/Imybookings.service.d.ts +24 -0
  157. package/dist/obtservices/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +58 -0
  158. package/dist/obtservices/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +110 -0
  159. package/dist/obtservices/base/lib/vendor/interfaces/Isearch.service.d.ts +101 -0
  160. package/dist/obtservices/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +42 -0
  161. package/dist/obtservices/base/lib/vendor/interfaces/Iuser.service.d.ts +59 -0
  162. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-classes.interface.d.ts +7 -0
  163. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-filters.interface.d.ts +10 -0
  164. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-sort.interface.d.ts +4 -0
  165. package/dist/obtservices/base/lib/vendor/interfaces/cheapest-price.d.ts +4 -0
  166. package/dist/obtservices/base/lib/vendor/interfaces/code-name.d.ts +4 -0
  167. package/dist/obtservices/base/lib/vendor/interfaces/flight-filters.interface.d.ts +29 -0
  168. package/dist/obtservices/base/lib/vendor/interfaces/flight-multi-destination.interface.d.ts +7 -0
  169. package/dist/obtservices/base/lib/vendor/interfaces/rail-airport-express-stations.interface.d.ts +4 -0
  170. package/dist/obtservices/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +69 -0
  171. package/dist/obtservices/base/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +6 -0
  172. package/dist/obtservices/base/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +19 -0
  173. package/dist/obtservices/base/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +10 -0
  174. package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +26 -0
  175. package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +4 -0
  176. package/dist/obtservices/base/lib/vendor/interfaces/search-objects.interface.d.ts +16 -0
  177. package/dist/obtservices/base/lib/vendor/interfaces/select-filter.interface.d.ts +5 -0
  178. package/dist/obtservices/base/lib/vendor/interfaces/user.data.d.ts +21 -0
  179. package/dist/obtservices/base/lib/vendor/interfaces/value-display.d.ts +4 -0
  180. package/dist/obtservices/base/lib/vendor/models/login.model.d.ts +52 -0
  181. package/dist/obtservices/base/lib/vendor/models/regexp.model.d.ts +10 -0
  182. package/dist/obtservices/base/lib/vendor/models/traveller.object.d.ts +22 -0
  183. package/dist/obtservices/base/lib/vendor/services/enterprise-basket.service.d.ts +177 -0
  184. package/dist/obtservices/base/lib/vendor/services/hotel-avallibility.service.d.ts +31 -0
  185. package/dist/obtservices/base/lib/vendor/services/http-call.service.d.ts +17 -0
  186. package/dist/obtservices/base/lib/vendor/services/logon.service.d.ts +39 -0
  187. package/dist/obtservices/base/lib/vendor/services/modal-opener.service.d.ts +13 -0
  188. package/dist/obtservices/base/lib/vendor/services/my-bookings.service.d.ts +31 -0
  189. package/dist/obtservices/base/lib/vendor/services/routehappy.service.d.ts +47 -0
  190. package/dist/obtservices/base/lib/vendor/services/search.service.d.ts +236 -0
  191. package/dist/obtservices/base/lib/vendor/services/storage.service.d.ts +9 -0
  192. package/dist/obtservices/base/lib/vendor/services/url.service.d.ts +10 -0
  193. package/dist/obtservices/base/lib/vendor/services/user.service.d.ts +62 -0
  194. package/dist/obtservices/base/lib/vendor/services/webtoken.service.d.ts +20 -0
  195. package/dist/obtservices/base/lib/vendor/testers/base.tester.d.ts +11 -0
  196. package/dist/obtservices/base/lib/vendor/testers/postcode-validate.tester.d.ts +17 -0
  197. package/dist/obtservices/base/lib/vendor/testers/validate-mi-free-value.tester.d.ts +17 -0
  198. package/dist/obtservices/base/lib/vendor/types/graphql.types.d.ts +5597 -0
  199. package/dist/obtservices/base/lib/vendor/types/types.d.ts +444 -0
  200. package/dist/obtservices/base/lib/vendor/updaters/accept-new-price.updater.d.ts +20 -0
  201. package/dist/obtservices/base/lib/vendor/updaters/add-item-to-basket.updater.d.ts +20 -0
  202. package/dist/obtservices/base/lib/vendor/updaters/addUserToBasketItem.d.ts +20 -0
  203. package/dist/obtservices/base/lib/vendor/updaters/book-basket-updater.d.ts +20 -0
  204. package/dist/obtservices/base/lib/vendor/updaters/create-basket-updater.d.ts +20 -0
  205. package/dist/obtservices/base/lib/vendor/updaters/move-basket-item-to-basket.d.ts +20 -0
  206. package/dist/obtservices/base/lib/vendor/updaters/object-updater-enterprise.d.ts +11 -0
  207. package/dist/obtservices/base/lib/vendor/updaters/remove-basket-updater.d.ts +19 -0
  208. package/dist/obtservices/base/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +20 -0
  209. package/dist/obtservices/base/lib/vendor/updaters/remove-recent-search-updater.d.ts +19 -0
  210. package/dist/obtservices/base/lib/vendor/updaters/remove-user-address-updater.d.ts +19 -0
  211. package/dist/obtservices/base/lib/vendor/updaters/revalidate-basket-updater.d.ts +20 -0
  212. package/dist/obtservices/base/lib/vendor/updaters/save-recent-search-updater.d.ts +20 -0
  213. package/dist/obtservices/base/lib/vendor/updaters/save-user-address.updater.d.ts +20 -0
  214. package/dist/obtservices/base/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +20 -0
  215. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +20 -0
  216. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-group.d.ts +20 -0
  217. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +20 -0
  218. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.d.ts +20 -0
  219. package/dist/obtservices/base/lib/vendor/updaters/update-basket-notes-updater.d.ts +20 -0
  220. package/dist/obtservices/base/lib/vendor/updaters/update-basket-title-updater.d.ts +20 -0
  221. package/dist/obtservices/base/obtservices-base.d.ts +9 -0
  222. package/dist/obtservices/base/obtservices-base.metadata.json +1 -0
  223. package/dist/obtservices/base/package.json +11 -0
  224. package/dist/obtservices/bundles/obtservices-angular.umd.js +32033 -0
  225. package/dist/obtservices/bundles/obtservices-angular.umd.js.map +1 -0
  226. package/dist/obtservices/bundles/obtservices-angular.umd.min.js +2 -0
  227. package/dist/obtservices/bundles/obtservices-angular.umd.min.js.map +1 -0
  228. package/dist/obtservices/bundles/obtservices-base.umd.js +18609 -0
  229. package/dist/obtservices/bundles/obtservices-base.umd.js.map +1 -0
  230. package/dist/obtservices/bundles/obtservices-base.umd.min.js +16 -0
  231. package/dist/obtservices/bundles/obtservices-base.umd.min.js.map +1 -0
  232. package/dist/obtservices/bundles/obtservices.umd.js +18 -0
  233. package/dist/obtservices/bundles/obtservices.umd.js.map +1 -0
  234. package/dist/obtservices/bundles/obtservices.umd.min.js +2 -0
  235. package/dist/obtservices/bundles/obtservices.umd.min.js.map +1 -0
  236. package/dist/obtservices/esm2015/angular/classes.js +4 -0
  237. package/dist/obtservices/esm2015/angular/components/basket-panel.js +113 -0
  238. package/dist/obtservices/esm2015/angular/components/with-component.js +26 -0
  239. package/dist/obtservices/esm2015/angular/components.js +3 -0
  240. package/dist/obtservices/esm2015/angular/data.js +5 -0
  241. package/dist/obtservices/esm2015/angular/fetchers.js +33 -0
  242. package/dist/obtservices/esm2015/angular/lib/vendor/classes/environment.js +10 -0
  243. package/dist/obtservices/esm2015/angular/lib/vendor/classes/event-messenager.js +16 -0
  244. package/dist/obtservices/esm2015/angular/lib/vendor/classes/helpers.js +81 -0
  245. package/dist/obtservices/esm2015/angular/lib/vendor/data/airports.data.json +5508 -0
  246. package/dist/obtservices/esm2015/angular/lib/vendor/data/flight-booking.data.json +136 -0
  247. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/basket-fetcher.js +22 -0
  248. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/cabhire-quote-fetcher.js +25 -0
  249. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +25 -0
  250. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-quote-fetcher.js +25 -0
  251. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-office-names.fetcher.js +25 -0
  252. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.js +25 -0
  253. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/eurostar-quote.fetcher.js +25 -0
  254. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/flight-quote.fetcher.js +25 -0
  255. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-cards.fetcher.js +25 -0
  256. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-station.fetcher.js +25 -0
  257. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.js +25 -0
  258. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.js +25 -0
  259. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +25 -0
  260. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +25 -0
  261. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-users-baskets-fetcher.js +25 -0
  262. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +25 -0
  263. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.js +25 -0
  264. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-quote-fetcher.js +25 -0
  265. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/irl-quote-fetcher.js +25 -0
  266. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/lounge-quote.fetcher.js +25 -0
  267. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/parking-quote-fetcher.js +25 -0
  268. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/rail-quote-fetcher.js +25 -0
  269. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airlines-fetcher.js +22 -0
  270. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airports-fetcher.js +22 -0
  271. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-cities.fetcher.js +25 -0
  272. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +22 -0
  273. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-depots.fetcher.js +25 -0
  274. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.js +25 -0
  275. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-postcodes.fetcher.js +25 -0
  276. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-rail-stations.fetcher.js +25 -0
  277. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +25 -0
  278. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-addresses.fetcher.js +25 -0
  279. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-fetcher.js +22 -0
  280. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-message.fetcher.js +25 -0
  281. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-products-fetcher.js +25 -0
  282. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-ui-configs-fetcher.js +25 -0
  283. package/dist/obtservices/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +91 -0
  284. package/dist/obtservices/esm2015/angular/lib/vendor/services/hotel-avallibility.service.js +28 -0
  285. package/dist/obtservices/esm2015/angular/lib/vendor/services/http-call.service.js +220 -0
  286. package/dist/obtservices/esm2015/angular/lib/vendor/services/logon.service.js +41 -0
  287. package/dist/obtservices/esm2015/angular/lib/vendor/services/modal-opener.service.js +15 -0
  288. package/dist/obtservices/esm2015/angular/lib/vendor/services/my-bookings.service.js +22 -0
  289. package/dist/obtservices/esm2015/angular/lib/vendor/services/route-happy.service.js +22 -0
  290. package/dist/obtservices/esm2015/angular/lib/vendor/services/search.service.js +142 -0
  291. package/dist/obtservices/esm2015/angular/lib/vendor/services/storage.service.js +79 -0
  292. package/dist/obtservices/esm2015/angular/lib/vendor/services/user.service.js +31 -0
  293. package/dist/obtservices/esm2015/angular/lib/vendor/services/webtoken.service.js +59 -0
  294. package/dist/obtservices/esm2015/angular/lib/vendor/testers/postcode-validate.tester.js +22 -0
  295. package/dist/obtservices/esm2015/angular/lib/vendor/testers/validate-mi-free-value.tester.js +22 -0
  296. package/dist/obtservices/esm2015/angular/lib/vendor/types/graphql.angular.types.js +5662 -0
  297. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/accept-new-price.updater.js +22 -0
  298. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/add-item-to-basket.updater.js +22 -0
  299. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/addUserToBasketItem.js +22 -0
  300. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/book-basket-updater.js +22 -0
  301. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/create-basket-updater.js +22 -0
  302. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/move-basket-item-to-basket.js +22 -0
  303. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-basket-updater.js +22 -0
  304. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-item-from-basket.updater.js +22 -0
  305. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-recent-search.updater.js +22 -0
  306. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-user-address.updater.js +22 -0
  307. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/revalidate-basket-updater.js +22 -0
  308. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-recent-search.updater.js +22 -0
  309. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-user-address.updater.js +22 -0
  310. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/send-basket-for-approval.updater.js +22 -0
  311. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +22 -0
  312. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-group.js +22 -0
  313. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.js +22 -0
  314. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-payment-option.updater.js +22 -0
  315. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-notes-updater.js +22 -0
  316. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-title-updater.js +22 -0
  317. package/dist/obtservices/esm2015/angular/obtservices-angular.js +18 -0
  318. package/dist/obtservices/esm2015/angular/obtservices.module.js +128 -0
  319. package/dist/obtservices/esm2015/angular/public_api.js +9 -0
  320. package/dist/obtservices/esm2015/angular/services.js +12 -0
  321. package/dist/obtservices/esm2015/angular/types.js +2 -0
  322. package/dist/obtservices/esm2015/angular/updaters.js +14 -0
  323. package/dist/obtservices/esm2015/base/classes.js +28 -0
  324. package/dist/obtservices/esm2015/base/fetchers.js +37 -0
  325. package/dist/obtservices/esm2015/base/interfaces.js +30 -0
  326. package/dist/obtservices/esm2015/base/lib/vendor/classes/base-enterprise.js +78 -0
  327. package/dist/obtservices/esm2015/base/lib/vendor/classes/base-network-call.js +24 -0
  328. package/dist/obtservices/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +35 -0
  329. package/dist/obtservices/esm2015/base/lib/vendor/classes/bookable-basket.js +237 -0
  330. package/dist/obtservices/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +696 -0
  331. package/dist/obtservices/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +1204 -0
  332. package/dist/obtservices/esm2015/base/lib/vendor/classes/enviroment.js +12 -0
  333. package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +1462 -0
  334. package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-search-type.enum.js +6 -0
  335. package/dist/obtservices/esm2015/base/lib/vendor/classes/event-messenager.js +17 -0
  336. package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1640 -0
  337. package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-search-type.enum.js +7 -0
  338. package/dist/obtservices/esm2015/base/lib/vendor/classes/helpers.js +978 -0
  339. package/dist/obtservices/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +1022 -0
  340. package/dist/obtservices/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +1117 -0
  341. package/dist/obtservices/esm2015/base/lib/vendor/classes/limited-cache.class.js +64 -0
  342. package/dist/obtservices/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +323 -0
  343. package/dist/obtservices/esm2015/base/lib/vendor/classes/management-info-and-valid.js +174 -0
  344. package/dist/obtservices/esm2015/base/lib/vendor/classes/modal-types.enum.js +22 -0
  345. package/dist/obtservices/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +397 -0
  346. package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-direction.enum.js +6 -0
  347. package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +1324 -0
  348. package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-request.js +2 -0
  349. package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-response.js +8 -0
  350. package/dist/obtservices/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +250 -0
  351. package/dist/obtservices/esm2015/base/lib/vendor/classes/user-favourite.enum.js +15 -0
  352. package/dist/obtservices/esm2015/base/lib/vendor/classes/validator.checker.js +4 -0
  353. package/dist/obtservices/esm2015/base/lib/vendor/data/countries.json +1212 -0
  354. package/dist/obtservices/esm2015/base/lib/vendor/data/euro-stations.json +30 -0
  355. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/basket-fetcher.js +11 -0
  356. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/cabhire-quote-fetcher.js +11 -0
  357. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +10 -0
  358. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-quote-fetcher.js +11 -0
  359. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-office-names.fetcher.js +11 -0
  360. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-quicklist.fetcher.js +11 -0
  361. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +11 -0
  362. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +11 -0
  363. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-cards.fetcher.js +11 -0
  364. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-station.fetcher.js +11 -0
  365. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-risk-alerts.fetcher.js +11 -0
  366. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-company-offices.fetcher.js +11 -0
  367. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +10 -0
  368. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +10 -0
  369. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-users-baskets-fetcher.js +10 -0
  370. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +10 -0
  371. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-avaliability-fetcher.js +22 -0
  372. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-quote-fetcher.js +11 -0
  373. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +11 -0
  374. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/list-fetchable-enterprise.js +27 -0
  375. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/lounge-quote.fetcher.js +11 -0
  376. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/object-fetchable-enterprise.js +11 -0
  377. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/parking-quote-fetcher.js +11 -0
  378. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/rail-quote-fetcher.js +11 -0
  379. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airlines.fetcher.js +11 -0
  380. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airports-fetcher.js +10 -0
  381. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-cities.fetcher.js +11 -0
  382. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +11 -0
  383. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-depots.fetcher.js +10 -0
  384. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-hotel-chains.fetcher.js +11 -0
  385. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-postcodes.fetcher.js +11 -0
  386. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-rail-stations.fetcher.js +11 -0
  387. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +11 -0
  388. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-addresses.fetcher.js +11 -0
  389. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-fetcher.js +10 -0
  390. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-message.fetcher.js +11 -0
  391. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-products-fetcher.js +11 -0
  392. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-ui-configs-fetcher.js +11 -0
  393. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +17 -0
  394. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +2 -0
  395. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +2 -0
  396. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +2 -0
  397. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +2 -0
  398. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +18 -0
  399. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +2 -0
  400. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +2 -0
  401. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +2 -0
  402. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +2 -0
  403. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +2 -0
  404. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isearch.service.js +2 -0
  405. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +2 -0
  406. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iuser.service.js +2 -0
  407. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-classes.interface.js +2 -0
  408. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-filters.interface.js +2 -0
  409. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-sort.interface.js +2 -0
  410. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/cheapest-price.js +2 -0
  411. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/code-name.js +2 -0
  412. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -0
  413. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-multi-destination.interface.js +2 -0
  414. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-airport-express-stations.interface.js +2 -0
  415. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +2 -0
  416. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-journey-leg.interface.js +2 -0
  417. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +2 -0
  418. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +2 -0
  419. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-group.interface.js +2 -0
  420. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +2 -0
  421. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/search-objects.interface.js +2 -0
  422. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/select-filter.interface.js +2 -0
  423. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/user.data.js +2 -0
  424. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/value-display.js +2 -0
  425. package/dist/obtservices/esm2015/base/lib/vendor/models/login.model.js +71 -0
  426. package/dist/obtservices/esm2015/base/lib/vendor/models/regexp.model.js +13 -0
  427. package/dist/obtservices/esm2015/base/lib/vendor/models/traveller.object.js +38 -0
  428. package/dist/obtservices/esm2015/base/lib/vendor/services/enterprise-basket.service.js +669 -0
  429. package/dist/obtservices/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +165 -0
  430. package/dist/obtservices/esm2015/base/lib/vendor/services/http-call.service.js +16 -0
  431. package/dist/obtservices/esm2015/base/lib/vendor/services/logon.service.js +177 -0
  432. package/dist/obtservices/esm2015/base/lib/vendor/services/modal-opener.service.js +20 -0
  433. package/dist/obtservices/esm2015/base/lib/vendor/services/my-bookings.service.js +124 -0
  434. package/dist/obtservices/esm2015/base/lib/vendor/services/routehappy.service.js +196 -0
  435. package/dist/obtservices/esm2015/base/lib/vendor/services/search.service.js +1281 -0
  436. package/dist/obtservices/esm2015/base/lib/vendor/services/storage.service.js +3 -0
  437. package/dist/obtservices/esm2015/base/lib/vendor/services/url.service.js +12 -0
  438. package/dist/obtservices/esm2015/base/lib/vendor/services/user.service.js +223 -0
  439. package/dist/obtservices/esm2015/base/lib/vendor/services/webtoken.service.js +56 -0
  440. package/dist/obtservices/esm2015/base/lib/vendor/testers/base.tester.js +11 -0
  441. package/dist/obtservices/esm2015/base/lib/vendor/testers/postcode-validate.tester.js +10 -0
  442. package/dist/obtservices/esm2015/base/lib/vendor/testers/validate-mi-free-value.tester.js +10 -0
  443. package/dist/obtservices/esm2015/base/lib/vendor/types/graphql.types.js +456 -0
  444. package/dist/obtservices/esm2015/base/lib/vendor/types/types.js +161 -0
  445. package/dist/obtservices/esm2015/base/lib/vendor/updaters/accept-new-price.updater.js +10 -0
  446. package/dist/obtservices/esm2015/base/lib/vendor/updaters/add-item-to-basket.updater.js +10 -0
  447. package/dist/obtservices/esm2015/base/lib/vendor/updaters/addUserToBasketItem.js +10 -0
  448. package/dist/obtservices/esm2015/base/lib/vendor/updaters/book-basket-updater.js +11 -0
  449. package/dist/obtservices/esm2015/base/lib/vendor/updaters/create-basket-updater.js +11 -0
  450. package/dist/obtservices/esm2015/base/lib/vendor/updaters/move-basket-item-to-basket.js +10 -0
  451. package/dist/obtservices/esm2015/base/lib/vendor/updaters/object-updater-enterprise.js +11 -0
  452. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-basket-updater.js +11 -0
  453. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-item-from-basket.updater.js +10 -0
  454. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-recent-search-updater.js +11 -0
  455. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-user-address-updater.js +11 -0
  456. package/dist/obtservices/esm2015/base/lib/vendor/updaters/revalidate-basket-updater.js +10 -0
  457. package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-recent-search-updater.js +11 -0
  458. package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-user-address.updater.js +10 -0
  459. package/dist/obtservices/esm2015/base/lib/vendor/updaters/send-basket-for-approval.updater.js +10 -0
  460. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +10 -0
  461. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-group.js +10 -0
  462. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-value-updater.js +10 -0
  463. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.js +10 -0
  464. package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-notes-updater.js +10 -0
  465. package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-title-updater.js +10 -0
  466. package/dist/obtservices/esm2015/base/models.js +4 -0
  467. package/dist/obtservices/esm2015/base/obtservices-base.js +9 -0
  468. package/dist/obtservices/esm2015/base/public_api.js +9 -0
  469. package/dist/obtservices/esm2015/base/services.js +13 -0
  470. package/dist/obtservices/esm2015/base/testers.js +3 -0
  471. package/dist/obtservices/esm2015/base/types.js +2 -0
  472. package/dist/obtservices/esm2015/base/updaters.js +21 -0
  473. package/dist/obtservices/esm2015/obtservices.js +5 -0
  474. package/dist/obtservices/esm2015/public_api.js +2 -0
  475. package/dist/obtservices/fesm2015/obtservices-angular.js +35267 -0
  476. package/dist/obtservices/fesm2015/obtservices-angular.js.map +1 -0
  477. package/dist/obtservices/fesm2015/obtservices-base.js +16573 -0
  478. package/dist/obtservices/fesm2015/obtservices-base.js.map +1 -0
  479. package/dist/obtservices/fesm2015/obtservices.js +8 -0
  480. package/dist/obtservices/fesm2015/obtservices.js.map +1 -0
  481. package/dist/obtservices/obtservices.d.ts +4 -0
  482. package/dist/obtservices/obtservices.metadata.json +1 -0
  483. package/dist/obtservices/package.json +23 -0
  484. package/dist/obtservices/public_api.d.ts +1 -0
  485. package/dist/obtservices/tsconfig.lib.tsbuildinfo +3 -0
  486. package/package.json +1 -1
  487. package/projects/obtservices/angular/package.json +0 -3
  488. package/projects/obtservices/angular/src/components/basket-panel.ts +0 -139
  489. package/projects/obtservices/angular/src/components/with-component.ts +0 -40
  490. package/projects/obtservices/angular/src/data.ts +0 -5
  491. package/projects/obtservices/angular/src/fetchers.ts +0 -32
  492. package/projects/obtservices/angular/src/lib/vendor/classes/environment.ts +0 -5
  493. package/projects/obtservices/angular/src/lib/vendor/classes/event-messenager.ts +0 -11
  494. package/projects/obtservices/angular/src/lib/vendor/classes/helpers.ts +0 -87
  495. package/projects/obtservices/angular/src/lib/vendor/data/airports.data.json +0 -5508
  496. package/projects/obtservices/angular/src/lib/vendor/data/animations.ts +0 -38
  497. package/projects/obtservices/angular/src/lib/vendor/data/booking-expected-responses.json +0 -100
  498. package/projects/obtservices/angular/src/lib/vendor/data/cities.data.json +0 -31499
  499. package/projects/obtservices/angular/src/lib/vendor/data/countries.json +0 -1212
  500. package/projects/obtservices/angular/src/lib/vendor/data/flight-booking.data.json +0 -136
  501. package/projects/obtservices/angular/src/lib/vendor/data/postcodes1.json +0 -194
  502. package/projects/obtservices/angular/src/lib/vendor/data/rail_addresses.json +0 -2524
  503. package/projects/obtservices/angular/src/lib/vendor/fetchers/basket-fetcher.ts +0 -14
  504. package/projects/obtservices/angular/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -15
  505. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -17
  506. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -16
  507. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -16
  508. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -16
  509. package/projects/obtservices/angular/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -16
  510. package/projects/obtservices/angular/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -16
  511. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -16
  512. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -16
  513. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -18
  514. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -16
  515. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -16
  516. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -16
  517. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -16
  518. package/projects/obtservices/angular/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -16
  519. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -17
  520. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -16
  521. package/projects/obtservices/angular/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -16
  522. package/projects/obtservices/angular/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -16
  523. package/projects/obtservices/angular/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -16
  524. package/projects/obtservices/angular/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -16
  525. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airlines-fetcher.ts +0 -14
  526. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -14
  527. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -16
  528. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -14
  529. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -18
  530. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -16
  531. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -16
  532. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -16
  533. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -16
  534. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -16
  535. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-fetcher.ts +0 -14
  536. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -16
  537. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -16
  538. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -16
  539. package/projects/obtservices/angular/src/lib/vendor/services/enterprise-basket.service.ts +0 -133
  540. package/projects/obtservices/angular/src/lib/vendor/services/hotel-avallibility.service.ts +0 -19
  541. package/projects/obtservices/angular/src/lib/vendor/services/http-call.service.ts +0 -252
  542. package/projects/obtservices/angular/src/lib/vendor/services/logon.service.ts +0 -40
  543. package/projects/obtservices/angular/src/lib/vendor/services/modal-opener.service.ts +0 -9
  544. package/projects/obtservices/angular/src/lib/vendor/services/my-bookings.service.ts +0 -21
  545. package/projects/obtservices/angular/src/lib/vendor/services/route-happy.service.ts +0 -11
  546. package/projects/obtservices/angular/src/lib/vendor/services/search.service.ts +0 -213
  547. package/projects/obtservices/angular/src/lib/vendor/services/storage.service.ts +0 -82
  548. package/projects/obtservices/angular/src/lib/vendor/services/user.service.ts +0 -36
  549. package/projects/obtservices/angular/src/lib/vendor/services/webtoken.service.ts +0 -62
  550. package/projects/obtservices/angular/src/lib/vendor/testers/postcode-validate.tester.ts +0 -14
  551. package/projects/obtservices/angular/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -14
  552. package/projects/obtservices/angular/src/lib/vendor/types/graphql.angular.types.ts +0 -11081
  553. package/projects/obtservices/angular/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -14
  554. package/projects/obtservices/angular/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -14
  555. package/projects/obtservices/angular/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -14
  556. package/projects/obtservices/angular/src/lib/vendor/updaters/book-basket-updater.ts +0 -14
  557. package/projects/obtservices/angular/src/lib/vendor/updaters/create-basket-updater.ts +0 -14
  558. package/projects/obtservices/angular/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -14
  559. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-basket-updater.ts +0 -14
  560. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -14
  561. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-recent-search.updater.ts +0 -14
  562. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-user-address.updater.ts +0 -14
  563. package/projects/obtservices/angular/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -14
  564. package/projects/obtservices/angular/src/lib/vendor/updaters/save-recent-search.updater.ts +0 -14
  565. package/projects/obtservices/angular/src/lib/vendor/updaters/save-user-address.updater.ts +0 -11
  566. package/projects/obtservices/angular/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -14
  567. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -14
  568. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -14
  569. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -15
  570. package/projects/obtservices/angular/src/lib/vendor/updaters/set-payment-option.updater.ts +0 -15
  571. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -14
  572. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -14
  573. package/projects/obtservices/angular/src/obtservices.module.ts +0 -131
  574. package/projects/obtservices/base/package.json +0 -3
  575. package/projects/obtservices/base/src/custom.d.ts +0 -3
  576. package/projects/obtservices/base/src/fetchers.ts +0 -36
  577. package/projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts +0 -126
  578. package/projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts +0 -40
  579. package/projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts +0 -68
  580. package/projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts +0 -343
  581. package/projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts +0 -907
  582. package/projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts +0 -1597
  583. package/projects/obtservices/base/src/lib/vendor/classes/empty-enterprise-search.ts +0 -75
  584. package/projects/obtservices/base/src/lib/vendor/classes/enviroment.ts +0 -25
  585. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts +0 -2126
  586. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts +0 -4
  587. package/projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts +0 -23
  588. package/projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts +0 -2399
  589. package/projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts +0 -5
  590. package/projects/obtservices/base/src/lib/vendor/classes/helpers.ts +0 -1233
  591. package/projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts +0 -1370
  592. package/projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts +0 -1380
  593. package/projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts +0 -70
  594. package/projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts +0 -444
  595. package/projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts +0 -268
  596. package/projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts +0 -28
  597. package/projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts +0 -541
  598. package/projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts +0 -4
  599. package/projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts +0 -1751
  600. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-request.ts +0 -146
  601. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts +0 -128
  602. package/projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts +0 -375
  603. package/projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts +0 -12
  604. package/projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts +0 -7
  605. package/projects/obtservices/base/src/lib/vendor/data/airports.data.json +0 -5508
  606. package/projects/obtservices/base/src/lib/vendor/data/booking-expected-responses.json +0 -100
  607. package/projects/obtservices/base/src/lib/vendor/data/cities.data.json +0 -31499
  608. package/projects/obtservices/base/src/lib/vendor/data/countries.json +0 -1212
  609. package/projects/obtservices/base/src/lib/vendor/data/euro-stations.json +0 -30
  610. package/projects/obtservices/base/src/lib/vendor/data/flight-booking.data.json +0 -136
  611. package/projects/obtservices/base/src/lib/vendor/data/postcodes1.json +0 -194
  612. package/projects/obtservices/base/src/lib/vendor/data/rail_addresses.json +0 -2524
  613. package/projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts +0 -29
  614. package/projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -34
  615. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -35
  616. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -34
  617. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -34
  618. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -35
  619. package/projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -35
  620. package/projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -35
  621. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -35
  622. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -35
  623. package/projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -35
  624. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -34
  625. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -35
  626. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -36
  627. package/projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -33
  628. package/projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -35
  629. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -53
  630. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -35
  631. package/projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -34
  632. package/projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts +0 -59
  633. package/projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -34
  634. package/projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts +0 -20
  635. package/projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -34
  636. package/projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -34
  637. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts +0 -30
  638. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -29
  639. package/projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -34
  640. package/projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -32
  641. package/projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -34
  642. package/projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -34
  643. package/projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -37
  644. package/projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -35
  645. package/projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -35
  646. package/projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -34
  647. package/projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts +0 -27
  648. package/projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -34
  649. package/projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -35
  650. package/projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -35
  651. package/projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts +0 -174
  652. package/projects/obtservices/base/src/lib/vendor/interfaces/Icarhire-enterprise-search.ts +0 -143
  653. package/projects/obtservices/base/src/lib/vendor/interfaces/Ienterprise-basket.service.ts +0 -127
  654. package/projects/obtservices/base/src/lib/vendor/interfaces/Ieurostar-enterprise-search.ts +0 -197
  655. package/projects/obtservices/base/src/lib/vendor/interfaces/Iflight-enterprise-search.ts +0 -196
  656. package/projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts +0 -219
  657. package/projects/obtservices/base/src/lib/vendor/interfaces/Iirl-enterprise-search.ts +0 -135
  658. package/projects/obtservices/base/src/lib/vendor/interfaces/Ilounges-enterprise-search.ts +0 -58
  659. package/projects/obtservices/base/src/lib/vendor/interfaces/Imybookings.service.ts +0 -27
  660. package/projects/obtservices/base/src/lib/vendor/interfaces/Iparking-enterprise-search.ts +0 -72
  661. package/projects/obtservices/base/src/lib/vendor/interfaces/Irail-enterprise-search.ts +0 -161
  662. package/projects/obtservices/base/src/lib/vendor/interfaces/Isearch.service.ts +0 -178
  663. package/projects/obtservices/base/src/lib/vendor/interfaces/Isupplementary-booking-info-impl.ts +0 -63
  664. package/projects/obtservices/base/src/lib/vendor/interfaces/Iuser.service.ts +0 -87
  665. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-classes.interface.ts +0 -8
  666. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-filters.interface.ts +0 -11
  667. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-sort.interface.ts +0 -4
  668. package/projects/obtservices/base/src/lib/vendor/interfaces/cheapest-price.ts +0 -4
  669. package/projects/obtservices/base/src/lib/vendor/interfaces/code-name.ts +0 -4
  670. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-filters.interface.ts +0 -41
  671. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-multi-destination.interface.ts +0 -8
  672. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-airport-express-stations.interface.ts +0 -4
  673. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-basket-item.interface.ts +0 -79
  674. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-journey-leg.interface.ts +0 -6
  675. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-recent-search-args.interface.ts +0 -20
  676. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-selected-ticket.interface.ts +0 -11
  677. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-group.interface.ts +0 -29
  678. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-groups.interface.ts +0 -5
  679. package/projects/obtservices/base/src/lib/vendor/interfaces/search-objects.interface.ts +0 -17
  680. package/projects/obtservices/base/src/lib/vendor/interfaces/select-filter.interface.ts +0 -5
  681. package/projects/obtservices/base/src/lib/vendor/interfaces/user.data.ts +0 -22
  682. package/projects/obtservices/base/src/lib/vendor/interfaces/value-display.ts +0 -4
  683. package/projects/obtservices/base/src/lib/vendor/models/login.model.ts +0 -97
  684. package/projects/obtservices/base/src/lib/vendor/models/regexp.model.ts +0 -13
  685. package/projects/obtservices/base/src/lib/vendor/models/traveller.object.ts +0 -61
  686. package/projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts +0 -1150
  687. package/projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts +0 -251
  688. package/projects/obtservices/base/src/lib/vendor/services/http-call.service.ts +0 -57
  689. package/projects/obtservices/base/src/lib/vendor/services/logon.service.ts +0 -245
  690. package/projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts +0 -30
  691. package/projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts +0 -184
  692. package/projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts +0 -275
  693. package/projects/obtservices/base/src/lib/vendor/services/search.service.ts +0 -2026
  694. package/projects/obtservices/base/src/lib/vendor/services/storage.service.ts +0 -15
  695. package/projects/obtservices/base/src/lib/vendor/services/url.service.ts +0 -12
  696. package/projects/obtservices/base/src/lib/vendor/services/user.service.ts +0 -354
  697. package/projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts +0 -66
  698. package/projects/obtservices/base/src/lib/vendor/testers/base.tester.ts +0 -18
  699. package/projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts +0 -24
  700. package/projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -23
  701. package/projects/obtservices/base/src/lib/vendor/types/graphql.types.ts +0 -6184
  702. package/projects/obtservices/base/src/lib/vendor/types/types.ts +0 -630
  703. package/projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -31
  704. package/projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -29
  705. package/projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -30
  706. package/projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts +0 -28
  707. package/projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts +0 -29
  708. package/projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -30
  709. package/projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts +0 -20
  710. package/projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts +0 -29
  711. package/projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -28
  712. package/projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts +0 -29
  713. package/projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts +0 -29
  714. package/projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -29
  715. package/projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts +0 -30
  716. package/projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts +0 -30
  717. package/projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -31
  718. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -30
  719. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -32
  720. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -30
  721. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts +0 -28
  722. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -30
  723. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -30
  724. package/projects/obtservices/base/src/testers.ts +0 -2
  725. package/projects/obtservices/graphQL/autogenerated/index.js +0 -2
  726. package/projects/obtservices/graphQL/autogenerated/mutations/acceptNewPrice.gql +0 -1580
  727. package/projects/obtservices/graphQL/autogenerated/mutations/addItemToBasket.gql +0 -1580
  728. package/projects/obtservices/graphQL/autogenerated/mutations/addUsersToBasketItem.gql +0 -1580
  729. package/projects/obtservices/graphQL/autogenerated/mutations/bookBasket.gql +0 -1580
  730. package/projects/obtservices/graphQL/autogenerated/mutations/cancelBooking.gql +0 -6
  731. package/projects/obtservices/graphQL/autogenerated/mutations/confermaCreateCard.gql +0 -23
  732. package/projects/obtservices/graphQL/autogenerated/mutations/confermaDeleteCard.gql +0 -3
  733. package/projects/obtservices/graphQL/autogenerated/mutations/createBasket.gql +0 -1580
  734. package/projects/obtservices/graphQL/autogenerated/mutations/deleteBasket.gql +0 -3
  735. package/projects/obtservices/graphQL/autogenerated/mutations/deleteFavouriteSearch.gql +0 -3
  736. package/projects/obtservices/graphQL/autogenerated/mutations/deleteRecentSearch.gql +0 -3
  737. package/projects/obtservices/graphQL/autogenerated/mutations/deleteUserAddress.gql +0 -3
  738. package/projects/obtservices/graphQL/autogenerated/mutations/index.js +0 -36
  739. package/projects/obtservices/graphQL/autogenerated/mutations/moveItemToADifferentBasket.gql +0 -1580
  740. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemFromBasket.gql +0 -1580
  741. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemsFromBasket.gql +0 -1580
  742. package/projects/obtservices/graphQL/autogenerated/mutations/removeUserFromBasketItem.gql +0 -1580
  743. package/projects/obtservices/graphQL/autogenerated/mutations/reopenBasket.gql +0 -1580
  744. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasket.gql +0 -1580
  745. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasketItem.gql +0 -1580
  746. package/projects/obtservices/graphQL/autogenerated/mutations/saveFavouriteSearch.gql +0 -348
  747. package/projects/obtservices/graphQL/autogenerated/mutations/saveRecentSearch.gql +0 -348
  748. package/projects/obtservices/graphQL/autogenerated/mutations/saveUserAddress.gql +0 -14
  749. package/projects/obtservices/graphQL/autogenerated/mutations/sendBasketForApproval.gql +0 -1580
  750. package/projects/obtservices/graphQL/autogenerated/mutations/setAddressAsUserPrimary.gql +0 -14
  751. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemLeadPassenger.gql +0 -1580
  752. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIGroup.gql +0 -1580
  753. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIValue.gql +0 -1580
  754. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemPaymentMethod.gql +0 -1580
  755. package/projects/obtservices/graphQL/autogenerated/mutations/setMIDefaultValue.gql +0 -3
  756. package/projects/obtservices/graphQL/autogenerated/mutations/setUserLanguage.gql +0 -339
  757. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketNotes.gql +0 -1580
  758. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketTitle.gql +0 -1580
  759. package/projects/obtservices/graphQL/autogenerated/queries/alive.gql +0 -3
  760. package/projects/obtservices/graphQL/autogenerated/queries/carHireAvailabilityDetailRequest.gql +0 -42
  761. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockClientHotels.gql +0 -23
  762. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockConsumerHotels.gql +0 -23
  763. package/projects/obtservices/graphQL/autogenerated/queries/confermaListCards.gql +0 -11
  764. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockClientHotels.gql +0 -23
  765. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockConsumerHotels.gql +0 -23
  766. package/projects/obtservices/graphQL/autogenerated/queries/getCOVIDMicrositeToken.gql +0 -3
  767. package/projects/obtservices/graphQL/autogenerated/queries/getCancellationInfo.gql +0 -7
  768. package/projects/obtservices/graphQL/autogenerated/queries/getCarHireDepots.gql +0 -13
  769. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOffice.gql +0 -50
  770. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOfficeNames.gql +0 -26
  771. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaQuicklist.gql +0 -131
  772. package/projects/obtservices/graphQL/autogenerated/queries/getCountries.gql +0 -8
  773. package/projects/obtservices/graphQL/autogenerated/queries/getHotelAvailability.gql +0 -78
  774. package/projects/obtservices/graphQL/autogenerated/queries/getHotelChains.gql +0 -3
  775. package/projects/obtservices/graphQL/autogenerated/queries/getIRLSupplierStation.gql +0 -28
  776. package/projects/obtservices/graphQL/autogenerated/queries/getMultipleHotelsAvailability.gql +0 -78
  777. package/projects/obtservices/graphQL/autogenerated/queries/getPostcodeDetails.gql +0 -25
  778. package/projects/obtservices/graphQL/autogenerated/queries/getRailStation.gql +0 -27
  779. package/projects/obtservices/graphQL/autogenerated/queries/getRailcards.gql +0 -6
  780. package/projects/obtservices/graphQL/autogenerated/queries/getRiskAlerts.gql +0 -17
  781. package/projects/obtservices/graphQL/autogenerated/queries/getUser.gql +0 -339
  782. package/projects/obtservices/graphQL/autogenerated/queries/getUserAddresses.gql +0 -14
  783. package/projects/obtservices/graphQL/autogenerated/queries/getUserBasket.gql +0 -1580
  784. package/projects/obtservices/graphQL/autogenerated/queries/getUserBaskets.gql +0 -1580
  785. package/projects/obtservices/graphQL/autogenerated/queries/getUserCompanyOffices.gql +0 -88
  786. package/projects/obtservices/graphQL/autogenerated/queries/getUserCurrentCarbonAllowance.gql +0 -524
  787. package/projects/obtservices/graphQL/autogenerated/queries/getUserFavouriteSearches.gql +0 -348
  788. package/projects/obtservices/graphQL/autogenerated/queries/getUserMIAutoSuggestValues.gql +0 -10
  789. package/projects/obtservices/graphQL/autogenerated/queries/getUserMessages.gql +0 -10
  790. package/projects/obtservices/graphQL/autogenerated/queries/getUserPhoneNumbers.gql +0 -13
  791. package/projects/obtservices/graphQL/autogenerated/queries/getUserRecentSearches.gql +0 -348
  792. package/projects/obtservices/graphQL/autogenerated/queries/getUserServices.gql +0 -16
  793. package/projects/obtservices/graphQL/autogenerated/queries/getUserTravelRules.gql +0 -111
  794. package/projects/obtservices/graphQL/autogenerated/queries/getUserUIConfigs.gql +0 -52
  795. package/projects/obtservices/graphQL/autogenerated/queries/index.js +0 -64
  796. package/projects/obtservices/graphQL/autogenerated/queries/isPostcodeValid.gql +0 -3
  797. package/projects/obtservices/graphQL/autogenerated/queries/postcodeAutoSuggest.gql +0 -3
  798. package/projects/obtservices/graphQL/autogenerated/queries/searchAirlines.gql +0 -32
  799. package/projects/obtservices/graphQL/autogenerated/queries/searchAirports.gql +0 -60
  800. package/projects/obtservices/graphQL/autogenerated/queries/searchCabHire.gql +0 -63
  801. package/projects/obtservices/graphQL/autogenerated/queries/searchCarHire.gql +0 -104
  802. package/projects/obtservices/graphQL/autogenerated/queries/searchCities.gql +0 -14
  803. package/projects/obtservices/graphQL/autogenerated/queries/searchConfermaCities.gql +0 -11
  804. package/projects/obtservices/graphQL/autogenerated/queries/searchEurostar.gql +0 -833
  805. package/projects/obtservices/graphQL/autogenerated/queries/searchFastTrack.gql +0 -46
  806. package/projects/obtservices/graphQL/autogenerated/queries/searchFlights.gql +0 -23
  807. package/projects/obtservices/graphQL/autogenerated/queries/searchFlightsV2.gql +0 -833
  808. package/projects/obtservices/graphQL/autogenerated/queries/searchHotelChains.gql +0 -3
  809. package/projects/obtservices/graphQL/autogenerated/queries/searchHotels.gql +0 -131
  810. package/projects/obtservices/graphQL/autogenerated/queries/searchIRL.gql +0 -514
  811. package/projects/obtservices/graphQL/autogenerated/queries/searchIRLSupplierStations.gql +0 -28
  812. package/projects/obtservices/graphQL/autogenerated/queries/searchLounges.gql +0 -89
  813. package/projects/obtservices/graphQL/autogenerated/queries/searchParking.gql +0 -70
  814. package/projects/obtservices/graphQL/autogenerated/queries/searchPostcodes.gql +0 -25
  815. package/projects/obtservices/graphQL/autogenerated/queries/searchRail.gql +0 -840
  816. package/projects/obtservices/graphQL/autogenerated/queries/searchRailStations.gql +0 -27
  817. package/projects/obtservices/graphQL/autogenerated/queries/searchUserCanBookFor.gql +0 -339
  818. package/projects/obtservices/graphQL/autogenerated/queries/validateBasketItemMI.gql +0 -3
  819. package/projects/obtservices/graphQL/autogenerated/queries/validateUserMIFreeValue.gql +0 -3
  820. package/projects/obtservices/graphQL/documents/acceptNewPrice.graphql +0 -5
  821. package/projects/obtservices/graphQL/documents/addUserToBasketItem.graphql +0 -9
  822. package/projects/obtservices/graphQL/documents/basket.fragments.graphql +0 -171
  823. package/projects/obtservices/graphQL/documents/baskets.graphql +0 -111
  824. package/projects/obtservices/graphQL/documents/bookBasket.graphql +0 -9
  825. package/projects/obtservices/graphQL/documents/cabhire.graphql +0 -66
  826. package/projects/obtservices/graphQL/documents/carHireAvailabilityDetailRequest.graphql +0 -44
  827. package/projects/obtservices/graphQL/documents/carhire.graphql +0 -117
  828. package/projects/obtservices/graphQL/documents/deleteRecentSearch.graphql +0 -3
  829. package/projects/obtservices/graphQL/documents/deleteUserAddress.graphql +0 -3
  830. package/projects/obtservices/graphQL/documents/error.fragments.graphql +0 -10
  831. package/projects/obtservices/graphQL/documents/flights.graphql +0 -830
  832. package/projects/obtservices/graphQL/documents/getCarHireDepots.graphql +0 -13
  833. package/projects/obtservices/graphQL/documents/getConfermaOfficeNames.graphql +0 -11
  834. package/projects/obtservices/graphQL/documents/getConfermaQuicklist.graphql +0 -108
  835. package/projects/obtservices/graphQL/documents/getRailStation.graphql +0 -31
  836. package/projects/obtservices/graphQL/documents/getRailcards.graphql +0 -6
  837. package/projects/obtservices/graphQL/documents/getRiskAlerts.graphql +0 -24
  838. package/projects/obtservices/graphQL/documents/getUserAddresses.graphql +0 -14
  839. package/projects/obtservices/graphQL/documents/getUserCompanyOffices.graphql +0 -18
  840. package/projects/obtservices/graphQL/documents/getUserCurrentCarbonAllowance.graphql +0 -29
  841. package/projects/obtservices/graphQL/documents/getUserMIAutoSuggestValues.graphql +0 -10
  842. package/projects/obtservices/graphQL/documents/getUserPhoneNumbers.graphql +0 -13
  843. package/projects/obtservices/graphQL/documents/getUserRecentSearches.graphql +0 -20
  844. package/projects/obtservices/graphQL/documents/hotels.graphql +0 -242
  845. package/projects/obtservices/graphQL/documents/isPostcodeValid.graphql +0 -3
  846. package/projects/obtservices/graphQL/documents/lookups.graphql +0 -54
  847. package/projects/obtservices/graphQL/documents/lounges.graphql +0 -88
  848. package/projects/obtservices/graphQL/documents/moveItemToADifferentBasket.graphql +0 -9
  849. package/projects/obtservices/graphQL/documents/parking.graphql +0 -79
  850. package/projects/obtservices/graphQL/documents/rail.graphql +0 -645
  851. package/projects/obtservices/graphQL/documents/saveRecentSearch.graphql +0 -5
  852. package/projects/obtservices/graphQL/documents/saveUserAddress.graphql +0 -14
  853. package/projects/obtservices/graphQL/documents/searchAirlines.graphql +0 -32
  854. package/projects/obtservices/graphQL/documents/searchCities.graphql +0 -14
  855. package/projects/obtservices/graphQL/documents/searchConfermaCities.graphql +0 -11
  856. package/projects/obtservices/graphQL/documents/searchEurostar.graphql +0 -810
  857. package/projects/obtservices/graphQL/documents/searchHotelChains.graphql +0 -3
  858. package/projects/obtservices/graphQL/documents/searchIRL.graphql +0 -521
  859. package/projects/obtservices/graphQL/documents/searchPostcodes.graphql +0 -7
  860. package/projects/obtservices/graphQL/documents/searchRailStations.graphql +0 -27
  861. package/projects/obtservices/graphQL/documents/searchUserAddresses.graphql +0 -14
  862. package/projects/obtservices/graphQL/documents/set-basker-item-mi-group.graphql +0 -9
  863. package/projects/obtservices/graphQL/documents/setBasketItemLeadPassenger.graphql +0 -5
  864. package/projects/obtservices/graphQL/documents/setBasketItemMIValue.graphql +0 -16
  865. package/projects/obtservices/graphQL/documents/setBasketItemPaymentMethod.graphql +0 -12
  866. package/projects/obtservices/graphQL/documents/updateBasketNotes.graphql +0 -10
  867. package/projects/obtservices/graphQL/documents/updateBasketTitle.graphql +0 -10
  868. package/projects/obtservices/graphQL/documents/user.fragments.graphql +0 -65
  869. package/projects/obtservices/graphQL/documents/user.graphql +0 -95
  870. package/projects/obtservices/graphQL/documents/validateUserMIFreeValue.graphql +0 -3
  871. package/projects/obtservices/graphQL/schema/schema.graphql +0 -2635
  872. package/projects/obtservices/karma.conf.js +0 -32
  873. package/projects/obtservices/ng-package.json +0 -7
  874. package/projects/obtservices/package-lock.json +0 -5
  875. package/projects/obtservices/package.json +0 -12
  876. package/projects/obtservices/src/obtservices.ts +0 -0
  877. package/projects/obtservices/src/public_api.ts +0 -1
  878. package/projects/obtservices/tsconfig.lib.json +0 -30
  879. package/projects/obtservices/tsconfig.spec.json +0 -17
  880. package/projects/obtservices/tslint.json +0 -17
  881. /package/{projects → dist}/obtservices/README.md +0 -0
  882. /package/{projects/obtservices/angular/src/classes.ts → dist/obtservices/angular/classes.d.ts} +0 -0
  883. /package/{projects/obtservices/angular/src/components.ts → dist/obtservices/angular/components.d.ts} +0 -0
  884. /package/{projects/obtservices/angular/src/public_api.ts → dist/obtservices/angular/public_api.d.ts} +0 -0
  885. /package/{projects/obtservices/angular/src/services.ts → dist/obtservices/angular/services.d.ts} +0 -0
  886. /package/{projects/obtservices/angular/src/types.ts → dist/obtservices/angular/types.d.ts} +0 -0
  887. /package/{projects/obtservices/angular/src/updaters.ts → dist/obtservices/angular/updaters.d.ts} +0 -0
  888. /package/{projects/obtservices/base/src/classes.ts → dist/obtservices/base/classes.d.ts} +0 -0
  889. /package/{projects/obtservices/base/src/interfaces.ts → dist/obtservices/base/interfaces.d.ts} +0 -0
  890. /package/{projects/obtservices/base/src/models.ts → dist/obtservices/base/models.d.ts} +0 -0
  891. /package/{projects/obtservices/base/src/public_api.ts → dist/obtservices/base/public_api.d.ts} +0 -0
  892. /package/{projects/obtservices/base/src/services.ts → dist/obtservices/base/services.d.ts} +0 -0
  893. /package/{projects/obtservices/angular/src/testers.ts → dist/obtservices/base/testers.d.ts} +0 -0
  894. /package/{projects/obtservices/base/src/types.ts → dist/obtservices/base/types.d.ts} +0 -0
  895. /package/{projects/obtservices/base/src/updaters.ts → dist/obtservices/base/updaters.d.ts} +0 -0
@@ -0,0 +1,1117 @@
1
+ import moment from 'moment';
2
+ import { map } from 'rxjs/operators';
3
+ import { BaseEnterpriseSearch } from './base-enterprise';
4
+ import { IrlClass, ServiceType, IrlJourneyType } from '../types/graphql.types';
5
+ export var IrlSearchCriteria;
6
+ (function (IrlSearchCriteria) {
7
+ IrlSearchCriteria["Depart"] = "Depart After";
8
+ IrlSearchCriteria["Arrive"] = "Arrive Before";
9
+ })(IrlSearchCriteria || (IrlSearchCriteria = {}));
10
+ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
11
+ constructor(Irlfetcher,
12
+ // private getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>, // doesnt exist yet
13
+ helpers, basketService, storageService, searchService) {
14
+ super(storageService);
15
+ this.Irlfetcher = Irlfetcher;
16
+ this.helpers = helpers;
17
+ this.basketService = basketService;
18
+ this.searchService = searchService;
19
+ this.resultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
20
+ this.searchTypes = [
21
+ { display: 'Return', value: IrlJourneyType.ReturnJourney },
22
+ { display: 'One-Way', value: IrlJourneyType.SingleJourney }
23
+ // { display: 'Open Return', value: IrlJourneyType.OpenReturnJourney },
24
+ // { display: 'Dual Singles', value: IrlJourneyType.DualSingleJourney },
25
+ ];
26
+ this.classTypes = [
27
+ { display: 'Any', value: IrlClass.All },
28
+ { display: 'Standard', value: IrlClass.Standard },
29
+ { display: 'First', value: IrlClass.First }
30
+ ];
31
+ this.ageRanges = [{ key: 'child', value: 'Child (0-3)' }, { key: 'child', value: 'Child (4-5)' }, { key: 'child', value: 'Child (6-11)' }, { key: 'youth', value: 'Youth (12-14)' }, { key: 'youth', value: 'Youth (15-25)' }, { key: 'adult', value: 'Adult (26-59)' }, { key: 'senior', value: 'Senior (60+)' }];
32
+ this.railCriteria = [IrlSearchCriteria.Depart, IrlSearchCriteria.Arrive];
33
+ this.travelCards = [
34
+ { display: 'Young persons railcard', value: 'YNG' },
35
+ { display: 'Disability railcard', value: 'DIS' },
36
+ { display: 'Family railcard', value: 'FAM' },
37
+ { display: 'Forces railcard', value: 'HMF' },
38
+ { display: 'Travel agency discount', value: 'TAD' }
39
+ ];
40
+ this.type = ServiceType.InternationalRail;
41
+ this.minOutboundDate = {
42
+ year: moment().year(),
43
+ month: moment().month() + 1,
44
+ day: moment().date()
45
+ };
46
+ this.minInboundDate = {
47
+ year: moment().year(),
48
+ month: moment().month() + 1,
49
+ day: moment().date()
50
+ };
51
+ this._supplier = null;
52
+ this._countryCode = null;
53
+ this._class = null;
54
+ this._outboundDepartureDateTime = null;
55
+ this._departureLocationId = null;
56
+ this._arrivalLocationId = null;
57
+ this._adults = 0;
58
+ this._children = 0;
59
+ this._returnDepartureDateTime = null;
60
+ this._ageRange = null;
61
+ // get outboundCriteria(): IrlSearchCriteria {
62
+ // return this.tempParams.outboundCriteria;
63
+ // }
64
+ // set outboundCriteria(newCrit: IrlSearchCriteria) {
65
+ // // console.warn(`+++ Setting New Criteria: ${newCrit} +++`);
66
+ // this.tempParams.outboundCriteria = newCrit;
67
+ // this._isValid();
68
+ // }
69
+ // ! might not need this?
70
+ // get inBoundDateTime(): moment.Moment {
71
+ // return this.tempParams.inBoundDateTime;
72
+ // }
73
+ // set inBoundDateTime(newDateTime: moment.Moment) {
74
+ // this.tempParams.inBoundDateTime = moment(newDateTime);
75
+ // this._isValid();
76
+ // }
77
+ // !date and time is handled differently for LU
78
+ this._outbound_date = null;
79
+ this._outbound_time = null;
80
+ this._return_date = null;
81
+ this._return_time = null;
82
+ this._cheapestStandard = null;
83
+ this._cheapestFirst = null;
84
+ this._irlClass = null;
85
+ this._journeytype = null;
86
+ const data = storageService.getSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
87
+ query: {},
88
+ tempParams: {},
89
+ originalUserSearch: {}
90
+ };
91
+ this.updateTempParams(this.searchService.makeIrlQuery(data.tempParams));
92
+ this._originalUserSearch = data.originalUserSearch;
93
+ if (searchService.shouldAddTravellerSubscription()) {
94
+ searchService.travellerInformation.subscribe((travellers) => {
95
+ this.travellers = travellers;
96
+ const splitTravellers = this.helpers.selectedTravellers(travellers, ServiceType.Rail);
97
+ this.tempParams.adults = splitTravellers.adults.length;
98
+ this.tempParams.children = splitTravellers.children.length;
99
+ this.travellers = travellers;
100
+ this._isValid();
101
+ });
102
+ }
103
+ this._isValid();
104
+ const results = storageService.getSessionItemAsList(this.resultsSessionName) || [];
105
+ // if (results == null && this.isValid) {
106
+ // searchService.startSearches();
107
+ // }
108
+ this._cheapestResultPrice = this.updateLowestPrice(results);
109
+ this.results.next(results || []);
110
+ }
111
+ // get chosenTotalPrice(): number {
112
+ // if (this._chosenOutboundTicket) {
113
+ // if (this._chosenInboundTicket) {
114
+ // // now check if they are returns or dual
115
+ // if (
116
+ // this._chosenOutboundTicket.singleOrReturn === 'Return' &&
117
+ // this._chosenInboundTicket.singleOrReturn === 'Return'
118
+ // ) {
119
+ // // they should both have the same price
120
+ // return this._chosenOutboundTicket.price;
121
+ // }
122
+ // return (
123
+ // this._chosenOutboundTicket.price + this._chosenInboundTicket.price
124
+ // );
125
+ // }
126
+ // return this._chosenOutboundTicket.price;
127
+ // }
128
+ // return 0;
129
+ // }
130
+ // get chosenTickets(): any {
131
+ // return {
132
+ // Outbound: this._chosenOutboundTicket,
133
+ // Inbound: this._chosenInboundTicket
134
+ // };
135
+ // }
136
+ // get chosenOutboundJourney(): RecursivePartial<RailJourneyOption> {
137
+ // return this._chosenOutboundJourney;
138
+ // }
139
+ // get chosenInboundJourney(): RecursivePartial<RailJourneyOption> {
140
+ // return this._chosenInboundJourney;
141
+ // }
142
+ // get openReturn(): boolean {
143
+ // return this.tempParams.openReturn;
144
+ // }
145
+ // set openReturn(newVal: boolean) {
146
+ // this.tempParams.openReturn = newVal;
147
+ // if (newVal) {
148
+ // this.tempParams.chosenSearchType = IrlJourneyType.OpenReturnJourney;
149
+ // }
150
+ // this._isValid();
151
+ // }
152
+ // get chosenSearchType(): IrlJourneyType {
153
+ // return this.tempParams.chosenSearchType;
154
+ // }
155
+ // set chosenSearchType(newType: IrlJourneyType) {
156
+ // this.tempParams.chosenSearchType = newType;
157
+ // this._isValid();
158
+ // }
159
+ get noOfAdults() {
160
+ return this.tempParams.adults;
161
+ }
162
+ set noOfAdults(adults) {
163
+ this.tempParams.adults = adults;
164
+ this._isValid();
165
+ }
166
+ get noOfChildren() {
167
+ return this.tempParams.children;
168
+ }
169
+ set noOfChildren(children) {
170
+ this.tempParams.children = children;
171
+ this._isValid();
172
+ }
173
+ get travellingTo() {
174
+ return this.tempParams.arrivalLocationId;
175
+ }
176
+ set travellingTo(tt) {
177
+ var _a;
178
+ this.tempParams.arrivalLocationId = tt;
179
+ this._travellingTo = '';
180
+ if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
181
+ this._travellingTo = tt.railstation.id;
182
+ }
183
+ this._isValid();
184
+ }
185
+ get travellingFrom() {
186
+ return this.tempParams.departureLocationId;
187
+ }
188
+ set travellingFrom(tt) {
189
+ var _a;
190
+ this.tempParams.departureLocationId = tt;
191
+ this._travellingFrom = '';
192
+ if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
193
+ this._travellingFrom = tt.railstation.id;
194
+ }
195
+ this._isValid();
196
+ }
197
+ get supplier() {
198
+ return this._supplier;
199
+ }
200
+ set supplier(data) {
201
+ this._supplier = data;
202
+ }
203
+ get countryCode() {
204
+ return this._countryCode;
205
+ }
206
+ set countryCode(data) {
207
+ this._countryCode = data;
208
+ }
209
+ get class() {
210
+ return this._class;
211
+ }
212
+ set class(data) {
213
+ this._class = data;
214
+ }
215
+ get outboundDepartureDateTime() {
216
+ return this._outboundDepartureDateTime;
217
+ }
218
+ set outboundDepartureDateTime(data) {
219
+ this._outboundDepartureDateTime = data;
220
+ }
221
+ get departureLocationId() {
222
+ return this._departureLocationId;
223
+ }
224
+ set departureLocationId(data) {
225
+ this._departureLocationId = data;
226
+ }
227
+ get arrivalLocationId() {
228
+ return this._arrivalLocationId;
229
+ }
230
+ set arrivalLocationId(data) {
231
+ this._arrivalLocationId = data;
232
+ }
233
+ get adults() {
234
+ return this._adults;
235
+ }
236
+ set adults(data) {
237
+ this._adults = data;
238
+ }
239
+ get children() {
240
+ return this._children;
241
+ }
242
+ set children(data) {
243
+ this._children = data;
244
+ }
245
+ get returnDepartureDateTime() {
246
+ return this._returnDepartureDateTime;
247
+ }
248
+ set returnDepartureDateTime(data) {
249
+ this._returnDepartureDateTime = data;
250
+ }
251
+ get ageRange() {
252
+ return this._ageRange;
253
+ }
254
+ set ageRange(data) {
255
+ this._ageRange = data;
256
+ }
257
+ // get chosenRailClass(): RailClass {
258
+ // return this.tempParams.chosenSearchClass;
259
+ // }
260
+ get chosenSearchClass() {
261
+ return this.tempParams.class;
262
+ }
263
+ set chosenSearchClass(classR) {
264
+ this.tempParams.class = classR;
265
+ this._isValid();
266
+ }
267
+ get outBoundDateTime() {
268
+ return this.tempParams.outboundDepartureDateTime;
269
+ }
270
+ set outBoundDateTime(newDateTime) {
271
+ this.tempParams.outboundDepartureDateTime = moment(newDateTime);
272
+ this.minInboundDate = {
273
+ year: newDateTime.year(),
274
+ month: newDateTime.month() + 1,
275
+ day: newDateTime.date()
276
+ };
277
+ // if (
278
+ // this.outBoundDateTime &&
279
+ // // this.inBoundDateTime &&
280
+ // this.outBoundDateTime.isAfter(this.inBoundDateTime)
281
+ // ) {
282
+ // this.inBoundDateTime = this.outBoundDateTime.clone().add(1, 'day');
283
+ // }
284
+ this._isValid();
285
+ }
286
+ get outbound_date() {
287
+ return this._outbound_date;
288
+ }
289
+ set outbound_date(value) {
290
+ this._outbound_date = value;
291
+ this._updateOutboundDateTime();
292
+ }
293
+ get outbound_time() {
294
+ return this._outbound_time;
295
+ }
296
+ set outbound_time(value) {
297
+ this._outbound_time = value;
298
+ this._updateOutboundDateTime();
299
+ }
300
+ get return_date() {
301
+ return this._return_date;
302
+ }
303
+ set return_date(value) {
304
+ this._return_date = value;
305
+ this._updateReturnDateTime();
306
+ }
307
+ get return_time() {
308
+ return this._return_time;
309
+ }
310
+ set return_time(value) {
311
+ this._return_time = value;
312
+ this._updateReturnDateTime();
313
+ }
314
+ // get returnCriteria(): IrlSearchCriteria {
315
+ // return this.tempParams.returnCriteria;
316
+ // }
317
+ // set returnCriteria(newCrit: IrlSearchCriteria) {
318
+ // this.tempParams.returnCriteria = newCrit;
319
+ // this._isValid();
320
+ // }
321
+ // set railCards(newRailCards: string[]) {
322
+ // this.tempParams.railCards = newRailCards;
323
+ // this._isValid();
324
+ // }
325
+ // get carnetTicket(): boolean {
326
+ // return this.tempParams.carnetTicket;
327
+ // }
328
+ // set carnetTicket(newCarnet: boolean) {
329
+ // this.tempParams.carnetTicket = newCarnet;
330
+ // this._isValid();
331
+ // }
332
+ // get disableAutoDiscounts(): boolean {
333
+ // return this.tempParams.disableAutoDiscounts;
334
+ // }
335
+ // set disableAutoDiscounts(newDis: boolean) {
336
+ // this.tempParams.disableAutoDiscounts = newDis;
337
+ // this._isValid();
338
+ // }
339
+ // get prioritiseByPrice(): boolean {
340
+ // return this.tempParams.prioritiseByPrice;
341
+ // }
342
+ // set prioritiseByPrice(newPriority: boolean) {
343
+ // this.tempParams.prioritiseByPrice = newPriority;
344
+ // this._isValid();
345
+ // }
346
+ get timeArray() {
347
+ this._timeArray =
348
+ this._timeArray ||
349
+ Array(48)
350
+ .fill(0)
351
+ .map((_, index) => {
352
+ return {
353
+ value: Math.floor(index / 2)
354
+ .toString()
355
+ .padStart(2, '0') +
356
+ ((index % 2) * 30).toString().padStart(2, '0'),
357
+ display: Math.floor(index / 2)
358
+ .toString()
359
+ .padStart(2, '0') +
360
+ ':' +
361
+ ((index % 2) * 30).toString().padStart(2, '0')
362
+ };
363
+ });
364
+ return this._timeArray;
365
+ }
366
+ get cheapestStandard() {
367
+ return this._cheapestStandard;
368
+ }
369
+ get cheapestFirst() {
370
+ return this._cheapestFirst;
371
+ }
372
+ get irlClass() {
373
+ return this._irlClass;
374
+ }
375
+ set irlClass(data) {
376
+ this._irlClass = data;
377
+ }
378
+ get journeyType() {
379
+ return this._journeytype;
380
+ }
381
+ set journeyType(data) {
382
+ this._journeytype = data;
383
+ }
384
+ resetQuery() {
385
+ this.updateTempParams(this.searchService.makeIrlQuery());
386
+ this._isValid();
387
+ }
388
+ _isValid() {
389
+ var _a;
390
+ this.storageService.setSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS, {
391
+ tempParams: this.tempParams,
392
+ originalUserSearch: this.originalUserSearch
393
+ });
394
+ this.validationMessages = [];
395
+ const now = moment();
396
+ if (!this._travellingFrom) {
397
+ this.validationMessages.push('Please Enter a From Location.');
398
+ }
399
+ if (!this._travellingTo) {
400
+ this.validationMessages.push('Please Enter a To Location.');
401
+ }
402
+ if ((_a = this.outBoundDateTime) === null || _a === void 0 ? void 0 : _a.isBefore(now)) {
403
+ this.validationMessages.push('Departure Date/Time cannot be in the past.');
404
+ }
405
+ // if (
406
+ // this.chosenSearchType === IrlJourneyType.ReturnJourney
407
+ // ) {
408
+ // // check for return specific validations in here
409
+ // if (this.inBoundDateTime?.isSameOrBefore(this.outBoundDateTime)) {
410
+ // this.validationMessages.push(
411
+ // 'Return Date/Time must be after Departure Date/Time'
412
+ // );
413
+ // }
414
+ // }
415
+ // if (this.via) {
416
+ // if (!this.tempParams.viaLocation) {
417
+ // this.validationMessages.push('Please enter a via location.');
418
+ // }
419
+ // }
420
+ if (this.tempParams.adults + this.tempParams.children < 1) {
421
+ this.validationMessages.push('There must be at least 1 traveller');
422
+ }
423
+ this.isValid.next(this.validationMessages.length === 0);
424
+ this.messages.next(this.validationMessages);
425
+ }
426
+ startSearch() {
427
+ this.results.next([]);
428
+ if (this.isValid.value) {
429
+ this._originalUserSearch = Object.freeze(Object.assign({}, this.tempParams));
430
+ this.storageService.setSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS, {
431
+ tempParams: this.tempParams,
432
+ originalUserSearch: this.originalUserSearch
433
+ });
434
+ return this._startSearch(this.Irlfetcher.fetchList(this.getSearchQuery()).pipe(map(result => result)));
435
+ }
436
+ else {
437
+ return Promise.resolve(false);
438
+ }
439
+ }
440
+ startRecentSearch(recentSearch) {
441
+ this.startSearch();
442
+ }
443
+ _updateOutboundDateTime() {
444
+ if (this._outbound_date && this._outbound_time) {
445
+ const time = this.helpers.ngDateToMoment(this._outbound_date, this._outbound_time);
446
+ this.outBoundDateTime = time.isValid() ? time : null;
447
+ this._isValid();
448
+ }
449
+ }
450
+ _updateReturnDateTime() {
451
+ if (this._return_date && this._return_time) {
452
+ const time = this.helpers.ngDateToMoment(this._return_date, this._return_time);
453
+ // this.inBoundDateTime = time.isValid() ? time : null;
454
+ this._isValid();
455
+ }
456
+ }
457
+ getSearchQuery() {
458
+ const query = {
459
+ supplier: this.supplier,
460
+ countryCode: 'GB',
461
+ // journeyType: this.journeyType, // IRLJourneyType!
462
+ class: this.irlClass,
463
+ outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,
464
+ departureLocationId: this._travellingFrom,
465
+ arrivalLocationId: this._travellingTo,
466
+ adults: this.tempParams.adults,
467
+ children: this.tempParams.children,
468
+ returnDepartureDateTime: this.tempParams.returnDepartureDateTime,
469
+ journeyType: this.tempParams.journeyType,
470
+ };
471
+ if (this.tempParams.children === 0) {
472
+ query.children = null;
473
+ }
474
+ // switch (this.tempParams.outboundCriteria) {
475
+ // case IrlSearchCriteria.Depart:
476
+ // query.outboundArrivalDateTime = null;
477
+ // break;
478
+ // case IrlSearchCriteria.Arrive:
479
+ // query.outboundDepartureDateTime = null;
480
+ // break;
481
+ // default:
482
+ // console.warn(
483
+ // `+++ Unknown Criteria: ${this.tempParams.outboundCriteria} +++`
484
+ // );
485
+ // }
486
+ // switch (this.tempParams.returnCriteria) {
487
+ // case IrlSearchCriteria.Depart:
488
+ // query.returnArrivalDateTime = null;
489
+ // break;
490
+ // case IrlSearchCriteria.Arrive:
491
+ // query.returnDepartureDateTime = null;
492
+ // break;
493
+ // default:
494
+ // console.warn(
495
+ // `+++ Unknown Criteria: ${this.tempParams.returnCriteria} +++`
496
+ // );
497
+ // }
498
+ switch (this.tempParams.journeyType) {
499
+ case IrlJourneyType.SingleJourney:
500
+ query.returnDepartureDateTime = null;
501
+ break;
502
+ }
503
+ return this.helpers.removeNulls(query);
504
+ }
505
+ // createTicketGroups(results: IRLJourneyOptions[]): RailTicketGroups {
506
+ // let tickets: RailTicketGroups = {};
507
+ // let ticketId = '';
508
+ // this._canCombine = {};
509
+ // let ticketGroupsOutbound = this.setTicketsGroups(results[0].outbound);
510
+ // let ticketGroupsReturn = this.setTicketsGroups(results[0].return);
511
+ // ticketGroupsOutbound = this.sortTicketPrices(ticketGroupsOutbound);
512
+ // ticketGroupsReturn = this.sortTicketPrices(ticketGroupsReturn);
513
+ // Object.keys(ticketGroupsOutbound).map((key) => {
514
+ // ticketGroupsOutbound[key].map((tkt: RailTicketOption) => {
515
+ // ticketId = `${tkt.type}${tkt.singleOrReturn}`;
516
+ // const identifier = tkt.identifiers.journeyIdentifier;
517
+ // const identifierObj: RailResultIndifiers = {};
518
+ // identifierObj[identifier] = {
519
+ // price: tkt.price,
520
+ // isChild: false,
521
+ // fareIdentifier: tkt.identifiers.fareIdentifier
522
+ // };
523
+ // if (tickets[key]) {
524
+ // this.updateCanCombine(tkt);
525
+ // identifierObj[tkt.identifiers.journeyIdentifier].isChild = false;
526
+ // if (tickets[tkt.type].header.price === tkt.price) {
527
+ // tickets[tkt.type].resultIndifiers.push(identifier);
528
+ // tickets[tkt.type].resultIndifiersPrices = {
529
+ // ...tickets[tkt.type].resultIndifiersPrices,
530
+ // ...identifierObj
531
+ // };
532
+ // } else if (tkt.price) {
533
+ // identifierObj[identifier].isChild = true;
534
+ // const childTicket = {
535
+ // header: tkt,
536
+ // children: [],
537
+ // open: false,
538
+ // direction: RailDirection.Outbound,
539
+ // resultIndifiers: [identifier],
540
+ // resultIndifiersPrices: identifierObj,
541
+ // child: true,
542
+ // ticketId,
543
+ // selectedIndicies: [],
544
+ // disabledIndicies: []
545
+ // } as RailTicketGroup;
546
+ // tickets[tkt.type].children.push(childTicket);
547
+ // }
548
+ // } else {
549
+ // this._canCombine[tkt.type] = {};
550
+ // this.updateCanCombine(tkt);
551
+ // tickets[tkt.type] = {
552
+ // header: tkt,
553
+ // children: [],
554
+ // open: false,
555
+ // direction: RailDirection.Outbound,
556
+ // resultIndifiers: [identifier],
557
+ // resultIndifiersPrices: identifierObj,
558
+ // child: false,
559
+ // ticketId,
560
+ // selectedIndicies: [],
561
+ // disabledIndicies: []
562
+ // } as RailTicketGroup;
563
+ // }
564
+ // });
565
+ // });
566
+ // Object.keys(ticketGroupsReturn).map((key) => {
567
+ // ticketGroupsReturn[key].map((tkt: RailTicketOption) => {
568
+ // ticketId = `${tkt.type}${tkt.singleOrReturn}`;
569
+ // const identifier = tkt.identifiers.journeyIdentifier;
570
+ // const identifierObj: RailResultIndifiers = {};
571
+ // identifierObj[identifier] = {
572
+ // price: tkt.price,
573
+ // isChild: true,
574
+ // fareIdentifier: tkt.identifiers.fareIdentifier
575
+ // };
576
+ // if (
577
+ // tickets[tkt.type] &&
578
+ // tkt.price &&
579
+ // tkt.price !== tickets[tkt.type].header.price
580
+ // ) {
581
+ // this.updateCanCombine(tkt);
582
+ // identifierObj[identifier].isChild = true;
583
+ // const childTicket = {
584
+ // header: tkt,
585
+ // children: [],
586
+ // open: false,
587
+ // direction: RailDirection.Inbound,
588
+ // resultIndifiers: [identifier],
589
+ // resultIndifiersPrices: identifierObj,
590
+ // child: true,
591
+ // ticketId,
592
+ // selectedIndicies: [],
593
+ // disabledIndicies: []
594
+ // } as any;
595
+ // tickets[tkt.type].children.push(childTicket);
596
+ // } else if (!tickets[tkt.type]) {
597
+ // this.updateCanCombine(tkt);
598
+ // tickets[tkt.type] = {
599
+ // header: tkt,
600
+ // children: [],
601
+ // open: false,
602
+ // direction: RailDirection.Inbound,
603
+ // resultIndifiers: [identifier],
604
+ // resultIndifiersPrices: identifierObj,
605
+ // child: false,
606
+ // ticketId,
607
+ // selectedIndicies: [],
608
+ // disabledIndicies: []
609
+ // } as any;
610
+ // } else if (!tkt.price || tkt.price === tickets[tkt.type].header.price) {
611
+ // this.updateCanCombine(tkt);
612
+ // tickets[tkt.type].resultIndifiers.push(identifier);
613
+ // identifierObj[identifier].isChild = false;
614
+ // tickets[tkt.type].resultIndifiersPrices = {
615
+ // ...tickets[tkt.type].resultIndifiersPrices,
616
+ // ...identifierObj
617
+ // };
618
+ // }
619
+ // });
620
+ // });
621
+ // let combineTickets = { ...tickets };
622
+ // tickets = this.combineChildTickets(combineTickets);
623
+ // // console.log('groups: ', tickets);
624
+ // // console.log('Can Combine: ', this._canCombine);
625
+ // return tickets;
626
+ // }
627
+ combineChildTickets(tickets) {
628
+ const values = Object.values(tickets);
629
+ for (let i = 0; i < values.length; i++) {
630
+ const childObject = {};
631
+ for (let j = 0; j < values[i].children.length; j++) {
632
+ const child = values[i].children[j];
633
+ const fareIdentifier = child.header.identifiers.fareIdentifier;
634
+ if (childObject[fareIdentifier]) {
635
+ childObject[fareIdentifier].resultIndifiers.push(child.resultIndifiers[0]);
636
+ childObject[fareIdentifier].resultIndifiersPrices = Object.assign(Object.assign({}, childObject[fareIdentifier].resultIndifiersPrices), child.resultIndifiersPrices);
637
+ }
638
+ else {
639
+ childObject[fareIdentifier] = child;
640
+ }
641
+ }
642
+ // console.log(childObject);
643
+ // console.log(values[i]['header']['type']);
644
+ tickets[values[i].header.type].children = Object.values(childObject);
645
+ }
646
+ // tickets = this.sortTicketChildrenPrices(tickets);
647
+ return tickets;
648
+ }
649
+ setTicketsGroups(results) {
650
+ let ticketGroups = {};
651
+ results.forEach((out) => {
652
+ out.providers.forEach((prov) => {
653
+ prov.ticketOptions.forEach((tkt) => {
654
+ ticketGroups[tkt.type]
655
+ ? ticketGroups[tkt.type].push(tkt)
656
+ : (ticketGroups[tkt.type] = [tkt]);
657
+ });
658
+ });
659
+ });
660
+ return ticketGroups;
661
+ }
662
+ updateFromPreviousSearches(previousItems) { }
663
+ updateCanCombine(tkt) {
664
+ (tkt.identifiers.allowedWith || []).forEach((allowed) => {
665
+ if (!this._canCombine[tkt.type][allowed.journeyIdentifier]) {
666
+ this._canCombine[tkt.type][allowed.journeyIdentifier] = [
667
+ allowed.fareIdentifier
668
+ ];
669
+ }
670
+ else {
671
+ this._canCombine[tkt.type][allowed.journeyIdentifier].push(allowed.fareIdentifier);
672
+ }
673
+ });
674
+ }
675
+ // toggleTicketSelect(
676
+ // ticket: IrlTicketGroup,
677
+ // way: 'departs' | 'returns',
678
+ // timeSlotId: string,
679
+ // ticketId: string,
680
+ // fareIdentifier: string,
681
+ // ticketsGroups: IrlTicketGroups
682
+ // ): IrlTicketGroups {
683
+ // if (!ticket) {
684
+ // return;
685
+ // }
686
+ // const keys = Object.keys(ticketsGroups);
687
+ // let selectedTicket = null;
688
+ // let departsTicket: IrlTicketOption[] = [];
689
+ // let returnTicket: IrlTicketOption[] = [];
690
+ // let isUnselected = false;
691
+ // keys.forEach((key) => {
692
+ // let group = ticketsGroups[key] as RailTicketGroup;
693
+ // if (
694
+ // group.ticketId === ticketId &&
695
+ // group.selectedIndicies.includes(timeSlotId)
696
+ // ) {
697
+ // if (way === 'departs') {
698
+ // group.selectedIndicies = [];
699
+ // departsTicket = [];
700
+ // returnTicket = [];
701
+ // this._chosenInboundTicket = null;
702
+ // this._chosenInboundJourney = null;
703
+ // group.children.forEach((child) => {
704
+ // child.selectedIndicies = [];
705
+ // });
706
+ // } else {
707
+ // group.selectedIndicies = group.selectedIndicies.filter(
708
+ // (Indicies) => Indicies !== timeSlotId
709
+ // );
710
+ // returnTicket = returnTicket.filter(
711
+ // (Indicies) => Indicies !== group.header
712
+ // );
713
+ // }
714
+ // } else {
715
+ // if (
716
+ // group.ticketId === ticketId &&
717
+ // group.header.identifiers.fareIdentifier === fareIdentifier &&
718
+ // way === 'departs'
719
+ // ) {
720
+ // group = this.clearUnneededTickets(way, group, timeSlotId);
721
+ // group.selectedIndicies.push(timeSlotId);
722
+ // way === 'departs'
723
+ // ? departsTicket.push(group.header)
724
+ // : returnTicket.push(group.header);
725
+ // selectedTicket = group.header;
726
+ // } else {
727
+ // // may have to modify this for dual singles
728
+ // if (way === 'departs') {
729
+ // group.selectedIndicies = [];
730
+ // } else {
731
+ // selectedTicket = group.header;
732
+ // }
733
+ // }
734
+ // group.children.forEach((child) => {
735
+ // if (child.selectedIndicies.includes(timeSlotId)) {
736
+ // if (way === 'departs') {
737
+ // child.selectedIndicies = [];
738
+ // departsTicket = [];
739
+ // returnTicket = [];
740
+ // this._chosenInboundTicket = null;
741
+ // this._chosenInboundJourney = null;
742
+ // isUnselected = true;
743
+ // } else {
744
+ // child.selectedIndicies = child.selectedIndicies.filter(
745
+ // (Indicies) => Indicies !== timeSlotId
746
+ // );
747
+ // returnTicket = returnTicket.filter(
748
+ // (Indicies) => Indicies !== group.header
749
+ // );
750
+ // }
751
+ // } else {
752
+ // if (
753
+ // child.ticketId === ticketId &&
754
+ // child.header.identifiers.fareIdentifier === fareIdentifier
755
+ // ) {
756
+ // if (
757
+ // (way === 'departs' &&
758
+ // child.direction !== RailDirection.Inbound) ||
759
+ // (way !== 'departs' && child.direction === RailDirection.Inbound)
760
+ // ) {
761
+ // child = this.clearUnneededTickets(way, child, timeSlotId);
762
+ // child.selectedIndicies.push(timeSlotId);
763
+ // way === 'departs'
764
+ // ? departsTicket.push(child.header)
765
+ // : returnTicket.push(child.header);
766
+ // selectedTicket = child.header;
767
+ // } else if (isUnselected) {
768
+ // child.selectedIndicies = [];
769
+ // }
770
+ // } else {
771
+ // child.selectedIndicies = [];
772
+ // }
773
+ // }
774
+ // });
775
+ // }
776
+ // });
777
+ // // now we need to mark tickets as disabled if they are returns that do not match the selected return
778
+ // // or on overlapping times
779
+ // if (way === 'departs') {
780
+ // this._chosenOutboundTicket = this.helpers.clone(selectedTicket);
781
+ // // now go over the full results and find the matching timeslot
782
+ // departsTicket.length
783
+ // ? (this._chosenOutboundJourney = this.results.value[0].outbound.find(
784
+ // (out: RailJourneyOption) => {
785
+ // return out.identifiers.journeyIdentifier === timeSlotId;
786
+ // }
787
+ // ))
788
+ // : (this._chosenOutboundJourney = null);
789
+ // if (
790
+ // this._chosenInboundTicket &&
791
+ // this._chosenOutboundTicket.singleOrReturn === 'Return' &&
792
+ // this._chosenOutboundTicket.identifiers.fareIdentifier !==
793
+ // this._chosenInboundTicket.identifiers.fareIdentifier
794
+ // ) {
795
+ // console.warn('+++ Cannot combine fares, clearing inbound... +++');
796
+ // this._chosenInboundTicket = null;
797
+ // this._chosenInboundJourney = null;
798
+ // }
799
+ // } else if (way === 'returns') {
800
+ // this._chosenInboundTicket = this.helpers.clone(selectedTicket);
801
+ // this._chosenInboundTicket
802
+ // ? (this._chosenInboundJourney = this.results.value[0].return.find(
803
+ // (inT: RailJourneyOption) => {
804
+ // return inT.identifiers.journeyIdentifier === timeSlotId;
805
+ // }
806
+ // ))
807
+ // : (this._chosenInboundJourney = null);
808
+ // }
809
+ // console.log(this.chosenOutboundJourney);
810
+ // console.log(this._chosenInboundJourney);
811
+ // return ticketsGroups;
812
+ // }
813
+ /**
814
+ * @description - determine if a fare can be combined with what we currently have selected
815
+ */
816
+ // canCombine(journeyIdentifier: string, fareIdentifier: string): boolean {
817
+ // // may have to modify this for dual singles later on
818
+ // if (
819
+ // this._chosenOutboundTicket &&
820
+ // this._chosenOutboundTicket.singleOrReturn === 'Return' &&
821
+ // Number(journeyIdentifier) > 5
822
+ // ) {
823
+ // // greater than 5 only as we are not going to restrict outbounds
824
+ // if (
825
+ // this._canCombine[this._chosenOutboundTicket.type][
826
+ // Number(journeyIdentifier)
827
+ // ]?.includes(fareIdentifier) &&
828
+ // this._chosenOutboundTicket.identifiers.fareIdentifier === fareIdentifier
829
+ // ) {
830
+ // return true;
831
+ // }
832
+ // return false;
833
+ // }
834
+ // return false;
835
+ // }
836
+ clearUnneededTickets(way, group, timeSlotId) {
837
+ if (way === 'returns') {
838
+ group.selectedIndicies = group.selectedIndicies.filter((indicie) => {
839
+ return Number(indicie) <= 5 || indicie === timeSlotId;
840
+ });
841
+ }
842
+ else {
843
+ group.selectedIndicies = group.selectedIndicies.filter((indicie) => {
844
+ return Number(indicie) > 5 || indicie === timeSlotId;
845
+ });
846
+ }
847
+ return group;
848
+ }
849
+ // getRailStation(
850
+ // code: string,
851
+ // isLoading: BehaviorSubject<boolean>
852
+ // ): Observable<IrlStation> {
853
+ // if (code.length === 3) {
854
+ // isLoading?.next(true);
855
+ // return this.getRailStationFetcher.fetchList({ code }).pipe(
856
+ // tap(() => isLoading?.next(false)),
857
+ // take(1)
858
+ // );
859
+ // } else {
860
+ // return of();
861
+ // }
862
+ // }
863
+ // getSelectedirlTicketOption(
864
+ // irlJourneyOption: IrlJourneyOption,
865
+ // irlTicketGroup: IrlTicketGroup,
866
+ // providerIndex: number
867
+ // ): IrlTicketOption {
868
+ // return irlJourneyOption.providers[providerIndex].ticketOptions.find(
869
+ // (ticketOption) =>
870
+ // ticketOption.type === irlTicketGroup.header.type &&
871
+ // ticketOption.price === irlTicketGroup.header.price
872
+ // );
873
+ // }
874
+ getLegsFromRailJourneyOption(railJourneyOption) {
875
+ let legs = [];
876
+ if (railJourneyOption === null || railJourneyOption === void 0 ? void 0 : railJourneyOption.segments.length) {
877
+ legs = railJourneyOption.segments.map((segment) => {
878
+ return {
879
+ operator: segment.operator,
880
+ departureDateTime: segment.departDateTime,
881
+ departureStationName: segment.depart,
882
+ arrivalDateTime: segment.arriveDateTime,
883
+ arrivalStationName: segment.arrive
884
+ };
885
+ });
886
+ }
887
+ return legs;
888
+ }
889
+ // async addSingleJourneyToBasket(
890
+ // serviceId: string,
891
+ // railQuery: SearchRailQueryVariables,
892
+ // railJourneyOption: RailJourneyOption,
893
+ // railTicketGroup: RailTicketGroup
894
+ // ): Promise<boolean> {
895
+ // if (railJourneyOption.unsellable) {
896
+ // return Promise.resolve(false);
897
+ // }
898
+ // const intBasket: InternalBasketInterface =
899
+ // await this.basketService.getDefaultBasket();
900
+ // const basket = intBasket?.subject.value;
901
+ // if (basket) {
902
+ // const selectedRailTicketOption = this.getSelectedRailTicketOption(
903
+ // railJourneyOption,
904
+ // railTicketGroup,
905
+ // 0
906
+ // );
907
+ // const legs = this.getLegsFromRailJourneyOption(railJourneyOption);
908
+ // const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(
909
+ // (ticketQueueList) => {
910
+ // return {
911
+ // id: ticketQueueList.id,
912
+ // name: ticketQueueList.name,
913
+ // type: ticketQueueList.type
914
+ // };
915
+ // }
916
+ // );
917
+ // return this.basketService.addToBasket(
918
+ // {
919
+ // basket: basket.id,
920
+ // service: serviceId,
921
+ // detail: {
922
+ // outwardDetail: {
923
+ // arrivalDateTime: railJourneyOption.arriveDateTime,
924
+ // arrivalStationName: railJourneyOption.to,
925
+ // departureDateTime: railJourneyOption.departDateTime,
926
+ // departureStationName: railJourneyOption.from,
927
+ // supplierTickets: [
928
+ // {
929
+ // supplierName: railJourneyOption.providers[0].name,
930
+ // ticketDescription: selectedRailTicketOption.type,
931
+ // price: selectedRailTicketOption.price,
932
+ // legs
933
+ // }
934
+ // ]
935
+ // },
936
+ // transactionIdentifier:
937
+ // railJourneyOption.identifiers.transactionIdentifier,
938
+ // outbound: {
939
+ // fareIdentifiers: [
940
+ // selectedRailTicketOption.identifiers.fareIdentifier
941
+ // ],
942
+ // journeyIdentifier:
943
+ // selectedRailTicketOption.identifiers.journeyIdentifier
944
+ // },
945
+ // ticketQueueList
946
+ // },
947
+ // adults: railQuery.adults,
948
+ // price: selectedRailTicketOption.price,
949
+ // currency: selectedRailTicketOption.currency as CurrencyCode,
950
+ // searchQuery: railQuery,
951
+ // co2PerItem: railJourneyOption.co2PerItem,
952
+ // co2PerPassenger: railJourneyOption.co2PerPassenger
953
+ // },
954
+ // intBasket,
955
+ // this.searchService,
956
+ // this.travellers
957
+ // );
958
+ // }
959
+ // return Promise.resolve(false);
960
+ // }
961
+ // async addReturnJourneyToBasket(
962
+ // serviceId: string,
963
+ // railQuery: SearchRailQueryVariables,
964
+ // outbound: RailJourneyOption,
965
+ // inbound: RailJourneyOption,
966
+ // railTicketGroup: RailTicketGroup
967
+ // ): Promise<boolean> {
968
+ // if (outbound.unsellable) {
969
+ // return Promise.resolve(false);
970
+ // }
971
+ // const intBasket: InternalBasketInterface =
972
+ // await this.basketService.getDefaultBasket();
973
+ // const basket = intBasket?.subject.value;
974
+ // if (basket) {
975
+ // const selectedRailTicketOption = this.getSelectedRailTicketOption(
976
+ // outbound,
977
+ // railTicketGroup,
978
+ // 0
979
+ // );
980
+ // const outboundLegs = this.getLegsFromRailJourneyOption(outbound);
981
+ // const inboundLegs = this.getLegsFromRailJourneyOption(inbound);
982
+ // const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(
983
+ // (ticketQueueList1: RailTicketQueue) => {
984
+ // return {
985
+ // id: ticketQueueList1.id,
986
+ // name: ticketQueueList1.name,
987
+ // type: ticketQueueList1.type
988
+ // };
989
+ // }
990
+ // );
991
+ // return this.basketService.addToBasket(
992
+ // {
993
+ // basket: basket.id,
994
+ // service: serviceId,
995
+ // detail: {
996
+ // outwardDetail: {
997
+ // arrivalDateTime: outbound.arriveDateTime,
998
+ // arrivalStationName: outbound.to,
999
+ // departureDateTime: outbound.departDateTime,
1000
+ // departureStationName: outbound.from,
1001
+ // supplierTickets: [
1002
+ // {
1003
+ // supplierName: outbound.providers[0].name,
1004
+ // ticketDescription: selectedRailTicketOption.type,
1005
+ // price: selectedRailTicketOption.price,
1006
+ // legs: outboundLegs
1007
+ // }
1008
+ // ]
1009
+ // },
1010
+ // inwardDetail: {
1011
+ // arrivalDateTime: inbound.arriveDateTime,
1012
+ // arrivalStationName: inbound.to,
1013
+ // departureDateTime: inbound.departDateTime,
1014
+ // departureStationName: inbound.from,
1015
+ // supplierTickets: [
1016
+ // {
1017
+ // supplierName: inbound.providers[0].name,
1018
+ // ticketDescription: selectedRailTicketOption.type,
1019
+ // legs: inboundLegs
1020
+ // }
1021
+ // ]
1022
+ // },
1023
+ // transactionIdentifier: outbound.identifiers.transactionIdentifier,
1024
+ // outbound: {
1025
+ // fareIdentifiers: [
1026
+ // selectedRailTicketOption.identifiers.fareIdentifier
1027
+ // ],
1028
+ // journeyIdentifier:
1029
+ // selectedRailTicketOption.identifiers.journeyIdentifier
1030
+ // },
1031
+ // ticketQueueList
1032
+ // },
1033
+ // adults: railQuery.adults,
1034
+ // price: railTicketGroup.header.price,
1035
+ // currency: selectedRailTicketOption.currency as CurrencyCode,
1036
+ // searchQuery: railQuery,
1037
+ // co2PerItem: outbound.co2PerItem,
1038
+ // co2PerPassenger: outbound.co2PerPassenger
1039
+ // },
1040
+ // intBasket,
1041
+ // this.searchService,
1042
+ // this.travellers
1043
+ // );
1044
+ // }
1045
+ // return Promise.resolve(false);
1046
+ // }
1047
+ // sortTicketPrices(tickets: TicketGroups): TicketGroups {
1048
+ // const sortTicketPrices = { ...tickets };
1049
+ // Object.keys(sortTicketPrices).map((key) => {
1050
+ // sortTicketPrices[key].sort((a: IrlTicketOption, b: IrlTicketOption) => {
1051
+ // const priceA = a.price,
1052
+ // priceB = b.price;
1053
+ // return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;
1054
+ // });
1055
+ // });
1056
+ // return sortTicketPrices;
1057
+ // // }
1058
+ // sortTicketChildrenPrices(tickets: RailTicketGroups): RailTicketGroups {
1059
+ // const sortTicketPrices = { ...tickets };
1060
+ // Object.keys(sortTicketPrices).map((key) => {
1061
+ // sortTicketPrices[key].children.sort(
1062
+ // (a: RailTicketGroup, b: RailTicketGroup) => {
1063
+ // const priceA = a.header.price,
1064
+ // priceB = b.header.price;
1065
+ // return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;
1066
+ // }
1067
+ // );
1068
+ // });
1069
+ // return sortTicketPrices;
1070
+ // }
1071
+ updateLowestPrice(results) {
1072
+ if (!results.length)
1073
+ return null;
1074
+ const currency = results[0].outbound[0].providers[0].cheapestTicket.currency;
1075
+ const price = this.findCheapestTicket(results);
1076
+ return {
1077
+ amount: price,
1078
+ currencyCode: currency
1079
+ };
1080
+ }
1081
+ findCheapestTicket(results) {
1082
+ this._cheapestFirst = null;
1083
+ this._cheapestStandard = null;
1084
+ if (!results.length)
1085
+ return null;
1086
+ let cheapestArr = [];
1087
+ results.map((result) => {
1088
+ result.outbound.map((out) => {
1089
+ out.providers.map((tkt) => {
1090
+ let cheapestTicket = tkt.cheapestTicket.price;
1091
+ tkt.ticketOptions.map((tktOption) => {
1092
+ var _a, _b;
1093
+ let tktPrice = tktOption.price;
1094
+ let tktClass = tktOption.class;
1095
+ if (tktClass === 'First' &&
1096
+ (((_a = this._cheapestFirst) === null || _a === void 0 ? void 0 : _a.price) > tktPrice || !this._cheapestFirst)) {
1097
+ this._cheapestFirst = tktOption;
1098
+ }
1099
+ else if (tktClass === 'Standard' &&
1100
+ (((_b = this._cheapestStandard) === null || _b === void 0 ? void 0 : _b.price) > tktPrice ||
1101
+ !this._cheapestStandard)) {
1102
+ this._cheapestStandard = tktOption;
1103
+ }
1104
+ if (tktPrice === cheapestTicket) {
1105
+ cheapestArr.push(cheapestTicket);
1106
+ }
1107
+ });
1108
+ });
1109
+ });
1110
+ });
1111
+ return Math.min(...cheapestArr);
1112
+ }
1113
+ }
1114
+ IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
1115
+ IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
1116
+ IRLEnterpriseSearch.PASSING_POINT = 'Passing';
1117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQWtCLE1BQU0sUUFBUSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWlCekQsT0FBTyxFQUdMLFFBQVEsRUFNUixXQUFXLEVBQ1gsY0FBYyxFQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFxQmhDLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0IsNENBQXVCLENBQUE7SUFDdkIsNkNBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFFRCxNQUFNLE9BQU8sbUJBS1gsU0FBUSxvQkFJUDtJQTJiRCxZQUNVLFVBQWtDO0lBQzFDLHVGQUF1RjtJQUMvRSxPQUEyQixFQUMzQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFQZCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUVsQyxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFFL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBemIvQyx1QkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQztRQUVwRSxnQkFBVyxHQUFHO1lBQ25CLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRTtZQUMxRCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVB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QUFXLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUN0RCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFOzt3QkFDbEMsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsSUFDRSxRQUFRLEtBQUssT0FBTzs0QkFDcEIsQ0FBQyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLEtBQUssSUFBRyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQy9EOzRCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO3lCQUNqQzs2QkFBTSxJQUNMLFFBQVEsS0FBSyxVQUFVOzRCQUN2QixDQUFDLE9BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxLQUFLLElBQUcsUUFBUTtnQ0FDdkMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDMUI7NEJBQ0EsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQzt5QkFDcEM7d0JBQ0QsSUFBSSxRQUFRLEtBQUssY0FBYyxFQUFFOzRCQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNsQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQTd4Q2UsMENBQXNCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLDJDQUF1QixHQUFHLGFBQWEsQ0FBQztBQUN4QyxpQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFJhaWxUaWNrZXRHcm91cHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtdGlja2V0LWdyb3Vwcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxSZXN1bHRJbmRpZmllcnMsXHJcbiAgUmFpbFRpY2tldEdyb3VwLFxyXG4gIFRpY2tldEdyb3Vwc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC10aWNrZXQtZ3JvdXAuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbERpcmVjdGlvbiB9IGZyb20gJy4vcmFpbC1kaXJlY3Rpb24uZW51bSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXHJcbiAgUmVjZW50U2VhcmNoXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIElybENsYXNzLFxyXG4gIElybEpvdXJuZXlPcHRpb24sXHJcbiAgSXJsSm91cm5leU9wdGlvbnMsXHJcbiAgSXJsUHJvdmlkZXIsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLCBJcmxTdXBwbGllclxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxRdW90ZUZldGNoZXIsXHJcbiAgSXJsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2lybC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIElybFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElSTEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBRIGV4dGVuZHMgSXJsUXVvdGVGZXRjaGVyVHlwZVxyXG4gICAgLy8gLFxyXG4gICAgLy8gR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBJcmxUZW1wUGFyYW1zLFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIElybFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBJUkxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfaXJsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnaXJsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICAvLyB7IGRpc3BsYXk6ICdEdWFsIFNpbmdsZXMnLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlcyA9IFt7IGtleTogJ2NoaWxkJywgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSwgeyBrZXk6ICdjaGlsZCcsIHZhbHVlOiAnQ2hpbGQgKDQtNSknIH0sIHsga2V5OiAnY2hpbGQnLCB2YWx1ZTogJ0NoaWxkICg2LTExKScgfSwgeyBrZXk6ICd5b3V0aCcsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSwgeyBrZXk6ICd5b3V0aCcsIHZhbHVlOiAnWW91dGggKDE1LTI1KScgfSwgeyBrZXk6ICdhZHVsdCcsIHZhbHVlOiAnQWR1bHQgKDI2LTU5KScgfSwgeyBrZXk6ICdzZW5pb3InLCB2YWx1ZTogJ1NlbmlvciAoNjArKSd9XTtcclxuXHJcblxyXG5cclxuICBwdWJsaWMgcmFpbENyaXRlcmlhID0gW0lybFNlYXJjaENyaXRlcmlhLkRlcGFydCwgSXJsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDtcclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX2NhbkNvbWJpbmU6IGFueTtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZFRpY2tldDogUmVjdXJzaXZlUGFydGlhbDxJcmxUaWNrZXRPcHRpb24+O1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlbkluYm91bmRUaWNrZXQ6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsVGlja2V0T3B0aW9uPjtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgLy8gcHJpdmF0ZSBfY2hvc2VuSW5ib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IGFueTtcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG5cclxuICAvLyBnZXQgY2hvc2VuVG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gIC8vICAgaWYgKHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgICAgLy8gbm93IGNoZWNrIGlmIHRoZXkgYXJlIHJldHVybnMgb3IgZHVhbFxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnNpbmdsZU9yUmV0dXJuID09PSAnUmV0dXJuJyAmJlxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldC5zaW5nbGVPclJldHVybiA9PT0gJ1JldHVybidcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIC8vIHRoZXkgc2hvdWxkIGJvdGggaGF2ZSB0aGUgc2FtZSBwcmljZVxyXG4gIC8vICAgICAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICByZXR1cm4gKFxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQucHJpY2UgKyB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LnByaWNlXHJcbiAgLy8gICAgICAgKTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiAwO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblRpY2tldHMoKTogYW55IHtcclxuICAvLyAgIHJldHVybiB7XHJcbiAgLy8gICAgIE91dGJvdW5kOiB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldCxcclxuICAvLyAgICAgSW5ib3VuZDogdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldFxyXG4gIC8vICAgfTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5PdXRib3VuZEpvdXJuZXkoKTogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kSm91cm5leTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5JbmJvdW5kSm91cm5leSgpOiBSZWN1cnNpdmVQYXJ0aWFsPFJhaWxKb3VybmV5T3B0aW9uPiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgb3BlblJldHVybigpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3BlblJldHVybjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBvcGVuUmV0dXJuKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLm9wZW5SZXR1cm4gPSBuZXdWYWw7XHJcblxyXG4gIC8vICAgaWYgKG5ld1ZhbCkge1xyXG4gIC8vICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5O1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogSXJsSm91cm5leVR5cGUge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogSXJsSm91cm5leVR5cGUpIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gbmV3VHlwZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbExvY2F0aW9uSWQgPSB0dDtcclxuXHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdGcm9tKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsXHJcbiAgZ2V0IHN1cHBsaWVyKCk6SXJsU3VwcGxpZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1cHBsaWVyO1xyXG4gIH1cclxuICBzZXQgc3VwcGxpZXIoZGF0YTogSXJsU3VwcGxpZXIpIHtcclxuICAgIHRoaXMuX3N1cHBsaWVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvdW50cnlDb2RlOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6c3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb3VudHJ5Q29kZTtcclxuICB9XHJcbiAgc2V0IGNvdW50cnlDb2RlKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY291bnRyeUNvZGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xhc3M6IElybENsYXNzID0gbnVsbFxyXG4gIGdldCBjbGFzcygpOklybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGFzcztcclxuICB9XHJcbiAgc2V0IGNsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9jbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiBNb21lbnQgPSBudWxsXHJcbiAgZ2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUoKTpNb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKGRhdGE6IE1vbWVudCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGRlcGFydHVyZUxvY2F0aW9uSWQoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbFxyXG4gIGdldCBhcnJpdmFsTG9jYXRpb25JZCgpOnN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBhcnJpdmFsTG9jYXRpb25JZChkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2Fycml2YWxMb2NhdGlvbklkID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkdWx0czogbnVtYmVyID0gMFxyXG4gIGdldCBhZHVsdHMoKTpudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2FkdWx0cyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGlsZHJlbjogbnVtYmVyID0gMFxyXG4gIGdldCBjaGlsZHJlbigpOm51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBNb21lbnQgPSBudWxsXHJcbiAgZ2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKCk6TW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKGRhdGE6IE1vbWVudCkge1xyXG4gICAgdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGxcclxuICBnZXQgYWdlUmFuZ2UoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FnZVJhbmdlO1xyXG4gIH1cclxuICBzZXQgYWdlUmFuZ2UoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZ2VSYW5nZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICAvLyBnZXQgY2hvc2VuUmFpbENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpO1xyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgLy8gICAvLyB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgLy8gICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogSXJsU2VhcmNoQ3JpdGVyaWEge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IG91dGJvdW5kQ3JpdGVyaWEobmV3Q3JpdDogSXJsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAvLyAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vICEgbWlnaHQgbm90IG5lZWQgdGhpcz9cclxuICAvLyBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCByZXR1cm5Dcml0ZXJpYSgpOiBJcmxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHJldHVybkNyaXRlcmlhKG5ld0NyaXQ6IElybFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHJhaWxDYXJkcyhuZXdSYWlsQ2FyZHM6IHN0cmluZ1tdKSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMucmFpbENhcmRzID0gbmV3UmFpbENhcmRzO1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNhcm5ldFRpY2tldCgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGNhcm5ldFRpY2tldChuZXdDYXJuZXQ6IGJvb2xlYW4pIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQgPSBuZXdDYXJuZXQ7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMoKTogYm9vbGVhbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGRpc2FibGVBdXRvRGlzY291bnRzKG5ld0RpczogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzID0gbmV3RGlzO1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHByaW9yaXRpc2VCeVByaWNlKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBwcmlvcml0aXNlQnlQcmljZShuZXdQcmlvcml0eTogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlID0gbmV3UHJpb3JpdHk7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDQ4KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfY2hlYXBlc3RTdGFuZGFyZDogSXJsVGlja2V0T3B0aW9uID0gbnVsbDtcclxuICBnZXQgY2hlYXBlc3RTdGFuZGFyZCgpOiBJcmxUaWNrZXRPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NoZWFwZXN0Rmlyc3Q6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0Rmlyc3QoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdEZpcnN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsQ2xhc3M6IElybENsYXNzID0gbnVsbDtcclxuICBnZXQgaXJsQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybENsYXNzXHJcbiAgfVxyXG5cclxuICBzZXQgaXJsQ2xhc3MoZGF0YSA6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBudWxsO1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGVcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhIDogSXJsSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMuX2pvdXJuZXl0eXBlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBJcmxmZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgLy8gcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LCAvLyBkb2VzbnQgZXhpc3QgeWV0XHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgSXJsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuUmFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxJcmxRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgLy8gaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiB0aGlzLmlzVmFsaWQpIHtcclxuICAgIC8vICAgc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFydFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgc3VwcGxpZXI6IHRoaXMuc3VwcGxpZXIsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJyxcclxuICAgICAgLy8gam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGUsIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogdGhpcy5pcmxDbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcblxyXG4gICAgICBqb3VybmV5VHlwZTogdGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlLFxyXG4gICAgICAvLyBjbGFzczogdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzLFxyXG4gICAgICAvLyBleHRyYVRpbWVUb0NoYW5nZTogdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZSxcclxuICAgICAgLy8gb3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lLFxyXG4gICAgICAvLyByZXR1cm5BcnJpdmFsRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUsXHJcbiAgICAgIC8vIHZpYUxvY2F0aW9uQ29kZTogdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEpIHtcclxuICAgIC8vICAgY2FzZSBJcmxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAvLyAgICAgcXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIElybFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgIC8vICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgZGVmYXVsdDpcclxuICAgIC8vICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAvLyAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhKSB7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgLy8gICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgLy8gICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgZGVmYXVsdDpcclxuICAgIC8vICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAvLyAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5qb3VybmV5VHlwZSkge1xyXG4gICAgICBjYXNlIElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgLy8gY3JlYXRlVGlja2V0R3JvdXBzKHJlc3VsdHM6IElSTEpvdXJuZXlPcHRpb25zW10pOiBSYWlsVGlja2V0R3JvdXBzIHtcclxuICAvLyAgIGxldCB0aWNrZXRzOiBSYWlsVGlja2V0R3JvdXBzID0ge307XHJcbiAgLy8gICBsZXQgdGlja2V0SWQgPSAnJztcclxuICAvLyAgIHRoaXMuX2NhbkNvbWJpbmUgPSB7fTtcclxuXHJcbiAgLy8gICBsZXQgdGlja2V0R3JvdXBzT3V0Ym91bmQgPSB0aGlzLnNldFRpY2tldHNHcm91cHMocmVzdWx0c1swXS5vdXRib3VuZCk7XHJcbiAgLy8gICBsZXQgdGlja2V0R3JvdXBzUmV0dXJuID0gdGhpcy5zZXRUaWNrZXRzR3JvdXBzKHJlc3VsdHNbMF0ucmV0dXJuKTtcclxuICAvLyAgIHRpY2tldEdyb3Vwc091dGJvdW5kID0gdGhpcy5zb3J0VGlja2V0UHJpY2VzKHRpY2tldEdyb3Vwc091dGJvdW5kKTtcclxuICAvLyAgIHRpY2tldEdyb3Vwc1JldHVybiA9IHRoaXMuc29ydFRpY2tldFByaWNlcyh0aWNrZXRHcm91cHNSZXR1cm4pO1xyXG5cclxuICAvLyAgIE9iamVjdC5rZXlzKHRpY2tldEdyb3Vwc091dGJvdW5kKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICB0aWNrZXRHcm91cHNPdXRib3VuZFtrZXldLm1hcCgodGt0OiBSYWlsVGlja2V0T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgdGlja2V0SWQgPSBgJHt0a3QudHlwZX0ke3RrdC5zaW5nbGVPclJldHVybn1gO1xyXG4gIC8vICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0a3QuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXI7XHJcbiAgLy8gICAgICAgY29uc3QgaWRlbnRpZmllck9iajogUmFpbFJlc3VsdEluZGlmaWVycyA9IHt9O1xyXG4gIC8vICAgICAgIGlkZW50aWZpZXJPYmpbaWRlbnRpZmllcl0gPSB7XHJcbiAgLy8gICAgICAgICBwcmljZTogdGt0LnByaWNlLFxyXG4gIC8vICAgICAgICAgaXNDaGlsZDogZmFsc2UsXHJcbiAgLy8gICAgICAgICBmYXJlSWRlbnRpZmllcjogdGt0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBpZiAodGlja2V0c1trZXldKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLnVwZGF0ZUNhbkNvbWJpbmUodGt0KTtcclxuICAvLyAgICAgICAgIGlkZW50aWZpZXJPYmpbdGt0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXS5pc0NoaWxkID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICBpZiAodGlja2V0c1t0a3QudHlwZV0uaGVhZGVyLnByaWNlID09PSB0a3QucHJpY2UpIHtcclxuICAvLyAgICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzLnB1c2goaWRlbnRpZmllcik7XHJcbiAgLy8gICAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLnJlc3VsdEluZGlmaWVyc1ByaWNlcyA9IHtcclxuICAvLyAgICAgICAgICAgICAuLi50aWNrZXRzW3RrdC50eXBlXS5yZXN1bHRJbmRpZmllcnNQcmljZXMsXHJcbiAgLy8gICAgICAgICAgICAgLi4uaWRlbnRpZmllck9ialxyXG4gIC8vICAgICAgICAgICB9O1xyXG4gIC8vICAgICAgICAgfSBlbHNlIGlmICh0a3QucHJpY2UpIHtcclxuICAvLyAgICAgICAgICAgaWRlbnRpZmllck9ialtpZGVudGlmaWVyXS5pc0NoaWxkID0gdHJ1ZTtcclxuICAvLyAgICAgICAgICAgY29uc3QgY2hpbGRUaWNrZXQgPSB7XHJcbiAgLy8gICAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gIC8vICAgICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5PdXRib3VuZCxcclxuICAvLyAgICAgICAgICAgICByZXN1bHRJbmRpZmllcnM6IFtpZGVudGlmaWVyXSxcclxuICAvLyAgICAgICAgICAgICByZXN1bHRJbmRpZmllcnNQcmljZXM6IGlkZW50aWZpZXJPYmosXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICAgICAgdGlja2V0SWQsXHJcbiAgLy8gICAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgICAgfSBhcyBSYWlsVGlja2V0R3JvdXA7XHJcbiAgLy8gICAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLmNoaWxkcmVuLnB1c2goY2hpbGRUaWNrZXQpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXSA9IHt9O1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXSA9IHtcclxuICAvLyAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAvLyAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5PdXRib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICB0aWNrZXRJZCxcclxuICAvLyAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgIGRpc2FibGVkSW5kaWNpZXM6IFtdXHJcbiAgLy8gICAgICAgICB9IGFzIFJhaWxUaWNrZXRHcm91cDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfSk7XHJcblxyXG4gIC8vICAgT2JqZWN0LmtleXModGlja2V0R3JvdXBzUmV0dXJuKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICB0aWNrZXRHcm91cHNSZXR1cm5ba2V5XS5tYXAoKHRrdDogUmFpbFRpY2tldE9wdGlvbikgPT4ge1xyXG4gIC8vICAgICAgIHRpY2tldElkID0gYCR7dGt0LnR5cGV9JHt0a3Quc2luZ2xlT3JSZXR1cm59YDtcclxuICAvLyAgICAgICBjb25zdCBpZGVudGlmaWVyID0gdGt0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyO1xyXG4gIC8vICAgICAgIGNvbnN0IGlkZW50aWZpZXJPYmo6IFJhaWxSZXN1bHRJbmRpZmllcnMgPSB7fTtcclxuICAvLyAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdID0ge1xyXG4gIC8vICAgICAgICAgcHJpY2U6IHRrdC5wcmljZSxcclxuICAvLyAgICAgICAgIGlzQ2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICBmYXJlSWRlbnRpZmllcjogdGt0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXSAmJlxyXG4gIC8vICAgICAgICAgdGt0LnByaWNlICYmXHJcbiAgLy8gICAgICAgICB0a3QucHJpY2UgIT09IHRpY2tldHNbdGt0LnR5cGVdLmhlYWRlci5wcmljZVxyXG4gIC8vICAgICAgICkge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdLmlzQ2hpbGQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgY29uc3QgY2hpbGRUaWNrZXQgPSB7XHJcbiAgLy8gICAgICAgICAgIGhlYWRlcjogdGt0LFxyXG4gIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgLy8gICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24uSW5ib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICAgIHRpY2tldElkLFxyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZEluZGljaWVzOiBbXSxcclxuICAvLyAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgIH0gYXMgYW55O1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0uY2hpbGRyZW4ucHVzaChjaGlsZFRpY2tldCk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICghdGlja2V0c1t0a3QudHlwZV0pIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlQ2FuQ29tYmluZSh0a3QpO1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0gPSB7XHJcbiAgLy8gICAgICAgICAgIGhlYWRlcjogdGt0LFxyXG4gIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgLy8gICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24uSW5ib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICB0aWNrZXRJZCxcclxuICAvLyAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgIGRpc2FibGVkSW5kaWNpZXM6IFtdXHJcbiAgLy8gICAgICAgICB9IGFzIGFueTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCF0a3QucHJpY2UgfHwgdGt0LnByaWNlID09PSB0aWNrZXRzW3RrdC50eXBlXS5oZWFkZXIucHJpY2UpIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlQ2FuQ29tYmluZSh0a3QpO1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzLnB1c2goaWRlbnRpZmllcik7XHJcbiAgLy8gICAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdLmlzQ2hpbGQgPSBmYWxzZTtcclxuICAvLyAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLnJlc3VsdEluZGlmaWVyc1ByaWNlcyA9IHtcclxuICAvLyAgICAgICAgICAgLi4udGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzLFxyXG4gIC8vICAgICAgICAgICAuLi5pZGVudGlmaWVyT2JqXHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICBsZXQgY29tYmluZVRpY2tldHMgPSB7IC4uLnRpY2tldHMgfTtcclxuICAvLyAgIHRpY2tldHMgPSB0aGlzLmNvbWJpbmVDaGlsZFRpY2tldHMoY29tYmluZVRpY2tldHMpO1xyXG5cclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdncm91cHM6ICcsIHRpY2tldHMpO1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ0NhbiBDb21iaW5lOiAnLCB0aGlzLl9jYW5Db21iaW5lKTtcclxuICAvLyAgIHJldHVybiB0aWNrZXRzO1xyXG4gIC8vIH1cclxuXHJcbiAgY29tYmluZUNoaWxkVGlja2V0cyh0aWNrZXRzOiBSYWlsVGlja2V0R3JvdXBzKTogUmFpbFRpY2tldEdyb3VwcyB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHRpY2tldHMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGRPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogUmFpbFRpY2tldEdyb3VwIH0gPSB7fTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsdWVzW2ldLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSB2YWx1ZXNbaV0uY2hpbGRyZW5bal07XHJcbiAgICAgICAgY29uc3QgZmFyZUlkZW50aWZpZXIgPSBjaGlsZC5oZWFkZXIuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXI7XHJcbiAgICAgICAgaWYgKGNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXSkge1xyXG4gICAgICAgICAgY2hpbGRPYmplY3RbZmFyZUlkZW50aWZpZXJdLnJlc3VsdEluZGlmaWVycy5wdXNoKFxyXG4gICAgICAgICAgICBjaGlsZC5yZXN1bHRJbmRpZmllcnNbMF1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjaGlsZE9iamVjdFtmYXJlSWRlbnRpZmllcl0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzID0ge1xyXG4gICAgICAgICAgICAuLi5jaGlsZE9iamVjdFtmYXJlSWRlbnRpZmllcl0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzLFxyXG4gICAgICAgICAgICAuLi5jaGlsZC5yZXN1bHRJbmRpZmllcnNQcmljZXNcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXSA9IGNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhjaGlsZE9iamVjdCk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlc1tpXVsnaGVhZGVyJ11bJ3R5cGUnXSk7XHJcbiAgICAgIHRpY2tldHNbdmFsdWVzW2ldLmhlYWRlci50eXBlXS5jaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY2hpbGRPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgLy8gdGlja2V0cyA9IHRoaXMuc29ydFRpY2tldENoaWxkcmVuUHJpY2VzKHRpY2tldHMpO1xyXG4gICAgcmV0dXJuIHRpY2tldHM7XHJcbiAgfVxyXG4gIHNldFRpY2tldHNHcm91cHMocmVzdWx0czogSXJsSm91cm5leU9wdGlvbltdKTogYW55IHtcclxuICAgIGxldCB0aWNrZXRHcm91cHM6IGFueSA9IHt9O1xyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChvdXQ6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgb3V0LnByb3ZpZGVycy5mb3JFYWNoKChwcm92OiBJcmxQcm92aWRlcikgPT4ge1xyXG4gICAgICAgIHByb3YudGlja2V0T3B0aW9ucy5mb3JFYWNoKCh0a3Q6IElybFRpY2tldE9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGlja2V0R3JvdXBzW3RrdC50eXBlXVxyXG4gICAgICAgICAgICA/IHRpY2tldEdyb3Vwc1t0a3QudHlwZV0ucHVzaCh0a3QpXHJcbiAgICAgICAgICAgIDogKHRpY2tldEdyb3Vwc1t0a3QudHlwZV0gPSBbdGt0XSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGlja2V0R3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7fVxyXG5cclxuICB1cGRhdGVDYW5Db21iaW5lKHRrdDogSXJsVGlja2V0T3B0aW9uKTogdm9pZCB7XHJcbiAgICAodGt0LmlkZW50aWZpZXJzLmFsbG93ZWRXaXRoIHx8IFtdKS5mb3JFYWNoKChhbGxvd2VkKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0pIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSA9IFtcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdLnB1c2goXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0b2dnbGVUaWNrZXRTZWxlY3QoXHJcbiAgLy8gICB0aWNrZXQ6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgd2F5OiAnZGVwYXJ0cycgfCAncmV0dXJucycsXHJcbiAgLy8gICB0aW1lU2xvdElkOiBzdHJpbmcsXHJcbiAgLy8gICB0aWNrZXRJZDogc3RyaW5nLFxyXG4gIC8vICAgZmFyZUlkZW50aWZpZXI6IHN0cmluZyxcclxuICAvLyAgIHRpY2tldHNHcm91cHM6IElybFRpY2tldEdyb3Vwc1xyXG4gIC8vICk6IElybFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBpZiAoIXRpY2tldCkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGlja2V0c0dyb3Vwcyk7XHJcbiAgLy8gICBsZXQgc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgbGV0IGRlcGFydHNUaWNrZXQ6IElybFRpY2tldE9wdGlvbltdID0gW107XHJcbiAgLy8gICBsZXQgcmV0dXJuVGlja2V0OiBJcmxUaWNrZXRPcHRpb25bXSA9IFtdO1xyXG4gIC8vICAgbGV0IGlzVW5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gIC8vICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgbGV0IGdyb3VwID0gdGlja2V0c0dyb3Vwc1trZXldIGFzIFJhaWxUaWNrZXRHcm91cDtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBncm91cC50aWNrZXRJZCA9PT0gdGlja2V0SWQgJiZcclxuICAvLyAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzLmluY2x1ZGVzKHRpbWVTbG90SWQpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IFtdO1xyXG4gIC8vICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgcmV0dXJuVGlja2V0ID0gW107XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gbnVsbDtcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICByZXR1cm5UaWNrZXQgPSByZXR1cm5UaWNrZXQuZmlsdGVyKFxyXG4gIC8vICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIGdyb3VwLnRpY2tldElkID09PSB0aWNrZXRJZCAmJlxyXG4gIC8vICAgICAgICAgZ3JvdXAuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllciAmJlxyXG4gIC8vICAgICAgICAgd2F5ID09PSAnZGVwYXJ0cydcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGdyb3VwID0gdGhpcy5jbGVhclVubmVlZGVkVGlja2V0cyh3YXksIGdyb3VwLCB0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMucHVzaCh0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIHdheSA9PT0gJ2RlcGFydHMnXHJcbiAgLy8gICAgICAgICAgID8gZGVwYXJ0c1RpY2tldC5wdXNoKGdyb3VwLmhlYWRlcilcclxuICAvLyAgICAgICAgICAgOiByZXR1cm5UaWNrZXQucHVzaChncm91cC5oZWFkZXIpO1xyXG4gIC8vICAgICAgICAgc2VsZWN0ZWRUaWNrZXQgPSBncm91cC5oZWFkZXI7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXNcclxuICAvLyAgICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZFRpY2tldCA9IGdyb3VwLmhlYWRlcjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoY2hpbGQuc2VsZWN0ZWRJbmRpY2llcy5pbmNsdWRlcyh0aW1lU2xvdElkKSkge1xyXG4gIC8vICAgICAgICAgICBpZiAod2F5ID09PSAnZGVwYXJ0cycpIHtcclxuICAvLyAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgICAgICBpc1Vuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBjaGlsZC5zZWxlY3RlZEluZGljaWVzLmZpbHRlcihcclxuICAvLyAgICAgICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IHJldHVyblRpY2tldC5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQudGlja2V0SWQgPT09IHRpY2tldElkICYmXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllclxyXG4gIC8vICAgICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ID09PSAnZGVwYXJ0cycgJiZcclxuICAvLyAgICAgICAgICAgICAgICAgY2hpbGQuZGlyZWN0aW9uICE9PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpIHx8XHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ICE9PSAnZGVwYXJ0cycgJiYgY2hpbGQuZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpXHJcbiAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZCA9IHRoaXMuY2xlYXJVbm5lZWRlZFRpY2tldHMod2F5LCBjaGlsZCwgdGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzLnB1c2godGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICB3YXkgPT09ICdkZXBhcnRzJ1xyXG4gIC8vICAgICAgICAgICAgICAgICA/IGRlcGFydHNUaWNrZXQucHVzaChjaGlsZC5oZWFkZXIpXHJcbiAgLy8gICAgICAgICAgICAgICAgIDogcmV0dXJuVGlja2V0LnB1c2goY2hpbGQuaGVhZGVyKTtcclxuICAvLyAgICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0ID0gY2hpbGQuaGVhZGVyO1xyXG4gIC8vICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNVbnNlbGVjdGVkKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICAvLyBub3cgd2UgbmVlZCB0byBtYXJrIHRpY2tldHMgYXMgZGlzYWJsZWQgaWYgdGhleSBhcmUgcmV0dXJucyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgc2VsZWN0ZWQgcmV0dXJuXHJcbiAgLy8gICAvLyBvciBvbiBvdmVybGFwcGluZyB0aW1lc1xyXG4gIC8vICAgaWYgKHdheSA9PT0gJ2RlcGFydHMnKSB7XHJcbiAgLy8gICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIC8vIG5vdyBnbyBvdmVyIHRoZSBmdWxsIHJlc3VsdHMgYW5kIGZpbmQgdGhlIG1hdGNoaW5nIHRpbWVzbG90XHJcbiAgLy8gICAgIGRlcGFydHNUaWNrZXQubGVuZ3RoXHJcbiAgLy8gICAgICAgPyAodGhpcy5fY2hvc2VuT3V0Ym91bmRKb3VybmV5ID0gdGhpcy5yZXN1bHRzLnZhbHVlWzBdLm91dGJvdW5kLmZpbmQoXHJcbiAgLy8gICAgICAgICAgIChvdXQ6IFJhaWxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIG91dC5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllciA9PT0gdGltZVNsb3RJZDtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgKSlcclxuICAvLyAgICAgICA6ICh0aGlzLl9jaG9zZW5PdXRib3VuZEpvdXJuZXkgPSBudWxsKTtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgIT09XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGNvbnNvbGUud2FybignKysrIENhbm5vdCBjb21iaW5lIGZhcmVzLCBjbGVhcmluZyBpbmJvdW5kLi4uICsrKycpO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gIC8vICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXRcclxuICAvLyAgICAgICA/ICh0aGlzLl9jaG9zZW5JbmJvdW5kSm91cm5leSA9IHRoaXMucmVzdWx0cy52YWx1ZVswXS5yZXR1cm4uZmluZChcclxuICAvLyAgICAgICAgICAgKGluVDogUmFpbEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gaW5ULmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyID09PSB0aW1lU2xvdElkO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICApKVxyXG4gIC8vICAgICAgIDogKHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbCk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5jaG9zZW5PdXRib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgcmV0dXJuIHRpY2tldHNHcm91cHM7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSBmYXJlIGNhbiBiZSBjb21iaW5lZCB3aXRoIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgc2VsZWN0ZWRcclxuICAgKi9cclxuICAvLyBjYW5Db21iaW5lKGpvdXJuZXlJZGVudGlmaWVyOiBzdHJpbmcsIGZhcmVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAvLyAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXMgbGF0ZXIgb25cclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQgJiZcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcikgPiA1XHJcbiAgLy8gICApIHtcclxuICAvLyAgICAgLy8gZ3JlYXRlciB0aGFuIDUgb25seSBhcyB3ZSBhcmUgbm90IGdvaW5nIHRvIHJlc3RyaWN0IG91dGJvdW5kc1xyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgdGhpcy5fY2FuQ29tYmluZVt0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC50eXBlXVtcclxuICAvLyAgICAgICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcilcclxuICAvLyAgICAgICBdPy5pbmNsdWRlcyhmYXJlSWRlbnRpZmllcikgJiZcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciA9PT0gZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIGNsZWFyVW5uZWVkZWRUaWNrZXRzKFxyXG4gICAgd2F5OiBzdHJpbmcsXHJcbiAgICBncm91cDogUmFpbFRpY2tldEdyb3VwLFxyXG4gICAgdGltZVNsb3RJZDogc3RyaW5nXHJcbiAgKTogUmFpbFRpY2tldEdyb3VwIHtcclxuICAgIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgICAgICAgKGluZGljaWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihpbmRpY2llKSA8PSA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMuZmlsdGVyKFxyXG4gICAgICAgIChpbmRpY2llOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBOdW1iZXIoaW5kaWNpZSkgPiA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIC8vIGdldFJhaWxTdGF0aW9uKFxyXG4gIC8vICAgY29kZTogc3RyaW5nLFxyXG4gIC8vICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICAvLyApOiBPYnNlcnZhYmxlPElybFN0YXRpb24+IHtcclxuICAvLyAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gIC8vICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gIC8vICAgICAgIHRha2UoMSlcclxuICAvLyAgICAgKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBvZigpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRpcmxUaWNrZXRPcHRpb24oXHJcbiAgLy8gICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIC8vICAgaXJsVGlja2V0R3JvdXA6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgLy8gKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAvLyAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgLy8gICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldEdyb3VwLmhlYWRlci50eXBlICYmXHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnByaWNlID09PSBpcmxUaWNrZXRHcm91cC5oZWFkZXIucHJpY2VcclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOiBzZWdtZW50Lm9wZXJhdG9yLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAvLyAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gIC8vICAgcmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgLy8gICByYWlsSm91cm5leU9wdGlvbjogUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICByYWlsVGlja2V0R3JvdXA6IFJhaWxUaWNrZXRHcm91cFxyXG4gIC8vICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAvLyAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAvLyAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAvLyAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAvLyAgIGlmIChiYXNrZXQpIHtcclxuICAvLyAgICAgY29uc3Qgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24oXHJcbiAgLy8gICAgICAgcmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICAgICAgcmFpbFRpY2tldEdyb3VwLFxyXG4gIC8vICAgICAgIDBcclxuICAvLyAgICAgKTtcclxuICAvLyAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgLy8gICAgIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi50aWNrZXRRdWV1ZUxpc3QubWFwKFxyXG4gIC8vICAgICAgICh0aWNrZXRRdWV1ZUxpc3QpID0+IHtcclxuICAvLyAgICAgICAgIHJldHVybiB7XHJcbiAgLy8gICAgICAgICAgIGlkOiB0aWNrZXRRdWV1ZUxpc3QuaWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdC5uYW1lLFxyXG4gIC8vICAgICAgICAgICB0eXBlOiB0aWNrZXRRdWV1ZUxpc3QudHlwZVxyXG4gIC8vICAgICAgICAgfTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcblxyXG4gIC8vICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gIC8vICAgICAgIHtcclxuICAvLyAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gIC8vICAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gIC8vICAgICAgICAgZGV0YWlsOiB7XHJcbiAgLy8gICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gIC8vICAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gIC8vICAgICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gIC8vICAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgLy8gICAgICAgICAgICAgICAgIGxlZ3NcclxuICAvLyAgICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgICBdXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAvLyAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgLy8gICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgLy8gICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICAgICAgICBdLFxyXG4gIC8vICAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gIC8vICAgICAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAvLyAgICAgICAgIHByaWNlOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgLy8gICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAvLyAgICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgLy8gICAgICAgICBjbzJQZXJJdGVtOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gIC8vICAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXJcclxuICAvLyAgICAgICB9LFxyXG4gIC8vICAgICAgIGludEJhc2tldCxcclxuICAvLyAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgLy8gICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGFzeW5jIGFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAvLyAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gIC8vICAgcmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgLy8gICBvdXRib3VuZDogUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICBpbmJvdW5kOiBSYWlsSm91cm5leU9wdGlvbixcclxuICAvLyAgIHJhaWxUaWNrZXRHcm91cDogUmFpbFRpY2tldEdyb3VwXHJcbiAgLy8gKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8gICBpZiAob3V0Ym91bmQudW5zZWxsYWJsZSkge1xyXG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gIC8vICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gIC8vICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gIC8vICAgaWYgKGJhc2tldCkge1xyXG4gIC8vICAgICBjb25zdCBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbihcclxuICAvLyAgICAgICBvdXRib3VuZCxcclxuICAvLyAgICAgICByYWlsVGlja2V0R3JvdXAsXHJcbiAgLy8gICAgICAgMFxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gIC8vICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAvLyAgICAgY29uc3QgdGlja2V0UXVldWVMaXN0ID0gc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgLy8gICAgICAgKHRpY2tldFF1ZXVlTGlzdDE6IFJhaWxUaWNrZXRRdWV1ZSkgPT4ge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIHtcclxuICAvLyAgICAgICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdDEuaWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdDEubmFtZSxcclxuICAvLyAgICAgICAgICAgdHlwZTogdGlja2V0UXVldWVMaXN0MS50eXBlXHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgLy8gICAgICAge1xyXG4gIC8vICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgLy8gICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgLy8gICAgICAgICBkZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gIC8vICAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAvLyAgICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dGJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmQucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24udHlwZSxcclxuICAvLyAgICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAvLyAgICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgLy8gICAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgICAgXVxyXG4gIC8vICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZC5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAvLyAgICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi50eXBlLFxyXG4gIC8vICAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIF1cclxuICAvLyAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgLy8gICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgLy8gICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICAgICAgICBdLFxyXG4gIC8vICAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gIC8vICAgICAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAvLyAgICAgICAgIHByaWNlOiByYWlsVGlja2V0R3JvdXAuaGVhZGVyLnByaWNlLFxyXG4gIC8vICAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgLy8gICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gIC8vICAgICAgICAgY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAvLyAgICAgICAgIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgICBpbnRCYXNrZXQsXHJcbiAgLy8gICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gIC8vICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzb3J0VGlja2V0UHJpY2VzKHRpY2tldHM6IFRpY2tldEdyb3Vwcyk6IFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBjb25zdCBzb3J0VGlja2V0UHJpY2VzID0geyAuLi50aWNrZXRzIH07XHJcbiAgLy8gICBPYmplY3Qua2V5cyhzb3J0VGlja2V0UHJpY2VzKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICBzb3J0VGlja2V0UHJpY2VzW2tleV0uc29ydCgoYTogSXJsVGlja2V0T3B0aW9uLCBiOiBJcmxUaWNrZXRPcHRpb24pID0+IHtcclxuICAvLyAgICAgICBjb25zdCBwcmljZUEgPSBhLnByaWNlLFxyXG4gIC8vICAgICAgICAgcHJpY2VCID0gYi5wcmljZTtcclxuICAvLyAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIC8vIH1cclxuICAvLyBzb3J0VGlja2V0Q2hpbGRyZW5QcmljZXModGlja2V0czogUmFpbFRpY2tldEdyb3Vwcyk6IFJhaWxUaWNrZXRHcm91cHMge1xyXG4gIC8vICAgY29uc3Qgc29ydFRpY2tldFByaWNlcyA9IHsgLi4udGlja2V0cyB9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoc29ydFRpY2tldFByaWNlcykubWFwKChrZXkpID0+IHtcclxuICAvLyAgICAgc29ydFRpY2tldFByaWNlc1trZXldLmNoaWxkcmVuLnNvcnQoXHJcbiAgLy8gICAgICAgKGE6IFJhaWxUaWNrZXRHcm91cCwgYjogUmFpbFRpY2tldEdyb3VwKSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zdCBwcmljZUEgPSBhLmhlYWRlci5wcmljZSxcclxuICAvLyAgICAgICAgICAgcHJpY2VCID0gYi5oZWFkZXIucHJpY2U7XHJcbiAgLy8gICAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIH1cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBjaGVhcGVzdEFycjogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5vdXRib3VuZC5tYXAoKG91dCkgPT4ge1xyXG4gICAgICAgIG91dC5wcm92aWRlcnMubWFwKCh0a3QpID0+IHtcclxuICAgICAgICAgIGxldCBjaGVhcGVzdFRpY2tldDogbnVtYmVyID0gdGt0LmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgICAgICAgdGt0LnRpY2tldE9wdGlvbnMubWFwKCh0a3RPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBsZXQgdGt0Q2xhc3MgPSB0a3RPcHRpb24uY2xhc3M7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0a3RDbGFzcyA9PT0gJ0ZpcnN0JyAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdEZpcnN0Py5wcmljZSA+IHRrdFByaWNlIHx8ICF0aGlzLl9jaGVhcGVzdEZpcnN0KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdEZpcnN0ID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnU3RhbmRhcmQnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ/LnByaWNlID4gdGt0UHJpY2UgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLl9jaGVhcGVzdFN0YW5kYXJkKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0a3RQcmljZSA9PT0gY2hlYXBlc3RUaWNrZXQpIHtcclxuICAgICAgICAgICAgICBjaGVhcGVzdEFyci5wdXNoKGNoZWFwZXN0VGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oLi4uY2hlYXBlc3RBcnIpO1xyXG4gIH1cclxufVxyXG4iXX0=