@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.
- package/dist/obtservices/angular/components/basket-panel.d.ts +34 -0
- package/dist/obtservices/angular/components/with-component.d.ts +12 -0
- package/dist/obtservices/angular/data.d.ts +5530 -0
- package/dist/obtservices/angular/fetchers.d.ts +32 -0
- package/dist/obtservices/angular/lib/vendor/classes/environment.d.ts +3 -0
- package/dist/obtservices/angular/lib/vendor/classes/event-messenager.d.ts +4 -0
- package/dist/obtservices/angular/lib/vendor/classes/helpers.d.ts +15 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/basket-fetcher.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/flight-quote.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/irl-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/parking-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/rail-quote-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-airlines-fetcher.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-airports-fetcher.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-cities.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-depots.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/user-addresses.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/user-fetcher.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/user-message.fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/user-products-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/services/enterprise-basket.service.d.ts +29 -0
- package/dist/obtservices/angular/lib/vendor/services/hotel-avallibility.service.d.ts +9 -0
- package/dist/obtservices/angular/lib/vendor/services/http-call.service.d.ts +48 -0
- package/dist/obtservices/angular/lib/vendor/services/logon.service.d.ts +18 -0
- package/dist/obtservices/angular/lib/vendor/services/modal-opener.service.d.ts +4 -0
- package/dist/obtservices/angular/lib/vendor/services/my-bookings.service.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/services/route-happy.service.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/services/search.service.d.ts +47 -0
- package/dist/obtservices/angular/lib/vendor/services/storage.service.d.ts +18 -0
- package/dist/obtservices/angular/lib/vendor/services/user.service.d.ts +10 -0
- package/dist/obtservices/angular/lib/vendor/services/webtoken.service.d.ts +7 -0
- package/dist/obtservices/angular/lib/vendor/testers/postcode-validate.tester.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/testers/validate-mi-free-value.tester.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/types/graphql.angular.types.d.ts +5915 -0
- package/dist/obtservices/angular/lib/vendor/updaters/accept-new-price.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/add-item-to-basket.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/addUserToBasketItem.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/book-basket-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/create-basket-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/move-basket-item-to-basket.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/remove-basket-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/remove-recent-search.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/remove-user-address.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/revalidate-basket-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/save-recent-search.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/save-user-address.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-group.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/set-payment-option.updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/update-basket-notes-updater.d.ts +6 -0
- package/dist/obtservices/angular/lib/vendor/updaters/update-basket-title-updater.d.ts +6 -0
- package/dist/obtservices/angular/obtservices-angular.d.ts +17 -0
- package/dist/obtservices/angular/obtservices-angular.metadata.json +1 -0
- package/dist/obtservices/angular/obtservices.module.d.ts +7 -0
- package/dist/obtservices/angular/package.json +11 -0
- package/dist/obtservices/base/fetchers.d.ts +36 -0
- package/dist/obtservices/base/lib/vendor/classes/base-enterprise.d.ts +39 -0
- package/dist/obtservices/base/lib/vendor/classes/base-network-call.d.ts +10 -0
- package/dist/obtservices/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/classes/bookable-basket.d.ts +40 -0
- package/dist/obtservices/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +138 -0
- package/dist/obtservices/base/lib/vendor/classes/carhire-enterprise-search.d.ts +203 -0
- package/dist/obtservices/base/lib/vendor/classes/enviroment.d.ts +24 -0
- package/dist/obtservices/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +268 -0
- package/dist/obtservices/base/lib/vendor/classes/eurostar-search-type.enum.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/classes/event-messenager.d.ts +12 -0
- package/dist/obtservices/base/lib/vendor/classes/flight-enterprise-search.d.ts +251 -0
- package/dist/obtservices/base/lib/vendor/classes/flight-search-type.enum.d.ts +5 -0
- package/dist/obtservices/base/lib/vendor/classes/helpers.d.ts +173 -0
- package/dist/obtservices/base/lib/vendor/classes/hotel-enterprise-search.d.ts +176 -0
- package/dist/obtservices/base/lib/vendor/classes/irl-enterprise-search.d.ts +139 -0
- package/dist/obtservices/base/lib/vendor/classes/limited-cache.class.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/classes/lounges-enterprise-search.d.ts +68 -0
- package/dist/obtservices/base/lib/vendor/classes/management-info-and-valid.d.ts +41 -0
- package/dist/obtservices/base/lib/vendor/classes/modal-types.enum.d.ts +12 -0
- package/dist/obtservices/base/lib/vendor/classes/parking-enterprise-search.d.ts +103 -0
- package/dist/obtservices/base/lib/vendor/classes/rail-direction.enum.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/classes/rail-enterprise-search.d.ts +193 -0
- package/dist/obtservices/base/lib/vendor/classes/routehappy-request.d.ts +126 -0
- package/dist/obtservices/base/lib/vendor/classes/routehappy-response.d.ts +107 -0
- package/dist/obtservices/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +62 -0
- package/dist/obtservices/base/lib/vendor/classes/user-favourite.enum.d.ts +12 -0
- package/dist/obtservices/base/lib/vendor/classes/validator.checker.d.ts +6 -0
- package/dist/obtservices/base/lib/vendor/fetchers/basket-fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +24 -0
- package/dist/obtservices/base/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +11 -0
- package/dist/obtservices/base/lib/vendor/fetchers/parking-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/rail-quote-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-airlines.fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-airports-fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-cities.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-depots.fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/user-addresses.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/user-fetcher.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/fetchers/user-message.fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/user-products-fetcher.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +23 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +133 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +99 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +64 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +124 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +123 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +192 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +45 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +36 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Imybookings.service.d.ts +24 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +58 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +110 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Isearch.service.d.ts +101 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +42 -0
- package/dist/obtservices/base/lib/vendor/interfaces/Iuser.service.d.ts +59 -0
- package/dist/obtservices/base/lib/vendor/interfaces/car-hire-classes.interface.d.ts +7 -0
- package/dist/obtservices/base/lib/vendor/interfaces/car-hire-filters.interface.d.ts +10 -0
- package/dist/obtservices/base/lib/vendor/interfaces/car-hire-sort.interface.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/interfaces/cheapest-price.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/interfaces/code-name.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/interfaces/flight-filters.interface.d.ts +29 -0
- package/dist/obtservices/base/lib/vendor/interfaces/flight-multi-destination.interface.d.ts +7 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-airport-express-stations.interface.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +69 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +6 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +19 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +10 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +26 -0
- package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/interfaces/search-objects.interface.d.ts +16 -0
- package/dist/obtservices/base/lib/vendor/interfaces/select-filter.interface.d.ts +5 -0
- package/dist/obtservices/base/lib/vendor/interfaces/user.data.d.ts +21 -0
- package/dist/obtservices/base/lib/vendor/interfaces/value-display.d.ts +4 -0
- package/dist/obtservices/base/lib/vendor/models/login.model.d.ts +52 -0
- package/dist/obtservices/base/lib/vendor/models/regexp.model.d.ts +10 -0
- package/dist/obtservices/base/lib/vendor/models/traveller.object.d.ts +22 -0
- package/dist/obtservices/base/lib/vendor/services/enterprise-basket.service.d.ts +177 -0
- package/dist/obtservices/base/lib/vendor/services/hotel-avallibility.service.d.ts +31 -0
- package/dist/obtservices/base/lib/vendor/services/http-call.service.d.ts +17 -0
- package/dist/obtservices/base/lib/vendor/services/logon.service.d.ts +39 -0
- package/dist/obtservices/base/lib/vendor/services/modal-opener.service.d.ts +13 -0
- package/dist/obtservices/base/lib/vendor/services/my-bookings.service.d.ts +31 -0
- package/dist/obtservices/base/lib/vendor/services/routehappy.service.d.ts +47 -0
- package/dist/obtservices/base/lib/vendor/services/search.service.d.ts +236 -0
- package/dist/obtservices/base/lib/vendor/services/storage.service.d.ts +9 -0
- package/dist/obtservices/base/lib/vendor/services/url.service.d.ts +10 -0
- package/dist/obtservices/base/lib/vendor/services/user.service.d.ts +62 -0
- package/dist/obtservices/base/lib/vendor/services/webtoken.service.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/testers/base.tester.d.ts +11 -0
- package/dist/obtservices/base/lib/vendor/testers/postcode-validate.tester.d.ts +17 -0
- package/dist/obtservices/base/lib/vendor/testers/validate-mi-free-value.tester.d.ts +17 -0
- package/dist/obtservices/base/lib/vendor/types/graphql.types.d.ts +5597 -0
- package/dist/obtservices/base/lib/vendor/types/types.d.ts +444 -0
- package/dist/obtservices/base/lib/vendor/updaters/accept-new-price.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/add-item-to-basket.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/addUserToBasketItem.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/book-basket-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/create-basket-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/move-basket-item-to-basket.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/object-updater-enterprise.d.ts +11 -0
- package/dist/obtservices/base/lib/vendor/updaters/remove-basket-updater.d.ts +19 -0
- package/dist/obtservices/base/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/remove-recent-search-updater.d.ts +19 -0
- package/dist/obtservices/base/lib/vendor/updaters/remove-user-address-updater.d.ts +19 -0
- package/dist/obtservices/base/lib/vendor/updaters/revalidate-basket-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/save-recent-search-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/save-user-address.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-group.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/update-basket-notes-updater.d.ts +20 -0
- package/dist/obtservices/base/lib/vendor/updaters/update-basket-title-updater.d.ts +20 -0
- package/dist/obtservices/base/obtservices-base.d.ts +9 -0
- package/dist/obtservices/base/obtservices-base.metadata.json +1 -0
- package/dist/obtservices/base/package.json +11 -0
- package/dist/obtservices/bundles/obtservices-angular.umd.js +32033 -0
- package/dist/obtservices/bundles/obtservices-angular.umd.js.map +1 -0
- package/dist/obtservices/bundles/obtservices-angular.umd.min.js +2 -0
- package/dist/obtservices/bundles/obtservices-angular.umd.min.js.map +1 -0
- package/dist/obtservices/bundles/obtservices-base.umd.js +18609 -0
- package/dist/obtservices/bundles/obtservices-base.umd.js.map +1 -0
- package/dist/obtservices/bundles/obtservices-base.umd.min.js +16 -0
- package/dist/obtservices/bundles/obtservices-base.umd.min.js.map +1 -0
- package/dist/obtservices/bundles/obtservices.umd.js +18 -0
- package/dist/obtservices/bundles/obtservices.umd.js.map +1 -0
- package/dist/obtservices/bundles/obtservices.umd.min.js +2 -0
- package/dist/obtservices/bundles/obtservices.umd.min.js.map +1 -0
- package/dist/obtservices/esm2015/angular/classes.js +4 -0
- package/dist/obtservices/esm2015/angular/components/basket-panel.js +113 -0
- package/dist/obtservices/esm2015/angular/components/with-component.js +26 -0
- package/dist/obtservices/esm2015/angular/components.js +3 -0
- package/dist/obtservices/esm2015/angular/data.js +5 -0
- package/dist/obtservices/esm2015/angular/fetchers.js +33 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/classes/environment.js +10 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/classes/event-messenager.js +16 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/classes/helpers.js +81 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/data/airports.data.json +5508 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/data/flight-booking.data.json +136 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/basket-fetcher.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/cabhire-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-office-names.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/eurostar-quote.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/flight-quote.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-cards.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-station.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-users-baskets-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/irl-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/lounge-quote.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/parking-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/rail-quote-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airlines-fetcher.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airports-fetcher.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-cities.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-depots.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-postcodes.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-rail-stations.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-addresses.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-fetcher.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-message.fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-products-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-ui-configs-fetcher.js +25 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +91 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/hotel-avallibility.service.js +28 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/http-call.service.js +220 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/logon.service.js +41 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/modal-opener.service.js +15 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/my-bookings.service.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/route-happy.service.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/search.service.js +142 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/storage.service.js +79 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/user.service.js +31 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/services/webtoken.service.js +59 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/testers/postcode-validate.tester.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/testers/validate-mi-free-value.tester.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/types/graphql.angular.types.js +5662 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/accept-new-price.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/add-item-to-basket.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/addUserToBasketItem.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/book-basket-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/create-basket-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/move-basket-item-to-basket.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-basket-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-item-from-basket.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-recent-search.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-user-address.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/revalidate-basket-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-recent-search.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-user-address.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/send-basket-for-approval.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-group.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-payment-option.updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-notes-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-title-updater.js +22 -0
- package/dist/obtservices/esm2015/angular/obtservices-angular.js +18 -0
- package/dist/obtservices/esm2015/angular/obtservices.module.js +128 -0
- package/dist/obtservices/esm2015/angular/public_api.js +9 -0
- package/dist/obtservices/esm2015/angular/services.js +12 -0
- package/dist/obtservices/esm2015/angular/types.js +2 -0
- package/dist/obtservices/esm2015/angular/updaters.js +14 -0
- package/dist/obtservices/esm2015/base/classes.js +28 -0
- package/dist/obtservices/esm2015/base/fetchers.js +37 -0
- package/dist/obtservices/esm2015/base/interfaces.js +30 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/base-enterprise.js +78 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/base-network-call.js +24 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +35 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/bookable-basket.js +237 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +696 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +1204 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/enviroment.js +12 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +1462 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-search-type.enum.js +6 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/event-messenager.js +17 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1640 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-search-type.enum.js +7 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/helpers.js +978 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +1022 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +1117 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/limited-cache.class.js +64 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +323 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/management-info-and-valid.js +174 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/modal-types.enum.js +22 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +397 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-direction.enum.js +6 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +1324 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-request.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-response.js +8 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +250 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/user-favourite.enum.js +15 -0
- package/dist/obtservices/esm2015/base/lib/vendor/classes/validator.checker.js +4 -0
- package/dist/obtservices/esm2015/base/lib/vendor/data/countries.json +1212 -0
- package/dist/obtservices/esm2015/base/lib/vendor/data/euro-stations.json +30 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/basket-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/cabhire-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-office-names.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-quicklist.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-cards.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-station.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-risk-alerts.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-company-offices.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-users-baskets-fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-avaliability-fetcher.js +22 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/list-fetchable-enterprise.js +27 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/lounge-quote.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/object-fetchable-enterprise.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/parking-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/rail-quote-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airlines.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airports-fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-cities.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-depots.fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-hotel-chains.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-postcodes.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-rail-stations.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-addresses.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-fetcher.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-message.fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-products-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-ui-configs-fetcher.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +17 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +18 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isearch.service.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iuser.service.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-classes.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-filters.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-sort.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/cheapest-price.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/code-name.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-multi-destination.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-airport-express-stations.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-journey-leg.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-group.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/search-objects.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/select-filter.interface.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/user.data.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/interfaces/value-display.js +2 -0
- package/dist/obtservices/esm2015/base/lib/vendor/models/login.model.js +71 -0
- package/dist/obtservices/esm2015/base/lib/vendor/models/regexp.model.js +13 -0
- package/dist/obtservices/esm2015/base/lib/vendor/models/traveller.object.js +38 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/enterprise-basket.service.js +669 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +165 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/http-call.service.js +16 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/logon.service.js +177 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/modal-opener.service.js +20 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/my-bookings.service.js +124 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/routehappy.service.js +196 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/search.service.js +1281 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/storage.service.js +3 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/url.service.js +12 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/user.service.js +223 -0
- package/dist/obtservices/esm2015/base/lib/vendor/services/webtoken.service.js +56 -0
- package/dist/obtservices/esm2015/base/lib/vendor/testers/base.tester.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/testers/postcode-validate.tester.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/testers/validate-mi-free-value.tester.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/types/graphql.types.js +456 -0
- package/dist/obtservices/esm2015/base/lib/vendor/types/types.js +161 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/accept-new-price.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/add-item-to-basket.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/addUserToBasketItem.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/book-basket-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/create-basket-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/move-basket-item-to-basket.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/object-updater-enterprise.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-basket-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-item-from-basket.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-recent-search-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-user-address-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/revalidate-basket-updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-recent-search-updater.js +11 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-user-address.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/send-basket-for-approval.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-group.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-value-updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-notes-updater.js +10 -0
- package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-title-updater.js +10 -0
- package/dist/obtservices/esm2015/base/models.js +4 -0
- package/dist/obtservices/esm2015/base/obtservices-base.js +9 -0
- package/dist/obtservices/esm2015/base/public_api.js +9 -0
- package/dist/obtservices/esm2015/base/services.js +13 -0
- package/dist/obtservices/esm2015/base/testers.js +3 -0
- package/dist/obtservices/esm2015/base/types.js +2 -0
- package/dist/obtservices/esm2015/base/updaters.js +21 -0
- package/dist/obtservices/esm2015/obtservices.js +5 -0
- package/dist/obtservices/esm2015/public_api.js +2 -0
- package/dist/obtservices/fesm2015/obtservices-angular.js +35267 -0
- package/dist/obtservices/fesm2015/obtservices-angular.js.map +1 -0
- package/dist/obtservices/fesm2015/obtservices-base.js +16573 -0
- package/dist/obtservices/fesm2015/obtservices-base.js.map +1 -0
- package/dist/obtservices/fesm2015/obtservices.js +8 -0
- package/dist/obtservices/fesm2015/obtservices.js.map +1 -0
- package/dist/obtservices/obtservices.d.ts +4 -0
- package/dist/obtservices/obtservices.metadata.json +1 -0
- package/dist/obtservices/package.json +23 -0
- package/dist/obtservices/public_api.d.ts +1 -0
- package/dist/obtservices/tsconfig.lib.tsbuildinfo +3 -0
- package/package.json +1 -1
- package/projects/obtservices/angular/package.json +0 -3
- package/projects/obtservices/angular/src/components/basket-panel.ts +0 -139
- package/projects/obtservices/angular/src/components/with-component.ts +0 -40
- package/projects/obtservices/angular/src/data.ts +0 -5
- package/projects/obtservices/angular/src/fetchers.ts +0 -32
- package/projects/obtservices/angular/src/lib/vendor/classes/environment.ts +0 -5
- package/projects/obtservices/angular/src/lib/vendor/classes/event-messenager.ts +0 -11
- package/projects/obtservices/angular/src/lib/vendor/classes/helpers.ts +0 -87
- package/projects/obtservices/angular/src/lib/vendor/data/airports.data.json +0 -5508
- package/projects/obtservices/angular/src/lib/vendor/data/animations.ts +0 -38
- package/projects/obtservices/angular/src/lib/vendor/data/booking-expected-responses.json +0 -100
- package/projects/obtservices/angular/src/lib/vendor/data/cities.data.json +0 -31499
- package/projects/obtservices/angular/src/lib/vendor/data/countries.json +0 -1212
- package/projects/obtservices/angular/src/lib/vendor/data/flight-booking.data.json +0 -136
- package/projects/obtservices/angular/src/lib/vendor/data/postcodes1.json +0 -194
- package/projects/obtservices/angular/src/lib/vendor/data/rail_addresses.json +0 -2524
- package/projects/obtservices/angular/src/lib/vendor/fetchers/basket-fetcher.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -15
- package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -17
- package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -18
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -17
- package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airlines-fetcher.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -18
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-fetcher.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -16
- package/projects/obtservices/angular/src/lib/vendor/services/enterprise-basket.service.ts +0 -133
- package/projects/obtservices/angular/src/lib/vendor/services/hotel-avallibility.service.ts +0 -19
- package/projects/obtservices/angular/src/lib/vendor/services/http-call.service.ts +0 -252
- package/projects/obtservices/angular/src/lib/vendor/services/logon.service.ts +0 -40
- package/projects/obtservices/angular/src/lib/vendor/services/modal-opener.service.ts +0 -9
- package/projects/obtservices/angular/src/lib/vendor/services/my-bookings.service.ts +0 -21
- package/projects/obtservices/angular/src/lib/vendor/services/route-happy.service.ts +0 -11
- package/projects/obtservices/angular/src/lib/vendor/services/search.service.ts +0 -213
- package/projects/obtservices/angular/src/lib/vendor/services/storage.service.ts +0 -82
- package/projects/obtservices/angular/src/lib/vendor/services/user.service.ts +0 -36
- package/projects/obtservices/angular/src/lib/vendor/services/webtoken.service.ts +0 -62
- package/projects/obtservices/angular/src/lib/vendor/testers/postcode-validate.tester.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/types/graphql.angular.types.ts +0 -11081
- package/projects/obtservices/angular/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/book-basket-updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/create-basket-updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-basket-updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-recent-search.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-user-address.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/save-recent-search.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/save-user-address.updater.ts +0 -11
- package/projects/obtservices/angular/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -15
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-payment-option.updater.ts +0 -15
- package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -14
- package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -14
- package/projects/obtservices/angular/src/obtservices.module.ts +0 -131
- package/projects/obtservices/base/package.json +0 -3
- package/projects/obtservices/base/src/custom.d.ts +0 -3
- package/projects/obtservices/base/src/fetchers.ts +0 -36
- package/projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts +0 -126
- package/projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts +0 -40
- package/projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts +0 -68
- package/projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts +0 -343
- package/projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts +0 -907
- package/projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts +0 -1597
- package/projects/obtservices/base/src/lib/vendor/classes/empty-enterprise-search.ts +0 -75
- package/projects/obtservices/base/src/lib/vendor/classes/enviroment.ts +0 -25
- package/projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts +0 -2126
- package/projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts +0 -23
- package/projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts +0 -2399
- package/projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts +0 -5
- package/projects/obtservices/base/src/lib/vendor/classes/helpers.ts +0 -1233
- package/projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts +0 -1370
- package/projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts +0 -1380
- package/projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts +0 -70
- package/projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts +0 -444
- package/projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts +0 -268
- package/projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts +0 -28
- package/projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts +0 -541
- package/projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts +0 -1751
- package/projects/obtservices/base/src/lib/vendor/classes/routehappy-request.ts +0 -146
- package/projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts +0 -128
- package/projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts +0 -375
- package/projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts +0 -12
- package/projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts +0 -7
- package/projects/obtservices/base/src/lib/vendor/data/airports.data.json +0 -5508
- package/projects/obtservices/base/src/lib/vendor/data/booking-expected-responses.json +0 -100
- package/projects/obtservices/base/src/lib/vendor/data/cities.data.json +0 -31499
- package/projects/obtservices/base/src/lib/vendor/data/countries.json +0 -1212
- package/projects/obtservices/base/src/lib/vendor/data/euro-stations.json +0 -30
- package/projects/obtservices/base/src/lib/vendor/data/flight-booking.data.json +0 -136
- package/projects/obtservices/base/src/lib/vendor/data/postcodes1.json +0 -194
- package/projects/obtservices/base/src/lib/vendor/data/rail_addresses.json +0 -2524
- package/projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -36
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -33
- package/projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -53
- package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts +0 -59
- package/projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts +0 -20
- package/projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -32
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -37
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts +0 -27
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -34
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -35
- package/projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts +0 -174
- package/projects/obtservices/base/src/lib/vendor/interfaces/Icarhire-enterprise-search.ts +0 -143
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ienterprise-basket.service.ts +0 -127
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ieurostar-enterprise-search.ts +0 -197
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iflight-enterprise-search.ts +0 -196
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts +0 -219
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iirl-enterprise-search.ts +0 -135
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ilounges-enterprise-search.ts +0 -58
- package/projects/obtservices/base/src/lib/vendor/interfaces/Imybookings.service.ts +0 -27
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iparking-enterprise-search.ts +0 -72
- package/projects/obtservices/base/src/lib/vendor/interfaces/Irail-enterprise-search.ts +0 -161
- package/projects/obtservices/base/src/lib/vendor/interfaces/Isearch.service.ts +0 -178
- package/projects/obtservices/base/src/lib/vendor/interfaces/Isupplementary-booking-info-impl.ts +0 -63
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iuser.service.ts +0 -87
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-classes.interface.ts +0 -8
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-filters.interface.ts +0 -11
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-sort.interface.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/interfaces/cheapest-price.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/interfaces/code-name.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/interfaces/flight-filters.interface.ts +0 -41
- package/projects/obtservices/base/src/lib/vendor/interfaces/flight-multi-destination.interface.ts +0 -8
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-airport-express-stations.interface.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-basket-item.interface.ts +0 -79
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-journey-leg.interface.ts +0 -6
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-recent-search-args.interface.ts +0 -20
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-selected-ticket.interface.ts +0 -11
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-group.interface.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-groups.interface.ts +0 -5
- package/projects/obtservices/base/src/lib/vendor/interfaces/search-objects.interface.ts +0 -17
- package/projects/obtservices/base/src/lib/vendor/interfaces/select-filter.interface.ts +0 -5
- package/projects/obtservices/base/src/lib/vendor/interfaces/user.data.ts +0 -22
- package/projects/obtservices/base/src/lib/vendor/interfaces/value-display.ts +0 -4
- package/projects/obtservices/base/src/lib/vendor/models/login.model.ts +0 -97
- package/projects/obtservices/base/src/lib/vendor/models/regexp.model.ts +0 -13
- package/projects/obtservices/base/src/lib/vendor/models/traveller.object.ts +0 -61
- package/projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts +0 -1150
- package/projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts +0 -251
- package/projects/obtservices/base/src/lib/vendor/services/http-call.service.ts +0 -57
- package/projects/obtservices/base/src/lib/vendor/services/logon.service.ts +0 -245
- package/projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts +0 -184
- package/projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts +0 -275
- package/projects/obtservices/base/src/lib/vendor/services/search.service.ts +0 -2026
- package/projects/obtservices/base/src/lib/vendor/services/storage.service.ts +0 -15
- package/projects/obtservices/base/src/lib/vendor/services/url.service.ts +0 -12
- package/projects/obtservices/base/src/lib/vendor/services/user.service.ts +0 -354
- package/projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts +0 -66
- package/projects/obtservices/base/src/lib/vendor/testers/base.tester.ts +0 -18
- package/projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts +0 -24
- package/projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -23
- package/projects/obtservices/base/src/lib/vendor/types/graphql.types.ts +0 -6184
- package/projects/obtservices/base/src/lib/vendor/types/types.ts +0 -630
- package/projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -31
- package/projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts +0 -28
- package/projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts +0 -20
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -28
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -29
- package/projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -31
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -32
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts +0 -28
- package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -30
- package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -30
- package/projects/obtservices/base/src/testers.ts +0 -2
- package/projects/obtservices/graphQL/autogenerated/index.js +0 -2
- package/projects/obtservices/graphQL/autogenerated/mutations/acceptNewPrice.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/addItemToBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/addUsersToBasketItem.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/bookBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/cancelBooking.gql +0 -6
- package/projects/obtservices/graphQL/autogenerated/mutations/confermaCreateCard.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/mutations/confermaDeleteCard.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/createBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteBasket.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteFavouriteSearch.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteRecentSearch.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteUserAddress.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/index.js +0 -36
- package/projects/obtservices/graphQL/autogenerated/mutations/moveItemToADifferentBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/removeItemFromBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/removeItemsFromBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/removeUserFromBasketItem.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/reopenBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasketItem.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/saveFavouriteSearch.gql +0 -348
- package/projects/obtservices/graphQL/autogenerated/mutations/saveRecentSearch.gql +0 -348
- package/projects/obtservices/graphQL/autogenerated/mutations/saveUserAddress.gql +0 -14
- package/projects/obtservices/graphQL/autogenerated/mutations/sendBasketForApproval.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/setAddressAsUserPrimary.gql +0 -14
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemLeadPassenger.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIGroup.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIValue.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemPaymentMethod.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/setMIDefaultValue.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/mutations/setUserLanguage.gql +0 -339
- package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketNotes.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketTitle.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/queries/alive.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/carHireAvailabilityDetailRequest.gql +0 -42
- package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockClientHotels.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockConsumerHotels.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/queries/confermaListCards.gql +0 -11
- package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockClientHotels.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockConsumerHotels.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/queries/getCOVIDMicrositeToken.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/getCancellationInfo.gql +0 -7
- package/projects/obtservices/graphQL/autogenerated/queries/getCarHireDepots.gql +0 -13
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOffice.gql +0 -50
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOfficeNames.gql +0 -26
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaQuicklist.gql +0 -131
- package/projects/obtservices/graphQL/autogenerated/queries/getCountries.gql +0 -8
- package/projects/obtservices/graphQL/autogenerated/queries/getHotelAvailability.gql +0 -78
- package/projects/obtservices/graphQL/autogenerated/queries/getHotelChains.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/getIRLSupplierStation.gql +0 -28
- package/projects/obtservices/graphQL/autogenerated/queries/getMultipleHotelsAvailability.gql +0 -78
- package/projects/obtservices/graphQL/autogenerated/queries/getPostcodeDetails.gql +0 -25
- package/projects/obtservices/graphQL/autogenerated/queries/getRailStation.gql +0 -27
- package/projects/obtservices/graphQL/autogenerated/queries/getRailcards.gql +0 -6
- package/projects/obtservices/graphQL/autogenerated/queries/getRiskAlerts.gql +0 -17
- package/projects/obtservices/graphQL/autogenerated/queries/getUser.gql +0 -339
- package/projects/obtservices/graphQL/autogenerated/queries/getUserAddresses.gql +0 -14
- package/projects/obtservices/graphQL/autogenerated/queries/getUserBasket.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/queries/getUserBaskets.gql +0 -1580
- package/projects/obtservices/graphQL/autogenerated/queries/getUserCompanyOffices.gql +0 -88
- package/projects/obtservices/graphQL/autogenerated/queries/getUserCurrentCarbonAllowance.gql +0 -524
- package/projects/obtservices/graphQL/autogenerated/queries/getUserFavouriteSearches.gql +0 -348
- package/projects/obtservices/graphQL/autogenerated/queries/getUserMIAutoSuggestValues.gql +0 -10
- package/projects/obtservices/graphQL/autogenerated/queries/getUserMessages.gql +0 -10
- package/projects/obtservices/graphQL/autogenerated/queries/getUserPhoneNumbers.gql +0 -13
- package/projects/obtservices/graphQL/autogenerated/queries/getUserRecentSearches.gql +0 -348
- package/projects/obtservices/graphQL/autogenerated/queries/getUserServices.gql +0 -16
- package/projects/obtservices/graphQL/autogenerated/queries/getUserTravelRules.gql +0 -111
- package/projects/obtservices/graphQL/autogenerated/queries/getUserUIConfigs.gql +0 -52
- package/projects/obtservices/graphQL/autogenerated/queries/index.js +0 -64
- package/projects/obtservices/graphQL/autogenerated/queries/isPostcodeValid.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/postcodeAutoSuggest.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/searchAirlines.gql +0 -32
- package/projects/obtservices/graphQL/autogenerated/queries/searchAirports.gql +0 -60
- package/projects/obtservices/graphQL/autogenerated/queries/searchCabHire.gql +0 -63
- package/projects/obtservices/graphQL/autogenerated/queries/searchCarHire.gql +0 -104
- package/projects/obtservices/graphQL/autogenerated/queries/searchCities.gql +0 -14
- package/projects/obtservices/graphQL/autogenerated/queries/searchConfermaCities.gql +0 -11
- package/projects/obtservices/graphQL/autogenerated/queries/searchEurostar.gql +0 -833
- package/projects/obtservices/graphQL/autogenerated/queries/searchFastTrack.gql +0 -46
- package/projects/obtservices/graphQL/autogenerated/queries/searchFlights.gql +0 -23
- package/projects/obtservices/graphQL/autogenerated/queries/searchFlightsV2.gql +0 -833
- package/projects/obtservices/graphQL/autogenerated/queries/searchHotelChains.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/searchHotels.gql +0 -131
- package/projects/obtservices/graphQL/autogenerated/queries/searchIRL.gql +0 -514
- package/projects/obtservices/graphQL/autogenerated/queries/searchIRLSupplierStations.gql +0 -28
- package/projects/obtservices/graphQL/autogenerated/queries/searchLounges.gql +0 -89
- package/projects/obtservices/graphQL/autogenerated/queries/searchParking.gql +0 -70
- package/projects/obtservices/graphQL/autogenerated/queries/searchPostcodes.gql +0 -25
- package/projects/obtservices/graphQL/autogenerated/queries/searchRail.gql +0 -840
- package/projects/obtservices/graphQL/autogenerated/queries/searchRailStations.gql +0 -27
- package/projects/obtservices/graphQL/autogenerated/queries/searchUserCanBookFor.gql +0 -339
- package/projects/obtservices/graphQL/autogenerated/queries/validateBasketItemMI.gql +0 -3
- package/projects/obtservices/graphQL/autogenerated/queries/validateUserMIFreeValue.gql +0 -3
- package/projects/obtservices/graphQL/documents/acceptNewPrice.graphql +0 -5
- package/projects/obtservices/graphQL/documents/addUserToBasketItem.graphql +0 -9
- package/projects/obtservices/graphQL/documents/basket.fragments.graphql +0 -171
- package/projects/obtservices/graphQL/documents/baskets.graphql +0 -111
- package/projects/obtservices/graphQL/documents/bookBasket.graphql +0 -9
- package/projects/obtservices/graphQL/documents/cabhire.graphql +0 -66
- package/projects/obtservices/graphQL/documents/carHireAvailabilityDetailRequest.graphql +0 -44
- package/projects/obtservices/graphQL/documents/carhire.graphql +0 -117
- package/projects/obtservices/graphQL/documents/deleteRecentSearch.graphql +0 -3
- package/projects/obtservices/graphQL/documents/deleteUserAddress.graphql +0 -3
- package/projects/obtservices/graphQL/documents/error.fragments.graphql +0 -10
- package/projects/obtservices/graphQL/documents/flights.graphql +0 -830
- package/projects/obtservices/graphQL/documents/getCarHireDepots.graphql +0 -13
- package/projects/obtservices/graphQL/documents/getConfermaOfficeNames.graphql +0 -11
- package/projects/obtservices/graphQL/documents/getConfermaQuicklist.graphql +0 -108
- package/projects/obtservices/graphQL/documents/getRailStation.graphql +0 -31
- package/projects/obtservices/graphQL/documents/getRailcards.graphql +0 -6
- package/projects/obtservices/graphQL/documents/getRiskAlerts.graphql +0 -24
- package/projects/obtservices/graphQL/documents/getUserAddresses.graphql +0 -14
- package/projects/obtservices/graphQL/documents/getUserCompanyOffices.graphql +0 -18
- package/projects/obtservices/graphQL/documents/getUserCurrentCarbonAllowance.graphql +0 -29
- package/projects/obtservices/graphQL/documents/getUserMIAutoSuggestValues.graphql +0 -10
- package/projects/obtservices/graphQL/documents/getUserPhoneNumbers.graphql +0 -13
- package/projects/obtservices/graphQL/documents/getUserRecentSearches.graphql +0 -20
- package/projects/obtservices/graphQL/documents/hotels.graphql +0 -242
- package/projects/obtservices/graphQL/documents/isPostcodeValid.graphql +0 -3
- package/projects/obtservices/graphQL/documents/lookups.graphql +0 -54
- package/projects/obtservices/graphQL/documents/lounges.graphql +0 -88
- package/projects/obtservices/graphQL/documents/moveItemToADifferentBasket.graphql +0 -9
- package/projects/obtservices/graphQL/documents/parking.graphql +0 -79
- package/projects/obtservices/graphQL/documents/rail.graphql +0 -645
- package/projects/obtservices/graphQL/documents/saveRecentSearch.graphql +0 -5
- package/projects/obtservices/graphQL/documents/saveUserAddress.graphql +0 -14
- package/projects/obtservices/graphQL/documents/searchAirlines.graphql +0 -32
- package/projects/obtservices/graphQL/documents/searchCities.graphql +0 -14
- package/projects/obtservices/graphQL/documents/searchConfermaCities.graphql +0 -11
- package/projects/obtservices/graphQL/documents/searchEurostar.graphql +0 -810
- package/projects/obtservices/graphQL/documents/searchHotelChains.graphql +0 -3
- package/projects/obtservices/graphQL/documents/searchIRL.graphql +0 -521
- package/projects/obtservices/graphQL/documents/searchPostcodes.graphql +0 -7
- package/projects/obtservices/graphQL/documents/searchRailStations.graphql +0 -27
- package/projects/obtservices/graphQL/documents/searchUserAddresses.graphql +0 -14
- package/projects/obtservices/graphQL/documents/set-basker-item-mi-group.graphql +0 -9
- package/projects/obtservices/graphQL/documents/setBasketItemLeadPassenger.graphql +0 -5
- package/projects/obtservices/graphQL/documents/setBasketItemMIValue.graphql +0 -16
- package/projects/obtservices/graphQL/documents/setBasketItemPaymentMethod.graphql +0 -12
- package/projects/obtservices/graphQL/documents/updateBasketNotes.graphql +0 -10
- package/projects/obtservices/graphQL/documents/updateBasketTitle.graphql +0 -10
- package/projects/obtservices/graphQL/documents/user.fragments.graphql +0 -65
- package/projects/obtservices/graphQL/documents/user.graphql +0 -95
- package/projects/obtservices/graphQL/documents/validateUserMIFreeValue.graphql +0 -3
- package/projects/obtservices/graphQL/schema/schema.graphql +0 -2635
- package/projects/obtservices/karma.conf.js +0 -32
- package/projects/obtservices/ng-package.json +0 -7
- package/projects/obtservices/package-lock.json +0 -5
- package/projects/obtservices/package.json +0 -12
- package/projects/obtservices/src/obtservices.ts +0 -0
- package/projects/obtservices/src/public_api.ts +0 -1
- package/projects/obtservices/tsconfig.lib.json +0 -30
- package/projects/obtservices/tsconfig.spec.json +0 -17
- package/projects/obtservices/tslint.json +0 -17
- /package/{projects → dist}/obtservices/README.md +0 -0
- /package/{projects/obtservices/angular/src/classes.ts → dist/obtservices/angular/classes.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/components.ts → dist/obtservices/angular/components.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/public_api.ts → dist/obtservices/angular/public_api.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/services.ts → dist/obtservices/angular/services.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/types.ts → dist/obtservices/angular/types.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/updaters.ts → dist/obtservices/angular/updaters.d.ts} +0 -0
- /package/{projects/obtservices/base/src/classes.ts → dist/obtservices/base/classes.d.ts} +0 -0
- /package/{projects/obtservices/base/src/interfaces.ts → dist/obtservices/base/interfaces.d.ts} +0 -0
- /package/{projects/obtservices/base/src/models.ts → dist/obtservices/base/models.d.ts} +0 -0
- /package/{projects/obtservices/base/src/public_api.ts → dist/obtservices/base/public_api.d.ts} +0 -0
- /package/{projects/obtservices/base/src/services.ts → dist/obtservices/base/services.d.ts} +0 -0
- /package/{projects/obtservices/angular/src/testers.ts → dist/obtservices/base/testers.d.ts} +0 -0
- /package/{projects/obtservices/base/src/types.ts → dist/obtservices/base/types.d.ts} +0 -0
- /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=
|