@norwegian/core-components 6.60.0 → 7.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/assets/fonts/NorwegianDisplay-Bold.ttf +0 -0
- package/assets/fonts/NorwegianDisplay-Regular.ttf +0 -0
- package/assets/fonts/NorwegianDisplayPro-Bold.otf +0 -0
- package/assets/fonts/NorwegianDisplayPro-Bold.woff +0 -0
- package/assets/fonts/NorwegianDisplayPro-Bold.woff2 +0 -0
- package/assets/fonts/NorwegianDisplayPro-Regular.otf +0 -0
- package/assets/fonts/NorwegianDisplayPro-Regular.woff +0 -0
- package/assets/fonts/NorwegianDisplayPro-Regular.woff2 +0 -0
- package/assets/fonts/NorwegianText-Bold.ttf +0 -0
- package/assets/fonts/NorwegianText-BoldItalic.ttf +0 -0
- package/assets/fonts/NorwegianText-Regular.ttf +0 -0
- package/assets/fonts/NorwegianText-RegularItalic.ttf +0 -0
- package/assets/fonts/NorwegianTextPro-Bold.otf +0 -0
- package/assets/fonts/NorwegianTextPro-Bold.woff +0 -0
- package/assets/fonts/NorwegianTextPro-Bold.woff2 +0 -0
- package/assets/fonts/NorwegianTextPro-BoldItalic.otf +0 -0
- package/assets/fonts/NorwegianTextPro-BoldItalic.woff +0 -0
- package/assets/fonts/NorwegianTextPro-BoldItalic.woff2 +0 -0
- package/assets/fonts/NorwegianTextPro-Regular.otf +0 -0
- package/assets/fonts/NorwegianTextPro-Regular.woff +0 -0
- package/assets/fonts/NorwegianTextPro-Regular.woff2 +0 -0
- package/assets/fonts/NorwegianTextPro-RegularItalic.otf +0 -0
- package/assets/fonts/NorwegianTextPro-RegularItalic.woff +0 -0
- package/assets/fonts/NorwegianTextPro-RegularItalic.woff2 +0 -0
- package/esm2022/lib/components/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +10 -7
- package/esm2022/lib/components/airport-select/airport-select.component.mjs +45 -12
- package/esm2022/lib/components/airport-select/airport-select.module.mjs +4 -4
- package/esm2022/lib/components/airport-select/index.mjs +1 -2
- package/esm2022/lib/components/airport-select/models/results-labels.model.mjs +1 -1
- package/esm2022/lib/components/airport-select/services/airport-select-dropdown.service.mjs +2 -2
- package/esm2022/lib/components/airport-select/services/airport-select.service.mjs +3 -3
- package/esm2022/lib/components/alert/alert.component.mjs +5 -5
- package/esm2022/lib/components/alert/alert.module.mjs +4 -4
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +25 -5
- package/esm2022/lib/components/autocomplete/autocomplete.module.mjs +4 -4
- package/esm2022/lib/components/autocomplete/index.mjs +1 -2
- package/esm2022/lib/components/box/box.component.mjs +2 -2
- package/esm2022/lib/components/button/button.component.mjs +16 -11
- package/esm2022/lib/components/button/button.module.mjs +1 -1
- package/esm2022/lib/components/campaign-header/campaign-header.component.mjs +2 -2
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/lib/components/checkbox/checkbox.module.mjs +1 -1
- package/esm2022/lib/components/continue/continue.component.mjs +2 -2
- package/esm2022/lib/components/continue/continue.module.mjs +1 -1
- package/esm2022/lib/components/cover/cover.component.mjs +2 -2
- package/esm2022/lib/components/cover/cover.module.mjs +1 -1
- package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +29 -5
- package/esm2022/lib/components/datepicker/calendar/models/day.model.mjs +1 -1
- package/esm2022/lib/components/datepicker/calendar/models/select-option.model.mjs +1 -1
- package/esm2022/lib/components/datepicker/calendar/models/week.model.mjs +1 -1
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +25 -11
- package/esm2022/lib/components/datepicker/datepicker.module.mjs +4 -4
- package/esm2022/lib/components/datepicker/index.mjs +2 -1
- package/esm2022/lib/components/datepicker/services/calendar.service.mjs +7 -5
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +38 -11
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.module.mjs +14 -6
- package/esm2022/lib/components/divider/divider.component.mjs +4 -4
- package/esm2022/lib/components/divider/divider.module.mjs +6 -6
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +2 -2
- package/esm2022/lib/components/filter/filter.component.mjs +139 -72
- package/esm2022/lib/components/filter/filter.module.mjs +23 -11
- package/esm2022/lib/components/filter/index.mjs +2 -1
- package/esm2022/lib/components/icon-list/icon-list.component.mjs +2 -2
- package/esm2022/lib/components/index.mjs +13 -15
- package/esm2022/lib/components/info/info.component.mjs +2 -2
- package/esm2022/lib/components/input/input.component.mjs +61 -14
- package/esm2022/lib/components/input/input.module.mjs +2 -2
- package/esm2022/lib/components/journey/journey.component.mjs +2 -2
- package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +2 -2
- package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +2 -2
- package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +2 -2
- package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +2 -2
- package/esm2022/lib/components/list/list.component.mjs +3 -3
- package/esm2022/lib/components/micro-button/micro-button.component.mjs +2 -2
- package/esm2022/lib/components/modal/modal.component.mjs +2 -2
- package/esm2022/lib/components/number-field/number-field.component.mjs +11 -4
- package/esm2022/lib/components/number-field/number-field.module.mjs +1 -1
- package/esm2022/lib/components/page-footer/page-footer.component.mjs +2 -2
- package/esm2022/lib/components/page-header/page-header.component.mjs +2 -2
- package/esm2022/lib/components/page-header/page-header.module.mjs +2 -6
- package/esm2022/lib/components/page-header/search/search.component.mjs +2 -2
- package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +9 -6
- package/esm2022/lib/components/passenger-select/index.mjs +3 -1
- package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +1 -1
- package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +5 -5
- package/esm2022/lib/components/passenger-select/passenger-select.module.mjs +14 -6
- package/esm2022/lib/components/phone-number/phone-number.component.mjs +2 -2
- package/esm2022/lib/components/radio/radio.component.mjs +4 -4
- package/esm2022/lib/components/ribbon-banner/ribbon-banner.component.mjs +2 -2
- package/esm2022/lib/components/select/select.component.mjs +2 -2
- package/esm2022/lib/components/simple-list/simple-list.component.mjs +2 -2
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +14 -14
- package/esm2022/lib/components/slide-toggle/slide-toggle.module.mjs +1 -1
- package/esm2022/lib/components/slider/slider.component.mjs +4 -4
- package/esm2022/lib/components/sort/sort.component.mjs +2 -2
- package/esm2022/lib/components/sort/sort.module.mjs +1 -1
- package/esm2022/lib/components/spinner/spinner.component.mjs +2 -2
- package/esm2022/lib/components/status-box/status-box.component.mjs +5 -6
- package/esm2022/lib/components/status-box/status-box.module.mjs +5 -5
- package/esm2022/lib/components/subsidy-discount/subsidy-discount.component.mjs +2 -2
- package/esm2022/lib/components/suggestions/suggestions.component.mjs +3 -3
- package/esm2022/lib/components/tab-group/tab/tab.component.mjs +2 -2
- package/esm2022/lib/components/table/table.component.mjs +2 -2
- package/esm2022/lib/components/tag/tag.component.mjs +2 -2
- package/esm2022/lib/components/textarea/textarea.component.mjs +2 -2
- package/esm2022/lib/components/toggle/toggle.component.mjs +2 -2
- package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +2 -2
- package/esm2022/lib/core/directives/nas-class/nas-class.module.mjs +1 -1
- package/fesm2022/norwegian-core-components.mjs +4605 -10823
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +3 -2
- package/lib/components/airport-select/airport-select.component.d.ts +22 -6
- package/lib/components/airport-select/index.d.ts +0 -1
- package/lib/components/alert/alert.module.d.ts +4 -4
- package/lib/components/autocomplete/autocomplete.component.d.ts +8 -4
- package/lib/components/autocomplete/index.d.ts +0 -1
- package/lib/components/button/button.component.d.ts +35 -26
- package/lib/components/checkbox/checkbox.component.d.ts +1 -1
- package/lib/components/datepicker/calendar/calendar.component.d.ts +11 -1
- package/lib/components/datepicker/calendar/models/day.model.d.ts +1 -0
- package/lib/components/datepicker/datepicker.component.d.ts +20 -2
- package/lib/components/datepicker/index.d.ts +1 -0
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +26 -3
- package/lib/components/divider/divider.module.d.ts +3 -3
- package/lib/components/filter/filter.component.d.ts +80 -24
- package/lib/components/filter/filter.module.d.ts +10 -7
- package/lib/components/filter/index.d.ts +1 -0
- package/lib/components/index.d.ts +12 -14
- package/lib/components/input/input.component.d.ts +21 -17
- package/lib/components/list/list.component.d.ts +1 -1
- package/lib/components/number-field/number-field.component.d.ts +10 -2
- package/lib/components/page-header/page-header.module.d.ts +2 -3
- package/lib/components/page-header/wallet/wallet.component.d.ts +1 -0
- package/lib/components/passenger-select/index.d.ts +2 -0
- package/lib/components/passenger-select/models/passengers.model.d.ts +1 -0
- package/lib/components/passenger-select/passenger-select.component.d.ts +2 -2
- package/lib/components/radio/radio.component.d.ts +1 -1
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +9 -9
- package/lib/components/slider/slider.component.d.ts +3 -3
- package/lib/components/status-box/status-box.component.d.ts +3 -3
- package/lib/components/status-box/status-box.module.d.ts +2 -2
- package/package.json +1 -1
- package/styles/1__settings/_colors.scss +107 -53
- package/styles/1__settings/_mixins.scss +78 -30
- package/styles/1__settings/_type.scss +17 -43
- package/styles/2__generic/_fonts.scss +16 -28
- package/styles/3__base/_body.scss +3 -3
- package/styles/3__base/_heading.scss +28 -20
- package/styles/3__base/_hr.scss +4 -4
- package/styles/3__base/_input.scss +3 -3
- package/styles/3__base/_link.scss +17 -17
- package/styles/3__base/_table.scss +9 -5
- package/styles/3__base/_type.scss +4 -4
- package/assets/documentation/autocomplete-new/autocomplete-new.md +0 -1
- package/assets/documentation/datepicker/calendar/calendar.md +0 -3
- package/assets/documentation/filter-new/filter-new.md +0 -0
- package/assets/documentation/number-field-new/number-field-new.md +0 -1
- package/assets/documentation/page-header-old/page-header-old.md +0 -1
- package/assets/documentation/weather-icon/weather-icon.md +0 -1
- package/assets/fonts/apercu_bold_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.svg +0 -12420
- package/assets/fonts/apercu_bold_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_bold_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_bold_italic_pro.otf +0 -0
- package/assets/fonts/apercu_bold_pro-web.eot +0 -0
- package/assets/fonts/apercu_bold_pro-web.svg +0 -10193
- package/assets/fonts/apercu_bold_pro-web.ttf +0 -0
- package/assets/fonts/apercu_bold_pro-web.woff +0 -0
- package/assets/fonts/apercu_bold_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_bold_pro.otf +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.svg +0 -12831
- package/assets/fonts/apercu_light_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_light_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_light_pro-web.eot +0 -0
- package/assets/fonts/apercu_light_pro-web.svg +0 -9704
- package/assets/fonts/apercu_light_pro-web.ttf +0 -0
- package/assets/fonts/apercu_light_pro-web.woff +0 -0
- package/assets/fonts/apercu_light_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.svg +0 -12354
- package/assets/fonts/apercu_medium_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_medium_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_italic_pro.otf +0 -0
- package/assets/fonts/apercu_medium_pro-web.eot +0 -0
- package/assets/fonts/apercu_medium_pro-web.svg +0 -12254
- package/assets/fonts/apercu_medium_pro-web.ttf +0 -0
- package/assets/fonts/apercu_medium_pro-web.woff +0 -0
- package/assets/fonts/apercu_medium_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_medium_pro.otf +0 -0
- package/assets/fonts/apercu_mono_pro-web.eot +0 -0
- package/assets/fonts/apercu_mono_pro-web.svg +0 -538
- package/assets/fonts/apercu_mono_pro-web.ttf +0 -0
- package/assets/fonts/apercu_mono_pro-web.woff +0 -0
- package/assets/fonts/apercu_mono_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.eot +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.svg +0 -13059
- package/assets/fonts/apercu_regular_italic_pro-web.ttf +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.woff +0 -0
- package/assets/fonts/apercu_regular_italic_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_italic_pro.otf +0 -0
- package/assets/fonts/apercu_regular_pro-web.eot +0 -0
- package/assets/fonts/apercu_regular_pro-web.svg +0 -11356
- package/assets/fonts/apercu_regular_pro-web.ttf +0 -0
- package/assets/fonts/apercu_regular_pro-web.woff +0 -0
- package/assets/fonts/apercu_regular_pro-web.woff2 +0 -0
- package/assets/fonts/apercu_regular_pro.otf +0 -0
- package/esm2022/lib/components/airport-select-new/airport-select-dropdown/airport-select-dropdown.component.mjs +0 -611
- package/esm2022/lib/components/airport-select-new/airport-select-new.component.mjs +0 -477
- package/esm2022/lib/components/airport-select-new/airport-select-new.module.mjs +0 -42
- package/esm2022/lib/components/airport-select-new/index.mjs +0 -4
- package/esm2022/lib/components/airport-select-new/models/airport.model.mjs +0 -2
- package/esm2022/lib/components/airport-select-new/models/results-labels.model.mjs +0 -3
- package/esm2022/lib/components/airport-select-new/services/airport-select-dropdown.service.mjs +0 -35
- package/esm2022/lib/components/airport-select-new/services/airport-select.service.mjs +0 -38
- package/esm2022/lib/components/autocomplete-new/autocomplete-new.component.mjs +0 -309
- package/esm2022/lib/components/autocomplete-new/autocomplete-new.module.mjs +0 -43
- package/esm2022/lib/components/autocomplete-new/index.mjs +0 -3
- package/esm2022/lib/components/autocomplete-new/models/autocomplete-new.model.mjs +0 -2
- package/esm2022/lib/components/button-new/button-new.component.mjs +0 -176
- package/esm2022/lib/components/button-new/button-new.module.mjs +0 -21
- package/esm2022/lib/components/button-new/index.mjs +0 -3
- package/esm2022/lib/components/checkbox-new/checkbox-new.component.mjs +0 -150
- package/esm2022/lib/components/checkbox-new/checkbox-new.module.mjs +0 -20
- package/esm2022/lib/components/checkbox-new/index.mjs +0 -3
- package/esm2022/lib/components/datepicker-combo-new/datepicker-combo-new.component.mjs +0 -397
- package/esm2022/lib/components/datepicker-combo-new/datepicker-combo-new.module.mjs +0 -31
- package/esm2022/lib/components/datepicker-combo-new/index.mjs +0 -3
- package/esm2022/lib/components/datepicker-new/calendar-new/calendar-date.model.mjs +0 -2
- package/esm2022/lib/components/datepicker-new/calendar-new/calendar-new.component.mjs +0 -594
- package/esm2022/lib/components/datepicker-new/calendar-new/enums/week-start.enum.mjs +0 -6
- package/esm2022/lib/components/datepicker-new/calendar-new/models/day.model.mjs +0 -2
- package/esm2022/lib/components/datepicker-new/calendar-new/models/select-option.model.mjs +0 -2
- package/esm2022/lib/components/datepicker-new/calendar-new/models/week.model.mjs +0 -2
- package/esm2022/lib/components/datepicker-new/datepicker-new.component.mjs +0 -572
- package/esm2022/lib/components/datepicker-new/datepicker-new.module.mjs +0 -55
- package/esm2022/lib/components/datepicker-new/index.mjs +0 -5
- package/esm2022/lib/components/datepicker-new/services/calendar.service.mjs +0 -215
- package/esm2022/lib/components/filter-new/enums/trip-type.enum.mjs +0 -8
- package/esm2022/lib/components/filter-new/filter-new.component.mjs +0 -1349
- package/esm2022/lib/components/filter-new/filter-new.module.mjs +0 -105
- package/esm2022/lib/components/filter-new/index.mjs +0 -4
- package/esm2022/lib/components/input-text/index.mjs +0 -3
- package/esm2022/lib/components/input-text/input-text.component.mjs +0 -231
- package/esm2022/lib/components/input-text/input-text.module.mjs +0 -35
- package/esm2022/lib/components/number-field-new/index.mjs +0 -3
- package/esm2022/lib/components/number-field-new/models/number-field-new.model.mjs +0 -2
- package/esm2022/lib/components/number-field-new/number-field-new.component.mjs +0 -155
- package/esm2022/lib/components/number-field-new/number-field-new.module.mjs +0 -39
- package/esm2022/lib/components/page-header-old/index.mjs +0 -5
- package/esm2022/lib/components/page-header-old/old-hamburger/old-hamburger.component.mjs +0 -22
- package/esm2022/lib/components/page-header-old/old-search/old-search.component.mjs +0 -49
- package/esm2022/lib/components/page-header-old/page-header-old.component.mjs +0 -160
- package/esm2022/lib/components/page-header-old/page-header-old.module.mjs +0 -44
- package/esm2022/lib/components/passenger-select-new/enums/passenger-type.enum.mjs +0 -9
- package/esm2022/lib/components/passenger-select-new/index.mjs +0 -5
- package/esm2022/lib/components/passenger-select-new/models/passengers.model.mjs +0 -2
- package/esm2022/lib/components/passenger-select-new/passenger-select-new.component.mjs +0 -423
- package/esm2022/lib/components/passenger-select-new/passenger-select-new.module.mjs +0 -28
- package/esm2022/lib/components/radio-new/index.mjs +0 -3
- package/esm2022/lib/components/radio-new/radio-new.component.mjs +0 -100
- package/esm2022/lib/components/radio-new/radio-new.module.mjs +0 -20
- package/esm2022/lib/components/slide-toggle-new/index.mjs +0 -3
- package/esm2022/lib/components/slide-toggle-new/slide-toggle-new.component.mjs +0 -115
- package/esm2022/lib/components/slide-toggle-new/slide-toggle-new.module.mjs +0 -20
- package/esm2022/lib/components/weather-icon/index.mjs +0 -3
- package/esm2022/lib/components/weather-icon/weather-icon.component.mjs +0 -61
- package/esm2022/lib/components/weather-icon/weather-icon.module.mjs +0 -19
- package/lib/components/airport-select-new/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -97
- package/lib/components/airport-select-new/airport-select-new.component.d.ts +0 -302
- package/lib/components/airport-select-new/airport-select-new.module.d.ts +0 -13
- package/lib/components/airport-select-new/index.d.ts +0 -2
- package/lib/components/airport-select-new/models/airport.model.d.ts +0 -11
- package/lib/components/airport-select-new/models/results-labels.model.d.ts +0 -7
- package/lib/components/airport-select-new/services/airport-select-dropdown.service.d.ts +0 -10
- package/lib/components/airport-select-new/services/airport-select.service.d.ts +0 -8
- package/lib/components/autocomplete-new/autocomplete-new.component.d.ts +0 -135
- package/lib/components/autocomplete-new/autocomplete-new.module.d.ts +0 -13
- package/lib/components/autocomplete-new/index.d.ts +0 -2
- package/lib/components/autocomplete-new/models/autocomplete-new.model.d.ts +0 -5
- package/lib/components/button-new/button-new.component.d.ts +0 -276
- package/lib/components/button-new/button-new.module.d.ts +0 -11
- package/lib/components/button-new/index.d.ts +0 -2
- package/lib/components/checkbox-new/checkbox-new.component.d.ts +0 -138
- package/lib/components/checkbox-new/checkbox-new.module.d.ts +0 -10
- package/lib/components/checkbox-new/index.d.ts +0 -2
- package/lib/components/datepicker-combo-new/datepicker-combo-new.component.d.ts +0 -309
- package/lib/components/datepicker-combo-new/datepicker-combo-new.module.d.ts +0 -10
- package/lib/components/datepicker-combo-new/index.d.ts +0 -2
- package/lib/components/datepicker-new/calendar-new/calendar-date.model.d.ts +0 -5
- package/lib/components/datepicker-new/calendar-new/calendar-new.component.d.ts +0 -159
- package/lib/components/datepicker-new/calendar-new/enums/week-start.enum.d.ts +0 -4
- package/lib/components/datepicker-new/calendar-new/models/day.model.d.ts +0 -10
- package/lib/components/datepicker-new/calendar-new/models/select-option.model.d.ts +0 -4
- package/lib/components/datepicker-new/calendar-new/models/week.model.d.ts +0 -5
- package/lib/components/datepicker-new/datepicker-new.component.d.ts +0 -278
- package/lib/components/datepicker-new/datepicker-new.module.d.ts +0 -16
- package/lib/components/datepicker-new/index.d.ts +0 -4
- package/lib/components/datepicker-new/services/calendar.service.d.ts +0 -27
- package/lib/components/filter-new/enums/trip-type.enum.d.ts +0 -6
- package/lib/components/filter-new/filter-new.component.d.ts +0 -838
- package/lib/components/filter-new/filter-new.module.d.ts +0 -28
- package/lib/components/filter-new/index.d.ts +0 -3
- package/lib/components/input-text/index.d.ts +0 -2
- package/lib/components/input-text/input-text.component.d.ts +0 -203
- package/lib/components/input-text/input-text.module.d.ts +0 -11
- package/lib/components/number-field-new/index.d.ts +0 -2
- package/lib/components/number-field-new/models/number-field-new.model.d.ts +0 -5
- package/lib/components/number-field-new/number-field-new.component.d.ts +0 -116
- package/lib/components/number-field-new/number-field-new.module.d.ts +0 -12
- package/lib/components/page-header-old/index.d.ts +0 -4
- package/lib/components/page-header-old/old-hamburger/old-hamburger.component.d.ts +0 -12
- package/lib/components/page-header-old/old-search/old-search.component.d.ts +0 -26
- package/lib/components/page-header-old/page-header-old.component.d.ts +0 -112
- package/lib/components/page-header-old/page-header-old.module.d.ts +0 -14
- package/lib/components/passenger-select-new/enums/passenger-type.enum.d.ts +0 -7
- package/lib/components/passenger-select-new/index.d.ts +0 -4
- package/lib/components/passenger-select-new/models/passengers.model.d.ts +0 -10
- package/lib/components/passenger-select-new/passenger-select-new.component.d.ts +0 -141
- package/lib/components/passenger-select-new/passenger-select-new.module.d.ts +0 -10
- package/lib/components/radio-new/index.d.ts +0 -2
- package/lib/components/radio-new/radio-new.component.d.ts +0 -135
- package/lib/components/radio-new/radio-new.module.d.ts +0 -10
- package/lib/components/slide-toggle-new/index.d.ts +0 -2
- package/lib/components/slide-toggle-new/slide-toggle-new.component.d.ts +0 -70
- package/lib/components/slide-toggle-new/slide-toggle-new.module.d.ts +0 -10
- package/lib/components/weather-icon/index.d.ts +0 -2
- package/lib/components/weather-icon/weather-icon.component.d.ts +0 -60
- package/lib/components/weather-icon/weather-icon.module.d.ts +0 -9
|
@@ -1,1349 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Norwegian Air Shuttle. All Rights Reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, EventEmitter, Input, Output, ViewChild, HostListener, } from '@angular/core';
|
|
6
|
-
import { BehaviorSubject } from 'rxjs';
|
|
7
|
-
import { TripType } from './enums/trip-type.enum';
|
|
8
|
-
import { NasComponentBase } from '../../core/base/nas-component.base';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../../core/services/device/device-helper.service";
|
|
11
|
-
import * as i2 from "../../core/services/sort/sort.service";
|
|
12
|
-
import * as i3 from "../../core/services/abandoned-basket/abandoned-basket.service";
|
|
13
|
-
import * as i4 from "../../core/services/date/date-helper.service";
|
|
14
|
-
import * as i5 from "@angular/common";
|
|
15
|
-
import * as i6 from "../../core/directives/nas-class/nas-class.directive";
|
|
16
|
-
import * as i7 from "../accordion/accordion.component";
|
|
17
|
-
import * as i8 from "../icon/icon.component";
|
|
18
|
-
import * as i9 from "@angular/forms";
|
|
19
|
-
import * as i10 from "../subsidy-discount/subsidy-discount.component";
|
|
20
|
-
import * as i11 from "../suggestions/suggestions.component";
|
|
21
|
-
import * as i12 from "../airport-select-new/airport-select-new.component";
|
|
22
|
-
import * as i13 from "../datepicker-combo-new/datepicker-combo-new.component";
|
|
23
|
-
import * as i14 from "../button-new/button-new.component";
|
|
24
|
-
import * as i15 from "../passenger-select-new/passenger-select-new.component";
|
|
25
|
-
import * as i16 from "../radio-new/radio-new.component";
|
|
26
|
-
import * as i17 from "../backdrop/backdrop.component";
|
|
27
|
-
/**
|
|
28
|
-
* @description
|
|
29
|
-
* Norwegian Filter Component | New design | Beta
|
|
30
|
-
*/
|
|
31
|
-
export class FilterNewComponent extends NasComponentBase {
|
|
32
|
-
get outboundOpen() {
|
|
33
|
-
return this.outboundOpenValue;
|
|
34
|
-
}
|
|
35
|
-
set outboundOpen(value) {
|
|
36
|
-
if (this.outboundOpenValue === value) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (value) {
|
|
40
|
-
this.closeDropdowns();
|
|
41
|
-
if (this.airportSelect) {
|
|
42
|
-
this.airportSelect.originOpen = false;
|
|
43
|
-
this.airportSelect.destinationOpen = false;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
this.outboundOpenValue = value;
|
|
47
|
-
this.outboundOpenChange.emit(value);
|
|
48
|
-
}
|
|
49
|
-
get inboundOpen() {
|
|
50
|
-
return this.inboundOpenValue;
|
|
51
|
-
}
|
|
52
|
-
set inboundOpen(value) {
|
|
53
|
-
if (this.inboundOpenValue === value) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (value) {
|
|
57
|
-
this.closeDropdowns();
|
|
58
|
-
if (this.airportSelect) {
|
|
59
|
-
this.airportSelect.originOpen = false;
|
|
60
|
-
this.airportSelect.destinationOpen = false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
clearTimeout(this.inboundOpenTimeout);
|
|
64
|
-
this.inboundOpenTimeout = setTimeout(() => {
|
|
65
|
-
this.inboundOpenValue = value;
|
|
66
|
-
});
|
|
67
|
-
this.inboundOpenChange.emit(value);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* @property Input
|
|
71
|
-
* @description
|
|
72
|
-
* An array of different passenger types that will be displayed.
|
|
73
|
-
*/
|
|
74
|
-
get passengers() {
|
|
75
|
-
return this.passengersValue;
|
|
76
|
-
}
|
|
77
|
-
set passengers(value) {
|
|
78
|
-
if (!value) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
this.passengersValue = value;
|
|
82
|
-
this.passengersChange.emit(value);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* @property Input
|
|
86
|
-
* @description
|
|
87
|
-
* Indicates if the edit search of accordion should be expended on mobile screen sizes.
|
|
88
|
-
*/
|
|
89
|
-
get expandedAccordionMobile() {
|
|
90
|
-
return this.expandedAccordionMobileValue;
|
|
91
|
-
}
|
|
92
|
-
set expandedAccordionMobile(value) {
|
|
93
|
-
if (value === this.expandedAccordionMobileValue) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.expandedAccordionMobileValue = value;
|
|
97
|
-
}
|
|
98
|
-
get closestAirports() {
|
|
99
|
-
return this.closestAirportsValue;
|
|
100
|
-
}
|
|
101
|
-
set closestAirports(airports) {
|
|
102
|
-
if (!airports || airports.length < 1) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
this.closestAirportsValue = airports;
|
|
106
|
-
if (this.exists(this.overrideOrigin)) {
|
|
107
|
-
this.originAirportCode = airports[0].code;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* @property Input
|
|
112
|
-
* @required
|
|
113
|
-
* @description
|
|
114
|
-
* All airports that will be populated into the dropdown lists.
|
|
115
|
-
* If displayLatestSearches is true, it will try to get the latest searches from the abandoned basket.
|
|
116
|
-
*/
|
|
117
|
-
get airports() {
|
|
118
|
-
return this.airportsValue;
|
|
119
|
-
}
|
|
120
|
-
set airports(airports) {
|
|
121
|
-
this.airportsValue = airports;
|
|
122
|
-
if (this.exists(this.displayLatestSearches)) {
|
|
123
|
-
const abandonedBasket = this.abandonedBasketService.getAll();
|
|
124
|
-
this.setLatestSearches(abandonedBasket, this.airports);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* @property Input
|
|
129
|
-
* @description
|
|
130
|
-
* Sets and gets the selected trip type.
|
|
131
|
-
*/
|
|
132
|
-
get tripType() {
|
|
133
|
-
return this.tripTypeValue;
|
|
134
|
-
}
|
|
135
|
-
set tripType(tripType) {
|
|
136
|
-
if (tripType === this.tripTypeValue) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
this.tripTypeValue = tripType;
|
|
140
|
-
this.tripTypeChange.emit(this.tripType);
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* @property Input
|
|
144
|
-
* @description
|
|
145
|
-
* Sets and gets whether the selected transit type is direct only or not.
|
|
146
|
-
*/
|
|
147
|
-
get directOnly() {
|
|
148
|
-
return this.directOnlyValue;
|
|
149
|
-
}
|
|
150
|
-
set directOnly(directOnly) {
|
|
151
|
-
if (directOnly === this.directOnlyValue) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
this.directOnlyValue = directOnly;
|
|
155
|
-
this.directOnlyChange.emit(this.directOnly);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* @property Input
|
|
159
|
-
* @description
|
|
160
|
-
* Selected datefor outbound calendar.
|
|
161
|
-
*/
|
|
162
|
-
get outboundSelectedDate() {
|
|
163
|
-
return this.outboundSelectedDateValue;
|
|
164
|
-
}
|
|
165
|
-
set outboundSelectedDate(date) {
|
|
166
|
-
if (!date) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
setTimeout(() => {
|
|
170
|
-
this.outboundSelectedDateValue = date;
|
|
171
|
-
this.outboundSelectedDateChange.emit(date);
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* @property Input
|
|
176
|
-
* @description
|
|
177
|
-
* Selected datefor inbound calendar.
|
|
178
|
-
*/
|
|
179
|
-
get inboundSelectedDate() {
|
|
180
|
-
return this.inboundSelectedDateValue;
|
|
181
|
-
}
|
|
182
|
-
set inboundSelectedDate(date) {
|
|
183
|
-
if (!date) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
setTimeout(() => {
|
|
187
|
-
this.inboundSelectedDateValue = date;
|
|
188
|
-
this.inboundSelectedDateChange.emit(date);
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
get inboundSelectedMonth() {
|
|
192
|
-
return this.inboundSelectedMonthValue;
|
|
193
|
-
}
|
|
194
|
-
set inboundSelectedMonth(month) {
|
|
195
|
-
if (this.dateService.isSameMonth(month, this.inboundSelectedMonthValue)) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
setTimeout(() => {
|
|
199
|
-
this.inboundMonthChange.emit(month);
|
|
200
|
-
this.inboundSelectedMonthValue = month;
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
constructor(deviceHelper, sortService, abandonedBasketService, dateService, elementRef, changeDetector) {
|
|
204
|
-
super('nas-filter-new');
|
|
205
|
-
this.deviceHelper = deviceHelper;
|
|
206
|
-
this.sortService = sortService;
|
|
207
|
-
this.abandonedBasketService = abandonedBasketService;
|
|
208
|
-
this.dateService = dateService;
|
|
209
|
-
this.elementRef = elementRef;
|
|
210
|
-
this.changeDetector = changeDetector;
|
|
211
|
-
this.displaySummary = true;
|
|
212
|
-
this.containerWidth = new BehaviorSubject(0);
|
|
213
|
-
this.maximize = false;
|
|
214
|
-
this.isNasGroupValid = false;
|
|
215
|
-
this.inlineFlex = 0;
|
|
216
|
-
this.openPassengerSelect = false;
|
|
217
|
-
this.openTransitTypeSelect = false;
|
|
218
|
-
this.fullWidth = false;
|
|
219
|
-
/**
|
|
220
|
-
* @property Input
|
|
221
|
-
* @description
|
|
222
|
-
* A separator for the filter summary that is dispayed if minimizeOnMobile is true.
|
|
223
|
-
*
|
|
224
|
-
* ### Example
|
|
225
|
-
* 1 traveller, round trip and direct/transit
|
|
226
|
-
*/
|
|
227
|
-
this.defaultSummarySeparator = '';
|
|
228
|
-
/**
|
|
229
|
-
* A separator for the filter summary is are dispayed if minimizeOnMobile is true.
|
|
230
|
-
*
|
|
231
|
-
* ### Example
|
|
232
|
-
* 1 traveller, round trip and direct/transit
|
|
233
|
-
*/
|
|
234
|
-
this.lastSummarySeparator = '';
|
|
235
|
-
/**
|
|
236
|
-
* @property Input
|
|
237
|
-
* @description
|
|
238
|
-
* A placeholder that will appear on the origin airport input field.
|
|
239
|
-
*/
|
|
240
|
-
this.placeholderOrigin = '';
|
|
241
|
-
/**
|
|
242
|
-
* @property Input
|
|
243
|
-
* @description
|
|
244
|
-
* A placeholder that will appear on the destination airport input field.
|
|
245
|
-
*/
|
|
246
|
-
this.placeholderDestination = '';
|
|
247
|
-
/**
|
|
248
|
-
* @property Output
|
|
249
|
-
* @description
|
|
250
|
-
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
251
|
-
*/
|
|
252
|
-
this.originOpenChange = new EventEmitter();
|
|
253
|
-
/**
|
|
254
|
-
* @property Output
|
|
255
|
-
* @description
|
|
256
|
-
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
257
|
-
*/
|
|
258
|
-
this.destinationOpenChange = new EventEmitter();
|
|
259
|
-
/**
|
|
260
|
-
* @property Output
|
|
261
|
-
* @description
|
|
262
|
-
* An event that is fired every time the passenger select dropdown opens or closes.
|
|
263
|
-
*/
|
|
264
|
-
this.passengerSelectOpenChange = new EventEmitter();
|
|
265
|
-
/**
|
|
266
|
-
* @property Output
|
|
267
|
-
* @description
|
|
268
|
-
* An event that is fired every time the selected origin airport changes.
|
|
269
|
-
*/
|
|
270
|
-
this.originChange = new EventEmitter();
|
|
271
|
-
/**
|
|
272
|
-
* @property Output
|
|
273
|
-
* @description
|
|
274
|
-
* An event that is fired every time the selected destination airport changes.
|
|
275
|
-
*/
|
|
276
|
-
this.destinationChange = new EventEmitter();
|
|
277
|
-
/**
|
|
278
|
-
* @property Output
|
|
279
|
-
* @description
|
|
280
|
-
* An event that is fired every time a passenger selection change is performed.
|
|
281
|
-
*/
|
|
282
|
-
this.passengersChange = new EventEmitter();
|
|
283
|
-
/**
|
|
284
|
-
* @property Output
|
|
285
|
-
* @description
|
|
286
|
-
* Sets and gets the selected trip type.
|
|
287
|
-
*/
|
|
288
|
-
this.tripTypeChange = new EventEmitter();
|
|
289
|
-
/**
|
|
290
|
-
* @property Output
|
|
291
|
-
* @description
|
|
292
|
-
* Sets and gets whether the selected transit type is direct only or not.
|
|
293
|
-
*/
|
|
294
|
-
this.directOnlyChange = new EventEmitter();
|
|
295
|
-
/**
|
|
296
|
-
* @property Input
|
|
297
|
-
* @description
|
|
298
|
-
* The display format of the date when user has selected the date and it is being shown in the input box for the date picker.
|
|
299
|
-
* Please look at the angular Date pipe for valid formats and variations.
|
|
300
|
-
*/
|
|
301
|
-
this.dateDisplayFormat = 'EEE d, MMM';
|
|
302
|
-
/**
|
|
303
|
-
* @property Input
|
|
304
|
-
* @description
|
|
305
|
-
* The time display format.
|
|
306
|
-
*/
|
|
307
|
-
this.timeDisplayFormat = 'HH:mm';
|
|
308
|
-
/**
|
|
309
|
-
* @property Input
|
|
310
|
-
* @description
|
|
311
|
-
* A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
|
|
312
|
-
* This requires that registerLocaleData is called with the respective locale.
|
|
313
|
-
*/
|
|
314
|
-
this.locale = 'en-GB';
|
|
315
|
-
/**
|
|
316
|
-
* @property Input
|
|
317
|
-
* @description
|
|
318
|
-
* Will display the destination input, set this to false to remove it. It's true by default.
|
|
319
|
-
*/
|
|
320
|
-
this.enableDestinationSelect = true;
|
|
321
|
-
/**
|
|
322
|
-
* @property Input
|
|
323
|
-
* @description
|
|
324
|
-
* Will display passenger select, set this to false to remove it. It's true by default.
|
|
325
|
-
*/
|
|
326
|
-
this.enablePassengersSelect = true;
|
|
327
|
-
/**
|
|
328
|
-
* @property Input
|
|
329
|
-
* @description
|
|
330
|
-
* Will display the trip switch, set this to false to remove it. It's true by default.
|
|
331
|
-
*/
|
|
332
|
-
this.enableTripSwitch = true;
|
|
333
|
-
/**
|
|
334
|
-
* @property Input
|
|
335
|
-
* @description
|
|
336
|
-
* Will display the transit switch, set this to false to remove it. It's true by default.
|
|
337
|
-
*/
|
|
338
|
-
this.enableTransitSwitch = true;
|
|
339
|
-
/**
|
|
340
|
-
* @property Input
|
|
341
|
-
* @description
|
|
342
|
-
* Outbound and inbound dates will break horizontally.
|
|
343
|
-
*/
|
|
344
|
-
this.datePickerComboInlineFlex = true;
|
|
345
|
-
/**
|
|
346
|
-
* @property Output
|
|
347
|
-
* @description
|
|
348
|
-
* When selected datehas been changed on the outbound calendar.
|
|
349
|
-
*/
|
|
350
|
-
this.outboundSelectedDateChange = new EventEmitter();
|
|
351
|
-
/**
|
|
352
|
-
* @property Output
|
|
353
|
-
* @description
|
|
354
|
-
* When selected datehas been changed on the inbound calendar.
|
|
355
|
-
*/
|
|
356
|
-
this.inboundSelectedDateChange = new EventEmitter();
|
|
357
|
-
/**
|
|
358
|
-
* @property Output
|
|
359
|
-
* @description
|
|
360
|
-
* Outbound datepicker is open or closed.
|
|
361
|
-
*/
|
|
362
|
-
this.outboundOpenChange = new EventEmitter();
|
|
363
|
-
/**
|
|
364
|
-
* @property Output
|
|
365
|
-
* @description
|
|
366
|
-
* Inbound datepicker is open or closed.
|
|
367
|
-
*/
|
|
368
|
-
this.inboundOpenChange = new EventEmitter();
|
|
369
|
-
/**
|
|
370
|
-
* @property Output
|
|
371
|
-
* @description
|
|
372
|
-
* Outbound calendar changes month.
|
|
373
|
-
*/
|
|
374
|
-
this.outboundMonthChange = new EventEmitter();
|
|
375
|
-
/**
|
|
376
|
-
* @property Output
|
|
377
|
-
* @description
|
|
378
|
-
* Inbound calendar changes month.
|
|
379
|
-
*/
|
|
380
|
-
this.inboundMonthChange = new EventEmitter();
|
|
381
|
-
/**
|
|
382
|
-
* @property Output
|
|
383
|
-
* @description
|
|
384
|
-
* When a user has actively changed the date.
|
|
385
|
-
*/
|
|
386
|
-
this.focusOnNextChange = new EventEmitter();
|
|
387
|
-
/**
|
|
388
|
-
* @property Output
|
|
389
|
-
* @description
|
|
390
|
-
* The geolocation of the user. Will be emitted if 'enableSuggestions' is true.
|
|
391
|
-
*/
|
|
392
|
-
this.positionChange = new EventEmitter();
|
|
393
|
-
/**
|
|
394
|
-
* @property Output
|
|
395
|
-
* @description
|
|
396
|
-
* An even that is fired every time the info button on the subsidy discount is clicked.
|
|
397
|
-
*/
|
|
398
|
-
this.subsidyDiscountInfoClick = new EventEmitter();
|
|
399
|
-
this.outboundOpenValue = false;
|
|
400
|
-
this.inboundOpenValue = false;
|
|
401
|
-
this.passengersValue = new Array();
|
|
402
|
-
this.nativeElement = elementRef.nativeElement;
|
|
403
|
-
}
|
|
404
|
-
onResize() {
|
|
405
|
-
this.setFilterFullWidth();
|
|
406
|
-
}
|
|
407
|
-
ngOnInit() {
|
|
408
|
-
if (!this.nasFormGroup) {
|
|
409
|
-
return;
|
|
410
|
-
}
|
|
411
|
-
this.nasFormGroup.statusChanges.subscribe((x) => {
|
|
412
|
-
setTimeout(() => {
|
|
413
|
-
this.isNasGroupValid = /true/i.test(x);
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
|
-
if (this.nasFormControlNameDirectOnly) {
|
|
417
|
-
const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
418
|
-
if (directOnlyControl) {
|
|
419
|
-
this.directOnly = directOnlyControl.value;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
if (this.nasFormControlNameTripType) {
|
|
423
|
-
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
424
|
-
if (tripTypeControl) {
|
|
425
|
-
this.tripType = tripTypeControl.value;
|
|
426
|
-
this.inboundDisabled = tripTypeControl.value === TripType.oneWay;
|
|
427
|
-
if (this.nasFormControlNameInbound) {
|
|
428
|
-
const inboundControl = this.nasFormGroup.get(this.nasFormControlNameInbound);
|
|
429
|
-
if (inboundControl && this.inboundDisabled) {
|
|
430
|
-
inboundControl.disable();
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
tripTypeControl.valueChanges.subscribe((value) => {
|
|
434
|
-
this.inboundDisabled = value === TripType.oneWay;
|
|
435
|
-
this.tripType = value;
|
|
436
|
-
});
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
if (this.nasFormControlNameDirectOnly) {
|
|
440
|
-
const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
441
|
-
if (directOnlyControl) {
|
|
442
|
-
directOnlyControl.valueChanges.subscribe((value) => {
|
|
443
|
-
this.directOnly = value;
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
ngAfterViewInit() {
|
|
449
|
-
this.setFilterFullWidth();
|
|
450
|
-
this.changeDetector.detectChanges();
|
|
451
|
-
}
|
|
452
|
-
ngAfterViewChecked() {
|
|
453
|
-
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
454
|
-
window.onresize = () => {
|
|
455
|
-
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
456
|
-
};
|
|
457
|
-
}
|
|
458
|
-
onSubsidyDiscountInfoClick() {
|
|
459
|
-
this.subsidyDiscountInfoClick.emit();
|
|
460
|
-
}
|
|
461
|
-
onSubsidyDiscountSelectChange(model) {
|
|
462
|
-
if (!this.nasFormGroup || !this.nasFormControlNameSubsidyDiscount) {
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
const subsidyDiscountControl = this.nasFormGroup.get(this.nasFormControlNameSubsidyDiscount);
|
|
466
|
-
subsidyDiscountControl.patchValue(model);
|
|
467
|
-
}
|
|
468
|
-
getClosestAirports(position) {
|
|
469
|
-
this.positionChange.emit(position);
|
|
470
|
-
}
|
|
471
|
-
getFilterClass(element, modifiersInput) {
|
|
472
|
-
let modifiers = modifiersInput || new Array();
|
|
473
|
-
if (typeof modifiersInput === 'string' ||
|
|
474
|
-
modifiersInput instanceof String) {
|
|
475
|
-
modifiers = [modifiersInput];
|
|
476
|
-
}
|
|
477
|
-
const widths = [];
|
|
478
|
-
if (this.deviceHelper.isWidthTablet(this.containerWidth.getValue())) {
|
|
479
|
-
widths.push('md');
|
|
480
|
-
}
|
|
481
|
-
if (this.deviceHelper.isWidthDesktop(this.containerWidth.getValue())) {
|
|
482
|
-
widths.push('lg');
|
|
483
|
-
}
|
|
484
|
-
modifiers = [...modifiers, ...widths];
|
|
485
|
-
return this.getClass(element, modifiers);
|
|
486
|
-
}
|
|
487
|
-
getAirportSelectClass() {
|
|
488
|
-
return this.getClass('airport-select-new', [
|
|
489
|
-
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
|
|
490
|
-
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
491
|
-
this.exists(this.enableDatepickers) && 'no-border',
|
|
492
|
-
]);
|
|
493
|
-
}
|
|
494
|
-
getSuggestions() {
|
|
495
|
-
const suggestions = Array.from(new Set([
|
|
496
|
-
...(this.latestSearchesOrigin
|
|
497
|
-
? this.latestSearchesOrigin.filter((x) => x.code !== this.originAirportCode)
|
|
498
|
-
: []),
|
|
499
|
-
...(this.closestAirports
|
|
500
|
-
? this.closestAirports.filter((x) => x.code !== this.originAirportCode)
|
|
501
|
-
: []),
|
|
502
|
-
]));
|
|
503
|
-
return suggestions.slice(0, 3);
|
|
504
|
-
}
|
|
505
|
-
getDatePickersClass() {
|
|
506
|
-
return this.getFilterClass('date-combo-new', [
|
|
507
|
-
this.exists(this.minimize) && 'minimized',
|
|
508
|
-
this.containerWidth.getValue() > 500 && 'side-by-side',
|
|
509
|
-
]);
|
|
510
|
-
}
|
|
511
|
-
getTravelDetailsClass(element, modifiersInput) {
|
|
512
|
-
let modifiers = modifiersInput || new Array();
|
|
513
|
-
if (typeof modifiersInput === 'string' ||
|
|
514
|
-
modifiersInput instanceof String) {
|
|
515
|
-
modifiers = [modifiersInput];
|
|
516
|
-
}
|
|
517
|
-
const widths = [
|
|
518
|
-
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
519
|
-
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
|
|
520
|
-
];
|
|
521
|
-
modifiers = [...modifiers, ...widths];
|
|
522
|
-
const travelDetailsBase = new NasComponentBase('travel-details');
|
|
523
|
-
return travelDetailsBase.getClass(element, modifiers);
|
|
524
|
-
}
|
|
525
|
-
onInboundMonthChange(month) {
|
|
526
|
-
this.inboundMonthChange.emit(month);
|
|
527
|
-
}
|
|
528
|
-
onOutboundMonthChange(month) {
|
|
529
|
-
this.outboundMonthChange.emit(month);
|
|
530
|
-
}
|
|
531
|
-
onPassengersSelectFocusOnPrevious() {
|
|
532
|
-
if (this.isMobileDisplay()) {
|
|
533
|
-
this.onTransitSwitchOpen(true);
|
|
534
|
-
this.focusAsync(this.transitSwitch.toggleElement);
|
|
535
|
-
}
|
|
536
|
-
else if (this.isTabletDisplay()) {
|
|
537
|
-
this.selectPreviousControl();
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
passengerKeyDown(event) {
|
|
541
|
-
switch (event.key) {
|
|
542
|
-
case 'Tab':
|
|
543
|
-
if (event.shiftKey) {
|
|
544
|
-
if (this.isMobileDisplay() || this.isTabletDisplay()) {
|
|
545
|
-
break;
|
|
546
|
-
}
|
|
547
|
-
this.focusOnAirportSelectBackwards();
|
|
548
|
-
break;
|
|
549
|
-
}
|
|
550
|
-
if (this.isMobileDisplay()) {
|
|
551
|
-
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
552
|
-
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
553
|
-
}
|
|
554
|
-
else {
|
|
555
|
-
this.focusOnNextChange.emit();
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
break;
|
|
559
|
-
case 'Enter':
|
|
560
|
-
if (event.shiftKey || this.isMobileDisplay()) {
|
|
561
|
-
break;
|
|
562
|
-
}
|
|
563
|
-
if (document.activeElement ===
|
|
564
|
-
this.passengerSelectDropdown.toggleElement.nativeElement) {
|
|
565
|
-
if (this.passengerSelectDropdown.open) {
|
|
566
|
-
this.onTripSwitchOpen(true);
|
|
567
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
568
|
-
}
|
|
569
|
-
else {
|
|
570
|
-
this.onPassengerSelectOpen();
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
break;
|
|
574
|
-
case 'Escape':
|
|
575
|
-
this.onPassengerSelectOpen();
|
|
576
|
-
event.preventDefault();
|
|
577
|
-
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
578
|
-
break;
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
onTripSwitchKeyDown(event) {
|
|
582
|
-
switch (event.key) {
|
|
583
|
-
case 'ArrowRight':
|
|
584
|
-
if (document.activeElement === this.tripTypeRoundTrip.nativeElement) {
|
|
585
|
-
this.tripTypeOneway.nativeElement.focus();
|
|
586
|
-
}
|
|
587
|
-
break;
|
|
588
|
-
case 'ArrowLeft':
|
|
589
|
-
if (document.activeElement === this.tripTypeOneway.nativeElement) {
|
|
590
|
-
this.tripTypeRoundTrip.nativeElement.focus();
|
|
591
|
-
}
|
|
592
|
-
break;
|
|
593
|
-
case 'Tab':
|
|
594
|
-
case 'Enter':
|
|
595
|
-
if (event.shiftKey) {
|
|
596
|
-
event.preventDefault();
|
|
597
|
-
if (this.isMobileDisplay() || !this.passengerSelectDropdown) {
|
|
598
|
-
this.selectPreviousControl();
|
|
599
|
-
}
|
|
600
|
-
else {
|
|
601
|
-
this.onPassengerSelectOpen();
|
|
602
|
-
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
else {
|
|
606
|
-
if (event.key === 'Tab') {
|
|
607
|
-
this.onTransitSwitchOpen(true);
|
|
608
|
-
}
|
|
609
|
-
else {
|
|
610
|
-
if (this.tripSwitch.open) {
|
|
611
|
-
this.onTransitSwitchOpen(true);
|
|
612
|
-
this.focusAsync(this.transitSwitch.toggleElement);
|
|
613
|
-
}
|
|
614
|
-
else {
|
|
615
|
-
this.onTripSwitchOpen(true);
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
break;
|
|
620
|
-
case 'Escape':
|
|
621
|
-
this.onTripSwitchOpen(false);
|
|
622
|
-
this.setFocusOnNativeElement(this.tripSwitch.toggleElement);
|
|
623
|
-
break;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
transitKeyDown(event) {
|
|
627
|
-
switch (event.key) {
|
|
628
|
-
case 'ArrowRight':
|
|
629
|
-
if (document.activeElement === this.transitTypeTransit.nativeElement) {
|
|
630
|
-
this.transitTypeDirectOnly.nativeElement.focus();
|
|
631
|
-
}
|
|
632
|
-
break;
|
|
633
|
-
case 'ArrowLeft':
|
|
634
|
-
if (document.activeElement === this.transitTypeDirectOnly.nativeElement) {
|
|
635
|
-
this.transitTypeTransit.nativeElement.focus();
|
|
636
|
-
}
|
|
637
|
-
break;
|
|
638
|
-
case 'Tab':
|
|
639
|
-
case 'Enter':
|
|
640
|
-
if (event.shiftKey) {
|
|
641
|
-
event.preventDefault();
|
|
642
|
-
this.onTripSwitchOpen(true);
|
|
643
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
644
|
-
}
|
|
645
|
-
else {
|
|
646
|
-
if (this.isMobileDisplay()) {
|
|
647
|
-
this.onPassengerSelectOpen();
|
|
648
|
-
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
649
|
-
}
|
|
650
|
-
else {
|
|
651
|
-
this.onTransitSwitchOpen(!this.transitSwitch.open);
|
|
652
|
-
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
653
|
-
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
654
|
-
}
|
|
655
|
-
else {
|
|
656
|
-
this.focusOnNextChange.emit();
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
if (event.key === 'Tab') {
|
|
660
|
-
event.preventDefault();
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
break;
|
|
664
|
-
case 'Escape':
|
|
665
|
-
this.onTransitSwitchOpen(false);
|
|
666
|
-
event.preventDefault();
|
|
667
|
-
this.setFocusOnNativeElement(this.transitSwitch.toggleElement);
|
|
668
|
-
break;
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
onSubsidyDiscountInfoButtonKeydown(event) {
|
|
672
|
-
switch (event.key) {
|
|
673
|
-
case 'Tab':
|
|
674
|
-
if (event.shiftKey) {
|
|
675
|
-
if (this.isMobileDisplay()) {
|
|
676
|
-
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
677
|
-
}
|
|
678
|
-
else {
|
|
679
|
-
this.focusAsync(this.transitSwitch.toggleElement);
|
|
680
|
-
}
|
|
681
|
-
event.preventDefault();
|
|
682
|
-
}
|
|
683
|
-
break;
|
|
684
|
-
default:
|
|
685
|
-
break;
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
onPassengersSelectFocusOnNext() {
|
|
689
|
-
if (this.isMobileDisplay()) {
|
|
690
|
-
this.passengerSelectDropdown.toggle();
|
|
691
|
-
}
|
|
692
|
-
else {
|
|
693
|
-
this.onTripSwitchOpen(true);
|
|
694
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
focusAsync(refElement) {
|
|
698
|
-
clearTimeout(this.focusAsyncTimout);
|
|
699
|
-
this.focusAsyncTimout = setTimeout(() => this.setFocusOnNativeElement(refElement));
|
|
700
|
-
}
|
|
701
|
-
onDatepickerFocusOnPrevious(event) {
|
|
702
|
-
event.preventDefault();
|
|
703
|
-
this.focusOnAirportSelectBackwards();
|
|
704
|
-
}
|
|
705
|
-
selectPreviousControl() {
|
|
706
|
-
if (this.datepickerCombo) {
|
|
707
|
-
if (this.datepickerCombo.outboundOnly) {
|
|
708
|
-
this.outboundOpen = true;
|
|
709
|
-
}
|
|
710
|
-
else {
|
|
711
|
-
this.inboundOpen = true;
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
else if (this.airportSelect) {
|
|
715
|
-
if (this.exists(this.airportSelect.combo)) {
|
|
716
|
-
this.airportSelect.onDestinationOpen(true);
|
|
717
|
-
if (this.airportSelect.airportSelectDropdownDestination) {
|
|
718
|
-
this.focusAsync(this.airportSelect.airportSelectDropdownDestination.input);
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
else {
|
|
722
|
-
this.airportSelect.onOriginOpen(true);
|
|
723
|
-
if (this.airportSelect.airportSelectDropdownOrigin) {
|
|
724
|
-
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
onFocusOnNextChange(event) {
|
|
730
|
-
if (this.isMobileDisplay() && this.tripSwitch) {
|
|
731
|
-
this.onTripSwitchOpen(true);
|
|
732
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
733
|
-
}
|
|
734
|
-
else if (this.isTabletDisplay()) {
|
|
735
|
-
if (this.passengerSelectDropdown) {
|
|
736
|
-
event.preventDefault();
|
|
737
|
-
setTimeout(() => {
|
|
738
|
-
this.onPassengerSelectOpen();
|
|
739
|
-
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
740
|
-
});
|
|
741
|
-
}
|
|
742
|
-
else if (this.tripSwitch) {
|
|
743
|
-
this.onTripSwitchOpen(true);
|
|
744
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
isMobileDisplay() {
|
|
749
|
-
return this.deviceHelper.isWidthMobile(this.containerWidth.getValue());
|
|
750
|
-
}
|
|
751
|
-
isTabletDisplay() {
|
|
752
|
-
return this.deviceHelper.isWidthTablet(this.containerWidth.getValue());
|
|
753
|
-
}
|
|
754
|
-
onOriginOpen(open) {
|
|
755
|
-
if (this.passengerSelectDropdown) {
|
|
756
|
-
this.passengerSelectDropdown.open = false;
|
|
757
|
-
}
|
|
758
|
-
if (this.tripSwitch) {
|
|
759
|
-
this.tripSwitch.open = false;
|
|
760
|
-
}
|
|
761
|
-
if (this.transitSwitch) {
|
|
762
|
-
this.transitSwitch.open = false;
|
|
763
|
-
}
|
|
764
|
-
if (this.datepickerCombo) {
|
|
765
|
-
this.datepickerCombo.inboundOpen = false;
|
|
766
|
-
this.datepickerCombo.outboundOpen = false;
|
|
767
|
-
}
|
|
768
|
-
if (this.airportSelect && !this.airportSelect.originOpen) {
|
|
769
|
-
this.updateMaximize();
|
|
770
|
-
}
|
|
771
|
-
this.originOpenChange.emit(open);
|
|
772
|
-
this.changeDetector.detectChanges();
|
|
773
|
-
}
|
|
774
|
-
validateAirportValues() {
|
|
775
|
-
if (!this.airportSelect) {
|
|
776
|
-
return false;
|
|
777
|
-
}
|
|
778
|
-
const originSnapshot = this.airportSelect.origin;
|
|
779
|
-
const destinationSnapshot = this.airportSelect.destination;
|
|
780
|
-
if (originSnapshot &&
|
|
781
|
-
destinationSnapshot &&
|
|
782
|
-
originSnapshot.code &&
|
|
783
|
-
originSnapshot.code.length &&
|
|
784
|
-
destinationSnapshot.code &&
|
|
785
|
-
destinationSnapshot.code.length) {
|
|
786
|
-
return true;
|
|
787
|
-
}
|
|
788
|
-
return false;
|
|
789
|
-
}
|
|
790
|
-
updateMaximize() {
|
|
791
|
-
setTimeout(() => {
|
|
792
|
-
this.maximize = this.validateAirportValues();
|
|
793
|
-
});
|
|
794
|
-
}
|
|
795
|
-
onDestinationOpen(open) {
|
|
796
|
-
if (this.passengerSelectDropdown) {
|
|
797
|
-
this.passengerSelectDropdown.open = false;
|
|
798
|
-
}
|
|
799
|
-
if (this.tripSwitch) {
|
|
800
|
-
this.tripSwitch.open = false;
|
|
801
|
-
}
|
|
802
|
-
if (this.transitSwitch) {
|
|
803
|
-
this.transitSwitch.open = false;
|
|
804
|
-
}
|
|
805
|
-
if (this.datepickerCombo) {
|
|
806
|
-
this.datepickerCombo.inboundOpen = false;
|
|
807
|
-
this.datepickerCombo.outboundOpen = false;
|
|
808
|
-
}
|
|
809
|
-
if (this.airportSelect && !this.airportSelect.destinationOpen) {
|
|
810
|
-
this.updateMaximize();
|
|
811
|
-
}
|
|
812
|
-
this.destinationOpenChange.emit(open);
|
|
813
|
-
}
|
|
814
|
-
onPassengerSelectOpen() {
|
|
815
|
-
this.openPassengerSelect = !this.openPassengerSelect;
|
|
816
|
-
if (this.airportSelect) {
|
|
817
|
-
this.airportSelect.originOpen = false;
|
|
818
|
-
this.airportSelect.destinationOpen = false;
|
|
819
|
-
}
|
|
820
|
-
if (this.tripSwitch) {
|
|
821
|
-
this.tripSwitch.open = false;
|
|
822
|
-
}
|
|
823
|
-
if (this.transitSwitch) {
|
|
824
|
-
this.transitSwitch.open = false;
|
|
825
|
-
}
|
|
826
|
-
if (this.datepickerCombo) {
|
|
827
|
-
if (this.datepickerCombo.inboundOpen) {
|
|
828
|
-
this.datepickerCombo.inboundOpen = false;
|
|
829
|
-
}
|
|
830
|
-
if (this.datepickerCombo.outboundOpen) {
|
|
831
|
-
this.datepickerCombo.outboundOpen = false;
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
this.passengerSelectOpenChange.emit(this.openPassengerSelect);
|
|
835
|
-
if (this.openPassengerSelect) {
|
|
836
|
-
setTimeout(() => {
|
|
837
|
-
if (this.passengerSelect?.numberFields.first) {
|
|
838
|
-
this.passengerSelect.numberFields.first.input.nativeElement.focus();
|
|
839
|
-
}
|
|
840
|
-
}, 300);
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
onTripSwitchOpen(open) {
|
|
844
|
-
clearTimeout(this.tripSwitchFocusTimeout);
|
|
845
|
-
if (this.passengerSelectDropdown) {
|
|
846
|
-
setTimeout(() => {
|
|
847
|
-
this.passengerSelectDropdown.open = false;
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
|
-
if (this.transitSwitch) {
|
|
851
|
-
this.transitSwitch.open = false;
|
|
852
|
-
}
|
|
853
|
-
if (this.airportSelect) {
|
|
854
|
-
this.airportSelect.originOpen = false;
|
|
855
|
-
this.airportSelect.destinationOpen = false;
|
|
856
|
-
}
|
|
857
|
-
if (this.datepickerCombo) {
|
|
858
|
-
this.datepickerCombo.inboundOpen = false;
|
|
859
|
-
this.datepickerCombo.outboundOpen = false;
|
|
860
|
-
}
|
|
861
|
-
this.tripSwitch.open = open;
|
|
862
|
-
if (open) {
|
|
863
|
-
this.tripSwitchFocusTimeout = setTimeout(() => {
|
|
864
|
-
this.tripTypeRoundTrip.nativeElement.focus();
|
|
865
|
-
}, 200);
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
onTransitSwitchOpen(open) {
|
|
869
|
-
this.openTransitTypeSelect = !this.openTransitTypeSelect;
|
|
870
|
-
clearTimeout(this.transitSwitchFocusTimeout);
|
|
871
|
-
if (this.passengerSelectDropdown) {
|
|
872
|
-
this.passengerSelectDropdown.open = false;
|
|
873
|
-
}
|
|
874
|
-
if (this.tripSwitch) {
|
|
875
|
-
this.tripSwitch.open = false;
|
|
876
|
-
}
|
|
877
|
-
if (this.airportSelect) {
|
|
878
|
-
this.airportSelect.originOpen = false;
|
|
879
|
-
this.airportSelect.destinationOpen = false;
|
|
880
|
-
}
|
|
881
|
-
if (this.datepickerCombo) {
|
|
882
|
-
this.datepickerCombo.inboundOpen = false;
|
|
883
|
-
this.datepickerCombo.outboundOpen = false;
|
|
884
|
-
}
|
|
885
|
-
if (this.transitSwitch) {
|
|
886
|
-
this.transitSwitch.open = open;
|
|
887
|
-
}
|
|
888
|
-
if (open) {
|
|
889
|
-
this.transitSwitchFocusTimeout = setTimeout(() => {
|
|
890
|
-
this.transitTypeTransit.nativeElement.focus();
|
|
891
|
-
}, 200);
|
|
892
|
-
}
|
|
893
|
-
}
|
|
894
|
-
onOriginChange(airport) {
|
|
895
|
-
this.originChange.emit(airport);
|
|
896
|
-
}
|
|
897
|
-
setSelectedOriginAirport(airport) {
|
|
898
|
-
if (!airport) {
|
|
899
|
-
return;
|
|
900
|
-
}
|
|
901
|
-
this.onOriginChange(airport);
|
|
902
|
-
if (this.originAirportCode === airport.code) {
|
|
903
|
-
return;
|
|
904
|
-
}
|
|
905
|
-
this.originAirportCode = airport.code;
|
|
906
|
-
this.changeDetector.detectChanges();
|
|
907
|
-
}
|
|
908
|
-
onDestinationChange(airport) {
|
|
909
|
-
this.destinationChange.emit(airport);
|
|
910
|
-
}
|
|
911
|
-
setFocusOnPassengerSelect(event) {
|
|
912
|
-
if (this.isMobileDisplay()) {
|
|
913
|
-
if (this.datepickerCombo) {
|
|
914
|
-
event.preventDefault();
|
|
915
|
-
this.outboundOpen = true;
|
|
916
|
-
this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
|
|
917
|
-
}
|
|
918
|
-
else if (this.tripSwitch) {
|
|
919
|
-
event.preventDefault();
|
|
920
|
-
this.onTripSwitchOpen(true);
|
|
921
|
-
this.focusAsync(this.tripSwitch.toggleElement);
|
|
922
|
-
}
|
|
923
|
-
}
|
|
924
|
-
else if (this.isTabletDisplay() && this.datepickerCombo) {
|
|
925
|
-
setTimeout(() => {
|
|
926
|
-
this.outboundOpen = true;
|
|
927
|
-
});
|
|
928
|
-
}
|
|
929
|
-
else {
|
|
930
|
-
if (this.passengerSelectDropdown) {
|
|
931
|
-
this.onPassengerSelectOpen();
|
|
932
|
-
const currentElementRef = this.passengerSelectDropdown.toggleElement;
|
|
933
|
-
setTimeout(() => this.setFocusOnNativeElement(currentElementRef));
|
|
934
|
-
}
|
|
935
|
-
else if (this.tripSwitch) {
|
|
936
|
-
this.onTripSwitchOpen(true);
|
|
937
|
-
this.tripSwitch.toggleElement.nativeElement.focus();
|
|
938
|
-
}
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
setFocusOnNativeElement(element) {
|
|
942
|
-
element.nativeElement.focus();
|
|
943
|
-
}
|
|
944
|
-
onTripTypeChange(tripType) {
|
|
945
|
-
setTimeout(() => {
|
|
946
|
-
if (this.tripSwitch) {
|
|
947
|
-
this.tripSwitch.open = false;
|
|
948
|
-
}
|
|
949
|
-
});
|
|
950
|
-
this.tripType = tripType;
|
|
951
|
-
if (this.nasFormGroup && this.nasFormControlNameTripType) {
|
|
952
|
-
const tripSwitchControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
953
|
-
tripSwitchControl.patchValue(tripType);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
onTransitChange(directOnly) {
|
|
957
|
-
setTimeout(() => {
|
|
958
|
-
if (this.transitSwitch) {
|
|
959
|
-
this.transitSwitch.open = false;
|
|
960
|
-
}
|
|
961
|
-
});
|
|
962
|
-
this.directOnly = directOnly;
|
|
963
|
-
if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
|
|
964
|
-
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
965
|
-
tripTypeControl.patchValue(directOnly);
|
|
966
|
-
}
|
|
967
|
-
this.openTransitTypeSelect = !this.openTransitTypeSelect;
|
|
968
|
-
}
|
|
969
|
-
getTravelDetailsTripSwitchIconClass(modifiers) {
|
|
970
|
-
const iconMediumBase = new NasComponentBase('icon-medium');
|
|
971
|
-
return [
|
|
972
|
-
iconMediumBase.getClass('', modifiers),
|
|
973
|
-
this.getTravelDetailsClass('icon'),
|
|
974
|
-
];
|
|
975
|
-
}
|
|
976
|
-
getTripSwitchLabel() {
|
|
977
|
-
return this.tripType === TripType.twoWayReturn
|
|
978
|
-
? this.tripSwitchRoundTripLabel
|
|
979
|
-
: this.tripSwitchOneWayLabel;
|
|
980
|
-
}
|
|
981
|
-
getTransitLabel() {
|
|
982
|
-
return this.directOnly ? this.directOnlyLabel : this.directTransitLabel;
|
|
983
|
-
}
|
|
984
|
-
onAccordionToggleChange(expanded) {
|
|
985
|
-
this.displaySummary = !expanded;
|
|
986
|
-
}
|
|
987
|
-
getSummary() {
|
|
988
|
-
return (`${this.passengerSelectLabel}${this.defaultSummarySeparator}` +
|
|
989
|
-
`${this.getTripSwitchLabel().toLowerCase()}${this.lastSummarySeparator}${this.getTransitLabel().toLowerCase()}`);
|
|
990
|
-
}
|
|
991
|
-
shouldMaximize() {
|
|
992
|
-
if (!this.exists(this.minimize)) {
|
|
993
|
-
return true;
|
|
994
|
-
}
|
|
995
|
-
else if (this.airportSelect &&
|
|
996
|
-
this.enableDestinationSelect &&
|
|
997
|
-
this.airportSelect.origin &&
|
|
998
|
-
this.airportSelect.origin.code &&
|
|
999
|
-
this.airportSelect.destination &&
|
|
1000
|
-
this.airportSelect.destination.code) {
|
|
1001
|
-
return true;
|
|
1002
|
-
}
|
|
1003
|
-
else if (this.airportSelect &&
|
|
1004
|
-
!this.enableDestinationSelect &&
|
|
1005
|
-
this.airportSelect.origin &&
|
|
1006
|
-
this.airportSelect.origin.code) {
|
|
1007
|
-
return true;
|
|
1008
|
-
}
|
|
1009
|
-
else if (this.airportSelect &&
|
|
1010
|
-
(this.airportSelect.originOpen || this.airportSelect.destinationOpen)) {
|
|
1011
|
-
return this.maximize;
|
|
1012
|
-
}
|
|
1013
|
-
else if (this.exists(this.minimize)) {
|
|
1014
|
-
if (this.maximize) {
|
|
1015
|
-
if (this.nasFormGroup) {
|
|
1016
|
-
return this.isNasGroupValid;
|
|
1017
|
-
}
|
|
1018
|
-
return true;
|
|
1019
|
-
}
|
|
1020
|
-
else {
|
|
1021
|
-
return false;
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
focusOnAirportSelectBackwards() {
|
|
1026
|
-
if (this.exists(this.airportSelect.combo)) {
|
|
1027
|
-
this.airportSelect.onDestinationOpen(true);
|
|
1028
|
-
setTimeout(() => {
|
|
1029
|
-
this.airportSelect.airportSelectDropdownDestination.input.nativeElement.focus();
|
|
1030
|
-
}, 100);
|
|
1031
|
-
}
|
|
1032
|
-
else {
|
|
1033
|
-
this.airportSelect.onOriginOpen(true);
|
|
1034
|
-
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
1035
|
-
}
|
|
1036
|
-
}
|
|
1037
|
-
setLatestSearches(abandonedBasket, airports) {
|
|
1038
|
-
if (!abandonedBasket || !airports) {
|
|
1039
|
-
return;
|
|
1040
|
-
}
|
|
1041
|
-
const unique = new Array();
|
|
1042
|
-
for (const item of abandonedBasket) {
|
|
1043
|
-
if (!unique.some((x) => x.destinationCode === item.destinationCode)) {
|
|
1044
|
-
unique.push(item);
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
const originCodes = unique.map((x) => x.originCode);
|
|
1048
|
-
const destinationCodes = unique.map((x) => x.destinationCode);
|
|
1049
|
-
const latestSearchesOrigin = airports.filter((airport) => unique.some((x) => x.originCode.toLowerCase() === airport.code.toLowerCase()));
|
|
1050
|
-
const latestSearchesDestination = airports.filter((airport) => unique.some((x) => x.destinationCode.toLowerCase() === airport.code.toLowerCase()));
|
|
1051
|
-
const code = 'code';
|
|
1052
|
-
this.latestSearchesOrigin = this.sortService
|
|
1053
|
-
.sortByObject(latestSearchesOrigin, originCodes, code)
|
|
1054
|
-
.slice(0, 3);
|
|
1055
|
-
if (this.latestSearchesOrigin &&
|
|
1056
|
-
this.latestSearchesOrigin.length > 0 &&
|
|
1057
|
-
this.exists(this.overrideOrigin)) {
|
|
1058
|
-
this.originAirportCode = this.latestSearchesOrigin[0].code;
|
|
1059
|
-
}
|
|
1060
|
-
this.latestSearchesDestination = this.sortService
|
|
1061
|
-
.sortByObject(latestSearchesDestination, destinationCodes, code)
|
|
1062
|
-
.slice(0, 3);
|
|
1063
|
-
}
|
|
1064
|
-
closeDropdowns() {
|
|
1065
|
-
if (this.passengerSelectDropdown) {
|
|
1066
|
-
this.passengerSelectDropdown.open = false;
|
|
1067
|
-
}
|
|
1068
|
-
if (this.tripSwitch) {
|
|
1069
|
-
this.tripSwitch.open = false;
|
|
1070
|
-
}
|
|
1071
|
-
if (this.transitSwitch) {
|
|
1072
|
-
this.transitSwitch.open = false;
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
setFilterFullWidth() {
|
|
1076
|
-
if (!this.container && !this.container?.nativeElement) {
|
|
1077
|
-
return;
|
|
1078
|
-
}
|
|
1079
|
-
this.fullWidth = this.container?.nativeElement?.offsetWidth > 788;
|
|
1080
|
-
}
|
|
1081
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: FilterNewComponent, deps: [{ token: i1.DeviceHelper }, { token: i2.SortService }, { token: i3.AbandonedBasketService }, { token: i4.DateHelper }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1082
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: FilterNewComponent, selector: "nas-filter-new", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectYouthsLabel: "passengerSelectYouthsLabel", passengerSelectYoungAdultsLabel: "passengerSelectYoungAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", nasFormControlNameSubsidyDiscount: "nasFormControlNameSubsidyDiscount", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", subsidyDiscounts: "subsidyDiscounts", selectedSubsidyDiscount: "selectedSubsidyDiscount", subsidyDiscountLabel: "subsidyDiscountLabel", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", passengersTitleLabel: "passengersTitleLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch", datePickerComboInlineFlex: "datePickerComboInlineFlex" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange", subsidyDiscountInfoClick: "subsidyDiscountInfoClick" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "subsidyDiscount", first: true, predicate: ["subsidyDiscount"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select-new *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [ariaLabelClear]=\"ariaLabelClear\" \n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-new>\n <nas-airport-select-new *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-new>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized', fullWidth && 'full-width'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <div [nasClass]=\"getClass('passengers')\">\n <button (click)=\"onPassengerSelectOpen($event)\" [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\" [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openPassengerSelect\"></nas-backdrop>\n <nas-passenger-select-new\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select-new>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <form [nasClass]=\"getClass('radio')\">\n <nas-radio-new #tripTypeRoundTrip [name]=\"'tripType'\" [value]=\"2\" [checked]=\"true\" (checkedChange)=\"onTripTypeChange(2)\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio-new>\n <nas-radio-new #tripTypeOneway [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\">\n {{tripSwitchOneWayLabel}}\n </nas-radio-new>\n </form>\n </ng-container>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo-new #datepickerCombo\n compact\n [inlineFlex]=\"inlineFlex\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo-new>\n </div>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <div [nasClass]=\"getClass('transit-type')\">\n <nas-button-new *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n block\n light\n [iconType]=\"'chevron-down'\"\n [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (click)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">{{ getTransitLabel() }}\n </nas-button-new>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\">\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter-new{position:relative;z-index:6}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light{border:2px solid #15273f}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light:hover,.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light:focus{background-color:#fff}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter-new ::ng-deep .nas-filter-new__transit--active .nas-button-new__icon{transform:rotate(180deg)}.nas-filter-new ::ng-deep .nas-filter-new__transit--active .nas-button-new{background-color:#ebf4ff!important;border:2px solid #15273f}.nas-filter-new__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter-new__title{font-size:32px;line-height:38px}}.nas-filter-new__title--md{margin-top:60px}.nas-filter-new__radio{display:flex;gap:24px;padding:12px}.nas-filter-new__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273f;padding:9px 14px;width:100%}.nas-filter-new__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter-new__label{flex-direction:column;text-align:left}.nas-filter-new__label p{margin:0}.nas-filter-new__button-title{font-weight:700;font-size:14px}.nas-filter-new__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter-new__transit-type-selection{position:absolute;width:100%;border-left:2px solid #15273f;border-right:2px solid #15273f;border-bottom:2px solid #15273f}.nas-filter-new__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter-new__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter-new__transit-type{z-index:3}.nas-filter-new__filters .nas-filter-new__date-combo{order:2;flex:1;z-index:2}.nas-filter-new__filters--minimized .nas-filter-new__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter-new__filters--maximize .nas-filter-new__airport-select-new:after{display:none}.nas-filter-new__filters--md .nas-filter-new__date-combo{flex:0 0 100%}.nas-filter-new__filters--lg{align-items:stretch}.nas-filter-new__filters--lg .nas-filter-new__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter-new__filters--lg .nas-filter-new__suggestions{order:3}.nas-filter-new__filters--lg .nas-filter-new__filters--minimized .nas-filter-new__airport-select{margin-right:0;flex:0 1 100%}.nas-filter-new__filters--lg .nas-filter-new__filters--maximize .nas-filter-new__airport-select{margin-right:3px;flex:auto}.nas-filter-new__filters--lg.nas-filter-new__filters--maximize .nas-filter-new__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter-new__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter-new__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter-new__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter-new__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#15273f;margin-top:6px;z-index:1}.nas-filter-new__toggler .nas-filter-new__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter-new__toggler .nas-filter-new__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details--full-width{flex-wrap:wrap;flex-direction:row;gap:8px}.travel-details--full-width .nas-filter-new__radio{order:0;width:100%;padding-left:0}.travel-details--full-width .nas-filter-new__date-combo-new{order:1;flex:1 1 48.5%}.travel-details--full-width .nas-filter-new__date-combo-new ::ng-deep .nas-datepicker-combo-new__date-picker:last-child .nas-datepicker-new__date-picker-wrapper .nas-datepicker-new__controls{border-left:2px solid currentColor;margin-left:8px}.travel-details--full-width .nas-filter-new__passengers{order:2;flex:1 1 24%;position:relative;height:68px}.travel-details--full-width .nas-filter-new__passengers .nas-filter-new__passengers-button{height:68px}.travel-details--full-width .nas-filter-new__passengers .nas-filter-new__button-title{line-height:18px}.travel-details--full-width .nas-filter-new__transit-type{order:3;flex:1 1 24%;position:relative}.travel-details--full-width .nas-filter-new__transit-type ::ng-deep .nas-button-new{height:68px;margin:0}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f8f8f8}.travel-details__action--border{border-bottom:2px #f1f1f1}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-passenger-select-new__title{padding:8px 16px 0}::ng-deep .nas-passenger-select-new__list-item{padding:8px 16px!important}::ng-deep .nas-radio-new{margin:0!important}::ng-deep .nas-button-new{margin-top:6px}::ng-deep .nas-checkbox-new{background-color:#f1f1f1;padding:12px;width:100%;padding-left:42px!important;margin-bottom:12px!important}::ng-deep .nas-checkbox-new__indicator{left:12px!important}::ng-deep .nas-filter-new__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter-new__filters .nas-filter-new__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-filter-new__date-combo--side-by-side .nas-datepicker-combo-new__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-airport-select-new__input-line{border-top:none!important}::ng-deep .nas-filter-new__filters .nas-airport-select-new-combo__separator{border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter-new__filters .nas-datepicker-combo-new__separator{display:none}::ng-deep .nas-filter-new__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter-new__filters--lg .nas-filter-new__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter-new__filters--lg .nas-airport-select-new__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__filters--lg .nas-datepicker-combo-new__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__filters--lg .nas-airport-select-new-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__rotate{transform:rotate(180deg)}::ng-deep .nas-filter-new__rotate-enter,::ng-deep .nas-filter-new__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter-new__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter-new__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__input-line{border-top:none}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new-combo__separator{border-top:none}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__results-wrapper{margin-top:0}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__results{top:-3px}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__icon{bottom:18px}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new:after{display:none}::ng-deep .nas-filter-new__airport-select .nas-airport-select-new__input-line{display:none}::ng-deep .nas-filter-new__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter-new__airport-origin-select .nas-airport-select-new:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter-new__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter-new__airport-origin-select .nas-airport-select-new:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter-new__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter-new__origin-combined{display:flex;flex:none}::ng-deep .nas-filter-new__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter-new__subsidy-discount{order:3}::ng-deep .nas-filter-new__subsidy-discount .nas-subsidy-discount{margin-top:16px}::ng-deep .nas-filter-new__subsidy-discount .nas-subsidy-discount__box{width:100%}::ng-deep .nas-filter-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter-new__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter-new__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "badge", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "warning", "badgeInfo", "badgeSuccess", "badgeWarning", "badgeError", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i8.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i10.SubsidyDiscountComponent, selector: "nas-subsidy-discount", inputs: ["label", "icon", "selectedDiscount", "discounts"], outputs: ["infoButtonClick", "infoButtonKeydown", "discountSelectChange"] }, { kind: "component", type: i11.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }, { kind: "component", type: i12.AirportSelectNewComponent, selector: "nas-airport-select-new", inputs: ["airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i13.DatepickerComboNewComponent, selector: "nas-datepicker-combo-new", inputs: ["ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "timepickerLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset", "inlineFlex"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i14.ButtonNewComponent, selector: "nas-button-new", inputs: ["primary", "secondary", "link", "light", "large", "block", "flex", "compact", "right", "spaceless", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target", "icon", "iconLeft", "iconType", "buttonlink"], outputs: ["clickChange"] }, { kind: "component", type: i15.PassengerSelectNewComponent, selector: "nas-passenger-select-new", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "youthsLabel", "youngAdultsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i16.RadioNewComponent, selector: "nas-radio-new", inputs: ["id", "value", "name", "error", "disabled", "strong", "block", "spaceless", "tabIndex", "required", "aria-label", "aria-describedby", "aria-labelledby", "checked", "nasFormControlName", "nasFormGroup"], outputs: ["checkedChange"] }, { kind: "component", type: i17.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }] }); }
|
|
1083
|
-
}
|
|
1084
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: FilterNewComponent, decorators: [{
|
|
1085
|
-
type: Component,
|
|
1086
|
-
args: [{ selector: 'nas-filter-new', template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select-new *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [ariaLabelClear]=\"ariaLabelClear\" \n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-new>\n <nas-airport-select-new *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-new>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [ngClass]=\"{ 'lower-z-index': openPassengerSelect || inboundOpen || outboundOpen }\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized', fullWidth && 'full-width'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <div [nasClass]=\"getClass('passengers')\">\n <button (click)=\"onPassengerSelectOpen($event)\" [nasClass]=\"getClass('passengers-button', openPassengerSelect && 'active')\">\n <div [nasClass]=\"getClass('label')\">\n <p [nasClass]=\"getClass('button-title')\">{{passengersTitleLabel}}</p>\n <p>{{passengerSelectLabel}}</p>\n </div>\n <div [nasClass]=\"getClass('traveler-icon')\"><nas-icon [icon]=\"'my-profile-compact'\" [type]=\"'small'\"></nas-icon></div>\n </button>\n <div *ngIf=\"openPassengerSelect\" [nasClass]=\"getClass('passengers-selection')\">\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openPassengerSelect\"></nas-backdrop>\n <nas-passenger-select-new\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [youthsLabel]=\"passengerSelectYouthsLabel\"\n [youngAdultsLabel]=\"passengerSelectYoungAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select-new>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <form [nasClass]=\"getClass('radio')\">\n <nas-radio-new #tripTypeRoundTrip [name]=\"'tripType'\" [value]=\"2\" [checked]=\"true\" (checkedChange)=\"onTripTypeChange(2)\">\n {{tripSwitchRoundTripLabel}}\n </nas-radio-new>\n <nas-radio-new #tripTypeOneway [name]=\"'tripType'\" [value]=\"1\" (checkedChange)=\"onTripTypeChange(1)\">\n {{tripSwitchOneWayLabel}}\n </nas-radio-new>\n </form>\n </ng-container>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo-new #datepickerCombo\n compact\n [inlineFlex]=\"inlineFlex\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo-new>\n </div>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <div [nasClass]=\"getClass('transit-type')\">\n <nas-button-new *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n block\n light\n [iconType]=\"'chevron-down'\"\n [label]=\"getTransitLabel()\"\n [nasClass]=\"getClass('transit', openTransitTypeSelect && 'active')\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (click)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">{{ getTransitLabel() }}\n </nas-button-new>\n <div *ngIf=\"openTransitTypeSelect\" [nasClass]=\"getClass('transit-type-selection')\">\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">{{ directOnlyLabel }}\n </button>\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">{{ directTransitLabel }}\n </button>\n <nas-backdrop [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"openTransitTypeSelect\"></nas-backdrop>\n </div>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter-new{position:relative;z-index:6}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light{border:2px solid #15273f}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light:hover,.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new--light:focus{background-color:#fff}.nas-filter-new ::ng-deep .nas-filter-new__transit .nas-button-new__content{gap:0;justify-content:space-between;font-weight:400}.nas-filter-new ::ng-deep .nas-filter-new__transit--active .nas-button-new__icon{transform:rotate(180deg)}.nas-filter-new ::ng-deep .nas-filter-new__transit--active .nas-button-new{background-color:#ebf4ff!important;border:2px solid #15273f}.nas-filter-new__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter-new__title{font-size:32px;line-height:38px}}.nas-filter-new__title--md{margin-top:60px}.nas-filter-new__radio{display:flex;gap:24px;padding:12px}.nas-filter-new__passengers-button{display:flex;justify-content:space-between;background-color:#fff;border:2px solid #15273f;padding:9px 14px;width:100%}.nas-filter-new__passengers-button--active{background-color:#ebf4ff!important;position:relative;z-index:5}.nas-filter-new__label{flex-direction:column;text-align:left}.nas-filter-new__label p{margin:0}.nas-filter-new__button-title{font-weight:700;font-size:14px}.nas-filter-new__traveler-icon{transform:scale(.85);margin-top:12px}.nas-filter-new__transit-type-selection{position:absolute;width:100%;border-left:2px solid #15273f;border-right:2px solid #15273f;border-bottom:2px solid #15273f}.nas-filter-new__transit-type-selection button:first-child{border-bottom:2px solid #E9E7E4}.nas-filter-new__transit-type-selection ::ng-deep .nas-backdrop{z-index:-1}.nas-filter-new__transit-type{z-index:3}.nas-filter-new__filters .nas-filter-new__date-combo{order:2;flex:1;z-index:2}.nas-filter-new__filters--minimized .nas-filter-new__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter-new__filters--maximize .nas-filter-new__airport-select-new:after{display:none}.nas-filter-new__filters--md .nas-filter-new__date-combo{flex:0 0 100%}.nas-filter-new__filters--lg{align-items:stretch}.nas-filter-new__filters--lg .nas-filter-new__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter-new__filters--lg .nas-filter-new__suggestions{order:3}.nas-filter-new__filters--lg .nas-filter-new__filters--minimized .nas-filter-new__airport-select{margin-right:0;flex:0 1 100%}.nas-filter-new__filters--lg .nas-filter-new__filters--maximize .nas-filter-new__airport-select{margin-right:3px;flex:auto}.nas-filter-new__filters--lg.nas-filter-new__filters--maximize .nas-filter-new__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter-new__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter-new__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter-new__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter-new__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#15273f;margin-top:6px;z-index:1}.nas-filter-new__toggler .nas-filter-new__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter-new__toggler .nas-filter-new__direct-only{display:inline-block}.travel-details{position:relative;margin:0;z-index:1;display:flex;flex-direction:column}.travel-details--full-width{flex-wrap:wrap;flex-direction:row;gap:8px}.travel-details--full-width .nas-filter-new__radio{order:0;width:100%;padding-left:0}.travel-details--full-width .nas-filter-new__date-combo-new{order:1;flex:1 1 48.5%}.travel-details--full-width .nas-filter-new__date-combo-new ::ng-deep .nas-datepicker-combo-new__date-picker:last-child .nas-datepicker-new__date-picker-wrapper .nas-datepicker-new__controls{border-left:2px solid currentColor;margin-left:8px}.travel-details--full-width .nas-filter-new__passengers{order:2;flex:1 1 24%;position:relative;height:68px}.travel-details--full-width .nas-filter-new__passengers .nas-filter-new__passengers-button{height:68px}.travel-details--full-width .nas-filter-new__passengers .nas-filter-new__button-title{line-height:18px}.travel-details--full-width .nas-filter-new__transit-type{order:3;flex:1 1 24%;position:relative}.travel-details--full-width .nas-filter-new__transit-type ::ng-deep .nas-button-new{height:68px;margin:0}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__action{padding:12px;width:100%;background-color:#fff;font-weight:700}.travel-details__action:hover,.travel-details__action:focus{background-color:#f8f8f8}.travel-details__action--border{border-bottom:2px #f1f1f1}.travel-details__action:focus{outline:none;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-passenger-select-new__title{padding:8px 16px 0}::ng-deep .nas-passenger-select-new__list-item{padding:8px 16px!important}::ng-deep .nas-radio-new{margin:0!important}::ng-deep .nas-button-new{margin-top:6px}::ng-deep .nas-checkbox-new{background-color:#f1f1f1;padding:12px;width:100%;padding-left:42px!important;margin-bottom:12px!important}::ng-deep .nas-checkbox-new__indicator{left:12px!important}::ng-deep .nas-filter-new__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter-new__filters .nas-filter-new__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-filter-new__date-combo--side-by-side .nas-datepicker-combo-new__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-airport-select-new__input-line{border-top:none!important}::ng-deep .nas-filter-new__filters .nas-airport-select-new-combo__separator{border-bottom:none!important}::ng-deep .nas-filter-new__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter-new__filters .nas-datepicker-combo-new__separator{display:none}::ng-deep .nas-filter-new__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter-new__filters--lg .nas-filter-new__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter-new__filters--lg .nas-airport-select-new__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__filters--lg .nas-datepicker-combo-new__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__filters--lg .nas-airport-select-new-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter-new__rotate{transform:rotate(180deg)}::ng-deep .nas-filter-new__rotate-enter,::ng-deep .nas-filter-new__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter-new__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter-new__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__input-line{border-top:none}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new-combo__separator{border-top:none}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__results-wrapper{margin-top:0}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__results{top:-3px}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new__icon{bottom:18px}::ng-deep .nas-filter-new__airport-select--no-border .nas-airport-select-new:after{display:none}::ng-deep .nas-filter-new__airport-select .nas-airport-select-new__input-line{display:none}::ng-deep .nas-filter-new__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter-new__airport-origin-select .nas-airport-select-new:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter-new__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter-new__airport-origin-select .nas-airport-select-new:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter-new__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter-new__origin-combined{display:flex;flex:none}::ng-deep .nas-filter-new__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter-new__subsidy-discount{order:3}::ng-deep .nas-filter-new__subsidy-discount .nas-subsidy-discount{margin-top:16px}::ng-deep .nas-filter-new__subsidy-discount .nas-subsidy-discount__box{width:100%}::ng-deep .nas-filter-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:passenger-backdrop .7s ease-out both}::ng-deep .nas-filter-new__passengers-selection{position:absolute;z-index:4;width:100%}::ng-deep .nas-filter-new__passengers-selection ::ng-deep .nas-backdrop{z-index:-1}@keyframes passenger-backdrop{0%{opacity:0}}::ng-deep .lower-z-index{z-index:1!important;position:relative}\n"] }]
|
|
1087
|
-
}], ctorParameters: function () { return [{ type: i1.DeviceHelper }, { type: i2.SortService }, { type: i3.AbandonedBasketService }, { type: i4.DateHelper }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { passengerSelectDropdown: [{
|
|
1088
|
-
type: ViewChild,
|
|
1089
|
-
args: ['passengerSelectDropdown']
|
|
1090
|
-
}], passengerSelect: [{
|
|
1091
|
-
type: ViewChild,
|
|
1092
|
-
args: ['passengerSelect']
|
|
1093
|
-
}], tripSwitch: [{
|
|
1094
|
-
type: ViewChild,
|
|
1095
|
-
args: ['tripSwitch']
|
|
1096
|
-
}], transitSwitch: [{
|
|
1097
|
-
type: ViewChild,
|
|
1098
|
-
args: ['transitSwitch']
|
|
1099
|
-
}], airportSelect: [{
|
|
1100
|
-
type: ViewChild,
|
|
1101
|
-
args: ['airportSelect']
|
|
1102
|
-
}], datepickerCombo: [{
|
|
1103
|
-
type: ViewChild,
|
|
1104
|
-
args: ['datepickerCombo']
|
|
1105
|
-
}], container: [{
|
|
1106
|
-
type: ViewChild,
|
|
1107
|
-
args: ['container']
|
|
1108
|
-
}], tripTypeOneway: [{
|
|
1109
|
-
type: ViewChild,
|
|
1110
|
-
args: ['tripTypeOneway']
|
|
1111
|
-
}], tripTypeRoundTrip: [{
|
|
1112
|
-
type: ViewChild,
|
|
1113
|
-
args: ['tripTypeRoundTrip']
|
|
1114
|
-
}], transitTypeDirectOnly: [{
|
|
1115
|
-
type: ViewChild,
|
|
1116
|
-
args: ['transitTypeDirectOnly']
|
|
1117
|
-
}], transitTypeTransit: [{
|
|
1118
|
-
type: ViewChild,
|
|
1119
|
-
args: ['transitTypeTransit']
|
|
1120
|
-
}], subsidyDiscount: [{
|
|
1121
|
-
type: ViewChild,
|
|
1122
|
-
args: ['subsidyDiscount']
|
|
1123
|
-
}], airportRelations: [{
|
|
1124
|
-
type: Input
|
|
1125
|
-
}], ariaLabelClear: [{
|
|
1126
|
-
type: Input
|
|
1127
|
-
}], ariaLabelSubtract: [{
|
|
1128
|
-
type: Input
|
|
1129
|
-
}], ariaLabelBackdrop: [{
|
|
1130
|
-
type: Input
|
|
1131
|
-
}], ariaLabelAdd: [{
|
|
1132
|
-
type: Input
|
|
1133
|
-
}], allowedOriginAirports: [{
|
|
1134
|
-
type: Input
|
|
1135
|
-
}], allowedDestinationAirports: [{
|
|
1136
|
-
type: Input
|
|
1137
|
-
}], displayLatestSearches: [{
|
|
1138
|
-
type: Input
|
|
1139
|
-
}], useSwitch: [{
|
|
1140
|
-
type: Input
|
|
1141
|
-
}], displayClosestAirports: [{
|
|
1142
|
-
type: Input
|
|
1143
|
-
}], originAirportCode: [{
|
|
1144
|
-
type: Input
|
|
1145
|
-
}], destinationAirportCode: [{
|
|
1146
|
-
type: Input
|
|
1147
|
-
}], passengerSelectLabel: [{
|
|
1148
|
-
type: Input
|
|
1149
|
-
}], maxPaxCount: [{
|
|
1150
|
-
type: Input
|
|
1151
|
-
}], passengers: [{
|
|
1152
|
-
type: Input
|
|
1153
|
-
}], minAdultCount: [{
|
|
1154
|
-
type: Input
|
|
1155
|
-
}], tripSwitchRoundTripLabel: [{
|
|
1156
|
-
type: Input
|
|
1157
|
-
}], tripSwitchOneWayLabel: [{
|
|
1158
|
-
type: Input
|
|
1159
|
-
}], directOnlyLabel: [{
|
|
1160
|
-
type: Input
|
|
1161
|
-
}], directTransitLabel: [{
|
|
1162
|
-
type: Input
|
|
1163
|
-
}], minimizeOnMobile: [{
|
|
1164
|
-
type: Input
|
|
1165
|
-
}], expandedAccordionMobile: [{
|
|
1166
|
-
type: Input
|
|
1167
|
-
}], defaultSummarySeparator: [{
|
|
1168
|
-
type: Input
|
|
1169
|
-
}], lastSummarySeparator: [{
|
|
1170
|
-
type: Input
|
|
1171
|
-
}], passengerSelectTitle: [{
|
|
1172
|
-
type: Input
|
|
1173
|
-
}], passengerSelectAdultsLabel: [{
|
|
1174
|
-
type: Input
|
|
1175
|
-
}], passengerSelectYouthsLabel: [{
|
|
1176
|
-
type: Input
|
|
1177
|
-
}], passengerSelectYoungAdultsLabel: [{
|
|
1178
|
-
type: Input
|
|
1179
|
-
}], passengerSelectChildrenLabel: [{
|
|
1180
|
-
type: Input
|
|
1181
|
-
}], passengerSelectInfantsLabel: [{
|
|
1182
|
-
type: Input
|
|
1183
|
-
}], groupBookingLabel: [{
|
|
1184
|
-
type: Input
|
|
1185
|
-
}], allAirportsLabel: [{
|
|
1186
|
-
type: Input
|
|
1187
|
-
}], latestSearchesLabel: [{
|
|
1188
|
-
type: Input
|
|
1189
|
-
}], closestAirportsLabel: [{
|
|
1190
|
-
type: Input
|
|
1191
|
-
}], selectOriginFirstLabel: [{
|
|
1192
|
-
type: Input
|
|
1193
|
-
}], labelOrigin: [{
|
|
1194
|
-
type: Input
|
|
1195
|
-
}], placeholderOrigin: [{
|
|
1196
|
-
type: Input
|
|
1197
|
-
}], labelDestination: [{
|
|
1198
|
-
type: Input
|
|
1199
|
-
}], geolocationLabel: [{
|
|
1200
|
-
type: Input
|
|
1201
|
-
}], geolocationBlockedLabel: [{
|
|
1202
|
-
type: Input
|
|
1203
|
-
}], placeholderDestination: [{
|
|
1204
|
-
type: Input
|
|
1205
|
-
}], keepSelection: [{
|
|
1206
|
-
type: Input
|
|
1207
|
-
}], editSearchTitle: [{
|
|
1208
|
-
type: Input
|
|
1209
|
-
}], nasFormGroup: [{
|
|
1210
|
-
type: Input
|
|
1211
|
-
}], nasFormControlNameOrigin: [{
|
|
1212
|
-
type: Input
|
|
1213
|
-
}], nasFormControlNameDestination: [{
|
|
1214
|
-
type: Input
|
|
1215
|
-
}], nasFormControlNameTripType: [{
|
|
1216
|
-
type: Input
|
|
1217
|
-
}], nasFormControlNameDirectOnly: [{
|
|
1218
|
-
type: Input
|
|
1219
|
-
}], nasFormControlNameOutbound: [{
|
|
1220
|
-
type: Input
|
|
1221
|
-
}], nasFormControlNameInbound: [{
|
|
1222
|
-
type: Input
|
|
1223
|
-
}], nasFormControlGroupBooking: [{
|
|
1224
|
-
type: Input
|
|
1225
|
-
}], nasFormControlNameSubsidyDiscount: [{
|
|
1226
|
-
type: Input
|
|
1227
|
-
}], overrideOrigin: [{
|
|
1228
|
-
type: Input
|
|
1229
|
-
}], enableSuggestions: [{
|
|
1230
|
-
type: Input
|
|
1231
|
-
}], closestAirports: [{
|
|
1232
|
-
type: Input
|
|
1233
|
-
}], minimize: [{
|
|
1234
|
-
type: Input
|
|
1235
|
-
}], airports: [{
|
|
1236
|
-
type: Input
|
|
1237
|
-
}], tripType: [{
|
|
1238
|
-
type: Input
|
|
1239
|
-
}], directOnly: [{
|
|
1240
|
-
type: Input
|
|
1241
|
-
}], groupBookingLimit: [{
|
|
1242
|
-
type: Input
|
|
1243
|
-
}], subsidyDiscounts: [{
|
|
1244
|
-
type: Input
|
|
1245
|
-
}], selectedSubsidyDiscount: [{
|
|
1246
|
-
type: Input
|
|
1247
|
-
}], subsidyDiscountLabel: [{
|
|
1248
|
-
type: Input
|
|
1249
|
-
}], ariaLabelPreviousMonth: [{
|
|
1250
|
-
type: Input
|
|
1251
|
-
}], ariaLabelNextMonth: [{
|
|
1252
|
-
type: Input
|
|
1253
|
-
}], originOpenChange: [{
|
|
1254
|
-
type: Output
|
|
1255
|
-
}], destinationOpenChange: [{
|
|
1256
|
-
type: Output
|
|
1257
|
-
}], passengerSelectOpenChange: [{
|
|
1258
|
-
type: Output
|
|
1259
|
-
}], originChange: [{
|
|
1260
|
-
type: Output
|
|
1261
|
-
}], destinationChange: [{
|
|
1262
|
-
type: Output
|
|
1263
|
-
}], passengersChange: [{
|
|
1264
|
-
type: Output
|
|
1265
|
-
}], tripTypeChange: [{
|
|
1266
|
-
type: Output
|
|
1267
|
-
}], directOnlyChange: [{
|
|
1268
|
-
type: Output
|
|
1269
|
-
}], noAvailableFlightsLabel: [{
|
|
1270
|
-
type: Input
|
|
1271
|
-
}], availableFlightsLabel: [{
|
|
1272
|
-
type: Input
|
|
1273
|
-
}], disablePastSelection: [{
|
|
1274
|
-
type: Input
|
|
1275
|
-
}], outboundLabel: [{
|
|
1276
|
-
type: Input
|
|
1277
|
-
}], inboundLabel: [{
|
|
1278
|
-
type: Input
|
|
1279
|
-
}], availability: [{
|
|
1280
|
-
type: Input
|
|
1281
|
-
}], outboundAvailableDates: [{
|
|
1282
|
-
type: Input
|
|
1283
|
-
}], inboundAvailableDates: [{
|
|
1284
|
-
type: Input
|
|
1285
|
-
}], times: [{
|
|
1286
|
-
type: Input
|
|
1287
|
-
}], dateDisplayFormat: [{
|
|
1288
|
-
type: Input
|
|
1289
|
-
}], timeDisplayFormat: [{
|
|
1290
|
-
type: Input
|
|
1291
|
-
}], locale: [{
|
|
1292
|
-
type: Input
|
|
1293
|
-
}], compact: [{
|
|
1294
|
-
type: Input
|
|
1295
|
-
}], outboundDisabled: [{
|
|
1296
|
-
type: Input
|
|
1297
|
-
}], inboundDisabled: [{
|
|
1298
|
-
type: Input
|
|
1299
|
-
}], enableDatepickers: [{
|
|
1300
|
-
type: Input
|
|
1301
|
-
}], minimizingLabel: [{
|
|
1302
|
-
type: Input
|
|
1303
|
-
}], maximizingLabel: [{
|
|
1304
|
-
type: Input
|
|
1305
|
-
}], directOnlyMobileLabel: [{
|
|
1306
|
-
type: Input
|
|
1307
|
-
}], orLabel: [{
|
|
1308
|
-
type: Input
|
|
1309
|
-
}], passengersTitleLabel: [{
|
|
1310
|
-
type: Input
|
|
1311
|
-
}], invalidDestinationText: [{
|
|
1312
|
-
type: Input
|
|
1313
|
-
}], outboundSelectedDate: [{
|
|
1314
|
-
type: Input
|
|
1315
|
-
}], inboundSelectedDate: [{
|
|
1316
|
-
type: Input
|
|
1317
|
-
}], enableDestinationSelect: [{
|
|
1318
|
-
type: Input
|
|
1319
|
-
}], enablePassengersSelect: [{
|
|
1320
|
-
type: Input
|
|
1321
|
-
}], enableTripSwitch: [{
|
|
1322
|
-
type: Input
|
|
1323
|
-
}], enableTransitSwitch: [{
|
|
1324
|
-
type: Input
|
|
1325
|
-
}], datePickerComboInlineFlex: [{
|
|
1326
|
-
type: Input
|
|
1327
|
-
}], outboundSelectedDateChange: [{
|
|
1328
|
-
type: Output
|
|
1329
|
-
}], inboundSelectedDateChange: [{
|
|
1330
|
-
type: Output
|
|
1331
|
-
}], outboundOpenChange: [{
|
|
1332
|
-
type: Output
|
|
1333
|
-
}], inboundOpenChange: [{
|
|
1334
|
-
type: Output
|
|
1335
|
-
}], outboundMonthChange: [{
|
|
1336
|
-
type: Output
|
|
1337
|
-
}], inboundMonthChange: [{
|
|
1338
|
-
type: Output
|
|
1339
|
-
}], focusOnNextChange: [{
|
|
1340
|
-
type: Output
|
|
1341
|
-
}], positionChange: [{
|
|
1342
|
-
type: Output
|
|
1343
|
-
}], subsidyDiscountInfoClick: [{
|
|
1344
|
-
type: Output
|
|
1345
|
-
}], onResize: [{
|
|
1346
|
-
type: HostListener,
|
|
1347
|
-
args: ["window:resize", ["$event"]]
|
|
1348
|
-
}] } });
|
|
1349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW5ldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1uZXcvZmlsdGVyLW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1uZXcvZmlsdGVyLW5ldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQnRFOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxrQkFDWCxTQUFRLGdCQUFnQjtJQThCeEIsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQTRCLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBd0dEOzs7O09BSUc7SUFDSCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLEtBQTZCO1FBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUE0Q0Q7Ozs7T0FJRztJQUNILElBQ0ksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixDQUFDLEtBQWM7UUFDeEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQy9DLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQTRQRCxJQUNJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLFFBQTZCO1FBQy9DLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQVNEOzs7Ozs7T0FNRztJQUNILElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFrQjtRQUM3QixJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsVUFBbUI7UUFDaEMsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBbVFEOzs7O09BSUc7SUFDSCxJQUNJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxJQUFhO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQW9HRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxLQUFjO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO1lBQ3ZFLE9BQU87U0FDUjtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBaUJELFlBQ1MsWUFBMEIsRUFDekIsV0FBd0IsRUFDeEIsc0JBQThDLEVBQzlDLFdBQXVCLEVBQ3hCLFVBQXNCLEVBQ3JCLGNBQWlDO1FBRXpDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBUGpCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFwK0IzQyxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUd0QixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQW9PbEI7Ozs7Ozs7V0FPRztRQUNNLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUV0Qzs7Ozs7V0FLRztRQUNNLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQXdGbkM7Ozs7V0FJRztRQUNNLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQXdCaEM7Ozs7V0FJRztRQUNNLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQXlPckM7Ozs7V0FJRztRQUNPLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFekQ7Ozs7V0FJRztRQUNPLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFOUQ7Ozs7V0FJRztRQUNPLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEU7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFMUQ7Ozs7V0FJRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBRS9EOzs7O1dBSUc7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUV4RTs7OztXQUlHO1FBQ08sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXhEOzs7O1dBSUc7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBaUV6RDs7Ozs7V0FLRztRQUNNLHNCQUFpQixHQUFHLFlBQVksQ0FBQztRQUUxQzs7OztXQUlHO1FBQ00sc0JBQWlCLEdBQUcsT0FBTyxDQUFDO1FBRXJDOzs7OztXQUtHO1FBQ00sV0FBTSxHQUFHLE9BQU8sQ0FBQztRQW1IMUI7Ozs7V0FJRztRQUNNLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ00sMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBRXZDOzs7O1dBSUc7UUFDTSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFakM7Ozs7V0FJRztRQUNNLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7OztXQUlHO1FBQ00sOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBRTFDOzs7O1dBSUc7UUFDTywrQkFBMEIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRW5FOzs7O1dBSUc7UUFDTyw4QkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRWxFOzs7O1dBSUc7UUFDTyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNEOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTFEOzs7O1dBSUc7UUFDTyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFDTyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNEOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpEOzs7O1dBSUc7UUFDTyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRW5FOzs7O1dBSUc7UUFDTyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBd0JoRCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFjckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBNEIsQ0FBQztJQUMvRCxDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQzdDLElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsQ0FBQztZQUVGLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2FBQzNDO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDM0MsSUFBSSxDQUFDLDBCQUEwQixDQUNoQyxDQUFDO1lBRUYsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBRWpFLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO29CQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDMUMsSUFBSSxDQUFDLHlCQUF5QixDQUMvQixDQUFDO29CQUVGLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7d0JBQzFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztxQkFDMUI7aUJBQ0Y7Z0JBRUQsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRTtvQkFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQzdDLElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsQ0FBQztZQUNGLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQTZCLENBQUMsV0FBVyxDQUMxRCxDQUFDO1FBRUYsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBNkIsQ0FBQyxXQUFXLENBQzFELENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkJBQTZCLENBQUMsS0FBMkI7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUU7WUFDakUsT0FBTztTQUNSO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDbEQsSUFBSSxDQUFDLGlDQUFpQyxDQUN2QyxDQUFDO1FBQ0Ysc0JBQXNCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUE2QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWdCLEVBQUUsY0FBb0I7UUFDbkQsSUFBSSxTQUFTLEdBQUcsY0FBYyxJQUFJLElBQUksS0FBSyxFQUFVLENBQUM7UUFFdEQsSUFDRSxPQUFPLGNBQWMsS0FBSyxRQUFRO1lBQ2xDLGNBQWMsWUFBWSxNQUFNLEVBQ2hDO1lBQ0EsU0FBUyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7UUFFRCxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUk7WUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUk7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxXQUFXO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDNUIsSUFBSSxHQUFHLENBQUM7WUFDTixHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtnQkFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQzlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FDekM7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZTtnQkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUN6QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQ3pDO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSSxjQUFjO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLGNBQW9CO1FBQzFELElBQUksU0FBUyxHQUFHLGNBQWMsSUFBSSxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRXRELElBQ0UsT0FBTyxjQUFjLEtBQUssUUFBUTtZQUNsQyxjQUFjLFlBQVksTUFBTSxFQUNoQztZQUNBLFNBQVMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSTtZQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSTtTQUN6RSxDQUFDO1FBRUYsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUV0QyxNQUFNLGlCQUFpQixHQUFHLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxPQUFPLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QscUJBQXFCLENBQUMsS0FBYztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxpQ0FBaUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNuRDthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQW9CO1FBQ25DLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQ3BELE1BQU07cUJBQ1A7b0JBRUQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7b0JBQ3JDLE1BQU07aUJBQ1A7Z0JBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7b0JBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUM5RDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQy9CO2lCQUNGO2dCQUNELE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtvQkFDNUMsTUFBTTtpQkFDUDtnQkFDRCxJQUNFLFFBQVEsQ0FBQyxhQUFhO29CQUN0QixJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFDeEQ7b0JBQ0EsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFO3dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDaEQ7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7cUJBQzlCO2lCQUNGO2dCQUNELE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHVCQUF1QixDQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUMzQyxDQUFDO2dCQUNGLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFvQjtRQUN0QyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDakIsS0FBSyxZQUFZO2dCQUNmLElBQUksUUFBUSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFO29CQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDM0M7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7b0JBQ2hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQzlDO2dCQUNELE1BQU07WUFDUixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssT0FBTztnQkFDVixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7d0JBQzNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3FCQUM5Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQzdEO2lCQUNGO3FCQUFNO29CQUNMLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDaEM7eUJBQU07d0JBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTs0QkFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7eUJBQ25EOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDN0I7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUU7b0JBQ3BFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2xEO2dCQUNELE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsSUFDRSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQ25FO29CQUNBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQy9DO2dCQUNELE1BQU07WUFDUixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssT0FBTztnQkFDVixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsVUFBVSxDQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3JEO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQzdEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBRW5ELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUM5RDs2QkFBTTs0QkFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQy9CO3FCQUNGO29CQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7d0JBQ3ZCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBRUQsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9ELE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxrQ0FBa0MsQ0FBQyxLQUFvQjtRQUNyRCxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDakIsS0FBSyxLQUFLO2dCQUNSLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO3FCQUM3RDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ25EO29CQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDeEI7Z0JBQ0QsTUFBTTtZQUVSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFzQjtRQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQixDQUFDLEtBQWlDO1FBQzNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN6QjtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxJQUFTLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLEVBQUU7b0JBQzVELElBQUksQ0FBQyxVQUFVLENBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBaUMsQ0FBQyxLQUFLLENBQ2pFLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsSUFBUyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixFQUFFO29CQUN2RCxJQUFJLENBQUMsVUFBVSxDQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTRCLENBQUMsS0FBSyxDQUM1RCxDQUFDO2lCQUNIO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFpQztRQUNuRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQzNDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFhO1FBQ3hCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUMzQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQ3hELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNqRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQzNELElBQ0UsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixjQUFjLENBQUMsSUFBSTtZQUNuQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDMUIsbUJBQW1CLENBQUMsSUFBSTtZQUN4QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMvQjtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxjQUFjO1FBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBYTtRQUM3QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRTtnQkFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzNDO1NBQ0Y7UUFFRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNyRTtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWE7UUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBYTtRQUMvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDekQsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsT0FBcUI7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQXFCO1FBQzVDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBcUI7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBb0I7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkU7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUM7Z0JBQ3JFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2FBQ25FO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDckQ7U0FDRjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFtQjtRQUN6QyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDN0MsSUFBSSxDQUFDLDBCQUEwQixDQUNoQyxDQUFDO1lBQ0YsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFtQjtRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7YUFDakM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDMUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQzNDLElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsQ0FBQztZQUNGLGVBQWUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDM0QsQ0FBQztJQUVELG1DQUFtQyxDQUFDLFNBQWU7UUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxZQUFZO1lBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUMxRSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBaUI7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sQ0FDTCxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDN0QsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FDeEMsSUFBSSxDQUFDLG9CQUNQLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYTtZQUNsQixJQUFJLENBQUMsdUJBQXVCO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztZQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQ25DO1lBQ0EsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWE7WUFDbEIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQzlCO1lBQ0EsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWE7WUFDbEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUNyRTtZQUNBLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDN0I7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEYsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxVQUFVLENBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBNEIsQ0FBQyxLQUFLLENBQzVELENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsZUFBZ0QsRUFDaEQsUUFBNkI7UUFFN0IsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBNEIsQ0FBQztRQUVyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ25FLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkI7U0FDRjtRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU5RCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN2RCxNQUFNLENBQUMsSUFBSSxDQUNULENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ2pFLENBQ0YsQ0FBQztRQUVGLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQzVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDdEUsQ0FDRixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVzthQUN6QyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQzthQUNyRCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWYsSUFDRSxJQUFJLENBQUMsb0JBQW9CO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDaEM7WUFDQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM1RDtRQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsV0FBVzthQUM5QyxZQUFZLENBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO2FBQy9ELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRTtZQUNwRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDcEUsQ0FBQzs4R0ExMERVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLGlnTUMvQy9CLG05WEE0TmM7OzJGRDdLRCxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCO29QQVMxQix1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUVOLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNILFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0UsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNJLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNKLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDTyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDSyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNNLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBQ0Qsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDRCxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFzRW5CLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csWUFBWTtzQkFBcEIsS0FBSztnQkFRRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBT0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQU9HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFPRyxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQVFGLFVBQVU7c0JBRGIsS0FBSztnQkFrQkcsYUFBYTtzQkFBckIsS0FBSztnQkFPRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBT0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFRRix1QkFBdUI7c0JBRDFCLEtBQUs7Z0JBb0JHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBT0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQU9HLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFPRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBT0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQVFHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFRRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBUUcsYUFBYTtzQkFBckIsS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQVNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBU0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQVNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFTRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBU0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQVNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFTRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBU0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQVNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRixlQUFlO3NCQURsQixLQUFLO2dCQXFCRyxRQUFRO3NCQUFoQixLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFtQkYsUUFBUTtzQkFEWCxLQUFLO2dCQW1CRixVQUFVO3NCQURiLEtBQUs7Z0JBa0JHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFPRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9JLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFPRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFPRSx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBT0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQU9HLEtBQUs7c0JBQWIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBUUcsZUFBZTtzQkFBdkIsS0FBSztnQkFRRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBUUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQXFCRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBb0JHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFPRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBT0ksMEJBQTBCO3NCQUFuQyxNQUFNO2dCQU9HLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQTRDUCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmlwVHlwZSB9IGZyb20gJy4vZW51bXMvdHJpcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTmFzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS9uYXMtY29tcG9uZW50LmJhc2UnO1xuaW1wb3J0IHsgQWJhbmRvbmVkQmFza2V0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvYWJhbmRvbmVkLWJhc2tldC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgQWJhbmRvbmVkQmFza2V0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYWJhbmRvbmVkLWJhc2tldC9hYmFuZG9uZWQtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGV2aWNlL2RldmljZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvc29ydC9zb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWlycG9ydE1vZGVsIH0gZnJvbSAnLi4vYWlycG9ydC1zZWxlY3QtbmV3L21vZGVscy9haXJwb3J0Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3NlbmdlcnNNb2RlbCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvbW9kZWxzL3Bhc3NlbmdlcnMubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2lkeURpc2NvdW50TW9kZWwgfSBmcm9tICcuLi9zdWJzaWR5LWRpc2NvdW50L21vZGVscy9zdWJzaWR5LWRpc2NvdW50Lm1vZGVsJztcbmltcG9ydCB7IFBhc3NlbmdlclNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3Bhc3Nlbmdlci1zZWxlY3QvcGFzc2VuZ2VyLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2lkeURpc2NvdW50Q29tcG9uZW50IH0gZnJvbSAnLi4vc3Vic2lkeS1kaXNjb3VudC9zdWJzaWR5LWRpc2NvdW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tYm9OZXdDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbWJvLW5ldy9kYXRlcGlja2VyLWNvbWJvLW5ldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWlycG9ydFNlbGVjdE5ld0NvbXBvbmVudCB9IGZyb20gJy4uL2FpcnBvcnQtc2VsZWN0LW5ldy9haXJwb3J0LXNlbGVjdC1uZXcuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBGaWx0ZXIgQ29tcG9uZW50IHwgTmV3IGRlc2lnbiB8IEJldGFcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWZpbHRlci1uZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLW5ldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1uZXcuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyTmV3Q29tcG9uZW50XG4gIGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdFxue1xuICBAVmlld0NoaWxkKCdwYXNzZW5nZXJTZWxlY3REcm9wZG93bicpXG4gIHBhc3NlbmdlclNlbGVjdERyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgncGFzc2VuZ2VyU2VsZWN0JykgcGFzc2VuZ2VyU2VsZWN0OiBQYXNzZW5nZXJTZWxlY3RDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyaXBTd2l0Y2gnKSB0cmlwU3dpdGNoOiBEcm9wZG93bkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndHJhbnNpdFN3aXRjaCcpIHRyYW5zaXRTd2l0Y2g6IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdhaXJwb3J0U2VsZWN0JykgYWlycG9ydFNlbGVjdDogQWlycG9ydFNlbGVjdE5ld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZGF0ZXBpY2tlckNvbWJvJykgZGF0ZXBpY2tlckNvbWJvOiBEYXRlcGlja2VyQ29tYm9OZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJpcFR5cGVPbmV3YXknKSB0cmlwVHlwZU9uZXdheTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJpcFR5cGVSb3VuZFRyaXAnKSB0cmlwVHlwZVJvdW5kVHJpcDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNpdFR5cGVEaXJlY3RPbmx5JykgdHJhbnNpdFR5cGVEaXJlY3RPbmx5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZVRyYW5zaXQnKSB0cmFuc2l0VHlwZVRyYW5zaXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N1YnNpZHlEaXNjb3VudCcpIHN1YnNpZHlEaXNjb3VudDogU3Vic2lkeURpc2NvdW50Q29tcG9uZW50O1xuXG4gIGxhdGVzdFNlYXJjaGVzT3JpZ2luOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBkaXNwbGF5U3VtbWFyeSA9IHRydWU7XG4gIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBpbmJvdW5kTG93ZXJMaW1pdERhdGU6IFV0Y0RhdGU7XG4gIGNvbnRhaW5lcldpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBtYXhpbWl6ZSA9IGZhbHNlO1xuICBpc05hc0dyb3VwVmFsaWQgPSBmYWxzZTtcbiAgaW5saW5lRmxleCA9IDA7XG4gIG9wZW5QYXNzZW5nZXJTZWxlY3QgPSBmYWxzZTtcbiAgb3BlblRyYW5zaXRUeXBlU2VsZWN0ID0gZmFsc2U7XG4gIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dGJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5ib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pbmJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmJvdW5kT3BlblRpbWVvdXQgYXMgbnVtYmVyKTtcblxuICAgIHRoaXMuaW5ib3VuZE9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRPcGVuVmFsdWUgPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuaW5ib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGluYm91bmRPcGVuVGltZW91dDogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHJlY29yZCBjb250YWluaW5nIGtleXMgd2l0aCBhbGwgYWlycG9ydCBjb2RlcyB3aXRoIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2YgYWlycG9ydCBjb2RlcyBjb25uZWN0ZWQgdG8gdGhlIGtleS5cbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRSZWxhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIG9uIHRoZSBjbGVhciBidXR0b24gaW5zaWRlIHRoZSBhaXJwb3J0IHNlbGVjdCBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBzdWJ0cmFjdCBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsU3VidHJhY3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgYWRkIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxBZGQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxpc3Qgb2YgYWlycG9ydHMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBvcmlnaW4gZHJvcGRvd24uXG4gICAqIElmIG5vdCBpbmNsdWRlZCwgYWxsIGFpcnBvcnRzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dlZE9yaWdpbkFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIGFpcnBvcnRzIHRoYXQgYXJlIHJlc3RyaWN0ZWQgZm9yIGRlc3RpbmF0aW9uIGFpcnBvcnRzLiBJdCB3aWxsIGRlZmF1bHQgdG8gYWlycG9ydHMgaWYgbm90IHNldC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgdGhlIHVzZXIgYWxscmVhZHkgaGFzIHNlYXJoIGZvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheUxhdGVzdFNlYXJjaGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc3BsYXkgc3dpdGNoIFVJIHRvIGludGVyY2hhbmdlIG9yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHVzZVN3aXRjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCBhcmUgY2xvc2UgdG8gdGhlIHVzZXIgc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlDbG9zZXN0QWlycG9ydHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgb3JpZ2luIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgb3JpZ2luQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0LiBJdCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgZGVzdGluYXRpb25BaXJwb3J0Q29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdG90YWwgbWF4aW11bSBhbW91bnQgb2YgcGFzc2VuZ2VycyBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1heFBheENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgZGlmZmVyZW50IHBhc3NlbmdlciB0eXBlcyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHBhc3NlbmdlcnMoKTogQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMucGFzc2VuZ2Vyc1ZhbHVlO1xuICB9XG4gIHNldCBwYXNzZW5nZXJzKHZhbHVlOiBBcnJheTxQYXNzZW5nZXJzTW9kZWw+KSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFzc2VuZ2Vyc1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wYXNzZW5nZXJzQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIGFkdWx0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1pbkFkdWx0Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciByb3VuZCB0cmlwIHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBvbmUgd2F5IHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoT25lV2F5TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBkaXJlY3Qgb25seSBzZWxlY3Rpb24gaW4gdGhlIHRyYW5zaXQgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0T25seUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgYm90aCBkaXJlY3QgYW5kIHRyYW5zaXQgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdFRyYW5zaXRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsdGVyIHNob3VsZCBiZSBtaW5pbWl6ZWQgb24gbW9iaWxlIHNjcmVlbiBzaXplcy5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXplT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZWRpdCBzZWFyY2ggb2YgYWNjb3JkaW9uIHNob3VsZCBiZSBleHBlbmRlZCBvbiBtb2JpbGUgc2NyZWVuIHNpemVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWU7XG4gIH1cbiAgc2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgc2VwYXJhdG9yIGZvciB0aGUgZmlsdGVyIHN1bW1hcnkgdGhhdCBpcyBkaXNwYXllZCBpZiBtaW5pbWl6ZU9uTW9iaWxlIGlzIHRydWUuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqIDEgdHJhdmVsbGVyLCByb3VuZCB0cmlwIGFuZCBkaXJlY3QvdHJhbnNpdFxuICAgKi9cbiAgQElucHV0KCkgZGVmYXVsdFN1bW1hcnlTZXBhcmF0b3IgPSAnJztcblxuICAvKipcbiAgICogQSBzZXBhcmF0b3IgZm9yIHRoZSBmaWx0ZXIgc3VtbWFyeSBpcyBhcmUgZGlzcGF5ZWQgaWYgbWluaW1pemVPbk1vYmlsZSBpcyB0cnVlLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKiAxIHRyYXZlbGxlciwgcm91bmQgdHJpcCBhbmQgZGlyZWN0L3RyYW5zaXRcbiAgICovXG4gIEBJbnB1dCgpIGxhc3RTdW1tYXJ5U2VwYXJhdG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0aXRsZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RUaXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSBhZHVsdHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RBZHVsdHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSB5b3V0aHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RZb3V0aHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSB5b3VuZyBhZHVsdHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RZb3VuZ0FkdWx0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGNoaWxkcmVuIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0Q2hpbGRyZW5MYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSBpbmZhbnRzIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdG90YWwgbnVtYmVyIG9mIHNlbGVjdGVkIHBhc3NlbmdlcnMgZXhjZWVkcyB0aGUgZ3JvdXAgYm9va2luZyBsaW1pdFxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIGFsbCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgYWxsQWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIGxhdGVzdCBzZWFyY2hlcyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgbGF0ZXN0U2VhcmNoZXNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNsb3Nlc3QgYWlycG9ydHMgaW4gdGhlIGFpcnBvcnQgc2VsZWN0IGRyb3AgZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGNsb3Nlc3RBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBpbiB0aGUgYWlycG9ydCBzZWxlY3QsIGlmIHRoZVxuICAgKiB1c2VyIHRyaWVzIHRvIHNlbGVjdCBhIGRlc3RpbmF0aW9uIGFpcnBvcnQgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3JpZ2luIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPcmlnaW5GaXJzdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIG9yaWdpbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxPcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIG9yaWdpbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJPcmlnaW4gPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gbXkgbG9jYXRpb24gaW4gdGhlIGRyb3AgZG93biBsaXN0IGluIGFpcnBvcnQgc2VsZWN0LlxuICAgKi9cbiAgQElucHV0KCkgZ2VvbG9jYXRpb25MYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiwgaW4gdGhlIGRyb3AgZG93biBsaXN0IGluIGFpcnBvcnQgc2VsZWN0IGlmIHVzZXIgaGFzIGRlbmllZCBnZW9sb2NhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGdlb2xvY2F0aW9uQmxvY2tlZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJEZXN0aW5hdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdGhhdCB3aWxsIGFsbG93IGFsd2F5cyBrZWVwaW5nIHRoZSBzZWxlY3RlZCBhaXJwb3J0LlxuICAgKiBUaGUgbGFzdCBzZWxlY3RlZCBhaXJwb3J0IHdpbGwgYmUgc2hvd24gb25jZSB1c2VyIGNsZWFycyB0aGUgc2VsZWN0aW9uIGFuZCBibHVyLlxuICAgKi9cbiAgQElucHV0KCkga2VlcFNlbGVjdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRpdGxlIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBlZGl0IHNlYXJjaCBhY2NvcmRpb24uXG4gICAqL1xuICBASW5wdXQoKSBlZGl0U2VhcmNoVGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVTdWJzaWR5RGlzY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNYWtlIGxhdGVzdCBzZWFyY2hlcyBhbmQgZ2VvbG9jYXRpb24gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgb3JpZ2luIGFpcnBvcnQgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKSBvdmVycmlkZU9yaWdpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG1ha2UgdGhlIGZpbHRlciBkaXNwbGF5IHN1Z2dlc3RlZCBhaXJwb3J0cyBiYXNlZCBvbiBnZW9sb2NhdGlvbiBhbmQgbGF0ZXN0IHNlYXJjaGVzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU3VnZ2VzdGlvbnM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbG9zZXN0QWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGNsb3Nlc3RBaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIGlmICghYWlycG9ydHMgfHwgYWlycG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnRzWzBdLmNvZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG9ubHkgZGlzcGxheSBhaXJwb3J0IHNlbGVjdGlvbi4gV2hlbiBhIGNpdHkgcGFpciBpcyBzZWxlY3RlZCwgdGhlIHJlc3Qgb2YgdGhlIGZpbHRlciB3aWxsIGJlIHZpc2libGUuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFsbCBhaXJwb3J0cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlIGRyb3Bkb3duIGxpc3RzLlxuICAgKiBJZiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gZ2V0IHRoZSBsYXRlc3Qgc2VhcmNoZXMgZnJvbSB0aGUgYWJhbmRvbmVkIGJhc2tldC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIHRoaXMuYWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSkge1xuICAgICAgY29uc3QgYWJhbmRvbmVkQmFza2V0ID0gdGhpcy5hYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLmdldEFsbCgpO1xuICAgICAgdGhpcy5zZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQsIHRoaXMuYWlycG9ydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgdGhlIHNlbGVjdGVkIHRyaXAgdHlwZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0cmlwVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZVZhbHVlO1xuICB9XG4gIHNldCB0cmlwVHlwZSh0cmlwVHlwZTogVHJpcFR5cGUpIHtcbiAgICBpZiAodHJpcFR5cGUgPT09IHRoaXMudHJpcFR5cGVWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpcFR5cGVWYWx1ZSA9IHRyaXBUeXBlO1xuICAgIHRoaXMudHJpcFR5cGVDaGFuZ2UuZW1pdCh0aGlzLnRyaXBUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kIGdldHMgd2hldGhlciB0aGUgc2VsZWN0ZWQgdHJhbnNpdCB0eXBlIGlzIGRpcmVjdCBvbmx5IG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXJlY3RPbmx5KCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHlWYWx1ZTtcbiAgfVxuICBzZXQgZGlyZWN0T25seShkaXJlY3RPbmx5OiBib29sZWFuKSB7XG4gICAgaWYgKGRpcmVjdE9ubHkgPT09IHRoaXMuZGlyZWN0T25seVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXJlY3RPbmx5VmFsdWUgPSBkaXJlY3RPbmx5O1xuICAgIHRoaXMuZGlyZWN0T25seUNoYW5nZS5lbWl0KHRoaXMuZGlyZWN0T25seSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbGltaXQgZm9yIHdoZW4gdGhlIHRvdGFsIGFtb3VudCBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdG8gYmUgYSBncm91cCBib29raW5nLlxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTdWJzaWR5IGRpc2NvdW50c1xuICAgKi9cbiAgQElucHV0KCkgc3Vic2lkeURpc2NvdW50czogQXJyYXk8U3Vic2lkeURpc2NvdW50TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNlbGVjdGVkIHN1YnNpZHkgZGlzY291bnRcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkU3Vic2lkeURpc2NvdW50OiBTdWJzaWR5RGlzY291bnRNb2RlbDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTdWJzaWR5IGRpc2NvdW50IGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsUHJldmlvdXNNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBuZXh0IG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxOZXh0TW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgb3JpZ2luIGRyb3Bkb3duIHNlbGVjdG9yIG9wZW5zIG9yIGNsb3Nlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93biBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcGFzc2VuZ2VyU2VsZWN0T3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIGRlc3RpbmF0aW9uIGFpcnBvcnQgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgYSBwYXNzZW5nZXIgc2VsZWN0aW9uIGNoYW5nZSBpcyBwZXJmb3JtZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcGFzc2VuZ2Vyc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8UGFzc2VuZ2Vyc01vZGVsPj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQE91dHB1dCgpIHRyaXBUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmlwVHlwZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQE91dHB1dCgpIGRpcmVjdE9ubHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG5vIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBvdXRib3VuZCBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBpbmJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VycyBpbiBhdmFpbGFiaWxpdHkgbW9kZSB3aGVyZSBhdmFpbGFibGUgZGF0ZXMgY2FuIGJlIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmlsaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3Igb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBdmFpbGFibGUgZGF0ZXMgZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElmIHNldCwgRW5hYmxlcyB0aGUgdGltZSBkcm9wZG93biBzZWxlY3RvciBhbG9uZ3NpZGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUUgZCwgTU1NJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdGltZSBkaXNwbGF5IGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVEaXNwbGF5Rm9ybWF0ID0gJ0hIOm1tJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxvY2FsZSBjb2RlIGZvciB0aGUgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuIFdoZW4gbm90IHN1cHBsaWVkLCB1c2VzIHRoZSB2YWx1ZSBvZiBMT0NBTEVfSUQsIHdoaWNoIGlzIGVuLVVTIGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhhdCByZWdpc3RlckxvY2FsZURhdGEgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3BlY3RpdmUgbG9jYWxlLlxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlID0gJ2VuLUdCJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRvIHJlbW92ZSB0aGUgcGFkZGluZyBhbmQgbWFyZ2lucyBhcm91bmQgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjb21wYWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IG91dGJvdW5kIGRhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBpbmJvdW5kIGRhdGVzLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNob3cvQWRkIGRhdGUgcGlja2VyIGNvbWJvIGludG8gdGhlIGZpbHRlciBpZiBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZURhdGVwaWNrZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSBpY29uIGZvciBtaW5pbWl6aW5nIGZpbHRlci5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXppbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSBpY29uIGZvciBtYXhpbWl6aW5nIGZpbHRlci5cbiAgICovXG4gIEBJbnB1dCgpIG1heGltaXppbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsaW5nIHRyYW5zaXQgdHlwZSB3aGVuIGZpbHRlciBpcyBtaW5pbWl6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RPbmx5TW9iaWxlTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgJ29yJyBpbiB0aGUgc3VnZ2VzdGlvbmVkIGFpcnBvcnRzLlxuICAgKi9cbiAgQElucHV0KCkgb3JMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnVHJhdmVsZXJzJyBpbiB0aGUgcGFzc2VuZ2VycyBzZWxlY3QgYnV0dG9uLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2Vyc1RpdGxlTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBkZXN0aW5hdGlvbnMgZHJvcGRvd24gbGlzdCB3aGVuIG9yaWdpbiBhaXJwb3J0IGlzIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkRGVzdGluYXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGluYm91bmRTZWxlY3RlZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSBkZXN0aW5hdGlvbiBpbnB1dCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgcGFzc2VuZ2VyIHNlbGVjdCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVBhc3NlbmdlcnNTZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSB0aGUgdHJpcCBzd2l0Y2gsIHNldCB0aGlzIHRvIGZhbHNlIHRvIHJlbW92ZSBpdC4gSXQncyB0cnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVUcmlwU3dpdGNoID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIHRyYW5zaXQgc3dpdGNoLCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlVHJhbnNpdFN3aXRjaCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgYW5kIGluYm91bmQgZGF0ZXMgd2lsbCBicmVhayBob3Jpem9udGFsbHkuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlUGlja2VyQ29tYm9JbmxpbmVGbGV4ID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGNhbGVuZGFyIGNoYW5nZXMgbW9udGguXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgYWN0aXZlbHkgY2hhbmdlZCB0aGUgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGdlb2xvY2F0aW9uIG9mIHRoZSB1c2VyLiBXaWxsIGJlIGVtaXR0ZWQgaWYgJ2VuYWJsZVN1Z2dlc3Rpb25zJyBpcyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVuIHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgaW5mbyBidXR0b24gb24gdGhlIHN1YnNpZHkgZGlzY291bnQgaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzdWJzaWR5RGlzY291bnRJbmZvQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgobW9udGgsIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSB0cmlwVHlwZVZhbHVlOiBUcmlwVHlwZTtcbiAgcHJpdmF0ZSBkaXJlY3RPbmx5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjbG9zZXN0QWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSBvdXRib3VuZE9wZW5WYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIGluYm91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYXNzZW5nZXJzVmFsdWUgPSBuZXcgQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPigpO1xuICBwcml2YXRlIGZvY3VzQXN5bmNUaW1vdXQ6IGFueTtcbiAgcHJpdmF0ZSB0cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBTb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGFiYW5kb25lZEJhc2tldFNlcnZpY2U6IEFiYW5kb25lZEJhc2tldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZUhlbHBlcixcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcignbmFzLWZpbHRlci1uZXcnKTtcbiAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXCIkZXZlbnRcIl0pXG4gIG9uUmVzaXplKCkge1xuICAgIHRoaXMuc2V0RmlsdGVyRnVsbFdpZHRoKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uYXNGb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTmFzR3JvdXBWYWxpZCA9IC90cnVlL2kudGVzdCh4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgY29uc3QgZGlyZWN0T25seUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seVxuICAgICAgKTtcblxuICAgICAgaWYgKGRpcmVjdE9ubHlDb250cm9sKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHlDb250cm9sLnZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGVcbiAgICAgICk7XG5cbiAgICAgIGlmICh0cmlwVHlwZUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy50cmlwVHlwZSA9IHRyaXBUeXBlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbmJvdW5kRGlzYWJsZWQgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWUgPT09IFRyaXBUeXBlLm9uZVdheTtcblxuICAgICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kKSB7XG4gICAgICAgICAgY29uc3QgaW5ib3VuZENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGluYm91bmRDb250cm9sICYmIHRoaXMuaW5ib3VuZERpc2FibGVkKSB7XG4gICAgICAgICAgICBpbmJvdW5kQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJpcFR5cGVDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBUcmlwVHlwZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdmFsdWUgPT09IFRyaXBUeXBlLm9uZVdheTtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHlcbiAgICAgICk7XG4gICAgICBpZiAoZGlyZWN0T25seUNvbnRyb2wpIHtcbiAgICAgICAgZGlyZWN0T25seUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmlsdGVyRnVsbFdpZHRoKCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KFxuICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgKTtcblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dChcbiAgICAgICAgKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBvblN1YnNpZHlEaXNjb3VudEluZm9DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNpZHlEaXNjb3VudEluZm9DbGljay5lbWl0KCk7XG4gIH1cblxuICBvblN1YnNpZHlEaXNjb3VudFNlbGVjdENoYW5nZShtb2RlbDogU3Vic2lkeURpc2NvdW50TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNpZHlEaXNjb3VudENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudFxuICAgICk7XG4gICAgc3Vic2lkeURpc2NvdW50Q29udHJvbC5wYXRjaFZhbHVlKG1vZGVsKTtcbiAgfVxuXG4gIGdldENsb3Nlc3RBaXJwb3J0cyhwb3NpdGlvbjogR2VvbG9jYXRpb25Qb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChwb3NpdGlvbik7XG4gIH1cblxuICBnZXRGaWx0ZXJDbGFzcyhlbGVtZW50Pzogc3RyaW5nLCBtb2RpZmllcnNJbnB1dD86IGFueSk6IENsYXNzTW9kZWwge1xuICAgIGxldCBtb2RpZmllcnMgPSBtb2RpZmllcnNJbnB1dCB8fCBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG1vZGlmaWVyc0lucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgbW9kaWZpZXJzSW5wdXQgaW5zdGFuY2VvZiBTdHJpbmdcbiAgICApIHtcbiAgICAgIG1vZGlmaWVycyA9IFttb2RpZmllcnNJbnB1dF07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhzID0gW107XG5cbiAgICBpZiAodGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpKSB7XG4gICAgICB3aWR0aHMucHVzaCgnbWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ2xnJyk7XG4gICAgfVxuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIHJldHVybiB0aGlzLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBnZXRBaXJwb3J0U2VsZWN0Q2xhc3MoKTogQ2xhc3NNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2FpcnBvcnQtc2VsZWN0LW5ldycsIFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsXG4gICAgXSk7XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucygpOiBBcnJheTxBaXJwb3J0TW9kZWw+IHtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uKHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5cbiAgICAgICAgICA/IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4uZmlsdGVyKFxuICAgICAgICAgICAgICAoeCkgPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLih0aGlzLmNsb3Nlc3RBaXJwb3J0c1xuICAgICAgICAgID8gdGhpcy5jbG9zZXN0QWlycG9ydHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoeCkgPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXSksXG4gICAgICBdKVxuICAgICk7XG5cbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBnZXREYXRlUGlja2Vyc0NsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlckNsYXNzKCdkYXRlLWNvbWJvLW5ldycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnLFxuICAgIF0pO1xuICB9XG5cbiAgZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1xuICAgICkge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICBdO1xuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIGNvbnN0IHRyYXZlbERldGFpbHNCYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ3RyYXZlbC1kZXRhaWxzJyk7XG4gICAgcmV0dXJuIHRyYXZlbERldGFpbHNCYXNlLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBvbkluYm91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJhbnNpdFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgfVxuICB9XG5cbiAgcGFzc2VuZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSB8fCB0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnN1YnNpZHlEaXNjb3VudHMgJiYgdGhpcy5zdWJzaWR5RGlzY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgdGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PVxuICAgICAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblBhc3NlbmdlclNlbGVjdE9wZW4oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChcbiAgICAgICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25UcmlwU3dpdGNoS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJpcFR5cGVPbmV3YXkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJpcFR5cGVPbmV3YXkubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpIHx8ICF0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByZXZpb3VzQ29udHJvbCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3BlbigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gub3Blbikge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKDxhbnk+dGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3BlbigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3BlbighdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzaWR5RGlzY291bnRzICYmIHRoaXMuc3Vic2lkeURpc2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25OZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNBc3luYyhyZWZFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNBc3luY1RpbW91dCk7XG5cbiAgICB0aGlzLmZvY3VzQXN5bmNUaW1vdXQgPSBzZXRUaW1lb3V0KCgpID0+XG4gICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHJlZkVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIG9uRGF0ZXBpY2tlckZvY3VzT25QcmV2aW91cyhldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5mb2N1c09uQWlycG9ydFNlbGVjdEJhY2t3YXJkcygpO1xuICB9XG5cbiAgc2VsZWN0UHJldmlvdXNDb250cm9sKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT25seSkge1xuICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluYm91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuYWlycG9ydFNlbGVjdC5jb21ibykpIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uRGVzdGluYXRpb25PcGVuKHRydWUpO1xuICAgICAgICBpZiAoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoXG4gICAgICAgICAgICAoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgICAgaWYgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikge1xuICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyhcbiAgICAgICAgICAgICg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pLmlucHV0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXNPbk5leHRDaGFuZ2UoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgJiYgdGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1RhYmxldERpc3BsYXkoKSkge1xuICAgICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vblBhc3NlbmdlclNlbGVjdE9wZW4oKTtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KFxuICAgICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoTW9iaWxlKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBpc1RhYmxldERpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIG9uT3JpZ2luT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmIChcbiAgICAgIG9yaWdpblNuYXBzaG90ICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90ICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlICYmXG4gICAgICBvcmlnaW5TbmFwc2hvdC5jb2RlLmxlbmd0aCAmJlxuICAgICAgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlICYmXG4gICAgICBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlTWF4aW1pemUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1heGltaXplID0gdGhpcy52YWxpZGF0ZUFpcnBvcnRWYWx1ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25PcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0ICYmICF0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heGltaXplKCk7XG4gICAgfVxuICAgIHRoaXMuZGVzdGluYXRpb25PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gIH1cblxuICBvblBhc3NlbmdlclNlbGVjdE9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuUGFzc2VuZ2VyU2VsZWN0ID0gIXRoaXMub3BlblBhc3NlbmdlclNlbGVjdDtcbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UuZW1pdCh0aGlzLm9wZW5QYXNzZW5nZXJTZWxlY3QpO1xuXG4gICAgaWYgKHRoaXMub3BlblBhc3NlbmdlclNlbGVjdCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdD8ubnVtYmVyRmllbGRzLmZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0LmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBvcGVuO1xuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaEZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaXBUeXBlUm91bmRUcmlwLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0U3dpdGNoT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3QgPSAhdGhpcy5vcGVuVHJhbnNpdFR5cGVTZWxlY3Q7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dCk7XG5cbiAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy50cmlwU3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8uaW5ib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gb3BlbjtcbiAgICB9XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNpdFR5cGVUcmFuc2l0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgb25PcmlnaW5DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5vcmlnaW5DaGFuZ2UuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkT3JpZ2luQWlycG9ydChhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIWFpcnBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uT3JpZ2luQ2hhbmdlKGFpcnBvcnQpO1xuXG4gICAgaWYgKHRoaXMub3JpZ2luQWlycG9ydENvZGUgPT09IGFpcnBvcnQuY29kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkRlc3RpbmF0aW9uQ2hhbmdlKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdGluYXRpb25DaGFuZ2UuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuZGF0ZXBpY2tlckNvbWJvLmRhdGVwaWNrZXJPdXRib3VuZCkuaW5wdXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1RhYmxldERpc3BsYXkoKSAmJiB0aGlzLmRhdGVwaWNrZXJDb21ibykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bikge1xuICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3BlbigpO1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudFJlZiA9IHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KGN1cnJlbnRFbGVtZW50UmVmKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRGb2N1c09uTmF0aXZlRWxlbWVudChlbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvblRyaXBUeXBlQ2hhbmdlKHRyaXBUeXBlOiBUcmlwVHlwZSk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cmlwVHlwZSA9IHRyaXBUeXBlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpIHtcbiAgICAgIGNvbnN0IHRyaXBTd2l0Y2hDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KFxuICAgICAgICB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlXG4gICAgICApO1xuICAgICAgdHJpcFN3aXRjaENvbnRyb2wucGF0Y2hWYWx1ZSh0cmlwVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2l0Q2hhbmdlKGRpcmVjdE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQoXG4gICAgICAgIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seVxuICAgICAgKTtcbiAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKGRpcmVjdE9ubHkpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5UcmFuc2l0VHlwZVNlbGVjdCA9ICF0aGlzLm9wZW5UcmFuc2l0VHlwZVNlbGVjdDtcbiAgfVxuXG4gIGdldFRyYXZlbERldGFpbHNUcmlwU3dpdGNoSWNvbkNsYXNzKG1vZGlmaWVycz86IGFueSk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICBjb25zdCBpY29uTWVkaXVtQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCdpY29uLW1lZGl1bScpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGljb25NZWRpdW1CYXNlLmdldENsYXNzKCcnLCBtb2RpZmllcnMpLFxuICAgICAgdGhpcy5nZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2ljb24nKSxcbiAgICBdO1xuICB9XG5cbiAgZ2V0VHJpcFN3aXRjaExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJpcFR5cGUgPT09IFRyaXBUeXBlLnR3b1dheVJldHVyblxuICAgICAgPyB0aGlzLnRyaXBTd2l0Y2hSb3VuZFRyaXBMYWJlbFxuICAgICAgOiB0aGlzLnRyaXBTd2l0Y2hPbmVXYXlMYWJlbDtcbiAgfVxuXG4gIGdldFRyYW5zaXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHkgPyB0aGlzLmRpcmVjdE9ubHlMYWJlbCA6IHRoaXMuZGlyZWN0VHJhbnNpdExhYmVsO1xuICB9XG5cbiAgb25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIWV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBgJHt0aGlzLnBhc3NlbmdlclNlbGVjdExhYmVsfSR7dGhpcy5kZWZhdWx0U3VtbWFyeVNlcGFyYXRvcn1gICtcbiAgICAgIGAke3RoaXMuZ2V0VHJpcFN3aXRjaExhYmVsKCkudG9Mb3dlckNhc2UoKX0ke1xuICAgICAgICB0aGlzLmxhc3RTdW1tYXJ5U2VwYXJhdG9yXG4gICAgICB9JHt0aGlzLmdldFRyYW5zaXRMYWJlbCgpLnRvTG93ZXJDYXNlKCl9YFxuICAgICk7XG4gIH1cblxuICBzaG91bGRNYXhpbWl6ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0ICYmXG4gICAgICB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGUgJiZcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbiAmJlxuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICF0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luICYmXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QgJiZcbiAgICAgICh0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luT3BlbiB8fCB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4aW1pemU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmV4aXN0cyh0aGlzLm1pbmltaXplKSkge1xuICAgICAgaWYgKHRoaXMubWF4aW1pemUpIHtcbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNOYXNHcm91cFZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkFpcnBvcnRTZWxlY3RCYWNrd2FyZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuYWlycG9ydFNlbGVjdC5jb21ibykpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vbkRlc3RpbmF0aW9uT3Blbih0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24uaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYyhcbiAgICAgICAgKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikuaW5wdXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXRlc3RTZWFyY2hlcyhcbiAgICBhYmFuZG9uZWRCYXNrZXQ6IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4sXG4gICAgYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD5cbiAgKTogdm9pZCB7XG4gICAgaWYgKCFhYmFuZG9uZWRCYXNrZXQgfHwgIWFpcnBvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcXVlID0gbmV3IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhYmFuZG9uZWRCYXNrZXQpIHtcbiAgICAgIGlmICghdW5pcXVlLnNvbWUoKHgpID0+IHguZGVzdGluYXRpb25Db2RlID09PSBpdGVtLmRlc3RpbmF0aW9uQ29kZSkpIHtcbiAgICAgICAgdW5pcXVlLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luQ29kZXMgPSB1bmlxdWUubWFwKCh4KSA9PiB4Lm9yaWdpbkNvZGUpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQ29kZXMgPSB1bmlxdWUubWFwKCh4KSA9PiB4LmRlc3RpbmF0aW9uQ29kZSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc09yaWdpbiA9IGFpcnBvcnRzLmZpbHRlcigoYWlycG9ydCkgPT5cbiAgICAgIHVuaXF1ZS5zb21lKFxuICAgICAgICAoeCkgPT4geC5vcmlnaW5Db2RlLnRvTG93ZXJDYXNlKCkgPT09IGFpcnBvcnQuY29kZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSBhaXJwb3J0cy5maWx0ZXIoKGFpcnBvcnQpID0+XG4gICAgICB1bmlxdWUuc29tZShcbiAgICAgICAgKHgpID0+IHguZGVzdGluYXRpb25Db2RlLnRvTG93ZXJDYXNlKCkgPT09IGFpcnBvcnQuY29kZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGNvZGUgPSAnY29kZSc7XG4gICAgdGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbiA9IHRoaXMuc29ydFNlcnZpY2VcbiAgICAgIC5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNPcmlnaW4sIG9yaWdpbkNvZGVzLCBjb2RlKVxuICAgICAgLnNsaWNlKDAsIDMpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbiAmJlxuICAgICAgdGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbi5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKVxuICAgICkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5bMF0uY29kZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlXG4gICAgICAuc29ydEJ5T2JqZWN0KGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24sIGRlc3RpbmF0aW9uQ29kZXMsIGNvZGUpXG4gICAgICAuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRHJvcGRvd25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWx0ZXJGdWxsV2lkdGgoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuY29udGFpbmVyICYmICF0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZnVsbFdpZHRoID0gdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID4gNzg4O1xuICB9XG59XG4iLCI8bmFzLWFjY29yZGlvbiAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSk7IGVsc2UgZmlsdGVyVGVtcGxhdGVcIlxuICBzaW1wbGVcbiAgY29udGFpbmVyT25Ub2dnbGVcbiAgdHJhbnNwYXJlbnRcbiAgW2V4cGFuZGVkXT1cImV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlXCJcbiAgW3RpdGxlXT1cImVkaXRTZWFyY2hUaXRsZVwiXG4gICh0b2dnbGVDaGFuZ2UpPVwib25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmFzLWFjY29yZGlvbj5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIlxuICAqbmdJZj1cImRldmljZUhlbHBlcj8uaXNNb2JpbGUoKSAmJiBleGlzdHMobWluaW1pemVPbk1vYmlsZSkgJiYgZGlzcGxheVN1bW1hcnlcIj57e2dldFN1bW1hcnkoKX19PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyVGVtcGxhdGU+XG4gIDxkaXYgI2NvbnRhaW5lclxuICAgIFtuYXNDbGFzc109XCJnZXRDb250YWluZXJDbGFzcygpXCI+XG4gICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0RmlsdGVyQ2xhc3MoJ2ZpbHRlcnMnLCBbZXhpc3RzKG1pbmltaXplKSAmJiAnbWluaW1pemVkJywgbWF4aW1pemUgJiYgJ21heGltaXplJ10pXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWlycG9ydHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdC1uZXcgKm5nSWY9XCJhaXJwb3J0cyAmJiBhaXJwb3J0UmVsYXRpb25zICYmIChlbmFibGVEZXN0aW5hdGlvblNlbGVjdClcIlxuICAgICAgICAgICNhaXJwb3J0U2VsZWN0XG4gICAgICAgICAgY29tYm9cbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiXG4gICAgICAgICAgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCIgXG4gICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvbl09XCJuYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW3VzZVN3aXRjaF09XCJ1c2VTd2l0Y2hcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRBaXJwb3J0U2VsZWN0Q2xhc3MoKVwiXG4gICAgICAgICAgW2FpcnBvcnRzXT1cImFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNdPVwiYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHNcIlxuICAgICAgICAgIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzRGVzdGluYXRpb25dPVwibGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2Rlc3RpbmF0aW9uQWlycG9ydENvZGVdPVwiZGVzdGluYXRpb25BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzTGFiZWxdPVwibGF0ZXN0U2VhcmNoZXNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c0xhYmVsXT1cImNsb3Nlc3RBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiXG4gICAgICAgICAgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIlxuICAgICAgICAgIFtsYWJlbERlc3RpbmF0aW9uXT1cImxhYmVsRGVzdGluYXRpb25cIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkxhYmVsXT1cImdlb2xvY2F0aW9uTGFiZWxcIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyRGVzdGluYXRpb25dPVwicGxhY2Vob2xkZXJEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgW2ludmFsaWREZXN0aW5hdGlvblRleHRdPVwiaW52YWxpZERlc3RpbmF0aW9uVGV4dFwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRlc3RpbmF0aW9uQ2hhbmdlKT1cIm9uRGVzdGluYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzT25OZXh0KT1cInNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIlxuICAgICAgICAgIChkZXN0aW5hdGlvbk9wZW5DaGFuZ2UpPVwib25EZXN0aW5hdGlvbk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3QtbmV3PlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0LW5ldyAqbmdJZj1cImFpcnBvcnRzICYmICghZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2xvd2VyLXotaW5kZXgnOiBvcGVuUGFzc2VuZ2VyU2VsZWN0IHx8IGluYm91bmRPcGVuIHx8IG91dGJvdW5kT3BlbiB9XCJcbiAgICAgICAgICBbYXJpYUxhYmVsQ2xlYXJdPVwiYXJpYUxhYmVsQ2xlYXJcIlxuICAgICAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5dPVwibmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXCJcbiAgICAgICAgICBbdXNlU3dpdGNoXT1cInVzZVN3aXRjaFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdhaXJwb3J0LW9yaWdpbi1zZWxlY3QnKVwiXG4gICAgICAgICAgW2FpcnBvcnRzXT1cImFpcnBvcnRzXCJcbiAgICAgICAgICBbYWxsb3dlZE9yaWdpbkFpcG9ydHNdPVwiYWxsb3dlZE9yaWdpbkFpcnBvcnRzXCJcbiAgICAgICAgICBbYWlycG9ydFJlbGF0aW9uc109XCJhaXJwb3J0UmVsYXRpb25zXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNPcmlnaW5dPVwibGF0ZXN0U2VhcmNoZXNPcmlnaW5cIlxuICAgICAgICAgIFtkaXNwbGF5TGF0ZXN0U2VhcmNoZXNdPVwiZGlzcGxheUxhdGVzdFNlYXJjaGVzXCJcbiAgICAgICAgICBbZGlzcGxheUNsb3Nlc3RBaXJwb3J0c109XCJkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbb3JpZ2luQWlycG9ydENvZGVdPVwib3JpZ2luQWlycG9ydENvZGVcIlxuICAgICAgICAgIFthbGxBaXJwb3J0c0xhYmVsXT1cImFsbEFpcnBvcnRzTGFiZWxcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc0xhYmVsXT1cImxhdGVzdFNlYXJjaGVzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNMYWJlbF09XCJjbG9zZXN0QWlycG9ydHNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c109XCJjbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtzZWxlY3RPcmlnaW5GaXJzdExhYmVsXT1cInNlbGVjdE9yaWdpbkZpcnN0TGFiZWxcIlxuICAgICAgICAgIFtsYWJlbE9yaWdpbl09XCJsYWJlbE9yaWdpblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyT3JpZ2luXT1cInBsYWNlaG9sZGVyT3JpZ2luXCJcbiAgICAgICAgICBbZ2VvbG9jYXRpb25MYWJlbF09XCJnZW9sb2NhdGlvbkxhYmVsXCJcbiAgICAgICAgICBbZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxdPVwiZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWxcIlxuICAgICAgICAgIFtrZWVwU2VsZWN0aW9uXT1cImtlZXBTZWxlY3Rpb25cIlxuICAgICAgICAgIChvcmlnaW5DaGFuZ2UpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIlxuICAgICAgICAgIChmb2N1c09uTmV4dCk9XCJzZXRGb2N1c09uUGFzc2VuZ2VyU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgIChvcmlnaW5PcGVuQ2hhbmdlKT1cIm9uT3JpZ2luT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdC1uZXc+XG4gICAgICAgIDxuYXMtc3VnZ2VzdGlvbnMgKm5nSWY9XCIoY2xvc2VzdEFpcnBvcnRzIHx8IGxhdGVzdFNlYXJjaGVzT3JpZ2luKSAmJiBleGlzdHMoZW5hYmxlU3VnZ2VzdGlvbnMpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb3dlci16LWluZGV4Jzogb3BlblBhc3NlbmdlclNlbGVjdCB8fCBpbmJvdW5kT3BlbiB8fCBvdXRib3VuZE9wZW4gfVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycpXCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZ2V0U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgW29yTGFiZWxdPVwib3JMYWJlbFwiXG4gICAgICAgICAgKGFpcnBvcnRTZWxlY3QpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIj48L25hcy1zdWdnZXN0aW9ucz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZE1heGltaXplKClcIj5cbiAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiIWVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ID8gZ2V0Q2xhc3MoJ29yaWdpbi1jb21iaW5lZCcpIDpcbiAgICAgICAgICBnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJycsIFsnY29tYmluZWQnLCBleGlzdHMoZW5hYmxlRGF0ZXBpY2tlcnMpICYmICduby1ib3JkZXInLCBleGlzdHMobWluaW1pemUpICYmICdtaW5pbWl6ZWQnLCBmdWxsV2lkdGggJiYgJ2Z1bGwtd2lkdGgnXSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlUGFzc2VuZ2Vyc1NlbGVjdFwiPlxuICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMnKVwiPlxuICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25QYXNzZW5nZXJTZWxlY3RPcGVuKCRldmVudClcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMtYnV0dG9uJywgb3BlblBhc3NlbmdlclNlbGVjdCAmJiAnYWN0aXZlJylcIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xhYmVsJylcIj5cbiAgICAgICAgICAgICAgICA8cCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2J1dHRvbi10aXRsZScpXCI+e3twYXNzZW5nZXJzVGl0bGVMYWJlbH19PC9wPlxuICAgICAgICAgICAgICAgIDxwPnt7cGFzc2VuZ2VyU2VsZWN0TGFiZWx9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCd0cmF2ZWxlci1pY29uJylcIj48bmFzLWljb24gW2ljb25dPVwiJ215LXByb2ZpbGUtY29tcGFjdCdcIiBbdHlwZV09XCInc21hbGwnXCI+PC9uYXMtaWNvbj48L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wZW5QYXNzZW5nZXJTZWxlY3RcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Bhc3NlbmdlcnMtc2VsZWN0aW9uJylcIj5cbiAgICAgICAgICAgICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICBbKHNob3dCYWNrZHJvcCldPVwib3BlblBhc3NlbmdlclNlbGVjdFwiPjwvbmFzLWJhY2tkcm9wPlxuICAgICAgICAgICAgICA8bmFzLXBhc3Nlbmdlci1zZWxlY3QtbmV3XG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbEFkZF09XCJhcmlhTGFiZWxBZGRcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxTdWJ0cmFjdF09XCJhcmlhTGFiZWxTdWJ0cmFjdFwiXG4gICAgICAgICAgICAgICAgW2FkdWx0c0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdEFkdWx0c0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbeW91dGhzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0WW91dGhzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFt5b3VuZ0FkdWx0c0xhYmVsXT1cInBhc3NlbmdlclNlbGVjdFlvdW5nQWR1bHRzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbkxhYmVsXT1cInBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpbmZhbnRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWF4UGF4Q291bnRdPVwibWF4UGF4Q291bnRcIlxuICAgICAgICAgICAgICAgIFttaW5BZHVsdENvdW50XT1cIm1pbkFkdWx0Q291bnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwYXNzZW5nZXJTZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ109XCJuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ1wiXG4gICAgICAgICAgICAgICAgW2dyb3VwQm9va2luZ0xhYmVsXT1cImdyb3VwQm9va2luZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBCb29raW5nTGltaXRdPVwiZ3JvdXBCb29raW5nTGltaXRcIlxuICAgICAgICAgICAgICAgIChmb2N1c09uTmV4dCk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzKT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpXCJcbiAgICAgICAgICAgICAgICBbKHBhc3NlbmdlcnMpXT1cInBhc3NlbmdlcnNcIj48L25hcy1wYXNzZW5nZXItc2VsZWN0LW5ldz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlVHJpcFN3aXRjaFwiPlxuICAgICAgICAgICAgPGZvcm0gW25hc0NsYXNzXT1cImdldENsYXNzKCdyYWRpbycpXCI+XG4gICAgICAgICAgICAgIDxuYXMtcmFkaW8tbmV3ICN0cmlwVHlwZVJvdW5kVHJpcCBbbmFtZV09XCIndHJpcFR5cGUnXCIgW3ZhbHVlXT1cIjJcIiBbY2hlY2tlZF09XCJ0cnVlXCIgKGNoZWNrZWRDaGFuZ2UpPVwib25UcmlwVHlwZUNoYW5nZSgyKVwiPlxuICAgICAgICAgICAgICAgIHt7dHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsfX1cbiAgICAgICAgICAgICAgPC9uYXMtcmFkaW8tbmV3PlxuICAgICAgICAgICAgICA8bmFzLXJhZGlvLW5ldyAjdHJpcFR5cGVPbmV3YXkgW25hbWVdPVwiJ3RyaXBUeXBlJ1wiIFt2YWx1ZV09XCIxXCIgKGNoZWNrZWRDaGFuZ2UpPVwib25UcmlwVHlwZUNoYW5nZSgxKVwiPlxuICAgICAgICAgICAgICAgIHt7dHJpcFN3aXRjaE9uZVdheUxhYmVsfX1cbiAgICAgICAgICAgICAgPC9uYXMtcmFkaW8tbmV3PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJleGlzdHMoZW5hYmxlRGF0ZXBpY2tlcnMpXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0RGF0ZVBpY2tlcnNDbGFzcygpXCI+XG4gICAgICAgICAgPG5hcy1kYXRlcGlja2VyLWNvbWJvLW5ldyAjZGF0ZXBpY2tlckNvbWJvXG4gICAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgICBbaW5saW5lRmxleF09XCJpbmxpbmVGbGV4XCJcbiAgICAgICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZF09XCJuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZFwiXG4gICAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZF09XCJuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXCJcbiAgICAgICAgICAgIFthdmFpbGFiaWxpdHldPVwiYXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtkYXRlRGlzcGxheUZvcm1hdF09XCJkYXRlRGlzcGxheUZvcm1hdFwiXG4gICAgICAgICAgICBbZGlzYWJsZVBhc3RTZWxlY3Rpb25dPVwiZGlzYWJsZVBhc3RTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtpbmJvdW5kQXZhaWxhYmxlRGF0ZXNdPVwiaW5ib3VuZEF2YWlsYWJsZURhdGVzXCJcbiAgICAgICAgICAgIFtpbmJvdW5kTGFiZWxdPVwiaW5ib3VuZExhYmVsXCJcbiAgICAgICAgICAgIFtub0F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgICAgICBbb3V0Ym91bmRBdmFpbGFibGVEYXRlc109XCJvdXRib3VuZEF2YWlsYWJsZURhdGVzXCJcbiAgICAgICAgICAgIFtvdXRib3VuZExhYmVsXT1cIm91dGJvdW5kTGFiZWxcIlxuICAgICAgICAgICAgW3RpbWVEaXNwbGF5Rm9ybWF0XT1cInRpbWVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFt0aW1lc109XCJ0aW1lc1wiXG4gICAgICAgICAgICBbb3V0Ym91bmREaXNhYmxlZF09XCJvdXRib3VuZERpc2FibGVkXCJcbiAgICAgICAgICAgIFtpbmJvdW5kRGlzYWJsZWRdPVwiaW5ib3VuZERpc2FibGVkXCJcbiAgICAgICAgICAgIFtvdXRib3VuZE9ubHldPVwidHJpcFR5cGUgPT09IDFcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxQcmV2aW91c01vbnRoXT1cImFyaWFMYWJlbFByZXZpb3VzTW9udGhcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbE5leHRNb250aF09XCJhcmlhTGFiZWxOZXh0TW9udGhcIlxuICAgICAgICAgICAgKGZvY3VzT25OZXh0Q2hhbmdlKT1cIm9uRm9jdXNPbk5leHRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzQ2hhbmdlKT1cIm9uRGF0ZXBpY2tlckZvY3VzT25QcmV2aW91cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbmJvdW5kTW9udGhDaGFuZ2UpPVwib25JbmJvdW5kTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob3V0Ym91bmRNb250aENoYW5nZSk9XCJvbk91dGJvdW5kTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKG91dGJvdW5kT3BlbildPVwib3V0Ym91bmRPcGVuXCJcbiAgICAgICAgICAgIFsoaW5ib3VuZE9wZW4pXT1cImluYm91bmRPcGVuXCJcbiAgICAgICAgICAgIFsoaW5ib3VuZFNlbGVjdGVkRGF0ZSldPVwiaW5ib3VuZFNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICBbKG91dGJvdW5kU2VsZWN0ZWREYXRlKV09XCJvdXRib3VuZFNlbGVjdGVkRGF0ZVwiPlxuICAgICAgICAgIDwvbmFzLWRhdGVwaWNrZXItY29tYm8tbmV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVRyYW5zaXRTd2l0Y2hcIj5cbiAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygndHJhbnNpdC10eXBlJylcIj5cbiAgICAgICAgICAgIDxuYXMtYnV0dG9uLW5ldyAqbmdJZj1cImRpcmVjdE9ubHlMYWJlbCAmJiBkaXJlY3RUcmFuc2l0TGFiZWxcIlxuICAgICAgICAgICAgICAjdHJhbnNpdFN3aXRjaFxuICAgICAgICAgICAgICBibG9ja1xuICAgICAgICAgICAgICBsaWdodFxuICAgICAgICAgICAgICBbaWNvblR5cGVdPVwiJ2NoZXZyb24tZG93bidcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0VHJhbnNpdExhYmVsKClcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYW5zaXQnLCBvcGVuVHJhbnNpdFR5cGVTZWxlY3QgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVHJhbnNpdFN3aXRjaE9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cInRyYW5zaXRLZXlEb3duKCRldmVudClcIj57eyBnZXRUcmFuc2l0TGFiZWwoKSB9fVxuICAgICAgICAgICAgPC9uYXMtYnV0dG9uLW5ldz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGVuVHJhbnNpdFR5cGVTZWxlY3RcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RyYW5zaXQtdHlwZS1zZWxlY3Rpb24nKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsIGRpcmVjdE9ubHkgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVEaXJlY3RPbmx5XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVHJhbnNpdENoYW5nZSh0cnVlKVwiPnt7IGRpcmVjdE9ubHlMYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVUcmFuc2l0XG4gICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgIWRpcmVjdE9ubHkgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKGZhbHNlKVwiPnt7IGRpcmVjdFRyYW5zaXRMYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICBbKHNob3dCYWNrZHJvcCldPVwib3BlblRyYW5zaXRUeXBlU2VsZWN0XCI+PC9uYXMtYmFja2Ryb3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic3Vic2lkeURpc2NvdW50cyAmJiBzdWJzaWR5RGlzY291bnRzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRGaWx0ZXJDbGFzcygnc3Vic2lkeS1kaXNjb3VudCcpXCI+XG4gICAgICAgICAgPG5hcy1zdWJzaWR5LWRpc2NvdW50ICNzdWJzaWR5RGlzY291bnRcbiAgICAgICAgICAgIFtkaXNjb3VudHNdPVwic3Vic2lkeURpc2NvdW50c1wiXG4gICAgICAgICAgICBbc2VsZWN0ZWREaXNjb3VudF09XCJzZWxlY3RlZFN1YnNpZHlEaXNjb3VudFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwic3Vic2lkeURpc2NvdW50TGFiZWxcIlxuICAgICAgICAgICAgKGluZm9CdXR0b25DbGljayk9XCJvblN1YnNpZHlEaXNjb3VudEluZm9DbGljaygpXCJcbiAgICAgICAgICAgIChkaXNjb3VudFNlbGVjdENoYW5nZSk9XCJvblN1YnNpZHlEaXNjb3VudFNlbGVjdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbmZvQnV0dG9uS2V5ZG93bik9XCJvblN1YnNpZHlEaXNjb3VudEluZm9CdXR0b25LZXlkb3duKCRldmVudClcIj48L25hcy1zdWJzaWR5LWRpc2NvdW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|