cmat 0.0.7 → 0.0.9
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/components/adapter/dayjs-datetime-adapter.d.ts +1 -1
- package/components/breadcrumb/breadcrumb.service.d.ts +1 -1
- package/components/card/card.component.d.ts +1 -1
- package/components/cascade/cascade-list/cascade-list.component.d.ts +45 -21
- package/components/chip-input/chip-input.component.d.ts +39 -12
- package/components/custom-formly/extension/addons.extension.d.ts +2 -0
- package/components/custom-formly/index.d.ts +5 -0
- package/components/custom-formly/public-api.d.ts +26 -0
- package/components/custom-formly/types/button/button.component.d.ts +18 -0
- package/components/custom-formly/types/cascade/cascade.component.d.ts +38 -0
- package/components/custom-formly/types/checklist/checklist.component.d.ts +41 -0
- package/components/custom-formly/types/chips/chips.component.d.ts +27 -0
- package/components/custom-formly/types/color-picker/color-picker.component.d.ts +7 -0
- package/components/custom-formly/types/date-range/date-range.component.d.ts +20 -0
- package/components/custom-formly/types/datepicker/datepicker.component.d.ts +41 -0
- package/components/custom-formly/types/multicheckbox/multicheckbox.component.d.ts +44 -0
- package/components/custom-formly/types/number/number.component.d.ts +20 -0
- package/components/custom-formly/types/radio/radio.component.d.ts +44 -0
- package/components/custom-formly/types/rating/rating.component.d.ts +24 -0
- package/components/custom-formly/types/repeat/repeat.component.d.ts +16 -0
- package/components/custom-formly/types/select/select.component.d.ts +54 -0
- package/components/custom-formly/types/select-tree/select-tree.component.d.ts +43 -0
- package/components/custom-formly/types/stepper/horizontal/stepper.component.d.ts +9 -0
- package/components/custom-formly/types/stepper/stepper.type.d.ts +6 -0
- package/components/custom-formly/types/stepper/vertical/stepper.component.d.ts +9 -0
- package/components/custom-formly/types/table/table.component.d.ts +43 -0
- package/components/custom-formly/types/tabs/tab.component.d.ts +8 -0
- package/components/custom-formly/types/tags/tags.component.d.ts +41 -0
- package/components/custom-formly/types/textarea/textarea.component.d.ts +13 -0
- package/components/custom-formly/types/upload/upload.component.d.ts +31 -0
- package/components/custom-formly/wrappers/addons/addons.component.d.ts +10 -0
- package/components/custom-formly/wrappers/card/card.component.d.ts +6 -0
- package/components/custom-formly/wrappers/expansion/expansion.component.d.ts +6 -0
- package/components/custom-formly/wrappers/panel/panel.component.d.ts +6 -0
- package/components/date-range/date-range.component.d.ts +8 -6
- package/components/drawer/drawer.component.d.ts +2 -2
- package/components/fullscreen/fullscreen.component.d.ts +2 -9
- package/components/fullscreen/public-api.d.ts +0 -1
- package/components/material-color-picker/material-color-picker.component.d.ts +8 -4
- package/components/material-datetimepicker/calendar.d.ts +2 -2
- package/components/material-datetimepicker/clock.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker-input.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker-toggle.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker.d.ts +5 -10
- package/components/material-datetimepicker/month-view.d.ts +1 -2
- package/components/material-datetimepicker/multi-year-view.d.ts +1 -1
- package/components/material-datetimepicker/time.d.ts +2 -2
- package/components/material-datetimepicker/year-view.d.ts +1 -1
- package/components/navigation/horizontal/components/basic/basic.component.d.ts +1 -1
- package/components/navigation/horizontal/components/branch/branch.component.d.ts +1 -1
- package/components/navigation/horizontal/horizontal.component.d.ts +2 -2
- package/components/navigation/vertical/components/aside/aside.component.d.ts +1 -1
- package/components/navigation/vertical/components/basic/basic.component.d.ts +1 -7
- package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +1 -1
- package/components/navigation/vertical/components/group/group.component.d.ts +1 -1
- package/components/navigation/vertical/vertical.component.d.ts +5 -5
- package/components/popover/popover-trigger.d.ts +1 -1
- package/components/popover/popover.component.d.ts +3 -3
- package/components/rating/rating.component.d.ts +38 -9
- package/components/select-search/select-search.component.d.ts +4 -4
- package/components/select-tree/select-tree.component.d.ts +50 -21
- package/components/toast/toast.component.d.ts +4 -4
- package/components/transfer-picker/filter/filter.component.d.ts +1 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +2 -2
- package/components/transfer-picker/transfer-picker.component.d.ts +1 -1
- package/components/upload/files.type.d.ts +22 -0
- package/components/upload/files.util.service.d.ts +20 -0
- package/components/upload/index.d.ts +5 -0
- package/components/upload/public-api.d.ts +4 -0
- package/components/upload/upload-queue/upload-queue.component.d.ts +39 -0
- package/components/upload/upload.component.d.ts +32 -0
- package/esm2022/animations/public-api.mjs +2 -2
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +6 -6
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +5 -5
- package/esm2022/components/adapter/native-datetime-adapter.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +6 -6
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +5 -5
- package/esm2022/components/card/card.component.mjs +5 -5
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +7 -7
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +207 -114
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +4 -4
- package/esm2022/components/chip-input/chip-input.component.mjs +152 -49
- package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +5 -0
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +13 -0
- package/esm2022/components/custom-formly/public-api.mjs +27 -0
- package/esm2022/components/custom-formly/types/button/button.component.mjs +39 -0
- package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +71 -0
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +161 -0
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +55 -0
- package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +15 -0
- package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +25 -0
- package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +51 -0
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +89 -0
- package/esm2022/components/custom-formly/types/number/number.component.mjs +27 -0
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +88 -0
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +27 -0
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +28 -0
- package/esm2022/components/custom-formly/types/select/select.component.mjs +169 -0
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +66 -0
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +31 -0
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +2 -0
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +31 -0
- package/esm2022/components/custom-formly/types/table/table.component.mjs +116 -0
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +19 -0
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +149 -0
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +25 -0
- package/esm2022/components/custom-formly/types/upload/upload.component.mjs +58 -0
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +92 -0
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +14 -0
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +14 -0
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +12 -0
- package/esm2022/components/date-range/date-range.component.mjs +26 -17
- package/esm2022/components/drawer/drawer.component.mjs +5 -5
- package/esm2022/components/drawer/drawer.service.mjs +3 -3
- package/esm2022/components/fullscreen/fullscreen.component.mjs +16 -73
- package/esm2022/components/fullscreen/public-api.mjs +1 -2
- package/esm2022/components/highlight/highlight.component.mjs +5 -5
- package/esm2022/components/highlight/highlight.service.mjs +3 -3
- package/esm2022/components/json-editor/json-editor.component.mjs +3 -3
- package/esm2022/components/masonry/masonry.component.mjs +5 -5
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +22 -12
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +3 -3
- package/esm2022/components/material-datetimepicker/calendar.mjs +11 -12
- package/esm2022/components/material-datetimepicker/clock.mjs +5 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +4 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +3 -3
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +9 -9
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +17 -22
- package/esm2022/components/material-datetimepicker/month-view.mjs +5 -6
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +7 -8
- package/esm2022/components/material-datetimepicker/time.mjs +8 -8
- package/esm2022/components/material-datetimepicker/year-view.mjs +7 -8
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +8 -8
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +8 -8
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +5 -5
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +6 -6
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +6 -6
- package/esm2022/components/navigation/navigation.service.mjs +3 -3
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +11 -11
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +7 -24
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +10 -10
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +5 -5
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +9 -9
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +6 -6
- package/esm2022/components/navigation/vertical/vertical.component.mjs +11 -11
- package/esm2022/components/pagination/pagination.component.mjs +10 -10
- package/esm2022/components/pagination/pagination.directive.mjs +4 -4
- package/esm2022/components/pagination/pagination.pipe.mjs +4 -4
- package/esm2022/components/pagination/pagination.service.mjs +3 -3
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +6 -6
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +5 -5
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +6 -6
- package/esm2022/components/popover/popover-trigger.mjs +5 -5
- package/esm2022/components/popover/popover.component.mjs +8 -9
- package/esm2022/components/popover/popover.target.mjs +3 -3
- package/esm2022/components/progress-bar/progress-bar.component.mjs +6 -6
- package/esm2022/components/rating/rating.component.mjs +122 -23
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search-clear.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search.component.mjs +15 -15
- package/esm2022/components/select-tree/select-tree.component.mjs +281 -157
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +9 -9
- package/esm2022/components/timeline/timeline.component.mjs +5 -5
- package/esm2022/components/toast/toast-modal.component.mjs +5 -5
- package/esm2022/components/toast/toast.component.mjs +6 -6
- package/esm2022/components/toast/toast.service.mjs +3 -3
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +9 -9
- package/esm2022/components/transfer-picker/search/search.component.mjs +6 -6
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +11 -11
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +7 -7
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +4 -4
- package/esm2022/components/upload/cmat-components-upload.mjs +5 -0
- package/esm2022/components/upload/files.type.mjs +2 -0
- package/esm2022/components/upload/files.util.service.mjs +100 -0
- package/esm2022/components/upload/public-api.mjs +5 -0
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +154 -0
- package/esm2022/components/upload/upload.component.mjs +118 -0
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +3 -3
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +3 -3
- package/esm2022/directives/autofocus/autofocus.directive.mjs +3 -3
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-click.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +3 -3
- package/esm2022/directives/digit-only/digit-only.directive.mjs +3 -3
- package/esm2022/directives/digit-only/mask.directive.mjs +3 -3
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +3 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +5 -5
- package/esm2022/lib/mock-api/mock-api.service.mjs +3 -3
- package/esm2022/pipes/bytes/bytes.pipe.mjs +3 -3
- package/esm2022/pipes/date-format/date-format.pipe.mjs +3 -3
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +3 -3
- package/esm2022/pipes/group-by/group-by.pipe.mjs +3 -3
- package/esm2022/pipes/keys/keys.pipe.mjs +3 -3
- package/esm2022/pipes/secure/secure-pipe.mjs +5 -5
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +3 -3
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/services/alert/alert.service.mjs +7 -7
- package/esm2022/services/alert/enum.mjs +2 -2
- package/esm2022/services/config/config.service.mjs +5 -5
- package/esm2022/services/config/urlStateConfig.service.mjs +5 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +5 -5
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +7 -7
- package/esm2022/services/data/data.service.mjs +5 -5
- package/esm2022/services/loading/loading.interceptor.mjs +4 -4
- package/esm2022/services/loading/loading.service.mjs +3 -3
- package/esm2022/services/local-storage/local-storage.service.mjs +3 -3
- package/esm2022/services/media-watcher/media-watcher.service.mjs +5 -5
- package/esm2022/services/platform/platform.service.mjs +4 -4
- package/esm2022/services/splash-screen/splash-screen.service.mjs +6 -6
- package/esm2022/services/title/title.service.mjs +4 -4
- package/esm2022/services/translation/translation.service.mjs +3 -3
- package/esm2022/services/utils/utils.service.mjs +54 -9
- package/fesm2022/cmat-animations.mjs +15 -15
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +11 -11
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +11 -11
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +215 -123
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +153 -50
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +1331 -0
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -0
- package/fesm2022/cmat-components-date-range.mjs +27 -18
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +8 -8
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +16 -73
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +7 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-json-editor.mjs +3 -3
- package/fesm2022/cmat-components-masonry.mjs +4 -4
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +21 -11
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +189 -195
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +166 -183
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +20 -20
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +13 -13
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +13 -14
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +6 -6
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +121 -22
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +41 -41
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +281 -157
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +12 -12
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +12 -12
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +33 -33
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-upload.mjs +366 -0
- package/fesm2022/cmat-components-upload.mjs.map +1 -0
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-digit-only.mjs +6 -6
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs +4 -4
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs +6 -6
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +7 -7
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +11 -11
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +5 -5
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs +4 -4
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +5 -5
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs +53 -8
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/package.json +30 -18
- package/pipes/secure/secure-pipe.d.ts +1 -1
- package/services/alert/enum.d.ts +1 -1
- package/services/confirmation/confirmation.service.d.ts +1 -1
- package/services/data/data.service.d.ts +1 -1
- package/services/media-watcher/media-watcher.service.d.ts +1 -1
- package/services/title/title.service.d.ts +1 -1
- package/services/utils/utils.service.d.ts +1 -0
- package/styles/components/bundle.scss +18 -5
- package/styles/overrides/angular-material.scss +51 -52
- package/styles/tailwind.scss +2 -8
- package/styles/themes.scss +7 -7
- package/styles/user-themes.scss +1 -1
- package/tailwind/plugins/utilities.js +1 -1
- package/components/fullscreen/fullscreen.types.d.ts +0 -13
- package/esm2022/components/fullscreen/fullscreen.types.mjs +0 -2
|
@@ -1,55 +1,114 @@
|
|
|
1
|
-
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
1
|
+
/* eslint-disable @typescript-eslint/member-ordering */
|
|
4
2
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
3
|
import { Breakpoints } from '@angular/cdk/layout';
|
|
4
|
+
import { CdkOverlayOrigin, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
5
|
+
import { PortalModule } from '@angular/cdk/portal';
|
|
6
|
+
import { NgClass } from '@angular/common';
|
|
7
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, Self, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
8
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
9
|
+
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
10
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
11
|
+
import { MatInputModule } from '@angular/material/input';
|
|
12
|
+
import { isUndefined } from 'lodash-es';
|
|
6
13
|
import { Subject } from 'rxjs';
|
|
7
14
|
import { map, takeUntil } from 'rxjs/operators';
|
|
8
15
|
import { CmatCascadeBottomSheetComponent } from '../cascade-bottom-sheet/cascade-bottom-sheet.component';
|
|
9
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
10
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
11
16
|
import { CmatCascadeMenuComponent } from '../cascade-menu/cascade-menu.component';
|
|
12
|
-
import { isUndefined } from 'lodash-es';
|
|
13
|
-
import { MatInputModule } from '@angular/material/input';
|
|
14
|
-
import { CdkOverlayOrigin, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
15
|
-
import { PortalModule } from '@angular/cdk/portal';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "@angular/
|
|
18
|
-
import * as i2 from "@angular/cdk/
|
|
19
|
-
import * as i3 from "@angular/
|
|
20
|
-
import * as i4 from "@angular/material/
|
|
18
|
+
import * as i1 from "@angular/forms";
|
|
19
|
+
import * as i2 from "@angular/cdk/overlay";
|
|
20
|
+
import * as i3 from "@angular/cdk/layout";
|
|
21
|
+
import * as i4 from "@angular/material/bottom-sheet";
|
|
21
22
|
import * as i5 from "@angular/material/icon";
|
|
22
23
|
import * as i6 from "@angular/material/input";
|
|
23
|
-
import * as i7 from "@angular/
|
|
24
|
+
import * as i7 from "@angular/material/form-field";
|
|
25
|
+
import * as i8 from "@angular/cdk/portal";
|
|
26
|
+
import * as i9 from "@angular/material/button";
|
|
24
27
|
let NEXT_ID = 0;
|
|
25
28
|
export class CmatCascadeListComponent {
|
|
26
|
-
constructor(_overlay, _breakpointObserver, _bottomSheet) {
|
|
29
|
+
constructor(ngControl, _overlay, _breakpointObserver, _bottomSheet, _changeDetectorRef) {
|
|
30
|
+
this.ngControl = ngControl;
|
|
27
31
|
this._overlay = _overlay;
|
|
28
32
|
this._breakpointObserver = _breakpointObserver;
|
|
29
33
|
this._bottomSheet = _bottomSheet;
|
|
34
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
30
35
|
/* 组件 id */
|
|
31
36
|
this.id = `cmat-cascade-list-${NEXT_ID++}`;
|
|
32
|
-
this.disabled = false;
|
|
33
|
-
this.placeholder = '请选择';
|
|
34
37
|
this.clearable = false;
|
|
35
38
|
this.fullLevels = true;
|
|
36
39
|
this.changeOnSelect = false;
|
|
37
|
-
this.modelChange = new EventEmitter();
|
|
38
40
|
this.steps = [];
|
|
39
41
|
this.menuVisible = false;
|
|
40
42
|
this.currentLabels = [];
|
|
41
|
-
this.
|
|
43
|
+
this.stateChanges = new Subject();
|
|
44
|
+
this.focused = false;
|
|
45
|
+
this.touched = false;
|
|
46
|
+
this.controlType = 'cmat-cascade-list';
|
|
42
47
|
this._unsubscribeAll = new Subject();
|
|
48
|
+
// Whether the cascade dropdownlist UI is in touch mode.
|
|
49
|
+
this._touchUi = false;
|
|
50
|
+
this._placeholder = '请选择';
|
|
51
|
+
this._required = false;
|
|
52
|
+
this._disabled = false;
|
|
43
53
|
this.onTouched = () => { };
|
|
44
54
|
this.controlChange = () => { };
|
|
55
|
+
if (this.ngControl != null) {
|
|
56
|
+
this.ngControl.valueAccessor = this;
|
|
57
|
+
}
|
|
45
58
|
}
|
|
46
|
-
// Whether the cascade dropdownlist UI is in touch mode.
|
|
47
59
|
get touchUi() {
|
|
48
60
|
return this._touchUi;
|
|
49
61
|
}
|
|
50
62
|
set touchUi(value) {
|
|
51
63
|
this._touchUi = coerceBooleanProperty(value);
|
|
52
64
|
}
|
|
65
|
+
get placeholder() {
|
|
66
|
+
return this._placeholder;
|
|
67
|
+
}
|
|
68
|
+
set placeholder(value) {
|
|
69
|
+
this._placeholder = value;
|
|
70
|
+
this.stateChanges.next();
|
|
71
|
+
}
|
|
72
|
+
get value() {
|
|
73
|
+
return this._value;
|
|
74
|
+
}
|
|
75
|
+
set value(value) {
|
|
76
|
+
if (value !== this.value) {
|
|
77
|
+
this._value = value;
|
|
78
|
+
this._setInputValue();
|
|
79
|
+
this.stateChanges.next();
|
|
80
|
+
this.controlChange(value);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
get empty() {
|
|
84
|
+
return !this._value;
|
|
85
|
+
}
|
|
86
|
+
get errorState() {
|
|
87
|
+
if (this.ngControl == null)
|
|
88
|
+
return false;
|
|
89
|
+
return (this.touched && this.ngControl?.invalid) ?? false;
|
|
90
|
+
}
|
|
91
|
+
get shouldLabelFloat() {
|
|
92
|
+
return this.focused || !this.empty;
|
|
93
|
+
}
|
|
94
|
+
get required() { return this._required; }
|
|
95
|
+
set required(value) {
|
|
96
|
+
this._required = coerceBooleanProperty(value);
|
|
97
|
+
this.stateChanges.next();
|
|
98
|
+
}
|
|
99
|
+
get disabled() {
|
|
100
|
+
if (this.ngControl && this.ngControl.disabled !== null) {
|
|
101
|
+
return this.ngControl.disabled;
|
|
102
|
+
}
|
|
103
|
+
return this._disabled;
|
|
104
|
+
}
|
|
105
|
+
set disabled(value) {
|
|
106
|
+
this._disabled = coerceBooleanProperty(value);
|
|
107
|
+
if (this.focused) {
|
|
108
|
+
this.focused = false;
|
|
109
|
+
this.stateChanges.next();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
53
112
|
ngOnInit() {
|
|
54
113
|
const config = new OverlayConfig({
|
|
55
114
|
hasBackdrop: true,
|
|
@@ -73,6 +132,9 @@ export class CmatCascadeListComponent {
|
|
|
73
132
|
}
|
|
74
133
|
])
|
|
75
134
|
});
|
|
135
|
+
this._breakpointObserver.observe(Breakpoints.Handset).pipe(takeUntil(this._unsubscribeAll), map((match) => match.matches)).subscribe((matches) => {
|
|
136
|
+
this.touchUi !== matches && !matches && this.bottomSheetRef && this.bottomSheetRef.dismiss();
|
|
137
|
+
});
|
|
76
138
|
this.overlayRef = this._overlay.create(config);
|
|
77
139
|
this.overlayRef.backdropClick().subscribe(() => {
|
|
78
140
|
this.overlayRef.detach();
|
|
@@ -80,16 +142,25 @@ export class CmatCascadeListComponent {
|
|
|
80
142
|
}
|
|
81
143
|
ngOnChanges(changes) {
|
|
82
144
|
if (changes['options']) {
|
|
83
|
-
this.
|
|
145
|
+
if ((this.value && !this.value.length) || !this.value) {
|
|
146
|
+
const step1 = this.options.map((option) => ({
|
|
147
|
+
...option,
|
|
148
|
+
active: false
|
|
149
|
+
}));
|
|
150
|
+
this.steps = [step1];
|
|
151
|
+
}
|
|
84
152
|
this._init();
|
|
85
153
|
}
|
|
86
154
|
}
|
|
87
155
|
ngOnDestroy() {
|
|
156
|
+
this.stateChanges.complete();
|
|
88
157
|
this._unsubscribeAll.next(void 0);
|
|
89
158
|
this._unsubscribeAll.complete();
|
|
90
159
|
}
|
|
91
160
|
writeValue(value) {
|
|
92
|
-
this.
|
|
161
|
+
this.value = value;
|
|
162
|
+
this.steps = [];
|
|
163
|
+
this._init();
|
|
93
164
|
}
|
|
94
165
|
registerOnChange(fn) {
|
|
95
166
|
this.controlChange = fn;
|
|
@@ -97,9 +168,24 @@ export class CmatCascadeListComponent {
|
|
|
97
168
|
registerOnTouched(fn) {
|
|
98
169
|
this.onTouched = fn;
|
|
99
170
|
}
|
|
171
|
+
setDisabledState(isDisabled) {
|
|
172
|
+
this.disabled = isDisabled;
|
|
173
|
+
}
|
|
174
|
+
setDescribedByIds(ids) {
|
|
175
|
+
if (ids.length) {
|
|
176
|
+
this._inputElement.nativeElement.setAttribute('aria-describedby', ids.join(' '));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this._inputElement.nativeElement.removeAttribute('aria-describedby');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
onContainerClick() {
|
|
183
|
+
if (!this.focused) {
|
|
184
|
+
this._inputElement.nativeElement.focus();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
100
187
|
clickHandle(event) {
|
|
101
|
-
|
|
102
|
-
if (this.disabled) {
|
|
188
|
+
if (this.disabled || this.options.length === 0) {
|
|
103
189
|
return;
|
|
104
190
|
}
|
|
105
191
|
const element = event.target;
|
|
@@ -111,64 +197,28 @@ export class CmatCascadeListComponent {
|
|
|
111
197
|
if (this.overlayRef && this.overlayRef.hasAttached()) {
|
|
112
198
|
this.overlayRef.detach();
|
|
113
199
|
}
|
|
114
|
-
this.
|
|
200
|
+
this._openBottomSheet();
|
|
115
201
|
}
|
|
116
202
|
else {
|
|
117
203
|
this.overlayRef.attach(this.menuTemplate);
|
|
118
204
|
}
|
|
119
205
|
}
|
|
120
|
-
|
|
121
|
-
this.inputValue = '';
|
|
122
|
-
const nextValue = [];
|
|
123
|
-
this.steps.forEach((items) => {
|
|
124
|
-
const steps = items.filter((item) => item.active);
|
|
125
|
-
nextValue.push(steps[0]);
|
|
126
|
-
});
|
|
127
|
-
this.currentLabels = nextValue;
|
|
128
|
-
this._setInputValue();
|
|
129
|
-
const next = nextValue.map((item) => item.value);
|
|
130
|
-
this.model = next;
|
|
131
|
-
this.modelChange.emit(next);
|
|
132
|
-
this.controlChange();
|
|
133
|
-
}
|
|
134
|
-
clearValue(isFirst, event) {
|
|
206
|
+
clearValue(event) {
|
|
135
207
|
if (event) {
|
|
136
208
|
event.stopPropagation();
|
|
137
209
|
}
|
|
138
210
|
this.currentLabels = [];
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this.inputValue = '';
|
|
148
|
-
if (event) {
|
|
149
|
-
this.modelChange.emit([]);
|
|
150
|
-
}
|
|
211
|
+
this.steps = [];
|
|
212
|
+
const step1 = this.options.map((option) => ({
|
|
213
|
+
...option,
|
|
214
|
+
active: false
|
|
215
|
+
}));
|
|
216
|
+
this.steps = [step1];
|
|
217
|
+
this.value = null;
|
|
218
|
+
this._changeDetectorRef.markForCheck();
|
|
151
219
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
options.map((item) => {
|
|
155
|
-
if (this.model[index] === item.value) {
|
|
156
|
-
if (!isUndefined(item.children))
|
|
157
|
-
options = item.children;
|
|
158
|
-
step.push(({
|
|
159
|
-
...item,
|
|
160
|
-
active: true
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
step.push(item);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
this.steps.push(step);
|
|
168
|
-
index += 1;
|
|
169
|
-
if (index < this.model.length) {
|
|
170
|
-
this.initSteps(index, options);
|
|
171
|
-
}
|
|
220
|
+
showClearIcon() {
|
|
221
|
+
return !!(this.clearable && this.currentLabels.length > 0 && !this.disabled);
|
|
172
222
|
}
|
|
173
223
|
selectHandle(event, step, index) {
|
|
174
224
|
event.stopPropagation();
|
|
@@ -186,7 +236,7 @@ export class CmatCascadeListComponent {
|
|
|
186
236
|
if (next && Array.isArray(next) && next.length) {
|
|
187
237
|
// change on select (props)
|
|
188
238
|
if (this.changeOnSelect) {
|
|
189
|
-
this.
|
|
239
|
+
this._changeLabels();
|
|
190
240
|
}
|
|
191
241
|
const nativeNext = next.map((item) => ({
|
|
192
242
|
...item,
|
|
@@ -195,7 +245,7 @@ export class CmatCascadeListComponent {
|
|
|
195
245
|
return this.steps.push(nativeNext);
|
|
196
246
|
}
|
|
197
247
|
// last step
|
|
198
|
-
this.
|
|
248
|
+
this._changeLabels();
|
|
199
249
|
if (this.overlayRef && this.overlayRef.hasAttached()) {
|
|
200
250
|
this.overlayRef.detach();
|
|
201
251
|
}
|
|
@@ -203,66 +253,103 @@ export class CmatCascadeListComponent {
|
|
|
203
253
|
this.bottomSheetRef.dismiss();
|
|
204
254
|
}
|
|
205
255
|
}
|
|
206
|
-
|
|
207
|
-
|
|
256
|
+
onFocusIn() {
|
|
257
|
+
if (!this.focused) {
|
|
258
|
+
this.focused = true;
|
|
259
|
+
this.stateChanges.next();
|
|
260
|
+
}
|
|
208
261
|
}
|
|
209
|
-
|
|
262
|
+
onFocusOut(event) {
|
|
263
|
+
if (!this._inputElement.nativeElement.contains(event.relatedTarget)) {
|
|
264
|
+
this.touched = true;
|
|
265
|
+
this.focused = false;
|
|
266
|
+
this.onTouched();
|
|
267
|
+
this.stateChanges.next();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
_initSteps(index, options) {
|
|
271
|
+
const step = [];
|
|
272
|
+
options.map((item) => {
|
|
273
|
+
if (this.value[index].value === item.value) {
|
|
274
|
+
if (!isUndefined(item.children))
|
|
275
|
+
options = item.children;
|
|
276
|
+
step.push(({
|
|
277
|
+
...item,
|
|
278
|
+
active: true
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
step.push(item);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
this.steps.push(step);
|
|
286
|
+
index += 1;
|
|
287
|
+
if (index < this.value.length) {
|
|
288
|
+
this._initSteps(index, options);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
_changeLabels() {
|
|
292
|
+
const nextValue = [];
|
|
293
|
+
this.steps.forEach((items) => {
|
|
294
|
+
const steps = items.filter((item) => item.active);
|
|
295
|
+
nextValue.push(steps[0]);
|
|
296
|
+
});
|
|
297
|
+
this.currentLabels = nextValue;
|
|
298
|
+
const next = nextValue.map((item) => {
|
|
299
|
+
return {
|
|
300
|
+
value: item.value,
|
|
301
|
+
label: item.label
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
this.value = next;
|
|
305
|
+
}
|
|
306
|
+
_openBottomSheet() {
|
|
210
307
|
this.bottomSheetRef = this._bottomSheet.open(CmatCascadeBottomSheetComponent, {
|
|
211
308
|
data: this
|
|
212
309
|
});
|
|
213
310
|
}
|
|
214
311
|
_init() {
|
|
215
|
-
this.
|
|
216
|
-
if (this.
|
|
217
|
-
|
|
218
|
-
|
|
312
|
+
this.currentLabels = [];
|
|
313
|
+
if (this.value && this.value.length && this.options.length > 0) {
|
|
314
|
+
let options = this.options;
|
|
315
|
+
const val = this.value.map((v) => {
|
|
316
|
+
const item = options.filter((i) => i.value === v.value)[0];
|
|
219
317
|
if (!isUndefined(item.children))
|
|
220
|
-
|
|
318
|
+
options = item.children;
|
|
221
319
|
return item;
|
|
222
320
|
});
|
|
223
|
-
this.currentLabels = val.filter(v => !!v);
|
|
321
|
+
this.currentLabels = val.filter((v) => !!v);
|
|
224
322
|
this._setInputValue();
|
|
225
|
-
this.
|
|
323
|
+
this._initSteps(0, this.options);
|
|
226
324
|
}
|
|
227
|
-
this.
|
|
228
|
-
this.touchUi !== matches && !matches && this.bottomSheetRef && this.bottomSheetRef.dismiss();
|
|
229
|
-
});
|
|
325
|
+
this._changeDetectorRef.markForCheck();
|
|
230
326
|
}
|
|
231
327
|
_setInputValue() {
|
|
328
|
+
this._inputElement.nativeElement.value = '';
|
|
232
329
|
if (this.fullLevels) {
|
|
233
330
|
this.currentLabels.map((value, i) => {
|
|
234
|
-
this.
|
|
331
|
+
this._inputElement.nativeElement.value += `${value.label}${i < this.currentLabels.length - 1 ? ' / ' : ''}`;
|
|
235
332
|
});
|
|
236
333
|
}
|
|
237
334
|
else {
|
|
238
|
-
this.
|
|
335
|
+
this._inputElement.nativeElement.value = this.currentLabels[this.currentLabels.length - 1].label ?? '';
|
|
239
336
|
}
|
|
240
337
|
}
|
|
241
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
242
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.
|
|
243
|
-
provide: NG_VALUE_ACCESSOR,
|
|
244
|
-
useExisting: forwardRef(() => CmatCascadeListComponent),
|
|
245
|
-
multi: true
|
|
246
|
-
}], viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: CdkOverlayOrigin, descendants: true, static: true }, { propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true, static: true }], exportAs: ["cmatCascadeList"], usesOnChanges: true, ngImport: i0, template: "<span role=\"presentation\" class=\"cmat-cascade-list\" [ngClass]=\"{'opened': menuVisible, 'disabled': disabled}\"\n cdk-overlay-origin>\n <mat-form-field>\n @if (label) {\n <mat-label>{{label}}</mat-label>\n }\n <input (click)=\"clickHandle($event)\" [value]=\"inputValue || ''\" matInput readonly\n [placeholder]=\"currentLabels.length ? '' : placeholder\">\n\n @if (showClearIcon()) {\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearValue(false,$event)\">\n <mat-icon [svgIcon]=\"'heroicons_outline:x-mark'\"></mat-icon>\n </button>\n }\n @if (!showClearIcon()) {\n <mat-icon matSuffix [svgIcon]=\"'mat_outline:arrow_drop_down'\"></mat-icon>\n }\n </mat-form-field>\n</span>\n\n<ng-template cdk-portal #menuTemplate=\"cdkPortal\">\n <cmat-cascade-menu></cmat-cascade-menu>\n</ng-template>", styles: [".cmat-cascade-list{position:relative;display:inline-block;width:100%;line-height:2}.cmat-cascade-list mat-form-field{width:100%}.cmat-cascade-list input{cursor:pointer}.cmat-cascade-list.disabled .cascade-label{z-index:2}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CmatCascadeMenuComponent, selector: "cmat-cascade-menu", exportAs: ["cmatCascadeMenu"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i7.TemplatePortalDirective, selector: "[cdk-portal], [portal]", exportAs: ["cdkPortal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
338
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatCascadeListComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.Overlay }, { token: i3.BreakpointObserver }, { token: i4.MatBottomSheet }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
339
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: CmatCascadeListComponent, isStandalone: true, selector: "cmat-cascade-list", inputs: { id: "id", options: "options", clearable: "clearable", fullLevels: "fullLevels", changeOnSelect: "changeOnSelect", touchUi: "touchUi", placeholder: "placeholder", value: "value", required: "required", disabled: "disabled" }, host: { properties: { "attr.id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: CmatCascadeListComponent }], viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: CdkOverlayOrigin, descendants: true, static: true }, { propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true, static: true }, { propertyName: "_inputElement", first: true, predicate: ["inputElement"], descendants: true, static: true }], exportAs: ["cmatCascadeList"], usesOnChanges: true, ngImport: i0, template: "<span role=\"presentation\" class=\"cmat-cascade-list\" [ngClass]=\"{'opened': menuVisible, 'disabled': disabled}\"\n cdk-overlay-origin>\n <input (click)=\"clickHandle($event)\" matInput readonly #inputElement [required]='required' (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\" [placeholder]=\"currentLabels.length>0 ? '' : placeholder\">\n\n @if (showClearIcon()) {\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearValue($event)\">\n <mat-icon [svgIcon]=\"'heroicons_outline:x-mark'\"></mat-icon>\n </button>\n }\n @else {\n <mat-icon matSuffix [svgIcon]=\"'mat_outline:arrow_drop_down'\"></mat-icon>\n }\n</span>\n\n<ng-template cdk-portal #menuTemplate=\"cdkPortal\">\n <cmat-cascade-menu></cmat-cascade-menu>\n</ng-template>", styles: ["cmat-cascade-list{width:100%}.cmat-cascade-list{position:relative;display:flex;width:100%;line-height:2;align-items:center}.cmat-cascade-list mat-form-field{width:100%}.cmat-cascade-list input{cursor:pointer}.cmat-cascade-list.disabled .cascade-label{z-index:2}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CmatCascadeMenuComponent, selector: "cmat-cascade-menu", exportAs: ["cmatCascadeMenu"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i8.TemplatePortalDirective, selector: "[cdk-portal], [portal]", exportAs: ["cdkPortal"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
247
340
|
}
|
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
341
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatCascadeListComponent, decorators: [{
|
|
249
342
|
type: Component,
|
|
250
|
-
args: [{ selector: 'cmat-cascade-list', providers: [{
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
343
|
+
args: [{ selector: 'cmat-cascade-list', providers: [{ provide: MatFormFieldControl, useExisting: CmatCascadeListComponent }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatCascadeList', standalone: true, imports: [MatIconModule, NgClass, CmatCascadeMenuComponent, MatInputModule, OverlayModule, PortalModule, MatButtonModule], template: "<span role=\"presentation\" class=\"cmat-cascade-list\" [ngClass]=\"{'opened': menuVisible, 'disabled': disabled}\"\n cdk-overlay-origin>\n <input (click)=\"clickHandle($event)\" matInput readonly #inputElement [required]='required' (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\" [placeholder]=\"currentLabels.length>0 ? '' : placeholder\">\n\n @if (showClearIcon()) {\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearValue($event)\">\n <mat-icon [svgIcon]=\"'heroicons_outline:x-mark'\"></mat-icon>\n </button>\n }\n @else {\n <mat-icon matSuffix [svgIcon]=\"'mat_outline:arrow_drop_down'\"></mat-icon>\n }\n</span>\n\n<ng-template cdk-portal #menuTemplate=\"cdkPortal\">\n <cmat-cascade-menu></cmat-cascade-menu>\n</ng-template>", styles: ["cmat-cascade-list{width:100%}.cmat-cascade-list{position:relative;display:flex;width:100%;line-height:2;align-items:center}.cmat-cascade-list mat-form-field{width:100%}.cmat-cascade-list input{cursor:pointer}.cmat-cascade-list.disabled .cascade-label{z-index:2}\n"] }]
|
|
344
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
345
|
+
type: Optional
|
|
346
|
+
}, {
|
|
347
|
+
type: Self
|
|
348
|
+
}] }, { type: i2.Overlay }, { type: i3.BreakpointObserver }, { type: i4.MatBottomSheet }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
|
|
256
349
|
type: HostBinding,
|
|
257
350
|
args: ['attr.id']
|
|
258
351
|
}, {
|
|
259
352
|
type: Input
|
|
260
|
-
}], disabled: [{
|
|
261
|
-
type: Input
|
|
262
|
-
}], placeholder: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], label: [{
|
|
265
|
-
type: Input
|
|
266
353
|
}], options: [{
|
|
267
354
|
type: Input,
|
|
268
355
|
args: [{ required: true }]
|
|
@@ -272,18 +359,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
272
359
|
type: Input
|
|
273
360
|
}], changeOnSelect: [{
|
|
274
361
|
type: Input
|
|
275
|
-
}], model: [{
|
|
276
|
-
type: Input,
|
|
277
|
-
args: [{ required: true }]
|
|
278
|
-
}], modelChange: [{
|
|
279
|
-
type: Output
|
|
280
362
|
}], overlayOrigin: [{
|
|
281
363
|
type: ViewChild,
|
|
282
364
|
args: [CdkOverlayOrigin, { static: true }]
|
|
283
365
|
}], menuTemplate: [{
|
|
284
366
|
type: ViewChild,
|
|
285
367
|
args: ['menuTemplate', { static: true }]
|
|
368
|
+
}], _inputElement: [{
|
|
369
|
+
type: ViewChild,
|
|
370
|
+
args: ['inputElement', { static: true }]
|
|
286
371
|
}], touchUi: [{
|
|
287
372
|
type: Input
|
|
373
|
+
}], placeholder: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], value: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], required: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], disabled: [{
|
|
380
|
+
type: Input
|
|
288
381
|
}] } });
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9jYXNjYWRlL2Nhc2NhZGUtbGlzdC9jYXNjYWRlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2Nhc2NhZGUvY2FzY2FkZS1saXN0L2Nhc2NhZGUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN6RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFXLGFBQWEsRUFBRSxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRyxPQUFPLEVBQWEsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQUU5RCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFpQmhCLE1BQU0sT0FBTyx3QkFBd0I7SUFtQ2pDLFlBQ1ksUUFBaUIsRUFDakIsbUJBQXVDLEVBQ3ZDLFlBQTRCO1FBRjVCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFyQ3hDLFdBQVc7UUFHSixPQUFFLEdBQUcscUJBQXFCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFFcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUtwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFJdEIsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQVFuRSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGtCQUFhLEdBQXVDLEVBQUUsQ0FBQztRQUcvQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFvQjdELGNBQVMsR0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsa0JBQWEsR0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFickMsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxJQUNJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBS0QsUUFBUTtRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxrQ0FBa0M7WUFDakQsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUMxQixRQUFRLEVBQUU7aUJBQ1YsbUJBQW1CLENBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO2lCQUNqQyxhQUFhLENBQUM7Z0JBQ1g7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7aUJBQ2xCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2FBQ0osQ0FBQztTQUNULENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsTUFBTSxPQUFPLEdBQWdCLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQ3pELE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDNUI7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxTQUFTLEdBQXVDLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQXlDLEVBQUUsRUFBRTtZQUM3RCxNQUFNLEtBQUssR0FBdUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQWlDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuSCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFpQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0IsRUFBRSxLQUFhO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQUU7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQW1DLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLEdBQUcsTUFBTTtnQkFDVCxNQUFNLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtRQUVELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVyQixJQUFJLEtBQUssRUFBRTtZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQUU7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsT0FBc0M7UUFDM0QsTUFBTSxJQUFJLEdBQWtDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzNCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ1AsR0FBRyxJQUFJO29CQUNQLE1BQU0sRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQyxDQUFDO2FBQ1A7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNYLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFZLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDbEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWlDLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FDekYsQ0FBQztZQUNHLEdBQUcsSUFBSTtZQUNQLE1BQU0sRUFBRSxDQUFDLEtBQUssS0FBSztTQUN0QixDQUFDLENBQUMsQ0FBQztRQUNKLGNBQWM7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRTlDLFVBQVU7UUFDVixJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDNUMsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFBRTtZQUVqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEUsR0FBRyxJQUFJO2dCQUNQLE1BQU0sRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0QztRQUVELFlBQVk7UUFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtZQUMxRSxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxLQUFLO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sY0FBYztRQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekYsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUM3RTtJQUNMLENBQUM7OEdBOVFRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZYQVh0QixDQUFDO2dCQUNSLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxJQUFJO2FBQ2QsQ0FBQyx5RUE0QlMsZ0JBQWdCLCtOQ3ZFL0IsbzRCQXVCYyx3UkR5QkEsa0JBQWtCLDJhQUFFLGFBQWEsb0xBQUUsT0FBTyxvRkFBRSx3QkFBd0IsNEZBQUUsY0FBYywwV0FBRSxhQUFhLHdMQUFFLFlBQVk7OzJGQUVsSCx3QkFBd0I7a0JBZnBDLFNBQVM7K0JBQ0ksbUJBQW1CLGFBR2xCLENBQUM7NEJBQ1IsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNkLENBQUMsaUJBQ2EsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDOzBJQU1ySCxFQUFFO3NCQUZSLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHcUIsT0FBTztzQkFBakMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdxQixLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDZixXQUFXO3NCQUFwQixNQUFNO2dCQUV3QyxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDQSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBdUJ2QyxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0LCBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuLi9vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENtYXRDYXNjYWRlQm90dG9tU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNjYWRlLWJvdHRvbS1zaGVldC9jYXNjYWRlLWJvdHRvbS1zaGVldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDbWF0Q2FzY2FkZU1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jYXNjYWRlLW1lbnUvY2FzY2FkZS1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IENka092ZXJsYXlPcmlnaW4sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlNb2R1bGUsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IENka1BvcnRhbCwgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcblxyXG5sZXQgTkVYVF9JRCA9IDA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1jYXNjYWRlLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXNjYWRlLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW3tcclxuICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0Q2FzY2FkZUxpc3RDb21wb25lbnQpLFxyXG4gICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGV4cG9ydEFzOiAnY21hdENhc2NhZGVMaXN0JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBOZ0NsYXNzLCBDbWF0Q2FzY2FkZU1lbnVDb21wb25lbnQsIE1hdElucHV0TW9kdWxlLCBPdmVybGF5TW9kdWxlLCBQb3J0YWxNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0Q2FzY2FkZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgICAvKiDnu4Tku7YgaWQgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlkID0gYGNtYXQtY2FzY2FkZS1saXN0LSR7TkVYVF9JRCsrfWA7XHJcblxyXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICfor7fpgInmi6knO1xyXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvLyBkYXRhXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBvcHRpb25zOiBBcnJheTxDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2U+O1xyXG4gICAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBmdWxsTGV2ZWxzID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGNoYW5nZU9uU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gYmluZCB2YWx1ZVxyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbW9kZWw6IEFycmF5PHN0cmluZz47XHJcbiAgICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZChDZGtPdmVybGF5T3JpZ2luLCB7IHN0YXRpYzogdHJ1ZSB9KSBvdmVybGF5T3JpZ2luOiBDZGtPdmVybGF5T3JpZ2luO1xyXG4gICAgQFZpZXdDaGlsZCgnbWVudVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbWVudVRlbXBsYXRlOiBDZGtQb3J0YWw7XHJcbiAgICBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xyXG5cclxuICAgIC8vIGJvdHRvbVNoZWV0XHJcbiAgICBib3R0b21TaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY7XHJcbiAgICBzdGVwczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgbWVudVZpc2libGUgPSBmYWxzZTtcclxuICAgIGN1cnJlbnRMYWJlbHM6IEFycmF5PENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZT4gPSBbXTtcclxuICAgIGlucHV0VmFsdWU/OiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfdG91Y2hVaSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSBfYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfYm90dG9tU2hlZXQ6IE1hdEJvdHRvbVNoZWV0XHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2hldGhlciB0aGUgY2FzY2FkZSBkcm9wZG93bmxpc3QgVUkgaXMgaW4gdG91Y2ggbW9kZS5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdG91Y2hVaSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG91Y2hVaTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdG91Y2hVaSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3RvdWNoVWkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG4gICAgY29udHJvbENoYW5nZTogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcclxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXHJcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5XHJcbiAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5T3JpZ2luLmVsZW1lbnRSZWYpXHJcbiAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKGNvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IGNoYW5nZXNbJ29wdGlvbnMnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCh2b2lkIDApO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udHJvbENoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIGNsaWNrSGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBpc1NlbGZUcmlnZ2VyID0gWydTUEFOJywgJ0knLCAnSU5QVVQnXS5maW5kKHYgPT4gdiA9PT0gZWxlbWVudC50YWdOYW1lKTtcclxuICAgICAgICBpZiAoIWlzU2VsZlRyaWdnZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG91Y2hVaSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmICYmIHRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vcGVuQm90dG9tU2hlZXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMubWVudVRlbXBsYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlTGFiZWxzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZTogQXJyYXk8Q21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnN0ZXBzLmZvckVhY2goKGl0ZW1zOiBBcnJheTxDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2U+KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBzOiBBcnJheTxDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2U+ID0gaXRlbXMuZmlsdGVyKChpdGVtOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UpID0+IGl0ZW0uYWN0aXZlKTtcclxuICAgICAgICAgICAgbmV4dFZhbHVlLnB1c2goc3RlcHNbMF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExhYmVscyA9IG5leHRWYWx1ZTtcclxuICAgICAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IG5leHRWYWx1ZS5tYXAoKGl0ZW06IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG5leHQ7XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChuZXh0KTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xDaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclZhbHVlKGlzRmlyc3Q6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQpIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0ZpcnN0IHx8ICh0aGlzLm1vZGVsICYmICF0aGlzLm1vZGVsLmxlbmd0aCkgfHwgIXRoaXMubW9kZWwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RlcDEgPSB0aGlzLm9wdGlvbnMubWFwKChvcHRpb246IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcclxuICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBzID0gW3N0ZXAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdGhpcy5tZW51VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQpIHsgdGhpcy5tb2RlbENoYW5nZS5lbWl0KFtdKTsgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRTdGVwcyhpbmRleDogbnVtYmVyLCBvcHRpb25zOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2VbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0ZXA6IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZVtdID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5tYXAoKGl0ZW06IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbFtpbmRleF0gPT09IGl0ZW0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoaXRlbS5jaGlsZHJlbikpXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0uY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICAgICAgc3RlcC5wdXNoKCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWVcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICBpbmRleCArPSAxO1xyXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMubW9kZWwubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0ZXBzKGluZGV4LCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0SGFuZGxlKGV2ZW50OiBFdmVudCwgc3RlcDogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcHNbc3RlcF1baW5kZXhdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RlcHNbc3RlcF0gPSB0aGlzLnN0ZXBzW3N0ZXBdLm1hcCgoaXRlbTogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgKHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgYWN0aXZlOiBpID09PSBpbmRleFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICAvLyByZXNldCBzdGVwc1xyXG4gICAgICAgIHRoaXMuc3RlcHMubGVuZ3RoID0gc3RlcCArIDE7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuc3RlcHNbc3RlcF1baW5kZXhdLmNoaWxkcmVuO1xyXG5cclxuICAgICAgICAvLyBnbyBuZXh0XHJcbiAgICAgICAgaWYgKG5leHQgJiYgQXJyYXkuaXNBcnJheShuZXh0KSAmJiBuZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBjaGFuZ2Ugb24gc2VsZWN0IChwcm9wcylcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlT25TZWxlY3QpIHsgdGhpcy5jaGFuZ2VMYWJlbHMoKTsgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmF0aXZlTmV4dCA9IG5leHQubWFwKChpdGVtOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzLnB1c2gobmF0aXZlTmV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsYXN0IHN0ZXBcclxuICAgICAgICB0aGlzLmNoYW5nZUxhYmVscygpO1xyXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYgJiYgdGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50b3VjaFVpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm90dG9tU2hlZXRSZWYuZGlzbWlzcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q2xlYXJJY29uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLmN1cnJlbnRMYWJlbHMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuQm90dG9tU2hlZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ib3R0b21TaGVldFJlZiA9IHRoaXMuX2JvdHRvbVNoZWV0Lm9wZW4oQ21hdENhc2NhZGVCb3R0b21TaGVldENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNsZWFyVmFsdWUodHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubW9kZWwubWFwKCh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5vcHRpb25zLmZpbHRlcigoaTogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlKSA9PiBpLnZhbHVlID09PSB2KVswXTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoaXRlbS5jaGlsZHJlbikpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gaXRlbS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhYmVscyA9IHZhbC5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0ZXBzKDAsIHRoaXMub3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShCcmVha3BvaW50cy5IYW5kc2V0KS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxyXG4gICAgICAgICAgICBtYXAoKG1hdGNoOiB7IG1hdGNoZXM6IGFueSB9KSA9PiBtYXRjaC5tYXRjaGVzKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtYXRjaGVzOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG91Y2hVaSAhPT0gbWF0Y2hlcyAmJiAhbWF0Y2hlcyAmJiB0aGlzLmJvdHRvbVNoZWV0UmVmICYmIHRoaXMuYm90dG9tU2hlZXRSZWYuZGlzbWlzcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldElucHV0VmFsdWUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnVsbExldmVscykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMubWFwKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlICs9IGAke3ZhbHVlLmxhYmVsfSR7aSA8IHRoaXMuY3VycmVudExhYmVscy5sZW5ndGggLSAxID8gJyAvICcgOiAnJ31gO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmN1cnJlbnRMYWJlbHNbdGhpcy5jdXJyZW50TGFiZWxzLmxlbmd0aCAtIDFdLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8c3BhbiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJjbWF0LWNhc2NhZGUtbGlzdFwiIFtuZ0NsYXNzXT1cInsnb3BlbmVkJzogbWVudVZpc2libGUsICdkaXNhYmxlZCc6IGRpc2FibGVkfVwiXG4gIGNkay1vdmVybGF5LW9yaWdpbj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIEBpZiAobGFiZWwpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3tsYWJlbH19PC9tYXQtbGFiZWw+XG4gICAgfVxuICAgIDxpbnB1dCAoY2xpY2spPVwiY2xpY2tIYW5kbGUoJGV2ZW50KVwiIFt2YWx1ZV09XCJpbnB1dFZhbHVlIHx8ICcnXCIgbWF0SW5wdXQgcmVhZG9ubHlcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJjdXJyZW50TGFiZWxzLmxlbmd0aCA/ICcnIDogcGxhY2Vob2xkZXJcIj5cblxuICAgIEBpZiAoc2hvd0NsZWFySWNvbigpKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKGZhbHNlLCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp4LW1hcmsnXCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKCFzaG93Q2xlYXJJY29uKCkpIHtcbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggW3N2Z0ljb25dPVwiJ21hdF9vdXRsaW5lOmFycm93X2Ryb3BfZG93bidcIj48L21hdC1pY29uPlxuICAgIH1cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvc3Bhbj5cblxuPG5nLXRlbXBsYXRlIGNkay1wb3J0YWwgI21lbnVUZW1wbGF0ZT1cImNka1BvcnRhbFwiPlxuICA8Y21hdC1jYXNjYWRlLW1lbnU+PC9jbWF0LWNhc2NhZGUtbWVudT5cbjwvbmctdGVtcGxhdGU+Il19
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9jYXNjYWRlL2Nhc2NhZGUtbGlzdC9jYXNjYWRlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2Nhc2NhZGUvY2FzY2FkZS1saXN0L2Nhc2NhZGUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFXLGFBQWEsRUFBRSxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRyxPQUFPLEVBQWEsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBSUwsUUFBUSxFQUNSLElBQUksRUFFSixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7OztBQUdsRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFhaEIsTUFBTSxPQUFPLHdCQUF3QjtJQTZCakMsWUFDK0IsU0FBb0IsRUFDdkMsUUFBaUIsRUFDakIsbUJBQXVDLEVBQ3ZDLFlBQTRCLEVBQzVCLGtCQUFxQztRQUpsQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQWpDakQsV0FBVztRQUdKLE9BQUUsR0FBRyxxQkFBcUIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUlwQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFTaEMsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUF1QyxFQUFFLENBQUM7UUFFOUMsaUJBQVksR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMzRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBVyxtQkFBbUIsQ0FBQztRQUVsQyxvQkFBZSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBYTdELHdEQUF3RDtRQUNoRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBa0JqQixpQkFBWSxHQUFXLEtBQUssQ0FBQztRQXVDM0IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQWtCbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUU1QixjQUFTLEdBQWMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQWlDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQXBGcEQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBSUQsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFjO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQ0ksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV6QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUdELElBQUksS0FBSztRQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtZQUN0QixPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFDSSxRQUFRLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsSUFDSSxRQUFRO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUNwRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFtQjtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBTUQsUUFBUTtRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxrQ0FBa0M7WUFDakQsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUMxQixRQUFRLEVBQUU7aUJBQ1YsbUJBQW1CLENBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO2lCQUNqQyxhQUFhLENBQUM7Z0JBQ1g7b0JBQ0ksT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7aUJBQ2xCO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCO2FBQ0osQ0FBQztTQUNULENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQW1DLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3JFLEdBQUcsTUFBTTtvQkFDVCxNQUFNLEVBQUUsS0FBSztpQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBYTtRQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO2FBQU07WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN4RTtJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVDLE9BQU87U0FDVjtRQUNELE1BQU0sT0FBTyxHQUFnQixLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUNwQixJQUFJLEtBQUssRUFBRTtZQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUFFO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRSxHQUFHLE1BQU07WUFDVCxNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUdyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUdELGFBQWE7UUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQ2xELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFpQyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQ3pGLENBQUM7WUFDRyxHQUFHLElBQUk7WUFDUCxNQUFNLEVBQUUsQ0FBQyxLQUFLLEtBQUs7U0FDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSixjQUFjO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUU5QyxVQUFVO1FBQ1YsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzVDLDJCQUEyQjtZQUMzQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQUU7WUFFbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLEdBQUcsSUFBSTtnQkFDUCxNQUFNLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEM7UUFFRCxZQUFZO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWlCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQXdCLENBQUMsRUFBRTtZQUM1RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBYSxFQUFFLE9BQXNDO1FBQ3BFLE1BQU0sSUFBSSxHQUFrQyxFQUFFLENBQUM7UUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWlDLEVBQUUsRUFBRTtZQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDM0IsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDUCxHQUFHLElBQUk7b0JBQ1AsTUFBTSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDLENBQUM7YUFDUDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ1gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNqQixNQUFNLFNBQVMsR0FBdUMsRUFBRSxDQUFDO1FBRXpELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBeUMsRUFBRSxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUF1QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ILFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFO1lBQzdELE9BQU87Z0JBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDcEIsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUdPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQzFFLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVELElBQUksT0FBTyxHQUF1QyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRS9ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEgsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMxRztJQUNMLENBQUM7OEdBcFlRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDBWQVB0QixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLHlFQW1CekUsZ0JBQWdCLDZVQzVEL0Isa3lCQWlCYyxnVUQ2QkEsYUFBYSxvTEFBRSxPQUFPLG9GQUFFLHdCQUF3Qiw0RkFBRSxjQUFjLDJlQUFFLGFBQWEsd0xBQUUsWUFBWSxvSkFBRSxlQUFlOzsyRkFFL0csd0JBQXdCO2tCQVhwQyxTQUFTOytCQUNJLG1CQUFtQixhQUdsQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsMEJBQTBCLEVBQUUsQ0FBQyxpQkFDckUsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQzs7MEJBZ0NwSCxRQUFROzswQkFBSSxJQUFJOzZKQTFCZCxFQUFFO3NCQUZSLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBSXFCLE9BQU87c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFeUMsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNVLGFBQWE7c0JBQWpFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkE4QnZDLE9BQU87c0JBRFYsS0FBSztnQkFVRixXQUFXO3NCQURkLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQWdDRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xyXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheU1vZHVsZSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ2RrUG9ydGFsLCBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIFNlbGYsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENtYXRDYXNjYWRlQm90dG9tU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNjYWRlLWJvdHRvbS1zaGVldC9jYXNjYWRlLWJvdHRvbS1zaGVldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbWF0Q2FzY2FkZU1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jYXNjYWRlLW1lbnUvY2FzY2FkZS1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4uL29wdGlvbnMuaW50ZXJmYWNlJztcclxuXHJcbmxldCBORVhUX0lEID0gMDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWNhc2NhZGUtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FzY2FkZS1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Nhc2NhZGUtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogQ21hdENhc2NhZGVMaXN0Q29tcG9uZW50IH1dLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgZXhwb3J0QXM6ICdjbWF0Q2FzY2FkZUxpc3QnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBOZ0NsYXNzLCBDbWF0Q2FzY2FkZU1lbnVDb21wb25lbnQsIE1hdElucHV0TW9kdWxlLCBPdmVybGF5TW9kdWxlLCBQb3J0YWxNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRDYXNjYWRlTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgLyog57uE5Lu2IGlkICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpZCA9IGBjbWF0LWNhc2NhZGUtbGlzdC0ke05FWFRfSUQrK31gO1xyXG5cclxuICAgIC8vIGRhdGFcclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG9wdGlvbnM6IEFycmF5PENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZT47XHJcbiAgICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGZ1bGxMZXZlbHMgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgY2hhbmdlT25TZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICBAVmlld0NoaWxkKENka092ZXJsYXlPcmlnaW4sIHsgc3RhdGljOiB0cnVlIH0pIG92ZXJsYXlPcmlnaW46IENka092ZXJsYXlPcmlnaW47XHJcbiAgICBAVmlld0NoaWxkKCdtZW51VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtZW51VGVtcGxhdGU6IENka1BvcnRhbDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX2lucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XHJcblxyXG4gICAgLy8gYm90dG9tU2hlZXRcclxuICAgIGJvdHRvbVNoZWV0UmVmOiBNYXRCb3R0b21TaGVldFJlZjtcclxuICAgIHN0ZXBzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBtZW51VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgY3VycmVudExhYmVsczogQXJyYXk8Q21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlczogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB0b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb250cm9sVHlwZTogc3RyaW5nID0gJ2NtYXQtY2FzY2FkZS1saXN0JztcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgICAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxyXG4gICAgICAgIHByaXZhdGUgX2JyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxyXG4gICAgICAgIHByaXZhdGUgX2JvdHRvbVNoZWV0OiBNYXRCb3R0b21TaGVldCxcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGV0aGVyIHRoZSBjYXNjYWRlIGRyb3Bkb3dubGlzdCBVSSBpcyBpbiB0b3VjaCBtb2RlLlxyXG4gICAgcHJpdmF0ZSBfdG91Y2hVaSA9IGZhbHNlO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b3VjaFVpKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3VjaFVpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0b3VjaFVpKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fdG91Y2hVaSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICAgIH1cclxuICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJ+ivt+mAieaLqSc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbENoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF92YWx1ZTogYW55O1xyXG5cclxuICAgIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiAodGhpcy50b3VjaGVkICYmIHRoaXMubmdDb250cm9sPy5pbnZhbGlkKSA/PyBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZXF1aXJlZDsgfVxyXG4gICAgc2V0IHJlcXVpcmVkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICAgIH1cclxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG4gICAgY29udHJvbENoYW5nZTogKHZhbHVlOiBhbnlbXSB8IG51bGwpID0+IGFueSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheVxyXG4gICAgICAgICAgICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheU9yaWdpbi5lbGVtZW50UmVmKVxyXG4gICAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShCcmVha3BvaW50cy5IYW5kc2V0KS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxyXG4gICAgICAgICAgICBtYXAoKG1hdGNoOiB7IG1hdGNoZXM6IGFueSB9KSA9PiBtYXRjaC5tYXRjaGVzKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtYXRjaGVzOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG91Y2hVaSAhPT0gbWF0Y2hlcyAmJiAhbWF0Y2hlcyAmJiB0aGlzLmJvdHRvbVNoZWV0UmVmICYmIHRoaXMuYm90dG9tU2hlZXRSZWYuZGlzbWlzcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZShjb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ29wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMudmFsdWUgJiYgIXRoaXMudmFsdWUubGVuZ3RoKSB8fCAhdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RlcDEgPSB0aGlzLm9wdGlvbnMubWFwKChvcHRpb246IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZSkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcyA9IFtzdGVwMV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2luaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KHZvaWQgMCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGlkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29udGFpbmVyQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xpY2tIYW5kbGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaXNTZWxmVHJpZ2dlciA9IFsnU1BBTicsICdJJywgJ0lOUFVUJ10uZmluZCh2ID0+IHYgPT09IGVsZW1lbnQudGFnTmFtZSk7XHJcbiAgICAgICAgaWYgKCFpc1NlbGZUcmlnZ2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVWkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZiAmJiB0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Cb3R0b21TaGVldCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy5tZW51VGVtcGxhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclZhbHVlKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQpIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBzdGVwMSA9IHRoaXMub3B0aW9ucy5tYXAoKG9wdGlvbjogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlKSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5vcHRpb24sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtzdGVwMV07XHJcblxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNob3dDbGVhckljb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuY2xlYXJhYmxlICYmIHRoaXMuY3VycmVudExhYmVscy5sZW5ndGggPiAwICYmICF0aGlzLmRpc2FibGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RIYW5kbGUoZXZlbnQ6IEV2ZW50LCBzdGVwOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGVwc1tzdGVwXVtpbmRleF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGVwc1tzdGVwXSA9IHRoaXMuc3RlcHNbc3RlcF0ubWFwKChpdGVtOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UsIGk6IG51bWJlcikgPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICBhY3RpdmU6IGkgPT09IGluZGV4XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIC8vIHJlc2V0IHN0ZXBzXHJcbiAgICAgICAgdGhpcy5zdGVwcy5sZW5ndGggPSBzdGVwICsgMTtcclxuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5zdGVwc1tzdGVwXVtpbmRleF0uY2hpbGRyZW47XHJcblxyXG4gICAgICAgIC8vIGdvIG5leHRcclxuICAgICAgICBpZiAobmV4dCAmJiBBcnJheS5pc0FycmF5KG5leHQpICYmIG5leHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNoYW5nZSBvbiBzZWxlY3QgKHByb3BzKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VPblNlbGVjdCkgeyB0aGlzLl9jaGFuZ2VMYWJlbHMoKTsgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmF0aXZlTmV4dCA9IG5leHQubWFwKChpdGVtOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXBzLnB1c2gobmF0aXZlTmV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsYXN0IHN0ZXBcclxuICAgICAgICB0aGlzLl9jaGFuZ2VMYWJlbHMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZiAmJiB0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVWkpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3R0b21TaGVldFJlZi5kaXNtaXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRm9jdXNJbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5pdFN0ZXBzKGluZGV4OiBudW1iZXIsIG9wdGlvbnM6IENtYXRDYXNjYWRlT3B0aW9uc0ludGVyZmFjZVtdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RlcDogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlW10gPSBbXTtcclxuICAgICAgICBvcHRpb25zLm1hcCgoaXRlbTogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2luZGV4XS52YWx1ZSA9PT0gaXRlbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChpdGVtLmNoaWxkcmVuKSlcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gaXRlbS5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGVwLnB1c2goKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHN0ZXApO1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5pdFN0ZXBzKGluZGV4LCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlTGFiZWxzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZTogQXJyYXk8Q21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnN0ZXBzLmZvckVhY2goKGl0ZW1zOiBBcnJheTxDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2U+KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBzOiBBcnJheTxDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2U+ID0gaXRlbXMuZmlsdGVyKChpdGVtOiBDbWF0Q2FzY2FkZU9wdGlvbnNJbnRlcmZhY2UpID0+IGl0ZW0uYWN0aXZlKTtcclxuICAgICAgICAgICAgbmV4dFZhbHVlLnB1c2goc3RlcHNbMF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExhYmVscyA9IG5leHRWYWx1ZTtcclxuICAgICAgICBjb25zdCBuZXh0ID0gbmV4dFZhbHVlLm1hcCgoaXRlbTogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgX29wZW5Cb3R0b21TaGVldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJvdHRvbVNoZWV0UmVmID0gdGhpcy5fYm90dG9tU2hlZXQub3BlbihDbWF0Q2FzY2FkZUJvdHRvbVNoZWV0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudExhYmVscyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9uczogQXJyYXk8Q21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlPiA9IHRoaXMub3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWUubWFwKCh2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBvcHRpb25zLmZpbHRlcigoaTogQ21hdENhc2NhZGVPcHRpb25zSW50ZXJmYWNlKSA9PiBpLnZhbHVlID09PSB2LnZhbHVlKVswXTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoaXRlbS5jaGlsZHJlbikpXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMgPSB2YWwuZmlsdGVyKCh2OiBhbnkpID0+ICEhdik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdFN0ZXBzKDAsIHRoaXMub3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRJbnB1dFZhbHVlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuZnVsbExldmVscykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMubWFwKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgKz0gYCR7dmFsdWUubGFiZWx9JHtpIDwgdGhpcy5jdXJyZW50TGFiZWxzLmxlbmd0aCAtIDEgPyAnIC8gJyA6ICcnfWA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5jdXJyZW50TGFiZWxzW3RoaXMuY3VycmVudExhYmVscy5sZW5ndGggLSAxXS5sYWJlbCA/PyAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHNwYW4gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1jYXNjYWRlLWxpc3RcIiBbbmdDbGFzc109XCJ7J29wZW5lZCc6IG1lbnVWaXNpYmxlLCAnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIlxuICBjZGstb3ZlcmxheS1vcmlnaW4+XG4gIDxpbnB1dCAoY2xpY2spPVwiY2xpY2tIYW5kbGUoJGV2ZW50KVwiIG1hdElucHV0IHJlYWRvbmx5ICNpbnB1dEVsZW1lbnQgW3JlcXVpcmVkXT0ncmVxdWlyZWQnIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCIgW3BsYWNlaG9sZGVyXT1cImN1cnJlbnRMYWJlbHMubGVuZ3RoPjAgPyAnJyA6IHBsYWNlaG9sZGVyXCI+XG5cbiAgQGlmIChzaG93Q2xlYXJJY29uKCkpIHtcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp4LW1hcmsnXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIH1cbiAgQGVsc2Uge1xuICA8bWF0LWljb24gbWF0U3VmZml4IFtzdmdJY29uXT1cIidtYXRfb3V0bGluZTphcnJvd19kcm9wX2Rvd24nXCI+PC9tYXQtaWNvbj5cbiAgfVxuPC9zcGFuPlxuXG48bmctdGVtcGxhdGUgY2RrLXBvcnRhbCAjbWVudVRlbXBsYXRlPVwiY2RrUG9ydGFsXCI+XG4gIDxjbWF0LWNhc2NhZGUtbWVudT48L2NtYXQtY2FzY2FkZS1tZW51PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|