@internetarchive/bookreader 5.0.0-18
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/.eslintrc.js +58 -0
- package/.gitattributes +2 -0
- package/.github/ISSUE_TEMPLATE/bug.md +32 -0
- package/.github/ISSUE_TEMPLATE/feature-request.md +30 -0
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +15 -0
- package/.github/dependabot.yml +8 -0
- package/.github/workflows/node.js.yml +37 -0
- package/.github/workflows/npm-publish.yml +47 -0
- package/.testcaferc.json +5 -0
- package/BookReader/BookReader.css +2983 -0
- package/BookReader/BookReader.js +3 -0
- package/BookReader/BookReader.js.LICENSE.txt +117 -0
- package/BookReader/BookReader.js.map +1 -0
- package/BookReader/bookreader-component-bundle.js +1436 -0
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +27 -0
- package/BookReader/bookreader-component-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -0
- package/BookReader/icons/2up.svg +1 -0
- package/BookReader/icons/advance.svg +3 -0
- package/BookReader/icons/chevron-right.svg +1 -0
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -0
- package/BookReader/icons/fullscreen.svg +1 -0
- package/BookReader/icons/fullscreen_exit.svg +1 -0
- package/BookReader/icons/hamburger.svg +1 -0
- package/BookReader/icons/left-arrow.svg +1 -0
- package/BookReader/icons/magnify-minus.svg +1 -0
- package/BookReader/icons/magnify-plus.svg +1 -0
- package/BookReader/icons/magnify.svg +1 -0
- package/BookReader/icons/pause.svg +1 -0
- package/BookReader/icons/play.svg +1 -0
- package/BookReader/icons/playback-speed.svg +1 -0
- package/BookReader/icons/read-aloud.svg +1 -0
- package/BookReader/icons/review.svg +3 -0
- package/BookReader/icons/thumbnails.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -0
- package/BookReader/images/BRicons.png +0 -0
- package/BookReader/images/BRicons.svg +5 -0
- package/BookReader/images/BRicons_ia.png +0 -0
- package/BookReader/images/back_pages.png +0 -0
- package/BookReader/images/book_bottom_icon.png +0 -0
- package/BookReader/images/book_down_icon.png +0 -0
- package/BookReader/images/book_left_icon.png +0 -0
- package/BookReader/images/book_leftmost_icon.png +0 -0
- package/BookReader/images/book_right_icon.png +0 -0
- package/BookReader/images/book_rightmost_icon.png +0 -0
- package/BookReader/images/book_top_icon.png +0 -0
- package/BookReader/images/book_up_icon.png +0 -0
- package/BookReader/images/books_graphic.svg +1 -0
- package/BookReader/images/booksplit.png +0 -0
- package/BookReader/images/control_pause_icon.png +0 -0
- package/BookReader/images/control_play_icon.png +0 -0
- package/BookReader/images/embed_icon.png +0 -0
- package/BookReader/images/icon-home-ia.png +0 -0
- package/BookReader/images/icon_OL-logo-xs.png +0 -0
- package/BookReader/images/icon_alert-xs.png +0 -0
- package/BookReader/images/icon_book.svg +1 -0
- package/BookReader/images/icon_bookmark.svg +1 -0
- package/BookReader/images/icon_close-pop.png +0 -0
- package/BookReader/images/icon_download.png +0 -0
- package/BookReader/images/icon_gear.svg +1 -0
- package/BookReader/images/icon_hamburger.svg +1 -0
- package/BookReader/images/icon_home.png +0 -0
- package/BookReader/images/icon_home.svg +1 -0
- package/BookReader/images/icon_home_ia.png +0 -0
- package/BookReader/images/icon_indicator.png +0 -0
- package/BookReader/images/icon_info.svg +1 -0
- package/BookReader/images/icon_one_page.svg +1 -0
- package/BookReader/images/icon_pause.svg +1 -0
- package/BookReader/images/icon_play.svg +1 -0
- package/BookReader/images/icon_playback-rate.svg +1 -0
- package/BookReader/images/icon_return.png +0 -0
- package/BookReader/images/icon_search_button.svg +1 -0
- package/BookReader/images/icon_share.svg +1 -0
- package/BookReader/images/icon_skip-ahead.svg +1 -0
- package/BookReader/images/icon_skip-back.svg +2 -0
- package/BookReader/images/icon_speaker.svg +1 -0
- package/BookReader/images/icon_speaker_open.svg +1 -0
- package/BookReader/images/icon_thumbnails.svg +1 -0
- package/BookReader/images/icon_toc.svg +1 -0
- package/BookReader/images/icon_two_pages.svg +1 -0
- package/BookReader/images/icon_zoomer.png +0 -0
- package/BookReader/images/loading.gif +0 -0
- package/BookReader/images/logo_icon.png +0 -0
- package/BookReader/images/marker_chap-off.png +0 -0
- package/BookReader/images/marker_chap-off.svg +1 -0
- package/BookReader/images/marker_chap-off_ia.png +0 -0
- package/BookReader/images/marker_chap-on.png +0 -0
- package/BookReader/images/marker_chap-on.svg +1 -0
- package/BookReader/images/marker_srch-on.svg +1 -0
- package/BookReader/images/marker_srchchap-off.png +0 -0
- package/BookReader/images/marker_srchchap-on.png +0 -0
- package/BookReader/images/nav_control-dn.png +0 -0
- package/BookReader/images/nav_control-dn_ia.png +0 -0
- package/BookReader/images/nav_control-up.png +0 -0
- package/BookReader/images/nav_control-up_ia.png +0 -0
- package/BookReader/images/nav_control.png +0 -0
- package/BookReader/images/one_page_mode_icon.png +0 -0
- package/BookReader/images/paper-badge.png +0 -0
- package/BookReader/images/print_icon.png +0 -0
- package/BookReader/images/progressbar.gif +0 -0
- package/BookReader/images/right_edges.png +0 -0
- package/BookReader/images/slider.png +0 -0
- package/BookReader/images/slider_ia.png +0 -0
- package/BookReader/images/thumbnail_mode_icon.png +0 -0
- package/BookReader/images/transparent.png +0 -0
- package/BookReader/images/two_page_mode_icon.png +0 -0
- package/BookReader/images/zoom_in_icon.png +0 -0
- package/BookReader/images/zoom_out_icon.png +0 -0
- package/BookReader/jquery-1.10.1.js +2 -0
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +2 -0
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -0
- package/BookReader/plugins/plugin.autoplay.js +2 -0
- package/BookReader/plugins/plugin.autoplay.js.map +1 -0
- package/BookReader/plugins/plugin.chapters.js +2 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +2 -0
- package/BookReader/plugins/plugin.iframe.js.map +1 -0
- package/BookReader/plugins/plugin.mobile_nav.js +2 -0
- package/BookReader/plugins/plugin.mobile_nav.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +2 -0
- package/BookReader/plugins/plugin.resume.js.map +1 -0
- package/BookReader/plugins/plugin.search.js +2 -0
- package/BookReader/plugins/plugin.search.js.map +1 -0
- package/BookReader/plugins/plugin.text_selection.js +2 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +3 -0
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +27 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -0
- package/BookReader/plugins/plugin.url.js +2 -0
- package/BookReader/plugins/plugin.url.js.map +1 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js +2 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -0
- package/BookReaderDemo/BookReaderDemo.css +41 -0
- package/BookReaderDemo/BookReaderJSAdvanced.js +115 -0
- package/BookReaderDemo/BookReaderJSAutoplay.js +56 -0
- package/BookReaderDemo/BookReaderJSSimple.js +55 -0
- package/BookReaderDemo/IIIFBookReader.js +207 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +1 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +1 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +1 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +1 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/bookreader-template-bundle.js +7178 -0
- package/BookReaderDemo/demo-advanced.html +32 -0
- package/BookReaderDemo/demo-autoplay.html +38 -0
- package/BookReaderDemo/demo-embed-iframe-src.html +84 -0
- package/BookReaderDemo/demo-embed.html +26 -0
- package/BookReaderDemo/demo-fullscreen-mobile.html +36 -0
- package/BookReaderDemo/demo-fullscreen.html +33 -0
- package/BookReaderDemo/demo-iiif.html +34 -0
- package/BookReaderDemo/demo-iiif.js +26 -0
- package/BookReaderDemo/demo-internetarchive.html +74 -0
- package/BookReaderDemo/demo-multiple.html +43 -0
- package/BookReaderDemo/demo-preview-pages.html +1092 -0
- package/BookReaderDemo/demo-simple.html +34 -0
- package/BookReaderDemo/demo-vendor-fullscreen.html +36 -0
- package/BookReaderDemo/immersion-1up.html +64 -0
- package/BookReaderDemo/immersion-mode.html +35 -0
- package/BookReaderDemo/toggle_controls.html +53 -0
- package/BookReaderDemo/view_mode.html +39 -0
- package/BookReaderDemo/viewmode-cycle.html +41 -0
- package/CHANGELOG.md +540 -0
- package/CONTRIBUTING.md +7 -0
- package/LICENSE +661 -0
- package/README.md +205 -0
- package/babel.config.js +18 -0
- package/codecov.yml +17 -0
- package/index.html +31 -0
- package/jsconfig.json +14 -0
- package/karma.conf.js +23 -0
- package/package.json +129 -0
- package/screenshot.png +0 -0
- package/scripts/postversion.js +10 -0
- package/scripts/preversion.js +14 -0
- package/scripts/version.js +26 -0
- package/src/BookNavigator/BookModel.js +14 -0
- package/src/BookNavigator/BookNavigator.js +468 -0
- package/src/BookNavigator/assets/book-loader.js +27 -0
- package/src/BookNavigator/assets/bookmark-colors.js +15 -0
- package/src/BookNavigator/assets/button-base.js +61 -0
- package/src/BookNavigator/assets/icon_checkmark.js +6 -0
- package/src/BookNavigator/assets/icon_close.js +3 -0
- package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
- package/src/BookNavigator/assets/icon_sort_desc.js +5 -0
- package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
- package/src/BookNavigator/assets/icon_volumes.js +11 -0
- package/src/BookNavigator/bookmarks/bookmark-button.js +64 -0
- package/src/BookNavigator/bookmarks/bookmark-edit.js +215 -0
- package/src/BookNavigator/bookmarks/bookmarks-list.js +285 -0
- package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +53 -0
- package/src/BookNavigator/bookmarks/ia-bookmarks.js +500 -0
- package/src/BookNavigator/br-fullscreen-mgr.js +83 -0
- package/src/BookNavigator/delete-modal-actions.js +49 -0
- package/src/BookNavigator/downloads/downloads-provider.js +76 -0
- package/src/BookNavigator/downloads/downloads.js +138 -0
- package/src/BookNavigator/search/a-search-result.js +55 -0
- package/src/BookNavigator/search/search-provider.js +180 -0
- package/src/BookNavigator/search/search-results.js +360 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +93 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
- package/src/BookNavigator/volumes/volumes-provider.js +83 -0
- package/src/BookNavigator/volumes/volumes.js +178 -0
- package/src/BookReader/BookModel.js +518 -0
- package/src/BookReader/DebugConsole.js +54 -0
- package/src/BookReader/ImageCache.js +116 -0
- package/src/BookReader/Mode1Up.js +90 -0
- package/src/BookReader/Mode1UpLit.js +434 -0
- package/src/BookReader/Mode2Up.js +1372 -0
- package/src/BookReader/ModeSmoothZoom.js +177 -0
- package/src/BookReader/ModeThumb.js +336 -0
- package/src/BookReader/Navbar/Navbar.js +339 -0
- package/src/BookReader/PageContainer.js +120 -0
- package/src/BookReader/ReduceSet.js +26 -0
- package/src/BookReader/Toolbar/Toolbar.js +384 -0
- package/src/BookReader/events.js +20 -0
- package/src/BookReader/options.js +320 -0
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/classes.js +36 -0
- package/src/BookReader/utils.js +240 -0
- package/src/BookReader.js +2546 -0
- package/src/BookReaderComponent/BookReaderComponent.js +112 -0
- package/src/ItemNavigator/ItemNavigator.js +376 -0
- package/src/ItemNavigator/providers/sharing.js +33 -0
- package/src/assets/icons/1up.svg +12 -0
- package/src/assets/icons/2up.svg +15 -0
- package/src/assets/icons/advance.svg +26 -0
- package/src/assets/icons/chevron-right.svg +1 -0
- package/src/assets/icons/close-circle-dark.svg +1 -0
- package/src/assets/icons/close-circle.svg +1 -0
- package/src/assets/icons/fullscreen.svg +17 -0
- package/src/assets/icons/fullscreen_exit.svg +17 -0
- package/src/assets/icons/hamburger.svg +15 -0
- package/src/assets/icons/left-arrow.svg +12 -0
- package/src/assets/icons/magnify-minus.svg +16 -0
- package/src/assets/icons/magnify-plus.svg +17 -0
- package/src/assets/icons/magnify.svg +15 -0
- package/src/assets/icons/pause.svg +23 -0
- package/src/assets/icons/play.svg +22 -0
- package/src/assets/icons/playback-speed.svg +34 -0
- package/src/assets/icons/read-aloud.svg +22 -0
- package/src/assets/icons/review.svg +22 -0
- package/src/assets/icons/thumbnails.svg +17 -0
- package/src/assets/icons/volume-full.svg +22 -0
- package/src/assets/images/BRicons.png +0 -0
- package/src/assets/images/BRicons.svg +94 -0
- package/src/assets/images/BRicons_ia.png +0 -0
- package/src/assets/images/back_pages.png +0 -0
- package/src/assets/images/book_bottom_icon.png +0 -0
- package/src/assets/images/book_down_icon.png +0 -0
- package/src/assets/images/book_left_icon.png +0 -0
- package/src/assets/images/book_leftmost_icon.png +0 -0
- package/src/assets/images/book_right_icon.png +0 -0
- package/src/assets/images/book_rightmost_icon.png +0 -0
- package/src/assets/images/book_top_icon.png +0 -0
- package/src/assets/images/book_up_icon.png +0 -0
- package/src/assets/images/books_graphic.svg +177 -0
- package/src/assets/images/booksplit.png +0 -0
- package/src/assets/images/control_pause_icon.png +0 -0
- package/src/assets/images/control_play_icon.png +0 -0
- package/src/assets/images/embed_icon.png +0 -0
- package/src/assets/images/icon-home-ia.png +0 -0
- package/src/assets/images/icon_OL-logo-xs.png +0 -0
- package/src/assets/images/icon_alert-xs.png +0 -0
- package/src/assets/images/icon_book.svg +12 -0
- package/src/assets/images/icon_bookmark.svg +12 -0
- package/src/assets/images/icon_close-pop.png +0 -0
- package/src/assets/images/icon_download.png +0 -0
- package/src/assets/images/icon_gear.svg +14 -0
- package/src/assets/images/icon_hamburger.svg +20 -0
- package/src/assets/images/icon_home.png +0 -0
- package/src/assets/images/icon_home.svg +21 -0
- package/src/assets/images/icon_home_ia.png +0 -0
- package/src/assets/images/icon_indicator.png +0 -0
- package/src/assets/images/icon_info.svg +11 -0
- package/src/assets/images/icon_one_page.svg +8 -0
- package/src/assets/images/icon_pause.svg +1 -0
- package/src/assets/images/icon_play.svg +1 -0
- package/src/assets/images/icon_playback-rate.svg +15 -0
- package/src/assets/images/icon_return.png +0 -0
- package/src/assets/images/icon_search_button.svg +8 -0
- package/src/assets/images/icon_share.svg +9 -0
- package/src/assets/images/icon_skip-ahead.svg +6 -0
- package/src/assets/images/icon_skip-back.svg +13 -0
- package/src/assets/images/icon_speaker.svg +18 -0
- package/src/assets/images/icon_speaker_open.svg +10 -0
- package/src/assets/images/icon_thumbnails.svg +12 -0
- package/src/assets/images/icon_toc.svg +5 -0
- package/src/assets/images/icon_two_pages.svg +9 -0
- package/src/assets/images/icon_zoomer.png +0 -0
- package/src/assets/images/loading.gif +0 -0
- package/src/assets/images/logo_icon.png +0 -0
- package/src/assets/images/marker_chap-off.png +0 -0
- package/src/assets/images/marker_chap-off.svg +11 -0
- package/src/assets/images/marker_chap-off_ia.png +0 -0
- package/src/assets/images/marker_chap-on.png +0 -0
- package/src/assets/images/marker_chap-on.svg +11 -0
- package/src/assets/images/marker_srch-on.svg +11 -0
- package/src/assets/images/marker_srchchap-off.png +0 -0
- package/src/assets/images/marker_srchchap-on.png +0 -0
- package/src/assets/images/nav_control-dn.png +0 -0
- package/src/assets/images/nav_control-dn_ia.png +0 -0
- package/src/assets/images/nav_control-up.png +0 -0
- package/src/assets/images/nav_control-up_ia.png +0 -0
- package/src/assets/images/nav_control.png +0 -0
- package/src/assets/images/one_page_mode_icon.png +0 -0
- package/src/assets/images/paper-badge.png +0 -0
- package/src/assets/images/print_icon.png +0 -0
- package/src/assets/images/progressbar.gif +0 -0
- package/src/assets/images/right_edges.png +0 -0
- package/src/assets/images/slider.png +0 -0
- package/src/assets/images/slider_ia.png +0 -0
- package/src/assets/images/thumbnail_mode_icon.png +0 -0
- package/src/assets/images/transparent.png +0 -0
- package/src/assets/images/two_page_mode_icon.png +0 -0
- package/src/assets/images/zoom_in_icon.png +0 -0
- package/src/assets/images/zoom_out_icon.png +0 -0
- package/src/css/BookReader.scss +89 -0
- package/src/css/_BRBookmarks.scss +29 -0
- package/src/css/_BRComponent.scss +13 -0
- package/src/css/_BRfloat.scss +197 -0
- package/src/css/_BRicon.scss +48 -0
- package/src/css/_BRmain.scss +251 -0
- package/src/css/_BRnav.scss +382 -0
- package/src/css/_BRpages.scss +139 -0
- package/src/css/_BRsearch.scss +226 -0
- package/src/css/_BRtoolbar.scss +84 -0
- package/src/css/_BRvendor.scss +5 -0
- package/src/css/_MobileNav.scss +194 -0
- package/src/css/_TextSelection.scss +32 -0
- package/src/css/_colorbox.scss +52 -0
- package/src/css/_controls.scss +244 -0
- package/src/css/_icons.scss +121 -0
- package/src/dragscrollable-br.js +261 -0
- package/src/jquery-wrapper.js +4 -0
- package/src/plugins/plugin.archive_analytics.js +86 -0
- package/src/plugins/plugin.autoplay.js +129 -0
- package/src/plugins/plugin.chapters.js +251 -0
- package/src/plugins/plugin.iframe.js +48 -0
- package/src/plugins/plugin.mobile_nav.js +287 -0
- package/src/plugins/plugin.resume.js +68 -0
- package/src/plugins/plugin.text_selection.js +291 -0
- package/src/plugins/plugin.url.js +198 -0
- package/src/plugins/plugin.vendor-fullscreen.js +247 -0
- package/src/plugins/search/plugin.search.js +439 -0
- package/src/plugins/search/view.js +440 -0
- package/src/plugins/tts/AbstractTTSEngine.js +242 -0
- package/src/plugins/tts/FestivalTTSEngine.js +169 -0
- package/src/plugins/tts/PageChunk.js +107 -0
- package/src/plugins/tts/PageChunkIterator.js +163 -0
- package/src/plugins/tts/WebTTSEngine.js +352 -0
- package/src/plugins/tts/plugin.tts.js +335 -0
- package/src/plugins/tts/tooltip_dict.js +15 -0
- package/src/plugins/tts/utils.js +91 -0
- package/src/util/browserSniffing.js +30 -0
- package/src/util/debouncer.js +26 -0
- package/src/util/docCookies.js +67 -0
- package/src/util/strings.js +34 -0
- package/tests/BookReader/BookModel.test.js +312 -0
- package/tests/BookReader/BookReaderPublicFunctions.test.js +164 -0
- package/tests/BookReader/DebugConsole.test.js +25 -0
- package/tests/BookReader/ImageCache.test.js +150 -0
- package/tests/BookReader/Mode1UpLit.test.js +87 -0
- package/tests/BookReader/Mode2Up.test.js +245 -0
- package/tests/BookReader/ModeSmoothZoom.test.js +149 -0
- package/tests/BookReader/Navbar/Navbar.test.js +169 -0
- package/tests/BookReader/PageContainer.test.js +187 -0
- package/tests/BookReader/ReduceSet.test.js +38 -0
- package/tests/BookReader/Toolbar/Toolbar.test.js +26 -0
- package/tests/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
- package/tests/BookReader/utils/classes.test.js +88 -0
- package/tests/BookReader/utils.test.js +136 -0
- package/tests/BookReader.options.test.js +39 -0
- package/tests/BookReader.test.js +301 -0
- package/tests/e2e/README.md +75 -0
- package/tests/e2e/autoplay.test.js +13 -0
- package/tests/e2e/base.test.js +35 -0
- package/tests/e2e/helpers/base.js +263 -0
- package/tests/e2e/helpers/debug.js +13 -0
- package/tests/e2e/helpers/desktopSearch.js +72 -0
- package/tests/e2e/helpers/mobileSearch.js +85 -0
- package/tests/e2e/helpers/mockSearch.js +93 -0
- package/tests/e2e/helpers/rightToLeft.js +29 -0
- package/tests/e2e/ia-production/ia-prod-base.js +17 -0
- package/tests/e2e/models/BookReader.js +11 -0
- package/tests/e2e/models/Navigation.js +56 -0
- package/tests/e2e/rightToLeft.test.js +20 -0
- package/tests/e2e/viewmode.test.js +37 -0
- package/tests/karma/BookNavigator/book-navigator.test.js +180 -0
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +133 -0
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +222 -0
- package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +64 -0
- package/tests/karma/BookNavigator/downloads/downloads.test.js +54 -0
- package/tests/karma/BookNavigator/search/search-provider.test.js +23 -0
- package/tests/karma/BookNavigator/search/search-results.test.js +240 -0
- package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +40 -0
- package/tests/karma/BookNavigator/visual-adjustments.test.js +201 -0
- package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +160 -0
- package/tests/karma/BookNavigator/volumes/volumes.test.js +98 -0
- package/tests/plugins/plugin.archive_analytics.test.js +23 -0
- package/tests/plugins/plugin.autoplay.test.js +52 -0
- package/tests/plugins/plugin.chapters.test.js +130 -0
- package/tests/plugins/plugin.iframe.test.js +42 -0
- package/tests/plugins/plugin.mobile_nav.test.js +66 -0
- package/tests/plugins/plugin.resume.test.js +98 -0
- package/tests/plugins/plugin.text_selection.test.js +193 -0
- package/tests/plugins/plugin.url.test.js +129 -0
- package/tests/plugins/plugin.vendor-fullscreen.test.js +65 -0
- package/tests/plugins/search/plugin.search.test.js +173 -0
- package/tests/plugins/search/plugin.search.view.test.js +106 -0
- package/tests/plugins/tts/AbstractTTSEngine.test.js +153 -0
- package/tests/plugins/tts/FestivalTTSEngine.test.js +59 -0
- package/tests/plugins/tts/PageChunk.test.js +57 -0
- package/tests/plugins/tts/PageChunkIterator.test.js +179 -0
- package/tests/plugins/tts/WebTTSEngine.test.js +126 -0
- package/tests/plugins/tts/utils.test.js +133 -0
- package/tests/util/browserSniffing.test.js +56 -0
- package/tests/util/docCookies.test.js +15 -0
- package/tests/util/strings.test.js +63 -0
- package/tests/utils.js +80 -0
- package/webpack.config.js +85 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"BookReader.js","mappings":";sUAiBA,SAAUA,GA6CR,IAAIC,EAAmB,SAAUC,EAAkBC,GAUjD,IAFA,IAAIC,EAASF,EAAiBG,MAAM,KAChCC,EAAM,IAAIC,MACLC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IACjCF,EAAII,KAAKN,EAAOI,GAAKL,GAEvB,OAAOG,EAAIK,KAAK,MAGdC,EAAW,SAASC,GAEtB,IAAIC,EACAC,EACJ,QAA6B,IAAlBF,EAAMG,QACfF,EAAID,EAAMG,QACVD,EAAIF,EAAMI,aAEP,QAA6B,IAAlBJ,EAAMK,QACpBJ,EAAID,EAAMK,QACVH,EAAIF,EAAMM,aAEP,QAAmC,IAAxBN,EAAMO,cACpBN,EAAID,EAAMO,cAAc,GAAGC,MAC3BN,EAAIF,EAAMO,cAAc,GAAGE,WAExB,QAAmC,IAAxBT,EAAMU,cAA+B,CACnD,IAAIC,EAAM,GACV,IAAK,IAAMhB,KAAKK,EACdW,GAAO,KAAOhB,EAAI,KAAOK,EAAML,GAEjCiB,QAAQC,MAAM,gCAAkCb,EAAMc,KAAO,WAAaH,aAE5B,IAAhCX,EAAMU,cAAcP,SAClCF,EAAID,EAAMU,cAAcP,QACxBD,EAAIF,EAAMU,cAAcN,cAEsB,IAAhCJ,EAAMU,cAAcL,SAClCJ,EAAID,EAAMU,cAAcL,QACxBH,EAAIF,EAAMU,cAAcJ,cAE4B,IAAtCN,EAAMU,cAAcH,gBAClCN,EAAID,EAAMU,cAAcH,cAAc,GAAGC,MACzCN,EAAIF,EAAMU,cAAcH,cAAc,GAAGE,OAG3C,MAAO,CAACM,KAAMd,EAAGe,IAAId,IAGvBf,EAAE8B,GAAGC,eAAiB,SAAUC,GAE9B,IAAIC,EAAmBjC,EAAEkC,MAErBC,EAAWnC,EAAEoC,OACf,CACEC,aAAa,UACbC,uBAAuB,EACvBC,gBAAgB,EAChBC,UAAW,uBACXC,aAAc,sBACdC,QAAS,mBACTC,gBAAiB,EACjBC,UAAW,MACXC,cAAc,GACdb,GAAW,IAEfG,EAASK,UAAYvC,EAAiBkC,EAASK,UAAWL,EAASS,WACnET,EAASM,aAAexC,EAAiBkC,EAASM,aAAcN,EAASS,WAGzE,IAKIE,EALAC,EAAc,WAEhB,SADuB,iBAAkBC,YAAc,qBAAsBA,OAAOC,YAMlFC,EAAa,CACfC,iBAAmB,SAAStC,GAC1B,QAAIkC,OAGAlC,EAAMuC,MAAQ,IACpBvC,EAAMwC,KAAKf,uBAAyBzB,EAAMyC,QAAUpB,QAIlDrB,EAAMwC,KAAKE,WAAa3C,EAASC,GAEjCA,EAAMwC,KAAKG,UAAY3C,EAAMwC,KAAKE,WAElCtB,EACGwB,KAAKtB,EAASM,aAAc5B,EAAMwC,KAAMH,EAAWQ,qBAMtDZ,EAA2B,SAASa,GAClCA,EAAEN,KAAOxC,EAAMwC,KACfH,EAAWU,eAAeD,IAE5B3D,EAAE6D,KAAK1B,EAASO,QAAQrC,MAAM,MAAM,SAASyD,EAAKC,GAChD9B,EAAiB+B,IAAI,GAAGC,iBAAiBF,EAAKjB,GAA0B,MAGtEjC,EAAMwC,KAAKd,gBACb1B,EAAM0B,kBACC,QAFT,IAKFmB,oBAAsB,SAAS7C,GAE7B,GAAIkC,IAAiB,OAAO,EAE5B,IAAImB,EAAKtD,EAASC,GAGdsD,EAAgBD,EAAGtC,KAAOf,EAAMwC,KAAKG,UAAU5B,KAA/CuC,EACID,EAAGrC,IAAMhB,EAAMwC,KAAKG,UAAU3B,IAElCuC,EAAevD,EAAMwC,KAAKgB,WAW9B,OAVIxD,EAAMwC,KAAKR,eACbuB,EAAepE,EAAEgD,SAGnBoB,EAAaE,WAAYF,EAAaE,aAAeH,GACrDC,EAAaG,UAAWH,EAAaG,YAAcJ,GAGnDtD,EAAMwC,KAAKG,UAAYU,EAEnBrD,EAAMwC,KAAKd,gBACb1B,EAAM0B,kBACC,QAFT,GAKFqB,eAAiB,SAAS/C,GAGxB,GAAIkC,IAAiB,OAAO,EAE5Bd,EACGuC,OAAOrC,EAASM,cAGhB+B,OAAOrC,EAASO,SAKnB1C,EAAE6D,KAAK1B,EAASO,QAAQrC,MAAM,MAAM,SAASyD,EAAKC,GAChD9B,EAAiB+B,IAAI,GAAGS,oBAAoBV,EAAKjB,GAA0B,MAI7E,IAAIqB,EAAQ,CAACvC,KAAM8C,KAAKC,IAAI9D,EAAMwC,KAAKG,UAAU5B,KAAOf,EAAMwC,KAAKE,WAAW3B,MAC5EC,IAAK6C,KAAKC,IAAI9D,EAAMwC,KAAKG,UAAU3B,IAAMhB,EAAMwC,KAAKE,WAAW1B,MAC7D+C,EAAWF,KAAKG,IAAIV,EAAMvC,KAAMuC,EAAMtC,KAG1C,OAAIhB,EAAMwC,KAAKd,gBAAkBqC,EAAWzC,EAASQ,iBACnD9B,EAAM0B,iBACN1B,EAAMiE,2BACNjE,EAAMkE,mBACC,QAJT,IAUJ,OAAO7C,KAAK2B,MAAK,WAEf,IAAIR,EAAO,CAACgB,WAAarE,EAAEkC,MACzBI,sBAAwBH,EAASG,sBACjCC,eAAiBJ,EAASI,eAC1BM,aAAeV,EAASU,cAE1B7C,EAAEkC,MAAM8C,KAAK7C,EAASE,cACpBoB,KAAKtB,EAASK,UAAWa,EAAMH,EAAWC,sBAKhDnD,EAAE8B,GAAGmD,qBAAuB,SAAUrC,GAGpC,YAFyB,IAAdA,IACTA,EAAY,OACPV,KAAK2B,MAAK,WACf7D,EAAEkF,UAAUF,KAAK,KAAKG,UAAUX,OAAO5B,OA/O7C,wBCHO,SAASwC,EAAmBC,EAAWC,EAAYC,EAAeC,EAASC,EAAUC,GAE1F,IAAe5D,EAAX6D,GAAW7D,EAIZuD,EAAUO,UAAUN,GAHd,WACL,OAAOxD,EAAG+D,MAAMH,EAAYxD,MAAO4D,aAIvCC,OAAOC,eAAeR,EAAQI,UAAWH,EAAU,CACjDzB,IADiD,WACzC,OAAO2B,GACfM,IAFiD,SAE7CC,GAIFb,EAAUO,UAAUN,GAAc,WAChC,IAAMa,EAAUjE,gBAAgBmD,EAAYE,EAAcrD,MAAQA,KAClE,OAAOgE,EAAWL,MAAMM,EAASL,YAEnCH,EAAUO,yBC/BHE,EAAS,CAGpBC,eAAgB,iBAChBC,SAAU,WACVC,KAAM,OACNC,OAAQ,SAERC,WAAY,aAEZC,kBAAmB,oBACnBC,QAAS,UACTC,OAAQ,SACR,oBAAqB,oBACrB,oBAAqB,oBAErB,oBAAqB,oBACrBC,cAAe,iMCXV,IAAMC,EAAb,WAIE,WAAYC,gGAAI,SACd7E,KAAK6E,GAAKA,EAGV7E,KAAK8E,MAAQ,KAEb9E,KAAK+E,KAAO,KAEZ/E,KAAKgF,WAAa,KAGlBhF,KAAKiF,gBAAkB,CACrB,YAGFjF,KAAKkF,gBAAkB,CACrB,YAAa,aAAc,UAAW,WAAY,QAAS,QAAS,iBApB1E,uCAwBE,SAAWC,GACT,IAAMC,EAASpF,KAAK6E,GAAG/E,QAAQuF,SAASF,GACxC,OAAKC,EAAOE,QACRF,EAAOG,SACT,cAAcH,EAAOG,SAASvF,KAAK6E,IAAnC,SAEF,4CAC0BO,EAAOI,UADjC,oBACsDJ,EAAOK,MAD7D,6CAE4BL,EAAOM,cAFnC,mDAG4BN,EAAOK,MAHnC,uCAJ8B,KA1BlC,6BAuCE,WAAkB,WAChB,MAAO,CACL,WACA,YACA,UACA,UACA,YACA,WACA,UACA,SACA,cACAE,KAAI,SAACC,GAAD,OACJ,EAAKC,WAAWD,MACfnH,KAAK,MApDZ,iCAwDE,WAAsB,WACZoG,EAAO7E,KAAP6E,GACFiB,EAAkBjB,EAAG/E,QAAQuF,SAASU,SACtCC,EAAY,CAAC,CACjBJ,KAAMf,EAAGoB,aACTT,UAAW,QACXU,MAAO,iBACN,CACDN,KAAMf,EAAGsB,aACTX,UAAW,QACXU,MAAO,iBACN,CACDN,KAAMf,EAAGuB,eACTZ,UAAW,QACXU,MAAO,mBACNG,QAAO,SAACT,GAAD,OACPE,EAAgBQ,cAAcC,SAASX,EAAKA,SAEzCY,EAAgBR,EAAUL,KAAI,SAACc,GAAD,OAAOA,EAAEb,QAEzCE,EAAgBQ,cAAcC,SAAS1B,EAAGe,OAC5Cf,EAAG6B,WAAWF,EAAc,IAK9B,IADA,IAAMG,EAAmBH,EAAcI,QAAQ/B,EAAGe,MACzCtH,EAAI,EAAGA,GAAKqI,EAAkBrI,IACrCkI,EAAchI,KAAKgI,EAAcK,SAG/Bb,EAAUzH,OAAS,GACrByB,KAAK+E,KAAKjC,KAAV,WAAmBgD,EAAgBN,YAAasB,SAGlD9G,KAAK6E,GAAGtD,KAAK2C,EAAOE,UAAU,WAC5B,IAAM2C,EAAU,EAAKhC,KAAKjC,KAAV,WAAmBgD,EAAgBN,YAChDwB,IAAI,2BACJC,GAAG,SAAS,SAACxF,GACZ,IAAMyF,EAAaV,EAAcK,QAC3BM,EAAcnB,EAAUlD,MAAK,SAAC2D,GAAD,OAAOA,EAAEb,OAASsB,KAC/CE,EAAepB,EAAUlD,MAAK,SAAC2D,GAAD,OAAOA,EAAEb,OAASY,EAAc,MAEpEA,EAAchI,KAAK0I,GACnBrC,EAAG2B,cAAgBA,EACnB,EAAKa,qBAAqBvJ,EAAE2D,EAAE6F,eAAgBF,EAAa5B,UAAW4B,EAAalB,OACnFrB,EAAG6B,WAAWS,EAAYvB,SAExB2B,EAAwBvB,EAAUlD,MAAK,SAAC2D,GAAD,OAAOA,EAAEb,OAASY,EAAc,MAC7E,EAAKa,qBACHN,EACAQ,EAAsB/B,UACtB+B,EAAsBrB,YA3G9B,kCAmHE,SAAqBa,EAASS,EAAWC,GACvCV,EACGW,KAAK,QAASD,GACd3E,KAAK,SACL6E,cACAC,SAJH,oBAIyBJ,IACtBK,MACA/E,KAAK,YACLgF,KAAKL,KA3HZ,kCAiIE,WAEmC,eAA7BzH,KAAK6E,GAAG/E,QAAQiI,WACd/H,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,eAAiB,IAClDlI,KAAKmI,4BAELnI,KAAKoI,+BAvIb,uCAgJE,WACEpI,KAAKiF,gBAAgBoD,SAAQ,SAACC,GAC5B,IAAMC,EAAUvF,SAASwF,cAAT,qBAAqCF,IACjDC,GAASA,EAAQE,UAAU3B,OAAO,WAExC9G,KAAKkF,gBAAgBmD,SAAQ,SAACC,GAC5B,IAAMC,EAAUvF,SAASwF,cAAT,qBAAqCF,IACjDC,GAASA,EAAQE,UAAUC,IAAI,aAvJzC,uCA+JE,WACE1I,KAAKkF,gBAAgBmD,SAAQ,SAACC,GAC5B,IAAMC,EAAUvF,SAASwF,cAAT,qBAAqCF,IACjDC,GAASA,EAAQE,UAAU3B,OAAO,WAExC9G,KAAKiF,gBAAgBoD,SAAQ,SAACC,GAC5B,IAAMC,EAAUvF,SAASwF,cAAT,qBAAqCF,IACjDC,GAASA,EAAQE,UAAUC,IAAI,aAtKzC,kBA8KE,WAAO,WACG7D,EAAO7E,KAAP6E,GACaqB,EAAUrB,EAAG/E,QAA1B6I,YACFC,EAA+B,OAAvB/D,EAAGgE,gBACXC,EAAeF,EAAQ,iBAAmB,iBAC1CG,EAAgBH,EAAQ,iBAAmB,iBAEjD5I,KAAK6E,GAAG/E,QAAQuF,SAAhB,SAAqCG,UAArC,oBAA8DsD,GAC9D9I,KAAK6E,GAAG/E,QAAQuF,SAAhB,UAAsCG,UAAtC,qBAAgEuD,GAEhElE,EAAGmD,KAAKgB,UAAYhJ,KAAK8E,MAAQhH,EAAE,gCACnC+G,EAAGmD,KAAKiB,OAASjJ,KAAK+E,KAAOjH,EAAE,+CAAD,OAEtBoI,EAAQ,2BAAH,OAA8BA,EAA9B,UAA8C,GAF7B,0XAYlBlG,KAAKkJ,kBAZa,0DAiB9BlJ,KAAK8E,MAAMqE,OAAOnJ,KAAK+E,MACvBF,EAAGmD,KAAKoB,IAAID,OAAOnJ,KAAK8E,OAExB,IAAMuE,EAAUrJ,KAAK8E,MAAMhC,KAAK,YAAYwG,OAAO,CACjDC,SAAS,EACTC,IAAK,EACL7G,IAAKkC,EAAG4E,cAAgB,EACxBC,MAAO7E,EAAG8E,eACVC,MAAO,QAsBT,OAnBAP,EAAQpC,GAAG,SAAS,SAACtI,EAAOkL,GAE1B,OADA,EAAKC,iBAAiBD,EAAGH,QAClB,KAGTL,EAAQpC,GAAG,eAAe,SAACtI,EAAOkL,GAQhC,OAPA,EAAKC,iBAAiBD,EAAGH,OAErBL,EAAQlI,KAAK,iBACfkI,EAAQlI,KAAK,iBAAiB,GAE9B0D,EAAGkF,YAAYF,EAAGH,QAEb,KAGT7E,EAAG/E,QAAQuF,SAASU,SAAST,SAAWtF,KAAKgK,sBAC7ChK,KAAK8J,iBAAiBjF,EAAG8E,gBAElB3J,KAAK+E,OAxOhB,uBA8OE,WACE,IAAQF,EAAO7E,KAAP6E,GAEFoF,GAAYnJ,OAAOoJ,SAAW,IACjCC,QAAQ,YAAY,IACpBA,QAAQ,WAAY,aACpBA,QAAQ,IAAK,KACVC,EAAWvF,EAAGwF,SAAH,gCAAuCxF,EAAGyF,QAA1C,0BAA4E,GAE7FzF,EAAGmD,KAAKgB,UAAYhJ,KAAK8E,MAAQhH,EAAE,gCACnC+G,EAAGmD,KAAKiB,OAASjJ,KAAK+E,KAAOjH,EAAE,6CAAD,OAEtBsM,EAFsB,2EAIVH,EAJU,6BAImBpF,EAAG0F,UAJtB,4QAY9BvK,KAAK8E,MAAMqE,OAAOnJ,KAAK+E,MACvBF,EAAGmD,KAAKoB,IAAID,OAAOnJ,KAAK8E,SArQ5B,iCA6QE,SAAoB0F,GAClB,IAAQ3F,EAAO7E,KAAP6E,GAEF4F,EAAU5F,EAAG6F,WAAWF,GAExBG,GADW9F,EAAG+F,YAAYJ,EAAO,YACtB3F,EAAG4E,eAEpB,IAAKzJ,KAAKgF,WAAY,CAIpB,IAFA,IACI6F,EADA7F,EAAa,EAER1G,EAAI,EAAGA,EAAIqM,EAAUrM,IAC5BuM,EAAahG,EAAG6F,WAAWpM,IACtBwM,MAAMD,IAAeA,EAAa7F,IACrCA,EAAa6F,GAGjB7K,KAAKgF,WAAaA,EAGpB,OAAO+F,EAAkBP,EAAOG,EAAUF,EAASO,EAAUhL,KAAKgF,cAjStE,8BAwSE,SAAiBwF,GACfxK,KAAK8E,MAAMhC,KAAK,kBAAkBmI,KAAKjL,KAAKkL,oBAAoBV,MAzSpE,4BAgTE,SAAeA,GAGbA,OAAkBW,IAAVX,EAAsBA,EAAQxK,KAAK6E,GAAG8E,eAC9C3J,KAAK8E,MAAMhC,KAAK,YAAY3B,KAAK,iBAAiB,GAAMmI,OAAO,QAASkB,yBApT5E,KAiUO,SAASO,EAAkBP,EAAOG,EAAUF,EAASO,EAAUhG,GAGpE,GAFqC,KAAdyF,EAAQ,GAI7B,iBADkBD,EAAQ,EAC1B,eAA2BG,EAA3B,KAGF,IAAMS,EAAkBpG,EAAa,OAAH,OAAUA,GAAe,GAC3D,gBAAUyF,GAAV,OAAoBW,GC9Uf,IAAMC,EAAkB,CAK7BC,SAAU,KAGVC,QAAS,GAGT1B,GAAI,OAGJ2B,YAAY,EAIZC,eAAgB,EAChBC,aAAc,EAEdC,gBAAiB,EAEjBC,aAAc,GAGdC,UAAW,OAEXC,aAAa,EACbC,YAAY,EACZC,YAAa,GAEb3B,UAAU,EAEVC,QAAS,sBAQT2B,cAAe,sBAGfC,UAAW,OAQXC,iBAAkB,CAChB,CAACC,OAAQ,IAAMC,QAAS,MACxB,CAACD,OAAQ,GAAKC,QAAS,MACvB,CAACD,OAAQ,EAAGC,QAAS,MACrB,CAACD,OAAQ,EAAGC,QAAS,MACrB,CAACD,OAAQ,EAAGC,QAAS,MACrB,CAACD,OAAQ,EAAGC,QAAS,MACrB,CAACD,OAAQ,EAAGC,QAAS,OAIvBC,QAAS,CAEPD,QAAS,QAIXE,QAAS,CAEPC,qBAAsB,EAEtBC,qBAAsB,EAEtBC,kBAAmB,GAEnBL,QAAS,QAGXM,qBAAsB,IAEtBpC,UAAW,GAEXqC,QAAS,KAETC,YAAa,KAEbC,aAAc,KACdC,qBAAqB,EAMrBC,aAAc,KAWdC,SAAU,GAEVC,UAAW,KAEXC,gBAAiB,KAGjBC,4BAA4B,EAI5BC,GAAI,cAGJxE,gBAAiB,KAGjByE,IAAK,IAGLC,WAAW,EAOXC,QAAS,CAEPC,cAAe,MASjBC,KAAM,GA4BNvM,KAAM,GAINsI,YAAa,KAEbkE,aAAc,KAEdC,cAAe,KAEfC,WAAY,KAMZC,YAAa,KAQbC,iBAAkB,KAGlBrD,WAAY,KAEZE,YAAa,KAEboD,eAAgB,KAMhBC,aAAc,KAEd5I,SAAU,CACR6I,SAAU,CACR5I,SAAS,EACTG,MAAO,YACPD,UAAW,YACXE,cAAe,cAEjByI,UAAW,CACT7I,SAAS,EACTG,MAAO,aACPD,UAAW,aACXE,cAAe,oBAEjB4G,QAAS,CACPhH,SAAS,EACTG,MAAO,gBACPD,UAAW,QACXE,cAAe,SAEjB6G,QAAS,CACPjH,SAAS,EACTG,MAAO,gBACPD,UAAW,QACXE,cAAe,SAEjBwH,UAAW,CACT5H,SAAS,EACTG,MAAO,iBACPD,UAAW,QACXE,cAAe,SAEjBK,SAAU,CACRT,SAAS,EACTE,UAAW,WACXc,cAAe,IAEjB7B,QAAS,CACPa,SAAS,EACTG,MAAO,WACPD,UAAW,WACXE,cAAe,WAEjBhB,OAAQ,CACNY,SAAS,EACTG,MAAO,UACPD,UAAW,UACXE,cAAe,gBAEjB0I,WAAY,CACV9I,SAAS,EACTG,MAAO,oBACPD,UAAW,OACXE,cAAe,eAQnB2I,iBAAiB,EAQjBC,YAAY,EAMZC,WAAW,wTC5RN,IAAMC,EAAb,WAIE,WAAY3J,gGAAI,SACd7E,KAAK6E,GAAKA,UALd,gDAaE,WACE,IAAQA,EAAO7E,KAAP6E,GACFuF,EAAYvF,EAAGwF,SAAJ,sGAEWxF,EAAGyF,QAFd,yBAAe,GAMhCzF,EAAGmD,KAAKyG,WAAa3Q,EAAE,sIAAD,OAIZsM,EAJY,0ZAuBtB,IAAMsE,EAAkB7J,EAAGmD,KAAKyG,WAAW3L,KAAK,0BAahD,OAZI+B,EAAG+H,SAAW/H,EAAG/E,QAAQiN,oBAC3B2B,EAAgBvF,OACdrL,EAAE,OACC4J,KAAK,CAACiH,KAAM9J,EAAG+H,QAAS1G,MAAOrB,EAAGiI,eAClClF,SAAS,YACTqD,KAAKpG,EAAGgI,aAAehI,EAAG0F,YAEtB1F,EAAG0F,WACZmE,EAAgBvF,OAAOtE,EAAGgI,aAAehI,EAAG0F,WAIvC1F,EAAGmD,KAAKyG,aAzDnB,yBAiEE,SAAY7I,EAAMiE,GAChB,IAAQhF,EAAO7E,KAAP6E,GACRA,EAAGmD,KAAKoB,IAAID,OAAOnJ,KAAK4O,uBAExB/J,EAAG/G,EAAE,cAAc8J,SAAS,QAC5B/C,EAAG/G,EAAE,UAAU+Q,OAEf7O,KAAK8O,kBAAkBjK,EAAGuH,QAG1BvH,EAAGmD,KAAKyG,WAAWtF,SAIbtE,EAAGkK,gBAAgBlK,EAAGsB,eAC1BtB,EAAG/G,EAAE,iCAAiC+Q,OAElChK,EAAGkK,gBAAgBlK,EAAGuB,iBAC1BvB,EAAG/G,EAAE,mBAAmB+Q,OAIlBhK,EAAGkK,gBAAgBlK,EAAGsB,eAAiBtB,EAAGkK,gBAAgBlK,EAAGuB,iBACnEvB,EAAG/G,EAAE,kBAAkB+Q,OAGzB/Q,EAAE,sCACCqL,OAAO6F,KACP7F,OAAO8F,KACPC,SAASrK,EAAGmD,KAAKoB,KAEpBvE,EAAG/G,EAAE,2BACF4J,KAAK,CAACiH,KAAM9J,EAAG+H,UACf9E,KAAKjD,EAAG0F,WACR3C,SAAS,SAGZ5H,KAAKmP,aAAatK,EAAG/G,EAAE,YACvBkC,KAAKoP,cAAcvK,EAAG/G,EAAE,aAExB+G,EAAG/G,EAAE,UAAUuR,SAAS,CACtBC,QAAQ,EACRC,QAAS,MACTZ,KAAM9J,EAAG/G,EAAE,YACX0R,OAAQ,WACN3K,EAAG4K,QAAQvL,EAAOG,MAClBQ,EAAG/G,EAAE,oBAAoB+D,IAAIf,OAAOoJ,SAASyE,SAGjD9J,EAAG/G,EAAE,SAASuR,SAAS,CACrBC,QAAQ,EACRC,QAAS,MACTZ,KAAM9J,EAAG/G,EAAE,WACX0R,OAAQ,WACN3K,EAAG4K,QAAQvL,EAAOG,WAvH1B,+BAkIE,SAAkB+H,GAChB,IAII1C,EAJI7E,EAAO7E,KAAP6E,GAEFwH,EAAUxH,EAAGe,MAAQf,EAAGsB,aAAetB,EAAG0H,QAAQF,QAAUxH,EAAGyH,QAAQD,QAI3E3C,EADE2C,EACMA,EAAQqD,MAAM,EAAE,GAAGC,cAAgBtD,EAAQqD,MAAM,IAEhD,IAAMtD,GACZwD,QAAQ,GAERzF,QAAQ,MAAM,IACdA,QAAQ,MAAM,IACb,IAENtF,EAAG/G,EAAE,WAAWgK,KAAK4B,KAlJzB,2BAwJE,SAAcmG,GAAW,WACfhL,EAAO7E,KAAP6E,GACFiL,EAAW9M,SAASkH,SAAW,GAC/B6F,GAAYD,EAAW,IAAI3F,QAAQ,MAAM,IAEzC6F,EAAanL,EAAGoJ,aAAJ,wYAM0D6B,EAN1D,iOAUmDC,EAVnD,qRAgBoClL,EAAGoB,aAhBvC,6KAoBoCpB,EAAGsB,aApBvC,0YAAmB,GAiC/B8J,EAAQnS,EAAE,smBAAD,OAWXkS,EAXW,6JAgBfC,EAAMf,SAASW,GAEfI,EAAMnN,KAAK,yBAAyBmE,GAAG,UAAU,SAAAtI,GAC/C,IAAMuR,EAAOpS,EAAEa,EAAMyC,QAAQ+O,QAAQ,cAC/BC,EAAS,GACfA,EAAOxK,KAAO9H,EAAEoS,EAAKpN,KAAK,8CAA8CjB,MACpEqO,EAAKpN,KAAK,wCAAwCoF,KAAK,aACzDkI,EAAOC,KAAOxL,EAAG6F,WAAW7F,EAAG8E,iBAG7B9E,EAAGoJ,cAILiC,EAAKpN,KAAK,iBAAiBjB,IAAIgD,EAAGoJ,aAFf,QACC,QACoDmC,OAI5EH,EAAMnN,KAAK,mBAAmBmE,GAAG,SAAS,SAAAtI,GAAK,OAAIA,EAAMyC,OAAOkP,YAKhEL,EAAMnN,KAAK,0BAA0ByN,OAAM,WAGzCC,EADY,uCADG1S,EAAE2S,MAAM,CAAEC,EAAG,EAAKC,uBAEhB,IAAK,IAAK,YAE7BV,EAAMnN,KAAK,yBAAyByN,OAAM,WAMxCC,EADY,oCAJG1S,EAAE2S,MAAM,CACrBG,IAAK,EAAKD,qBACV7I,KAAMjD,EAAG0F,YAGM,IAAK,IAAK,YAE7B0F,EAAMnN,KAAK,uBAAuByN,OAAM,WACtC,IAAMM,EAAO,GAAH,OAAMhM,EAAG0F,UAAT,eAAyB,EAAKoG,sBACxC7P,OAAOoJ,SAASyE,KAAhB,0BAA0CmC,UAAUjM,EAAG0F,WAAvD,iBAA0EuG,UAAUD,OAGtFZ,EAAMnN,KAAK,wBAAwB2M,QAAQ,UAE3CQ,EAAMf,SAASW,KAzPnB,gCA4PE,WAGE,OAFe7P,KAAP6E,GACiB/G,EAAE,oBAAoBoK,KAAK,WAE3CpH,OAAOoJ,SAASyE,KAEvB,UAAU3L,SAASkH,SAAS6G,SAA5B,aAAyCjQ,OAAOoJ,SAAS8G,UAAzD,OAAoElQ,OAAOoJ,SAAS+G,YAlQ1F,0BA0QE,SAAaC,GACX,IAAQrM,EAAO7E,KAAP6E,GAERqM,EAASpO,KAAK,6CAA6CgE,SAE3D,IAAMqK,EAAWrT,EAAE,qCACf+G,EAAGqI,WACLiE,EAAShI,OAAOrL,EAAE,yDAAD,OAED+G,EAAGqI,UAFF,mBAEqBkE,EAAAA,EAAAA,YAAWvM,EAAG0F,WAFnC,0BAMnB,IAbqB,EAaf8G,EAAYvT,EAAE,gCAbC,85BAgB8B+G,EAAGoI,UAhBjC,IAgBrB,2BAAgE,mBAApDqE,gBAAAA,OAAoD,MAAlC,GAAkC,EAA9B7L,EAA8B,EAA9BA,MAAOiE,EAAuB,EAAvBA,MACjC6H,EAAyB,UAAV9L,GAAoB2L,EAAAA,EAAAA,YAAW1H,GAASA,EAC7D2H,EAAUlI,OAAOrL,EAAE,kFAAD,OAEa2H,EAFb,qDAGY6L,EAHZ,aAGgCC,EAHhC,6BAlBC,8BAyBrB,IAAMC,EAAe3M,EAAGsI,gBAAkBtI,EAAGsI,gBAAkBtI,EAAG0F,UAC9DiH,GAAgB3M,EAAG+H,SACrByE,EAAUlI,OAAOrL,EAAE,0IAAD,OAGsB+G,EAAG+H,QAHzB,8BAIRwE,EAAAA,EAAAA,YAAWI,GAJH,0DAUpB,IAAMC,EAAU3T,EAAE,gDACZ4T,EAAY5T,EAAE,iCAAiCqL,OAAO,CAC1DgI,EACAE,EACAvT,EAAE,8BAGJoT,EACG/H,OAAOuI,EAAWD,GAClB7J,SAAS,UAxThB,8BA8TE,WACE,IAAQ6G,EAAezO,KAAK6E,GAAGmD,KAAvByG,WACR,OAAIA,GAA4C,UAA9BA,EAAWkD,IAAI,WACvBlD,EAAWmD,cAAgBC,SAASpD,EAAWkD,IAAI,QAEpD,wBAnUb,KAwUO,SAAS1C,IACd,OAAOnR,EAAE,ylBAmBJ,SAASkR,IACd,OAAOlR,EAAE,mPAgBJ,SAAS0S,EAAY7B,EAAMmD,EAAOC,EAAQC,GAE/C,IAAMC,EAAsC9G,MAArBrK,OAAOoR,WAA0BpR,OAAOoR,WAAaC,OAAOzS,KAC7E0S,EAAoCjH,MAApBrK,OAAOuR,UAAyBvR,OAAOuR,UAAYF,OAAOxS,IAK1ED,GAHQoB,OAAOwR,YAActP,SAASuP,gBAAgBC,aAAeL,OAAOL,OAG3D,EAAMA,EAAQ,EAAMG,EACrCtS,GAHQmB,OAAO2R,aAAezP,SAASuP,gBAAgBG,cAAgBP,OAAOJ,QAG9D,EAAMA,EAAS,EAAMK,EACrCO,EAAO,kBAAH,OAAqBb,EAArB,mBAAqCC,EAArC,gBAAmDpS,EAAnD,iBAA+DD,GAEzEoB,OAAO8R,KAAKjE,EAAMqD,EAAMW,u2CCrX1B,IAQaE,EAAb,WAIE,WAAYhO,GAAI,kBACd7E,KAAK6E,GAAKA,EACV7E,KAAKkM,UAAYrH,EAAGqH,UACpBlM,KAAKsN,IAAL,oBAAWzI,EAAG/E,eAAd,aAAW,EAAYwN,WAAvB,QAA8BjC,EAAgBiC,IAG9CtN,KAAK8S,gBAAkB,KAEvB9S,KAAK+S,sBAAwB,KAE7B/S,KAAKgT,wBAA0B,KAdnC,2CAsBE,WACE,GAAIhT,KAAK+S,sBACP,OAAO/S,KAAK+S,sBAMd,IAFA,IAAME,EAAS,GACTC,EAAU,GACP5U,EAAI,EAAGA,EAAI0B,KAAKyJ,cAAenL,IACtC2U,EAAOzU,KAAKwB,KAAK2N,aAAarP,IAC9B4U,EAAQ1U,KAAKwB,KAAK4N,cAActP,IASlC,OANA2U,EAAOE,OACPD,EAAQC,OACRnT,KAAK+S,sBAAwB,CAC3BjB,MAAOmB,EAAOzQ,KAAK4Q,MAAMH,EAAO1U,OAAS,IACzCwT,OAAQmB,EAAQ1Q,KAAK4Q,MAAMF,EAAQ3U,OAAS,KAEvCyB,KAAK+S,wBAzChB,qCA6CE,WACE,GAAI/S,KAAK8S,gBACP,OAAO9S,KAAK8S,gBAGd,IALwB,EAKlBG,EAAS,GACTC,EAAU,GANQ,IAOLlT,KAAKqT,iBAPA,IAOxB,2BAAyC,KAA9BhD,EAA8B,QACvC4C,EAAOzU,KAAK6R,EAAKiD,aACjBJ,EAAQ1U,KAAK6R,EAAKkD,eATI,8BAmBxB,OAPAN,EAAOE,OACPD,EAAQC,OAERnT,KAAK8S,gBAAkB,CACrBhB,MAAOmB,EAAOzQ,KAAK4Q,MAAMH,EAAO1U,OAAS,IACzCwT,OAAQmB,EAAQ1Q,KAAK4Q,MAAMF,EAAQ3U,OAAS,KAEvCyB,KAAK8S,kBAhEhB,2BAwEE,SAActI,GAKZ,OADAA,GAAQgJ,EAAAA,EAAAA,OAAMhJ,EAAO,EAAGxK,KAAKyJ,cAAgB,GACtCzJ,KAAK2N,aAAanD,KA7E7B,4BAqFE,SAAeA,GACb,IAAMiJ,GAAeD,EAAAA,EAAAA,OAAMhJ,EAAO,EAAGxK,KAAKyJ,cAAgB,GAC1D,OAAOzJ,KAAK4N,cAAc6F,KAvF9B,0BA+FE,SAAahJ,GACX,IAAMiJ,EAAc1T,KAAK2T,eAAelJ,GACxC,OAAOiJ,EAAYnV,OAASmV,EAAYA,EAAYnV,OAAS,QAAK4M,IAjGtE,4BAyGE,SAAeV,GACb,IAAMmJ,EAAU,GAGhB,GAA0B,KAAtBnJ,EAAQiF,MAAM,EAAE,GAClB,IACE,IAAMmE,EAAapJ,EAAQiF,MAAM,EAAGjF,EAAQlM,QACtCuV,EAAYjC,SAASgC,GAE3B,OADAD,EAAQpV,KAAKsV,GACNF,EACP,MAAOG,IAKX,IAAK,IAAIzV,EAAI,EAAGA,EAAI0B,KAAKyJ,cAAenL,IAClC0B,KAAK0K,WAAWpM,IAAMmM,GACxBmJ,EAAQpV,KAAKF,GAIjB,OAAOsV,IA9HX,yBAsIE,SAAYpJ,GACV,MAAO,QAAUxK,KAAK0K,WAAWF,KAvIrC,yBA6IE,WAEE,YAAyBW,IAArBnL,KAAK6E,GAAG8F,SACH3K,KAAK6E,GAAG8F,SACV3K,KAAKgU,oBAAoBzV,SAjJpC,0BAwJE,SAAaiM,GACX,OAAOxK,KAAK4K,YAAYJ,EAAO,WAzJnC,2BAgKE,SAAcA,GACZ,OAAOxK,KAAK4K,YAAYJ,EAAO,YAjKnC,wBA2KE,SAAWA,EAAO4B,EAAQ6H,GACxB,OAAQjU,KAAK4K,YAAYJ,EAAO,YAAY,GAA8BxK,KAAK4K,YAAYJ,EAAO,OApL1E,2CAQ5B,yBAmLE,SAAYA,GACV,OAAOxK,KAAK4K,YAAYJ,EAAO,cAAgBA,EAAQ,GAAM,EAAI,IAAM,OApL3E,wBA2LE,SAAWA,GACT,IAAMC,EAAUzK,KAAK4K,YAAYJ,EAAO,WACxC,YAAmBW,IAAZV,EAAA,WAA4BD,GAAUC,IA7LjD,yBAuME,SAAYD,EAAO0J,GAAqC,IAA3BC,EAA2B,4DAAXhJ,EAC3C,OAAOnL,KAAKoU,aAAa5J,EAAO0J,EAAUC,KAxM9C,8BAkNE,SAAiBE,GACf,MAA+B,MAA3BrU,KAAK6E,GAAGgE,gBACyB,KAA5B7I,KAAK8N,YAAYuG,GAAiB,CAACA,EAAS,EAAGA,GAAU,CAACA,EAAQA,EAAS,GAE/C,KAA5BrU,KAAK8N,YAAYuG,GAAiB,CAACA,EAAQA,EAAS,GAAK,CAACA,EAAS,EAAGA,KAtNnF,4BAwOE,SAAeC,GACb,IAAM9J,EAAQxK,KAAKgU,oBAChBO,WAAU,SAAAC,GAAC,OAAIA,EAAEF,SAAWA,KAE/B,OAAO9J,GAAS,EAAIA,EAAQ8J,IA5OhC,6BAoPE,SAAgBG,GACd,IAAIX,EAEEY,EAAY,aAAaC,KAAKF,GASpC,OARIC,EAEgB,QADlBZ,EAAY9T,KAAKgO,eAAe6D,SAAS6C,EAAU,GAAI,QAErDZ,OAAY3I,GAGd2I,EAAY9T,KAAK4U,aAAaH,GAEzBX,IAhQX,qBAuQE,SAAQtJ,GAAoB,IAAbqK,IAAa,yDACpBlK,EAAW3K,KAAKyJ,cACtB,GAAKoL,KAASrK,EAAQ,GAAKA,GAASG,GAOpC,OAJIH,EAAQ,GAAKA,IAAUG,IACzBH,GAASG,GAGJ,IAAImK,EAAU9U,KADrBwK,GAAgBG,KA/QpB,oDA0RE,gKAAuF,GAAvF,IAAkBoK,MAAAA,OAAlB,MAA0B,EAA1B,MAA6BlN,IAAAA,OAA7B,MAAmCmN,EAAAA,EAAnC,MAA6CC,8BAAAA,OAA7C,SACEF,EAAQvS,KAAKG,IAAI,EAAGoS,GACpBlN,EAAMrF,KAAKgH,IAAI3B,EAAK7H,KAAKyJ,eAEhBnL,EAAIyW,EAJf,YAIsBzW,EAAIuJ,GAJ1B,oBAKUwI,EAAOrQ,KAAKkV,QAAQ5W,IACtB2W,IAAiC5E,EAAK8E,wBAN9C,sDAQI,OARJ,UAQU9E,EARV,QAI+B/R,IAJ/B,gEA1RF,+BA0SE,WACE,GAAI0B,KAAKgT,yBAA2BhT,KAAKgT,wBAAwB,KAAOhT,KAAK6E,GAAG1D,KAAK5C,OACnF,OAAOyB,KAAKgT,wBAAwB,GAEtC,IAAIoC,EAAe,KAEfC,EAAyB,KACzB7K,EAAQ,EAEN8K,EAAYtV,KAAK6E,GAAG1D,KAAKoU,SAAQ,SAAAC,GACrC,OAAOA,EAAO7P,KAAI,SAAA0K,GAqBhB,OApBKA,EAAKoF,WAENpF,EAAKoF,SADc,OAAjBL,EACgC,IAAlBI,EAAOjX,OAAe,IAAM,IAEX,MAAjB6W,EAAuB,IAAM,KAGjDA,EAAe/E,EAAKoF,UAEE,IAAlBpF,EAAKqF,SAELrF,EAAKsF,iBADuB,OAA1BN,EACsBA,EAAwB7K,EAExB6K,EAG1BA,EAAwB,KAG1B7K,IACO6F,QAMX,OADArQ,KAAKgT,wBAA0B,CAACsC,EAAWtV,KAAK6E,GAAG1D,KAAK5C,QACjD+W,IA/UX,0BA0VE,SAAa9K,EAAOtC,GAAiC,IAA3BiM,EAA2B,4DAAXhJ,EAClCyK,EAAQ5V,KAAKgU,oBACb6B,EAAe/K,MAAMN,IAAUA,EAAQ,GAAKA,GAASoL,EAAMrX,OACjE,OAAIsX,QAAgB,IAAsBD,EAAMpL,GAAOtC,GAC9CiM,EACFyB,EAAMpL,GAAOtC,OA/VxB,KAsWa4M,EAAb,WAKE,WAAYgB,EAAMtL,GAAO,UAEvBxK,KAAKsN,IAAMwI,EAAK1B,aAAa5J,EAAO,MAAOsL,EAAKxI,KAChDtN,KAAK8V,KAAOA,EACZ9V,KAAKwK,MAAQA,EACbxK,KAAK8R,MAAQgE,EAAKnI,aAAanD,GAC/BxK,KAAKsT,YAActT,KAAK8R,MAAQ9R,KAAKsN,IACrCtN,KAAK+R,OAAS+D,EAAKlI,cAAcpD,GACjCxK,KAAKuT,aAAevT,KAAK+R,OAAS/R,KAAKsN,IACvCtN,KAAKyV,SAAWK,EAAKhI,YAAYtD,GACjCxK,KAAKsU,QAAUwB,EAAK1B,aAAa5J,EAAO,UAAWxK,KAAKwK,OAGxDxK,KAAK+V,WAAaD,EAAK1B,aAAa5J,EAAO,YAAY,GAEvDxK,KAAK2V,iBAAmBG,EAAK1B,aAAa5J,EAAO,qBAAuB,KAKxExK,KAAKmV,yBAA2BnV,KAAK+V,YAAc/V,KAAK2V,kBAAoB3V,KAAKwK,MAEjFxK,KAAKgW,SAAWhW,KAAK8V,KAAK9B,oBAAoBhU,KAAKwK,OA3BvD,sCAkCE,WAAsC,IAAzByL,IAAyB,yDACpC,GAAIjW,KAAK+V,YAAcE,EAEvB,GAAIA,EAAkB,CACpBjW,KAAKgW,SAASN,UAAW,SAClB1V,KAAKgW,SAASL,iBAFD,UAID3V,KAAK8V,KAAKzC,cAAc,CAAE0B,MAAO/U,KAAKwK,MAAQ,KAJ7C,IAIpB,2BAAuE,KAA5D6F,EAA4D,QACrE,GAAIA,EAAK0F,WAAY,MACrB1F,EAAK2F,SAASL,iBAAmB3V,KAAKwK,MAAQ,GAN5B,mCAQf,CACLxK,KAAKgW,SAASN,UAAW,EACzB1V,KAAKgW,SAASL,iBAAoB3V,KAAKkW,OAASlW,KAAKkW,KAAKH,WAAc/V,KAAKkW,KAAKP,iBAAmB3V,KAAKwK,MAFrG,UAIcxK,KAAK8V,KAAKzC,cAAc,CAAE0B,MAAO/U,KAAKwK,MAAQ,KAJ5D,IAIL,2BAAuE,KAA5D6F,EAA4D,QACrE,IAAKA,EAAK0F,WAAY,MACtB1F,EAAK2F,SAASL,iBAAmB3V,KAAKgW,SAASL,kBAN5C,kCA7CX,gBAwDE,WACE,OAAO3V,KAAKmW,aAzDhB,gBA4DE,WACE,OAAOnW,KAAKoW,aA7DhB,oBAoEE,SAAOhK,EAAQ6H,GACb,OAAOjU,KAAK8V,KAAKjI,WAAW7N,KAAKwK,MAAO4B,EAAQ6H,KArEpD,0BA6EE,SAAa7H,GAMX,IAN+B,WAAZ6H,EAAY,uDAAH,EACpB/H,EAAclM,KAAK8V,KAAnB5J,UACFmK,EAAgBnK,EAAUkH,MAAMhH,GAEhCkK,EAAYpK,EAAUqK,KAAKF,GAC3BG,EAAU,GACPC,EAAIH,EAAWG,GAAK,EAAGA,EAAIvK,EAAUqK,KAAKE,GACjDD,EAAQhY,KAAKiY,GAEf,OAAOD,EACJ7Q,KAAI,SAAA8Q,GAAC,gBAAO,EAAKC,OAAOD,EAAGxC,GAAtB,YAAiCoC,EAAgBI,EAAjD,QACLhY,KAAK,QAxFZ,sBAiGE,WAAyD,6DAAJ,GAAI,IAA9CwW,8BAAAA,OAA8C,SACvD,OAAOjV,KAAK8V,KACTzC,cAAc,CAAE0B,MAAO/U,KAAKwK,MAAQ,EAAGyK,8BAAAA,IACvC0B,OAAOjN,QApGd,sBA6GE,WAAyD,6DAAJ,GAAI,IAA9CuL,8BAAAA,OAA8C,SACvD,GAAkB,GAAdjV,KAAKwK,MAAT,CAEA,GAAIyK,EAA+B,CACjC,GAAIjV,KAAKmV,wBACP,OAAOnV,KAAK8V,KAAKZ,QAAQlV,KAAK2V,kBAI9B,IAAMO,EAAO,IAAIpB,EAAU9U,KAAK8V,KAAM9V,KAAKwK,MAAQ,GACnD,OAAO0L,EAAKH,WAAaG,EAAOA,EAAKC,SAAS,CAAElB,8BAAAA,IAGlD,OAAO,IAAIH,EAAU9U,KAAK8V,KAAM9V,KAAKwK,MAAQ,QA1HnD,iICrWA,MAAMoM,EAA6B,IAAIC,QAkB1BC,GAAW,SAAWC,GAAeC,IAC9C,KAAMA,aAAgB,OAAmBA,aAAgB,MAC7B,UAAxBA,EAAKC,UAAUjF,MAAoBgF,EAAKC,UAAUC,MAAM3Y,OAAS,EACjE,MAAM,IAAI4Y,MAAM,4GAGpB,MAAM,UAAEF,GAAcD,GAChB,MAAEI,GAAUH,EAAU1O,QAC5B,IAAI8O,EAA0BT,EAA2B9U,IAAIkV,QAC7B7L,IAA5BkM,IAEAD,EAAME,QAAUL,EAAUM,QAAQ9Y,KAAK,KACvCmY,EAA2B7S,IAAIiT,EAAMK,EAA0B,IAAIG,MAKvEH,EAAwBhP,SAAS2J,IACvBA,KAAQ+E,IACVM,EAAwBI,OAAOzF,IACJ,IAAvBA,EAAKpL,QAAQ,KAEbwQ,EAAMpF,GAAQ,KAGdoF,EAAMM,eAAe1F,OAKjC,IAAK,MAAMA,KAAQ+E,EACfM,EAAwB3O,IAAIsJ,IACD,IAAvBA,EAAKpL,QAAQ,KAEbwQ,EAAMpF,GAAQ+E,EAAU/E,GAGxBoF,EAAMO,YAAY3F,EAAM+E,EAAU/E,+nBCzDvC,IAAM4F,EAAb,WAEE,WAAYhS,GAAM,yIAiEF,SAACiS,GAEf,OADAA,EAAGxX,kBACI,KAnES,sBAsEJ,WAAM,QAElB,EAAKyX,SAAW,EAChB,EAAKlS,KAAKmS,cAAcX,MAAMY,WAAa,YAC3C,EAAKC,iBACL,eAAKrS,MAAKsS,6BAAV,oBA3EgB,gEA+EL,WAAOzW,GAAP,sFACX,EAAK0W,UAAY1W,EACZ,EAAK2W,iBACJC,EAA2B,KAC/B,EAAKC,sBAAwB,IAAIC,SAC/B,SAACC,GAAD,OAAUH,EAA2BG,KAIvC,EAAKJ,eAAiB,EAAKK,UAAS,WAClC,EAAKC,kBAAkB,CACrB5Z,QAAS,EAAKqZ,UAAUQ,OAAO/Z,EAC/BG,QAAS,EAAKoZ,UAAUQ,OAAO9Z,IAEjC,EAAK+G,KAAKgT,OAAS,EAAKT,UAAUS,MAAQ,EAAKd,SAC/C,EAAKA,SAAW,EAAKK,UAAUS,MAC/B,EAAKR,eAAiB,KACtBC,QAjBO,2CA/EK,qGAqGN,qHAIJ,EAAKC,sBAJD,OAKV,EAAK1S,KAAKiT,YAAc,CAAEja,EAAG,GAAKC,EAAG,IACrC,EAAKiZ,SAAW,EAChB,EAAKlS,KAAKmS,cAAcX,MAAMY,WAAa,OAC3C,EAAKc,iBACL,eAAKlT,MAAKmT,6BAAV,iBATU,4CArGM,iDAiHH,6GAGP,EAAKC,YAHE,4CAjHG,2BAkIC,SAACnB,GAClB,GAAKA,EAAGoB,QAAR,CACApB,EAAGxX,iBACH,IAAM6Y,EAGF,OAAOC,KAAKpY,UAAUqY,UAClB,KAEF,IAGN,EAAKV,kBAAkBb,GACvB,EAAKjS,KAAKgT,OAAS,EAAIpW,KAAK6W,KAAKxB,EAAGyB,QAAUJ,MA7I9ClZ,KAAK4F,KAAOA,EAGZ5F,KAAKoY,eAAiB,KAEtBpY,KAAKsY,sBAAwBC,QAAQgB,UACrCvZ,KAAK8X,SAAW,EAEhB9X,KAAKmY,UAAY,KACjBnY,KAAKwZ,UAAW,EAGhBxZ,KAAKyY,SAAW3X,OAAO2Y,sBAAsBlY,KAAKT,eAI3C4Y,IAAAA,SAAAA,SAAAA,WACP1Z,KAAK2Z,OAAS,IAAID,IAAAA,SAAe1Z,KAAK4F,KAAKgU,WAAY,CACrDC,YAAa,gBAGf7Z,KAAK2Z,OAAOjR,IAAI,IAAIgR,IAAAA,gBAzBxB,mCA4BE,WACM1Z,KAAKwZ,WAETxZ,KAAK8Y,iBAIL9Y,KAAK4F,KAAKgU,WAAW7X,iBAAiB,eAAgB/B,KAAK8Z,eAC3D9Z,KAAK4F,KAAKgU,WAAW7X,iBAAiB,gBAAiB/B,KAAK8Z,eAC5D9Z,KAAK4F,KAAKgU,WAAW7X,iBAAiB,aAAc/B,KAAK8Z,eAGzD9Z,KAAK2Z,OAAO1S,GAAG,aAAcjH,KAAK+Z,aAClC/Z,KAAK2Z,OAAO1S,GAAG,YAAajH,KAAKga,YACjCha,KAAK2Z,OAAO1S,GAAG,WAAYjH,KAAKgZ,WAChChZ,KAAK2Z,OAAO1S,GAAG,cAAejH,KAAKia,cAEnCja,KAAKwZ,UAAW,KA7CpB,oBAgDE,WACExZ,KAAKiY,iBAILjY,KAAK4F,KAAKgU,WAAWrX,oBAAoB,eAAgBvC,KAAK8Z,eAC9D9Z,KAAK4F,KAAKgU,WAAWrX,oBAAoB,gBAAiBvC,KAAK8Z,eAC/D9Z,KAAK4F,KAAKgU,WAAWrX,oBAAoB,aAAcvC,KAAK8Z,eAG5D9Z,KAAK2Z,OAAO3S,IAAI,aAAchH,KAAK+Z,aACnC/Z,KAAK2Z,OAAO3S,IAAI,YAAahH,KAAKga,YAClCha,KAAK2Z,OAAO3S,IAAI,WAAYhH,KAAKgZ,WACjChZ,KAAK2Z,OAAO3S,IAAI,cAAehH,KAAKia,cAEpCja,KAAKwZ,UAAW,IA/DpB,4BA0HE,WACE1Y,OAAOiB,iBAAiB,QAAS/B,KAAKka,iBAAkB,CAAEC,SAAS,MA3HvE,4BA+HE,WACErZ,OAAOyB,oBAAoB,QAASvC,KAAKka,oBAhI7C,+BAyJE,YAAwC,IAApBpb,EAAoB,EAApBA,QAASC,EAAW,EAAXA,QACrBqb,EAAKpa,KAAK4F,KAAKyU,qBAAqBC,mBAC1Cta,KAAK4F,KAAKiT,YAAc,CACtBja,GAAIE,EAAUsb,EAAG1a,MAAQM,KAAK4F,KAAKyU,qBAAqB7H,YACxD3T,GAAIE,EAAUqb,EAAGza,KAAOK,KAAK4F,KAAKyU,qBAAqB3H,oCA7J7D,mSCLO,MAAM6H,EAAb,WASE,WAAYhS,GAAS,sIARP,KAQO,sBAPN,KAOM,4BALA,CAAE5I,IAAK,EAAGD,KAAM,IAKhB,4BAKD,WAClB,IAAM0a,EAAK,EAAK7R,QAAQiS,wBACxB,EAAKhI,YAAc,EAAKjK,QAAQiK,YAChC,EAAKE,aAAe,EAAKnK,QAAQmK,aACjC,EAAK4H,mBAAmB3a,IAAMya,EAAGza,IACjC,EAAK2a,mBAAmB5a,KAAO0a,EAAG1a,QAVf,qCAYQ+a,EAAAA,EAAAA,UAASza,KAAK0a,kBAAmB,KAAK,IAVjE1a,KAAKuI,QAAUA,UAXnB,iDAwBE,WAAmC,IAAdoS,EAAc,uDAAR7Z,OACzB6Z,EAAI5Y,iBAAiB,SAAU/B,KAAK4a,8BAzBxC,kCA6BE,WAAmC,IAAdD,EAAc,uDAAR7Z,OACzB6Z,EAAIpY,oBAAoB,SAAUvC,KAAK4a,kDA9B3C,w+PCMO,mBAAMC,OAAb,EADCC,EAAAA,EAAAA,IAAc,mBACiBC,EAAAA,aAAhC,kBAAaF,EAAb,qpBAiJE,WAAY/E,EAAMjR,GAAI,kHACpB,eADoB,QAEpB,EAAKiR,KAAOA,EAGZ,EAAKjR,GAAKA,EALU,EAjJxB,sBAAagW,EAAb,mEAWGG,EAAAA,EAAAA,IAAS,CAAEvb,KAAMoE,UAXpB,oDAeGmX,EAAAA,EAAAA,IAAS,CAAEvb,KAAMpB,SAfpB,mCAgBU,KAhBV,2BAmBG2c,EAAAA,EAAAA,IAAS,CAAEvb,KAAMoE,UAnBpB,sCAoBa,KApBb,sDAyBcoX,EAAAA,EAAAA,mBAzBd,4DAkCoB,IAlCpB,2BAoCGD,EAAAA,EAAAA,IAAS,CAAEvb,KAAMyb,UApCpB,oCAqCU,IArCV,2BAuCGF,EAAAA,EAAAA,IAAS,CAAEvb,KAAMoE,UAvCpB,yCAwCgB,CAAEjF,EAAG,GAAKC,EAAG,MAxC7B,2BA6CGmc,EAAAA,EAAAA,IAAS,CAAEvb,KAAMoE,UA7CpB,2CA8CkB,CACdlE,IAAK,EACLD,KAAM,EACNoS,MAAO,IACPC,OAAQ,OAlDZ,2BAsDGiJ,EAAAA,EAAAA,IAAS,CAAEvb,KAAMpB,MAAO8c,WAAYC,EAAAA,cAtDvC,0CAuDiB,KAvDjB,2BA0DGJ,EAAAA,EAAAA,IAAS,CAAEvb,KAAMpB,SA1DpB,2CA2DkB,KA3DlB,8DA8DuB,KA9DvB,2BAwEGgd,EAAAA,EAAAA,IAAM,wBAxET,sFA2EoB,CAAEvJ,MAAO,IAAKC,OAAQ,OA3E1C,mCA6EE,WACE,IAAMuJ,EAAOtb,KAAKub,2BAClB,MAAO,CACLzJ,MAAOwJ,EAAKtb,KAAKwb,gBAAgB1J,OAAS,KAC1CC,OAAQuJ,EAAKtb,KAAKwb,gBAAgBzJ,QAAU,QAjFlD,mCAsFE,WAAmB,OAAO/R,OAtF5B,2BAyFGqb,EAAAA,EAAAA,IAAM,gCAzFT,mGA+FyB,IAAId,EAAqBva,QA/FlD,yDAiGiB,IAAI4X,EAAe5X,QAjGpC,sDAsGe,KAtGf,wDAyGgB,MAzGhB,uCAoHE,SAAYwK,GAAgC,qEAAJ,IAAnBiR,OAAAA,OAAuB,SACtCA,IACFzb,KAAKoX,MAAMsE,eAAiB,UAE9B1b,KAAKqC,UAAYrC,KAAK2b,0BAA0B3b,KAAK4b,SAASpR,GAASxK,KAAK6b,WAAa,GAErFJ,GACFK,YAAW,kBAAM,EAAK1E,MAAMsE,eAAiB,KAAI,OA3HvD,kCA+HE,WACE1b,KAAK4Y,OAAS5Y,KAAK+b,cAhIvB,mCAmIE,WACE/b,KAAK4Y,OAAS,EAAI5Y,KAAK+b,cApI3B,wCA0JE,SAAaC,GACX,MA3JSnB,EA2JT,0CAAmBmB,GACnBhc,KAAKqa,qBAAqBK,oBAC1B1a,KAAKic,aAAaC,WA7JtB,2CAmKE,SAAgBC,GACd,IAAM9L,EAAOrQ,KAAK8V,KAAKZ,QAAQiH,GAC/Bnc,KAAK4Y,MAAQ5Y,KAAKoc,oBAAoB/L,KArK1C,mCAyKE,SAAQ2L,GAmBN,GAhBIA,EAAaK,IAAI,UACnBrc,KAAKsc,OAAQC,EAAAA,EAAAA,YAAWvc,KAAK8V,KAAKzC,cAAc,CAAE4B,+BAA+B,MAE/E+G,EAAaK,IAAI,WACnBrc,KAAKwb,gBAAkBxb,KAAKwc,yBAC5Bxc,KAAK4b,SAAW5b,KAAKyc,gBAAgBzc,KAAKsc,MAAOtc,KAAK6b,aAEpDG,EAAaK,IAAI,mBACnBrc,KAAK0c,aAAe1c,KAAK2c,uBAEvBX,EAAaK,IAAI,kBACnBrc,KAAK4c,+BACL5c,KAAK6E,GAAGgY,iBAAmB7c,KAAK0c,aAAa/W,KAAI,SAAAmX,GAAC,OAAIA,EAAEtS,SACxDxK,KAAK6E,GAAGkY,iBAAiB/c,KAAK6E,GAAGgY,iBAAiB,IAClD7c,KAAK6E,GAAGmY,2BAENhB,EAAaK,IAAI,SAAU,CAC7B,IAAMY,EAASjB,EAAala,IAAI,SAEhC9B,KAAK+X,cAAcX,MAAM8F,UAAzB,gBAA8Cld,KAAK4Y,MAAnD,KACA5Y,KAAKmd,qBAAqBnd,KAAK4Y,MAAOqE,GAEtCjd,KAAKod,OAAOhG,MAAM8F,UAAlB,gBAAuCld,KAAK4Y,MAA5C,QAlMN,6CAuME,WACE,MAxMSiC,EAwMT,gDACA7a,KAAKqa,qBAAqBgD,uBAC1Brd,KAAK+Y,wBACL/Y,KAAKic,aAAaC,WA3MtB,gDA+ME,WACElc,KAAKqa,qBAAqBiD,uBAC1Btd,KAAKkY,wBACLlY,KAAKic,aAAasB,SAClB,MAnNS1C,EAmNT,qDAnNJ,4CAyNE,WAEE,OAAO7a,OA3NX,kFAwO+B,SAAsBwd,GAAtB,OAAiCA,EAAS,EAAKC,UAAY,EAAKC,mBAxO/F,kFAyO+B,SAAsBC,GAAtB,OAA6BA,EAAK,EAAKD,gBAAkB,EAAKD,aAzO7F,qFA2OkC,SAAsBE,GAAtB,OAA6BA,EAAK,EAAK/E,SA3OzE,qFA4OkC,SAAsB+E,GAAtB,OAA6BA,EAAK,EAAK/E,SA5OzE,iFA8O8B,SAAsB+E,GAAtB,OAA6B,EAAKC,8BAA8B,EAAKrC,2BAA2BoC,OA9O9H,iFA+O8B,SAAsBA,GAAtB,OAA6B,EAAKE,2BAA2B,EAAKC,8BAA8BH,OA/O9H,kCAoPE,WAAS,eACP,OAAO1S,EAAAA,EAAAA,IAAP,4OAC0C6L,EAAS9W,KAAK+d,YAElD/d,KAAKge,cAAcrY,KAAI,SAAAmX,GAAC,OAAI,EAAKmB,WAAWnB,SAxPtD,2EA6PwB,SAACzM,GACrB,OAAO,EAAK6N,mBAAmB7N,EAAK7F,SAClC,EAAK0T,mBAAmB7N,EAAK7F,OAE3B,EAAK3F,GAAGsZ,qBAAqB9N,EAAK7F,WAjQ1C,kEAuQe,SAAC6F,GACZ,IAAMiL,EAAO,EAAKC,2BACZ6C,EAAO,EAAKzC,0BACZ0C,EAAiB,EAAKC,0BAA0B,EAAKjE,qBAAqB7H,aAE1EV,EAAQwJ,EAAKjL,EAAKiD,aAClBvB,EAASuJ,EAAKjL,EAAKkD,cACnB7T,EAAO8C,KAAKG,IAAI,EAAKkZ,YAAawC,EAAiBhO,EAAKiD,aAAe,GACvE3T,EAAM,EAAKic,SAASvL,EAAK7F,OAEzB0S,EAAY,aAAH,OAAgB5B,EAAK5b,GAArB,eAAiC4b,EAAK3b,GAAtC,OACT4e,EAAkB,EAAKC,oBAAoBnO,GAC9CoO,OAAO,CACNC,WAAY,CACV5M,MAAAA,EACAC,OAAAA,EACApS,IAAK,EACLD,KAAM,GAER0M,OAAQiE,EAAKyB,MAAQsM,EAAK/N,EAAKiD,eAC9BsG,WAAW,GAGhB,OADA2E,EAAgBnH,MAAM8F,UAAYA,EAC3BqB,KA9RX,2EAmSwB,WACpB,IAAQlc,EAA0B,EAA1BA,UAAWD,EAAe,EAAfA,WAEboQ,EAAc,EAAK6H,qBAAqB7H,YACxCE,EAAe,EAAK2H,qBAAqB3H,aAKzCiM,EAAO,EAAKL,0BAClB,EAAKM,cAAgB,CACnBjf,IAAKgf,EAAKtc,GACV0P,OAAQ4M,EAAKjM,GAEbhT,KAAMif,EAAKvc,GACX0P,MAAO6M,EAAKnM,OAlTlB,gDAyTE,WAAuB,QAGrB,MAAO,WACLxS,KAAK0c,aAAa,UADb,aACL,EAAsBxG,MADjB,SAEFlW,KAAK0c,cAFH,WAGL1c,KAAK0c,aAAa1c,KAAK0c,aAAane,OAAS,UAHxC,aAGL,EAAiDoY,OAEhDtQ,QAAO,SAAAyW,GAAC,OAAIA,KAEZpN,MAAM,EAAG,MAnUhB,oFAsUiCmP,EAAAA,EAAAA,WAAS,WACtC,EAAKb,cAAgB,EAAKc,uBAC1B,EAAKC,kBACJ,IAAK,QAzUV,2CA+UE,SAAgBzC,EAAO0C,GAErB,IAF8B,EAExBC,EAAS,GACXtf,EAAMqf,EAHoB,moBAIX1C,GAJW,IAI9B,2BAA0B,KAAfjM,EAAe,QACxB4O,EAAO5O,EAAK7F,OAAS7K,EACrBA,GAAO0Q,EAAKkD,aAAeyL,GANC,8BAQ9B,OAAOC,IAvVX,+CA8VE,SAAoB5O,GAElB,IAAM6O,EAAmBlf,KAAKse,0BAA0Bte,KAAKqa,qBAAqB7H,aAClF,OAAOhQ,KAAKgH,IAAI,EAAG0V,GAAoB7O,EAAKiD,YAAc,EAAItT,KAAK6b,eAjWvE,kDAoWE,WACE,MAAO,CACL/J,MAAOtP,KAAKG,IAAL,MAAAH,KAAI,EAAQxC,KAAKsc,MAAM3W,KAAI,SAAAmX,GAAC,OAAIA,EAAExJ,iBAAgB,EAAItT,KAAK6b,WAClE9J,QACIoN,EAAAA,EAAAA,KAAInf,KAAKsc,MAAM3W,KAAI,SAAAmX,GAAC,OAAIA,EAAEvJ,kBACzBvT,KAAKsc,MAAM/d,OAAS,GAAKyB,KAAK6b,cAzWzC,+CA6WE,WAAsB,WACpB,OAAO7b,KAAKsc,MAAMjW,QAAO,SAAAgK,GACvB,IAAM+O,EAAK,EAAKxD,SAASvL,EAAK7F,OACxB6U,EAAKD,EAAK/O,EAAKkD,aAEf+L,EAAK,EAAKV,cAAcjf,IAE9B,OAAOyf,GADIE,EAAK,EAAKV,cAAc7M,QAChBsN,GAAMC,OApX/B,gDA8XE,SAAqBC,EAAUzH,GAC7B,IAAM0H,EAAYxf,KACCyf,EAAqBD,EAAhCnd,UAA0Bqd,EAAMF,EAAlBpd,WAChBud,EAAI3f,KAAKqa,qBAAqB7H,YAC9BoN,EAAI5f,KAAKqa,qBAAqB3H,aAG9BmN,EAAIN,EAAWzH,EAGfgI,EAAO9f,KAAK6Y,YAAYja,EACxBmhB,EAAO/f,KAAK6Y,YAAYha,EAKxBmhB,EACDH,GAJAH,EAAII,EAAOH,GAGVK,EAEDH,GAJAJ,EAAIM,EAAOH,GAMhBJ,EAAUnd,UAAY2d,EAAcD,EAAOH,EAC3CJ,EAAUpd,WAAa4d,EAAcF,EAAOH,EAC5C3f,KAAKigB,wBApZT,6EAyZ0B,WACtB,EAAKle,iBAAiB,SAAU,EAAKke,oBAAqB,CAAE9F,SAAS,OA1ZzE,6EA6Z0B,WACtB,EAAK5X,oBAAoB,SAAU,EAAK0d,ytCCxarC,IAAMC,GAAb,WAKE,WAAYrb,EAAIsb,gGAAW,SACzBngB,KAAK6E,GAAKA,EACV7E,KAAK8V,KAAOqK,EACZngB,KAAKogB,WAAa,IAAIvF,GAAWsF,EAAWtb,GAG5C7E,KAAKqgB,IAAMviB,GAAEkC,KAAKogB,YAAYxY,SAAS,yBAGvC5H,KAAKsgB,WAAY,UAdrB,uCAmBE,WAAqB,OAAOtgB,KAAK6E,GAAGmD,KAAKC,eAnB3C,qBAwBE,WAAU,WACFsY,EAAYvgB,KAAK6E,GAAG8E,eAC1B3J,KAAKiI,aACFuY,QACA7O,IAAI,CAAE8O,SAAU,WAChBtX,OAAOnJ,KAAKqgB,KAIfvE,WAAU,4BAAC,gGACJ,EAAKwE,UADD,uBAEP,EAAKF,WAAWM,gBAAgBH,GAChC,EAAKD,WAAY,EAHV,SAID,EAAKF,WAAWrB,gBAJf,OAKPjhB,GAAE,EAAKsiB,YAAYvgB,eAAe,CAChCQ,gBAAgB,EAChBF,aAAc,8BAEdG,UAAW,YACXC,aAAc,YACdC,QAAS,YAXJ,OAcT,EAAK4f,WAAWrW,YAAYwW,GAdnB,4CAgBXvgB,KAAK6E,GAAG8b,oBAjDZ,yBA2DE,SAAYnW,EAAOrL,EAAOC,EAAOwhB,GAE/B,IAAMle,EAAWF,KAAKC,IAAIzC,KAAK6E,GAAG8E,eAAiBa,GAC7CiR,GAAUmF,GAAale,GAAY,EACzC1C,KAAKogB,WAAWrW,YAAYS,EAAO,CAAEiR,OAAAA,MA/DzC,kBAqEE,SAAKoF,GACc,MAAbA,EAAmB7gB,KAAKogB,WAAW1b,SAClC1E,KAAKogB,WAAW3b,YAvEzB,4BA8EE,WACEzE,KAAKogB,WAAW/F,qBAAqBK,oBACrC1a,KAAKogB,WAAWrB,uCAhFpB,83BCUO,IAAM+B,GAAb,WAKE,WAAYjc,EAAIsb,gGAAW,SACzBngB,KAAK6E,GAAKA,EACV7E,KAAK8V,KAAOqK,EAGZngB,KAAK+gB,UAAY,KAEjB/gB,KAAKghB,UAAY,KAGjBhhB,KAAKihB,eAAiB,GAGtBjhB,KAAKic,aAAe,KACpBjc,KAAKkhB,OAAS,EACdlhB,KAAK6Y,YAAc,CAAEja,EAAG,GAAKC,EAAG,YApBpC,qCAuBE,WACE,OAAOmB,KAAK6E,GAAGmD,KAAKC,aAAa,KAxBrC,yBA0BE,WAAoB,MAClB,iBAAOjI,KAAK6E,GAAGmD,KAAKmZ,sBAApB,aAAO,EAA8B,KA3BzC,iBA8BE,WAAc,OAAOnhB,KAAKkhB,QA9B5B,IA+BE,SAAUE,GACRphB,KAAK+X,cAAcX,MAAM8F,UAAzB,gBAA8CkE,EAA9C,KACAphB,KAAKmd,qBAAqBiE,EAAQphB,KAAKkhB,QACvClhB,KAAKkhB,OAASE,IAlClB,yBAwCE,SAAY5W,GAGNA,EAAQhI,KAAKgH,IAAIxJ,KAAK6E,GAAG0H,QAAQ8U,cAAerhB,KAAK6E,GAAG0H,QAAQ+U,eAClEthB,KAAKuhB,gBAAgB/W,GACZA,EAAQhI,KAAKG,IAAI3C,KAAK6E,GAAG0H,QAAQ8U,cAAerhB,KAAK6E,GAAG0H,QAAQ+U,gBACzEthB,KAAKwhB,eAAehX,KA9C1B,uBAyDE,WACE,IAAMiX,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eAC9BO,EAAS1hB,KAAK6E,GAAG0H,QAAQ8U,cACzBM,EAAS3hB,KAAK6E,GAAG0H,QAAQ+U,cAE/BthB,KAAKwe,oBAAoBkD,GAAQ9H,WAC9BjI,IAAI3R,KAAK4hB,aACT1S,SAASuS,GACZzhB,KAAKwe,oBAAoBmD,GAAQ/H,WAC9BjI,IAAI3R,KAAK6hB,cACT3S,SAASuS,GAEZzhB,KAAK6c,iBAAmB,CAAC7c,KAAK6E,GAAG0H,QAAQ8U,cAAerhB,KAAK6E,GAAG0H,QAAQ+U,eACxEthB,KAAK6E,GAAGgY,iBAAmB7c,KAAK6c,iBAChC7c,KAAK6E,GAAGiK,kBAAkB9O,KAAK6E,GAAGuH,QAClCpM,KAAK6E,GAAG4K,QAAQ,iBAxEpB,kBA8EE,SAAKoR,GACH7gB,KAAK6E,GAAGid,qBAGR9hB,KAAK+hB,4BAGL,IAAMC,EAAkBhiB,KAAK6E,GAAGod,WAAWjiB,KAAK6E,GAAGuH,OAAQyU,EAAW7gB,KAAK6E,GAAG0H,QAAQJ,kBACtF,GAAKnM,KAAK6E,GAAGuH,QAAU4V,EAAgB5V,QAAYpM,KAAK6E,GAAG0H,QAAQF,SAAW2V,EAAgB3V,QAA9F,CAIArM,KAAK6E,GAAG0H,QAAQF,QAAU2V,EAAgB3V,QAC1CrM,KAAK6E,GAAGuH,OAAS4V,EAAgB5V,OACjCpM,KAAK6E,GAAGqd,UAAYliB,KAAK6E,GAAGuH,OAG5B,IAAM+V,EAAYniB,KAAKoiB,gBAIvBpiB,KAAKqiB,mBAAmBF,EAAUG,YAAaH,EAAUI,aADnC,MAlG1B,0BA0GE,WAAe,YACbviB,KAAK6E,GAAG2d,mBAAkB,GAC1BxiB,KAAKyiB,sBAEL,UAAAziB,KAAK6E,GAAGmD,YAAR,SAAcmZ,eAAexP,IAAI3R,KAAK0iB,kBACtC1iB,KAAK2iB,aAEL7kB,GAAEkC,KAAK6E,GAAG0H,QAAQqW,UAAUjR,IAAI3R,KAAK6iB,gBACrC,IAAMC,EAAgB9iB,KAAK6E,GAAGmD,KAAKmZ,eAEnC,UAAA2B,EAAchgB,KAAK,uBAAnB,SAAoC6O,IAAI3R,KAAK+iB,cAC7C,UAAAD,EAAchgB,KAAK,uBAAnB,SAAoC6O,IAAI3R,KAAKgjB,cAC7C,UAAAF,EAAchgB,KAAK,oBAAnB,SAAiC6O,IAAI3R,KAAKijB,UAE1C,IAAMvB,EAAS1hB,KAAK6E,GAAG0H,QAAQ8U,cACzBM,EAAS3hB,KAAK6E,GAAG0H,QAAQ+U,cAC/BthB,KAAKihB,eAAeS,GAAQ9H,WAAWjI,IAAI3R,KAAK4hB,aAChD5hB,KAAKihB,eAAeU,GAAQ/H,WAAWjI,IAAI3R,KAAK6hB,gBA3HpD,gCAmIE,SAAmBqB,EAAmBC,GAA0C,MAAvBC,EAAuB,wDAWxEC,EAAiBrjB,KAAK6E,GAAGuH,OACzBkX,EAAkBtjB,KAAK6E,GAAGgY,iBAEhC7c,KAAK6E,GAAGmD,KAAKC,aAAauY,QAC1BxgB,KAAK6E,GAAGmD,KAAKC,aAAa0J,IAAI,WAAY,QAM1C,IAAM4R,GAAa/P,EAAAA,EAAAA,OAAMxT,KAAK6E,GAAG2e,WAAYxjB,KAAK6E,GAAG4e,wBAAyBzjB,KAAK6E,GAAG6e,wBAChFC,EAAuB3jB,KAAK8V,KAAK/H,iBAAiBwV,GACxDvjB,KAAK6E,GAAG0H,QAAQ8U,cAAgBsC,EAAqB,GACrD3jB,KAAK6E,GAAG0H,QAAQ+U,cAAgBqC,EAAqB,GAErD3jB,KAAKyiB,sBAGL,IAAMmB,EAAcP,GAAkBrjB,KAAK6E,GAAGuH,OACxCyX,EAAYP,GAAmBtjB,KAAK6E,GAAGgY,iBACvCiH,GAAkCD,GAAcA,IAAcD,GAEhER,GAAiBU,KACnB9jB,KAAK+jB,sBACL/jB,KAAKgkB,YAKPhkB,KAAK6E,GAAGmD,KAAKmZ,eAAiBnhB,KAAK6E,GAAGmD,KAAKmZ,gBAAkBrjB,GAAE,qCAC/D,IAAM2jB,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eACpCM,EAAejB,QACfiB,EAAe,GAAGrK,MAAM6M,gBAAkB,MAC1CjkB,KAAK6E,GAAGmD,KAAKC,aAAakB,OAAOsY,GAGjCzhB,KAAK6E,GAAGmD,KAAKC,aAAapI,eAAe,CACvCQ,gBAAe,EAEfC,UAAW,YACXC,aAAc,YACdC,QAAS,YAGXR,KAAKkkB,sBAGL,UAAAlkB,KAAK6E,GAAGmD,YAAR,SAAcmZ,eAAexP,IAAI3R,KAAK0iB,kBAIlC1iB,KAAK6E,GAAG0H,QAAQ4X,WAAankB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,iBAC9Dgb,EAAoB,IAElBljB,KAAK6E,GAAG0H,QAAQ6X,YAAcpkB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,kBAC/Dib,EAAoB,IAGtBnjB,KAAK2iB,WAAWO,EAAmBC,GAGnCnjB,KAAK6E,GAAG0H,QAAQqW,SAAW5f,SAASqhB,cAAc,OAClDvmB,GAAEkC,KAAK6E,GAAG0H,QAAQqW,UAAUlb,KAAK,QAAS,eAAeiK,IAAI3R,KAAK6iB,gBAAgB3T,SAASlP,KAAK6E,GAAGmD,KAAKmZ,gBAExGnhB,KAAKghB,UAAYhe,SAASqhB,cAAc,OACxCrkB,KAAKghB,UAAUxb,UAAY,cAC3B1H,GAAEkC,KAAKghB,WAAWrP,IAAI3R,KAAK+iB,cAAc7T,SAASlP,KAAK6E,GAAGmD,KAAKmZ,gBAE/DnhB,KAAK+gB,UAAY/d,SAASqhB,cAAc,OACxCrkB,KAAK+gB,UAAUvb,UAAY,cAC3B1H,GAAEkC,KAAK+gB,WAAWpP,IAAI3R,KAAKgjB,cAAc9T,SAASlP,KAAK6E,GAAGmD,KAAKmZ,gBAE/D,IAAMmD,EAAMthB,SAASqhB,cAAc,OACnCvmB,GAAEwmB,GAAK5c,KAAK,QAAS,YAAYiK,IAAI3R,KAAKijB,UAAU/T,SAASlP,KAAK6E,GAAGmD,KAAKmZ,gBAE1EnhB,KAAKukB,eAELvkB,KAAK6E,GAAGgY,iBAAmB,GAE3B7c,KAAKwkB,YACLxkB,KAAK6E,GAAGiK,kBAAkB9O,KAAK6E,GAAGuH,QAClCpM,KAAK6E,GAAG8b,kBAER3gB,KAAKic,aAAejc,KAAKic,cAAgB,IAAIrE,EAAe5X,MAC5DA,KAAKic,aAAaC,SAElBlc,KAAKqa,qBAAuBra,KAAKqa,sBAAwB,IAAIE,EAAqBva,KAAK4Z,cApO3F,uBAuOE,WAGE5Z,KAAKic,aAAasB,WA1OtB,kCAiPE,SAAqBgC,EAAUzH,GAAU,QACjC0H,EAAYxf,KAAK6E,GAAGmD,KAAKC,aAAa,GACzBwX,EAAqBD,EAAhCnd,UAA0Bqd,EAAMF,EAAlBpd,WAChBud,EAAI3f,KAAKqa,qBAAqB7H,YAC9BoN,EAAI5f,KAAKqa,qBAAqB3H,aAG9BmN,EAAIN,EAAWzH,EAGfgI,EAAO9f,KAAK6Y,YAAYja,EACxBmhB,EAAO/f,KAAK6Y,YAAYha,EAKxBmhB,EACDH,GAJAH,EAAII,EAAOH,GAGVK,EAEDH,GAJAJ,EAAIM,EAAOH,GAMhBJ,EAAUnd,UAAY2d,EAAcD,EAAOH,EAC3CJ,EAAUpd,WAAa4d,EAAcF,EAAOH,EAG5C,UAAA3f,KAAKihB,eAAejhB,KAAK6E,GAAG0H,QAAQ8U,sBAApC,SAAoD5C,OAAO,CAAErS,OAAQpM,KAAK6E,GAAGuH,OAASmT,IACtF,UAAAvf,KAAKihB,eAAejhB,KAAK6E,GAAG0H,QAAQ+U,sBAApC,SAAoD7C,OAAO,CAAErS,OAAQpM,KAAK6E,GAAGuH,OAASmT,MA1Q1F,iCA6QE,WACE,IAAK,IAAM/U,KAASxK,KAAKihB,eAClBzW,GAASxK,KAAK6E,GAAG0H,QAAQ8U,eAAmB7W,GAASxK,KAAK6E,GAAG0H,QAAQ+U,eACxExjB,GAAEkC,KAAKihB,eAAezW,GAAOoP,YAAY9S,UAEtC0D,EAAQxK,KAAK6E,GAAG0H,QAAQ8U,cAAgB,GAAO7W,EAAQxK,KAAK6E,GAAG0H,QAAQ+U,cAAgB,WACnFthB,KAAKihB,eAAezW,KAnRnC,0BA6RE,WAAe,WACbxK,KAAK6E,GAAG4f,aAAezhB,SAASqhB,cAAc,OAC9CrkB,KAAK6E,GAAG4f,aAAajf,UAAY,iBACjC1H,GAAEkC,KAAK6E,GAAG4f,cAAc9S,IAAI,CAC1B+S,OAAQ,SACPxV,SAASlP,KAAK6E,GAAGmD,KAAKC,cACzBnK,GAAEkC,KAAK6E,GAAG4f,cAAc5V,OAiBxB,IAfA,IAAM8V,EAAY,CAChB,CACEC,UAAW9mB,GAAEkC,KAAK+gB,WAElB8D,kBAAmB7kB,KAAK8kB,0BAA0BvjB,KAAKvB,MACvD+kB,WAAY,kBAAyC,IAAlCjnB,GAAE,EAAK+G,GAAG4f,cAAc3S,UAE7C,CACE8S,UAAW9mB,GAAEkC,KAAKghB,WAElB6D,kBAAmB7kB,KAAKglB,2BAA2BzjB,KAAKvB,MACxD+kB,WAAY,kBAAO,OAnBV,aAuBR,WAAQH,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,kBAAmBE,EAAtC,EAAsCA,WACzCH,EAAU3d,GAAG,cAAc,kBAAMnJ,GAAE,EAAK+G,GAAG4f,cAAcQ,UACzDL,EAAU3d,GAAG,cAAc,kBAAMnJ,GAAE,EAAK+G,GAAG4f,cAAc5V,UAEzD+V,EAAU3d,GAAG,SAAS,SAAAxF,GACpB,EAAKoD,GAAG4K,QAAQvL,EAAOG,MACvB,EAAKQ,GAAGkF,YAAY8a,EAAkBpjB,EAAEtC,WAG1CylB,EAAU3d,GAAG,aAAa,SAAAxF,GACxB,IAAMyjB,GAAY1R,EAAAA,EAAAA,OAAMqR,EAAkBpjB,EAAEtC,OAAQ,EAAG,EAAK2W,KAAKrM,cAAgB,GACjF3L,GAAE,EAAK+G,GAAG4f,cAAc3c,KAAxB,eAAqC,EAAKgO,KAAKqP,YAAYD,KAI3DpnB,GAAE,EAAK+G,GAAG4f,cAAc9S,IAAI,CAC1BjS,KAAM,GAAF,OAAK+B,EAAEtC,MAAQ,EAAK0F,GAAGmD,KAAKC,aAAamd,SAAS1lB,KAAO,EAAKmF,GAAGmD,KAAKC,aAAa7F,aAAe2iB,IAAlG,MACJplB,IAAK,GAAF,OAAK8B,EAAErC,MAAQ,EAAKyF,GAAGmD,KAAKC,aAAamd,SAASzlB,IAAM,EAAKkF,GAAGmD,KAAKC,aAAa5F,YAAlF,YAjBT,MAA2DsiB,EAA3D,eAAsE,MApT1E,8BA2UE,WACE,IAAMpB,GAAa/P,EAAAA,EAAAA,OAAMxT,KAAK6E,GAAG2e,WAAYxjB,KAAK6E,GAAG4e,wBAAyBzjB,KAAK6E,GAAG6e,wBAChFC,EAAuB3jB,KAAK8V,KAAK/H,iBAAiBwV,GACxDvjB,KAAK6E,GAAG0H,QAAQ8U,cAAgBsC,EAAqB,GACrD3jB,KAAK6E,GAAG0H,QAAQ+U,cAAgBqC,EAAqB,KA/UzD,iCAuVE,WACE,IAII0B,EAJE7B,EAAcxjB,KAAK6E,GAAG0H,QAAQ8U,cAC9BiE,EAActlB,KAAK6E,GAAG0H,QAAQ+U,cAKlC+D,EADGrlB,KAAK6E,GAAG0H,QAAQF,QACNrM,KAAKulB,mBAAmB/B,EAAY8B,GAGpCtlB,KAAKwlB,wBAAwBhC,EAAY8B,EAAatlB,KAAK6E,GAAGuH,QAG7EpM,KAAK6E,GAAG0H,QAAQwF,OAASsT,EAAWtT,QAAU,EAC9C/R,KAAK6E,GAAG0H,QAAQuF,MAAQuT,EAAWvT,OAAS,EAG5C9R,KAAK6E,GAAG0H,QAAQkZ,SAAWzlB,KAAK2N,aAAa6V,IAAe,EAC5DxjB,KAAK6E,GAAG0H,QAAQmZ,SAAW1lB,KAAK2N,aAAa2X,IAAgB,EAG7DtlB,KAAK6E,GAAG0H,QAAQoZ,UAAYN,EAAWO,mBACvC5lB,KAAK6E,GAAG0H,QAAQsZ,eAAiB7lB,KAAK6E,GAAGihB,cAAc9lB,KAAK6E,GAAG0H,QAAQ8U,eACvErhB,KAAK6E,GAAG0H,QAAQwZ,eAAiB/lB,KAAK6E,GAAG0H,QAAQoZ,UAAY3lB,KAAK6E,GAAG0H,QAAQsZ,eAM7E7lB,KAAK6E,GAAG0H,QAAQyZ,kBAAoBhmB,KAAKimB,WAAWjmB,KAAK6E,GAAG0H,QAAQkZ,SAAWzlB,KAAK6E,GAAG0H,QAAQmZ,UAE/F1lB,KAAK6E,GAAG0H,QAAQ2Z,mBAAqBlmB,KAAK6E,GAAG0H,QAAQwF,OAAS,EAAI/R,KAAK6E,GAAG0H,QAAQC,qBAKlF,IAAM2Z,EAAmBnmB,KAAKomB,qBAAqB5C,GAC7C6C,EAAsBrmB,KAAK6E,GAAG0H,QAAQkZ,SAAWU,EAAmBnmB,KAAK6E,GAAG0H,QAAQsZ,eACpFS,EAAuBtmB,KAAK6E,GAAG0H,QAAQmZ,SAAWS,EAAmBnmB,KAAK6E,GAAG0H,QAAQwZ,eACrFQ,EAAyB/jB,KAAKG,IAAK0jB,EAAqBC,GAC9DtmB,KAAK6E,GAAG0H,QAAQ4X,WAAa,GAAKoC,EAAyBvmB,KAAK6E,GAAG0H,QAAQC,qBAAuBxM,KAAK6E,GAAG0H,QAAQE,sBAClHzM,KAAK6E,GAAG0H,QAAQ6X,YAAcpkB,KAAK6E,GAAG0H,QAAQwF,OAAS,GAAK/R,KAAK6E,GAAG0H,QAAQC,qBAAuBxM,KAAK6E,GAAG0H,QAAQE,sBAOnHzM,KAAK6E,GAAG0H,QAAQia,OAASxmB,KAAK6E,GAAG0H,QAAQ4X,YAAc,EACvDnkB,KAAK6E,GAAG0H,QAAQka,OAASzmB,KAAK6E,GAAG0H,QAAQia,OAASxmB,KAAKomB,qBAAqB5C,GAI5ExjB,KAAK6E,GAAG0H,QAAQma,iBAAmB1mB,KAAK6E,GAAG0H,QAAQka,OAASzmB,KAAK6E,GAAG0H,QAAQkZ,SAAWzlB,KAAK6E,GAAG0H,QAAQsZ,eAAiB7lB,KAAK6E,GAAG0H,QAAQC,qBAExIxM,KAAK6E,GAAG0H,QAAQoa,gBAAkB3mB,KAAK6E,GAAG0H,QAAQE,qBAGlDzM,KAAK6E,GAAG0H,QAAQqa,mBAAqB5mB,KAAK6E,GAAG0H,QAAQwF,OAAS,EAAI/R,KAAK6E,GAAG0H,QAAQC,qBAClFxM,KAAK6E,GAAG0H,QAAQsa,iBAAmB7mB,KAAK6E,GAAG0H,QAAQia,QAAUxmB,KAAK6E,GAAG0H,QAAQG,mBAAqB,GAClG1M,KAAK6E,GAAG0H,QAAQua,gBAAkB9mB,KAAK6E,GAAG0H,QAAQoa,gBAElD3mB,KAAK6E,GAAGuH,OAASiZ,EAAWjZ,OAAS,EAAIpM,KAAK6E,GAAGuH,OAASiZ,EAAWjZ,SArZzE,gCA8ZE,SAAmBoX,EAAY8B,GAC7B,IAoBIyB,EApBEC,EAAQ,GAORC,EACIjnB,KAAK8V,KAAKoR,eAAe1D,GAD7ByD,EAEGjnB,KAAK8V,KAAKqR,cAAc3D,GAG3B4D,EACIpnB,KAAK8V,KAAKoR,eAAe5B,GAI7B+B,EAAmBJ,EAAeA,EAClCK,EAAmBF,EAJhBpnB,KAAK8V,KAAKqR,cAAc7B,GAQ/ByB,EADEvkB,KAAKC,IAAI4kB,EAhBQ,KAgB0B7kB,KAAKC,IAAI6kB,EAhBnC,KAiBXD,EAEAC,EAGV,IAAM1B,EAAqBpjB,KAAK4Q,MAAgC,GAA1BpT,KAAK8V,KAAKrM,eAC1C8d,EAAmB/kB,KAAK4Q,MAAsD,GAAhDpT,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,gBACnE8e,EAAMpB,mBAAqBpjB,KAAKgH,IAAIoc,EAAoB2B,GAExD,IAAMC,EAAoB,GAAKxnB,KAAK6E,GAAG0H,QAAQC,qBAAuBxM,KAAK6E,GAAG0H,QAAQE,sBAAwBua,EAAMpB,mBAC9G6B,EAAqB,GAAKznB,KAAK6E,GAAG0H,QAAQC,qBAAuBxM,KAAK6E,GAAG0H,QAAQE,sBAmBvF,OAjBAua,EAAMlV,MAAS9R,KAAK6E,GAAGmD,KAAKC,aAAa6J,QAAU0V,GAAsB,EACzER,EAAMlV,MAAQkV,EAAMlV,MAAQ,GAAKkV,EAAMlV,MAAQ,GAAK,EAEpDkV,EAAMjV,OAAS/R,KAAK6E,GAAGmD,KAAKC,aAAa8J,SAAW0V,EACpDT,EAAMjV,OAASiV,EAAMjV,OAAS,GAAKiV,EAAMjV,OAAS,GAAK,EAEnDiV,EAAMjV,OAASgV,GAASC,EAAMlV,MAEhCkV,EAAMlV,MAAQtP,KAAK4Q,MAAM4T,EAAMjV,OAASgV,IAAU,EAGlDC,EAAMjV,OAASvP,KAAK4Q,MAAM4T,EAAMlV,MAAQiV,IAAU,EAIpDC,EAAM5a,OAAS5J,KAAKklB,OAAQT,EAAeG,GAAiB,EAAKJ,EAAMjV,QAEhEiV,IAldX,qCA2dE,SAAwBxD,EAAY8B,EAAalZ,GAC/C,IAAMiZ,EAAa,GAEbO,EAAqBpjB,KAAK4Q,MAAgC,GAA1BpT,KAAK8V,KAAKrM,eAE1C8d,EAAmB/kB,KAAK4Q,MAAsD,GAAhDpT,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,gBACnEmd,EAAWO,mBAAqBpjB,KAAKgH,IAAIoc,EAAoB2B,GAG7D,IAAMI,EAAc3nB,KAAK8V,KAAKqR,cAAc3D,GAAcxjB,KAAK8V,KAAKqR,cAAc7B,GAC5EsC,EAAe5nB,KAAK8V,KAAKoR,eAAe1D,GAAcxjB,KAAK8V,KAAKoR,eAAe5B,GAKrF,OAJAD,EAAWtT,OAASvP,KAAK4Q,MAAQwU,EAAe,EAAK5nB,KAAK6E,GAAGuH,QAC7DiZ,EAAWvT,MAAQtP,KAAK4Q,MAAQuU,EAAc,EAAK3nB,KAAK6E,GAAGuH,QAC3DiZ,EAAWjZ,OAASA,EAEbiZ,IA1eX,8BAifE,WAEE,OADmBrlB,KAAKulB,mBAAmBvlB,KAAK6E,GAAG0H,QAAQ8U,cAAerhB,KAAK6E,GAAG0H,QAAQ+U,eACxElV,SAnftB,wBA2fE,WACE,IAAIyb,GAAa,EAMjB,MAL+B,QAA3B7nB,KAAK6E,GAAG0H,QAAQF,SACdrM,KAAK6E,GAAGuH,OAASpM,KAAK8nB,qBACxBD,GAAa,GAGVA,IAlgBX,uCAqgBE,WACE7nB,KAAK6E,GAAG0H,QAAQJ,iBAAmBnM,KAAK6E,GAAGsH,iBAAiB4b,OAAO,CACjE,CACE3b,OAAQpM,KAAKulB,mBAAoBvlB,KAAK6E,GAAG0H,QAAQ8U,cAAerhB,KAAK6E,GAAG0H,QAAQ+U,eAAgBlV,OAChGC,QAAS,UAGbrM,KAAK6E,GAAG0H,QAAQJ,iBAAiBgH,KAAKnT,KAAK6E,GAAGmjB,eA5gBlD,uBAmhBE,WACEzoB,QAAQ0oB,KAAK,0DAphBjB,6BA0hBE,SAAgBzd,GACd,GAAIxK,KAAK6E,GAAGoB,cAAgBjG,KAAK6E,GAAGe,OAChC5F,KAAK6E,GAAGqjB,UAEZ,GAAI,MAAQloB,KAAK6E,GAAGsjB,YAApB,CAKA,GAAI,MAAQ3d,EAAO,CACjB,MAAuCxK,KAAK6E,GAAG0H,QAAxC8U,EAAP,EAAOA,cAAeC,EAAtB,EAAsBA,cAChB8G,EAAoB5lB,KAAKgH,IAAI6X,EAAeC,GAC5CpL,EAAOlW,KAAK8V,KAAKZ,QAAQkT,GAAmBjS,SAAS,CAAElB,+BAA+B,IAC5F,IAAKiB,EAAM,OACX1L,EAAQ0L,EAAK1L,MAGQ,KAAjB0L,EAAKT,UAAiBjL,IAG5BxK,KAAK6E,GAAGmY,wBAAwBxS,GAEhC,IAAM6d,EAAkBroB,KAAK8V,KAAK/H,iBAAiBvD,GAE/C6d,EAAgB,GAAKroB,KAAK6E,GAAG4e,yBAA2B4E,EAAgB,GAAKroB,KAAK6E,GAAG4e,0BAIzFzjB,KAAK6E,GAAGqjB,WAAY,EAEhB,MAAQloB,KAAK6E,GAAGgE,iBAElB7I,KAAKsoB,uBAAuBD,EAAgB,GAAIA,EAAgB,IAChEroB,KAAKuoB,gBAAgBF,EAAgB,GAAIA,EAAgB,MAGzDroB,KAAKwoB,uBAAuBH,EAAgB,GAAIA,EAAgB,IAChEroB,KAAKyoB,gBAAgBJ,EAAgB,GAAIA,EAAgB,WAhCzDK,MAAM,wCA/hBZ,6BAwkBE,SAAgBC,EAAWC,GAAW,WACpC5oB,KAAK6E,GAAGmD,KAAKC,aAAaL,SAAS,kBACnC,IAAMihB,EAAW7oB,KAAK6E,GAAG0H,QAAQ8U,cAE3ByH,EAAoB9oB,KAAK6E,GAAGihB,cAAc9lB,KAAK6E,GAAG0H,QAAQ8U,eAC1D0H,EAAoB/oB,KAAK6E,GAAGihB,cAAc6C,GAC1CK,EAAeF,EAAoBC,EAEnCE,EAAejpB,KAAK2N,aAAakb,GACjCK,EAAelpB,KAAK2N,aAAagb,GACjCQ,EAAenpB,KAAK2N,aAAaib,GAEjCjpB,EAAOK,KAAKL,MACZ8mB,EAASzmB,KAAK6E,GAAG0H,QAAQia,OAASxmB,KAAKomB,qBAAqBuC,GA4B5DlH,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eAC9BiI,EAAkB3C,EAASwC,EAAaD,EAE9ChpB,KAAK6E,GAAGsjB,YAAcnlB,SAASqhB,cAAc,OAC7CrkB,KAAK6E,GAAGsjB,YAAY3iB,UAAY,gBAChC1H,GAAEkC,KAAK6E,GAAGsjB,aAAaxW,IAAI,CACzBG,MAAO,GAAF,OAAKkX,EAAL,MACLjX,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQwF,OAArB,MACNrS,KAAM,GAAF,OAAK0pB,EAAL,MACJzpB,IAAK,GAAF,OAAKA,EAAL,MACH+kB,OAAQ,MACPxV,SAASuS,GAEZ3jB,GAAEkC,KAAK+gB,WAAWpP,IAAI,CACpBG,MAAO,GAAF,OAAKiX,EAAL,MACLrpB,KAAM,GAAF,OAAK+mB,EAASwC,EAAaF,EAA3B,QAIN,IAAMrpB,EAAOM,KAAKihB,eAAe4H,GAAUjP,WAAWwL,SAAS1lB,KAEzD2pB,EAAQ,GAAH,OAAM5H,EAAevZ,KAAK,eAAiBxI,EAAOM,KAAKihB,eAAe4H,GAAUjP,WAAW9H,QAAU2P,EAAe2D,SAAS1lB,KAAO,EAApI,MAIXM,KAAKihB,eAAe4H,GAAUjP,WAAWjI,IAAI,CAC3C0X,MAAAA,EACA3pB,KAAM,KAGR5B,GAAEkC,KAAK6E,GAAGsjB,aAAa5e,QAAQ,CAAC7J,KAAM+mB,GAASzmB,KAAK6E,GAAGgH,UAAW,cAElE7L,KAAKihB,eAAe4H,GAAUjP,WAAWrQ,QAAQ,CAACuI,MAAO,OAAQ9R,KAAK6E,GAAGgH,UAAW,cAAc,WAEhG/N,GAAE,EAAK+G,GAAGsjB,aAAa5e,QAAQ,CAAC7J,KAAM,GAAF,OAAK+mB,EAAS0C,EAAd,OAA8B,EAAKtkB,GAAGgH,UAAW,eAErF,EAAKhH,GAAG/G,EAAE,aAAa6T,IAAI,CAACjS,KAAM,GAAF,OAAK+mB,EAA6C,GAApC,EAAK5hB,GAAG0H,QAAQG,kBAA9B,QAEhC,EAAKuU,eAAe2H,GAAWhP,WAAWrQ,QAAQ,CAACuI,MAAO,GAAF,OAAKqX,EAAL,OAAqB,EAAKtkB,GAAGgH,UAAW,eAAe,WAAM,MACnH,EAAKoV,eAAe0H,GAAW/O,WAAWjI,IAAI,SAAU,GAExD7T,GAAE,EAAKkjB,WAAWrP,IAAI,CAEpBG,MAAO,GAAF,OAAK,EAAKjN,GAAG0H,QAAQoZ,UAAYoD,EAAjC,MACLrpB,KAAM,GAAF,OAAM+mB,EAAS0C,EAAf,QAGNrrB,GAAE,EAAKijB,WAAWpP,IAAI,CAEpBG,MAAO,GAAF,OAAKiX,EAAL,MACLrpB,KAAM,GAAF,OAAM+mB,EAASyC,EAAYH,EAA3B,QAINjrB,GAAE,EAAK+G,GAAG0H,QAAQqW,UAAUjR,IAAI,CAC9BG,MAAO,GAAF,OAAK,EAAKmU,WAAWiD,EAAYC,GAAjC,MACLzpB,KAAM,GAAF,OAAK+mB,EAASyC,EAAYH,EAAoB,EAAKlkB,GAAG0H,QAAQC,qBAA9D,QAGN1O,GAAE,EAAK+G,GAAGsjB,aAAarhB,SACvB,EAAKjC,GAAGsjB,YAAc,KAItB,EAAKtjB,GAAG0H,QAAQ8U,cAAgBsH,EAChC,EAAK9jB,GAAG0H,QAAQ+U,cAAgBsH,EAChC,EAAK/jB,GAAG0H,QAAQkZ,SAAWyD,EAC3B,EAAKrkB,GAAG0H,QAAQmZ,SAAWyD,EAC3B,EAAKtkB,GAAG0H,QAAQka,OAASA,EAEzB,EAAK5hB,GAAGkY,iBAAiB,EAAKlY,GAAG0H,QAAQ8U,eACzC,EAAKxc,GAAGgY,iBAAmB,CAAC8L,EAAWC,GACvC,EAAK7E,sBACL,EAAKlf,GAAGqjB,WAAY,EAEpB,EAAKoB,eAED,EAAKzkB,GAAG0kB,4BACV,EAAK1kB,GAAG0kB,4BACR,EAAK1kB,GAAG0kB,0BAA4B,MAGtC,EAAK1kB,GAAGmD,KAAKC,aAAaN,YAAY,kBACtC,YAAK9C,GAAG2kB,2BAAR,SAA6BC,aAAa,EAAK5kB,GAAGmD,KAAKC,cACvD,EAAK0a,aACL,EAAK9d,GAAG4K,QAAQ,eAGhB,EAAKsU,sBACL,EAAKvF,oBAAoBmK,EAAY,GACrC,EAAKnK,oBAAoBoK,EAAY,GACrC,EAAKpK,oBAAoBmK,EAAY,GACrC,EAAKnK,oBAAoBoK,EAAY,WA7sB7C,iCAqtBE,SAAoBpe,GAKlB,OAJKxK,KAAKihB,eAAezW,KACvBxK,KAAKihB,eAAezW,GAASxK,KAAK6E,GAAGsZ,qBAAqB3T,IAE5DxK,KAAKihB,eAAezW,GAAOiU,OAAO,CAAErS,OAAQpM,KAAK6E,GAAGuH,OAASpM,KAAK4Y,QAC3D5Y,KAAKihB,eAAezW,KA1tB/B,4BAkuBE,SAAeA,GACb,IAAIxK,KAAK6E,GAAGqjB,UAEZ,GAAI,MAAQloB,KAAK6E,GAAGsjB,YAApB,CAKA,GAAI,MAAQ3d,EAAO,CAEjB,MAAuCxK,KAAK6E,GAAG0H,QAAxC8U,EAAP,EAAOA,cAAeC,EAAtB,EAAsBA,cAChBoI,EAAoBlnB,KAAKG,IAAI0e,EAAeC,GAC5CqI,EAAW3pB,KAAK8V,KAAKZ,QAAQwU,GAAmBtT,SAAS,CAAEnB,+BAA+B,IAChG,IAAK0U,EAAU,OACfnf,EAAQmf,EAASnf,MAEnB,KAAIA,EAAQxK,KAAK6E,GAAG6e,wBAApB,CAEA1jB,KAAK6E,GAAGmY,wBAAwBxS,GAEhCxK,KAAK6E,GAAGqjB,WAAY,EAEpB,IAAM0B,EAAc5pB,KAAK8V,KAAK/H,iBAAiBvD,GAE3C,MAAQxK,KAAK6E,GAAGgE,iBAElB7I,KAAKwoB,uBAAuBoB,EAAY,GAAIA,EAAY,IACxD5pB,KAAKyoB,gBAAgBmB,EAAY,GAAIA,EAAY,MAGjD5pB,KAAKsoB,uBAAuBsB,EAAY,GAAIA,EAAY,IACxD5pB,KAAKuoB,gBAAgBqB,EAAY,GAAIA,EAAY,WA3BjDlB,MAAM,wCAtuBZ,6BA2wBE,SAAgBC,EAAWC,GAAW,WACpC5oB,KAAK6E,GAAGmD,KAAKC,aAAaL,SAAS,kBAEnC,IAAMkhB,EAAoB9oB,KAAK6E,GAAGihB,cAAc9lB,KAAK6E,GAAG0H,QAAQ8U,eAC1DwI,EAAoB7pB,KAAK6E,GAAG0H,QAAQoZ,UAAYmD,EAChDC,EAAoB/oB,KAAK6E,GAAGihB,cAAc6C,GAC1CmB,EAAoB9pB,KAAK6E,GAAG0H,QAAQoZ,UAAYoD,EAEhDC,EAAea,EAAoBC,EAEnCnqB,EAAMK,KAAKL,MACXoqB,EAAU/pB,KAAK2N,aAAa3N,KAAK6E,GAAG0H,QAAQ+U,eAG5CmF,EADSzmB,KAAK6E,GAAG0H,QAAQia,OACPxmB,KAAKomB,qBAAqBuC,GAE5ClH,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eAEpCnhB,KAAK6E,GAAGsjB,YAAcnlB,SAASqhB,cAAc,OAC7CrkB,KAAK6E,GAAGsjB,YAAY3iB,UAAY,gBAChC1H,GAAEkC,KAAK6E,GAAGsjB,aAAaxW,IAAI,CACzBG,MAAO,GAAF,OAAKkX,EAAL,MACLjX,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQwF,OAArB,MACNrS,KAAM,GAAF,OAAK+mB,EAASsD,EAAd,MACJpqB,IAAK,GAAF,OAAKA,EAAL,MACH+kB,OAAO,MACNxV,SAASuS,GAEZ,IAAMyH,EAAYlpB,KAAK2N,aAAagb,GAC9BQ,EAAYnpB,KAAK2N,aAAaib,GAEpC9qB,GAAEkC,KAAKghB,WAAWrP,IAAI,CAACG,MAAO,GAAF,OAAKgY,EAAL,MAA4BpqB,KAAM,GAAF,OAAK+mB,EAAS0C,EAAd,QAC5D,IAAMa,EAAQhqB,KAAK6E,GAAGgH,UAEtB/N,GAAEkC,KAAK6E,GAAGsjB,aAAa5e,QAAQ,CAAC7J,KAAM+mB,GAASuD,EAAO,cACtDhqB,KAAKihB,eAAejhB,KAAK6E,GAAG0H,QAAQ+U,eAAe1H,WAAWrQ,QAAQ,CAACuI,MAAO,OAAQkY,EAAO,cAAc,WACzG,EAAKnlB,GAAG/G,EAAE,YAAY6T,IAAI,CAACjS,KAAM,GAAF,OAAK+mB,EAA6C,GAApC,EAAK5hB,GAAG0H,QAAQG,kBAA9B,QAC/B5O,GAAE,EAAK+G,GAAGsjB,aAAa5e,QAAQ,CAAC7J,KAAM,GAAF,OAAK+mB,EAASyC,EAAYF,EAA1B,OAA6CgB,EAAO,eACxF,EAAK/I,eAAe0H,GAAW/O,WAAWrQ,QAAQ,CAACuI,MAAO,GAAF,OAAKoX,EAAL,OAAqBc,EAAO,eAAe,WAAM,MACvG,EAAK/I,eAAe2H,GAAWhP,WAAWjI,IAAI,SAAU,GAExD7T,GAAE,EAAKijB,WAAWpP,IAAI,CACpBG,MAAO,GAAF,OAAKiX,EAAL,MACLrpB,KAAM,GAAF,OAAK+mB,EAASyC,EAAYH,EAA1B,QAINjrB,GAAE,EAAK+G,GAAG0H,QAAQqW,UAAUjR,IAAI,CAC9BG,MAAO,GAAF,OAAK,EAAKmU,WAAWiD,EAAYC,GAAjC,MACLzpB,KAAM,GAAF,OAAK+mB,EAASyC,EAAYH,EAAoB,EAAKlkB,GAAG0H,QAAQC,qBAA9D,QAGN1O,GAAE,EAAK+G,GAAGsjB,aAAarhB,SACvB,EAAKjC,GAAGsjB,YAAc,KAEtB,EAAKtjB,GAAG0H,QAAQ8U,cAAgBsH,EAChC,EAAK9jB,GAAG0H,QAAQ+U,cAAgBsH,EAChC,EAAK/jB,GAAG0H,QAAQkZ,SAAWyD,EAC3B,EAAKrkB,GAAG0H,QAAQmZ,SAAWyD,EAC3B,EAAKtkB,GAAG0H,QAAQka,OAASA,EAEzB,EAAK5hB,GAAGkY,iBAAiB,EAAKlY,GAAG0H,QAAQ8U,eACzC,EAAKxc,GAAGgY,iBAAmB,CAAC8L,EAAWC,GACvC,EAAK7E,sBACL,EAAKlf,GAAGqjB,WAAY,EAEpB,EAAKoB,eAED,EAAKzkB,GAAG0kB,4BACV,EAAK1kB,GAAG0kB,4BACR,EAAK1kB,GAAG0kB,0BAA4B,MAGtC,EAAK1kB,GAAGmD,KAAKC,aAAaN,YAAY,kBACtC,YAAK9C,GAAG2kB,2BAAR,SAA6BC,aAAa,EAAK5kB,GAAGmD,KAAKC,cACvD,EAAK0a,aACL,EAAK9d,GAAG4K,QAAQ,eAEhB,EAAKsU,sBACL,EAAKvF,oBAAoBmK,EAAY,GACrC,EAAKnK,oBAAoBoK,EAAY,GACrC,EAAKpK,oBAAoBmK,EAAY,GACrC,EAAKnK,oBAAoBoK,EAAY,WA71B7C,iCAk2BE,WAAsB,WACpB5oB,KAAK6E,GAAGmD,KAAKmZ,eACVna,IAAI,WAAWC,GAAG,WAAW,SAAA4Q,GAC5B,GAAgB,GAAZA,EAAG3W,MAEL,OAAQ,EAAK2D,GAAG0I,UAGlB,IAAM0c,EAAQnsB,GAAE+Z,EAAGzW,QAAQ8oB,QAAQ,oBACT,KAAtBD,EAAM9oB,KAAK,QAAgB,EAAK0D,GAAGnF,OACR,KAAtBuqB,EAAM9oB,KAAK,SAAgB,EAAK0D,GAAGwkB,aA52BpD,oCAs3BE,SAAuBc,EAAOC,GAC5BpqB,KAAKwe,oBAAoB2L,GAAO,GAChCnqB,KAAKwe,oBAAoB4L,GAAO,GAEhC,IAAM3I,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eAC9BpP,EAAU/R,KAAK8V,KAAKoR,eAAeiD,GACnCrY,EAAU9R,KAAK8V,KAAKqR,cAAcgD,GAClC3D,EAASxmB,KAAK6E,GAAG0H,QAAQia,OACzB7mB,EAAOK,KAAKL,MACZoqB,EAAU/pB,KAAK6E,GAAG0H,QAAQwF,OAASD,EAAQC,EAI3C0U,EAASD,EAASxmB,KAAKomB,qBAAqB+D,GAE5CE,EAAU,CACd3qB,KAAM,GAAF,OAAK+mB,EAASsD,EAAd,MACJV,MAAO,GACP1pB,IAAK,GAAF,OAAQA,EAAR,MACHoS,OAAQ/R,KAAK6E,GAAG0H,QAAQwF,OACxBD,MAAO,GAAF,OAAMiY,EAAN,MACLrF,OAAQ,GAGV1kB,KAAKihB,eAAekJ,GAAOvQ,WACxBjI,IAAI0Y,GACJnb,SAASuS,GAEZ,IAAM6I,EAAW,CACf5qB,KAAM,GAAF,OAAO+mB,EAAP,MACJ4C,MAAO,GACP1pB,IAAK,GAAF,OAAQA,EAAR,MACHoS,OAAQ/R,KAAK6E,GAAG0H,QAAQwF,OACxBD,MAAQ,IACR4S,OAAQ,GAGV1kB,KAAKihB,eAAemJ,GAAOxQ,WACxBjI,IAAI2Y,GACJpb,SAASuS,KA75BhB,oCAm6BE,SAAuB8I,EAAOC,GAC5BxqB,KAAKwe,oBAAoB+L,GAAO,GAChCvqB,KAAKwe,oBAAoBgM,GAAO,GAEhC,IAAM/I,EAAiBzhB,KAAK6E,GAAGmD,KAAKmZ,eAChCpP,EAAS/R,KAAK8V,KAAKoR,eAAesD,GAClC1Y,EAAQ9R,KAAK8V,KAAKqR,cAAcqD,GAC9BhE,EAASxmB,KAAK6E,GAAG0H,QAAQia,OACzB7mB,EAAMK,KAAKL,MACboqB,EAAU/pB,KAAK6E,GAAG0H,QAAQwF,OAASD,EAAQC,EAEzC0U,EAASD,EAASxmB,KAAKomB,qBAAqBmE,GAElDzsB,GAAEkC,KAAKihB,eAAeuJ,GAAO5Q,YAAYjI,IAAI,CAC3CjS,KAAM,GAAF,OAAO+mB,EAAP,MACJ9mB,IAAK,GAAF,OAAQA,EAAR,MACHoS,OAAQ/R,KAAK6E,GAAG0H,QAAQwF,OACxBD,MAAO,GAAF,OAAMiY,EAAN,MACLrF,OAAQ,IAEPxV,SAASuS,GAEZ1P,EAAS/R,KAAK8V,KAAKoR,eAAeqD,GAClCzY,EAAQ9R,KAAK8V,KAAKqR,cAAcoD,GAChCR,EAAU/pB,KAAK6E,GAAG0H,QAAQwF,OAASD,EAAQC,EAE3CjU,GAAEkC,KAAKihB,eAAesJ,GAAO3Q,YAAYjI,IAAI,CAC3C0X,MAAO,GAAF,OAAK5H,EAAevZ,KAAK,eAAiBue,EAA1C,MACL9mB,IAAK,GAAF,OAAKA,EAAL,MACHoS,OAAQ/R,KAAK6E,GAAG0H,QAAQwF,OACxBD,MAAO,MACP4S,OAAQ,IAEPxV,SAASuS,KAp8BhB,0BAu8BE,SAAajX,GAEX,IAAMuH,EAAS/R,KAAK8V,KAAKoR,eAAe1c,GAClCsH,EAAQ9R,KAAK8V,KAAKqR,cAAc3c,GAEtC,OAAOhI,KAAK4Q,MAAMpT,KAAK6E,GAAG0H,QAAQwF,OAASD,EAAQC,KA58BvD,oBAk9BE,WACE,OAAO/R,KAAK6E,GAAG0H,QAAQia,OAASxmB,KAAKomB,qBAAqBpmB,KAAK6E,GAAG0H,QAAQ8U,iBAn9B9E,iBAy9BE,WACE,OAAOrhB,KAAK6E,GAAG0H,QAAQE,qBAAuBzM,KAAK6E,GAAG0H,QAAQC,uBA19BlE,wBAk+BE,SAAWie,GACT,OAAOA,EAAiBzqB,KAAK6E,GAAG0H,QAAQoZ,UAAY,EAAI3lB,KAAK6E,GAAG0H,QAAQC,uBAn+B5E,2BAy+BE,WACE,MAAyCxM,KAAK6E,GAAGmD,KAAzCC,EAAR,EAAQA,aAAckZ,EAAtB,EAAsBA,eAChBxI,EAAS,GAET+R,EAAkBziB,EAAamd,SAC/BuF,EAAaxJ,EAAeiE,SAIlC,OAHAzM,EAAO2J,aAAeoI,EAAgBhrB,KAAOirB,EAAWjrB,MAAQuI,EAAaC,KAAK,gBAAkB,IAAMlI,KAAK6E,GAAG0H,QAAQ4X,WAC1HxL,EAAO4J,aAAemI,EAAgB/qB,IAAMgrB,EAAWhrB,KAAOsI,EAAaC,KAAK,iBAAmB,IAAMlI,KAAK6E,GAAG0H,QAAQ6X,YAElHzL,IAl/BX,wBA0/BE,SAAW2J,EAAaC,QAElB,IAAsBD,IACxBA,EAAc,SAEZ,IAAsBC,IACxBA,EAAc,IAGhB,IAAMqI,EAAY5qB,KAAK6E,GAAGmD,KAAKmZ,eAAerP,QACxC+Y,EAAuB7qB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,eACtD4iB,EAAYxI,EAAcsI,EAE1BG,EAAa/qB,KAAK6E,GAAGmD,KAAKmZ,eAAepP,SACzCiZ,EAAwBhrB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,gBACvD+iB,EAAY1I,EAAcwI,EAE5BH,EAAYC,EAEd7qB,KAAK6E,GAAGmD,KAAKmZ,eAAexP,IAAI,OAAhC,WAA4CkZ,GAAwB,GAAKC,EAAzE,QAGA9qB,KAAK6E,GAAGmD,KAAKmZ,eAAexP,IAAI,OAAQ,GACxC3R,KAAK6E,GAAGmD,KAAKC,aAAa7F,WAAW0oB,GAAaD,GAAwB,KAGxEE,EAAaC,EAEfhrB,KAAK6E,GAAGmD,KAAKmZ,eAAexP,IAAI,MAAhC,WAA2CqZ,GAAyB,GAAKC,EAAzE,QAEAjrB,KAAK6E,GAAGmD,KAAKmZ,eAAexP,IAAI,MAAO,GACvC3R,KAAK6E,GAAGmD,KAAKC,aAAa5F,UAAU4oB,GAAaD,GAAyB,OAzhChF,4BAiiCE,WACE,OAAOxoB,KAAK4Q,MAAMpT,KAAK6E,GAAG0H,QAAQwF,UAliCtC,2BAyiCE,WACE,IAGMD,EAAgC,IAAxB9R,KAAK6E,GAAG0H,QAAQuF,MAC9B,OAAOtP,KAAK4Q,OAAMI,EAAAA,EAAAA,OAAM1B,EAHZ,GADA,QA1iChB,yBAqjCE,WACE,OAAOtP,KAAK4Q,MAAMpT,KAAK6E,GAAG0H,QAAQoa,gBAAkB3mB,KAAK6E,GAAG0H,QAAQC,wBAtjCxE,8BA6jCE,WACE,OAAOhK,KAAK4Q,MAAMpT,KAAK6E,GAAG0H,QAAQka,OAASzmB,KAAK6E,GAAG0H,QAAQkZ,YA9jC/D,+BAqkCE,WACE,OAAOjjB,KAAK4Q,MAAMpT,KAAK6E,GAAG0H,QAAQka,OAASzmB,KAAK6E,GAAG0H,QAAQmZ,SAAW1lB,KAAKkrB,mBAtkC/E,2BA4kCE,SAAc5G,EAAK9Z,EAAO9K,EAAM2pB,EAAO1pB,EAAKwrB,GAG1C,IAMIC,EANErZ,EAAS/R,KAAK8V,KAAKoR,eAAe1c,GAClCsH,EAAS9R,KAAK8V,KAAKqR,cAAc3c,GACjC4B,EAASpM,KAAK6E,GAAG0H,QAAQwF,OAASA,EAClCgY,EAAUvnB,KAAK4Q,MAAMtB,EAAQ1F,GAE7Bqa,EAASzmB,KAAKymB,SAGlB2E,EADE,KAAOprB,KAAK8V,KAAKhI,YAAYtD,GACvBic,EAASsD,EAETtD,EAEV,IAAM4E,EAAQrrB,KAAKL,MAEnB7B,GAAEwmB,GAAK3S,IAAI,CACTG,MAAO,GAAF,QAAOuX,EAAQ3pB,GAAQ0M,EAAvB,MACL2F,OAAQ,GAAF,QAAMoZ,EAASxrB,GAAOyM,EAAtB,MACN1M,KAAM,GAAF,OAAO0rB,EAAQ1rB,EAAO0M,EAAtB,MACJzM,IAAK,GAAF,OAAQ0rB,EAAQ1rB,EAAMyM,EAAtB,UAjmCT,kCA2mCE,SAAqBiI,GAGnB,IAAI+Q,EAAS5iB,KAAK4Q,OAAQiB,EAASrU,KAAK8V,KAAKrM,cAAiB,IAAOzJ,KAAK6E,GAAG0H,QAAQoZ,WAOrF,MAJI,MAAQ3lB,KAAK6E,GAAGgE,kBAClBuc,IAAW,GAGNA,IArnCX,2BA6nCE,SAAc/Q,GAEZ,MAAsC,KAAjCrU,KAAK8V,KAAKhI,YAAYuG,IAA+C,MAA3BrU,KAAK6E,GAAGgE,gBAC9CrG,KAAK4Q,MAAQiB,EAASrU,KAAK8V,KAAKrM,cAAiBzJ,KAAK6E,GAAG0H,QAAQoZ,UAAY,IAE7EnjB,KAAK4Q,OAAQ,EAAIiB,EAASrU,KAAK8V,KAAKrM,eAAiBzJ,KAAK6E,GAAG0H,QAAQoZ,UAAY,MAloC9F,uCA2oCE,SAA0BxmB,GACxB,IAAI+lB,EACJ,MAAI,MAAQllB,KAAK6E,GAAGgE,iBAElBqc,EAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAAwF,IAAvEvjB,GAAEkC,KAAK+gB,WAAWqE,SAAS1lB,KAAO5B,GAAEkC,KAAK+gB,WAAWjP,QAAU3S,GAG3G+lB,GAAY1R,EAAAA,EAAAA,OAAMhR,KAAKklB,MAAMxC,GAAYllB,KAAK6E,GAAG4e,wBAAyBzjB,KAAK6E,GAAG0H,QAAQ8U,cAAgB,KAI1G6D,EAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAAwF,IAAvEvjB,GAAEkC,KAAK+gB,WAAWqE,SAAS1lB,KAAO5B,GAAEkC,KAAK+gB,WAAWjP,QAAU3S,GAC3G+lB,GAAY1R,EAAAA,EAAAA,OAAMhR,KAAKklB,MAAMxC,GAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAAgB,EAAGrhB,KAAK6E,GAAG6e,2BAvpC1F,wCAiqCE,SAA2BvkB,GACzB,IAAI+lB,EACJ,MAAI,MAAQllB,KAAK6E,GAAGgE,iBAElBqc,EAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAA4D,IAA3CliB,EAAQrB,GAAEkC,KAAKghB,WAAWoE,SAAS1lB,MAChFwlB,GAAY1R,EAAAA,EAAAA,OAAMhR,KAAKklB,MAAMxC,GAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAAgB,EAAGrhB,KAAK6E,GAAG6e,0BAGpFwB,EAAYllB,KAAK6E,GAAG0H,QAAQ8U,cAA4D,IAA3CliB,EAAQrB,GAAEkC,KAAKghB,WAAWoE,SAAS1lB,MAChFwlB,GAAY1R,EAAAA,EAAAA,OAAMhR,KAAKklB,MAAMxC,GAAYllB,KAAK6E,GAAG4e,wBAAyBzjB,KAAK6E,GAAG0H,QAAQ8U,cAAgB,MA1qChH,sBAmrCE,WAaE,IATA,IAAQ1e,EAAaH,KAAbG,IAAK6G,EAAQhH,KAARgH,IACLsM,EAAS9V,KAAT8V,KACR,EAAyC9V,KAAK6E,GAAG0H,QAAzC8U,EAAR,EAAQA,cAAeC,EAAvB,EAAuBA,cAInBgK,EAAUxV,EAAKZ,QAAQvS,EAAI,EAAG6G,EAAI6X,EAAeC,KACjDiK,EAAWzV,EAAKZ,QAAQvS,EAAI0e,EAAeC,IAEtChjB,EAAI,EAAGA,EAAIktB,EAA4BltB,IAC1CgtB,IACFtrB,KAAKwe,oBAAoB8M,EAAQ9gB,OACjC8gB,EAAUA,EAAQnV,SAAS,CAAElB,+BAA+B,KAG1DsW,IACFvrB,KAAKwe,oBAAoB+M,EAAS/gB,OAClC+gB,EAAWA,EAASnV,SAAS,CAAEnB,+BAA+B,OAxsCtE,uBAgtCE,WACE,MAAO,CACLwW,SAAU,WACVpC,MAAO,GACP1pB,IAAK,GAAF,OAAKK,KAAKL,MAAV,MACH+kB,OAAQ,KArtCd,qBA0tCE,WACE,MAAO,CACL3S,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQwF,OAArB,SA5tCZ,uBAiuCE,WACE,mBACK/R,KAAK0rB,aACL1rB,KAAK2rB,WAFV,IAGEjsB,KAAM,GAAF,OAAKM,KAAK6E,GAAG0H,QAAQka,OAASzmB,KAAK6E,GAAG0H,QAAQkZ,SAA9C,MACJ3T,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQkZ,SAArB,UAtuCX,wBA2uCE,WACE,gBACKzlB,KAAK2rB,WADV,IAEE7Z,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQsZ,eAArB,MACLnmB,KAAM,GAAF,OAAKM,KAAK6E,GAAG0H,QAAQma,iBAAmB1mB,KAAK6E,GAAG0H,QAAQC,qBAAxD,MACJ7M,IAAK,GAAF,OAAKK,KAAK6E,GAAG0H,QAAQoa,gBAAkB3mB,KAAK6E,GAAG0H,QAAQC,qBAAvD,MACHof,OAA2C,IAAnC5rB,KAAK6E,GAAG0H,QAAQsZ,eAAuB,OAAS,SAjvC9D,wBAsvCE,WACE,mBACK7lB,KAAK0rB,aACL1rB,KAAK2rB,WAFV,IAGEjsB,KAAM,GAAF,OAAKM,KAAK6E,GAAG0H,QAAQka,OAArB,MACJ3U,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQmZ,SAArB,UA3vCX,wBAgwCE,WACE,gBACK1lB,KAAK2rB,WADV,IAEE7Z,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQwZ,eAArB,MACLrmB,KAAM,GAAF,OAAKM,KAAK6E,GAAG0H,QAAQkZ,SAAWzlB,KAAK6E,GAAG0H,QAAQmZ,SAAW1lB,KAAK6E,GAAG0H,QAAQsZ,eAA3E,MACJlmB,IAAK,GAAF,OAAKK,KAAK6E,GAAG0H,QAAQoa,gBAAkB3mB,KAAK6E,GAAG0H,QAAQC,qBAAvD,MACHof,OAA2C,IAAnC5rB,KAAK6E,GAAG0H,QAAQwZ,eAAuB,OAAS,SAtwC9D,4BA2wCE,WACE,MAAO,CACLhU,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQ6X,YAArB,MACNtS,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQ4X,WAArB,MACLsH,SAAU,cA/wChB,0BAoxCE,WACE,MAAO,CACL3Z,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQyZ,kBAArB,MACLjU,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQ2Z,mBAArB,MACN2F,WAAY,aAxxClB,oBA6xCE,WACE,MAAO,CACL/Z,MAAO,GAAF,OAAK9R,KAAK6E,GAAG0H,QAAQG,kBAArB,MACLqF,OAAQ,GAAF,OAAK/R,KAAK6E,GAAG0H,QAAQqa,mBAArB,MACNlnB,KAAM,GAAF,OAAKM,KAAK6E,GAAG0H,QAAQka,OAAUzmB,KAAK6E,GAAG0H,QAAQG,kBAAoB,EAAnE,MACJ/M,IAAK,GAAF,OAAKK,KAAK6E,GAAG0H,QAAQua,gBAArB,8BAlyCT,ksCCRO,IAAMgF,GAAb,WAKE,WAAYjnB,EAAIsb,gGAAW,SACzBngB,KAAK6E,GAAKA,EACV7E,KAAK8V,KAAOqK,UAPhB,sCAiBE,SAAU4L,GAAW,IAKfC,EAUAC,EAfe,SACX7Y,EAAU5Q,KAAV4Q,MACA0C,EAAS9V,KAAT8V,KACF8U,EAAY5qB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,eAAiB,GAG9DgkB,EAAW,EACXC,EAAY,EACZC,EAAW,EACXC,EAAa,EACbC,EAAY,EAEVC,EAAU,GAZG,KAmBAzW,EAAKzC,cAAc,CAAE4B,+BAA+B,KAnBpD,IAmBnB,2BAAgF,KAArE5E,EAAqE,QACxEmc,EAAYxsB,KAAK6E,GAAG4nB,WACtBP,GAAYM,EAAYxsB,KAAK6E,GAAG+G,cAAgBgf,IAClDyB,IACAH,EAAW,EACXI,EAAY,GAITC,EAAQF,KACXE,EAAQF,GAAc,IAEnBE,EAAQF,GAAYK,QACvBH,EAAQF,GAAYK,MAAQ,GAC5BH,EAAQF,GAAYta,OAAS,EAC7Bwa,EAAQF,GAAY1sB,IAAM,GAE5B4sB,EAAQF,GAAYK,MAAMJ,GAAa,CACrCK,IAAKtc,EAAK7F,MACV9K,KAAMwsB,IAGRF,EAAa5Y,EAAO/C,EAAK0B,OAAS/R,KAAK6E,GAAG4nB,WAAcpc,EAAKyB,QAC5Cya,EAAQF,GAAYta,SACnCwa,EAAQF,GAAYta,OAASia,GAEb,IAAdM,IAAmBH,GAAansB,KAAK6E,GAAG+G,aAAe2gB,EAAQF,GAAYta,SAC/Ema,GAAYM,EAAYxsB,KAAK6E,GAAG+G,cACjBwgB,IAAYA,EAAWF,GACtCI,IAEIjc,EAAK7F,OAASuhB,IAChBE,EAAUE,EAAYnsB,KAAK6E,GAAG+G,aAAe2gB,EAAQF,GAAYta,SAnDlD,8BAwDnB/R,KAAK6E,GAAGmD,KAAK4kB,cAAc7a,OAAOoa,GAElC,IAAMU,EAAiBzZ,GAAOpT,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,eAAiBkkB,GAAY,GAAK,QAGxE,IAAZH,GACTjsB,KAAK6E,GAAGmD,KAAKC,aAAa5F,UAAU4pB,GAgBtC,IAbA,IAAM5pB,EAAYrC,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,aAC3C4kB,EAAezqB,EAAYrC,KAAK6E,GAAGmD,KAAKC,aAAa8J,SAEvDgb,EAAU,EACVC,EAAa,EACXC,EAAgB,GAChBC,EAAkB,GAGpBC,EAAerX,EAAKrM,cAAgB,EACpC2jB,EAAc,EAGT9uB,EAAI,EAAGA,EAAIiuB,EAAQhuB,OAAQD,IAC7BiuB,EAAQjuB,KACb0uB,GAAchtB,KAAK6E,GAAG+G,aAAe2gB,EAAQjuB,GAAGyT,QAC7Bgb,GAAW1qB,GAAe0qB,GAAWD,GAClCE,GAAc3qB,GAAe2qB,GAAcF,GAC3CC,GAAW1qB,GAAe2qB,GAAcF,KAE5DG,EAAczuB,KAAKF,GACfiuB,EAAQjuB,GAAGouB,MAAM,GAAGC,IAAMQ,IAC5BA,EAAeZ,EAAQjuB,GAAGouB,MAAM,GAAGC,KAEjCJ,EAAQjuB,GAAGouB,MAAMH,EAAQjuB,GAAGouB,MAAMnuB,OAAS,GAAGouB,IAAMS,IACtDA,EAAcb,EAAQjuB,GAAGouB,MAAMH,EAAQjuB,GAAGouB,MAAMnuB,OAAS,GAAGouB,MAG5DI,EAAUR,EAAQjuB,GAAGqB,MAAO4sB,EAAQjuB,GAAGqB,IAAMotB,GACjDA,EAAUC,GAOZ,IAFA,IAAMK,EAAWJ,EAAc,GACzBK,EAAUL,EAAcA,EAAc1uB,OAAS,GAC5CD,EAAI,EAAGA,EAAI0B,KAAK6E,GAAG4G,eAAiB,EAAGnN,IAC1CgvB,EAAUhvB,EAAIiuB,EAAQhuB,QAAU0uB,EAAczuB,KAAK8uB,EAAUhvB,GAEnE,IAAK,IAAIA,EAAI,EAAGA,EAAI0B,KAAK6E,GAAG4G,eAAgBnN,IACtC+uB,EAAW/uB,GAAK,GAAK2uB,EAAczuB,KAAK6uB,EAAW/uB,GAEzD2uB,EAAc9Z,OAGd,cAAkB8Z,EAAlB,eAAiC,CAA5B,IAAMM,EAAG,KACZ,IAAIC,EAAAA,EAAAA,YAAWD,EAAKvtB,KAAK6E,GAAG4oB,eAAgB,CAC1C,IAAKlB,EAAQgB,GAAQ,SADqB,WAEEhB,EAAQgB,GAAKb,OAFf,mCAExBgB,EAFwB,EAE7Bf,IAAiBgB,EAFY,EAElBjuB,KAChB8sB,EAAY,EAAK3nB,GAAG4nB,WACpBT,EAAa5Y,EAAO0C,EAAKlI,cAAc8f,GAAQ,EAAK7oB,GAAG4nB,WAAc3W,EAAKnI,aAAa+f,IACvFX,EAAUR,EAAQgB,GAAK5tB,IACzBD,EAAOiuB,EAAWd,EAClB,MAAQ,EAAKhoB,GAAGgE,kBAClBnJ,EAAOkrB,EAAY4B,EAAY9sB,GAGjCA,GAAQ,EAAKmF,GAAG+G,aAChBshB,EAAgB1uB,KAAKkvB,GAGrB,IAAME,EAAcxa,EAAM0C,EAAKnI,aAAa+f,GAAQ,EAAK7oB,GAAG4nB,YAEtDoB,EADiB,EAAIrrB,KAAKklB,MAAMkG,EAAc,GAG9CE,EAAgB,EAAKjpB,GAAGsZ,qBAAqBuP,GAChDjP,OAAO,CACNC,WAAY,CACV5M,MAAO0a,EACPza,OAAQia,EACRrsB,IAAKotB,EACLrtB,KAAAA,GAEF0M,OAAQyhB,IAGZC,EAAclU,WAAWzY,KAAK,OAAQusB,GAAMzmB,GAAG,WAAW,SAAAtI,GAIxD,EAAKkG,GAAGkY,iBAAiB2Q,EAAM,CAAEK,wBAAwB,IAEzD,EAAKlpB,GAAG6B,WAAW,EAAK7B,GAAGoB,aAAc,CAAE8nB,wBAAwB,IAGnE,IAAM7mB,EAAa,EAAKrC,GAAG2B,cAAcK,QACzC,EAAKhC,GAAG2B,cAAchI,KAAK0I,GAC3B,EAAKrC,GAAGwC,qBAAqBvJ,GAAE,aAAc,QAAS,iBAEtD,EAAK+G,GAAG4K,QAAQvL,EAAOC,gBACvBxF,EAAMkE,qBAGR,EAAKgC,GAAGmD,KAAK4kB,cAAczjB,OAAO2kB,EAAclU,aA7ClD,2BAAgE,IAFtB,gCA/G3B,WAoKD5Z,KAAK6E,GAAG4oB,eApKP,IAoKnB,2BAAyC,KAA9BF,EAA8B,QACvC,IAAIC,EAAAA,EAAAA,YAAWD,EAAKN,GAAgB,wBACLV,EAAQgB,UADH,aACL,EAAcb,OADT,IAClC,2BAAkD,KACT,EADvBliB,EAAgC,QAArCmiB,IACNO,MAAAA,GAAAA,EAAiB3mB,SAASiE,IAC7B,UAAAxK,KAAK6E,GAAG/G,EAAR,kBAAqB0M,WAArB,SAA+B1D,UAHD,iCArKnB,8BA+KnB,IAAM6C,EAAe3J,KAAK6E,GAAG8E,eACzBA,EAAewjB,EACjBntB,KAAK6E,GAAGkY,iBAAiBoQ,GAChBxjB,EAAeyjB,GACxBptB,KAAK6E,GAAGkY,iBAAiBqQ,GAI3BptB,KAAK6E,GAAG4oB,cAAgBR,EAAcvd,QAGtC1P,KAAK6E,GAAG/G,EAAE,6BAA6B6J,YAAY,4BAGnD3H,KAAK6E,GAAG/G,EAAE,WAAakC,KAAK6E,GAAG8E,gBAAgB/B,SAAS,4BAExD5H,KAAK6E,GAAGiK,kBAAkB9O,KAAK6E,GAAGuH,UAhNtC,2BAwNE,SAAc4hB,GACZ,IAAMN,EAAQ5vB,GAAEkwB,GAAgB7sB,KAAK,QAC/BiL,EAAUtO,GAAEkwB,GAAgB7sB,KAAK,UACjC8sB,EAAOjuB,KAAK6E,GAAGqpB,WAAWC,MAAMT,EAAMthB,GACtCgiB,EAAUtwB,GAAEkwB,GAAgBK,SAElCvwB,GAAEswB,GAASjlB,OAAO8kB,GAClBnwB,GAAEkwB,GAAgBlnB,WA/NtB,kBAqOE,SAAK+Z,GACH,IAAMyN,EAAatuB,KAAK6E,GAAG6G,aAC3B,OAAQmV,GACR,KAAM,EACJ7gB,KAAK6E,GAAG6G,cAAgB,EACxB,MACF,KAAK,EACH1L,KAAK6E,GAAG6G,cAAgB,EAI1B1L,KAAK6E,GAAG6G,cAAe8H,EAAAA,EAAAA,OAAMxT,KAAK6E,GAAG6G,aAAc,EAAG,GAElD1L,KAAK6E,GAAG6G,cAAgB4iB,IAC1BtuB,KAAK6E,GAAG4oB,cAAgB,GACxBztB,KAAKuuB,aApPX,+BA8PE,SAAkBC,GAChB,IAEMjjB,GAAWijB,EAAmB,GAAKxuB,KAAK6E,GAAG+G,aAC3CkG,GAAS9R,KAAK6E,GAAGmD,KAAK4kB,cAAc9a,QAAUvG,IAAYijB,EAAmB,IAC7EC,EAAsBjsB,KAAK4Q,MAAMtB,GACvC,OAAO2c,EAAsB,EAAIA,EALD,MA/PpC,qBAuQE,WACEzuB,KAAK6E,GAAGmD,KAAKC,aAAauY,QAC1BxgB,KAAK6E,GAAGmD,KAAKC,aAAa0J,IAAI,CAC5B+c,UAAW,SACXC,UAAW,SAGb3uB,KAAK6E,GAAGmD,KAAK4kB,cAAgB9uB,GAAE,kCAC/BkC,KAAK6E,GAAGmD,KAAKC,aAAakB,OAAOnJ,KAAK6E,GAAGmD,KAAK4kB,eAC9C5sB,KAAK6E,GAAGmD,KAAKC,aAAapI,eAAe,CAACQ,gBAAe,IAEzDL,KAAK6E,GAAG+pB,aAAa5uB,KAAK6E,GAAGmD,KAAKC,cAKlCjI,KAAK6E,GAAG4nB,WAAazsB,KAAK6uB,kBAAkB7uB,KAAK6E,GAAG6G,cACpD1L,KAAK6E,GAAGuH,OAASpM,KAAK8V,KAAKnI,aAAa,GAAK3N,KAAK6E,GAAG4nB,WACrDzsB,KAAK6E,GAAG4oB,cAAgB,GAExBztB,KAAKwkB,UAAUxkB,KAAK6E,GAAG8E,gBACvB3J,KAAK6E,GAAG8b,oBA5RZ,yBAkSE,SAAYnW,GAWV,IAXiB,WACT4I,EAAU5Q,KAAV4Q,MACA0C,EAAS9V,KAAT8V,KACF8U,EAAY5qB,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,eAAiB,GAC5DskB,EAAYxsB,KAAK6E,GAAG4nB,WACtBM,EAAU,EACVb,EAAW,EACXC,EAAY,EACZ2C,EAAY,EACZxC,EAAY,EAEPhuB,EAAI,EAAGA,GAAKkM,EAAOlM,IAAK,CAC3B4tB,GAAYM,EAAYxsB,KAAK6E,GAAG+G,cAAgBgf,IAClDsB,EAAW,EACX4C,EAAY,EACZxC,EAAY,GAGd,IAAMN,EAAa5Y,EAAO0C,EAAKlI,cAAc0e,GAAatsB,KAAK6E,GAAG4nB,WAAc3W,EAAKnI,aAAa2e,IAC9FN,EAAa8C,IAAaA,EAAY9C,GACzB,GAAbM,IACFS,EAAUZ,EACVA,GAAansB,KAAK6E,GAAG+G,aAAekjB,GAEtC5C,GAAYM,EAAYxsB,KAAK6E,GAAG+G,aAChC0gB,IAEFtsB,KAAK6E,GAAGkY,iBAAiBvS,GACrBxK,KAAK6E,GAAGmD,KAAKC,aAAaC,KAAK,cAAgB6kB,EACjD/sB,KAAK6E,GAAG2f,aAERxkB,KAAK6E,GAAGqjB,WAAY,EACpBloB,KAAK6E,GAAGmD,KAAKC,aAAa5D,MAAK,GAC5BkF,QAAQ,CAAElH,UAAW0qB,GAAW,QAAQ,WAAQ,EAAKloB,GAAGqjB,WAAY,6BAnU7E,KCFa6G,YAAmB,CAC9B3b,MAAO5Q,KAAK4Q,MACZmD,KAF8B,SAEzByY,GAAK,OAAOA,EAAI,KAIVC,GAAgB,CAC3B7b,MAD2B,SACrB4b,GACJ,gBAAO,EAAMxsB,KAAK4Q,MAAM5Q,KAAK0sB,KAAK1sB,KAAKG,IAAI,EAAGqsB,OAEhDzY,KAJ2B,SAItByY,GACH,gBAAO,EAAMxsB,KAAK0sB,KAAKF,GAAK,KAInBG,GAAoB,CAC/BC,KAAMH,GACNI,QAASN,0gCCZJ,IAAMO,GAAb,WAOE,WAAYxZ,GAA6D,6DAAJ,GAAI,IAArDvH,UAAAA,OAAqD,aAAlCrC,UAAAA,OAAkC,MAAtB+iB,GAAsB,aACvEjvB,KAAK8V,KAAOA,EACZ9V,KAAKuO,UAAYA,EACjBvO,KAAKkM,UAAYA,EAEjBlM,KAAKuvB,MAAQ,GACbvvB,KAAKwvB,aAAe,UAbxB,kCAwBE,SAAMhlB,EAAO4B,GACX,IACMqjB,GADezvB,KAAKuvB,MAAM/kB,IAAU,IAEvCnE,QAAO,SAAAzH,GAAC,OAAIA,EAAE8wB,QAAU9wB,EAAEwN,QAAUA,KACvC,GAAIqjB,EAAiBlxB,OAAQ,CAE3B,IAAMoxB,EAAantB,KAAKG,IAAL,MAAAH,KAAI,GAAQitB,EAAiB9pB,KAAI,SAAAlE,GAAC,OAAIA,EAAE2K,YAC3D,OAAOpM,KAAK4vB,mBAAmBplB,EAAOmlB,GAItC,OAAO3vB,KAAK4vB,mBAAmBplB,EAAO4B,KAnC5C,yBA6CE,SAAY5B,EAAO4B,GAAQ,QACnByjB,EAAQ,UAAG7vB,KAAKuvB,MAAM/kB,UAAd,aAAG,EAAmB1H,MAAK,SAAArB,GAAC,OAAIA,EAAE2K,QAAUA,KAC1D,iBAAOyjB,MAAAA,OAAP,EAAOA,EAAUH,cAAjB,WA/CJ,iCAyDE,SAAoBllB,GAAkC,MAA3BslB,EAA2B,uDAAV9a,EAAAA,EACpC+a,GAAa,UAAA/vB,KAAKuvB,MAAM/kB,UAAX,eAAmBnE,QAAO,SAAAzH,GAAC,OAAIA,EAAE8wB,YAAW,GAC/D,IAAKK,EAAWxxB,OAAQ,OAAO,KAE/B,IAAMyxB,EAAiBD,EAAW1pB,QAAO,SAAA5E,GAAC,OAAIA,EAAE2K,QAAU0jB,KAC1D,GAAIE,EAAezxB,OAEjB,OAAOiE,KAAKgH,IAAL,MAAAhH,KAAI,GAAQwtB,EAAerqB,KAAI,SAAAlE,GAAC,OAAIA,EAAE2K,YAG/C,IAAM6jB,EAAmBF,EAAW1pB,QAAO,SAAA5E,GAAC,OAAIA,EAAE2K,OAAS0jB,KAC3D,OAAOttB,KAAKG,IAAL,MAAAH,KAAI,GAAQytB,EAAiBtqB,KAAI,SAAAlE,GAAC,OAAIA,EAAE2K,cApEnD,gCA+EE,SAAmB5B,EAAO4B,GAAQ,MAC1B8jB,EAAclwB,KAAKkM,UAAUkH,MAAMhH,GACrC+jB,EAAU,UAAGnwB,KAAKuvB,MAAM/kB,UAAd,aAAG,EAAmB1H,MAAK,SAAArB,GAAC,OAAIA,EAAE2K,QAAU8jB,KACrDC,IACHA,EAAa,CAAE/jB,OAAQ8jB,EAAaR,QAAQ,IAC5B1vB,KAAKuvB,MAAM/kB,KAAWxK,KAAKuvB,MAAM/kB,GAAS,KAClDhM,KAAK2xB,IAEf,IAAM9f,EAAOrQ,KAAK8V,KAAKZ,QAAQ1K,GAEzByjB,EAAOnwB,GAAE,UAAW,CACxB,MAAS,cACT,IAAO,kBACPsyB,IAAK/f,EAAKqG,OAAOwZ,EAAa,KAE7B/uB,KAAK,SAAU+uB,GAOlB,OANIlwB,KAAKuO,WACP0f,EAAKvmB,KAAK,SAAU2I,EAAKggB,aAAaH,IAEnCC,EAAWT,QACdzB,EAAKqC,IAAI,QAAQ,kBAAMH,EAAWT,QAAS,KAEtCzB,yBArGX,idCoDe,SAASsC,KAA2B,IAAhBC,EAAgB,uDAAJ,GACvC1wB,EAAU2wB,GAAOvwB,QAAO,EAAM,GAAIqwB,GAAWG,eAAgBF,EAAWD,GAAWI,iBACzF3wB,KAAK4wB,MAAM9wB,GAw9Cb,SAAS+wB,GAAyBC,EAAOC,EAAUC,GAA2B,IAAnBC,EAAmB,uDAARD,EAE9DE,EAAY,SAAAC,GAAG,OAAIA,EAAItsB,IAEvBusB,EAAY,SAAAvsB,GAAE,OAAIA,EAAGwsB,cAAcN,IACzC7tB,EAAmB4tB,EAAOE,EAAQE,EAAWX,GAAYU,EAAUG,IAz+CP,GAA1DlnB,SAASonB,WAAW1qB,QAAQ,2BAC9B9I,IAAE,kBAAM,IAAIyzB,EAAAA,GAAeC,UAc7BjB,GAAWkB,mBAIXlB,GAAWtqB,aAAe,EAE1BsqB,GAAWpqB,aAAe,EAE1BoqB,GAAWnqB,eAAiB,EAE5BmqB,GAAWrC,WAAa,KAGxBqC,GAAWmB,0BAA4B,IACvCnB,GAAWoB,6BAA+B,IAG1CpB,GAAWqB,WAAa1tB,EAExBqsB,GAAWG,eAAiBrlB,EAM5BklB,GAAWI,gBAAkB,GAO7BJ,GAAW7sB,UAAUktB,MAAQ,SAAS9wB,GAEpCE,KAAKF,QAAUA,EAGfE,KAAK2K,cAAWQ,EAGhBnL,KAAK6xB,cAAe,EAMpB7xB,KAAKwG,cAAgB,GAMrBxG,KAAK+tB,wBAAyB,EAG9B/tB,KAAKupB,0BAA4B,KAIjCvpB,KAAKiG,aAAesqB,GAAWtqB,aAE/BjG,KAAKmG,aAAeoqB,GAAWpqB,aAE/BnG,KAAKoG,eAAiBmqB,GAAWnqB,eAIjCpG,KAAKoM,OAAS,EACdpM,KAAKsL,SAAWxL,EAAQwL,SACxBtL,KAAKuL,QAAUzL,EAAQyL,QAEvBvL,KAAKkM,UAAYijB,GAAkBrvB,EAAQoM,WACtClM,KAAKkM,YACR3M,QAAQ0oB,KAAR,4BAAkCnoB,EAAQoM,UAA1C,gBACAlM,KAAKkM,UAAYijB,GAAkB9jB,EAAgBa,YAMrDlM,KAAK4F,KAAO,KACZ5F,KAAK8xB,aAAe,KACpB9xB,KAAK6J,GAAK/J,EAAQ+J,GAClB7J,KAAKwL,WAAa1L,EAAQ0L,WAE1BxL,KAAKysB,WAAa,IAClBzsB,KAAKyL,eAAiB3L,EAAQ2L,eAC9BzL,KAAK0L,aAAe5L,EAAQ4L,aAC5B1L,KAAK2L,gBAAkB7L,EAAQ6L,gBAC/B3L,KAAK4L,aAAe9L,EAAQ8L,aAC5B5L,KAAKytB,cAAgB,GAErBztB,KAAK6c,iBAAmB,GAExB7c,KAAK+xB,KAAO,GAEZ/xB,KAAKgyB,eAAiB,GAEtBhyB,KAAKkoB,WAAY,EACjBloB,KAAK6L,UAAY/L,EAAQ+L,UACzB7L,KAAKiyB,UAAYnyB,EAAQmyB,UACzBjyB,KAAKykB,aAAe,KACpBzkB,KAAKmoB,YAAe,KAQpBnoB,KAAKwjB,WAAa,KAClBxjB,KAAKkyB,wBAA0B,KAC/BlyB,KAAKmyB,oBAAqB,EAC1BnyB,KAAKoyB,WAAa,KAElBpyB,KAAKqK,SAAWvK,EAAQuK,SACxBrK,KAAKsK,QAAUxK,EAAQwK,QACvBtK,KAAKiM,cAAgBnM,EAAQmM,cAE7BjM,KAAKmM,iBAAmBrM,EAAQqM,iBAChCnM,KAAKsM,QAAUxM,EAAQwM,QAEvBtM,KAAKuM,QAAUzM,EAAQyM,QACvBvM,KAAK2M,qBAAuB7M,EAAQ6M,qBAEpC3M,KAAKuK,UAAYzK,EAAQyK,UACzBvK,KAAK4M,QAAU9M,EAAQ8M,QACvB5M,KAAK6M,YAAc/M,EAAQ+M,YAC3B7M,KAAK8M,aAAehN,EAAQgN,aAC5B9M,KAAKqyB,UAAYvyB,EAAQuyB,UAEzBryB,KAAKiN,SAAWnN,EAAQmN,SACxBjN,KAAKkN,UAAYpN,EAAQoN,UACzBlN,KAAKmN,gBAAkBrN,EAAQqN,gBAE/BnN,KAAKoN,2BAA6BtN,EAAQsN,2BAC1CpN,KAAKqN,GAAKvN,EAAQuN,GAElBrN,KAAK6I,gBAAkB/I,EAAQ+I,gBAC/B7I,KAAKuN,UAAYzN,EAAQyN,UACzBvN,KAAKiO,aAAenO,EAAQmO,aAC5BjO,KAAKsyB,MAAQ,KAGbtyB,KAAKmB,KAAOrB,EAAQqB,KAChBrB,EAAQ2J,cAAa8mB,GAAW7sB,UAAU+F,YAAc3J,EAAQ2J,aAChE3J,EAAQ6N,eAAc4iB,GAAW7sB,UAAUiK,aAAe7N,EAAQ6N,cAClE7N,EAAQ8N,gBAAe2iB,GAAW7sB,UAAUkK,cAAgB9N,EAAQ8N,eACpE9N,EAAQ+N,aAAY0iB,GAAW7sB,UAAUmK,WAAa/N,EAAQ+N,YAC9D/N,EAAQgO,cAAayiB,GAAW7sB,UAAUoK,YAAchO,EAAQgO,aAChEhO,EAAQ4K,aAAY6lB,GAAW7sB,UAAUgH,WAAa5K,EAAQ4K,YAC9D5K,EAAQ8K,cAAa2lB,GAAW7sB,UAAUkH,YAAc9K,EAAQ8K,aAChE9K,EAAQiO,mBAAkBwiB,GAAW7sB,UAAUqK,iBAAmBjO,EAAQiO,kBAC1EjO,EAAQkO,iBAAgBuiB,GAAW7sB,UAAUsK,eAAiBlO,EAAQkO,gBAG1EhO,KAAKgI,KAAO,GAMZhI,KAAKuyB,QAAU,CACbzc,KAAM,IAAIjD,EAAU7S,OAStBA,KAAKwyB,YAAc,CACjBC,OAAQ,IAAI7tB,EAAO5E,MACnB0yB,QAAS,IAAIlkB,EAAQxO,OAGvBA,KAAK2yB,OAAS,CACZC,QAAS,IAAI1S,GAAQlgB,KAAMA,KAAKuyB,QAAQzc,MACxC+c,QAAS,IAAI/R,GAAQ9gB,KAAMA,KAAKuyB,QAAQzc,MACxCgd,UAAW,IAAIhH,GAAU9rB,KAAMA,KAAKuyB,QAAQzc,OAI9C9V,KAAKqxB,cAAgB,CACnB,eAAgBrxB,KAAKuyB,QAAQzc,KAC7B,qBAAsB9V,KAAKwyB,YAAYC,OACvC,sBAAuBzyB,KAAKwyB,YAAYE,QACxC,iBAAkB1yB,KAAK2yB,OAAOC,QAC9B,iBAAkB5yB,KAAK2yB,OAAOE,QAC9B,mBAAoB7yB,KAAK2yB,OAAOG,WAIlC9yB,KAAKkuB,WAAa,IAAIoB,GAAWtvB,KAAKuyB,QAAQzc,KAAM,CAClDvH,UAAWvO,KAAKF,QAAQyO,UACxBrC,UAAWlM,KAAKkM,aAQpBqkB,GAAW7sB,UAAUqvB,+BAAiC,WACpD,IAAIC,EAAenvB,OAAOovB,OAAOjzB,KAAK2yB,OAAOE,QAAQ5R,gBAAgBtb,KAAI,SAAAutB,GAAE,OAAIA,EAAGtZ,WAAW,MAC1FmO,OAAOlkB,OAAOovB,OAAOjzB,KAAK2yB,OAAOC,QAAQxS,WAAWlC,oBAAoBvY,KAAI,SAAAutB,GAAE,OAAIA,EAAGtZ,WAAW,OAInG,OAHI5Z,KAAK4F,MAAQ5F,KAAKoG,iBACpB4sB,EAAeA,EAAajL,OAAO/nB,KAAKlC,EAAE,oBAAoBq1B,YAEzDH,GAQTzC,GAAW7sB,UAAU0vB,uCAAyC,SAAStf,GAAW,cAChF,MAAO,WACL9T,KAAK2yB,OAAOE,QAAQ5R,eAAenN,UAD9B,iBACL,EAA+C8F,kBAD1C,aACL,EAA4D,GADvD,UAEL5Z,KAAK2yB,OAAOC,QAAQxS,WAAWlC,mBAAmBpK,UAF7C,iBAEL,EAA8D8F,kBAFzD,aAEL,EAA2E,IAFtE,UAGD5Z,KAAK4F,MAAQ5F,KAAKoG,eAAiBpG,KAAKlC,EAAL,kBAAkBgW,IAAaqf,UAAY,ynBAClF9sB,QAAO,SAAAzH,GAAC,OAAIA,MAGhBiF,OAAOC,eAAeysB,GAAW7sB,UAAW,aAAc,CAExD5B,IAFwD,WAEhD,MAAO,CACb,EAAG9B,KAAK2yB,OAAOC,QACf,EAAG5yB,KAAK2yB,OAAOE,QACf,EAAG7yB,KAAK2yB,OAAOG,WACf9yB,KAAK4F,SAIT/B,OAAOC,eAAeysB,GAAW7sB,UAAW,YAAa,CACvD5B,IADuD,WAC/C,OAAO9B,KAAK2yB,OAAOE,QAAQ9R,WACnChd,IAFuD,SAEnDqd,GAAUphB,KAAK2yB,OAAOE,QAAQ9R,UAAYK,KAGhDvd,OAAOC,eAAeysB,GAAW7sB,UAAW,YAAa,CACvD5B,IADuD,WAC/C,OAAO9B,KAAK2yB,OAAOE,QAAQ7R,WACnCjd,IAFuD,SAEnDqd,GAAUphB,KAAK2yB,OAAOE,QAAQ7R,UAAYI,KAOhDmP,GAAW8C,KAAOC,EAOlB/C,GAAW7sB,UAAU6vB,aAAe,SAASnjB,EAAQojB,GACnD,IAAIC,EAAoB31B,GAAEoC,OAAO,GAAIszB,GACrC,QAAI,IAAsBC,EAAkBpjB,KAAO,CACjD,IAAIyD,EAAY9T,KAAKuyB,QAAQzc,KAAK4d,gBAAgBD,EAAkBpjB,MAC/DvF,MAAMgJ,KACT2f,EAAkBjpB,MAAQsJ,UACrB2f,EAAkBpjB,KAE3BvS,GAAEoC,OAAOkQ,EAAQqjB,IAQnBlD,GAAW7sB,UAAUiwB,WAAa,WAChC,IAAIvjB,EAAS,CAEbA,MAAc,EAMdA,WAAmB,EAGnBA,gBAAwB,GAaxB,QAPI,IAAsBpQ,KAAKqyB,WAAcryB,KAAKuyB,QAAQzc,KAAKrM,cAAgB,EAC7E2G,EAAO5F,MAAQxK,KAAKuyB,QAAQzc,KAAK9H,eAAehO,KAAKqyB,WAErDjiB,EAAO5F,MAAQ,EAIbxK,KAAKsL,SAAU,CACjB,IAAMsoB,EAAgB5zB,KAAK6zB,mBAAmB7zB,KAAKsL,eAC/C,IAAsBsoB,EAAcvjB,OACtCD,EAAO0jB,WAAY,GAErB9zB,KAAKuzB,aAAanjB,EAAQwjB,GAI5B,GAAI5zB,KAAKF,QAAQi0B,iBAAkB,CAEjC,IAAMlyB,EAAM7B,KAAKg0B,iBACL,OAARnyB,IAEEuO,EAAO5F,QAAU3I,IAEnBuO,EAAOjM,gBAAiB,GAE1BiM,EAAO5F,MAAQ3I,GAKnB,GAAI7B,KAAKF,QAAQm0B,gBAAiB,CAEhC,IAAIC,EAAYl0B,KAAK6zB,mBAAmB7zB,KAAKm0B,oBAGzBtwB,OAAOuwB,KAAKF,GAAW31B,QAAUyB,KAAKq0B,uBACd,YAAzBr0B,KAAKF,QAAQw0B,UAC9BJ,EAAYl0B,KAAK6zB,mBAAmB7zB,KAAKq0B,wBAIvCxwB,OAAOuwB,KAAKF,GAAW31B,cACrB,IAAsB21B,EAAU7jB,OAClCD,EAAO0jB,WAAY,GAErB9zB,KAAKuzB,aAAanjB,EAAQ8jB,GAE1B9jB,EAAOjM,gBAAiB,GAK5B,GAAInE,KAAKF,QAAQ+xB,eAEf7xB,KAAKF,QAAQy0B,iBAAmBnkB,EAAO0jB,WAGlC9zB,KAAKF,QAAQ00B,mBAEhB,GAAIpkB,EAAOqkB,OAETz0B,KAAKF,QAAQ00B,kBAAoBpkB,EAAOqkB,OACxCz0B,KAAK00B,WAAatkB,EAAOqkB,WACpB,CAEL,IACMC,EADe,IAAIC,gBAAgB30B,KAAK40B,mBACd9yB,IAAI,KAChC4yB,IACF10B,KAAKF,QAAQ00B,kBAAoBlB,EAAMuB,uBAAuBH,IAStE,OAFA10B,KAAK+tB,wBAA0B3d,EAAOjM,eAE/BiM,GAMTmgB,GAAW7sB,UAAUoxB,kBAAoB,WACvC,OAAOh0B,OAAOoJ,SAASuqB,QAMzBlE,GAAW7sB,UAAUqxB,gBAAkB,WACrC,OAAOj0B,OAAOoJ,SAAS8qB,MAMzBzE,GAAW7sB,UAAUkxB,gBAAkB,WACrC,IAAMK,EAAcj1B,KAAK80B,oBACzB,GAAIG,EACF,OAAOA,EAET,IAAMD,EAAOh1B,KAAK+0B,kBACZG,EAAQF,EAAKP,OAAO,UAC1B,OAAOS,GAAS,EAAIF,EAAKtlB,MAAMwlB,GAAS,IAS1C3E,GAAW7sB,UAAUyxB,eAAiB,SAAS/kB,GAE7C,IACIglB,EADAC,EAAcv3B,GAAEgD,QAAQgR,QAkB5B,OAfEsjB,OADE,IAAsBhlB,EAAOxK,KACpBwK,EAAOxK,KACE,QAAX5F,KAAK6J,IACL7J,KAAKs1B,iBACLt1B,KAAKmyB,oBACLkD,GAAer1B,KAAK2M,qBAGlB3M,KAAKiG,aAELjG,KAAKmG,aAGbnG,KAAK+O,gBAAgBqmB,KACxBA,EAAWp1B,KAAKiG,cAEXmvB,GAOT7E,GAAW7sB,UAAU8tB,KAAO,WAC1BxxB,KAAKwxB,KAAK+D,cAAe,EACzBv1B,KAAKkiB,UAAYliB,KAAKoM,OAEtB,IAAIgE,EAASpQ,KAAK2zB,aAElB3zB,KAAKwjB,WAAapT,EAAO5F,MAAQ4F,EAAO5F,MAAQ,EAGhDxK,KAAKw1B,iBAAmB,iBAAkB10B,YAAc,qBAAsBA,OAAOC,WAErFf,KAAKgI,KAAKoB,IAAMtL,GAAEkC,KAAKqN,IACpBmT,QACA7Y,cACAC,SAAS,MAAQ5H,KAAK6J,IACtBjC,SAAS,SAAW5H,KAAK6J,IACzBjC,SAAS,cAGR5H,KAAKw1B,cACPx1B,KAAKgI,KAAKoB,IAAIxB,SAAS,SAEvB5H,KAAKgI,KAAKoB,IAAIxB,SAAS,YAGzB5H,KAAKgI,KAAKC,aAAenK,GAAE,6CAC3BkC,KAAKgI,KAAKoB,IAAID,OAAOnJ,KAAKgI,KAAKC,cAG/BmI,EAAOxK,KAAO5F,KAAKm1B,eAAe/kB,GAGlCpQ,KAAK4F,KAAOwK,EAAOxK,KAEJ,SAAX5F,KAAK6J,IAAiB7J,KAAKF,QAAQiM,WACrC/L,KAAKy1B,mBAEDz1B,KAAKF,QAAQgM,aACf9L,KAAK01B,YAAY11B,KAAK4F,KAAM5F,KAAK6J,IAE/B7J,KAAKF,QAAQiM,YACf/L,KAAK21B,cAKT31B,KAAK41B,uBAEL51B,KAAKwiB,oBACLxiB,KAAK61B,iBAAiBzlB,GACtBpQ,KAAK81B,gBAIL91B,KAAK+1B,yBACL/1B,KAAKg2B,oBAELh2B,KAAKoyB,YAAc,IAAI6D,MAAOC,UAC9Bl2B,KAAKgI,KAAKC,aAAa1G,KAAK,SAAUvB,MAAM,SAASyB,GAGnDA,EAAEN,KAAKixB,YAAc,IAAI6D,MAAOC,UAC5Bz0B,EAAEN,KAAKiF,gBAAkB3E,EAAEN,KAAKyE,MAClCnE,EAAEN,KAAKg1B,wBAIPn2B,KAAKF,QAAQwO,aACfxQ,GAAEgD,QAAQS,KAAK,SAAUvB,MAAM,SAASyB,GACtCA,EAAEN,KAAKmD,YAETxG,GAAEgD,QAAQmG,GAAG,oBAAqBjH,KAAM,SAASyB,GAC/CA,EAAEN,KAAKmD,UACP/C,KAAKvB,QAGLA,KAAKuN,WACPvN,KAAKlC,EAAE,iBAAiB+Q,OAIrB7O,KAAKF,QAAQ00B,oBAChBx0B,KAAK+tB,wBAAyB,GAGhC/tB,KAAKwxB,KAAK+D,cAAe,EACzBv1B,KAAKyP,QAAQ8gB,GAAWqB,WAAWxtB,UAI/BpE,KAAKF,QAAQuO,iBACfrO,KAAKo2B,oBAQT7F,GAAW7sB,UAAU+L,QAAU,SAASuC,GAAoB,IAAdqkB,EAAc,uDAANr2B,KAC9Cs2B,EAAY,cAAgBtkB,EAClClU,GAAEkF,UAAUyM,QAAQ6mB,EAAWD,GAE/B/C,EAAMiD,oBAAoBz1B,QAC1BA,OAAO01B,cAAc,IAAIC,YAAYH,EAAW,CAC9CI,SAAS,EACTC,UAAU,EACVC,OAAQ,CAAEP,MAAAA,OAId9F,GAAW7sB,UAAUnC,KAAO,SAASyQ,EAAM6kB,GACzC/4B,GAAEkF,UAAUzB,KAAK,cAAgByQ,EAAM6kB,IAGzCtG,GAAW7sB,UAAUpB,OAAS,SAAS0P,EAAM6kB,GAC3C/4B,GAAEkF,UAAUV,OAAO,cAAgB0P,EAAM6kB,IAM3CtG,GAAW7sB,UAAUY,OAAS,WAC5B,GAAKtE,KAAKwxB,KAAK+D,aAAf,CAOA,GALAv1B,KAAKwiB,oBAGLxiB,KAAK41B,uBAED51B,KAAKiG,cAAgBjG,KAAK4F,KACA,QAAxB5F,KAAKsM,QAAQD,SACfrM,KAAK82B,oBACL92B,KAAK+2B,mBAEL/2B,KAAK+2B,iBACL/2B,KAAK6c,iBAAmB,GACxB7c,KAAKm2B,2BAEF,GAAIn2B,KAAKoG,gBAAkBpG,KAAK4F,KACrC5F,KAAKg3B,4BAGL,GAAIh3B,KAAKuM,QAAQF,QAEfrM,KAAKqiB,yBACA,CAGL,IAAI1J,EAAS3Y,KAAKi3B,uBACdC,GAAa,EACbl3B,KAAKuM,QAAQ4X,WAAankB,KAAKgI,KAAKC,aAAaC,KAAK,iBACxDyQ,EAAO2J,YAAc,GACrB4U,GAAa,GAEXl3B,KAAKuM,QAAQ6X,YAAcpkB,KAAKgI,KAAKC,aAAaC,KAAK,kBACzDyQ,EAAO4J,YAAc,GACrB2U,GAAa,GAEXA,GACFl3B,KAAKm3B,kBAAkBxe,EAAO2J,YAAa3J,EAAO4J,aAIxDviB,KAAKyP,QAAQ8gB,GAAWqB,WAAWttB,UAMrCisB,GAAW7sB,UAAUsyB,kBAAoB,WACvC,IAAIoB,EAAOp3B,KAoBXlC,GAAEkF,UAAUq0B,SAAQ,SAAS51B,GAG3B,OAAQA,EAAE61B,SACV,KAtBa,GAuBb,KAjBW,GAmBJhE,EAAMiE,iBAAmBH,EAAKjxB,cAAgBixB,EAAKxxB,OACtDnE,EAAEpB,iBACF+2B,EAAKlhB,QAEP,MACF,KAtBa,GAuBb,KA9Be,GA+BRod,EAAMiE,iBAAmBH,EAAKjxB,cAAgBixB,EAAKxxB,OACtDnE,EAAEpB,iBACF+2B,EAAKzgB,QAEP,MACF,KAnCY,GAoCL2c,EAAMiE,kBACT91B,EAAEpB,iBACF+2B,EAAKI,QAEP,MACF,KAxCa,GAyCNlE,EAAMiE,kBACT91B,EAAEpB,iBACF+2B,EAAKnQ,SAEP,MACF,KA5Ca,GA6CNqM,EAAMiE,iBAAmBH,EAAKhxB,gBAAkBgxB,EAAKxxB,OACxDnE,EAAEpB,iBACF+2B,EAAK13B,QAEP,MACF,KAhDc,GAiDP4zB,EAAMiE,iBAAmBH,EAAKhxB,gBAAkBgxB,EAAKxxB,OACxDnE,EAAEpB,iBACF+2B,EAAK/N,SAEP,MACF,KAnDc,IAoDd,KAnDgB,IAoDhB,KAnDwB,IAoDjBiK,EAAMiE,kBACT91B,EAAEpB,iBACF+2B,EAAKK,MAAM,IAEb,MACF,KAxDc,IAyDd,KAxDgB,GAyDhB,KAxDmB,IAyDZnE,EAAMiE,kBACT91B,EAAEpB,iBACF+2B,EAAKK,KAAK,SAOlBlH,GAAW7sB,UAAU8gB,UAAY,WAC3BxkB,KAAKiG,cAAgBjG,KAAK4F,OAEnB5F,KAAKoG,gBAAkBpG,KAAK4F,KACrC5F,KAAK03B,qBAEL13B,KAAK23B,qBAQTpH,GAAW7sB,UAAUya,qBAAuB,SAAS3T,GACnD,OAAO,IAAIotB,GAAAA,GAAc53B,KAAKuyB,QAAQzc,KAAKZ,QAAQ1K,GAAO,GAAQ,CAChEqtB,YAAa73B,KAAKuN,UAClB2gB,WAAYluB,KAAKkuB,WACjB4J,aAAc93B,KAAKiM,cAAgB,iBAIvCskB,GAAW7sB,UAAUkrB,aAAe,SAASmJ,GAO3C,IAAIX,EAAOp3B,KACPg4B,EAAa,EAEjBD,EAASz1B,OAAO,aAAaf,KAAK,aAAa,SAASE,GAClDA,EAAEpC,cAAc44B,aAAYD,EAAav2B,EAAEpC,cAAc64B,QAAQ35B,QACrEkD,EAAEoB,qBAGJk1B,EAASz1B,OAAO,iBAAiBf,KAAK,iBAAiB,SAASE,GAC9DA,EAAEpB,iBAGmB,IAAf23B,IAAqB,IAAI/B,MAAOC,UAAakB,EAAKhF,WAAa,MAC/D3wB,EAAEpC,cAAcuZ,MAAQ,IAC1Bwe,EAAKK,KAAK,GACDh2B,EAAEpC,cAAcuZ,MAAQ,IACjCwe,EAAKK,MAAM,QAOnBlH,GAAW7sB,UAAUg0B,mBAAqB5L,GAAUpoB,UAAU8gB,UAC9DqM,GAAyB/E,GAAW,mBAAoB,YAAa,sBAErEyE,GAAW7sB,UAAUy0B,mBAAqBrM,GAAUpoB,UAAUy0B,mBAC9DtH,GAAyB/E,GAAW,mBAAoB,qBAAsB,sBAC9EyE,GAAW7sB,UAAU00B,cAAgBtM,GAAUpoB,UAAU00B,cACzDvH,GAAyB/E,GAAW,mBAAoB,gBAAiB,iBAEzEyE,GAAW7sB,UAAU20B,UAAYvM,GAAUpoB,UAAU+zB,KACrD5G,GAAyB/E,GAAW,mBAAoB,OAAQ,aAEhEyE,GAAW7sB,UAAUmrB,kBAAoB/C,GAAUpoB,UAAUmrB,kBAC7DgC,GAAyB/E,GAAW,mBAAoB,oBAAqB,qBAE7EyE,GAAW7sB,UAAUszB,qBAAuBlL,GAAUpoB,UAAU6qB,QAChEsC,GAAyB/E,GAAW,mBAAoB,UAAW,wBAKnEyE,GAAW7sB,UAAUyyB,mBAAqB7C,EAAMzU,SAC9C0R,GAAW7sB,UAAU8gB,UACrB,KAMF+L,GAAW7sB,UAAU+zB,KAAO,SAAS5W,GAAW,MAC9C,OAAQ7gB,KAAK4F,MACb,KAAK5F,KAAKiG,aACS,GAAb4a,EAEF7gB,KAAKs4B,QAAQ,MAEbt4B,KAAKs4B,QAAQ,OAEf,MACF,KAAKt4B,KAAKmG,aACS,GAAb0a,EAEF7gB,KAAKu4B,QAAQ,MAEbv4B,KAAKu4B,QAAQ,OAEf,MACF,KAAKv4B,KAAKoG,eAERpG,KAAKq4B,UAAUxX,GAIjB,UAAA7gB,KAAKwpB,2BAAL,SAA0BC,aAAazpB,KAAKgI,KAAKC,eAanDsoB,GAAW7sB,UAAU8e,kBAAoB,SAASjZ,GAC5CA,EACFvJ,KAAKgI,KAAKC,aAAasB,QAAQ,CAC7B5J,IAAKK,KAAKw4B,mBACVrN,OAAQnrB,KAAKy4B,mBACZz4B,KAAK2xB,6BAA8B,UAEtC3xB,KAAKgI,KAAKC,aAAa0J,IAAI,CACzBhS,IAAKK,KAAKw4B,mBACVrN,OAAQnrB,KAAKy4B,qBAKnBlI,GAAW7sB,UAAUqzB,eAAiB,WACpC,IAAI2B,EAAe14B,KAAKgI,KAAKC,aAAaC,KAAK,eAC3CsK,EAAgBxS,KAAKgI,KAAKC,aAAaC,KAAK,eAC5CwwB,EAAclmB,GAChBxS,KAAKgI,KAAKC,aAAaC,KAAK,cAAewwB,EAAclmB,GAAe,IAU5E+d,GAAW7sB,UAAUi1B,eAAiB,SAASvsB,EAAQD,GAIrD,IAHA,IAAIysB,EAAYzsB,EAAiB,GAAGC,OAChC1J,EAAWF,KAAKC,IAAI2J,EAASwsB,GAExBt6B,EAAI,EAAGA,EAAI6N,EAAiB5N,OAAQD,IAAK,CAChD,IAAMu6B,EAAcr2B,KAAKC,IAAI2J,EAASD,EAAiB7N,GAAG8N,QACtDysB,EAAcn2B,IAChBA,EAAWm2B,EACXD,EAAYzsB,EAAiB7N,GAAG8N,QAGpC,OAAOwsB,GASTrI,GAAW7sB,UAAUue,WAAa,SAAS6W,EAAejY,EAAW1U,GAGnE,GAAkB,OAAd0U,EAAoB,CAEtB,IADA,IAAIkY,EAAiB,EACZz6B,EAAI,EAAGA,EAAI6N,EAAiB5N,OAAQD,IACvC6N,EAAiB7N,GAAG8N,OAAS0sB,IAC/BC,EAAiBz6B,GAGrB,OAAO6N,EAAiB4sB,GACnB,GAAkB,QAAdlY,EAAqB,CAI9B,IAHA,IAAMmY,EAAY7sB,EAAiB5N,OAAS,EACxCw6B,EAAiBC,EAEZ16B,EAAI06B,EAAW16B,GAAK,EAAGA,IAC1B6N,EAAiB7N,GAAG8N,OAAS0sB,IAC/BC,EAAiBz6B,GAGrB,OAAO6N,EAAiB4sB,GACnB,GAAkB,SAAdlY,EAAsB,CAE/B,IAAMoY,EAAY9sB,EAAiBrJ,MAAK,SAAAo2B,GAAE,MAAkB,QAAdA,EAAG7sB,WACjD,GAAI4sB,EAAW,OAAOA,EAKtB,IAFA,IAAMlJ,EAAa5jB,EAAiB9F,QAAO,gBAAEgG,EAAF,EAAEA,QAAF,MAA0B,UAAXA,GAAkC,SAAXA,KAC7E8sB,EAAS,KACJ76B,EAAI,EAAGA,EAAIyxB,EAAWxxB,OAAQD,KACtB,OAAX66B,GAAmBA,EAAO/sB,OAAS2jB,EAAWzxB,GAAG8N,UACnD+sB,EAASpJ,EAAWzxB,IAGxB,GAAI66B,EAAQ,OAAOA,OACd,GAAkB,WAAdtY,GAAwC,UAAdA,EAAuB,CAE1D,IAAMuY,EAAQjtB,EAAiBrJ,MAAK,SAAAo2B,GAAE,OAAIA,EAAG7sB,SAAWwU,KACxD,GAAIuY,EAAO,OAAOA,EAGpB,OAAOjtB,EAAiB,IAO1BokB,GAAW7sB,UAAUskB,YAAc,SAACqR,EAAGC,GAAJ,OAAUD,EAAEjtB,OAASktB,EAAEltB,QAO1DmkB,GAAW7sB,UAAU61B,WAAa,SAAS9uB,GACzC,IAAIqJ,EAAY9T,KAAKuyB,QAAQzc,KAAK4d,gBAAgBjpB,GAElD,YAAI,IAAsBqJ,IACxB9T,KAAK+J,YAAY+J,IACV,IAWXyc,GAAW7sB,UAAU81B,kBAAoB,SAAShvB,GAEhD,OAAOxK,KAAKiG,cAAgBjG,KAAK4F,KAAO5F,KAAK6c,iBAAiBnN,MAAM,GAAI,GAAGnJ,SAASiE,GAClFxK,KAAK6c,iBAAmB7c,KAAK6c,iBAAiBtW,SAASiE,GACrDxK,KAAK2J,gBAAkBa,GAU7B+lB,GAAW7sB,UAAUqG,YAAc,SAASS,EAAOrL,EAAOC,EAAOwhB,GAE/D,IAAMvQ,EAAOrQ,KAAKuyB,QAAQzc,KAAKZ,QAAQ1K,GACvC,IAAK6F,EAAK0F,YAAc1F,EAAKsF,kBAAoBtF,EAAK7F,MAAO,CAE3D,IACMivB,EADmBz5B,KAAKw5B,kBAAkBnpB,EAAKsF,kBACjBtF,EAAK+F,SAAS,CAAEnB,+BAA+B,IAAQzK,MAAQ6F,EAAKsF,iBACxG,OAAO3V,KAAK+J,YAAY0vB,EAAUt6B,EAAOC,EAAOwhB,GAGlD5gB,KAAKyP,QAAQ8gB,GAAWqB,WAAWvtB,MAE/BrE,KAAKmG,cAAgBnG,KAAK4F,KAC5B5F,KAAK2yB,OAAOE,QAAQ9oB,YAAYS,GACvBxK,KAAKoG,gBAAkBpG,KAAK4F,KACrC5F,KAAK2yB,OAAOG,UAAU/oB,YAAYS,GAElCxK,KAAK2yB,OAAOC,QAAQ7oB,YAAYS,EAAOrL,EAAOC,EAAOwhB,IASzD2P,GAAW7sB,UAAUg2B,gBAAkB,SAAS9zB,GAC9C,OAAIA,IAAS2qB,GAAWtqB,cAAgBL,IAAS2qB,GAAWpqB,aACnDP,EACwB,OAAtB5F,KAAK8xB,aAEPvB,GAAWtqB,kBAFb,GAaTsqB,GAAW7sB,UAAUgD,WAAa,SAChCd,GAMA,MAeuB,IAfvB,yDADI,GACJ,IAJEmoB,uBAAAA,OAIF,aAHEyD,KAAAA,OAGF,aAFEsC,UAAAA,OAEF,SAEA,GAAI9zB,KAAKwxB,KAAK+D,aAAc,CAC1B,GAAI3vB,IAAS5F,KAAK4F,KAChB,OAEF,IAAK5F,KAAK+O,gBAAgBnJ,GACxB,OAIJ5F,KAAKyP,QAAQ8gB,GAAWqB,WAAWvtB,MAEnCrE,KAAK8xB,aAAe9xB,KAAK05B,gBAAgB15B,KAAK4F,MAE1C5F,KAAK4F,MAAQA,IACf,aAAA5F,KAAK25B,YAAWC,iBAAhB,kBAGF55B,KAAK4F,KAAOA,EAGR5F,KAAKkiB,YAAcliB,KAAKoM,SAC1BpM,KAAKoM,OAASpM,KAAKkiB,WAOjBliB,KAAKiG,cAAgBL,EACvB5F,KAAK65B,qBACI75B,KAAKoG,gBAAkBR,GAChC5F,KAAKoM,OAASpM,KAAK24B,eAAe34B,KAAKoM,OAAQpM,KAAKmM,kBACpDnM,KAAKg3B,0BAKDxF,GAASsC,GACX9zB,KAAK85B,mBAGP95B,KAAK+5B,mCACL/5B,KAAKqiB,qBACLriB,KAAKm3B,kBAAkB,GAAK,KAGxBn3B,KAAK+tB,wBAA0BA,GACnC/tB,KAAKyP,QAAQ8gB,GAAWqB,WAAWztB,gBAErC,IAAImyB,EAAY1wB,EAAO,mBACvB5F,KAAKyP,QAAQ8gB,GAAWqB,WAAW0E,IAEnC,UAAAt2B,KAAKwpB,2BAAL,SAA0BC,aAAazpB,KAAKgI,KAAKC,eAGnDsoB,GAAW7sB,UAAUid,gBAAkB,WACrC,IAAIqZ,EAAc,GAClBA,EAAYh6B,KAAKiG,cAAgB,YACjC+zB,EAAYh6B,KAAKmG,cAAgB,YACjC6zB,EAAYh6B,KAAKoG,gBAAkB,cAEnCpG,KAAKgI,KAAKoB,IACPzB,YAAY,mCACZC,SAASoyB,EAAYh6B,KAAK4F,OAEzB5F,KAAKi6B,gBACPj6B,KAAKgI,KAAKoB,IAAIxB,SAAS,oBACvB9J,GAAEkF,SAAS6N,MAAMjJ,SAAS,wBAE1B5H,KAAKgI,KAAKoB,IAAIzB,YAAY,oBAC1B7J,GAAEkF,SAAS6N,MAAMlJ,YAAY,wBAIjC4oB,GAAW7sB,UAAUu2B,aAAe,WAClC,OAAOj6B,KAAKmyB,oBAOd5B,GAAW7sB,UAAU0yB,iBAArB,4BAAwC,kHAAe8D,IAAf,kCAClCl6B,KAAKi6B,eAD6B,gCAE9Bj6B,KAAKm6B,iBAFyB,6CAI9Bn6B,KAAKo6B,gBAAgBF,GAJS,gDAgBxC3J,GAAW7sB,UAAU02B,gBAArB,4BAAuC,iIAAeF,IAAf,iCAC/BvwB,EAAe3J,KAAK2J,eAC1B3J,KAAKgI,KAAKC,aAAa0J,IAAI,UAAW,GAElCuoB,IACFl6B,KAAKq6B,wBAA0B,SAAC54B,GACZ,KAAdA,EAAE61B,SAAgB,EAAKlB,oBAE7Bt4B,GAAEkF,UAAUs3B,MAAMt6B,KAAKq6B,0BAGLv8B,GAAEgD,QAAQgR,SACX9R,KAAK2M,sBACtB3M,KAAK0G,WAAW1G,KAAKiG,cAGvBjG,KAAKmyB,oBAAqB,EAC1BnyB,KAAKkoB,WAAY,EAjBoB,UAkB/B,IAAI3P,SAAQ,SAAAC,GAAG,OAAI,EAAKxQ,KAAKC,aAAasB,QAAQ,CAACgG,QAAS,GAAI,OAAQ,SAAUiJ,MAlBnD,WAmBrCxY,KAAKsE,WACDtE,KAAK25B,sBAAsBzZ,IApBM,wBAqBnClgB,KAAK25B,WAAWvZ,WAAWxH,MAAQ5Y,KAAK25B,WAAWvZ,WAAWhE,oBAAoBpc,KAAKuyB,QAAQzc,KAAKZ,QAAQvL,IArBzE,UAuB7B3J,KAAK25B,WAAWvZ,WAAWrB,gBAvBE,QAyBrC/e,KAAK+J,YAAYJ,GACjB3J,KAAKkoB,WAAY,EAEjB,UAAAloB,KAAKwpB,2BAAL,SAA0BC,aAAazpB,KAAKgI,KAAKC,cACjDjI,KAAKyP,QAAQ8gB,GAAWqB,WAAWptB,mBA7BE,iDAuCvC+rB,GAAW7sB,UAAUy2B,eAArB,4BAAsC,mHACpCn6B,KAAKgI,KAAKC,aAAa0J,IAAI,UAAW,GAEtC7T,GAAEkF,UAAUV,OAAO,QAAStC,KAAKq6B,yBAE7BhF,EAAcv3B,GAAEgD,QAAQgR,QAET9R,KAAKF,QAAQuF,SAASkH,QAAQjH,SAC9B+vB,GAAer1B,KAAK2M,sBACrC3M,KAAK0G,WAAW1G,KAAKmG,cAGvBnG,KAAKmyB,oBAAqB,EAC1BnyB,KAAK2gB,kBACL3gB,KAAKkoB,WAAY,EAdmB,UAe9B,IAAI3P,SAAS,SAAAC,GAAG,OAAI,EAAKxQ,KAAKC,aAAasB,QAAQ,CAACgG,QAAS,GAAI,OAAQ,SAAUiJ,MAfrD,WAgBpCxY,KAAKsE,WAEDtE,KAAK25B,sBAAsBzZ,IAlBK,wBAmBlClgB,KAAK25B,WAAWvZ,WAAWxH,MAAQ5Y,KAAK25B,WAAWvZ,WAAWhE,oBAAoBpc,KAAKuyB,QAAQzc,KAAKZ,QAAQlV,KAAK2J,iBAnB/E,UAoB5B3J,KAAK25B,WAAWvZ,WAAWrB,gBApBC,QAuBpC/e,KAAKkoB,WAAY,EAEjB,UAAAloB,KAAKwpB,2BAAL,SAA0BC,aAAazpB,KAAKgI,KAAKC,cACjDjI,KAAKyP,QAAQ8gB,GAAWqB,WAAWptB,mBA1BC,iDAkCtC+rB,GAAW7sB,UAAUiG,aAAe,WAElC,GAAI3J,KAAK4F,MAAQ5F,KAAKiG,cAAgBjG,KAAK4F,MAAQ5F,KAAKoG,eACtD,OAAOpG,KAAKwjB,WACP,GAAIxjB,KAAK4F,MAAQ5F,KAAKmG,aAE3B,OAAOmtB,EAAM9f,MAAMxT,KAAKwjB,WAAY,EAAGxjB,KAAKuyB,QAAQzc,KAAKrM,cAAgB,GAEzE,KAAM,8CAAgDzJ,KAAK4F,MAW/D2qB,GAAW7sB,UAAUqZ,iBAAmB,SACtCvS,GAEA,6DADqC,GACrC,IADEujB,uBAAAA,OACF,SAEI/tB,KAAKwjB,aAAehZ,IAExBxK,KAAKwjB,WAAahZ,EACZxK,KAAK+tB,wBAA0BA,GACnC/tB,KAAKyP,QAAQ8gB,GAAWqB,WAAWztB,gBAKjCnE,KAAKF,QAAQ00B,oBAAsBzG,IACrC/tB,KAAK+tB,wBAAyB,GAEhC/tB,KAAKyP,QAAQ,eACbzP,KAAKgd,wBAAwBxS,KAM/B+lB,GAAW7sB,UAAU2lB,MAAQ,WACvB,MAAQrpB,KAAK6I,gBACf7I,KAAK2W,OAEL3W,KAAKkW,QAOTqa,GAAW7sB,UAAU62B,UAAY,WAC3B,MAAQv6B,KAAK6I,gBACf7I,KAAKw3B,OAELx3B,KAAKinB,SAOTsJ,GAAW7sB,UAAUhE,KAAO,WACtB,MAAQM,KAAK6I,gBACf7I,KAAKkW,OAELlW,KAAK2W,QAOT4Z,GAAW7sB,UAAU82B,SAAW,WAC1B,MAAQx6B,KAAK6I,gBACf7I,KAAKinB,QAELjnB,KAAKw3B,QAITjH,GAAW7sB,UAAUiT,KAAO,WACtB3W,KAAKmG,cAAgBnG,KAAK4F,MAC5B5F,KAAKyP,QAAQ8gB,GAAWqB,WAAWvtB,MACnCrE,KAAKwhB,eAAe,OAEhBxhB,KAAKwjB,WAAaxjB,KAAK0jB,wBACzB1jB,KAAK+J,YAAY/J,KAAKwjB,WAAa,IAKzC+M,GAAW7sB,UAAUwS,KAAO,WACJlW,KAAKwjB,WAAa,IAGpCxjB,KAAKmG,cAAgBnG,KAAK4F,MAC5B5F,KAAKyP,QAAQ8gB,GAAWqB,WAAWvtB,MACnCrE,KAAKuhB,gBAAgB,OAEjBvhB,KAAKwjB,YAAc,GACrBxjB,KAAK+J,YAAY/J,KAAKwjB,WAAa,KAKzC+M,GAAW7sB,UAAUujB,MAAQ,WAC3BjnB,KAAK+J,YAAY/J,KAAKyjB,0BAGxB8M,GAAW7sB,UAAU8zB,KAAO,WAC1Bx3B,KAAK+J,YAAY/J,KAAK0jB,yBAMxB6M,GAAW7sB,UAAU+2B,WAAa,WAChC,OAAI38B,GAAE48B,QAAQ16B,KAAK4F,KAAM,CAAC5F,KAAKiG,aAAcjG,KAAKoG,kBAAoB,IAC/DpG,KAAK4F,MAAQ5F,KAAKiG,cAAiBjG,KAAKoM,QAAUpM,KAAK26B,0BAEnD36B,KAAK2W,QAGd3W,KAAKgI,KAAKC,aAAa5D,MAAK,GAAMkF,QAChC,CAAElH,UAAW,KAAOrC,KAAK46B,gBAAkB,MAC3C,IAAK,kBAEA,KASXrK,GAAW7sB,UAAUm3B,SAAW,WAC9B,OAAI/8B,GAAE48B,QAAQ16B,KAAK4F,KAAM,CAAC5F,KAAKiG,aAAcjG,KAAKoG,kBAAoB,IAC/DpG,KAAK4F,MAAQ5F,KAAKiG,cAAiBjG,KAAKoM,QAAUpM,KAAK26B,0BAEnD36B,KAAKkW,QAGdlW,KAAKgI,KAAKC,aAAa5D,MAAK,GAAMkF,QAChC,CAAElH,UAAW,KAAOrC,KAAK46B,gBAAkB,MAC3C,IAAK,kBAEA,KASXrK,GAAW7sB,UAAUk3B,cAAgB,WACnC,OAAI56B,KAAKiG,cAAgBjG,KAAK4F,KAErBiM,SAAS7R,KAAKgI,KAAKC,aAAaC,KAAK,gBAAkBlI,KAAKuyB,QAAQzc,KAAKlI,cAAc5N,KAAK2J,gBAAkB3J,KAAKoM,OAAS,KAG9HyF,SAAS,GAAM7R,KAAKgI,KAAKC,aAAaC,KAAK,kBAMpDqoB,GAAW7sB,UAAUo3B,YAArB,6CAAmC,WAAetwB,GAAf,gIACjCjL,QAAQ0oB,KAAK,+DADoB,2CAAnC,sDAOAsI,GAAW7sB,UAAUq3B,gBAAkB,WACrCx7B,QAAQ0oB,KAAK,gEAOfsI,GAAW7sB,UAAUm2B,mBAAqB3Z,GAAQxc,UAAU6qB,QAC5DsC,GAAyB3Q,GAAS,iBAAkB,UAAW,sBAE/DqQ,GAAW7sB,UAAU40B,QAAUpY,GAAQxc,UAAU+zB,KACjD5G,GAAyB3Q,GAAS,iBAAkB,OAAQ,WAE5DqQ,GAAW7sB,UAAUozB,kBAAoB5W,GAAQxc,UAAUs3B,eAC3DnK,GAAyB3Q,GAAS,iBAAkB,iBAAkB,qBAEtEqQ,GAAW7sB,UAAUu3B,+BAAiC/a,GAAQxc,UAAUw3B,wBACxErK,GAAyB3Q,GAAS,iBAAkB,0BAA2B,kCAM/EqQ,GAAW7sB,UAAU60B,QAAUzX,GAAQpd,UAAU+zB,KACjD5G,GAAyB/P,GAAS,iBAAkB,OAAQ,WAC5DyP,GAAW7sB,UAAUy3B,wBAA0Bra,GAAQpd,UAAUokB,iBACjE+I,GAAyB/P,GAAS,iBAAkB,mBAAoB,2BACxEyP,GAAW7sB,UAAU6d,gBAAkBT,GAAQpd,UAAU6d,gBACzDsP,GAAyB/P,GAAS,iBAAkB,kBAAmB,mBACvEyP,GAAW7sB,UAAU8d,eAAiBV,GAAQpd,UAAU8d,eACxDqP,GAAyB/P,GAAS,iBAAkB,iBAAkB,kBACtEyP,GAAW7sB,UAAU03B,iBAAmBta,GAAQpd,UAAU23B,cAC1DxK,GAAyB/P,GAAS,iBAAkB,gBAAiB,oBAErEyP,GAAW7sB,UAAUi0B,iBAAmB7W,GAAQpd,UAAU8gB,UAC1DqM,GAAyB/P,GAAS,iBAAkB,YAAa,oBAEjEyP,GAAW7sB,UAAU2e,mBAAqBvB,GAAQpd,UAAU2e,mBAC5DwO,GAAyB/P,GAAS,iBAAkB,qBAAsB,sBAE1EyP,GAAW7sB,UAAU43B,oBAAsBxa,GAAQpd,UAAU6gB,aAC7DsM,GAAyB/P,GAAS,iBAAkB,eAAgB,uBAEpEyP,GAAW7sB,UAAU+e,oBAAsB3B,GAAQpd,UAAU+e,oBAC7DoO,GAAyB/P,GAAS,iBAAkB,sBAAuB,uBAE3EyP,GAAW7sB,UAAU6hB,mBAAqBzE,GAAQpd,UAAU6hB,mBAC5DsL,GAAyB/P,GAAS,iBAAkB,qBAAsB,sBAE1EyP,GAAW7sB,UAAU8hB,wBAA0B1E,GAAQpd,UAAU8hB,wBACjEqL,GAAyB/P,GAAS,iBAAkB,0BAA2B,2BAE/EyP,GAAW7sB,UAAU63B,kBAAoBza,GAAQpd,UAAUmkB,WAC3DgJ,GAAyB/P,GAAS,iBAAkB,aAAc,qBAElEyP,GAAW7sB,UAAUq2B,iCAAmCjZ,GAAQpd,UAAUqe,0BAC1E8O,GAAyB/P,GAAS,iBAAkB,4BAA6B,oCAEjFyP,GAAW7sB,UAAU83B,iBAAmB1a,GAAQpd,UAAU+3B,UAC1D5K,GAAyB/P,GAAS,iBAAkB,YAAa,oBAEjEyP,GAAW7sB,UAAU6kB,gBAAkBzH,GAAQpd,UAAU6kB,gBACzDsI,GAAyB/P,GAAS,iBAAkB,kBAAmB,mBAEvEyP,GAAW7sB,UAAU+kB,gBAAkB3H,GAAQpd,UAAU+kB,gBACzDoI,GAAyB/P,GAAS,iBAAkB,kBAAmB,mBAEvEyP,GAAW7sB,UAAU4kB,uBAAyBxH,GAAQpd,UAAU4kB,uBAChEuI,GAAyB/P,GAAS,iBAAkB,yBAA0B,0BAE9EyP,GAAW7sB,UAAU8kB,uBAAyB1H,GAAQpd,UAAU8kB,uBAChEqI,GAAyB/P,GAAS,iBAAkB,yBAA0B,0BAE9EyP,GAAW7sB,UAAUg4B,gBAAkB5a,GAAQpd,UAAUiK,aACzDkjB,GAAyB/P,GAAS,iBAAkB,eAAgB,mBAEpEyP,GAAW7sB,UAAUi4B,cAAgB7a,GAAQpd,UAAU+iB,OACvDoK,GAAyB/P,GAAS,iBAAkB,SAAU,iBAE9DyP,GAAW7sB,UAAUk4B,WAAa9a,GAAQpd,UAAU/D,IACpDkxB,GAAyB/P,GAAS,iBAAkB,MAAO,cAE3DyP,GAAW7sB,UAAUm4B,kBAAoB/a,GAAQpd,UAAUuiB,WAC3D4K,GAAyB/P,GAAS,iBAAkB,aAAc,qBAElEyP,GAAW7sB,UAAUuzB,qBAAuBnW,GAAQpd,UAAU0e,cAC9DyO,GAAyB/P,GAAS,iBAAkB,gBAAiB,wBAErEyP,GAAW7sB,UAAUyzB,kBAAoBrW,GAAQpd,UAAUif,WAC3DkO,GAAyB/P,GAAS,iBAAkB,aAAc,qBAElEyP,GAAW7sB,UAAUo4B,sBAAwBhb,GAAQpd,UAAUq4B,eAC/DlL,GAAyB/P,GAAS,iBAAkB,iBAAkB,yBAEtEyP,GAAW7sB,UAAUs4B,qBAAuBlb,GAAQpd,UAAUwnB,cAC9D2F,GAAyB/P,GAAS,iBAAkB,gBAAiB,wBAErEyP,GAAW7sB,UAAUu4B,mBAAqBnb,GAAQpd,UAAUw4B,YAC5DrL,GAAyB/P,GAAS,iBAAkB,cAAe,sBAEnEyP,GAAW7sB,UAAUy4B,wBAA0Brb,GAAQpd,UAAU04B,iBACjEvL,GAAyB/P,GAAS,iBAAkB,mBAAoB,2BAExEyP,GAAW7sB,UAAU24B,yBAA2Bvb,GAAQpd,UAAU44B,kBAClEzL,GAAyB/P,GAAS,iBAAkB,oBAAqB,4BAEzEyP,GAAW7sB,UAAU0iB,qBAAuBtF,GAAQpd,UAAU0iB,qBAC9DyK,GAAyB/P,GAAS,iBAAkB,uBAAwB,wBAE5EyP,GAAW7sB,UAAUoiB,cAAgBhF,GAAQpd,UAAUoiB,cACvD+K,GAAyB/P,GAAS,iBAAkB,gBAAiB,iBAErEyP,GAAW7sB,UAAUohB,0BAA4BhE,GAAQpd,UAAUohB,0BACnE+L,GAAyB/P,GAAS,iBAAkB,4BAA6B,6BAEjFyP,GAAW7sB,UAAUshB,2BAA6BlE,GAAQpd,UAAUshB,2BACpE6L,GAAyB/P,GAAS,iBAAkB,6BAA8B,8BAElFyP,GAAW7sB,UAAUsgB,SAAWlD,GAAQpd,UAAUsgB,SAClD6M,GAAyB/P,GAAS,iBAAkB,WAAY,YAEhEyP,GAAW7sB,UAAUo2B,iBAAmBhZ,GAAQpd,UAAUo2B,iBAC1DjJ,GAAyB/P,GAAS,iBAAkB,mBAAoB,oBAIxEyP,GAAW7sB,UAAUoe,mBAAqB,WACxC9hB,KAAKyP,QAAQ8gB,GAAWqB,WAAWvtB,MAG/BrE,KAAKmoB,aACPrqB,GAAEkC,KAAKmoB,aAAa9jB,MAAK,GAAO,GAElCosB,GAAO9uB,KAAK3B,KAAK2yB,OAAOE,QAAQ5R,gBAAgB,WAC9CnjB,GAAEkC,KAAK4Z,YAAYvV,MAAK,GAAO,MAI7BrE,KAAKmoB,aACPrqB,GAAEkC,KAAKmoB,aAAa9jB,MAAK,GAAO,GAElCosB,GAAO9uB,KAAK3B,KAAK2yB,OAAOE,QAAQ5R,gBAAgB,WAC9CnjB,GAAEkC,KAAK4Z,YAAYvV,MAAK,GAAO,OA0BnCksB,GAAW7sB,UAAUiyB,WAAa/wB,EAAOlB,UAAU8tB,KACnDX,GAAyBjsB,EAAQ,qBAAsB,OAAQ,cAC/D2rB,GAAW7sB,UAAUkyB,qBAAuBhxB,EAAOlB,UAAUkyB,qBAC7D/E,GAAyBjsB,EAAQ,qBAAsB,wBACvD2rB,GAAW7sB,UAAU2D,qBAAuBzC,EAAOlB,UAAU2D,qBAC7DwpB,GAAyBjsB,EAAQ,qBAAsB,wBACvD2rB,GAAW7sB,UAAUwH,oBAAsBtG,EAAOlB,UAAUwH,oBAC5D2lB,GAAyBjsB,EAAQ,qBAAsB,uBAEvD2rB,GAAW7sB,UAAU+xB,gBAAkB7wB,EAAOlB,UAAU64B,UACxD1L,GAAyBjsB,EAAQ,qBAAsB,YAAa,mBAEpE2rB,GAAW7sB,UAAUqH,kBAAoBA,EAEzCwlB,GAAW7sB,UAAUoG,iBAAmBlF,EAAOlB,UAAUoG,iBACzD+mB,GAAyBjsB,EAAQ,qBAAsB,oBAEvD2rB,GAAW7sB,UAAU84B,eAAiB53B,EAAOlB,UAAU84B,eACvD3L,GAAyBjsB,EAAQ,qBAAsB,kBAEvD2rB,GAAW7sB,UAAUsZ,wBAA0BsW,EAAMzU,SAAS0R,GAAW7sB,UAAU84B,eAAgB,KAAK,GAExGjM,GAAW7sB,UAAU+4B,wBAA0BnJ,EAAM7Y,SAAS8V,GAAW7sB,UAAU84B,eAAgB,KAAK,GAMxGjM,GAAW7sB,UAAUkL,oBAAsBJ,EAAQ9K,UAAUkL,oBAC7DiiB,GAAyBriB,EAAS,sBAAuB,uBACzD+hB,GAAW7sB,UAAUgyB,YAAclnB,EAAQ9K,UAAUgyB,YACrD7E,GAAyBriB,EAAS,sBAAuB,eACzD+hB,GAAW7sB,UAAU0L,cAAgBZ,EAAQ9K,UAAU0L,cACvDyhB,GAAyBriB,EAAS,sBAAuB,iBACzD+hB,GAAW7sB,UAAUyL,aAAeX,EAAQ9K,UAAUyL,aACtD0hB,GAAyBriB,EAAS,sBAAuB,gBACzD+hB,GAAW7sB,UAAU80B,iBAAmBhqB,EAAQ9K,UAAU80B,iBAC1D3H,GAAyBriB,EAAS,sBAAuB,oBAEzD+hB,GAAW7sB,UAAUoL,kBAAoBN,EAAQ9K,UAAUoL,kBAC3D+hB,GAAyBriB,EAAS,sBAAuB,qBAEzD+hB,GAAW7sB,UAAUuL,aAAeA,EAEpCshB,GAAW7sB,UAAUsL,cAAgBA,EAErCuhB,GAAW7sB,UAAU8M,YAAcA,EAKnC+f,GAAW7sB,UAAUqyB,uBAAyB,WAAW,WACjDqB,EAAOp3B,KAGP08B,EAAS18B,KAAKlC,EAAE,WAAW4K,IAAI,yBAE/Bi0B,EAAqB,CACzBC,UAAW,WACT,EAAKntB,QAAQ8gB,GAAWqB,WAAWvtB,MACnC,EAAK3E,QAEPm9B,WAAY,WACV,EAAKptB,QAAQ8gB,GAAWqB,WAAWvtB,MACnC,EAAKglB,SAEPyT,QAAS,WACHh/B,GAAE48B,QAAQ,EAAK90B,KAAM,CAAC,EAAKK,aAAc,EAAKG,kBAAoB,EACpE,EAAKy0B,WAEL,EAAK3kB,QAGT6mB,UAAW,WACLj/B,GAAE48B,QAAQ,EAAK90B,KAAM,CAAC,EAAKK,aAAc,EAAKG,kBAAoB,EACpE,EAAKq0B,aAEL,EAAK9jB,QAGTqmB,SAAUh9B,KAAKinB,MAAM1lB,KAAKvB,MAC1Bi9B,YAAaj9B,KAAKw3B,KAAKj2B,KAAKvB,MAC5Bk9B,cAAel9B,KAAKw6B,SAASj5B,KAAKvB,MAClCm9B,eAAgBn9B,KAAKu6B,UAAUh5B,KAAKvB,MACpCo9B,MAAO,WACL,EAAK12B,WAAW0wB,EAAKnxB,eAEvBo3B,MAAO,WACL,EAAK32B,WAAW0wB,EAAKhxB,iBAEvBk3B,MAAO,WACL,EAAK52B,WAAW0wB,EAAKjxB,eAEvBo3B,QAAS,WACP,EAAK9tB,QAAQ8gB,GAAWqB,WAAWvtB,MACnC,EAAKozB,KAAK,GACV,EAAKhoB,QAAQ8gB,GAAWqB,WAAWltB,SAErC84B,SAAU,WACR,EAAK/tB,QAAQ8gB,GAAWqB,WAAWvtB,MACnC,EAAKozB,MAAM,GACX,EAAKhoB,QAAQ8gB,GAAWqB,WAAWntB,UAErCg5B,KAAM,WACJ,GAAe,SAAX,EAAK5zB,GAAe,CACtB,IAAI+G,EAAM,EAAK9S,EAAE,oBAAoB4J,KAAK,QAC1C5G,OAAO8R,KAAKhC,QAEZ,EAAKwlB,qBAKXsG,EAAOr2B,OAAO,QAAQ9E,KAAK,OAAO,eA9DqB,eAkE5C+G,GACTo0B,EAAOr2B,OAAP,WAAkBiC,IAAWrB,GAAG,gCAAgC,WAE9D,OADA01B,EAAmBr0B,MACZ,MAHX,IAAK,IAAMA,KAAWq0B,EAAoB,EAA/Br0B,GAOX,IAAIo1B,EAAkB19B,KAAKlC,EAAE,iBACzB6/B,EAAkB39B,KAAKlC,EAAE,iBAE7BkC,KAAKlC,EAAE,cAAcyS,OACnB,WACE,IAAIqtB,EAAW,GAGXF,EAAgBG,SAAS,SACvBzG,EAAKpvB,KAAKyG,YACZmvB,EAASp/B,KAAK44B,EAAKpvB,KAAKyG,WAAWlF,QACjC,CAAC5J,KAAgC,EAA3By3B,EAAKoB,qBACXsF,WACJF,EAASp/B,KAAK44B,EAAKt5B,EAAE,aAAayL,QAAQ,CAAC4hB,QAAkC,EAA1BiM,EAAKqB,oBAAyBqF,WACjFJ,EAAgB91B,SAAS,QAAQD,YAAY,QAC7Cg2B,EAAgB/1B,SAAS,QAAQD,YAAY,QAC7CyvB,EAAKt5B,EAAE,2BAA2ByL,QAAQ,CAACwI,OAAO,SAClDqlB,EAAKt5B,EAAE,cAAcigC,MAAM,KAAMx0B,QAAQ,CAACgG,QAAQ,KAAM,OAEpD6nB,EAAKpvB,KAAKyG,YACZmvB,EAASp/B,KAAK44B,EAAKpvB,KAAKyG,WAAWlF,QAAQ,CAAC5J,IAAI,IAAIm+B,WACtDF,EAASp/B,KAAK44B,EAAKt5B,EAAE,aAAayL,QAAQ,CAAC4hB,OAAO,IAAI2S,WACtDJ,EAAgB91B,SAAS,QAAQD,YAAY,QAC7Cg2B,EAAgB/1B,SAAS,QAAQD,YAAY,QAC7CyvB,EAAKt5B,EAAE,2BAA2ByL,QAAQ,CAACwI,OAAO,SAClDqlB,EAAKt5B,EAAE,cAAcyL,QAAQ,CAACgG,QAAQ,KAExCzR,GAAEkgC,KAAKr6B,MAAM7F,GAAG8/B,GAAUK,MAAK,WAEzB7G,EAAKxxB,MAAQwxB,EAAKjxB,cAAwC,MAAxBixB,EAAK7qB,QAAQF,SACZ,QAAxB+qB,EAAK7qB,QAAQF,SAGjB+qB,EAAKxxB,MAAQwxB,EAAKnxB,cAAwC,MAAxBmxB,EAAK9qB,QAAQD,SACZ,QAAxB+qB,EAAK9qB,QAAQD,QAFjC+qB,EAAK9yB,SAML8yB,EAAK5U,0BAKbkb,EAAgBQ,WAAU,WACpBpgC,GAAEkC,MAAM69B,SAAS,SACnBzG,EAAKt5B,EAAE,cAAcyL,QAAQ,CAACgG,QAAQ,GAAG,QAE1C4uB,YAAW,WACRrgC,GAAEkC,MAAM69B,SAAS,SACnBzG,EAAKt5B,EAAE,cAAcyL,QAAQ,CAACgG,QAAQ,KAAK,QAG/CouB,EAAgBO,WAAU,WACpBpgC,GAAEkC,MAAM69B,SAAS,SACnBzG,EAAKt5B,EAAE,cAAcyL,QAAQ,CAACgG,QAAQ,GAAG,QAE1C4uB,YAAW,WACRrgC,GAAEkC,MAAM69B,SAAS,SACnBzG,EAAKt5B,EAAE,cAAcyL,QAAQ,CAACgG,QAAQ,KAAK,QAI/CvP,KAAKo+B,gBAELtgC,GAAEkF,UAAUgE,IAAI,uBAAwBhH,KAAKqN,IAC7CvP,GAAEkF,UAAUiE,GACV,uBACAjH,KAAKqN,GACL,CAAE,GAAMrN,MACRA,KAAKq+B,4BAGPvgC,GAAEkF,UAAUgE,IAAI,kBAAmB,gBACnClJ,GAAEkF,UAAUiE,GACV,kBACA,eACA,CAAE,GAAMjH,MACRA,KAAKs+B,uBAGPt+B,KAAKu+B,wBAMPhO,GAAW7sB,UAAU86B,yBAA2B,WAC9C1gC,GAAEkF,UAAUgE,IAAI,uBAAwBhH,KAAKqN,KAM/CkjB,GAAW7sB,UAAU26B,2BAA6B,SAAS1/B,GAEzD,GAAIA,EAAMwC,KAAN,GAAiBqK,WAAY,CAG/B,IAAIizB,EAAS3gC,GAAEkF,UAAU+O,SAAW,GAC/BpT,EAAMS,MAAQ,IAAQT,EAAMS,MAAQq/B,EAEvC9/B,EAAMwC,KAAN,GAAiBu9B,iBAEjB//B,EAAMwC,KAAN,GAAiBw9B,mBAKvBpO,GAAW7sB,UAAU06B,cAAgB,SAASt/B,EAASC,GAIrDiB,KAAK4+B,OAAS,CACZC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,EAChBC,SAAS,EACTC,WAAY,IAAIhJ,MAAMC,UACtBgJ,OAAQpgC,EACRqgC,OAAQpgC,EACRqgC,MAAOtgC,EACPugC,MAAOtgC,EACPugC,OAAQ,EACRhmB,OAAQ,EACRimB,OAAQ,IAIZhP,GAAW7sB,UAAU46B,sBAAwB,SAAS3/B,GACpD,IAAIy4B,EAAOz4B,EAAMwC,KAAN,GAIX,OAAmB,GAAfxC,EAAMuC,OACAk2B,EAAK7pB,WAGfzP,GAAEa,EAAMyC,QAAQG,KAAK,iBACnB,CAAE,GAAM61B,GACRA,EAAKoI,qBACLj+B,KAAK,gBACL,CAAE,GAAM61B,GACRA,EAAKoI,qBACLj+B,KAAK,kBACL,CAAE,GAAM61B,GACRA,EAAKqI,uBAGPrI,EAAKgH,cAAcz/B,EAAMG,QAASH,EAAMI,SACxCq4B,EAAKwH,OAAOC,gBAAiB,EAC7BzH,EAAKwH,OAAOc,iBAAkB,EAE9B/gC,EAAM0B,iBACN1B,EAAMghC,aAAe,EACrBhhC,EAAMihC,cAAe,GACd,IAGTrP,GAAW7sB,UAAU+7B,sBAAwB,SAAS9gC,GACpD,IAAIy4B,EAAOz4B,EAAMwC,KAAN,GACPy9B,EAASxH,EAAKwH,OAClB,GAAMA,EAAOC,eAAb,CAKAD,EAAOU,OAAS3gC,EAAMG,QAAU8/B,EAAOM,OACvCN,EAAOtlB,OAAS3a,EAAMI,QAAU6/B,EAAOO,OACvCP,EAAOW,QAAU,IAAItJ,MAAMC,UAAY0I,EAAOK,UAE9C,IAAIY,EAAOr9B,KAAKC,IAAIm8B,EAAOU,QACvBQ,EAAOt9B,KAAKC,IAAIm8B,EAAOtlB,QAGvBymB,EAAiBv9B,KAAKgH,IAAI4tB,EAAKpvB,KAAKoB,IAAI0I,QAAU,EAAG,IA+BzD,OA3BI+tB,EAAOC,GAASD,EAAOE,GAAmBnB,EAAOW,OAHlC,MAIjBX,EAAOC,gBAAiB,EACxBD,EAAOE,UAAW,EACd1H,EAAKxxB,MAAQwxB,EAAKjxB,eAChBy4B,EAAOU,OAAS,EAClBlI,EAAK/N,QAEL+N,EAAK13B,SAKNk/B,EAAOW,OAfO,MAemBX,EAAOE,UACvCF,EAAOc,kBAETd,EAAOI,SAAU,EACjB5H,EAAKpvB,KAAKC,aACP5F,UAAU+0B,EAAKpvB,KAAKC,aAAa5F,YAAc1D,EAAMI,QAAU6/B,EAAOS,OACtEj9B,WAAWg1B,EAAKpvB,KAAKC,aAAa7F,aAAezD,EAAMG,QAAU8/B,EAAOQ,QAG/ER,EAAOQ,MAAQzgC,EAAMG,QACrB8/B,EAAOS,MAAQ1gC,EAAMI,QAErBJ,EAAM0B,iBACN1B,EAAMghC,aAAe,EACrBhhC,EAAMihC,cAAe,GACd,IAGTrP,GAAW7sB,UAAU87B,oBAAsB,SAAS7gC,GAClD,IAAIigC,EAASjgC,EAAMwC,KAAN,GAAiBy9B,OAM9B,OALAA,EAAOC,gBAAiB,EACxBD,EAAOc,iBAAkB,EAEzB5hC,GAAEa,EAAMyC,QAAQkB,OAAO,kBAAkBA,OAAO,iBAAiBA,OAAO,oBAEpEs8B,EAAOE,WAAYF,EAAOI,UAE5BrgC,EAAM0B,iBACN1B,EAAMghC,aAAe,EACrBhhC,EAAMihC,cAAe,GACd,IAKXrP,GAAW7sB,UAAU66B,qBAAuB,WAC1C,IAAInH,EAAOp3B,KAGXA,KAAKgI,KAAKoB,IAAI7H,KAAK,gBAAgB,SAAS5C,GACtCqB,KAAK4F,MAAQwxB,EAAKjxB,cACpBxH,EAAM0B,oBAGPkB,KAAK,gBAAgB,SAAS5C,GACzBqB,KAAK4F,MAAQwxB,EAAKjxB,cACpBxH,EAAM0B,oBAGTkB,KAAK,cAAc,SAAS5C,GACvBqB,KAAK4F,MAAQwxB,EAAKjxB,cACpBxH,EAAM0B,qBASdkwB,GAAW7sB,UAAUs8B,oBAAsB,WAIzC,OAAkB,GAFJhgC,KAAKgI,KAAKyG,WAAWgd,WACb9rB,KAQxB4wB,GAAW7sB,UAAUu8B,kBAAoB,SAA6BpxB,GACpE,IAAIqxB,EAAkBlgC,KAAK0xB,0BACvByO,EAAgB,SAChBC,EAAsB,WAEpBpgC,KAAKmG,eAAiBnG,KAAK4F,MAE7B5F,KAAKwiB,mBADS,GAGhBxiB,KAAKyP,QAAQ8gB,GAAWqB,WAAWrtB,aACnChD,KAAKvB,MAEHqgC,EAAgB,EAChBC,EAAe,EACfzxB,GACFwxB,GAA2C,EAA3BrgC,KAAKw4B,mBACrB8H,GAAyC,EAA1BtgC,KAAKy4B,kBAEpBz4B,KAAKgI,KAAKyG,WAAW7G,SAAS,gBAC9B5H,KAAKgI,KAAKgB,UAAUpB,SAAS,kBAE7B5H,KAAKgI,KAAKyG,WAAW9G,YAAY,gBACjC3H,KAAKgI,KAAKgB,UAAUrB,YAAY,iBAGlC3H,KAAKgI,KAAKyG,WAAWlF,QACnB,CAAE5J,IAAK0gC,GACPH,EACAC,EACAC,GAEFpgC,KAAKgI,KAAKgB,UAAUO,QAClB,CAAE4hB,OAAQmV,GACVJ,EACAC,EACAC,IAMJ7P,GAAW7sB,UAAUg7B,eAAiB,WAEhC1+B,KAAKggC,uBAEPhgC,KAAKigC,mBADM,IAQf1P,GAAW7sB,UAAUi7B,eAAiB,WAE/B3+B,KAAKggC,uBACRhgC,KAAKigC,qBAUT1P,GAAW7sB,UAAU+f,sBAAwB,WAC3C,OAAIzjB,KAAK4F,MAAQ5F,KAAKmG,aACb,EAGL,MAAQnG,KAAK6I,gBAEyB,KAApC7I,KAAKuyB,QAAQzc,KAAKhI,YAAY,GACzB,GAEC,EAI8B,KAApC9N,KAAKuyB,QAAQzc,KAAKhI,YAAY,GACzB,GAEC,GAWdyiB,GAAW7sB,UAAUggB,qBAAuB,WAE1C,IAAIsV,EAAYh5B,KAAKuyB,QAAQzc,KAAKrM,cAAgB,EAElD,OAAIzJ,KAAK4F,MAAQ5F,KAAKmG,aACb6yB,EAGL,MAAQh5B,KAAK6I,gBAEiC,KAA5C7I,KAAKuyB,QAAQzc,KAAKhI,YAAYkrB,GACzBA,EAEAA,EAAY,EAI2B,KAA5Ch5B,KAAKuyB,QAAQzc,KAAKhI,YAAYkrB,GACzBA,EAEAA,EAAY,GAUzBzI,GAAW7sB,UAAU68B,kBAAoB1tB,EAAUnP,UAAU68B,kBAC7D1P,GAAyBhe,EAAW,eAAgB,qBACpD0d,GAAW7sB,UAAUyjB,cAAgBtU,EAAUnP,UAAUyjB,cACzD0J,GAAyBhe,EAAW,eAAgB,iBACpD0d,GAAW7sB,UAAUwjB,eAAiBrU,EAAUnP,UAAUwjB,eAC1D2J,GAAyBhe,EAAW,eAAgB,kBACpD0d,GAAW7sB,UAAUkR,aAAe/B,EAAUnP,UAAUkR,aACxDic,GAAyBhe,EAAW,eAAgB,gBAEpD0d,GAAW7sB,UAAUiQ,eAAiBd,EAAUnP,UAAUiQ,eAC1Dkd,GAAyBhe,EAAW,eAAgB,kBACpD0d,GAAW7sB,UAAUyhB,YAActS,EAAUnP,UAAUyhB,YACvD0L,GAAyBhe,EAAW,eAAgB,eACpD0d,GAAW7sB,UAAU+F,YAAcoJ,EAAUnP,UAAU+F,YACvDonB,GAAyBhe,EAAW,eAAgB,eACpD0d,GAAW7sB,UAAUiK,aAAekF,EAAUnP,UAAUiK,aACxDkjB,GAAyBhe,EAAW,eAAgB,gBACpD0d,GAAW7sB,UAAUkK,cAAgBiF,EAAUnP,UAAUkK,cACzDijB,GAAyBhe,EAAW,eAAgB,iBACpD0d,GAAW7sB,UAAUmK,WAAagF,EAAUnP,UAAUmK,WACtDgjB,GAAyBhe,EAAW,eAAgB,cACpD0d,GAAW7sB,UAAUoK,YAAc+E,EAAUnP,UAAUoK,YACvD+iB,GAAyBhe,EAAW,eAAgB,eACpD0d,GAAW7sB,UAAUgH,WAAamI,EAAUnP,UAAUgH,WACtDmmB,GAAyBhe,EAAW,eAAgB,cACpD0d,GAAW7sB,UAAUkH,YAAciI,EAAUnP,UAAUkH,YACvDimB,GAAyBhe,EAAW,eAAgB,eACpD0d,GAAW7sB,UAAUqK,iBAAmB8E,EAAUnP,UAAUqK,iBAC5D8iB,GAAyBhe,EAAW,eAAgB,oBACpD0d,GAAW7sB,UAAUsK,eAAiB6E,EAAUnP,UAAUsK,eAC1D6iB,GAAyBhe,EAAW,eAAgB,kBACpD0d,GAAW7sB,UAAUgwB,gBAAkB7gB,EAAUnP,UAAUgwB,gBAC3D7C,GAAyBhe,EAAW,eAAgB,mBAEpD0d,GAAW7sB,UAAUsQ,kBAAoBnB,EAAUnP,UAAUsQ,kBAC7D6c,GAAyBhe,EAAW,eAAgB,qBAEpD0d,GAAW7sB,UAAU0Q,aAAevB,EAAUnP,UAAU0Q,aACxDyc,GAAyBhe,EAAW,eAAgB,gBAQpD0d,GAAW7sB,UAAUmyB,iBAAmB,SAASzlB,GAE/C,MAIIA,EAHFxK,KAAAA,OADF,MACS,EADT,IAIIwK,EAFFohB,KAAAA,OAFF,WAIIphB,EADFjM,eAAAA,OAHF,SAMIyB,GACF5F,KAAK0G,WACHd,EACA,CAAE4rB,KAAMA,EAAMzD,wBAAyB5pB,SAMvC,IAAsBiM,EAAO5F,MAC3B4F,EAAO5F,OAASxK,KAAK2J,gBACvB3J,KAAK+J,YAAYqG,EAAO5F,YAEjB,IAAsB4F,EAAOC,MAElCD,EAAOC,MAAQrQ,KAAKuyB,QAAQzc,KAAKpL,WAAW1K,KAAK2J,iBACnD3J,KAAKu5B,WAAWnpB,EAAOC,MAQvBrQ,KAAK6xB,mBAAgB,IAAsBzhB,EAAOqkB,QAChDz0B,KAAK00B,aAAetkB,EAAOqkB,QAC7Bz0B,KAAKlC,EAAE,kBAAkB+D,IAAIuO,EAAOqkB,QAQpCz0B,KAAKwgC,yBAAsB,IAAsBpwB,EAAOqwB,OAC1DzgC,KAAK0gC,YAAYtwB,EAAOqwB,QAS5BlQ,GAAW7sB,UAAUqL,gBAAkB,SAASnJ,GAC9C,OAAIA,GAAQ5F,KAAKmG,cAAgBP,GAAQ5F,KAAKoG,kBAIxCpG,KAAKuyB,QAAQzc,KAAKrM,cAAgB,IAkB1C8mB,GAAW7sB,UAAUi9B,kBAAoB,SAASn2B,EAAO4B,EAAQ6H,GAC/D,IAAM5D,EAAOrQ,KAAKuyB,QAAQzc,KAAKZ,QAAQ1K,GAAO,GAE9C,OAAK6F,QAID,IAAsBjE,IACxBA,EAASiE,EAAK0B,OAAS/R,KAAKuM,QAAQwF,QAG/B1B,EAAKggB,aAAajkB,EAAQ6H,IARf,IAoBpBsc,GAAW7sB,UAAUk9B,YAAc,SAASp2B,EAAO4B,EAAQ6H,GACzD,IAAM5D,EAAOrQ,KAAKuyB,QAAQzc,KAAKZ,QAAQ1K,GAAO,GAE9C,OAAK6F,QAED,IAAsBjE,IAGxBA,EAASiE,EAAK0B,OAAS/R,KAAKuM,QAAQwF,QAG/B1B,EAAKqG,OAAOtK,EAAQ6H,IARTjU,KAAKiM,cAAgB,mBAezCskB,GAAW7sB,UAAUm9B,kBAAoB,SAASC,EAAKC,GAAiB,WACtE,IAAI/gC,KAAKsyB,MAAT,CAKA,GAHAtyB,KAAKsyB,MAAQtvB,SAASqhB,cAAc,OACpCvmB,GAAEkC,KAAKsyB,OAAOpqB,KAAK,YAAa,mBAEA,mBAArB64B,EAAiC,CAC1C,IAAMC,EAAch+B,SAASqhB,cAAc,UAC3C2c,EAAYC,aAAa,QAAS,SAClCD,EAAYC,aAAa,QAAS,eAClC,IAAMC,EAAOl+B,SAASqhB,cAAc,QACpC6c,EAAKD,aAAa,QAAS,wBAC3BnjC,GAAEkjC,GAAa73B,OAAO+3B,GACtBF,EAAYj/B,iBAAiB,SAAS,WACpCg/B,IACA,EAAKI,yBAEPrjC,GAAEkC,KAAKsyB,OAAOnpB,OAAO63B,GAGvB,IAAMI,EAAMp+B,SAASqhB,cAAc,OAMnC,GALAvmB,GAAEsjC,GAAKzvB,IAAI,CACTI,OAAU,SACT7J,KAAK,YAAa,iBACrBpK,GAAEkC,KAAKsyB,OAAOnpB,OAAOi4B,GAEjBN,EAAK,CACP,IAAMO,EAASr+B,SAASqhB,cAAc,OACtCgd,EAAOC,UAAYR,EACnBhjC,GAAEkC,KAAKsyB,OAAOnpB,OAAOk4B,GAGvBvjC,GAAEkC,KAAKsyB,OAAOpjB,SAASlP,KAAKgI,KAAKoB,OAGnCmnB,GAAW7sB,UAAUy9B,oBAAsB,WACzCrjC,GAAEkC,KAAKsyB,OAAOxrB,SACd9G,KAAKlC,EAAE,oBAAoBgJ,SAC3B9G,KAAKsyB,MAAQ,MAMf/B,GAAW7sB,UAAUoyB,cAAgB,WAKnC,IAAIyL,EAAS,CACX,QAAS,oBACT,WAAY,UACZ,YAAa,WACb,SAAU,gBACV,SAAU,gBACV,SAAU,iBACV,SAAU,kBACV,SAAU,mBACV,QAAS,+BACT,YAAa,qBACb,SAAU,kBACV,QAAS,kBACT,QAAS,oBACT,aAAc,YACd,cAAe,aACf,WAAY,UACZ,aAAc,YACd,QAAS,OACT,SAAU,QACV,QAAS,oBACT,QAAS,oBACT,YAAa,aACb,eAAgB,YAChB,iBAAkB,aAClB,kBAAmB,aAOrB,IAAK,IAAIL,IALL,MAAQlhC,KAAK6I,kBACf04B,EAAO,kBAAoB,YAC3BA,EAAO,mBAAqB,cAGbA,EACfvhC,KAAKlC,EAAEojC,GAAMh5B,KAAK,QAASq5B,EAAOL,KAOtC3Q,GAAW7sB,UAAU89B,aAAe,WAClCxhC,KAAKgI,KAAKC,aAAanF,KAAK,OAAOnB,MAAK,SAAS6I,EAAOi3B,GACtD,IAAKA,EAAKC,UAAmC,IAAvBD,EAAKE,cAAqB,CAC9C,IAAIvR,EAAMqR,EAAKrR,IACfqR,EAAKrR,IAAM,GACXtU,YAAW,WACT2lB,EAAKrR,IAAMA,IACV,UASTG,GAAW7sB,UAAU+0B,gBAAkB,WACrC,IAAImJ,EAAY5hC,KAAK4F,MAAQ5F,KAAKmG,aAAenG,KAAKgI,KAAKgB,UAAYhJ,KAAKgI,KAAKiB,OACjF,GAAI24B,GAAa5hC,KAAKgI,KAAKgB,UAAW,CACpC,IAAI4I,EAAcgwB,EAAUhwB,cACxBuZ,EAAStZ,SAAS7R,KAAKgI,KAAKgB,UAAU2I,IAAI,WAC9C,IAAK7G,MAAM8G,KAAiB9G,MAAMqgB,GAChC,OAAOvZ,EAAcuZ,EAGzB,OAAO,GAUToF,GAAW7sB,UAAUm+B,kBAAoB,WACvC,IAAIzxB,EAAS,GAET5F,EAAQxK,KAAK2J,eACbc,EAAUzK,KAAKuyB,QAAQzc,KAAKpL,WAAWF,GAgB3C,OAfiB,IAAZC,GAAkBA,KACrB2F,EAAOC,KAAO5F,GAGhB2F,EAAO5F,MAAQA,EACf4F,EAAOxK,KAAO5F,KAAK4F,KAMf5F,KAAK6xB,eACPzhB,EAAOqkB,OAASz0B,KAAK00B,YAGhBtkB,GAeTmgB,GAAW7sB,UAAUmwB,mBAAqB,SAASiO,GACjD,IAAI1xB,EAAS,GAIgB,KAAzB0xB,EAASC,OAAO,EAAG,KACrBD,EAAWA,EAASC,OAAO,IAI7B,IAAIC,EAAkBnwB,SAAU,QAAQ8C,KAAKmtB,IAC7C,IAAMh3B,MAAMk3B,GAIV,OAHA5xB,EAAO5F,MAAQw3B,EAGR5xB,EAMT,IAFA,IAAI6xB,EAAWH,EAAS3jC,MAAM,KAC1B+jC,EAAU,GACL5jC,EAAI,EAAGA,EAAI2jC,EAAS1jC,OAAQD,GAAK,EACxC4jC,EAAQD,EAAS3jC,IAAM2jC,EAAS3jC,EAAI,GA+BtC,MA3BI,OAAS4jC,EAAO,KAClB9xB,EAAOxK,KAAO5F,KAAKiG,aACV,OAASi8B,EAAO,KACzB9xB,EAAOxK,KAAO5F,KAAKmG,aACV,SAAW+7B,EAAO,OAC3B9xB,EAAOxK,KAAO5F,KAAKoG,qBAIjB,IAAsB87B,EAAO,OAE/B9xB,EAAOC,KAAO6xB,EAAO,MAME/2B,MAArB+2B,EAAO,SACT9xB,EAAOqkB,OAASnB,EAAMuB,uBAAuBqN,EAAO,SAM9B/2B,MAApB+2B,EAAO,QACT9xB,EAAOqwB,MAAQyB,EAAO,OAEjB9xB,GAeTmgB,GAAW7sB,UAAUy+B,mBAAqB,SAAS/xB,GAA0B,IAAlBkkB,EAAkB,uDAAR,OAC7D8N,EAAY,IACZC,EAAY,GAelB,QAbI,IAAsBjyB,EAAOC,KAC/BgyB,EAAU7jC,KAAK,OAAQ4R,EAAOC,WAE1B,IAAsBD,EAAO5F,OAE/B63B,EAAU7jC,KAAK,OAAQ,IAAM4R,EAAO5F,YAQpC,IAAsB4F,EAAOxK,KAC/B,GAAIwK,EAAOxK,MAAQ5F,KAAKiG,aACtBo8B,EAAU7jC,KAAK,OAAQ,YAClB,GAAI4R,EAAOxK,MAAQ5F,KAAKmG,aAC7Bk8B,EAAU7jC,KAAK,OAAQ,WAClB,IAAI4R,EAAOxK,MAAQ5F,KAAKoG,eAG7B,KAAM,+CAAiDgK,EAAOxK,KAF9Dy8B,EAAU7jC,KAAK,OAAQ,SAW3B,OAJI4R,EAAOqkB,QAAsB,SAAZH,GACnB+N,EAAU7jC,KAAK,SAAU4R,EAAOqkB,QAG3BnB,EAAMgP,uBAAuBD,EAAU5jC,KAAK2jC,IAAYj4B,QAAQ,OAAQ,MAWjFomB,GAAW7sB,UAAU6+B,sBAAwB,SAC3CnyB,EACAoyB,GAEA,IADAlO,EACA,uDADU,OAEJd,EAAY,IAAImB,gBAAgB6N,GAClCpyB,EAAOqkB,QAAsB,YAAZH,GACnBd,EAAUzvB,IAAI,IAAKqM,EAAOqkB,QAI5B,IAAMxV,EAASuU,EAAUlC,WACzB,OAAOrS,EAAS,IAAMA,EAAS,IAMjCsR,GAAW7sB,UAAU5F,EAAI,SAAS2kC,GAChC,OAAOziC,KAAKgI,KAAKoB,IAAItG,KAAK2/B,IAM5BhS,GAAOiS,OAAS,SAASn6B,EAASL,EAAMrG,GACtC,OAAO4uB,GAAOloB,GAASoJ,IAAIzJ,EAAMrG,IAGnCf,OAAOyvB,WAAaA,0yCC5+Eb,IAAMgB,aAAb,WACE,wBAAc,mCAEZvxB,KAAK2iC,WAAa,EAHtB,oDAME,SAAAnR,OAAO,eACLxxB,KAAK4iC,KAAO9kC,EAAE,6EACdA,EAAEkF,SAAS6N,MAAMgyB,QAAQ7iC,KAAK4iC,MAE9B5iC,KAAKiQ,MAAQnS,EAAE,4GAIfkC,KAAK4iC,KAAKz5B,OAAOnJ,KAAKiQ,OAEtBjQ,KAAKiQ,MAAM6yB,QAAO,SAAAjrB,IAChBA,GAAGxX,iBACH,IAAM4e,OAAS8jB,KAAK,MAAK9yB,MAAMnN,KAAK,SAASjB,OAC7C,MAAKmhC,YAAY,CAAC/jB,YAGpB,IAAMgkB,SAAW1jC,QAAQ2jC,IAAI3hC,KAAKhC,SAClCA,QAAQ2jC,IAAM,WAAa,2BAATC,EAAS,yBAATA,EAAS,gBACzBF,SAAQ,WAAR,EAAYE,GACZ,MAAKH,YAAYG,IAGnBriC,OAAOsiC,QAAU,sCAAID,EAAJ,yBAAIA,EAAJ,uBAAa,MAAKH,YAAYG,MA5BnD,yBAmCE,SAAYA,GACV,IAAMl4B,EAAOk4B,EAAKx9B,IAAI09B,KAAKC,WAAW7kC,KAAK,KACrC8kC,EAAavjC,KAAK4iC,KAAKY,SAAS,yBAClCD,EAAWzgC,KAAK,eAAemI,QAAUA,EAC3Cs4B,EAAWzgC,KAAK,UAAUgF,KAA1B,aAAqC9H,KAAK2iC,WAA1C,OAEA3iC,KAAK2iC,WAAa,EAClB3iC,KAAK4iC,KAAKz5B,OAAOrL,EAAE,qGAAD,OAEyCmN,EAFzC,kCA1CxB,ifCAO,IAAM2sB,EAAb,WAQE,WAAYvnB,EAAZ,GAA2D,IAAxCwnB,EAAwC,EAAxCA,YAAa3J,EAA2B,EAA3BA,WAAY4J,EAAe,EAAfA,0GAAe,SACzD93B,KAAKqQ,KAAOA,EACZrQ,KAAKkuB,WAAaA,EAClBluB,KAAK83B,aAAeA,EACpB93B,KAAK4Z,WAAa9b,EAAE,UAAW,CAC7B,gCAA4BuS,EAAO,UAAH,OAAaA,EAAK7F,OAAU,eAC5DmH,IAAK,CAAE8Z,SAAU,cAChB/jB,KAAK,YAAa2I,MAAAA,OAHH,EAGGA,EAAMoF,UAEvBoiB,IACF73B,KAAK4Z,WAAWzQ,OAAOrL,EAAE,6BACzBkC,KAAK4Z,WAAWhS,SAAS,cAI3B5H,KAAKiuB,KAAO,aAvBhB,mCA+BE,YAA2C,UAAnCvP,WAAAA,OAAmC,MAAtB,KAAsB,MAAhBtS,OAAAA,OAAgB,MAAP,KAAO,EAKzC,GAJIsS,GACF1e,KAAK4Z,WAAWjI,IAAI+M,GAGR,MAAVtS,GAAmBpM,KAAKqQ,KAA5B,CAIA,IAAMozB,EAAgBzjC,KAAKkuB,WAAWwV,YAAY1jC,KAAKqQ,KAAK7F,MAAO4B,GAC7Du3B,GAAwBF,GAAiBzjC,KAAKkuB,WAAW0V,oBAAoB5jC,KAAKqQ,KAAK7F,MAAO4B,GAGpG,UAAApM,KAAKiuB,YAAL,SAAWnnB,SACX9G,KAAKiuB,KAAOjuB,KAAKkuB,WACdC,MAAMnuB,KAAKqQ,KAAK7F,MAAO4B,GACvBy3B,UAAU7jC,KAAK4Z,YAElB,IAAMkqB,EAAmB,GAkBzB,OAjBKL,IACHzjC,KAAK4Z,WAAWhS,SAAS,iBACzBk8B,EAAiBtlC,KAAjB,eAA8BwB,KAAK83B,aAAnC,8BAEE6L,GACFG,EAAiBtlC,KAAjB,eAA8BwB,KAAKqQ,KAAKqG,OAAOitB,EAAsB,GAArE,kCAGGF,GACHzjC,KAAKiuB,KACFtc,IAAI,aAAcmyB,EAAiBrlC,KAAK,MACxC6xB,IAAI,UAFP,+CAEkB,WAAOzY,GAAP,gFACd/Z,EAAE+Z,EAAGzW,QAAQuQ,IAAI,CAAE,WAAc,KACjC7T,EAAE+Z,EAAGzW,QAAQitB,SAAS1mB,YAAY,iBAFpB,yNAFlB,kCAAA3H,KAAA,gBAQKA,4BAnEX,KA4EO,SAAS+jC,EAAmB1zB,EAAM7K,GACvC,IAAMw+B,EAAMhhC,SAASihC,gBAAgB,6BAA8B,OAKnE,OAJAD,EAAI/C,aAAa,QAAS,8BAC1B+C,EAAI/C,aAAa,UAAjB,cAAmC5wB,EAAKyB,MAAxC,YAAiDzB,EAAK0B,SACtDiyB,EAAI/C,aAAa,QAAjB,sBAAyCz7B,IACzCw+B,EAAI/C,aAAa,sBAAuB,QACjC+C,EAqBF,SAASE,EAAgCC,EAAYC,EAAO/zB,EAAMg0B,GACvE,IAAMC,EAAaD,EAAY77B,cAAZ,WAA8B27B,IAE3CH,EAAMM,GAAcP,EAAmB1zB,EAAM8zB,GACnD,IAAKG,EAAY,CAEf,IAAMC,EAAQF,EAAY77B,cAAc,gBACpC+7B,EAAOzmC,EAAEkmC,GAAKQ,YAAYD,GACzBzmC,EAAEkmC,GAAKH,UAAUQ,GAExBD,EAAM/7B,SAAQ,SAAAo8B,GAAG,OAAIT,EAAIU,aAzBOhlC,GAA3B,EAyB6C+kC,GAzBrBE,EAAYtb,EAA4B,EAA/B5S,EAAa0U,EAAkB,EAArBmO,EAAc35B,EAAO,EAAVilC,GACrDC,EAAO7hC,SAASihC,gBAAgB,6BAA8B,SAC/DhD,aAAa,IAAKvhC,EAAK4xB,YAC5BuT,EAAK5D,aAAa,IAAKthC,EAAI2xB,YAC3BuT,EAAK5D,aAAa,SAAU5X,EAAQ3pB,GAAM4xB,YAC1CuT,EAAK5D,aAAa,UAAW9V,EAASxrB,GAAK2xB,YACpCuT,IANF,MAA2BnlC,EAAS2pB,EAAU8B,EAAWxrB,EACxDklC,mJCzFD,SAASC,EAAcC,GAG5BA,EAAQxjC,KAAK,aAAa,kBAAM,KAEhCwjC,EAAQ,GAAGC,cAAgB,kBAAM,GAS5B,SAASxxB,EAAM9J,EAAOF,EAAK7G,GAChC,OAAOH,KAAKgH,IAAIhH,KAAKG,IAAI+G,EAAOF,GAAM7G,GASjC,SAASsiC,EAAcv7B,EAAO/G,GACnC,OAAS+G,EAAQ/G,EAAO,IAAO,IAQ1B,SAAS6qB,EAAW9jB,EAAOw7B,GAChC,OAAQA,EAAM3+B,SAASmD,GAOlB,SAASy7B,IAA0D,IAAzCC,EAAyC,uDAAnCpiC,SAAUqiC,IAAyB,yDAClEC,EAAgBF,EAAIE,cAC1B,OAAID,GAAAA,MAAoBC,GAAAA,EAAeC,WAC9BJ,EAAiBG,EAAcC,YAAY,GAE7CD,EAIF,SAAS/N,IAA8B,IAAhB6N,EAAgB,uDAAVpiC,SAC5BwiC,EAAWL,EAAiBC,GAClC,MAA4B,UAArBI,MAAAA,OAAA,EAAAA,EAAUC,UAA2C,aAArBD,MAAAA,OAAA,EAAAA,EAAUC,SAO5C,SAASC,EAAkBC,GAEhC,IAAMC,EAAQD,EAAOE,eAAiBF,EAAOG,gBAC7C,OAAOF,EAAM5iC,UAAY4iC,EAOpB,SAASx0B,EAAW9R,GACzB,OAAOA,EAAI6K,QAAQ,KAAK,SACrBA,QAAQ,KAAK,QACbA,QAAQ,KAAK,QACbA,QAAQ,KAAK,UAQX,SAAS0qB,EAAuBnrB,GACrC,OAAOq8B,mBAAmBr8B,GAAOS,QAAQ,MAAO,KAQ3C,SAASm4B,EAAuB54B,GACrC,OAAOs8B,mBAAmBt8B,GAAOS,QAAQ,OAAQ,KAgB5C,SAASsQ,EAASwrB,EAAMC,EAAMC,GACnC,IAAIC,EACJ,OAAO,WACL,IAAMC,EAAUrmC,KACVmjC,EAAOv/B,UACP0iC,EAAQ,WACZF,EAAU,KACLD,GAAWF,EAAKtiC,MAAM0iC,EAASlD,IAEhCoD,EAAUJ,IAAcC,EAC9BI,aAAaJ,GACbA,EAAUtqB,WAAWwqB,EAAOJ,GACxBK,GAASN,EAAKtiC,MAAM0iC,EAASlD,IAa9B,SAAStkB,EAASjf,EAAI6mC,EAAW1I,GAEtC,IAAIvG,EACAkP,EAEJ,OAJAD,IAAcA,EAAY,KAGtB1I,IAAOvG,GAAQ,IAAIvB,MAChB,WACL,IAAMoQ,EAAUrmC,KACV2mC,GAAO,IAAI1Q,KACXkN,EAAOv/B,UACT4zB,GAAQmP,EAAMnP,EAAOiP,GAEvBD,aAAaE,GACbA,EAAa5qB,YAAW,WACtB0b,EAAOmP,EACP/mC,EAAG+D,MAAM0iC,EAASlD,KACjBsD,KAEHjP,EAAOmP,EACP/mC,EAAG+D,MAAM0iC,EAASlD,KAUjB,SAAS5M,EAAoBz1B,GAClC,GAAkC,mBAAvBA,EAAO21B,YAA4B,OAAO,EACrD31B,EAAO21B,YAAcmQ,EAShB,SAASA,EAAsBtQ,GAAsE,6DAAJ,GAAI,IAA1DI,QAAAA,OAA0D,aAAzCuB,WAAAA,OAAyC,aAArBrB,OAAAA,OAAqB,MAAZ,KAAY,EACpGj4B,EAAQqE,SAAS6jC,YAAY,eAEnC,OADAloC,EAAMmoC,gBAAgBxQ,EAAWI,EAASuB,EAAYrB,GAC/Cj4B,EAOF,SAASsc,IACd,IAAM5N,EAAKrK,SAASqhB,cAAc,OAClChX,EAAG+J,MAAMtF,MAAQ,MACjB9O,SAAS6N,KAAK6zB,YAAYr3B,GAC1B,IAAM05B,EAAM15B,EAAG25B,YACfhkC,SAAS6N,KAAKo2B,YAAY55B,GAM1B,IAAMoQ,EAAkB,KAANspB,EAElB,OAAoB,GAAbtpB,EAAiB,IAAMA,EAOzB,SAAS0B,EAAI+nB,GAClB,OAAOA,EAAK96B,QAAO,SAAC+6B,EAAKC,GAAN,OAAcD,EAAMC,IAAK,GAQvC,SAAS7qB,EAAW8qB,GACzB,IAD8B,EACxBpoB,EAAS,GADe,85BAEXooB,GAFW,IAE9B,2BAAwB,KAAbC,EAAa,QACtBroB,EAAOzgB,KAAK8oC,IAHgB,8BAK9B,OAAOroB,EAQF,SAASsoB,EAAUC,EAAMC,GAC9B,OAAOD,EAAKjpC,QAAUkpC,EAAKlpC,QAAUipC,EAAKE,OAAM,SAAC9oC,EAAGN,GAAJ,OAAUM,GAAK6oC,EAAKnpC,MAQ/D,SAAS8c,EAAWosB,EAAMC,GAC/B,OAAOD,GAAQC,IAASF,EAAUC,EAAMC,izBC9O1CE,EAAOC,QAAU,SAAUC,GACzB,GAAiB,mBAANA,EACT,MAAMC,UAAUC,OAAOF,GAAM,sBAC7B,OAAOA,yBCHX,IAAIG,EAAW,EAAQ,KAEvBL,EAAOC,QAAU,SAAUC,GACzB,IAAKG,EAASH,IAAc,OAAPA,EACnB,MAAMC,UAAU,aAAeC,OAAOF,GAAM,mBAC5C,OAAOA,yBCLX,IAAII,EAAkB,EAAQ,MAC1BC,EAAS,EAAQ,IACjBC,EAAuB,EAAQ,MAE/BC,EAAcH,EAAgB,eAC9BI,EAAiBhqC,MAAMqF,UAIQyH,MAA/Bk9B,EAAeD,IACjBD,EAAqBG,EAAED,EAAgBD,EAAa,CAClDG,cAAc,EACd7+B,MAAOw+B,EAAO,QAKlBP,EAAOC,QAAU,SAAUY,GACzBH,EAAeD,GAAaI,IAAO,sCCjBrC,IAAIC,EAAS,eAIbd,EAAOC,QAAU,SAAUc,EAAGl+B,EAAOm+B,GACnC,OAAOn+B,GAASm+B,EAAUF,EAAOC,EAAGl+B,GAAOjM,OAAS,sBCNtDopC,EAAOC,QAAU,SAAUC,EAAIe,EAAa52B,GAC1C,KAAM61B,aAAce,GAClB,MAAMd,UAAU,cAAgB91B,EAAOA,EAAO,IAAM,IAAM,cAC1D,OAAO61B,yBCHX,IAAIG,EAAW,EAAQ,KAEvBL,EAAOC,QAAU,SAAUC,GACzB,IAAKG,EAASH,GACZ,MAAMC,UAAUC,OAAOF,GAAM,qBAC7B,OAAOA,sCCJX,IAAIgB,EAAW,gBAGXC,EAFsB,EAAQ,KAEdC,CAAoB,WAIxCpB,EAAOC,QAAWkB,EAGd,GAAGzgC,QAH2B,SAAiB2gC,GACjD,OAAOH,EAAS7oC,KAAMgpC,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,uCCR1E,IAAI5J,EAAO,EAAQ,MACf0nC,EAAW,EAAQ,MACnBC,EAA+B,EAAQ,MACvCC,EAAwB,EAAQ,MAChCC,EAAW,EAAQ,MACnBC,EAAiB,EAAQ,MACzBC,EAAoB,EAAQ,MAIhC3B,EAAOC,QAAU,SAAc2B,GAC7B,IAOIhrC,EAAQ0gB,EAAQuqB,EAAMC,EAAU9yB,EAAMjN,EAPtCggC,EAAIT,EAASM,GACbI,EAAmB,mBAAR3pC,KAAqBA,KAAO3B,MACvCurC,EAAkBhmC,UAAUrF,OAC5BsrC,EAAQD,EAAkB,EAAIhmC,UAAU,QAAKuH,EAC7C2+B,OAAoB3+B,IAAV0+B,EACVE,EAAiBT,EAAkBI,GACnCl/B,EAAQ,EAIZ,GAFIs/B,IAASD,EAAQtoC,EAAKsoC,EAAOD,EAAkB,EAAIhmC,UAAU,QAAKuH,EAAW,IAE3DA,MAAlB4+B,GAAiCJ,GAAKtrC,OAAS8qC,EAAsBY,GAWvE,IADA9qB,EAAS,IAAI0qB,EADbprC,EAAS6qC,EAASM,EAAEnrC,SAEdA,EAASiM,EAAOA,IACpBd,EAAQogC,EAAUD,EAAMH,EAAEl/B,GAAQA,GAASk/B,EAAEl/B,GAC7C6+B,EAAepqB,EAAQzU,EAAOd,QAThC,IAFAiN,GADA8yB,EAAWM,EAAeC,KAAKN,IACf/yB,KAChBsI,EAAS,IAAI0qB,IACLH,EAAO7yB,EAAKqzB,KAAKP,IAAWxL,KAAMzzB,IACxCd,EAAQogC,EAAUZ,EAA6BO,EAAUI,EAAO,CAACL,EAAK9/B,MAAOc,IAAQ,GAAQg/B,EAAK9/B,MAClG2/B,EAAepqB,EAAQzU,EAAOd,GAWlC,OADAuV,EAAO1gB,OAASiM,EACTyU,yBCvCT,IAAIgrB,EAAkB,EAAQ,MAC1Bb,EAAW,EAAQ,MACnBc,EAAkB,EAAQ,MAG1BC,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOh9B,EAAIi9B,GAC1B,IAGI5gC,EAHAggC,EAAIO,EAAgBI,GACpB9rC,EAAS6qC,EAASM,EAAEnrC,QACpBiM,EAAQ0/B,EAAgBI,EAAW/rC,GAIvC,GAAI6rC,GAAe/8B,GAAMA,GAAI,KAAO9O,EAASiM,GAG3C,IAFAd,EAAQggC,EAAEl/B,OAEGd,EAAO,OAAO,OAEtB,KAAMnL,EAASiM,EAAOA,IAC3B,IAAK4/B,GAAe5/B,KAASk/B,IAAMA,EAAEl/B,KAAW6C,EAAI,OAAO+8B,GAAe5/B,GAAS,EACnF,OAAQ4/B,IAAgB,IAI9BzC,EAAOC,QAAU,CAGfrhC,SAAU4jC,GAAa,GAGvBvjC,QAASujC,GAAa,0BC9BxB,IAAI5oC,EAAO,EAAQ,MACfgpC,EAAgB,EAAQ,MACxBtB,EAAW,EAAQ,MACnBG,EAAW,EAAQ,MACnBoB,EAAqB,EAAQ,MAE7BhsC,EAAO,GAAGA,KAGV2rC,EAAe,SAAUM,GAC3B,IAAIC,EAAiB,GAARD,EACTE,EAAoB,GAARF,EACZG,EAAkB,GAARH,EACVI,EAAmB,GAARJ,EACXK,EAAwB,GAARL,EAChBM,EAA2B,GAARN,EACnBO,EAAmB,GAARP,GAAaK,EAC5B,OAAO,SAAUT,EAAOrB,EAAYiC,EAAMC,GASxC,IARA,IAOIxhC,EAAOuV,EAPPyqB,EAAIT,EAASoB,GACbjT,EAAOmT,EAAcb,GACrByB,EAAgB5pC,EAAKynC,EAAYiC,EAAM,GACvC1sC,EAAS6qC,EAAShS,EAAK74B,QACvBiM,EAAQ,EACR09B,EAASgD,GAAkBV,EAC3BppC,EAASspC,EAASxC,EAAOmC,EAAO9rC,GAAUosC,GAAaI,EAAmB7C,EAAOmC,EAAO,QAAKl/B,EAE3F5M,EAASiM,EAAOA,IAAS,IAAIwgC,GAAYxgC,KAAS4sB,KAEtDnY,EAASksB,EADTzhC,EAAQ0tB,EAAK5sB,GACiBA,EAAOk/B,GACjCe,GACF,GAAIC,EAAQtpC,EAAOoJ,GAASyU,OACvB,GAAIA,EAAQ,OAAQwrB,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO/gC,EACf,KAAK,EAAG,OAAOc,EACf,KAAK,EAAGhM,EAAKwrC,KAAK5oC,EAAQsI,QACrB,OAAQ+gC,GACb,KAAK,EAAG,OAAO,EACf,KAAK,EAAGjsC,EAAKwrC,KAAK5oC,EAAQsI,GAIhC,OAAOohC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWzpC,IAIjEumC,EAAOC,QAAU,CAGfv/B,QAAS8hC,EAAa,GAGtBxkC,IAAKwkC,EAAa,GAGlB9jC,OAAQ8jC,EAAa,GAGrBiB,KAAMjB,EAAa,GAGnBzC,MAAOyC,EAAa,GAGpBrnC,KAAMqnC,EAAa,GAGnB51B,UAAW41B,EAAa,GAGxBkB,aAAclB,EAAa,0BCtE7B,IAAImB,EAAQ,EAAQ,MAChBrD,EAAkB,EAAQ,MAC1BsD,EAAa,EAAQ,MAErBC,EAAUvD,EAAgB,WAE9BN,EAAOC,QAAU,SAAU6D,GAIzB,OAAOF,GAAc,KAAOD,GAAM,WAChC,IAAIpG,EAAQ,GAKZ,OAJkBA,EAAMwG,YAAc,IAC1BF,GAAW,WACrB,MAAO,CAAEG,IAAK,IAE2B,IAApCzG,EAAMuG,GAAaG,SAASD,2CCfvC,IAAIL,EAAQ,EAAQ,MAEpB3D,EAAOC,QAAU,SAAU6D,EAAaI,GACtC,IAAI7a,EAAS,GAAGya,GAChB,QAASza,GAAUsa,GAAM,WAEvBta,EAAOgZ,KAAK,KAAM6B,GAAY,WAAc,MAAM,GAAM,6BCP5D,IAAIC,EAAY,EAAQ,MACpB7C,EAAW,EAAQ,MACnBsB,EAAgB,EAAQ,MACxBnB,EAAW,EAAQ,MAGnBe,EAAe,SAAU4B,GAC3B,OAAO,SAAUd,EAAMjC,EAAYY,EAAiBoC,GAClDF,EAAU9C,GACV,IAAIU,EAAIT,EAASgC,GACb7T,EAAOmT,EAAcb,GACrBnrC,EAAS6qC,EAASM,EAAEnrC,QACpBiM,EAAQuhC,EAAWxtC,EAAS,EAAI,EAChCD,EAAIytC,GAAY,EAAI,EACxB,GAAInC,EAAkB,EAAG,OAAa,CACpC,GAAIp/B,KAAS4sB,EAAM,CACjB4U,EAAO5U,EAAK5sB,GACZA,GAASlM,EACT,MAGF,GADAkM,GAASlM,EACLytC,EAAWvhC,EAAQ,EAAIjM,GAAUiM,EACnC,MAAMs9B,UAAU,+CAGpB,KAAMiE,EAAWvhC,GAAS,EAAIjM,EAASiM,EAAOA,GAASlM,EAAOkM,KAAS4sB,IACrE4U,EAAOhD,EAAWgD,EAAM5U,EAAK5sB,GAAQA,EAAOk/B,IAE9C,OAAOsC,IAIXrE,EAAOC,QAAU,CAGfloC,KAAMyqC,GAAa,GAGnB9gB,MAAO8gB,GAAa,sBCrCtB,IAAI/2B,EAAQ5Q,KAAK4Q,MAEb64B,EAAY,SAAU/G,EAAOgH,GAC/B,IAAI3tC,EAAS2mC,EAAM3mC,OACfioB,EAASpT,EAAM7U,EAAS,GAC5B,OAAOA,EAAS,EAAI4tC,EAAcjH,EAAOgH,GAAaE,EACpDH,EAAU/G,EAAMx1B,MAAM,EAAG8W,GAAS0lB,GAClCD,EAAU/G,EAAMx1B,MAAM8W,GAAS0lB,GAC/BA,IAIAC,EAAgB,SAAUjH,EAAOgH,GAKnC,IAJA,IAEI3jC,EAAS8jC,EAFT9tC,EAAS2mC,EAAM3mC,OACfD,EAAI,EAGDA,EAAIC,GAAQ,CAGjB,IAFA8tC,EAAI/tC,EACJiK,EAAU28B,EAAM5mC,GACT+tC,GAAKH,EAAUhH,EAAMmH,EAAI,GAAI9jC,GAAW,GAC7C28B,EAAMmH,GAAKnH,IAAQmH,GAEjBA,IAAM/tC,MAAK4mC,EAAMmH,GAAK9jC,GAC1B,OAAO28B,GAGPkH,EAAQ,SAAU1sC,EAAM2pB,EAAO6iB,GAOjC,IANA,IAAII,EAAU5sC,EAAKnB,OACfguC,EAAUljB,EAAM9qB,OAChBiuC,EAAS,EACTC,EAAS,EACTxtB,EAAS,GAENutB,EAASF,GAAWG,EAASF,GAC9BC,EAASF,GAAWG,EAASF,EAC/BttB,EAAOzgB,KAAK0tC,EAAUxsC,EAAK8sC,GAASnjB,EAAMojB,KAAY,EAAI/sC,EAAK8sC,KAAYnjB,EAAMojB,MAEjFxtB,EAAOzgB,KAAKguC,EAASF,EAAU5sC,EAAK8sC,KAAYnjB,EAAMojB,MAExD,OAAOxtB,GAGX0oB,EAAOC,QAAUqE,wBC5CjB,IAAIjE,EAAW,EAAQ,KACnB0E,EAAU,EAAQ,MAGlBlB,EAFkB,EAAQ,KAEhBvD,CAAgB,WAI9BN,EAAOC,QAAU,SAAU+E,GACzB,IAAIhD,EASF,OARE+C,EAAQC,KAGM,mBAFhBhD,EAAIgD,EAAcjB,cAEa/B,IAAMtrC,QAASquC,EAAQ/C,EAAEjmC,WAC/CskC,EAAS2B,IAEN,QADVA,EAAIA,EAAE6B,MACU7B,OAAIx+B,GAH+Cw+B,OAAIx+B,QAK5DA,IAANw+B,EAAkBtrC,MAAQsrC,yBClBrC,IAAIiD,EAA0B,EAAQ,MAItCjF,EAAOC,QAAU,SAAU+E,EAAepuC,GACxC,OAAO,IAAKquC,EAAwBD,GAA7B,CAAwD,IAAXpuC,EAAe,EAAIA,0BCLzE,IAAIsuC,EAAW,EAAQ,MACnBC,EAAgB,EAAQ,MAG5BnF,EAAOC,QAAU,SAAU6B,EAAU7pC,EAAI8J,EAAOqjC,GAC9C,IACE,OAAOA,EAAUntC,EAAGitC,EAASnjC,GAAO,GAAIA,EAAM,IAAM9J,EAAG8J,GACvD,MAAOlK,GAEP,MADAstC,EAAcrD,GACRjqC,0BCTV,IAEIwtC,EAFkB,EAAQ,KAEf/E,CAAgB,YAC3BgF,GAAe,EAEnB,IACE,IAAIC,EAAS,EACTC,EAAqB,CACvBx2B,KAAM,WACJ,MAAO,CAAEsnB,OAAQiP,MAEnB,OAAU,WACRD,GAAe,IAGnBE,EAAmBH,GAAY,WAC7B,OAAOhtC,MAGT3B,MAAM+uC,KAAKD,GAAoB,WAAc,MAAM,KACnD,MAAO3tC,IAETmoC,EAAOC,QAAU,SAAUjzB,EAAM04B,GAC/B,IAAKA,IAAiBJ,EAAc,OAAO,EAC3C,IAAIK,GAAoB,EACxB,IACE,IAAIC,EAAS,GACbA,EAAOP,GAAY,WACjB,MAAO,CACLr2B,KAAM,WACJ,MAAO,CAAEsnB,KAAMqP,GAAoB,MAIzC34B,EAAK44B,GACL,MAAO/tC,IACT,OAAO8tC,qBCpCT,IAAIhc,EAAW,GAAGA,SAElBqW,EAAOC,QAAU,SAAUC,GACzB,OAAOvW,EAAS0Y,KAAKnC,GAAIn4B,MAAM,GAAI,yBCHrC,IAAI89B,EAAwB,EAAQ,MAChCC,EAAa,EAAQ,MAGrBC,EAFkB,EAAQ,KAEVzF,CAAgB,eAEhC0F,EAAuE,aAAnDF,EAAW,WAAc,OAAO7pC,UAArB,IAUnC+jC,EAAOC,QAAU4F,EAAwBC,EAAa,SAAU5F,GAC9D,IAAI6B,EAAGkE,EAAK3uB,EACZ,YAAc9T,IAAP08B,EAAmB,YAAqB,OAAPA,EAAc,OAEM,iBAAhD+F,EAXD,SAAU/F,EAAIW,GACzB,IACE,OAAOX,EAAGW,GACV,MAAOhpC,KAQSquC,CAAOnE,EAAI7lC,OAAOgkC,GAAK6F,IAA8BE,EAEnED,EAAoBF,EAAW/D,GAEH,WAA3BzqB,EAASwuB,EAAW/D,KAAsC,mBAAZA,EAAEoE,OAAuB,YAAc7uB,yBCxB5F,IAAI5C,EAAM,EAAQ,MACd0xB,EAAU,EAAQ,MAClBC,EAAiC,EAAQ,MACzC7F,EAAuB,EAAQ,MAEnCR,EAAOC,QAAU,SAAUxmC,EAAQ6sC,GAIjC,IAHA,IAAI7Z,EAAO2Z,EAAQE,GACfnqC,EAAiBqkC,EAAqBG,EACtC4F,EAA2BF,EAA+B1F,EACrDhqC,EAAI,EAAGA,EAAI81B,EAAK71B,OAAQD,IAAK,CACpC,IAAIkqC,EAAMpU,EAAK91B,GACV+d,EAAIjb,EAAQonC,IAAM1kC,EAAe1C,EAAQonC,EAAK0F,EAAyBD,EAAQzF,4BCXxF,IAEI2F,EAFkB,EAAQ,KAElBlG,CAAgB,SAE5BN,EAAOC,QAAU,SAAU6D,GACzB,IAAI2C,EAAS,IACb,IACE,MAAM3C,GAAa2C,GACnB,MAAOC,GACP,IAEE,OADAD,EAAOD,IAAS,EACT,MAAM1C,GAAa2C,GAC1B,MAAOE,KACT,OAAO,yBCbX,IAAIhD,EAAQ,EAAQ,MAEpB3D,EAAOC,SAAW0D,GAAM,WACtB,SAASzrB,KAGT,OAFAA,EAAEnc,UAAUgoC,YAAc,KAEnB7nC,OAAO0qC,eAAe,IAAI1uB,KAASA,EAAEnc,gDCL9C,IAAI8qC,EAAoB,0BACpBtG,EAAS,EAAQ,IACjBuG,EAA2B,EAAQ,MACnCC,EAAiB,EAAQ,MACzBC,EAAY,EAAQ,MAEpBC,EAAa,WAAc,OAAO5uC,MAEtC2nC,EAAOC,QAAU,SAAUiH,EAAqBC,EAAMn4B,GACpD,IAAI+2B,EAAgBoB,EAAO,YAI3B,OAHAD,EAAoBnrC,UAAYwkC,EAAOsG,EAAmB,CAAE73B,KAAM83B,EAAyB,EAAG93B,KAC9F+3B,EAAeG,EAAqBnB,GAAe,GAAO,GAC1DiB,EAAUjB,GAAiBkB,EACpBC,yBCdT,IAAIE,EAAc,EAAQ,MACtB5G,EAAuB,EAAQ,MAC/BsG,EAA2B,EAAQ,MAEvC9G,EAAOC,QAAUmH,EAAc,SAAUxB,EAAQ/E,EAAK9+B,GACpD,OAAOy+B,EAAqBG,EAAEiF,EAAQ/E,EAAKiG,EAAyB,EAAG/kC,KACrE,SAAU6jC,EAAQ/E,EAAK9+B,GAEzB,OADA6jC,EAAO/E,GAAO9+B,EACP6jC,qBCRT5F,EAAOC,QAAU,SAAUoH,EAAQtlC,GACjC,MAAO,CACLulC,aAAuB,EAATD,GACdzG,eAAyB,EAATyG,GAChBE,WAAqB,EAATF,GACZtlC,MAAOA,uCCJX,IAAIylC,EAAgB,EAAQ,MACxBhH,EAAuB,EAAQ,MAC/BsG,EAA2B,EAAQ,MAEvC9G,EAAOC,QAAU,SAAU2F,EAAQ/E,EAAK9+B,GACtC,IAAI0lC,EAAcD,EAAc3G,GAC5B4G,KAAe7B,EAAQpF,EAAqBG,EAAEiF,EAAQ6B,EAAaX,EAAyB,EAAG/kC,IAC9F6jC,EAAO6B,GAAe1lC,sCCP7B,IAAImjC,EAAW,EAAQ,MACnBwC,EAAsB,EAAQ,MAIlC1H,EAAOC,QAAU,SAAU0H,GAEzB,GADAzC,EAAS7sC,MACI,WAATsvC,GAA8B,YAATA,EAAoBA,EAAO,cAC/C,GAAa,WAATA,EAAmB,MAAMxH,UAAU,kBAC5C,OAAOuH,EAAoBrvC,KAAMsvC,sCCTnC,IAAIxxC,EAAI,EAAQ,MACZyxC,EAA4B,EAAQ,MACpChB,EAAiB,EAAQ,MACzBiB,EAAiB,EAAQ,MACzBd,EAAiB,EAAQ,MACzBe,EAA8B,EAAQ,MACtCC,EAAW,EAAQ,MACnBzH,EAAkB,EAAQ,MAC1B0H,EAAU,EAAQ,MAClBhB,EAAY,EAAQ,MACpBiB,EAAgB,EAAQ,MAExBpB,EAAoBoB,EAAcpB,kBAClCqB,EAAyBD,EAAcC,uBACvC7C,EAAW/E,EAAgB,YAC3B6H,EAAO,OACPC,EAAS,SACThD,EAAU,UAEV6B,EAAa,WAAc,OAAO5uC,MAEtC2nC,EAAOC,QAAU,SAAUoI,EAAUlB,EAAMD,EAAqBl4B,EAAMs5B,EAASC,EAAQC,GACrFZ,EAA0BV,EAAqBC,EAAMn4B,GAErD,IAkBIy5B,EAA0BC,EAASC,EAlBnCC,EAAqB,SAAUC,GACjC,GAAIA,IAASP,GAAWQ,EAAiB,OAAOA,EAChD,IAAKZ,GAA0BW,KAAQE,EAAmB,OAAOA,EAAkBF,GACnF,OAAQA,GACN,KAAKV,EACL,KAAKC,EACL,KAAKhD,EAAS,OAAO,WAAqB,OAAO,IAAI8B,EAAoB7uC,KAAMwwC,IAC/E,OAAO,WAAc,OAAO,IAAI3B,EAAoB7uC,QAGpD0tC,EAAgBoB,EAAO,YACvB6B,GAAwB,EACxBD,EAAoBV,EAAStsC,UAC7BktC,EAAiBF,EAAkB1D,IAClC0D,EAAkB,eAClBT,GAAWS,EAAkBT,GAC9BQ,GAAmBZ,GAA0Be,GAAkBL,EAAmBN,GAClFY,EAA4B,SAAR/B,GAAkB4B,EAAkBI,SAA4BF,EAiCxF,GA7BIC,IACFT,EAA2B7B,EAAesC,EAAkB7G,KAAK,IAAIgG,IACjExB,IAAsB3qC,OAAOH,WAAa0sC,EAAyBz5B,OAChEg5B,GAAWpB,EAAe6B,KAA8B5B,IACvDgB,EACFA,EAAeY,EAA0B5B,GACa,mBAAtC4B,EAAyBpD,IACzCyC,EAA4BW,EAA0BpD,EAAU4B,IAIpEF,EAAe0B,EAA0B1C,GAAe,GAAM,GAC1DiC,IAAShB,EAAUjB,GAAiBkB,KAKxCqB,GAAWF,GAAUa,GAAkBA,EAAe5+B,OAAS+9B,IACjEY,GAAwB,EACxBF,EAAkB,WAAoB,OAAOG,EAAe5G,KAAKhqC,QAI7D2vC,IAAWQ,GAAWO,EAAkB1D,KAAcyD,GAC1DhB,EAA4BiB,EAAmB1D,EAAUyD,GAE3D9B,EAAUG,GAAQ2B,EAGdR,EAMF,GALAI,EAAU,CACRpd,OAAQsd,EAAmBR,GAC3B3b,KAAM8b,EAASO,EAAkBF,EAAmBT,GACpDgB,QAASP,EAAmBxD,IAE1BoD,EAAQ,IAAKG,KAAOD,GAClBR,GAA0Bc,KAA2BL,KAAOI,KAC9DhB,EAASgB,EAAmBJ,EAAKD,EAAQC,SAEtCxyC,EAAE,CAAEsD,OAAQ0tC,EAAMiC,OAAO,EAAMC,OAAQnB,GAA0Bc,GAAyBN,GAGnG,OAAOA,yBCxFT,IAAIY,EAAO,EAAQ,KACf50B,EAAM,EAAQ,MACd60B,EAA+B,EAAQ,MACvCptC,EAAiB,UAErB6jC,EAAOC,QAAU,SAAUkH,GACzB,IAAIqC,EAASF,EAAKE,SAAWF,EAAKE,OAAS,IACtC90B,EAAI80B,EAAQrC,IAAOhrC,EAAeqtC,EAAQrC,EAAM,CACnDplC,MAAOwnC,EAA6B5I,EAAEwG,4BCR1C,IAAIxD,EAAQ,EAAQ,MAGpB3D,EAAOC,SAAW0D,GAAM,WAEtB,OAA8E,GAAvEznC,OAAOC,eAAe,GAAI,EAAG,CAAEhC,IAAK,WAAc,OAAO,KAAQ,2BCL1E,IAAIsvC,EAAS,EAAQ,MACjBpJ,EAAW,EAAQ,KAEnBhlC,EAAWouC,EAAOpuC,SAElBquC,EAASrJ,EAAShlC,IAAaglC,EAAShlC,EAASqhB,eAErDsjB,EAAOC,QAAU,SAAUC,GACzB,OAAOwJ,EAASruC,EAASqhB,cAAcwjB,GAAM,sBCN/CF,EAAOC,QAAU,CACf0J,YAAa,EACbC,oBAAqB,EACrBC,aAAc,EACdC,eAAgB,EAChBC,YAAa,EACbC,cAAe,EACfC,aAAc,EACdC,qBAAsB,EACtBC,SAAU,EACVC,kBAAmB,EACnBC,eAAgB,EAChBC,gBAAiB,EACjBC,kBAAmB,EACnBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,SAAU,EACVC,iBAAkB,EAClBC,OAAQ,EACRC,YAAa,EACbC,cAAe,EACfC,cAAe,EACfC,eAAgB,EAChBC,aAAc,EACdC,cAAe,EACfC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,EAChBC,iBAAkB,EAClBC,cAAe,EACfC,UAAW,yBCjCb,IAEIC,EAFY,EAAQ,MAEAja,MAAM,mBAE9BuO,EAAOC,UAAYyL,IAAYA,EAAQ,qBCJvC1L,EAAOC,QAA2B,iBAAV9mC,4BCAxB,IAAIwyC,EAAK,EAAQ,MAEjB3L,EAAOC,QAAU,eAAezuB,KAAKm6B,yBCFrC,IAAIC,EAAY,EAAQ,MACpBnC,EAAS,EAAQ,MAErBzJ,EAAOC,QAAU,oBAAoBzuB,KAAKo6B,SAAgCpoC,IAAlBimC,EAAOoC,6BCH/D,IAAID,EAAY,EAAQ,MAExB5L,EAAOC,QAAU,qCAAqCzuB,KAAKo6B,yBCF3D,IAAIE,EAAU,EAAQ,MAClBrC,EAAS,EAAQ,MAErBzJ,EAAOC,QAAqC,WAA3B6L,EAAQrC,EAAOsC,+BCHhC,IAAIH,EAAY,EAAQ,MAExB5L,EAAOC,QAAU,qBAAqBzuB,KAAKo6B,yBCF3C,IAAII,EAAa,EAAQ,MAEzBhM,EAAOC,QAAU+L,EAAW,YAAa,cAAgB,yBCFzD,IAOIva,EAAO3H,EAPP2f,EAAS,EAAQ,MACjBmC,EAAY,EAAQ,MAEpBG,EAAUtC,EAAOsC,QACjBE,EAAOxC,EAAOwC,KACdC,EAAWH,GAAWA,EAAQG,UAAYD,GAAQA,EAAKniB,QACvDqiB,EAAKD,GAAYA,EAASC,GAG1BA,EAEFriB,GADA2H,EAAQ0a,EAAG31C,MAAM,MACD,GAAK,EAAI,EAAIi7B,EAAM,GAAKA,EAAM,GACrCma,MACTna,EAAQma,EAAUna,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQma,EAAUna,MAAM,oBACb3H,EAAU2H,EAAM,IAI/BuO,EAAOC,QAAUnW,IAAYA,wBCpB7B,IAEIsiB,EAFY,EAAQ,MAED3a,MAAM,wBAE7BuO,EAAOC,UAAYmM,IAAWA,EAAO,oBCHrCpM,EAAOC,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,iCCRF,IAAIwJ,EAAS,EAAQ,MACjBlD,EAA2B,UAC3BuB,EAA8B,EAAQ,MACtCC,EAAW,EAAQ,MACnBsE,EAAY,EAAQ,MACpBC,EAA4B,EAAQ,MACpCC,EAAW,EAAQ,MAgBvBvM,EAAOC,QAAU,SAAU9nC,EAASmuC,GAClC,IAGY7sC,EAAQonC,EAAK2L,EAAgBC,EAAgBC,EAHrDC,EAASx0C,EAAQsB,OACjBmzC,EAASz0C,EAAQsxC,OACjBoD,EAAS10C,EAAQ20C,KASrB,GANErzC,EADEmzC,EACOnD,EACAoD,EACApD,EAAOkD,IAAWN,EAAUM,EAAQ,KAEnClD,EAAOkD,IAAW,IAAI5wC,UAEtB,IAAK8kC,KAAOyF,EAAQ,CAQ9B,GAPAmG,EAAiBnG,EAAOzF,GAGtB2L,EAFEr0C,EAAQ40C,aACVL,EAAanG,EAAyB9sC,EAAQonC,KACf6L,EAAW3qC,MACpBtI,EAAOonC,IACtB0L,EAASK,EAAS/L,EAAM8L,GAAUE,EAAS,IAAM,KAAOhM,EAAK1oC,EAAQkxC,cAE5C7lC,IAAnBgpC,EAA8B,CAC3C,UAAWC,UAA0BD,EAAgB,SACrDF,EAA0BG,EAAgBD,IAGxCr0C,EAAQ60C,MAASR,GAAkBA,EAAeQ,OACpDlF,EAA4B2E,EAAgB,QAAQ,GAGtD1E,EAAStuC,EAAQonC,EAAK4L,EAAgBt0C,uBCnD1C6nC,EAAOC,QAAU,SAAUjzB,GACzB,IACE,QAASA,IACT,MAAOnV,GACP,OAAO,uCCFX,EAAQ,MACR,IAAIkwC,EAAW,EAAQ,MACnBkF,EAAa,EAAQ,MACrBtJ,EAAQ,EAAQ,MAChBrD,EAAkB,EAAQ,MAC1BwH,EAA8B,EAAQ,MAEtCjE,EAAUvD,EAAgB,WAC1B4M,EAAkBC,OAAOpxC,UAE7BikC,EAAOC,QAAU,SAAU0I,EAAK37B,EAAMw7B,EAAQ4E,GAC5C,IAAIC,EAAS/M,EAAgBqI,GAEzB2E,GAAuB3J,GAAM,WAE/B,IAAI5B,EAAI,GAER,OADAA,EAAEsL,GAAU,WAAc,OAAO,GACZ,GAAd,GAAG1E,GAAK5G,MAGbwL,EAAoBD,IAAwB3J,GAAM,WAEpD,IAAI6J,GAAa,EACbC,EAAK,IAkBT,MAhBY,UAAR9E,KAIF8E,EAAK,IAGF1J,YAAc,GACjB0J,EAAG1J,YAAYF,GAAW,WAAc,OAAO4J,GAC/CA,EAAGC,MAAQ,GACXD,EAAGJ,GAAU,IAAIA,IAGnBI,EAAGzgC,KAAO,WAAiC,OAAnBwgC,GAAa,EAAa,MAElDC,EAAGJ,GAAQ,KACHG,KAGV,IACGF,IACAC,GACD/E,EACA,CACA,IAAImF,EAAqB,IAAIN,GACzB3E,EAAU17B,EAAKqgC,EAAQ,GAAG1E,IAAM,SAAUiF,EAAcnH,EAAQ9uC,EAAKk2C,EAAMC,GAC7E,IAAIC,EAAQtH,EAAOz5B,KACnB,OAAI+gC,IAAUd,GAAcc,IAAUb,EAAgBlgC,KAChDsgC,IAAwBQ,EAInB,CAAExX,MAAM,EAAMv0B,MAAO4rC,EAAmBtL,KAAKoE,EAAQ9uC,EAAKk2C,IAE5D,CAAEvX,MAAM,EAAMv0B,MAAO6rC,EAAavL,KAAK1qC,EAAK8uC,EAAQoH,IAEtD,CAAEvX,MAAM,MAGjByR,EAAS3H,OAAOrkC,UAAW4sC,EAAKD,EAAQ,IACxCX,EAASmF,EAAiBG,EAAQ3E,EAAQ,IAGxC0E,GAAMtF,EAA4BoF,EAAgBG,GAAS,QAAQ,uCCrEzE,IAAItI,EAAU,EAAQ,MAClBtD,EAAW,EAAQ,MACnB7nC,EAAO,EAAQ,MAIfo0C,EAAmB,SAAUv0C,EAAQw0C,EAAU3H,EAAQ4H,EAAW9gC,EAAO+gC,EAAOC,EAAQC,GAM1F,IALA,IAGIztC,EAHA0tC,EAAclhC,EACdmhC,EAAc,EACdC,IAAQJ,GAASx0C,EAAKw0C,EAAQC,EAAS,GAGpCE,EAAcL,GAAW,CAC9B,GAAIK,KAAejI,EAAQ,CAGzB,GAFA1lC,EAAU4tC,EAAQA,EAAMlI,EAAOiI,GAAcA,EAAaN,GAAY3H,EAAOiI,GAEzEJ,EAAQ,GAAKpJ,EAAQnkC,GACvB0tC,EAAcN,EAAiBv0C,EAAQw0C,EAAUrtC,EAAS6gC,EAAS7gC,EAAQhK,QAAS03C,EAAaH,EAAQ,GAAK,MACzG,CACL,GAAIG,GAAe,iBAAkB,MAAMnO,UAAU,sCACrD1mC,EAAO60C,GAAe1tC,EAGxB0tC,IAEFC,IAEF,OAAOD,GAGTtO,EAAOC,QAAU+N,wBC/BjB,IAAIrK,EAAQ,EAAQ,MAEpB3D,EAAOC,SAAW0D,GAAM,WAEtB,OAAOznC,OAAOuyC,aAAavyC,OAAOwyC,kBAAkB,8BCJtD,IAAIvK,EAAY,EAAQ,MAGxBnE,EAAOC,QAAU,SAAUhoC,EAAIqrC,EAAM1sC,GAEnC,GADAutC,EAAUlsC,QACGuL,IAAT8/B,EAAoB,OAAOrrC,EAC/B,OAAQrB,GACN,KAAK,EAAG,OAAO,WACb,OAAOqB,EAAGoqC,KAAKiB,IAEjB,KAAK,EAAG,OAAO,SAAU5R,GACvB,OAAOz5B,EAAGoqC,KAAKiB,EAAM5R,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGC,GAC1B,OAAO15B,EAAGoqC,KAAKiB,EAAM5R,EAAGC,IAE1B,KAAK,EAAG,OAAO,SAAUD,EAAGC,EAAGgd,GAC7B,OAAO12C,EAAGoqC,KAAKiB,EAAM5R,EAAGC,EAAGgd,IAG/B,OAAO,WACL,OAAO12C,EAAG+D,MAAMsnC,EAAMrnC,gDCpB1B,IAAIkoC,EAAY,EAAQ,MACpB9D,EAAW,EAAQ,KAEnBt4B,EAAQ,GAAGA,MACX6mC,EAAY,GAEZC,EAAY,SAAU7M,EAAG8M,EAAYtT,GACvC,KAAMsT,KAAcF,GAAY,CAC9B,IAAK,IAAIG,EAAO,GAAIp4C,EAAI,EAAGA,EAAIm4C,EAAYn4C,IAAKo4C,EAAKp4C,GAAK,KAAOA,EAAI,IAErEi4C,EAAUE,GAAcE,SAAS,MAAO,gBAAkBD,EAAKj4C,KAAK,KAAO,KAC3E,OAAO83C,EAAUE,GAAY9M,EAAGxG,IAKpCwE,EAAOC,QAAU+O,SAASp1C,MAAQ,SAAc0pC,GAC9C,IAAIrrC,EAAKksC,EAAU9rC,MACf42C,EAAWlnC,EAAMs6B,KAAKpmC,UAAW,GACjCunC,EAAgB,WAClB,IAAIhI,EAAOyT,EAAS7uB,OAAOrY,EAAMs6B,KAAKpmC,YACtC,OAAO5D,gBAAgBmrC,EAAgBqL,EAAU52C,EAAIujC,EAAK5kC,OAAQ4kC,GAAQvjC,EAAG+D,MAAMsnC,EAAM9H,IAG3F,OADI6E,EAASpoC,EAAG8D,aAAYynC,EAAcznC,UAAY9D,EAAG8D,WAClDynC,yBCzBT,IAAIiG,EAAS,EAAQ,MAEjBtF,EAAY,SAAU+K,GACxB,MAA0B,mBAAZA,EAAyBA,OAAW1rC,GAGpDw8B,EAAOC,QAAU,SAAUlnC,EAAWswB,GACpC,OAAOptB,UAAUrF,OAAS,EAAIutC,EAAUsF,EAAO1wC,IAAc0wC,EAAO1wC,IAAc0wC,EAAO1wC,GAAWswB,0BCPtG,IAAIyiB,EAAU,EAAQ,KAClB9E,EAAY,EAAQ,MAGpB3B,EAFkB,EAAQ,KAEf/E,CAAgB,YAE/BN,EAAOC,QAAU,SAAUC,GACzB,GAAU18B,MAAN08B,EAAiB,OAAOA,EAAGmF,IAC1BnF,EAAG,eACH8G,EAAU8E,EAAQ5L,2BCTzB,IAAIgF,EAAW,EAAQ,MACnBvD,EAAoB,EAAQ,MAEhC3B,EAAOC,QAAU,SAAUC,GACzB,IAAIkC,EAAiBT,EAAkBzB,GACvC,GAA6B,mBAAlBkC,EACT,MAAMjC,UAAUC,OAAOF,GAAM,oBAC7B,OAAOgF,EAAS9C,EAAeC,KAAKnC,0BCPxC,IAAIoB,EAAW,EAAQ,MAEnB71B,EAAQ5Q,KAAK4Q,MACbjJ,EAAU,GAAGA,QACb2sC,EAAuB,8BACvBC,EAAgC,sBAIpCpP,EAAOC,QAAU,SAAUoP,EAAS13C,EAAKmsB,EAAUwrB,EAAUC,EAAeC,GAC1E,IAAIC,EAAU3rB,EAAWurB,EAAQz4C,OAC7BkI,EAAIwwC,EAAS14C,OACb84C,EAAUN,EAKd,YAJsB5rC,IAAlB+rC,IACFA,EAAgBjO,EAASiO,GACzBG,EAAUP,GAEL3sC,EAAQ6/B,KAAKmN,EAAaE,GAAS,SAAUje,EAAOke,GACzD,IAAIC,EACJ,OAAQD,EAAG7O,OAAO,IAChB,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,OAAOuO,EACjB,IAAK,IAAK,OAAO13C,EAAIoQ,MAAM,EAAG+b,GAC9B,IAAK,IAAK,OAAOnsB,EAAIoQ,MAAM0nC,GAC3B,IAAK,IACHG,EAAUL,EAAcI,EAAG5nC,MAAM,GAAI,IACrC,MACF,QACE,IAAIsf,GAAKsoB,EACT,GAAU,IAANtoB,EAAS,OAAOoK,EACpB,GAAIpK,EAAIvoB,EAAG,CACT,IAAI6hC,EAAIl1B,EAAM4b,EAAI,IAClB,OAAU,IAANsZ,EAAgBlP,EAChBkP,GAAK7hC,OAA8B0E,IAApB8rC,EAAS3O,EAAI,GAAmBgP,EAAG7O,OAAO,GAAKwO,EAAS3O,EAAI,GAAKgP,EAAG7O,OAAO,GACvFrP,EAETme,EAAUN,EAASjoB,EAAI,GAE3B,YAAmB7jB,IAAZosC,EAAwB,GAAKA,4BCtCxC,IAAIC,EAAQ,SAAU3P,GACpB,OAAOA,GAAMA,EAAGrlC,MAAQA,MAAQqlC,GAIlCF,EAAOC,QAEL4P,EAA2B,iBAAdC,YAA0BA,aACvCD,EAAuB,iBAAV12C,QAAsBA,SAEnC02C,EAAqB,iBAARpgB,MAAoBA,OACjCogB,EAAuB,iBAAV,EAAAE,GAAsB,EAAAA,IAEnC,WAAe,OAAO13C,KAAtB,IAAoC22C,SAAS,cAATA,yBCbtC,IAAI1N,EAAW,EAAQ,MAEnB0O,EAAiB,GAAGA,eAExBhQ,EAAOC,QAAU/jC,OAAO+zC,QAAU,SAAgB/P,EAAIW,GACpD,OAAOmP,EAAe3N,KAAKf,EAASpB,GAAKW,sBCL3Cb,EAAOC,QAAU,wBCAjB,IAAIwJ,EAAS,EAAQ,MAErBzJ,EAAOC,QAAU,SAAUvO,EAAGC,GAC5B,IAAI/5B,EAAU6xC,EAAO7xC,QACjBA,GAAWA,EAAQC,QACA,IAArBoE,UAAUrF,OAAegB,EAAQC,MAAM65B,GAAK95B,EAAQC,MAAM65B,EAAGC,0BCLjE,IAAIqa,EAAa,EAAQ,MAEzBhM,EAAOC,QAAU+L,EAAW,WAAY,yCCFxC,IAAI5E,EAAc,EAAQ,MACtBzD,EAAQ,EAAQ,MAChBjnB,EAAgB,EAAQ,KAG5BsjB,EAAOC,SAAWmH,IAAgBzD,GAAM,WAEtC,OAEQ,GAFDznC,OAAOC,eAAeugB,EAAc,OAAQ,IAAK,CACtDviB,IAAK,WAAc,OAAO,KACzBu3B,2BCTL,IAAIiS,EAAQ,EAAQ,MAChBmI,EAAU,EAAQ,MAElBt1C,EAAQ,GAAGA,MAGfwpC,EAAOC,QAAU0D,GAAM,WAGrB,OAAQznC,OAAO,KAAKg0C,qBAAqB,MACtC,SAAUhQ,GACb,MAAsB,UAAf4L,EAAQ5L,GAAkB1pC,EAAM6rC,KAAKnC,EAAI,IAAMhkC,OAAOgkC,IAC3DhkC,6BCZJ,IAAImkC,EAAW,EAAQ,KACnBwH,EAAiB,EAAQ,MAG7B7H,EAAOC,QAAU,SAAUyC,EAAOyN,EAAOC,GACvC,IAAIC,EAAWC,EAUf,OAPEzI,GAE0C,mBAAlCwI,EAAYF,EAAMpM,cAC1BsM,IAAcD,GACd/P,EAASiQ,EAAqBD,EAAUt0C,YACxCu0C,IAAuBF,EAAQr0C,WAC/B8rC,EAAenF,EAAO4N,GACjB5N,yBCfT,IAAI6N,EAAQ,EAAQ,MAEhBC,EAAmBxB,SAASrlB,SAGE,mBAAvB4mB,EAAME,gBACfF,EAAME,cAAgB,SAAUvQ,GAC9B,OAAOsQ,EAAiBnO,KAAKnC,KAIjCF,EAAOC,QAAUsQ,EAAME,oCCXvB,IAAIt6C,EAAI,EAAQ,MACZu6C,EAAa,EAAQ,MACrBrQ,EAAW,EAAQ,KACnB3rB,EAAM,EAAQ,MACdvY,EAAiB,UACjBw0C,EAA4B,EAAQ,MACpCC,EAAoC,EAAQ,MAC5CC,EAAM,EAAQ,MACdC,EAAW,EAAQ,MAEnBC,GAAW,EACXC,EAAWH,EAAI,QACfI,EAAK,EAGLxC,EAAevyC,OAAOuyC,cAAgB,WACxC,OAAO,GAGLyC,EAAc,SAAUhR,GAC1B/jC,EAAe+jC,EAAI8Q,EAAU,CAAEjvC,MAAO,CACpCovC,SAAU,IAAMF,IAChBG,SAAU,OA8DVC,EAAOrR,EAAOC,QAAU,CAC1BqR,OA3BW,WACXD,EAAKC,OAAS,aACdP,GAAW,EACX,IAAIQ,EAAsBZ,EAA0BhQ,EAChD6Q,EAAS,GAAGA,OACZhgC,EAAO,GACXA,EAAKw/B,GAAY,EAGbO,EAAoB//B,GAAM5a,SAC5B+5C,EAA0BhQ,EAAI,SAAUT,GAEtC,IADA,IAAI5oB,EAASi6B,EAAoBrR,GACxBvpC,EAAI,EAAGC,EAAS0gB,EAAO1gB,OAAQD,EAAIC,EAAQD,IAClD,GAAI2gB,EAAO3gB,KAAOq6C,EAAU,CAC1BQ,EAAOnP,KAAK/qB,EAAQ3gB,EAAG,GACvB,MAEF,OAAO2gB,GAGXnhB,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,QAAQ,GAAQ,CAChDkI,oBAAqBX,EAAkCjQ,MAO3D8Q,QA5DY,SAAUvR,EAAIK,GAE1B,IAAKF,EAASH,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAKxrB,EAAIwrB,EAAI8Q,GAAW,CAEtB,IAAKvC,EAAavO,GAAK,MAAO,IAE9B,IAAKK,EAAQ,MAAO,IAEpB2Q,EAAYhR,GAEZ,OAAOA,EAAG8Q,GAAUG,UAkDtBO,YA/CgB,SAAUxR,EAAIK,GAC9B,IAAK7rB,EAAIwrB,EAAI8Q,GAAW,CAEtB,IAAKvC,EAAavO,GAAK,OAAO,EAE9B,IAAKK,EAAQ,OAAO,EAEpB2Q,EAAYhR,GAEZ,OAAOA,EAAG8Q,GAAUI,UAuCtBO,SAnCa,SAAUzR,GAEvB,OADI4Q,GAAYC,GAAYtC,EAAavO,KAAQxrB,EAAIwrB,EAAI8Q,IAAWE,EAAYhR,GACzEA,IAoCTwQ,EAAWM,IAAY,wBC3FvB,IAWI50C,EAAKjC,EAAKua,EAXVk9B,EAAkB,EAAQ,MAC1BnI,EAAS,EAAQ,MACjBpJ,EAAW,EAAQ,KACnByH,EAA8B,EAAQ,MACtC+J,EAAY,EAAQ,MACpBC,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBrB,EAAa,EAAQ,MAErBsB,EAA6B,6BAC7B9iC,EAAUu6B,EAAOv6B,QAgBrB,GAAI0iC,GAAmBE,EAAOG,MAAO,CACnC,IAAI1B,EAAQuB,EAAOG,QAAUH,EAAOG,MAAQ,IAAI/iC,GAC5CgjC,EAAQ3B,EAAMp2C,IACdg4C,EAAQ5B,EAAM77B,IACd09B,EAAQ7B,EAAMn0C,IAClBA,EAAM,SAAU8jC,EAAI56B,GAClB,GAAI6sC,EAAM9P,KAAKkO,EAAOrQ,GAAK,MAAM,IAAIC,UAAU6R,GAG/C,OAFA1sC,EAAS+sC,OAASnS,EAClBkS,EAAM/P,KAAKkO,EAAOrQ,EAAI56B,GACfA,GAETnL,EAAM,SAAU+lC,GACd,OAAOgS,EAAM7P,KAAKkO,EAAOrQ,IAAO,IAElCxrB,EAAM,SAAUwrB,GACd,OAAOiS,EAAM9P,KAAKkO,EAAOrQ,QAEtB,CACL,IAAIoS,EAAQP,EAAU,SACtBrB,EAAW4B,IAAS,EACpBl2C,EAAM,SAAU8jC,EAAI56B,GAClB,GAAIusC,EAAU3R,EAAIoS,GAAQ,MAAM,IAAInS,UAAU6R,GAG9C,OAFA1sC,EAAS+sC,OAASnS,EAClB4H,EAA4B5H,EAAIoS,EAAOhtC,GAChCA,GAETnL,EAAM,SAAU+lC,GACd,OAAO2R,EAAU3R,EAAIoS,GAASpS,EAAGoS,GAAS,IAE5C59B,EAAM,SAAUwrB,GACd,OAAO2R,EAAU3R,EAAIoS,IAIzBtS,EAAOC,QAAU,CACf7jC,IAAKA,EACLjC,IAAKA,EACLua,IAAKA,EACL69B,QAnDY,SAAUrS,GACtB,OAAOxrB,EAAIwrB,GAAM/lC,EAAI+lC,GAAM9jC,EAAI8jC,EAAI,KAmDnCsS,UAhDc,SAAU1P,GACxB,OAAO,SAAU5C,GACf,IAAI+R,EACJ,IAAK5R,EAASH,KAAQ+R,EAAQ93C,EAAI+lC,IAAKpoC,OAASgrC,EAC9C,MAAM3C,UAAU,0BAA4B2C,EAAO,aACnD,OAAOmP,2BCtBb,IAAI3R,EAAkB,EAAQ,MAC1B0G,EAAY,EAAQ,MAEpB3B,EAAW/E,EAAgB,YAC3BI,EAAiBhqC,MAAMqF,UAG3BikC,EAAOC,QAAU,SAAUC,GACzB,YAAc18B,IAAP08B,IAAqB8G,EAAUtwC,QAAUwpC,GAAMQ,EAAe2E,KAAcnF,0BCRrF,IAAI4L,EAAU,EAAQ,MAKtB9L,EAAOC,QAAUvpC,MAAMquC,SAAW,SAAiB0N,GACjD,MAAuB,SAAhB3G,EAAQ2G,0BCNjB,IAAI9O,EAAQ,EAAQ,MAEhB6L,EAAc,kBAEdjD,EAAW,SAAUmG,EAASC,GAChC,IAAI5wC,EAAQvI,EAAKo5C,EAAUF,IAC3B,OAAO3wC,GAAS8wC,GACZ9wC,GAAS+wC,IACW,mBAAbH,EAA0BhP,EAAMgP,KACrCA,IAGJC,EAAYrG,EAASqG,UAAY,SAAUG,GAC7C,OAAO3S,OAAO2S,GAAQvwC,QAAQgtC,EAAa,KAAKwD,eAG9Cx5C,EAAO+yC,EAAS/yC,KAAO,GACvBs5C,EAASvG,EAASuG,OAAS,IAC3BD,EAAWtG,EAASsG,SAAW,IAEnC7S,EAAOC,QAAUsM,mBCpBjBvM,EAAOC,QAAU,SAAUC,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,qBCDvDF,EAAOC,SAAU,wBCAjB,IAAII,EAAW,EAAQ,KACnByL,EAAU,EAAQ,MAGlBtF,EAFkB,EAAQ,KAElBlG,CAAgB,SAI5BN,EAAOC,QAAU,SAAUC,GACzB,IAAI+S,EACJ,OAAO5S,EAASH,UAAmC18B,KAA1ByvC,EAAW/S,EAAGsG,MAA0ByM,EAA0B,UAAfnH,EAAQ5L,2BCVtF,IAAI8L,EAAa,EAAQ,MACrBkH,EAAoB,EAAQ,MAEhClT,EAAOC,QAAUiT,EAAoB,SAAUhT,GAC7C,MAAoB,iBAANA,GACZ,SAAUA,GACZ,IAAIiT,EAAUnH,EAAW,UACzB,MAAyB,mBAAXmH,GAAyBj3C,OAAOgkC,aAAeiT,wBCP/D,IAAIjO,EAAW,EAAQ,MACnB1D,EAAwB,EAAQ,MAChCC,EAAW,EAAQ,MACnB7nC,EAAO,EAAQ,MACf+nC,EAAoB,EAAQ,MAC5BwD,EAAgB,EAAQ,MAExBiO,EAAS,SAAUC,EAAS/7B,GAC9Bjf,KAAKg7C,QAAUA,EACfh7C,KAAKif,OAASA,GAGhB0oB,EAAOC,QAAU,SAAUqT,EAAUC,EAAiBp7C,GACpD,IAKI2pC,EAAU0R,EAAQ3wC,EAAOjM,EAAQ0gB,EAAQtI,EAAM6yB,EAL/CyB,EAAOnrC,GAAWA,EAAQmrC,KAC1BmQ,KAAgBt7C,IAAWA,EAAQs7C,YACnCC,KAAiBv7C,IAAWA,EAAQu7C,aACpCC,KAAiBx7C,IAAWA,EAAQw7C,aACpC17C,EAAK2B,EAAK25C,EAAiBjQ,EAAM,EAAImQ,EAAaE,GAGlDj3C,EAAO,SAAUk3C,GAEnB,OADI9R,GAAUqD,EAAcrD,GACrB,IAAIsR,GAAO,EAAMQ,IAGtBC,EAAS,SAAU9xC,GACrB,OAAI0xC,GACFvO,EAASnjC,GACF4xC,EAAc17C,EAAG8J,EAAM,GAAIA,EAAM,GAAIrF,GAAQzE,EAAG8J,EAAM,GAAIA,EAAM,KAChE4xC,EAAc17C,EAAG8J,EAAOrF,GAAQzE,EAAG8J,IAG9C,GAAI2xC,EACF5R,EAAWwR,MACN,CAEL,GAAqB,mBADrBE,EAAS7R,EAAkB2R,IACM,MAAMnT,UAAU,0BAEjD,GAAIqB,EAAsBgS,GAAS,CACjC,IAAK3wC,EAAQ,EAAGjM,EAAS6qC,EAAS6R,EAAS18C,QAASA,EAASiM,EAAOA,IAElE,IADAyU,EAASu8B,EAAOP,EAASzwC,MACXyU,aAAkB87B,EAAQ,OAAO97B,EAC/C,OAAO,IAAI87B,GAAO,GAEtBtR,EAAW0R,EAAOnR,KAAKiR,GAIzB,IADAtkC,EAAO8yB,EAAS9yB,OACP6yB,EAAO7yB,EAAKqzB,KAAKP,IAAWxL,MAAM,CACzC,IACEhf,EAASu8B,EAAOhS,EAAK9/B,OACrB,MAAOlK,GAEP,MADAstC,EAAcrD,GACRjqC,EAER,GAAqB,iBAAVyf,GAAsBA,GAAUA,aAAkB87B,EAAQ,OAAO97B,EAC5E,OAAO,IAAI87B,GAAO,0BCxDtB,IAAIlO,EAAW,EAAQ,MAEvBlF,EAAOC,QAAU,SAAU6B,GACzB,IAAIgS,EAAehS,EAAiB,OACpC,QAAqBt+B,IAAjBswC,EACF,OAAO5O,EAAS4O,EAAazR,KAAKP,IAAW//B,0CCJjD,IAcI8kC,EAAmBkN,EAAmCC,EAdtDrQ,EAAQ,EAAQ,MAChBiD,EAAiB,EAAQ,MACzBkB,EAA8B,EAAQ,MACtCpzB,EAAM,EAAQ,MACd4rB,EAAkB,EAAQ,MAC1B0H,EAAU,EAAQ,MAElB3C,EAAW/E,EAAgB,YAC3B4H,GAAyB,EASzB,GAAGzb,OAGC,SAFNunB,EAAgB,GAAGvnB,SAIjBsnB,EAAoCnN,EAAeA,EAAeoN,OACxB93C,OAAOH,YAAW8qC,EAAoBkN,GAHlD7L,GAAyB,GAO3D,IAAI+L,EAA8CzwC,MAArBqjC,GAAkClD,GAAM,WACnE,IAAInyB,EAAO,GAEX,OAAOq1B,EAAkBxB,GAAUhD,KAAK7wB,KAAUA,KAGhDyiC,IAAwBpN,EAAoB,IAI1CmB,IAAWiM,GAA4Bv/B,EAAImyB,EAAmBxB,IAClEyC,EAA4BjB,EAAmBxB,GA5BhC,WAAc,OAAOhtC,QA+BtC2nC,EAAOC,QAAU,CACf4G,kBAAmBA,EACnBqB,uBAAwBA,qBC5C1BlI,EAAOC,QAAU,qBCGjBD,EAAOC,QAAUplC,KAAK6W,MAAQ,SAAcza,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,yBCLpD,IAgBIi9C,EAAOC,EAAMtkB,EAAMukB,EAAQC,EAAQC,EAAMne,EAASoe,EAhBlD9K,EAAS,EAAQ,MACjBlD,EAA2B,UAC3BiO,EAAY,WACZC,EAAS,EAAQ,MACjBC,EAAgB,EAAQ,MACxBC,EAAkB,EAAQ,MAC1BC,EAAU,EAAQ,MAElBC,EAAmBpL,EAAOoL,kBAAoBpL,EAAOqL,uBACrDz5C,EAAWouC,EAAOpuC,SAClB0wC,EAAUtC,EAAOsC,QACjBn7B,EAAU64B,EAAO74B,QAEjBmkC,EAA2BxO,EAAyBkD,EAAQ,kBAC5DuL,EAAiBD,GAA4BA,EAAyBhzC,MAKrEizC,IACHd,EAAQ,WACN,IAAIxtB,EAAQzuB,EAEZ,IADI28C,IAAYluB,EAASqlB,EAAQkJ,SAASvuB,EAAOwuB,OAC1Cf,GAAM,CACXl8C,EAAKk8C,EAAKl8C,GACVk8C,EAAOA,EAAKnlC,KACZ,IACE/W,IACA,MAAOJ,GAGP,MAFIs8C,EAAMC,IACLvkB,OAAOrsB,EACN3L,GAERg4B,OAAOrsB,EACLkjB,GAAQA,EAAOyuB,SAKhBV,GAAWG,GAAYD,IAAmBE,IAAoBx5C,GAQvDq5C,GAAiB9jC,GAAWA,EAAQgB,UAE9CukB,EAAUvlB,EAAQgB,aAAQpO,IAElBugC,YAAcnzB,EACtB2jC,EAAOpe,EAAQoe,KACfH,EAAS,WACPG,EAAKlS,KAAKlM,EAAS+d,KAIrBE,EADSQ,EACA,WACP7I,EAAQqJ,SAASlB,IASV,WAEPM,EAAUnS,KAAKoH,EAAQyK,KA9BzBG,GAAS,EACTC,EAAOj5C,EAASg6C,eAAe,IAC/B,IAAIR,EAAiBX,GAAOoB,QAAQhB,EAAM,CAAEiB,eAAe,IAC3DnB,EAAS,WACPE,EAAK96C,KAAO66C,GAAUA,KA+B5BrU,EAAOC,QAAU+U,GAAkB,SAAU/8C,GAC3C,IAAIu9C,EAAO,CAAEv9C,GAAIA,EAAI+W,UAAMxL,GACvBqsB,IAAMA,EAAK7gB,KAAOwmC,GACjBrB,IACHA,EAAOqB,EACPpB,KACAvkB,EAAO2lB,yBCjFX,IAAI/L,EAAS,EAAQ,MAErBzJ,EAAOC,QAAUwJ,EAAO74B,6BCDxB,IAAIgzB,EAAa,EAAQ,MACrBD,EAAQ,EAAQ,MAGpB3D,EAAOC,UAAY/jC,OAAOu5C,wBAA0B9R,GAAM,WACxD,IAAI+R,EAASlM,SAGb,OAAQpJ,OAAOsV,MAAax5C,OAAOw5C,aAAmBlM,UAEnDA,OAAOwD,MAAQpJ,GAAcA,EAAa,2BCX/C,IAAID,EAAQ,EAAQ,MAChBrD,EAAkB,EAAQ,MAC1B0H,EAAU,EAAQ,MAElB3C,EAAW/E,EAAgB,YAE/BN,EAAOC,SAAW0D,GAAM,WACtB,IAAI16B,EAAM,IAAI0sC,IAAI,gBAAiB,YAC/BC,EAAe3sC,EAAI2sC,aACnBt+B,EAAS,GAMb,OALArO,EAAIK,SAAW,QACfssC,EAAal1C,SAAQ,SAAUqB,EAAO8+B,GACpC+U,EAAqB,OAAE,KACvBt+B,GAAUupB,EAAM9+B,KAEVimC,IAAY/+B,EAAI4sC,SAClBD,EAAapqC,MACD,2BAAbvC,EAAIjC,MACsB,MAA1B4uC,EAAaz7C,IAAI,MACuB,QAAxCimC,OAAO,IAAIpT,gBAAgB,WAC1B4oB,EAAavQ,IAEsB,MAApC,IAAIsQ,IAAI,eAAeG,UACsC,MAA7D,IAAI9oB,gBAAgB,IAAIA,gBAAgB,QAAQ7yB,IAAI,MAEpB,eAAhC,IAAIw7C,IAAI,eAAeI,MAEQ,YAA/B,IAAIJ,IAAI,cAActoB,MAEX,SAAX/V,GAEwC,MAAxC,IAAIq+B,IAAI,gBAAYnyC,GAAWuyC,8BC/BtC,IAAItM,EAAS,EAAQ,MACjBgH,EAAgB,EAAQ,MAExBvhC,EAAUu6B,EAAOv6B,QAErB8wB,EAAOC,QAA6B,mBAAZ/wB,GAA0B,cAAcsC,KAAKi/B,EAAcvhC,uCCJnF,IAAIi1B,EAAY,EAAQ,MAEpB6R,EAAoB,SAAUhU,GAChC,IAAIpwB,EAASqkC,EACb59C,KAAK89B,QAAU,IAAI6L,GAAE,SAAUkU,EAAWC,GACxC,QAAgB3yC,IAAZoO,QAAoCpO,IAAXyyC,EAAsB,MAAM9V,UAAU,2BACnEvuB,EAAUskC,EACVD,EAASE,KAEX99C,KAAKuZ,QAAUuyB,EAAUvyB,GACzBvZ,KAAK49C,OAAS9R,EAAU8R,IAK1BjW,EAAOC,QAAQU,EAAI,SAAUqB,GAC3B,OAAO,IAAIgU,EAAkBhU,0BCjB/B,IAAIiR,EAAW,EAAQ,MAEvBjT,EAAOC,QAAU,SAAUC,GACzB,GAAI+S,EAAS/S,GACX,MAAMC,UAAU,iDAChB,OAAOD,sCCJX,IAAIkH,EAAc,EAAQ,MACtBzD,EAAQ,EAAQ,MAChByS,EAAa,EAAQ,MACrBC,EAA8B,EAAQ,MACtCC,EAA6B,EAAQ,MACrChV,EAAW,EAAQ,MACnBsB,EAAgB,EAAQ,MAGxB2T,EAAUr6C,OAAOs6C,OAEjBr6C,EAAiBD,OAAOC,eAI5B6jC,EAAOC,SAAWsW,GAAW5S,GAAM,WAEjC,GAAIyD,GAQiB,IARFmP,EAAQ,CAAE5kB,EAAG,GAAK4kB,EAAQp6C,EAAe,GAAI,IAAK,CACnEmrC,YAAY,EACZntC,IAAK,WACHgC,EAAe9D,KAAM,IAAK,CACxB0J,MAAO,EACPulC,YAAY,OAGd,CAAE3V,EAAG,KAAMA,EAAS,OAAO,EAE/B,IAAI8kB,EAAI,GACJC,EAAI,GAEJhB,EAASlM,SACTmN,EAAW,uBAGf,OAFAF,EAAEf,GAAU,EACZiB,EAASngD,MAAM,IAAIkK,SAAQ,SAAUk2C,GAAOF,EAAEE,GAAOA,KACpB,GAA1BL,EAAQ,GAAIE,GAAGf,IAAgBU,EAAWG,EAAQ,GAAIG,IAAI5/C,KAAK,KAAO6/C,KAC1E,SAAgBl9C,EAAQ6sC,GAM3B,IALA,IAAIxuB,EAAIwpB,EAAS7nC,GACbwoC,EAAkBhmC,UAAUrF,OAC5BiM,EAAQ,EACR4yC,EAAwBY,EAA4B1V,EACpDuP,EAAuBoG,EAA2B3V,EAC/CsB,EAAkBp/B,GAMvB,IALA,IAIIg+B,EAJAE,EAAI6B,EAAc3mC,UAAU4G,MAC5B4pB,EAAOgpB,EAAwBW,EAAWrV,GAAG3gB,OAAOq1B,EAAsB1U,IAAMqV,EAAWrV,GAC3FnqC,EAAS61B,EAAK71B,OACd8tC,EAAI,EAED9tC,EAAS8tC,GACd7D,EAAMpU,EAAKiY,KACN0C,IAAe8I,EAAqB7N,KAAKtB,EAAGF,KAAM/oB,EAAE+oB,GAAOE,EAAEF,IAEpE,OAAO/oB,GACPy+B,sBCpDJ,IAmDIM,EAnDA3R,EAAW,EAAQ,MACnB4R,EAAmB,EAAQ,MAC3BC,EAAc,EAAQ,KACtBrG,EAAa,EAAQ,MACrBptC,EAAO,EAAQ,KACf0zC,EAAwB,EAAQ,KAOhCC,EANY,EAAQ,KAMTlF,CAAU,YAErBmF,EAAmB,aAEnBC,EAAY,SAAUC,GACxB,MAAOC,WAAmBD,EAAnBC,cAILC,EAA4B,SAAUT,GACxCA,EAAgBU,MAAMJ,EAAU,KAChCN,EAAgBW,QAChB,IAAIC,EAAOZ,EAAgBa,aAAax7C,OAExC,OADA26C,EAAkB,KACXY,GA0BLE,EAAkB,WACpB,IACEd,EAAkB,IAAIe,cAAc,YACpC,MAAO//C,IAzBoB,IAIzBggD,EAFA7Z,EAwBJ2Z,EAAqC,oBAAZt8C,SACrBA,SAAS45C,QAAU4B,EACjBS,EAA0BT,KA1B5B7Y,EAASgZ,EAAsB,WAG5BvnC,MAAMqoC,QAAU,OACvBx0C,EAAKy5B,YAAYiB,GAEjBA,EAAOvV,IAAM2X,OALJ,gBAMTyX,EAAiB7Z,EAAOE,cAAc7iC,UACvB4P,OACf4sC,EAAeN,MAAMJ,EAAU,sBAC/BU,EAAeL,QACRK,EAAe3/B,GAiBlBo/B,EAA0BT,GAE9B,IADA,IAAIjgD,EAASmgD,EAAYngD,OAClBA,YAAiB+gD,EAAyB,UAAEZ,EAAYngD,IAC/D,OAAO+gD,KAGTjH,EAAWuG,IAAY,EAIvBjX,EAAOC,QAAU/jC,OAAOqkC,QAAU,SAAgBwB,EAAGgW,GACnD,IAAIzgC,EAQJ,OAPU,OAANyqB,GACFmV,EAA0B,UAAIhS,EAASnD,GACvCzqB,EAAS,IAAI4/B,EACbA,EAA0B,UAAI,KAE9B5/B,EAAO2/B,GAAYlV,GACdzqB,EAASqgC,SACMn0C,IAAfu0C,EAA2BzgC,EAASw/B,EAAiBx/B,EAAQygC,0BChFtE,IAAI3Q,EAAc,EAAQ,MACtB5G,EAAuB,EAAQ,MAC/B0E,EAAW,EAAQ,MACnBkR,EAAa,EAAQ,MAKzBpW,EAAOC,QAAUmH,EAAclrC,OAAO46C,iBAAmB,SAA0B/U,EAAGgW,GACpF7S,EAASnD,GAKT,IAJA,IAGIlB,EAHApU,EAAO2pB,EAAW2B,GAClBnhD,EAAS61B,EAAK71B,OACdiM,EAAQ,EAELjM,EAASiM,GAAO29B,EAAqBG,EAAEoB,EAAGlB,EAAMpU,EAAK5pB,KAAUk1C,EAAWlX,IACjF,OAAOkB,yBCfT,IAAIqF,EAAc,EAAQ,MACtB4Q,EAAiB,EAAQ,MACzB9S,EAAW,EAAQ,MACnBsC,EAAgB,EAAQ,MAGxByQ,EAAkB/7C,OAAOC,eAI7B8jC,EAAQU,EAAIyG,EAAc6Q,EAAkB,SAAwBlW,EAAGmW,EAAGC,GAIxE,GAHAjT,EAASnD,GACTmW,EAAI1Q,EAAc0Q,GAClBhT,EAASiT,GACLH,EAAgB,IAClB,OAAOC,EAAgBlW,EAAGmW,EAAGC,GAC7B,MAAOtgD,IACT,GAAI,QAASsgD,GAAc,QAASA,EAAY,MAAMhY,UAAU,2BAEhE,MADI,UAAWgY,IAAYpW,EAAEmW,GAAKC,EAAWp2C,OACtCggC,yBCnBT,IAAIqF,EAAc,EAAQ,MACtBkP,EAA6B,EAAQ,MACrCxP,EAA2B,EAAQ,MACnCxE,EAAkB,EAAQ,MAC1BkF,EAAgB,EAAQ,MACxB9yB,EAAM,EAAQ,MACdsjC,EAAiB,EAAQ,MAGzBI,EAA4Bl8C,OAAOqqC,yBAIvCtG,EAAQU,EAAIyG,EAAcgR,EAA4B,SAAkCrW,EAAGmW,GAGzF,GAFAnW,EAAIO,EAAgBP,GACpBmW,EAAI1Q,EAAc0Q,GACdF,EAAgB,IAClB,OAAOI,EAA0BrW,EAAGmW,GACpC,MAAOrgD,IACT,GAAI6c,EAAIqtB,EAAGmW,GAAI,OAAOpR,GAA0BwP,EAA2B3V,EAAE0B,KAAKN,EAAGmW,GAAInW,EAAEmW,2BClB7F,IAAI5V,EAAkB,EAAQ,MAC1B+V,EAAuB,UAEvB1uB,EAAW,GAAGA,SAEd2uB,EAA+B,iBAAVn/C,QAAsBA,QAAU+C,OAAOq1C,oBAC5Dr1C,OAAOq1C,oBAAoBp4C,QAAU,GAWzC6mC,EAAOC,QAAQU,EAAI,SAA6BT,GAC9C,OAAOoY,GAAoC,mBAArB3uB,EAAS0Y,KAAKnC,GAVjB,SAAUA,GAC7B,IACE,OAAOmY,EAAqBnY,GAC5B,MAAOroC,GACP,OAAOygD,EAAYvwC,SAOjBwwC,CAAerY,GACfmY,EAAqB/V,EAAgBpC,2BCrB3C,IAAIsY,EAAqB,EAAQ,MAG7B9H,EAFc,EAAQ,KAEGtwB,OAAO,SAAU,aAK9C6f,EAAQU,EAAIzkC,OAAOq1C,qBAAuB,SAA6BxP,GACrE,OAAOyW,EAAmBzW,EAAG2O,wBCR/BzQ,EAAQU,EAAIzkC,OAAOu5C,4CCDnB,IAAI/gC,EAAM,EAAQ,MACd4sB,EAAW,EAAQ,MACnByQ,EAAY,EAAQ,MACpB0G,EAA2B,EAAQ,MAEnCxB,EAAWlF,EAAU,YACrB2G,EAAkBx8C,OAAOH,UAK7BikC,EAAOC,QAAUwY,EAA2Bv8C,OAAO0qC,eAAiB,SAAU7E,GAE5E,OADAA,EAAIT,EAASS,GACTrtB,EAAIqtB,EAAGkV,GAAkBlV,EAAEkV,GACH,mBAAjBlV,EAAEgC,aAA6BhC,aAAaA,EAAEgC,YAChDhC,EAAEgC,YAAYhoC,UACdgmC,aAAa7lC,OAASw8C,EAAkB,4BChBnD,IAAIhkC,EAAM,EAAQ,MACd4tB,EAAkB,EAAQ,MAC1BrjC,EAAU,gBACVyxC,EAAa,EAAQ,MAEzB1Q,EAAOC,QAAU,SAAU2F,EAAQ+S,GACjC,IAGI9X,EAHAkB,EAAIO,EAAgBsD,GACpBjvC,EAAI,EACJ2gB,EAAS,GAEb,IAAKupB,KAAOkB,GAAIrtB,EAAIg8B,EAAY7P,IAAQnsB,EAAIqtB,EAAGlB,IAAQvpB,EAAOzgB,KAAKgqC,GAEnE,KAAO8X,EAAM/hD,OAASD,GAAO+d,EAAIqtB,EAAGlB,EAAM8X,EAAMhiD,SAC7CsI,EAAQqY,EAAQupB,IAAQvpB,EAAOzgB,KAAKgqC,IAEvC,OAAOvpB,yBCfT,IAAIkhC,EAAqB,EAAQ,MAC7BzB,EAAc,EAAQ,KAK1B/W,EAAOC,QAAU/jC,OAAOuwB,MAAQ,SAAcsV,GAC5C,OAAOyW,EAAmBzW,EAAGgV,qCCN/B,IAAI6B,EAAwB,GAAG1I,qBAE3B3J,EAA2BrqC,OAAOqqC,yBAGlCsS,EAActS,IAA6BqS,EAAsBvW,KAAK,CAAE,EAAG,GAAK,GAIpFpC,EAAQU,EAAIkY,EAAc,SAA8BC,GACtD,IAAIpM,EAAanG,EAAyBluC,KAAMygD,GAChD,QAASpM,GAAcA,EAAWpF,YAChCsR,wBCZJ,IAAI1T,EAAW,EAAQ,MACnB6T,EAAqB,EAAQ,MAMjC/Y,EAAOC,QAAU/jC,OAAO2rC,iBAAmB,aAAe,GAAK,WAC7D,IAEImR,EAFAC,GAAiB,EACjBznC,EAAO,GAEX,KAEEwnC,EAAS98C,OAAOqqC,yBAAyBrqC,OAAOH,UAAW,aAAaK,KACjEimC,KAAK7wB,EAAM,IAClBynC,EAAiBznC,aAAgB9a,MACjC,MAAOmB,IACT,OAAO,SAAwBkqC,EAAGqH,GAKhC,OAJAlE,EAASnD,GACTgX,EAAmB3P,GACf6P,EAAgBD,EAAO3W,KAAKN,EAAGqH,GAC9BrH,EAAEmX,UAAY9P,EACZrH,GAfoD,QAiBzDv+B,yBCzBN,IAAI4jC,EAAc,EAAQ,MACtBgP,EAAa,EAAQ,MACrB9T,EAAkB,EAAQ,MAC1B4N,EAAuB,UAGvB1N,EAAe,SAAU2W,GAC3B,OAAO,SAAUjZ,GAOf,IANA,IAKIW,EALAkB,EAAIO,EAAgBpC,GACpBzT,EAAO2pB,EAAWrU,GAClBnrC,EAAS61B,EAAK71B,OACdD,EAAI,EACJ2gB,EAAS,GAEN1gB,EAASD,GACdkqC,EAAMpU,EAAK91B,KACNywC,IAAe8I,EAAqB7N,KAAKN,EAAGlB,IAC/CvpB,EAAOzgB,KAAKsiD,EAAa,CAACtY,EAAKkB,EAAElB,IAAQkB,EAAElB,IAG/C,OAAOvpB,IAIX0oB,EAAOC,QAAU,CAGfkJ,QAAS3G,GAAa,GAGtBlX,OAAQkX,GAAa,sCC7BvB,IAAIqD,EAAwB,EAAQ,MAChCiG,EAAU,EAAQ,KAItB9L,EAAOC,QAAU4F,EAAwB,GAAGlc,SAAW,WACrD,MAAO,WAAamiB,EAAQzzC,MAAQ,2BCPtC,IAAIgoC,EAAW,EAAQ,KAIvBL,EAAOC,QAAU,SAAUmZ,EAAOC,GAChC,IAAIphD,EAAIiC,EACR,GAAa,WAATm/C,GAAqD,mBAAxBphD,EAAKmhD,EAAMzvB,YAA4B0W,EAASnmC,EAAMjC,EAAGoqC,KAAK+W,IAAS,OAAOl/C,EAC/G,GAAmC,mBAAvBjC,EAAKmhD,EAAME,WAA2BjZ,EAASnmC,EAAMjC,EAAGoqC,KAAK+W,IAAS,OAAOl/C,EACzF,GAAa,WAATm/C,GAAqD,mBAAxBphD,EAAKmhD,EAAMzvB,YAA4B0W,EAASnmC,EAAMjC,EAAGoqC,KAAK+W,IAAS,OAAOl/C,EAC/G,MAAMimC,UAAU,kECTlB,IAAI6L,EAAa,EAAQ,MACrB2E,EAA4B,EAAQ,MACpC0F,EAA8B,EAAQ,MACtCnR,EAAW,EAAQ,MAGvBlF,EAAOC,QAAU+L,EAAW,UAAW,YAAc,SAAiB9L,GACpE,IAAIzT,EAAOkkB,EAA0BhQ,EAAEuE,EAAShF,IAC5CuV,EAAwBY,EAA4B1V,EACxD,OAAO8U,EAAwBhpB,EAAKrM,OAAOq1B,EAAsBvV,IAAOzT,wBCT1E,IAAIgd,EAAS,EAAQ,MAErBzJ,EAAOC,QAAUwJ,oBCFjBzJ,EAAOC,QAAU,SAAUjzB,GACzB,IACE,MAAO,CAAEnV,OAAO,EAAOkK,MAAOiL,KAC9B,MAAOnV,GACP,MAAO,CAAEA,OAAO,EAAMkK,MAAOlK,2BCJjC,IAAIqtC,EAAW,EAAQ,MACnB7E,EAAW,EAAQ,KACnBkZ,EAAuB,EAAQ,MAEnCvZ,EAAOC,QAAU,SAAU+B,EAAG/qC,GAE5B,GADAiuC,EAASlD,GACL3B,EAASppC,IAAMA,EAAE8sC,cAAgB/B,EAAG,OAAO/qC,EAC/C,IAAIuiD,EAAoBD,EAAqB5Y,EAAEqB,GAG/C,OADApwB,EADc4nC,EAAkB5nC,SACxB3a,GACDuiD,EAAkBrjB,+BCV3B,IAAI4R,EAAW,EAAQ,MAEvB/H,EAAOC,QAAU,SAAUxmC,EAAQgvB,EAAKtwB,GACtC,IAAK,IAAI0oC,KAAOpY,EAAKsf,EAAStuC,EAAQonC,EAAKpY,EAAIoY,GAAM1oC,GACrD,OAAOsB,yBCJT,IAAIgwC,EAAS,EAAQ,MACjB3B,EAA8B,EAAQ,MACtCpzB,EAAM,EAAQ,MACd23B,EAAY,EAAQ,MACpBoE,EAAgB,EAAQ,MACxBgJ,EAAsB,EAAQ,MAE9BC,EAAmBD,EAAoBt/C,IACvCw/C,EAAuBF,EAAoBlH,QAC3CqH,EAAWxZ,OAAOA,QAAQ5pC,MAAM,WAEnCwpC,EAAOC,QAAU,SAAU8B,EAAGlB,EAAK9+B,EAAO5J,GACzC,IAGI85C,EAHA4H,IAAS1hD,KAAYA,EAAQ0hD,OAC7BC,IAAS3hD,KAAYA,EAAQmvC,WAC7ByF,IAAc50C,KAAYA,EAAQ40C,YAElB,mBAAThrC,IACS,iBAAP8+B,GAAoBnsB,EAAI3S,EAAO,SACxC+lC,EAA4B/lC,EAAO,OAAQ8+B,IAE7CoR,EAAQ0H,EAAqB53C,IAClBukC,SACT2L,EAAM3L,OAASsT,EAAS9iD,KAAmB,iBAAP+pC,EAAkBA,EAAM,MAG5DkB,IAAM0H,GAIEoQ,GAEA9M,GAAehL,EAAElB,KAC3BiZ,GAAS,UAFF/X,EAAElB,GAIPiZ,EAAQ/X,EAAElB,GAAO9+B,EAChB+lC,EAA4B/F,EAAGlB,EAAK9+B,IATnC+3C,EAAQ/X,EAAElB,GAAO9+B,EAChBsqC,EAAUxL,EAAK9+B,KAUrBitC,SAASjzC,UAAW,YAAY,WACjC,MAAsB,mBAAR1D,MAAsBqhD,EAAiBrhD,MAAMiuC,QAAUmK,EAAcp4C,+BCtCrF,IAAIyzC,EAAU,EAAQ,MAClBmB,EAAa,EAAQ,MAIzBjN,EAAOC,QAAU,SAAU8Z,EAAGhZ,GAC5B,IAAI/zB,EAAO+sC,EAAE/sC,KACb,GAAoB,mBAATA,EAAqB,CAC9B,IAAIsK,EAAStK,EAAKq1B,KAAK0X,EAAGhZ,GAC1B,GAAsB,iBAAXzpB,EACT,MAAM6oB,UAAU,sEAElB,OAAO7oB,EAGT,GAAmB,WAAfw0B,EAAQiO,GACV,MAAM5Z,UAAU,+CAGlB,OAAO8M,EAAW5K,KAAK0X,EAAGhZ,uCChB5B,IAeMiZ,EACAC,EAhBFtwB,EAAW,EAAQ,MACnBuwB,EAAc,EAAQ,MACtBC,EAAgB,EAAQ,MACxBrI,EAAS,EAAQ,MACjBvR,EAAS,EAAQ,IACjBmZ,EAAmB,YACnBU,EAAsB,EAAQ,MAC9BC,EAAkB,EAAQ,MAE1BC,EAAanN,OAAOpxC,UAAUiR,KAC9ButC,EAAgBzI,EAAO,wBAAyB1R,OAAOrkC,UAAUyG,SAEjEg4C,EAAcF,EAEdG,GACET,EAAM,IACNC,EAAM,MACVK,EAAWjY,KAAK2X,EAAK,KACrBM,EAAWjY,KAAK4X,EAAK,KACI,IAAlBD,EAAI3oB,WAAqC,IAAlB4oB,EAAI5oB,WAGhCqpB,EAAgBP,EAAcO,eAAiBP,EAAcQ,aAG7DC,OAAuCp3C,IAAvB,OAAOwJ,KAAK,IAAI,IAExBytC,GAA4BG,GAAiBF,GAAiBN,GAAuBC,KAI/FG,EAAc,SAAczH,GAC1B,IAIIz7B,EAAQujC,EAAQxpB,EAAWI,EAAO96B,EAAGivC,EAAQkV,EAJ7CrN,EAAKp1C,KACL45C,EAAQyH,EAAiBjM,GACzB91C,EAAMgyB,EAASopB,GACfgI,EAAM9I,EAAM8I,IAGhB,GAAIA,EAIF,OAHAA,EAAI1pB,UAAYoc,EAAGpc,UACnB/Z,EAASkjC,EAAYnY,KAAK0Y,EAAKpjD,GAC/B81C,EAAGpc,UAAY0pB,EAAI1pB,UACZ/Z,EAGT,IAAI0jC,EAAS/I,EAAM+I,OACfC,EAASP,GAAiBjN,EAAGwN,OAC7BvN,EAAQwM,EAAY7X,KAAKoL,GACzBnH,EAASmH,EAAGnH,OACZ4U,EAAa,EACbC,EAAUxjD,EA+Cd,GA7CIsjD,KAE0B,KAD5BvN,EAAQA,EAAMlrC,QAAQ,IAAK,KACjBvD,QAAQ,OAChByuC,GAAS,KAGXyN,EAAUxjD,EAAIoQ,MAAM0lC,EAAGpc,WAEnBoc,EAAGpc,UAAY,KAAOoc,EAAG2N,WAAa3N,EAAG2N,WAA8C,OAAjCzjD,EAAImpC,OAAO2M,EAAGpc,UAAY,MAClFiV,EAAS,OAASA,EAAS,IAC3B6U,EAAU,IAAMA,EAChBD,KAIFL,EAAS,IAAI1N,OAAO,OAAS7G,EAAS,IAAKoH,IAGzCkN,IACFC,EAAS,IAAI1N,OAAO,IAAM7G,EAAS,WAAYoH,IAE7C+M,IAA0BppB,EAAYoc,EAAGpc,WAE7CI,EAAQ6oB,EAAWjY,KAAK4Y,EAASJ,EAASpN,EAAI0N,GAE1CF,EACExpB,GACFA,EAAM2nB,MAAQ3nB,EAAM2nB,MAAMrxC,MAAMmzC,GAChCzpB,EAAM,GAAKA,EAAM,GAAG1pB,MAAMmzC,GAC1BzpB,EAAM5uB,MAAQ4qC,EAAGpc,UACjBoc,EAAGpc,WAAaI,EAAM,GAAG76B,QACpB62C,EAAGpc,UAAY,EACbopB,GAA4BhpB,IACrCgc,EAAGpc,UAAYoc,EAAGhE,OAAShY,EAAM5uB,MAAQ4uB,EAAM,GAAG76B,OAASy6B,GAEzDupB,GAAiBnpB,GAASA,EAAM76B,OAAS,GAG3C2jD,EAAclY,KAAK5Q,EAAM,GAAIopB,GAAQ,WACnC,IAAKlkD,EAAI,EAAGA,EAAIsF,UAAUrF,OAAS,EAAGD,SACf6M,IAAjBvH,UAAUtF,KAAkB86B,EAAM96B,QAAK6M,MAK7CiuB,GAASupB,EAEX,IADAvpB,EAAMupB,OAASpV,EAASrF,EAAO,MAC1B5pC,EAAI,EAAGA,EAAIqkD,EAAOpkD,OAAQD,IAE7BivC,GADAkV,EAAQE,EAAOrkD,IACF,IAAM86B,EAAMqpB,EAAM,IAInC,OAAOrpB,IAIXuO,EAAOC,QAAUua,qCC/GjB,IAAItV,EAAW,EAAQ,MAIvBlF,EAAOC,QAAU,WACf,IAAIqD,EAAO4B,EAAS7sC,MAChBif,EAAS,GAOb,OANIgsB,EAAKmG,SAAQnyB,GAAU,KACvBgsB,EAAK+X,aAAY/jC,GAAU,KAC3BgsB,EAAK8X,YAAW9jC,GAAU,KAC1BgsB,EAAKgY,SAAQhkC,GAAU,KACvBgsB,EAAKtC,UAAS1pB,GAAU,KACxBgsB,EAAK2X,SAAQ3jC,GAAU,KACpBA,yBCdT,IAAIqsB,EAAQ,EAAQ,MAIhB4X,EAHS,EAAQ,MAGApO,OAErBlN,EAAQya,cAAgB/W,GAAM,WAC5B,IAAI8J,EAAK8N,EAAQ,IAAK,KAEtB,OADA9N,EAAGpc,UAAY,EACW,MAAnBoc,EAAGzgC,KAAK,WAGjBizB,EAAQ0a,aAAehX,GAAM,WAE3B,IAAI8J,EAAK8N,EAAQ,KAAM,MAEvB,OADA9N,EAAGpc,UAAY,EACU,MAAlBoc,EAAGzgC,KAAK,gCChBjB,IAAI22B,EAAQ,EAAQ,MAIhB4X,EAHS,EAAQ,MAGApO,OAErBnN,EAAOC,QAAU0D,GAAM,WACrB,IAAI8J,EAAK8N,EAAQ,IAAK,KACtB,QAAS9N,EAAG6N,QAAU7N,EAAGzgC,KAAK,OAAsB,MAAbygC,EAAGC,gCCR5C,IAAI/J,EAAQ,EAAQ,MAIhB4X,EAHS,EAAQ,MAGApO,OAErBnN,EAAOC,QAAU0D,GAAM,WACrB,IAAI8J,EAAK8N,EAAQ,UAAW,KAC5B,MAAiC,MAA1B9N,EAAGzgC,KAAK,KAAKguC,OAAOtpB,GACI,OAA7B,IAAIlvB,QAAQirC,EAAI,8BCPpBzN,EAAOC,QAAU,SAAUC,GACzB,GAAU18B,MAAN08B,EAAiB,MAAMC,UAAU,wBAA0BD,GAC/D,OAAOA,qBCDTF,EAAOC,QAAU/jC,OAAOs/C,IAAM,SAAYvkD,EAAGC,GAE3C,OAAOD,IAAMC,EAAU,IAAND,GAAW,EAAIA,GAAM,EAAIC,EAAID,GAAKA,GAAKC,GAAKA,yBCL/D,IAAIuyC,EAAS,EAAQ,MAErBzJ,EAAOC,QAAU,SAAUY,EAAK9+B,GAC9B,IAEE7F,OAAOC,eAAestC,EAAQ5I,EAAK,CAAE9+B,MAAOA,EAAO6+B,cAAc,EAAM2G,UAAU,IACjF,MAAO1vC,GACP4xC,EAAO5I,GAAO9+B,EACd,OAAOA,sCCPX,IAAIiqC,EAAa,EAAQ,MACrBxL,EAAuB,EAAQ,MAC/BF,EAAkB,EAAQ,MAC1B8G,EAAc,EAAQ,MAEtBvD,EAAUvD,EAAgB,WAE9BN,EAAOC,QAAU,SAAUwb,GACzB,IAAIxa,EAAc+K,EAAWyP,GACzBt/C,EAAiBqkC,EAAqBG,EAEtCyG,GAAenG,IAAgBA,EAAY4C,IAC7C1nC,EAAe8kC,EAAa4C,EAAS,CACnCjD,cAAc,EACdzmC,IAAK,WAAc,OAAO9B,+BCfhC,IAAI8D,EAAiB,UACjBuY,EAAM,EAAQ,MAGdqxB,EAFkB,EAAQ,KAEVzF,CAAgB,eAEpCN,EAAOC,QAAU,SAAUC,EAAIwb,EAAK7O,GAC9B3M,IAAOxrB,EAAIwrB,EAAK2M,EAAS3M,EAAKA,EAAGnkC,UAAWgqC,IAC9C5pC,EAAe+jC,EAAI6F,EAAe,CAAEnF,cAAc,EAAM7+B,MAAO25C,2BCRnE,IAAI5J,EAAS,EAAQ,MACjBjB,EAAM,EAAQ,MAEdpkB,EAAOqlB,EAAO,QAElB9R,EAAOC,QAAU,SAAUY,GACzB,OAAOpU,EAAKoU,KAASpU,EAAKoU,GAAOgQ,EAAIhQ,2BCNvC,IAAI4I,EAAS,EAAQ,MACjB4C,EAAY,EAAQ,MAEpBsP,EAAS,qBACTpL,EAAQ9G,EAAOkS,IAAWtP,EAAUsP,EAAQ,IAEhD3b,EAAOC,QAAUsQ,wBCNjB,IAAIvI,EAAU,EAAQ,MAClBuI,EAAQ,EAAQ,OAEnBvQ,EAAOC,QAAU,SAAUY,EAAK9+B,GAC/B,OAAOwuC,EAAM1P,KAAS0P,EAAM1P,QAAiBr9B,IAAVzB,EAAsBA,EAAQ,MAChE,WAAY,IAAIlL,KAAK,CACtBizB,QAAS,SACT7rB,KAAM+pC,EAAU,OAAS,SACzB4T,UAAW,+DCRb,IAAI1W,EAAW,EAAQ,MACnBf,EAAY,EAAQ,MAGpBN,EAFkB,EAAQ,KAEhBvD,CAAgB,WAI9BN,EAAOC,QAAU,SAAU8B,EAAG8Z,GAC5B,IACI9a,EADAiB,EAAIkD,EAASnD,GAAGgC,YAEpB,YAAavgC,IAANw+B,GAAiDx+B,OAA7Bu9B,EAAImE,EAASlD,GAAG6B,IAAyBgY,EAAqB1X,EAAUpD,0BCXrG,IAAI+a,EAAY,EAAQ,MACpBnyB,EAAW,EAAQ,MACnBoyB,EAAyB,EAAQ,MAGjCvZ,EAAe,SAAUwZ,GAC3B,OAAO,SAAUtZ,EAAOuZ,GACtB,IAGI38B,EAAOG,EAHPshB,EAAIpX,EAASoyB,EAAuBrZ,IACpC5e,EAAWg4B,EAAUG,GACrBC,EAAOnb,EAAEnqC,OAEb,OAAIktB,EAAW,GAAKA,GAAYo4B,EAAaF,EAAoB,QAAKx4C,GACtE8b,EAAQyhB,EAAEob,WAAWr4B,IACN,OAAUxE,EAAQ,OAAUwE,EAAW,IAAMo4B,IACtDz8B,EAASshB,EAAEob,WAAWr4B,EAAW,IAAM,OAAUrE,EAAS,MAC1Du8B,EAAoBjb,EAAED,OAAOhd,GAAYxE,EACzC08B,EAAoBjb,EAAEh5B,MAAM+b,EAAUA,EAAW,GAA+BrE,EAAS,OAAlCH,EAAQ,OAAU,IAA0B,QAI7G0gB,EAAOC,QAAU,CAGfmc,OAAQ5Z,GAAa,GAGrB1B,OAAQ0B,GAAa,mCCxBvB,IAAI6Z,EAAS,WASTC,EAAgB,eAChBC,EAAkB,yBAClBC,EAAiB,kDAEjB/wC,EAAQ5Q,KAAK4Q,MACbgxC,EAAqBrc,OAAOsc,aAoC5BC,EAAe,SAAUC,GAG3B,OAAOA,EAAQ,GAAK,IAAMA,EAAQ,KAOhCC,EAAQ,SAAUviD,EAAOwiD,EAAWC,GACtC,IAAIC,EAAI,EAGR,IAFA1iD,EAAQyiD,EAAYtxC,EAAMnR,EAzDjB,KAyDiCA,GAAS,EACnDA,GAASmR,EAAMnR,EAAQwiD,GAChBxiD,EAAQ2iD,IAA2BD,GA/DjC,GAgEP1iD,EAAQmR,EAAMnR,EArDE4iD,IAuDlB,OAAOzxC,EAAMuxC,EAAI,GAAsB1iD,GAASA,EA/DvC,MAuEP6iD,EAAS,SAAU/D,GACrB,IAYIziD,EAAGymD,EAZHC,EAAS,GAMTC,GAHJlE,EAxDe,SAAUrG,GAIzB,IAHA,IAAIsK,EAAS,GACTE,EAAU,EACV3mD,EAASm8C,EAAOn8C,OACb2mD,EAAU3mD,GAAQ,CACvB,IAAImL,EAAQgxC,EAAOoJ,WAAWoB,KAC9B,GAAIx7C,GAAS,OAAUA,GAAS,OAAUw7C,EAAU3mD,EAAQ,CAE1D,IAAI4mD,EAAQzK,EAAOoJ,WAAWoB,KACN,QAAX,MAARC,GACHH,EAAOxmD,OAAe,KAARkL,IAAkB,KAAe,KAARy7C,GAAiB,QAIxDH,EAAOxmD,KAAKkL,GACZw7C,UAGFF,EAAOxmD,KAAKkL,GAGhB,OAAOs7C,EAmCCI,CAAWrE,IAGKxiD,OAGpBywB,EA9ES,IA+ET/sB,EAAQ,EACRojD,EAjFY,GAqFhB,IAAK/mD,EAAI,EAAGA,EAAIyiD,EAAMxiD,OAAQD,KAC5BymD,EAAehE,EAAMziD,IACF,KACjB0mD,EAAOxmD,KAAK4lD,EAAmBW,IAInC,IAAIO,EAAcN,EAAOzmD,OACrBgnD,EAAiBD,EAQrB,IALIA,GACFN,EAAOxmD,KA/FK,KAmGP+mD,EAAiBN,GAAa,CAEnC,IAAIx+C,EAAIu9C,EACR,IAAK1lD,EAAI,EAAGA,EAAIyiD,EAAMxiD,OAAQD,KAC5BymD,EAAehE,EAAMziD,KACD0wB,GAAK+1B,EAAet+C,IACtCA,EAAIs+C,GAKR,IAAIS,EAAwBD,EAAiB,EAC7C,GAAI9+C,EAAIuoB,EAAI5b,GAAO4wC,EAAS/hD,GAASujD,GACnC,MAAMC,WAAWtB,GAMnB,IAHAliD,IAAUwE,EAAIuoB,GAAKw2B,EACnBx2B,EAAIvoB,EAECnI,EAAI,EAAGA,EAAIyiD,EAAMxiD,OAAQD,IAAK,CAEjC,IADAymD,EAAehE,EAAMziD,IACF0wB,KAAO/sB,EAAQ+hD,EAChC,MAAMyB,WAAWtB,GAEnB,GAAIY,GAAgB/1B,EAAG,CAGrB,IADA,IAAI02B,EAAIzjD,EACC0iD,EArIN,IAqIoCA,GArIpC,GAqI+C,CAChD,IAAI/f,EAAI+f,GAAKU,EArIZ,EAqI2BV,GAAKU,EApIhC,MAoIqDV,EAAIU,EAC1D,GAAIK,EAAI9gB,EAAG,MACX,IAAI+gB,EAAUD,EAAI9gB,EACdghB,EAzIH,GAyIuBhhB,EACxBogB,EAAOxmD,KAAK4lD,EAAmBE,EAAa1f,EAAI+gB,EAAUC,KAC1DF,EAAItyC,EAAMuyC,EAAUC,GAGtBZ,EAAOxmD,KAAK4lD,EAAmBE,EAAaoB,KAC5CL,EAAOb,EAAMviD,EAAOujD,EAAuBD,GAAkBD,GAC7DrjD,EAAQ,IACNsjD,KAIJtjD,IACA+sB,EAEJ,OAAOg2B,EAAOvmD,KAAK,KAGrBkpC,EAAOC,QAAU,SAAUmZ,GACzB,IAEIziD,EAAGmH,EAFHogD,EAAU,GACVC,EAAS/E,EAAMpG,cAAcxwC,QAAQ+5C,EAAiB,KAAU/lD,MAAM,KAE1E,IAAKG,EAAI,EAAGA,EAAIwnD,EAAOvnD,OAAQD,IAC7BmH,EAAQqgD,EAAOxnD,GACfunD,EAAQrnD,KAAKylD,EAAc9qC,KAAK1T,GAAS,OAASq/C,EAAOr/C,GAASA,GAEpE,OAAOogD,EAAQpnD,KAAK,yCCrKtB,IAAIglD,EAAY,EAAQ,MACpBnyB,EAAW,EAAQ,MACnBoyB,EAAyB,EAAQ,MAIrC/b,EAAOC,QAAU,SAAgBme,GAC/B,IAAIzmD,EAAMgyB,EAASoyB,EAAuB1jD,OACtCif,EAAS,GACT+P,EAAIy0B,EAAUsC,GAClB,GAAI/2B,EAAI,GAAKA,GAAKha,EAAAA,EAAU,MAAMywC,WAAW,+BAC7C,KAAMz2B,EAAI,GAAIA,KAAO,KAAO1vB,GAAOA,GAAc,EAAJ0vB,IAAO/P,GAAU3f,GAC9D,OAAO2f,yBCbT,IAAIykC,EAAyB,EAAQ,MACjCpyB,EAAW,EAAQ,MAGnB00B,EAAa,IAFC,EAAQ,MAEW,IACjCC,EAAQnR,OAAO,IAAMkR,EAAaA,EAAa,KAC/CE,EAAQpR,OAAOkR,EAAaA,EAAa,MAGzC7b,EAAe,SAAUM,GAC3B,OAAO,SAAUJ,GACf,IAAIqQ,EAASppB,EAASoyB,EAAuBrZ,IAG7C,OAFW,EAAPI,IAAUiQ,EAASA,EAAOvwC,QAAQ87C,EAAO,KAClC,EAAPxb,IAAUiQ,EAASA,EAAOvwC,QAAQ+7C,EAAO,KACtCxL,IAIX/S,EAAOC,QAAU,CAGf7yB,MAAOo1B,EAAa,GAGpBtiC,IAAKsiC,EAAa,GAGlBgc,KAAMhc,EAAa,yBC3BrB,IAgBIjgC,EAAUk8C,EAAOC,EAASC,EAhB1BlV,EAAS,EAAQ,MACjB9F,EAAQ,EAAQ,MAChB/pC,EAAO,EAAQ,MACf0J,EAAO,EAAQ,KACfoZ,EAAgB,EAAQ,KACxB+3B,EAAS,EAAQ,MACjBG,EAAU,EAAQ,MAElBx4C,EAAMqtC,EAAOmV,aACbC,EAAQpV,EAAOqV,eACf/S,EAAUtC,EAAOsC,QACjBgT,EAAiBtV,EAAOsV,eACxBC,EAAWvV,EAAOuV,SAClBzB,EAAU,EACV0B,EAAQ,GAIZ,IAEE18C,EAAWknC,EAAOlnC,SAClB,MAAO1K,IAET,IAAIqnD,EAAM,SAAUjO,GAElB,GAAIgO,EAAMjP,eAAeiB,GAAK,CAC5B,IAAIh5C,EAAKgnD,EAAMhO,UACRgO,EAAMhO,GACbh5C,MAIAknD,EAAS,SAAUlO,GACrB,OAAO,WACLiO,EAAIjO,KAIJmO,EAAW,SAAUpoD,GACvBkoD,EAAIloD,EAAMwC,OAGR6lD,EAAO,SAAUpO,GAEnBxH,EAAO6V,YAAYlf,OAAO6Q,GAAK1uC,EAAS6G,SAAW,KAAO7G,EAASwzC,OAIhE35C,GAAQyiD,IACXziD,EAAM,SAAsBnE,GAI1B,IAHA,IAAIujC,EAAO,GACPyG,EAAkBhmC,UAAUrF,OAC5BD,EAAI,EACDsrC,EAAkBtrC,GAAG6kC,EAAK3kC,KAAKoF,UAAUtF,MAMhD,OALAsoD,IAAQ1B,GAAW,YAEH,mBAANtlD,EAAmBA,EAAK+2C,SAAS/2C,IAAK+D,WAAMwH,EAAWg4B,IAEjEijB,EAAMlB,GACCA,GAETsB,EAAQ,SAAwB5N,UACvBgO,EAAMhO,IAGX2D,EACF6J,EAAQ,SAAUxN,GAChBlF,EAAQqJ,SAAS+J,EAAOlO,KAGjB+N,GAAYA,EAAShgB,IAC9Byf,EAAQ,SAAUxN,GAChB+N,EAAShgB,IAAImgB,EAAOlO,KAIb8N,IAAmBtK,GAE5BkK,GADAD,EAAU,IAAIK,GACCQ,MACfb,EAAQc,MAAMC,UAAYL,EAC1BX,EAAQ7kD,EAAK+kD,EAAKW,YAAaX,EAAM,IAIrClV,EAAOrvC,kBACe,mBAAfklD,cACN7V,EAAOiW,eACRn9C,GAAkC,UAAtBA,EAAS6G,WACpBu6B,EAAM0b,IAEPZ,EAAQY,EACR5V,EAAOrvC,iBAAiB,UAAWglD,GAAU,IAG7CX,EA/EqB,uBA8EU/hC,EAAc,UACrC,SAAUu0B,GAChB3tC,EAAKy5B,YAAYrgB,EAAc,WAA6B,mBAAI,WAC9DpZ,EAAKg8B,YAAYjnC,MACjB6mD,EAAIjO,KAKA,SAAUA,GAChB98B,WAAWgrC,EAAOlO,GAAK,KAK7BjR,EAAOC,QAAU,CACf7jC,IAAKA,EACLyiD,MAAOA,wBC9GT,IAAI/S,EAAU,EAAQ,MAItB9L,EAAOC,QAAU,SAAUl+B,GACzB,GAAoB,iBAATA,GAAuC,UAAlB+pC,EAAQ/pC,GACtC,MAAMo+B,UAAU,wBAElB,OAAQp+B,yBCRV,IAAI+5C,EAAY,EAAQ,MAEpB9gD,EAAMH,KAAKG,IACX6G,EAAMhH,KAAKgH,IAKfm+B,EAAOC,QAAU,SAAUp9B,EAAOjM,GAChC,IAAI8wB,EAAUo0B,EAAUj5C,GACxB,OAAO6kB,EAAU,EAAI1sB,EAAI0sB,EAAU9wB,EAAQ,GAAKiL,EAAI6lB,EAAS9wB,0BCT/D,IAAIgsC,EAAgB,EAAQ,MACxBmZ,EAAyB,EAAQ,MAErC/b,EAAOC,QAAU,SAAUC,GACzB,OAAO0C,EAAcmZ,EAAuB7b,uBCL9C,IAAIyf,EAAO9kD,KAAK8kD,KACZl0C,EAAQ5Q,KAAK4Q,MAIjBu0B,EAAOC,QAAU,SAAUiE,GACzB,OAAO/gC,MAAM+gC,GAAYA,GAAY,GAAKA,EAAW,EAAIz4B,EAAQk0C,GAAMzb,0BCNzE,IAAI4X,EAAY,EAAQ,MAEpBj6C,EAAMhH,KAAKgH,IAIfm+B,EAAOC,QAAU,SAAUiE,GACzB,OAAOA,EAAW,EAAIriC,EAAIi6C,EAAU5X,GAAW,kBAAoB,yBCPrE,IAAI6X,EAAyB,EAAQ,MAIrC/b,EAAOC,QAAU,SAAUiE,GACzB,OAAOhoC,OAAO6/C,EAAuB7X,2BCLvC,IAAI7D,EAAW,EAAQ,KACnBuf,EAAW,EAAQ,MACnBlY,EAAsB,EAAQ,MAG9BmY,EAFkB,EAAQ,KAEXvf,CAAgB,eAInCN,EAAOC,QAAU,SAAUmZ,EAAOC,GAChC,IAAKhZ,EAAS+Y,IAAUwG,EAASxG,GAAQ,OAAOA,EAChD,IACI9hC,EADAwoC,EAAe1G,EAAMyG,GAEzB,QAAqBr8C,IAAjBs8C,EAA4B,CAG9B,QAFat8C,IAAT61C,IAAoBA,EAAO,WAC/B/hC,EAASwoC,EAAazd,KAAK+W,EAAOC,IAC7BhZ,EAAS/oB,IAAWsoC,EAAStoC,GAAS,OAAOA,EAClD,MAAM6oB,UAAU,2CAGlB,YADa38B,IAAT61C,IAAoBA,EAAO,UACxB3R,EAAoB0R,EAAOC,0BCpBpC,IAAI0G,EAAc,EAAQ,MACtBH,EAAW,EAAQ,MAIvB5f,EAAOC,QAAU,SAAUiE,GACzB,IAAIrD,EAAMkf,EAAY7b,EAAU,UAChC,OAAO0b,EAAS/e,GAAOA,EAAMT,OAAOS,0BCPtC,IAGIrvB,EAAO,GAEXA,EALsB,EAAQ,KAEV8uB,CAAgB,gBAGd,IAEtBN,EAAOC,QAA2B,eAAjBG,OAAO5uB,yBCPxB,IAAIouC,EAAW,EAAQ,MAEvB5f,EAAOC,QAAU,SAAUiE,GACzB,GAAI0b,EAAS1b,GAAW,MAAM/D,UAAU,6CACxC,OAAOC,OAAO8D,sBCJhB,IAAI+M,EAAK,EACL+O,EAAUnlD,KAAKolD,SAEnBjgB,EAAOC,QAAU,SAAUY,GACzB,MAAO,UAAYT,YAAe58B,IAARq9B,EAAoB,GAAKA,GAAO,QAAUoQ,EAAK+O,GAASr2B,SAAS,2BCH7F,IAAIu2B,EAAgB,EAAQ,KAE5BlgB,EAAOC,QAAUigB,IACX1W,OAAOwD,MACkB,iBAAnBxD,OAAO1H,+BCLnB,IAAIxB,EAAkB,EAAQ,MAE9BL,EAAQU,EAAIL,wBCFZ,IAAImJ,EAAS,EAAQ,MACjBqI,EAAS,EAAQ,MACjBp9B,EAAM,EAAQ,MACdm8B,EAAM,EAAQ,MACdqP,EAAgB,EAAQ,KACxBhN,EAAoB,EAAQ,MAE5BiN,EAAwBrO,EAAO,OAC/BtI,EAASC,EAAOD,OAChB4W,EAAwBlN,EAAoB1J,EAASA,GAAUA,EAAO6W,eAAiBxP,EAE3F7Q,EAAOC,QAAU,SAAU51B,GAOvB,OANGqK,EAAIyrC,EAAuB91C,KAAW61C,GAAuD,iBAA/BC,EAAsB91C,MACnF61C,GAAiBxrC,EAAI80B,EAAQn/B,GAC/B81C,EAAsB91C,GAAQm/B,EAAOn/B,GAErC81C,EAAsB91C,GAAQ+1C,EAAsB,UAAY/1C,IAE3D81C,EAAsB91C,sBCjBjC21B,EAAOC,QAAU,mFCAjB,IAAI9pC,EAAI,EAAQ,MACZwtC,EAAQ,EAAQ,MAChBoB,EAAU,EAAQ,MAClB1E,EAAW,EAAQ,KACnBiB,EAAW,EAAQ,MACnBG,EAAW,EAAQ,MACnBC,EAAiB,EAAQ,MACzBmB,EAAqB,EAAQ,MAC7Byd,EAA+B,EAAQ,MACvChgB,EAAkB,EAAQ,MAC1BsD,EAAa,EAAQ,MAErB2c,EAAuBjgB,EAAgB,sBACvCkgB,EAAmB,iBACnBC,EAAiC,iCAKjCC,EAA+B9c,GAAc,KAAOD,GAAM,WAC5D,IAAIpG,EAAQ,GAEZ,OADAA,EAAMgjB,IAAwB,EACvBhjB,EAAMnd,SAAS,KAAOmd,KAG3BojB,EAAkBL,EAA6B,UAE/CM,EAAqB,SAAU7e,GACjC,IAAK1B,EAAS0B,GAAI,OAAO,EACzB,IAAI8e,EAAa9e,EAAEwe,GACnB,YAAsB/8C,IAAfq9C,IAA6BA,EAAa9b,EAAQhD,IAQ3D5rC,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QALpBqX,IAAiCC,GAKK,CAElDvgC,OAAQ,SAAgBqyB,GACtB,IAGI97C,EAAGqmD,EAAGpmD,EAAQkqD,EAAKC,EAHnBhf,EAAIT,EAASjpC,MACbo+C,EAAI5T,EAAmBd,EAAG,GAC1B1a,EAAI,EAER,IAAK1wB,GAAK,EAAGC,EAASqF,UAAUrF,OAAQD,EAAIC,EAAQD,IAElD,GAAIiqD,EADJG,GAAW,IAAPpqD,EAAWorC,EAAI9lC,UAAUtF,IACF,CAEzB,GAAI0wB,GADJy5B,EAAMrf,EAASsf,EAAEnqD,SACH4pD,EAAkB,MAAMrgB,UAAUsgB,GAChD,IAAKzD,EAAI,EAAGA,EAAI8D,EAAK9D,IAAK31B,IAAS21B,KAAK+D,GAAGrf,EAAe+U,EAAGpvB,EAAG05B,EAAE/D,QAC7D,CACL,GAAI31B,GAAKm5B,EAAkB,MAAMrgB,UAAUsgB,GAC3C/e,EAAe+U,EAAGpvB,IAAK05B,GAI3B,OADAtK,EAAE7/C,OAASywB,EACJovB,wCCzDX,IAAItgD,EAAI,EAAQ,MACZ6qD,EAAU,eAQd7qD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QAPC,EAAQ,KAEjBiX,CAA6B,WAKW,CAChE5hD,OAAQ,SAAgB2iC,GACtB,OAAO2f,EAAQ3oD,KAAMgpC,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,yCCX3E,IAAIrN,EAAI,EAAQ,MACZ8qD,EAAa,kBACbC,EAAmB,EAAQ,MAE3BC,EAAa,YACbC,GAAc,EAGdD,IAAc,IAAIzqD,MAAM,GAAa,WAAE,WAAc0qD,GAAc,KAIvEjrD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,OAAQ+X,GAAe,CACvDx0C,UAAW,SAAmBy0B,GAC5B,OAAO4f,EAAW5oD,KAAMgpC,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,MAK9E09C,EAAiBC,sCCnBjB,IAAIhrD,EAAI,EAAQ,MACZkrD,EAAQ,aACRH,EAAmB,EAAQ,MAE3BI,EAAO,OACPF,GAAc,EAGdE,IAAQ,IAAI5qD,MAAM,GAAO,MAAE,WAAc0qD,GAAc,KAI3DjrD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,OAAQ+X,GAAe,CACvDjmD,KAAM,SAAckmC,GAClB,OAAOggB,EAAMhpD,KAAMgpC,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,MAKzE09C,EAAiBI,sCCnBjB,IAAInrD,EAAI,EAAQ,MACZ63C,EAAmB,EAAQ,MAC3B1M,EAAW,EAAQ,MACnBG,EAAW,EAAQ,MACnB0C,EAAY,EAAQ,MACpBtB,EAAqB,EAAQ,MAIjC1sC,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,GAAQ,CAClCx7B,QAAS,SAAiByzB,GACxB,IAEIoV,EAFA1U,EAAIT,EAASjpC,MACb61C,EAAYzM,EAASM,EAAEnrC,QAK3B,OAHAutC,EAAU9C,IACVoV,EAAI5T,EAAmBd,EAAG,IACxBnrC,OAASo3C,EAAiByI,EAAG1U,EAAGA,EAAGmM,EAAW,EAAG,EAAG7M,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,GACjGizC,2BClBX,IAAItgD,EAAI,EAAQ,MACZsvC,EAAO,EAAQ,MAUnBtvC,EAAE,CAAEsD,OAAQ,QAASqzC,MAAM,EAAMzD,QATC,EAAQ,KAEfkY,EAA4B,SAAUjO,GAE/D58C,MAAM+uC,KAAK6N,OAKmD,CAC9D7N,KAAMA,uCCXR,IAAItvC,EAAI,EAAQ,MACZqrD,EAAY,iBACZN,EAAmB,EAAQ,MAI/B/qD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,GAAQ,CAClCxqC,SAAU,SAAkB8G,GAC1B,OAAO87C,EAAUnpD,KAAMqN,EAAIzJ,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,MAKrE09C,EAAiB,+CCbjB,IAAI5e,EAAkB,EAAQ,MAC1B4e,EAAmB,EAAQ,MAC3Bla,EAAY,EAAQ,MACpByS,EAAsB,EAAQ,MAC9BgI,EAAiB,EAAQ,KAEzBC,EAAiB,iBACjBC,EAAmBlI,EAAoBr9C,IACvCs9C,EAAmBD,EAAoBjH,UAAUkP,GAYrD1hB,EAAOC,QAAUwhB,EAAe/qD,MAAO,SAAS,SAAUkrD,EAAUC,GAClEF,EAAiBtpD,KAAM,CACrBP,KAAM4pD,EACNjoD,OAAQ6oC,EAAgBsf,GACxB/+C,MAAO,EACPg/C,KAAMA,OAIP,WACD,IAAI5P,EAAQyH,EAAiBrhD,MACzBoB,EAASw4C,EAAMx4C,OACfooD,EAAO5P,EAAM4P,KACbh/C,EAAQovC,EAAMpvC,QAClB,OAAKpJ,GAAUoJ,GAASpJ,EAAO7C,QAC7Bq7C,EAAMx4C,YAAS+J,EACR,CAAEzB,WAAOyB,EAAW8yB,MAAM,IAEvB,QAARurB,EAAuB,CAAE9/C,MAAOc,EAAOyzB,MAAM,GACrC,UAARurB,EAAyB,CAAE9/C,MAAOtI,EAAOoJ,GAAQyzB,MAAM,GACpD,CAAEv0B,MAAO,CAACc,EAAOpJ,EAAOoJ,IAASyzB,MAAM,KAC7C,UAKH0Q,EAAU8a,UAAY9a,EAAUtwC,MAGhCwqD,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,8CCnDjB,IAAI/qD,EAAI,EAAQ,MACZysC,EAAgB,EAAQ,MACxBN,EAAkB,EAAQ,MAC1BlB,EAAsB,EAAQ,MAE9B2gB,EAAa,GAAGjrD,KAEhBkrD,EAAcpf,GAAiB1mC,OAC/BilC,EAAgBC,EAAoB,OAAQ,KAIhDjrC,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,OAAQ2Y,IAAgB7gB,GAAiB,CACzErqC,KAAM,SAAc2jC,GAClB,OAAOsnB,EAAW1f,KAAKC,EAAgBjqC,WAAqBmL,IAAdi3B,EAA0B,IAAMA,yCCdlF,IAAItkC,EAAI,EAAQ,MACZ8rD,EAAO,YAQX9rD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QAPC,EAAQ,KAEjBiX,CAA6B,QAKW,CAChEtiD,IAAK,SAAaqjC,GAChB,OAAO4gB,EAAK5pD,KAAMgpC,EAAYplC,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,yCCXxE,IAAIrN,EAAI,EAAQ,MACZ+rD,EAAU,aACV9gB,EAAsB,EAAQ,MAC9B+gB,EAAiB,EAAQ,MACzBvN,EAAU,EAAQ,MAStBz+C,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QAPdjI,EAAoB,YAGtBwT,GAAWuN,EAAiB,IAAMA,EAAiB,IAIK,CACxE19C,OAAQ,SAAgB48B,GACtB,OAAO6gB,EAAQ7pD,KAAMgpC,EAAYplC,UAAUrF,OAAQqF,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,yCCf7F,IAAIrN,EAAI,EAAQ,MACZkqC,EAAW,EAAQ,KACnB0E,EAAU,EAAQ,MAClBxC,EAAkB,EAAQ,MAC1Bd,EAAW,EAAQ,MACnBa,EAAkB,EAAQ,MAC1BZ,EAAiB,EAAQ,MACzBpB,EAAkB,EAAQ,MAG1B8hB,EAF+B,EAAQ,KAEjB9B,CAA6B,SAEnDzc,EAAUvD,EAAgB,WAC1B+hB,EAAc,GAAGt6C,MACjB/M,EAAMH,KAAKG,IAKf7E,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QAAS+Y,GAAuB,CAChEr6C,MAAO,SAAeqF,EAAOlN,GAC3B,IAKI+gC,EAAa3pB,EAAQ+P,EALrB0a,EAAIO,EAAgBjqC,MACpBzB,EAAS6qC,EAASM,EAAEnrC,QACpBomD,EAAIza,EAAgBn1B,EAAOxW,GAC3B0rD,EAAM/f,OAAwB/+B,IAARtD,EAAoBtJ,EAASsJ,EAAKtJ,GAG5D,GAAImuC,EAAQhD,KAGgB,mBAF1Bd,EAAcc,EAAEgC,cAEyB9C,IAAgBvqC,QAASquC,EAAQ9D,EAAYllC,WAE3EskC,EAASY,IAEE,QADpBA,EAAcA,EAAY4C,MACA5C,OAAcz9B,GAHxCy9B,OAAcz9B,EAKZy9B,IAAgBvqC,YAAyB8M,IAAhBy9B,GAC3B,OAAOohB,EAAYhgB,KAAKN,EAAGib,EAAGsF,GAIlC,IADAhrC,EAAS,SAAqB9T,IAAhBy9B,EAA4BvqC,MAAQuqC,GAAajmC,EAAIsnD,EAAMtF,EAAG,IACvE31B,EAAI,EAAG21B,EAAIsF,EAAKtF,IAAK31B,IAAS21B,KAAKjb,GAAGL,EAAepqB,EAAQ+P,EAAG0a,EAAEib,IAEvE,OADA1lC,EAAO1gB,OAASywB,EACT/P,wCC3CX,IAAInhB,EAAI,EAAQ,MACZguC,EAAY,EAAQ,MACpB7C,EAAW,EAAQ,MACnBG,EAAW,EAAQ,MACnB9X,EAAW,EAAQ,MACnBga,EAAQ,EAAQ,MAChB4e,EAAe,EAAQ,MACvBnhB,EAAsB,EAAQ,MAC9BohB,EAAK,EAAQ,MACbC,EAAa,EAAQ,KACrBC,EAAK,EAAQ,MACbC,EAAS,EAAQ,MAEjBnxC,EAAO,GACPoxC,EAAapxC,EAAKhG,KAGlBq3C,EAAqBlf,GAAM,WAC7BnyB,EAAKhG,UAAKhI,MAGRs/C,EAAgBnf,GAAM,WACxBnyB,EAAKhG,KAAK,SAGR21B,EAAgBC,EAAoB,QAEpC2hB,GAAepf,GAAM,WAEvB,GAAI+e,EAAI,OAAOA,EAAK,GACpB,KAAIF,GAAMA,EAAK,GAAf,CACA,GAAIC,EAAY,OAAO,EACvB,GAAIE,EAAQ,OAAOA,EAAS,IAE5B,IACIK,EAAMpM,EAAK70C,EAAOc,EADlByU,EAAS,GAIb,IAAK0rC,EAAO,GAAIA,EAAO,GAAIA,IAAQ,CAGjC,OAFApM,EAAMxW,OAAOsc,aAAasG,GAElBA,GACN,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAIjhD,EAAQ,EAAG,MAC/C,KAAK,GAAI,KAAK,GAAIA,EAAQ,EAAG,MAC7B,QAASA,EAAQ,EAGnB,IAAKc,EAAQ,EAAGA,EAAQ,GAAIA,IAC1B2O,EAAK3a,KAAK,CAAEmmD,EAAGpG,EAAM/zC,EAAOogD,EAAGlhD,IAMnC,IAFAyP,EAAKhG,MAAK,SAAUkmB,EAAGC,GAAK,OAAOA,EAAEsxB,EAAIvxB,EAAEuxB,KAEtCpgD,EAAQ,EAAGA,EAAQ2O,EAAK5a,OAAQiM,IACnC+zC,EAAMplC,EAAK3O,GAAOm6C,EAAElc,OAAO,GACvBxpB,EAAOwpB,OAAOxpB,EAAO1gB,OAAS,KAAOggD,IAAKt/B,GAAUs/B,GAG1D,MAAkB,gBAAXt/B,MAgBTnhB,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,OAbrBwZ,IAAuBC,IAAkB3hB,IAAkB4hB,GAapB,CAClDv3C,KAAM,SAAc+4B,QACA/gC,IAAd+gC,GAAyBJ,EAAUI,GAEvC,IAAIhH,EAAQ+D,EAASjpC,MAErB,GAAI0qD,EAAa,YAAqBv/C,IAAd+gC,EAA0Bqe,EAAWvgB,KAAK9E,GAASqlB,EAAWvgB,KAAK9E,EAAOgH,GAElG,IAEI2e,EAAargD,EAFbsgD,EAAQ,GACRC,EAAc3hB,EAASlE,EAAM3mC,QAGjC,IAAKiM,EAAQ,EAAGA,EAAQugD,EAAavgD,IAC/BA,KAAS06B,GAAO4lB,EAAMtsD,KAAK0mC,EAAM16B,IAOvC,IAHAqgD,GADAC,EAAQZ,EAAaY,EA3BJ,SAAU5e,GAC7B,OAAO,SAAUttC,EAAGC,GAClB,YAAUsM,IAANtM,GAAyB,OACnBsM,IAANvM,EAAwB,OACVuM,IAAd+gC,GAAiCA,EAAUttC,EAAGC,IAAM,EACjDyyB,EAAS1yB,GAAK0yB,EAASzyB,GAAK,GAAK,GAsBZmsD,CAAe9e,KACvB3tC,OACpBiM,EAAQ,EAEDA,EAAQqgD,GAAa3lB,EAAM16B,GAASsgD,EAAMtgD,KACjD,KAAOA,EAAQugD,UAAoB7lB,EAAM16B,KAEzC,OAAO06B,uCClGX,IAAIpnC,EAAI,EAAQ,MACZosC,EAAkB,EAAQ,MAC1BuZ,EAAY,EAAQ,MACpBra,EAAW,EAAQ,MACnBH,EAAW,EAAQ,MACnBuB,EAAqB,EAAQ,MAC7BnB,EAAiB,EAAQ,MAGzB0gB,EAF+B,EAAQ,KAEjB9B,CAA6B,UAEnDtlD,EAAMH,KAAKG,IACX6G,EAAMhH,KAAKgH,IACX2+C,EAAmB,iBACnB8C,EAAkC,kCAKtCntD,EAAE,CAAEsD,OAAQ,QAAS2vC,OAAO,EAAMC,QAAS+Y,GAAuB,CAChE5Q,OAAQ,SAAgBpkC,EAAOm2C,GAC7B,IAIIC,EAAaC,EAAmBhN,EAAGuG,EAAGvX,EAAMie,EAJ5C3hB,EAAIT,EAASjpC,MACbyoD,EAAMrf,EAASM,EAAEnrC,QACjB+sD,EAAcphB,EAAgBn1B,EAAO0zC,GACrC7e,EAAkBhmC,UAAUrF,OAWhC,GATwB,IAApBqrC,EACFuhB,EAAcC,EAAoB,EACL,IAApBxhB,GACTuhB,EAAc,EACdC,EAAoB3C,EAAM6C,IAE1BH,EAAcvhB,EAAkB,EAChCwhB,EAAoB5hD,EAAI7G,EAAI8gD,EAAUyH,GAAc,GAAIzC,EAAM6C,IAE5D7C,EAAM0C,EAAcC,EAAoBjD,EAC1C,MAAMrgB,UAAUmjB,GAGlB,IADA7M,EAAI5T,EAAmBd,EAAG0hB,GACrBzG,EAAI,EAAGA,EAAIyG,EAAmBzG,KACjCvX,EAAOke,EAAc3G,KACTjb,GAAGL,EAAe+U,EAAGuG,EAAGjb,EAAE0D,IAGxC,GADAgR,EAAE7/C,OAAS6sD,EACPD,EAAcC,EAAmB,CACnC,IAAKzG,EAAI2G,EAAa3G,EAAI8D,EAAM2C,EAAmBzG,IAEjD0G,EAAK1G,EAAIwG,GADT/d,EAAOuX,EAAIyG,KAEC1hB,EAAGA,EAAE2hB,GAAM3hB,EAAE0D,UACb1D,EAAE2hB,GAEhB,IAAK1G,EAAI8D,EAAK9D,EAAI8D,EAAM2C,EAAoBD,EAAaxG,WAAYjb,EAAEib,EAAI,QACtE,GAAIwG,EAAcC,EACvB,IAAKzG,EAAI8D,EAAM2C,EAAmBzG,EAAI2G,EAAa3G,IAEjD0G,EAAK1G,EAAIwG,EAAc,GADvB/d,EAAOuX,EAAIyG,EAAoB,KAEnB1hB,EAAGA,EAAE2hB,GAAM3hB,EAAE0D,UACb1D,EAAE2hB,GAGlB,IAAK1G,EAAI,EAAGA,EAAIwG,EAAaxG,IAC3Bjb,EAAEib,EAAI2G,GAAe1nD,UAAU+gD,EAAI,GAGrC,OADAjb,EAAEnrC,OAASkqD,EAAM2C,EAAoBD,EAC9B/M,2BC/DY,EAAQ,KAG/ByK,CAAiB,iCCLjB,IAAIpZ,EAA8B,EAAQ,MACtC8b,EAAkB,EAAQ,MAG1B/D,EAFkB,EAAQ,KAEXvf,CAAgB,eAC/BujB,EAAgBv1B,KAAKvyB,UAInB8jD,KAAgBgE,GACpB/b,EAA4B+b,EAAehE,EAAc+D,yBCV3D,IAAIxc,EAAc,EAAQ,MACtBjrC,EAAiB,UAEjB2nD,EAAoB9U,SAASjzC,UAC7BgoD,EAA4BD,EAAkBn6B,SAC9Cq6B,EAAS,wBACT7c,EAAO,OAIPC,KAAiBD,KAAQ2c,IAC3B3nD,EAAe2nD,EAAmB3c,EAAM,CACtCvG,cAAc,EACdzmC,IAAK,WACH,IACE,OAAO4pD,EAA0B1hB,KAAKhqC,MAAMo5B,MAAMuyB,GAAQ,GAC1D,MAAOnsD,GACP,MAAO,6BCjBf,IAAI4xC,EAAS,EAAQ,MACA,EAAQ,KAI7B1C,CAAe0C,EAAO/N,KAAM,QAAQ,yBCLpC,IAAIvlC,EAAI,EAAQ,MAEZolC,EAAM1gC,KAAK0gC,IACX0oB,EAAMppD,KAAKopD,IAIf9tD,EAAE,CAAEsD,OAAQ,OAAQqzC,MAAM,GAAQ,CAChCvlB,KAAM,SAActwB,GAClB,OAAOskC,EAAItkC,GAAKgtD,2BCTZ,EAAQ,KAKhB9tD,CAAE,CAAEsD,OAAQ,OAAQqzC,MAAM,GAAQ,CAChCp7B,KALS,EAAQ,8BCDE,EAAQ,KAI7Bq1B,CAAelsC,KAAM,QAAQ,sCCH7B,IAAIusC,EAAc,EAAQ,MACtBqC,EAAS,EAAQ,MACjB8C,EAAW,EAAQ,MACnBxE,EAAW,EAAQ,MACnBrzB,EAAM,EAAQ,MACdo3B,EAAU,EAAQ,MAClBoY,EAAoB,EAAQ,MAC5BtE,EAAW,EAAQ,MACnBG,EAAc,EAAQ,MACtBpc,EAAQ,EAAQ,MAChBpD,EAAS,EAAQ,IACjBgR,EAAsB,UACtBhL,EAA2B,UAC3BpqC,EAAiB,UACjBqiD,EAAO,aAEP2F,EAAS,SACTC,EAAe3a,EAAa,OAC5B4a,EAAkBD,EAAaroD,UAG/BuoD,EAAiBxY,EAAQvL,EAAO8jB,KAAqBF,EAIrDI,EAAW,SAAUrgB,GACvB,GAAI0b,EAAS1b,GAAW,MAAM/D,UAAU,6CACxC,IACI7gB,EAAOklC,EAAOC,EAAOC,EAASC,EAAQ/tD,EAAQiM,EAAOmgD,EADrD9iB,EAAK6f,EAAY7b,EAAU,UAE/B,GAAiB,iBAANhE,GAAkBA,EAAGtpC,OAAS,EAGvC,GAAc,MADd0oB,GADA4gB,EAAKse,EAAKte,IACCic,WAAW,KACQ,KAAV78B,GAElB,GAAc,MADdklC,EAAQtkB,EAAGic,WAAW,KACQ,MAAVqI,EAAe,OAAOI,SACrC,GAAc,KAAVtlC,EAAc,CACvB,OAAQ4gB,EAAGic,WAAW,IACpB,KAAK,GAAI,KAAK,GAAIsI,EAAQ,EAAGC,EAAU,GAAI,MAC3C,KAAK,GAAI,KAAK,IAAKD,EAAQ,EAAGC,EAAU,GAAI,MAC5C,QAAS,OAAQxkB,EAInB,IADAtpC,GADA+tD,EAASzkB,EAAGn4B,MAAM,IACFnR,OACXiM,EAAQ,EAAGA,EAAQjM,EAAQiM,IAI9B,IAHAmgD,EAAO2B,EAAOxI,WAAWt5C,IAGd,IAAMmgD,EAAO0B,EAAS,OAAOE,IACxC,OAAO16C,SAASy6C,EAAQF,GAE5B,OAAQvkB,GAKZ,GAAIqM,EAAS4X,GAASC,EAAa,UAAYA,EAAa,QAAUA,EAAa,SAAU,CAS3F,IARA,IAgBqBvjB,EAhBjBgkB,EAAgB,SAAgB9iD,GAClC,IAAIm+B,EAAKjkC,UAAUrF,OAAS,EAAI,EAAImL,EAChCouC,EAAQ93C,KACZ,OAAO83C,aAAiB0U,IAElBP,EAAiB3gB,GAAM,WAAc0gB,EAAgB/K,QAAQjX,KAAK8N,MAAarE,EAAQqE,IAAUgU,GACjGD,EAAkB,IAAIE,EAAaG,EAASrkB,IAAMiQ,EAAO0U,GAAiBN,EAASrkB,IAElFzT,EAAO2a,EAAcmK,EAAoB6S,GAAgB,8LAQhE5tD,MAAM,KAAMkuC,EAAI,EAAQjY,EAAK71B,OAAS8tC,EAAGA,IACrChwB,EAAI0vC,EAAcvjB,EAAMpU,EAAKiY,MAAQhwB,EAAImwC,EAAehkB,IAC1D1kC,EAAe0oD,EAAehkB,EAAK0F,EAAyB6d,EAAcvjB,IAG9EgkB,EAAc9oD,UAAYsoD,EAC1BA,EAAgBtgB,YAAc8gB,EAC9B9c,EAAS0B,EAAQ0a,EAAQU,uCC/E3B,IAAI1uD,EAAI,EAAQ,MACZ2lD,EAAY,EAAQ,MACpBgJ,EAAkB,EAAQ,KAC1BC,EAAS,EAAQ,MACjBphB,EAAQ,EAAQ,MAEhBqhB,EAAgB,GAAI/8C,QACpBwD,EAAQ5Q,KAAK4Q,MAEbw5C,EAAM,SAAUhuD,EAAGowB,EAAGoY,GACxB,OAAa,IAANpY,EAAUoY,EAAMpY,EAAI,GAAM,EAAI49B,EAAIhuD,EAAGowB,EAAI,EAAGoY,EAAMxoC,GAAKguD,EAAIhuD,EAAIA,EAAGowB,EAAI,EAAGoY,IAgB9EylB,EAAW,SAAU1rD,EAAM6tB,EAAGsnB,GAGhC,IAFA,IAAI9rC,GAAS,EACTsiD,EAAKxW,IACA9rC,EAAQ,GACfsiD,GAAM99B,EAAI7tB,EAAKqJ,GACfrJ,EAAKqJ,GAASsiD,EAAK,IACnBA,EAAK15C,EAAM05C,EAAK,MAIhBC,EAAS,SAAU5rD,EAAM6tB,GAG3B,IAFA,IAAIxkB,EAAQ,EACR8rC,EAAI,IACC9rC,GAAS,GAChB8rC,GAAKn1C,EAAKqJ,GACVrJ,EAAKqJ,GAAS4I,EAAMkjC,EAAItnB,GACxBsnB,EAAKA,EAAItnB,EAAK,KAIdg+B,EAAe,SAAU7rD,GAG3B,IAFA,IAAIqJ,EAAQ,EACRyiD,EAAI,KACCziD,GAAS,GAChB,GAAU,KAANyiD,GAAsB,IAAVziD,GAA+B,IAAhBrJ,EAAKqJ,GAAc,CAChD,IAAIo6B,EAAImD,OAAO5mC,EAAKqJ,IACpByiD,EAAU,KAANA,EAAWroB,EAAIqoB,EAAIP,EAAO1iB,KAAK,IAAK,EAAIpF,EAAErmC,QAAUqmC,EAE1D,OAAOqoB,GAeXnvD,EAAE,CAAEsD,OAAQ,SAAU2vC,OAAO,EAAMC,OAZtB2b,IACY,UAAvB,KAAQ/8C,QAAQ,IACG,MAAnB,GAAIA,QAAQ,IACS,SAArB,MAAMA,QAAQ,IACuB,yBAArC,mBAAsBA,QAAQ,MAC1B07B,GAAM,WAEVqhB,EAAc3iB,KAAK,QAKgC,CACnDp6B,QAAS,SAAiBs9C,GACxB,IAKIzrD,EAAG0rD,EAAG9gB,EAAGsY,EALTyI,EAASX,EAAgBzsD,MACzBqtD,EAAc5J,EAAUyJ,GACxB/rD,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACvBkY,EAAO,GACP4F,EAAS,IAGb,GAAIouC,EAAc,GAAKA,EAAc,GAAI,MAAM5H,WAAW,6BAE1D,GAAI2H,GAAUA,EAAQ,MAAO,MAC7B,GAAIA,IAAW,MAAQA,GAAU,KAAM,OAAOrlB,OAAOqlB,GAKrD,GAJIA,EAAS,IACX/zC,EAAO,IACP+zC,GAAUA,GAERA,EAAS,MAKX,GAHAD,GADA1rD,EA1EI,SAAU7C,GAGlB,IAFA,IAAIowB,EAAI,EACJs+B,EAAK1uD,EACF0uD,GAAM,MACXt+B,GAAK,GACLs+B,GAAM,KAER,KAAOA,GAAM,GACXt+B,GAAK,EACLs+B,GAAM,EACN,OAAOt+B,EAgEDkU,CAAIkqB,EAASR,EAAI,EAAG,GAAI,IAAM,IAC1B,EAAIQ,EAASR,EAAI,GAAInrD,EAAG,GAAK2rD,EAASR,EAAI,EAAGnrD,EAAG,GACxD0rD,GAAK,kBACL1rD,EAAI,GAAKA,GACD,EAAG,CAGT,IAFAorD,EAAS1rD,EAAM,EAAGgsD,GAClB9gB,EAAIghB,EACGhhB,GAAK,GACVwgB,EAAS1rD,EAAM,IAAK,GACpBkrC,GAAK,EAIP,IAFAwgB,EAAS1rD,EAAMyrD,EAAI,GAAIvgB,EAAG,GAAI,GAC9BA,EAAI5qC,EAAI,EACD4qC,GAAK,IACV0gB,EAAO5rD,EAAM,GAAK,IAClBkrC,GAAK,GAEP0gB,EAAO5rD,EAAM,GAAKkrC,GAClBwgB,EAAS1rD,EAAM,EAAG,GAClB4rD,EAAO5rD,EAAM,GACb8d,EAAS+tC,EAAa7rD,QAEtB0rD,EAAS1rD,EAAM,EAAGgsD,GAClBN,EAAS1rD,EAAM,IAAMM,EAAG,GACxBwd,EAAS+tC,EAAa7rD,GAAQurD,EAAO1iB,KAAK,IAAKqjB,GAUjD,OAPEA,EAAc,EAEPh0C,IADTsrC,EAAI1lC,EAAO1gB,SACW8uD,EAClB,KAAOX,EAAO1iB,KAAK,IAAKqjB,EAAc1I,GAAK1lC,EAC3CA,EAAOvP,MAAM,EAAGi1C,EAAI0I,GAAe,IAAMpuC,EAAOvP,MAAMi1C,EAAI0I,IAErDh0C,EAAO4F,2BCzHtB,IAAInhB,EAAI,EAAQ,MACZqgD,EAAS,EAAQ,MAKrBrgD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,OAAQntC,OAAOs6C,SAAWA,GAAU,CACpEA,OAAQA,0BCPV,IAAIrgD,EAAI,EAAQ,MACZ26C,EAAW,EAAQ,MACnBnN,EAAQ,EAAQ,MAChBtD,EAAW,EAAQ,KACnBsR,EAAW,iBAGXiU,EAAU1pD,OAAO2pD,OAKrB1vD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,OAJR1F,GAAM,WAAciiB,EAAQ,MAIS5Y,MAAO8D,GAAY,CAChF+U,OAAQ,SAAgB3lB,GACtB,OAAO0lB,GAAWvlB,EAASH,GAAM0lB,EAAQjU,EAASzR,IAAOA,2BCd7D,IAAI/pC,EAAI,EAAQ,MACZwtC,EAAQ,EAAQ,MAChBrB,EAAkB,EAAQ,MAC1BwjB,EAAiC,UACjC1e,EAAc,EAAQ,MAEtB2e,EAAsBpiB,GAAM,WAAcmiB,EAA+B,MAK7E3vD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,QAJpBjC,GAAe2e,EAIqB/Y,MAAO5F,GAAe,CACtEb,yBAA0B,SAAkCrG,EAAIW,GAC9D,OAAOilB,EAA+BxjB,EAAgBpC,GAAKW,4BCb/D,IAAI1qC,EAAI,EAAQ,MACZixC,EAAc,EAAQ,MACtBhB,EAAU,EAAQ,MAClB9D,EAAkB,EAAQ,MAC1B+D,EAAiC,EAAQ,MACzC3E,EAAiB,EAAQ,MAI7BvrC,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAME,MAAO5F,GAAe,CACtD4e,0BAA2B,SAAmCpgB,GAO5D,IANA,IAKI/E,EAAK6L,EALL3K,EAAIO,EAAgBsD,GACpBW,EAA2BF,EAA+B1F,EAC1DlU,EAAO2Z,EAAQrE,GACfzqB,EAAS,GACTzU,EAAQ,EAEL4pB,EAAK71B,OAASiM,QAEAW,KADnBkpC,EAAanG,EAAyBxE,EAAGlB,EAAMpU,EAAK5pB,QACtB6+B,EAAepqB,EAAQupB,EAAK6L,GAE5D,OAAOp1B,0BCrBX,IAAInhB,EAAI,EAAQ,MACZwtC,EAAQ,EAAQ,MAChBrC,EAAW,EAAQ,MACnB2kB,EAAuB,EAAQ,MAC/BxN,EAA2B,EAAQ,MAMvCtiD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,OAJR1F,GAAM,WAAcsiB,EAAqB,MAIJjZ,MAAOyL,GAA4B,CAChG7R,eAAgB,SAAwB1G,GACtC,OAAO+lB,EAAqB3kB,EAASpB,6BCZzC,IAAI/pC,EAAI,EAAQ,MACZmrC,EAAW,EAAQ,MACnB4kB,EAAa,EAAQ,MAOzB/vD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,OANtB,EAAQ,KAEM1F,EAAM,WAAcuiB,EAAW,OAIQ,CAC/Dz5B,KAAM,SAAcyT,GAClB,OAAOgmB,EAAW5kB,EAASpB,6BCX/B,IAAI2F,EAAwB,EAAQ,MAChCkC,EAAW,EAAQ,MACnBpe,EAAW,EAAQ,KAIlBkc,GACHkC,EAAS7rC,OAAOH,UAAW,WAAY4tB,EAAU,CAAEkwB,QAAQ,0BCP7D,IAAI1jD,EAAI,EAAQ,MACZgwD,EAAU,eAIdhwD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,GAAQ,CAClCxhB,OAAQ,SAAgByW,GACtB,OAAOokB,EAAQpkB,yCCNnB,IAqDIqkB,EAAUC,EAAsBC,EAAgBC,EArDhDpwD,EAAI,EAAQ,MACZ6xC,EAAU,EAAQ,MAClByB,EAAS,EAAQ,MACjBuC,EAAa,EAAQ,MACrBwa,EAAgB,EAAQ,MACxBze,EAAW,EAAQ,MACnB0e,EAAc,EAAQ,MACtB5e,EAAiB,EAAQ,MACzBd,EAAiB,EAAQ,MACzB2f,EAAa,EAAQ,MACrBrmB,EAAW,EAAQ,KACnB8D,EAAY,EAAQ,MACpBwiB,EAAa,EAAQ,MACrBlW,EAAgB,EAAQ,MACxBmW,EAAU,EAAQ,KAClBrF,EAA8B,EAAQ,MACtCsF,EAAqB,EAAQ,MAC7BrR,EAAO,WACPsR,EAAY,EAAQ,MACpBC,EAAiB,EAAQ,MACzBC,EAAmB,EAAQ,KAC3BC,EAA6B,EAAQ,MACrCC,EAAU,EAAQ,MAClBzN,EAAsB,EAAQ,MAC9BlN,EAAW,EAAQ,MACnBjM,EAAkB,EAAQ,MAC1B6mB,EAAa,EAAQ,MACrBvS,EAAU,EAAQ,MAClBhR,EAAa,EAAQ,MAErBC,EAAUvD,EAAgB,WAC1B8mB,EAAU,UACV1N,EAAmBD,EAAoBt/C,IACvCwnD,EAAmBlI,EAAoBr9C,IACvCirD,EAA0B5N,EAAoBjH,UAAU4U,GACxDE,EAAyBd,GAAiBA,EAAczqD,UACxDwrD,EAAqBf,EACrBgB,EAA8BF,EAC9BnnB,EAAYsJ,EAAOtJ,UACnB9kC,EAAWouC,EAAOpuC,SAClB0wC,EAAUtC,EAAOsC,QACjBwN,EAAuB0N,EAA2BtmB,EAClD8mB,EAA8BlO,EAC9BmO,KAAoBrsD,GAAYA,EAAS6jC,aAAeuK,EAAO5a,eAC/D84B,EAAyD,mBAAzBC,sBAChCC,EAAsB,qBAOtBC,GAAc,EAGdtf,EAAS+D,EAAS6a,GAAS,WAC7B,IAAIW,EAA6BtX,EAAc8W,GAC3CS,EAAyBD,IAA+B3nB,OAAOmnB,GAInE,IAAKS,GAAyC,KAAfpkB,EAAmB,OAAO,EAEzD,GAAIoE,IAAYwf,EAAqC,QAAG,OAAO,EAI/D,GAAI5jB,GAAc,IAAM,cAAcpyB,KAAKu2C,GAA6B,OAAO,EAE/E,IAAI5xB,EAAU,IAAIoxB,GAAmB,SAAU31C,GAAWA,EAAQ,MAC9Dq2C,EAAc,SAAUj7C,GAC1BA,GAAK,eAA6B,gBAKpC,OAHkBmpB,EAAQ4N,YAAc,IAC5BF,GAAWokB,IACvBH,EAAc3xB,EAAQoe,MAAK,yBAAwC0T,KAG3DD,GAA0Bb,IAAeQ,KAG/CO,GAAsB1f,IAAW+Y,GAA4B,SAAUjO,GACzEiU,EAAmBY,IAAI7U,GAAiB,OAAE,kBAIxC8U,GAAa,SAAUloB,GACzB,IAAIqU,EACJ,SAAOlU,EAASH,IAAkC,mBAAnBqU,EAAOrU,EAAGqU,QAAsBA,GAG7DH,GAAS,SAAUnC,EAAOoW,GAC5B,IAAIpW,EAAMqW,SAAV,CACArW,EAAMqW,UAAW,EACjB,IAAIC,EAAQtW,EAAMuW,UAClB1B,GAAU,WAKR,IAJA,IAAI/kD,EAAQkwC,EAAMlwC,MACd0mD,EAjDQ,GAiDHxW,EAAMA,MACXpvC,EAAQ,EAEL0lD,EAAM3xD,OAASiM,GAAO,CAC3B,IAKIyU,EAAQi9B,EAAMmU,EALdC,EAAWJ,EAAM1lD,KACjB+lD,EAAUH,EAAKE,EAASF,GAAKE,EAASE,KACtCj3C,EAAU+2C,EAAS/2C,QACnBqkC,EAAS0S,EAAS1S,OAClBhB,EAAS0T,EAAS1T,OAEtB,IACM2T,GACGH,IA1DC,IA2DAxW,EAAM6W,WAAyBC,GAAkB9W,GACrDA,EAAM6W,UA7DJ,IA+DY,IAAZF,EAAkBtxC,EAASvV,GAEzBkzC,GAAQA,EAAOE,QACnB79B,EAASsxC,EAAQ7mD,GACbkzC,IACFA,EAAOC,OACPwT,GAAS,IAGTpxC,IAAWqxC,EAASxyB,QACtB8f,EAAO9V,EAAU,yBACRoU,EAAO6T,GAAW9wC,IAC3Bi9B,EAAKlS,KAAK/qB,EAAQ1F,EAASqkC,GACtBrkC,EAAQ0F,IACV2+B,EAAOl0C,GACd,MAAOlK,GACHo9C,IAAWyT,GAAQzT,EAAOC,OAC9Be,EAAOp+C,IAGXo6C,EAAMuW,UAAY,GAClBvW,EAAMqW,UAAW,EACbD,IAAapW,EAAM6W,WAAWE,GAAY/W,QAI9CpjB,GAAgB,SAAUxkB,EAAM8rB,EAAS8yB,GAC3C,IAAIjyD,EAAO4xD,EACPlB,IACF1wD,EAAQqE,EAAS6jC,YAAY,UACvB/I,QAAUA,EAChBn/B,EAAMiyD,OAASA,EACfjyD,EAAMkyD,UAAU7+C,GAAM,GAAO,GAC7Bo/B,EAAO5a,cAAc73B,IAChBA,EAAQ,CAAEm/B,QAASA,EAAS8yB,OAAQA,IACtCtB,IAA2BiB,EAAUnf,EAAO,KAAOp/B,IAAQu+C,EAAQ5xD,GAC/DqT,IAASw9C,GAAqBb,EAAiB,8BAA+BiC,IAGrFD,GAAc,SAAU/W,GAC1BuD,EAAKnT,KAAKoH,GAAQ,WAChB,IAGInyB,EAHA6e,EAAU8b,EAAMI,OAChBtwC,EAAQkwC,EAAMlwC,MAGlB,GAFmBonD,GAAYlX,KAG7B36B,EAAS4vC,GAAQ,WACXtS,EACF7I,EAAQqd,KAAK,qBAAsBrnD,EAAOo0B,GACrCtH,GAAcg5B,EAAqB1xB,EAASp0B,MAGrDkwC,EAAM6W,UAAYlU,GAAWuU,GAAYlX,GAlH/B,EADF,EAoHJ36B,EAAOzf,OAAO,MAAMyf,EAAOvV,UAKjConD,GAAc,SAAUlX,GAC1B,OA1HY,IA0HLA,EAAM6W,YAA0B7W,EAAMvrB,QAG3CqiC,GAAoB,SAAU9W,GAChCuD,EAAKnT,KAAKoH,GAAQ,WAChB,IAAItT,EAAU8b,EAAMI,OAChBuC,EACF7I,EAAQqd,KAAK,mBAAoBjzB,GAC5BtH,GAtIa,mBAsIoBsH,EAAS8b,EAAMlwC,WAIvDnI,GAAO,SAAU3B,EAAIg6C,EAAOoX,GAC9B,OAAO,SAAUtnD,GACf9J,EAAGg6C,EAAOlwC,EAAOsnD,KAIjBC,GAAiB,SAAUrX,EAAOlwC,EAAOsnD,GACvCpX,EAAM3b,OACV2b,EAAM3b,MAAO,EACT+yB,IAAQpX,EAAQoX,GACpBpX,EAAMlwC,MAAQA,EACdkwC,EAAMA,MAlJO,EAmJbmC,GAAOnC,GAAO,KAGZsX,GAAkB,SAAUtX,EAAOlwC,EAAOsnD,GAC5C,IAAIpX,EAAM3b,KAAV,CACA2b,EAAM3b,MAAO,EACT+yB,IAAQpX,EAAQoX,GACpB,IACE,GAAIpX,EAAMI,SAAWtwC,EAAO,MAAMo+B,EAAU,oCAC5C,IAAIoU,EAAO6T,GAAWrmD,GAClBwyC,EACFuS,GAAU,WACR,IAAIhrD,EAAU,CAAEw6B,MAAM,GACtB,IACEie,EAAKlS,KAAKtgC,EACRnI,GAAK2vD,GAAiBztD,EAASm2C,GAC/Br4C,GAAK0vD,GAAgBxtD,EAASm2C,IAEhC,MAAOp6C,GACPyxD,GAAextD,EAASjE,EAAOo6C,QAInCA,EAAMlwC,MAAQA,EACdkwC,EAAMA,MA5KI,EA6KVmC,GAAOnC,GAAO,IAEhB,MAAOp6C,GACPyxD,GAAe,CAAEhzB,MAAM,GAASz+B,EAAOo6C,MAK3C,GAAIzJ,IAaFgf,GAXAD,EAAqB,SAAiBiC,GACpC7C,EAAWtuD,KAAMkvD,EAAoBH,GACrCjjB,EAAUqlB,GACVpD,EAAS/jB,KAAKhqC,MACd,IAAI45C,EAAQyH,EAAiBrhD,MAC7B,IACEmxD,EAAS5vD,GAAK2vD,GAAiBtX,GAAQr4C,GAAK0vD,GAAgBrX,IAC5D,MAAOp6C,GACPyxD,GAAerX,EAAOp6C,MAGuBkE,WAEjDqqD,EAAW,SAAiBoD,GAC1B7H,EAAiBtpD,KAAM,CACrBP,KAAMsvD,EACN9wB,MAAM,EACNgyB,UAAU,EACV5hC,QAAQ,EACR8hC,UAAW,GACXM,WAAW,EACX7W,MA7MQ,EA8MRlwC,WAAOyB,MAGFzH,UAAY0qD,EAAYe,EAA6B,CAG5DjT,KAAM,SAAckV,EAAaC,GAC/B,IAAIzX,EAAQoV,EAAwBhvD,MAChCswD,EAAWpP,EAAqBsN,EAAmBxuD,KAAMkvD,IAO7D,OANAoB,EAASF,GAA2B,mBAAfgB,GAA4BA,EACjDd,EAASE,KAA4B,mBAAda,GAA4BA,EACnDf,EAAS1T,OAASL,EAAU7I,EAAQkJ,YAASzxC,EAC7CyuC,EAAMvrB,QAAS,EACfurB,EAAMuW,UAAU3xD,KAAK8xD,GA3Nb,GA4NJ1W,EAAMA,OAAkBmC,GAAOnC,GAAO,GACnC0W,EAASxyB,SAIlB,MAAS,SAAUuzB,GACjB,OAAOrxD,KAAKk8C,UAAK/wC,EAAWkmD,MAGhCrD,EAAuB,WACrB,IAAIlwB,EAAU,IAAIiwB,EACdnU,EAAQyH,EAAiBvjB,GAC7B99B,KAAK89B,QAAUA,EACf99B,KAAKuZ,QAAUhY,GAAK2vD,GAAiBtX,GACrC55C,KAAK49C,OAASr8C,GAAK0vD,GAAgBrX,IAErCgV,EAA2BtmB,EAAI4Y,EAAuB,SAAUvX,GAC9D,OAAOA,IAAMulB,GAAsBvlB,IAAMskB,EACrC,IAAID,EAAqBrkB,GACzBylB,EAA4BzlB,KAG7BgG,GAAmC,mBAAjBwe,GAA+Bc,IAA2BprD,OAAOH,WAAW,CACjGwqD,EAAae,EAAuB/S,KAE/BuT,IAEH/f,EAASuf,EAAwB,QAAQ,SAAcmC,EAAaC,GAClE,IAAIpmB,EAAOjrC,KACX,OAAO,IAAIkvD,GAAmB,SAAU31C,EAASqkC,GAC/CsQ,EAAWlkB,KAAKiB,EAAM1xB,EAASqkC,MAC9B1B,KAAKkV,EAAaC,KAEpB,CAAE7P,QAAQ,IAGb9R,EAASuf,EAAwB,QAASE,EAAmC,MAAG,CAAE3N,QAAQ,KAI5F,WACSyN,EAAuBvjB,YAC9B,MAAOlsC,IAGLgwC,GACFA,EAAeyf,EAAwBE,GAK7CrxD,EAAE,CAAEszC,QAAQ,EAAMkgB,MAAM,EAAMtgB,OAAQb,GAAU,CAC9C53B,QAAS22C,IAGXxgB,EAAewgB,EAAoBH,GAAS,GAAO,GACnDV,EAAWU,GAEXd,EAAiBta,EAAWob,GAG5BjxD,EAAE,CAAEsD,OAAQ2tD,EAASta,MAAM,EAAMzD,OAAQb,GAAU,CAGjDyN,OAAQ,SAAgBnnC,GACtB,IAAI86C,EAAarQ,EAAqBlhD,MAEtC,OADAuxD,EAAW3T,OAAO5T,UAAK7+B,EAAWsL,GAC3B86C,EAAWzzB,WAItBhgC,EAAE,CAAEsD,OAAQ2tD,EAASta,MAAM,EAAMzD,OAAQrB,GAAWQ,GAAU,CAG5D52B,QAAS,SAAiB3a,GACxB,OAAO8vD,EAAe/e,GAAW3vC,OAASiuD,EAAiBiB,EAAqBlvD,KAAMpB,MAI1Fd,EAAE,CAAEsD,OAAQ2tD,EAASta,MAAM,EAAMzD,OAAQ6e,IAAuB,CAG9DC,IAAK,SAAa7U,GAChB,IAAItR,EAAI3pC,KACJuxD,EAAarQ,EAAqBvX,GAClCpwB,EAAUg4C,EAAWh4C,QACrBqkC,EAAS2T,EAAW3T,OACpB3+B,EAAS4vC,GAAQ,WACnB,IAAI2C,EAAkB1lB,EAAUnC,EAAEpwB,SAC9B0Z,EAAS,GACTiyB,EAAU,EACVuM,EAAY,EAChBlD,EAAQtT,GAAU,SAAUnd,GAC1B,IAAItzB,EAAQ06C,IACRwM,GAAgB,EACpBz+B,EAAOz0B,UAAK2M,GACZsmD,IACAD,EAAgBxnB,KAAKL,EAAG7L,GAASoe,MAAK,SAAUxyC,GAC1CgoD,IACJA,GAAgB,EAChBz+B,EAAOzoB,GAASd,IACd+nD,GAAal4C,EAAQ0Z,MACtB2qB,QAEH6T,GAAal4C,EAAQ0Z,MAGzB,OADIhU,EAAOzf,OAAOo+C,EAAO3+B,EAAOvV,OACzB6nD,EAAWzzB,SAIpB6zB,KAAM,SAAc1W,GAClB,IAAItR,EAAI3pC,KACJuxD,EAAarQ,EAAqBvX,GAClCiU,EAAS2T,EAAW3T,OACpB3+B,EAAS4vC,GAAQ,WACnB,IAAI2C,EAAkB1lB,EAAUnC,EAAEpwB,SAClCg1C,EAAQtT,GAAU,SAAUnd,GAC1B0zB,EAAgBxnB,KAAKL,EAAG7L,GAASoe,KAAKqV,EAAWh4C,QAASqkC,SAI9D,OADI3+B,EAAOzf,OAAOo+C,EAAO3+B,EAAOvV,OACzB6nD,EAAWzzB,iCCtYtB,IAAIhgC,EAAI,EAAQ,MACZ61C,EAAa,EAAQ,MACrB7H,EAAY,EAAQ,MACpBe,EAAW,EAAQ,MACnB7E,EAAW,EAAQ,KACnBE,EAAS,EAAQ,IACjB3mC,EAAO,EAAQ,MACf+pC,EAAQ,EAAQ,MAEhBsmB,EAAkBje,EAAW,UAAW,aAMxCke,EAAiBvmB,GAAM,WACzB,SAASzrB,KACT,QAAS+xC,GAAgB,cAA6B,GAAI/xC,aAAcA,MAEtEiyC,GAAYxmB,GAAM,WACpBsmB,GAAgB,kBAEdzhB,EAAS0hB,GAAkBC,EAE/Bh0D,EAAE,CAAEsD,OAAQ,UAAWqzC,MAAM,EAAMzD,OAAQb,EAAQwE,KAAMxE,GAAU,CACjEqG,UAAW,SAAmBub,EAAQ5uB,GACpC2I,EAAUimB,GACVllB,EAAS1J,GACT,IAAI6uB,EAAYpuD,UAAUrF,OAAS,EAAIwzD,EAASjmB,EAAUloC,UAAU,IACpE,GAAIkuD,IAAaD,EAAgB,OAAOD,EAAgBG,EAAQ5uB,EAAM6uB,GACtE,GAAID,GAAUC,EAAW,CAEvB,OAAQ7uB,EAAK5kC,QACX,KAAK,EAAG,OAAO,IAAIwzD,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAO5uB,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAI4uB,EAAO5uB,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAI4uB,EAAO5uB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAI4uB,EAAO5uB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAI8uB,EAAQ,CAAC,MAEb,OADAA,EAAMzzD,KAAKmF,MAAMsuD,EAAO9uB,GACjB,IAAK5hC,EAAKoC,MAAMouD,EAAQE,IAGjC,IAAIlhB,EAAQihB,EAAUtuD,UAClBwuD,EAAWhqB,EAAOF,EAAS+I,GAASA,EAAQltC,OAAOH,WACnDub,EAAS03B,SAAShzC,MAAMqmC,KAAK+nB,EAAQG,EAAU/uB,GACnD,OAAO6E,EAAS/oB,GAAUA,EAASizC,2BChDvC,IAAIp0D,EAAI,EAAQ,MACZkqC,EAAW,EAAQ,KACnB6E,EAAW,EAAQ,MACnBxwB,EAAM,EAAQ,MACd2xB,EAAiC,EAAQ,MACzCO,EAAiB,EAAQ,MAgB7BzwC,EAAE,CAAEsD,OAAQ,UAAWqzC,MAAM,GAAQ,CACnC3yC,IAbF,SAASA,EAAIV,EAAQguC,GACnB,IACIiF,EAAY3wC,EADZyuD,EAAWvuD,UAAUrF,OAAS,EAAI6C,EAASwC,UAAU,GAEzD,OAAIipC,EAASzrC,KAAY+wD,EAAiB/wD,EAAOguC,IAC7CiF,EAAarG,EAA+B1F,EAAElnC,EAAQguC,IAAqB/yB,EAAIg4B,EAAY,SAC3FA,EAAW3qC,WACQyB,IAAnBkpC,EAAWvyC,SACTqJ,EACAkpC,EAAWvyC,IAAIkoC,KAAKmoB,GACtBnqB,EAAStkC,EAAY6qC,EAAentC,IAAiBU,EAAI4B,EAAW0rC,EAAa+iB,QAArF,wCCjBF,IAAIr0D,EAAI,EAAQ,MACZ6W,EAAO,EAAQ,MAInB7W,EAAE,CAAEsD,OAAQ,SAAU2vC,OAAO,EAAMC,OAAQ,IAAIr8B,OAASA,GAAQ,CAC9DA,KAAMA,uCCNR,IAAI+6B,EAAW,EAAQ,MACnB7C,EAAW,EAAQ,MACnBulB,EAAY,EAAQ,MACpB9mB,EAAQ,EAAQ,MAChB+J,EAAQ,EAAQ,MAEhBgd,EAAY,WACZxd,EAAkBC,OAAOpxC,UACzB4uD,EAAiBzd,EAAyB,SAE1C0d,EAAcjnB,GAAM,WAAc,MAA2D,QAApDgnB,EAAetoB,KAAK,CAAEiE,OAAQ,IAAKoH,MAAO,SAEnFmd,EAAiBF,EAAetgD,MAAQqgD,GAIxCE,GAAeC,IACjB9iB,EAASoF,OAAOpxC,UAAW2uD,GAAW,WACpC,IAAI3Q,EAAI7U,EAAS7sC,MACb8c,EAAIs1C,EAAU1Q,EAAEzT,QAChB/U,EAAKwoB,EAAErM,MAEX,MAAO,IAAMv4B,EAAI,IADTs1C,OAAiBjnD,IAAP+tB,GAAoBwoB,aAAa5M,UAAY,UAAWD,GAAmBQ,EAAMrL,KAAK0X,GAAKxoB,KAE5G,CAAEsoB,QAAQ,uCCvBf,IAAI1jD,EAAI,EAAQ,MACZ20D,EAAa,EAAQ,MACrB/O,EAAyB,EAAQ,MACjCpyB,EAAW,EAAQ,MAKvBxzB,EAAE,CAAEsD,OAAQ,SAAU2vC,OAAO,EAAMC,QAJR,EAAQ,KAIS0hB,CAAqB,aAAe,CAC9EnsD,SAAU,SAAkBosD,GAC1B,SAAUrhC,EAASoyB,EAAuB1jD,OACvC4G,QAAQ0qB,EAASmhC,EAAWE,IAAgB/uD,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,yCCXzF,IAAIs9B,EAAS,eACTnX,EAAW,EAAQ,MACnB8vB,EAAsB,EAAQ,MAC9BgI,EAAiB,EAAQ,KAEzBwJ,EAAkB,kBAClBtJ,EAAmBlI,EAAoBr9C,IACvCs9C,EAAmBD,EAAoBjH,UAAUyY,GAIrDxJ,EAAerhB,OAAQ,UAAU,SAAUwhB,GACzCD,EAAiBtpD,KAAM,CACrBP,KAAMmzD,EACNlY,OAAQppB,EAASi4B,GACjB/+C,MAAO,OAIR,WACD,IAGIqoD,EAHAjZ,EAAQyH,EAAiBrhD,MACzB06C,EAASd,EAAMc,OACflwC,EAAQovC,EAAMpvC,MAElB,OAAIA,GAASkwC,EAAOn8C,OAAe,CAAEmL,WAAOyB,EAAW8yB,MAAM,IAC7D40B,EAAQpqB,EAAOiS,EAAQlwC,GACvBovC,EAAMpvC,OAASqoD,EAAMt0D,OACd,CAAEmL,MAAOmpD,EAAO50B,MAAM,0CC3B/B,IAAI60B,EAAgC,EAAQ,MACxCxnB,EAAQ,EAAQ,MAChBuB,EAAW,EAAQ,MACnB4W,EAAY,EAAQ,MACpBra,EAAW,EAAQ,MACnB9X,EAAW,EAAQ,MACnBoyB,EAAyB,EAAQ,MACjCqP,EAAqB,EAAQ,MAC7BC,EAAkB,EAAQ,KAC1BC,EAAa,EAAQ,MAGrBC,EAFkB,EAAQ,KAEhBjrB,CAAgB,WAC1BtlC,EAAMH,KAAKG,IACX6G,EAAMhH,KAAKgH,IAQX2pD,EAEgC,OAA3B,IAAIhpD,QAAQ,IAAK,MAItBipD,IACE,IAAIF,IAC6B,KAA5B,IAAIA,GAAS,IAAK,MAiB7BJ,EAA8B,WAAW,SAAUO,EAAGnR,EAAeoR,GACnE,IAAIC,EAAoBH,EAA+C,IAAM,KAE7E,MAAO,CAGL,SAAiBI,EAAaC,GAC5B,IAAI/pB,EAAIga,EAAuB1jD,MAC3B0zD,EAA0BvoD,MAAfqoD,OAA2BroD,EAAYqoD,EAAYN,GAClE,YAAoB/nD,IAAbuoD,EACHA,EAAS1pB,KAAKwpB,EAAa9pB,EAAG+pB,GAC9BvR,EAAclY,KAAK1Y,EAASoY,GAAI8pB,EAAaC,IAInD,SAAU/Y,EAAQ+Y,GAChB,IAAIE,EAAK9mB,EAAS7sC,MACd0oC,EAAIpX,EAASopB,GAEjB,GAC0B,iBAAjB+Y,IACsC,IAA7CA,EAAa7sD,QAAQ2sD,KACW,IAAhCE,EAAa7sD,QAAQ,MACrB,CACA,IAAI4R,EAAM86C,EAAgBpR,EAAeyR,EAAIjrB,EAAG+qB,GAChD,GAAIj7C,EAAIylB,KAAM,OAAOzlB,EAAI9O,MAG3B,IAAIkqD,EAA4C,mBAAjBH,EAC1BG,IAAmBH,EAAeniC,EAASmiC,IAEhD,IAAIriB,EAASuiB,EAAGviB,OAChB,GAAIA,EAAQ,CACV,IAAIyiB,EAAcF,EAAGhrB,QACrBgrB,EAAG36B,UAAY,EAGjB,IADA,IAAI86B,EAAU,KACD,CACX,IAAI70C,EAASg0C,EAAWU,EAAIjrB,GAC5B,GAAe,OAAXzpB,EAAiB,MAGrB,GADA60C,EAAQt1D,KAAKygB,IACRmyB,EAAQ,MAGI,KADF9f,EAASrS,EAAO,MACV00C,EAAG36B,UAAY+5B,EAAmBrqB,EAAGU,EAASuqB,EAAG36B,WAAY66B,IAKpF,IAFA,IA/EwBhsB,EA+EpBksB,EAAoB,GACpBC,EAAqB,EAChB11D,EAAI,EAAGA,EAAIw1D,EAAQv1D,OAAQD,IAAK,CACvC2gB,EAAS60C,EAAQx1D,GAUjB,IARA,IAAI04C,EAAU1lB,EAASrS,EAAO,IAC1BwM,EAAW9oB,EAAI6G,EAAIi6C,EAAUxkC,EAAOzU,OAAQk+B,EAAEnqC,QAAS,GACvD04C,EAAW,GAMN5K,EAAI,EAAGA,EAAIptB,EAAO1gB,OAAQ8tC,IAAK4K,EAASz4C,UA3FzC2M,KADc08B,EA4F8C5oB,EAAOotB,IA3FvDxE,EAAKE,OAAOF,IA4FhC,IAAIqP,EAAgBj4B,EAAO0jC,OAC3B,GAAIiR,EAAmB,CACrB,IAAIK,EAAe,CAACjd,GAASjvB,OAAOkvB,EAAUxrB,EAAUid,QAClCv9B,IAAlB+rC,GAA6B+c,EAAaz1D,KAAK04C,GACnD,IAAIC,EAAc7lB,EAASmiC,EAAa9vD,WAAMwH,EAAW8oD,SAEzD9c,EAAc6b,EAAgBhc,EAAStO,EAAGjd,EAAUwrB,EAAUC,EAAeuc,GAE3EhoC,GAAYuoC,IACdD,GAAqBrrB,EAAEh5B,MAAMskD,EAAoBvoC,GAAY0rB,EAC7D6c,EAAqBvoC,EAAWurB,EAAQz4C,QAG5C,OAAOw1D,EAAoBrrB,EAAEh5B,MAAMskD,SAvFJ1oB,GAAM,WACzC,IAAI8J,EAAK,IAOT,OANAA,EAAGzgC,KAAO,WACR,IAAIsK,EAAS,GAEb,OADAA,EAAO0jC,OAAS,CAAEtpB,EAAG,KACdpa,GAGyB,MAA3B,GAAG9U,QAAQirC,EAAI,aAkFc+d,GAAoBC,sCC7H1D,IAAIN,EAAgC,EAAQ,MACxCjmB,EAAW,EAAQ,MACnB6W,EAAyB,EAAQ,MACjCwQ,EAAY,EAAQ,MACpB5iC,EAAW,EAAQ,MACnB2hC,EAAa,EAAQ,MAGzBH,EAA8B,UAAU,SAAUqB,EAAQC,EAAcd,GACtE,MAAO,CAGL,SAAgBllB,GACd,IAAI1E,EAAIga,EAAuB1jD,MAC3Bq0D,EAAqBlpD,MAAVijC,OAAsBjjC,EAAYijC,EAAO+lB,GACxD,YAAoBhpD,IAAbkpD,EAAyBA,EAASrqB,KAAKoE,EAAQ1E,GAAK,IAAIoL,OAAO1G,GAAQ+lB,GAAQ7iC,EAASoY,KAIjG,SAAUgR,GACR,IAAIiZ,EAAK9mB,EAAS7sC,MACd0oC,EAAIpX,EAASopB,GACbliC,EAAM86C,EAAgBc,EAAcT,EAAIjrB,GAE5C,GAAIlwB,EAAIylB,KAAM,OAAOzlB,EAAI9O,MAEzB,IAAI4qD,EAAoBX,EAAG36B,UACtBk7B,EAAUI,EAAmB,KAAIX,EAAG36B,UAAY,GACrD,IAAI/Z,EAASg0C,EAAWU,EAAIjrB,GAE5B,OADKwrB,EAAUP,EAAG36B,UAAWs7B,KAAoBX,EAAG36B,UAAYs7B,GAC9C,OAAXr1C,GAAmB,EAAIA,EAAOzU,8CC9B3C,IAAIsoD,EAAgC,EAAQ,MACxClY,EAAW,EAAQ,MACnB/N,EAAW,EAAQ,MACnB6W,EAAyB,EAAQ,MACjC8K,EAAqB,EAAQ,MAC7BuE,EAAqB,EAAQ,MAC7B3pB,EAAW,EAAQ,MACnB9X,EAAW,EAAQ,MACnBijC,EAAiB,EAAQ,MACzB3f,EAAa,EAAQ,MACrBkN,EAAgB,EAAQ,MACxBxW,EAAQ,EAAQ,MAEhB+W,EAAgBP,EAAcO,cAC9BmS,EAAY,GAAGh2D,KACfgL,EAAMhH,KAAKgH,IACXirD,EAAa,WAcjB3B,EAA8B,SAAS,SAAU4B,EAAOC,EAAarB,GACnE,IAAIsB,EAqDJ,OAzCEA,EAV2B,KAA3B,OAAOz2D,MAAM,QAAQ,IAEc,GAAnC,OAAOA,MAAM,QAAS,GAAGI,QACO,GAAhC,KAAKJ,MAAM,WAAWI,QACU,GAAhC,IAAIJ,MAAM,YAAYI,QAEtB,IAAIJ,MAAM,QAAQI,OAAS,GAC3B,GAAGJ,MAAM,MAAMI,OAGC,SAAU6jC,EAAWyyB,GACnC,IAAIna,EAASppB,EAASoyB,EAAuB1jD,OACzC80D,OAAgB3pD,IAAV0pD,EAAsBJ,EAAaI,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,QAAkB3pD,IAAdi3B,EAAyB,MAAO,CAACsY,GAErC,IAAKE,EAASxY,GACZ,OAAOuyB,EAAY3qB,KAAK0Q,EAAQtY,EAAW0yB,GAW7C,IATA,IAQI17B,EAAOJ,EAAW+7B,EARlB/P,EAAS,GACT3P,GAASjT,EAAU4gB,WAAa,IAAM,KAC7B5gB,EAAU2gB,UAAY,IAAM,KAC5B3gB,EAAUuG,QAAU,IAAM,KAC1BvG,EAAUwgB,OAAS,IAAM,IAClCoS,EAAgB,EAEhBC,EAAgB,IAAIngB,OAAO1S,EAAU6L,OAAQoH,EAAQ,MAElDjc,EAAQwb,EAAW5K,KAAKirB,EAAeva,QAC5C1hB,EAAYi8B,EAAcj8B,WACVg8B,IACdhQ,EAAOxmD,KAAKk8C,EAAOhrC,MAAMslD,EAAe57B,EAAM5uB,QAC1C4uB,EAAM76B,OAAS,GAAK66B,EAAM5uB,MAAQkwC,EAAOn8C,QAAQi2D,EAAU7wD,MAAMqhD,EAAQ5rB,EAAM1pB,MAAM,IACzFqlD,EAAa37B,EAAM,GAAG76B,OACtBy2D,EAAgBh8B,EACZgsB,EAAOzmD,QAAUu2D,KAEnBG,EAAcj8B,YAAcI,EAAM5uB,OAAOyqD,EAAcj8B,YAK7D,OAHIg8B,IAAkBta,EAAOn8C,QACvBw2D,GAAeE,EAAc97C,KAAK,KAAK6rC,EAAOxmD,KAAK,IAClDwmD,EAAOxmD,KAAKk8C,EAAOhrC,MAAMslD,IACzBhQ,EAAOzmD,OAASu2D,EAAM9P,EAAOt1C,MAAM,EAAGolD,GAAO9P,GAG7C,IAAI7mD,WAAMgN,EAAW,GAAG5M,OACjB,SAAU6jC,EAAWyyB,GACnC,YAAqB1pD,IAAdi3B,GAAqC,IAAVyyB,EAAc,GAAKF,EAAY3qB,KAAKhqC,KAAMoiC,EAAWyyB,IAEpEF,EAEhB,CAGL,SAAevyB,EAAWyyB,GACxB,IAAInrB,EAAIga,EAAuB1jD,MAC3Bk1D,EAAwB/pD,MAAbi3B,OAAyBj3B,EAAYi3B,EAAUsyB,GAC9D,YAAoBvpD,IAAb+pD,EACHA,EAASlrB,KAAK5H,EAAWsH,EAAGmrB,GAC5BD,EAAc5qB,KAAK1Y,EAASoY,GAAItH,EAAWyyB,IAOjD,SAAUna,EAAQma,GAChB,IAAIlB,EAAK9mB,EAAS7sC,MACd0oC,EAAIpX,EAASopB,GACbliC,EAAM86C,EAAgBsB,EAAejB,EAAIjrB,EAAGmsB,EAAOD,IAAkBD,GAEzE,GAAIn8C,EAAIylB,KAAM,OAAOzlB,EAAI9O,MAEzB,IAAIigC,EAAI6kB,EAAmBmF,EAAI7e,QAE3BqgB,EAAkBxB,EAAGhrB,QACrB0M,GAASse,EAAG3Q,WAAa,IAAM,KACtB2Q,EAAG5Q,UAAY,IAAM,KACrB4Q,EAAGhrB,QAAU,IAAM,KACnB0Z,EAAgB,IAAM,KAI/B6S,EAAW,IAAIvrB,EAAE0Y,EAAgB,OAASsR,EAAG1lB,OAAS,IAAM0lB,EAAIte,GAChEyf,OAAgB3pD,IAAV0pD,EAAsBJ,EAAaI,IAAU,EACvD,GAAY,IAARC,EAAW,MAAO,GACtB,GAAiB,IAAbpsB,EAAEnqC,OAAc,OAAuC,OAAhCg2D,EAAeW,EAAUxsB,GAAc,CAACA,GAAK,GAIxE,IAHA,IAAI5rB,EAAI,EACJ4oC,EAAI,EACJtH,EAAI,GACDsH,EAAIhd,EAAEnqC,QAAQ,CACnB22D,EAASl8B,UAAYqpB,EAAgB,EAAIqD,EACzC,IACIjkD,EADA0rD,EAAIoH,EAAeW,EAAU7S,EAAgB3Z,EAAEh5B,MAAMg2C,GAAKhd,GAE9D,GACQ,OAANykB,IACC1rD,EAAI+H,EAAI4/B,EAAS8rB,EAASl8B,WAAaqpB,EAAgBqD,EAAI,IAAKhd,EAAEnqC,WAAaue,EAEhF4oC,EAAIqN,EAAmBrqB,EAAGgd,EAAGyP,OACxB,CAEL,GADA/W,EAAE5/C,KAAKkqC,EAAEh5B,MAAMoN,EAAG4oC,IACdtH,EAAE7/C,SAAWu2D,EAAK,OAAO1W,EAC7B,IAAK,IAAI9/C,EAAI,EAAGA,GAAK6uD,EAAE5uD,OAAS,EAAGD,IAEjC,GADA8/C,EAAE5/C,KAAK2uD,EAAE7uD,IACL8/C,EAAE7/C,SAAWu2D,EAAK,OAAO1W,EAE/BsH,EAAI5oC,EAAIrb,GAIZ,OADA28C,EAAE5/C,KAAKkqC,EAAEh5B,MAAMoN,IACRshC,QA3H4B9S,GAAM,WAE7C,IAAI8J,EAAK,OACLggB,EAAehgB,EAAGzgC,KACtBygC,EAAGzgC,KAAO,WAAc,OAAOygD,EAAazxD,MAAM3D,KAAM4D,YACxD,IAAIqb,EAAS,KAAK9gB,MAAMi3C,GACxB,OAAyB,IAAlBn2B,EAAO1gB,QAA8B,MAAd0gB,EAAO,IAA4B,MAAdA,EAAO,MAwHrBojC,sCChJvC,IAAIvkD,EAAI,EAAQ,MACZixC,EAAc,EAAQ,MACtBqC,EAAS,EAAQ,MACjB/0B,EAAM,EAAQ,MACd2rB,EAAW,EAAQ,KACnBlkC,EAAiB,UACjBmwC,EAA4B,EAAQ,MAEpCohB,EAAejkB,EAAOD,OAE1B,GAAIpC,GAAsC,mBAAhBsmB,MAAiC,gBAAiBA,EAAa3xD,iBAExDyH,IAA/BkqD,IAAeC,aACd,CACD,IAAIC,EAA8B,GAE9BC,EAAgB,WAClB,IAAIF,EAAc1xD,UAAUrF,OAAS,QAAsB4M,IAAjBvH,UAAU,QAAmBuH,EAAY48B,OAAOnkC,UAAU,IAChGqb,EAASjf,gBAAgBw1D,EACzB,IAAIH,EAAaC,QAEDnqD,IAAhBmqD,EAA4BD,IAAiBA,EAAaC,GAE9D,MADoB,KAAhBA,IAAoBC,EAA4Bt2C,IAAU,GACvDA,GAETg1B,EAA0BuhB,EAAeH,GACzC,IAAII,EAAkBD,EAAc9xD,UAAY2xD,EAAa3xD,UAC7D+xD,EAAgB/pB,YAAc8pB,EAE9B,IAAIE,EAAiBD,EAAgBnkC,SACjCqkC,EAAyC,gBAAhC5tB,OAAOstB,EAAa,SAC7BjnB,EAAS,wBACbtqC,EAAe2xD,EAAiB,cAAe,CAC7CltB,cAAc,EACdzmC,IAAK,WACH,IAAIu7C,EAASrV,EAAShoC,MAAQA,KAAKihD,UAAYjhD,KAC3C06C,EAASgb,EAAe1rB,KAAKqT,GACjC,GAAIhhC,EAAIk5C,EAA6BlY,GAAS,MAAO,GACrD,IAAIuY,EAAOD,EAASjb,EAAOhrC,MAAM,GAAI,GAAKgrC,EAAOvwC,QAAQikC,EAAQ,MACjE,MAAgB,KAATwnB,OAAczqD,EAAYyqD,KAIrC93D,EAAE,CAAEszC,QAAQ,EAAMJ,QAAQ,GAAQ,CAChCG,OAAQqkB,2BC/CgB,EAAQ,KAIpCK,CAAsB,+CCHtB,IAAI/3D,EAAI,EAAQ,MACZszC,EAAS,EAAQ,MACjBuC,EAAa,EAAQ,MACrBhE,EAAU,EAAQ,MAClBZ,EAAc,EAAQ,MACtB8Y,EAAgB,EAAQ,KACxBvc,EAAQ,EAAQ,MAChBjvB,EAAM,EAAQ,MACdqwB,EAAU,EAAQ,MAClB1E,EAAW,EAAQ,KACnBuf,EAAW,EAAQ,MACnB1a,EAAW,EAAQ,MACnB5D,EAAW,EAAQ,MACnBgB,EAAkB,EAAQ,MAC1BkF,EAAgB,EAAQ,MACxBijB,EAAY,EAAQ,MACpB3jB,EAA2B,EAAQ,MACnCqnB,EAAqB,EAAQ,IAC7B/X,EAAa,EAAQ,MACrBzF,EAA4B,EAAQ,MACpCyd,EAA8B,EAAQ,MACtC/X,EAA8B,EAAQ,MACtChQ,EAAiC,EAAQ,MACzC7F,EAAuB,EAAQ,MAC/B8V,EAA6B,EAAQ,MACrCxO,EAA8B,EAAQ,MACtCC,EAAW,EAAQ,MACnB+J,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBrB,EAAa,EAAQ,MACrBG,EAAM,EAAQ,MACdvQ,EAAkB,EAAQ,MAC1BiJ,EAA+B,EAAQ,MACvC2kB,EAAwB,EAAQ,MAChCnnB,EAAiB,EAAQ,MACzB0S,EAAsB,EAAQ,MAC9BvY,EAAW,gBAEXmtB,EAAStc,EAAU,UACnB1E,EAAS,SAETwS,EAAevf,EAAgB,eAC/BqhB,EAAmBlI,EAAoBr9C,IACvCs9C,EAAmBD,EAAoBjH,UAAUnF,GACjDqL,EAAkBx8C,OAAgB,UAClCi3C,EAAU1J,EAAOD,OACjB8kB,EAAatiB,EAAW,OAAQ,aAChC8Z,EAAiCzf,EAA+B1F,EAChE4tB,EAAuB/tB,EAAqBG,EAC5C6tB,EAA4BJ,EAA4BztB,EACxD8tB,EAA6BnY,EAA2B3V,EACxD+tB,EAAa5c,EAAO,WACpB6c,EAAyB7c,EAAO,cAChC8c,GAAyB9c,EAAO,6BAChC+c,GAAyB/c,EAAO,6BAChCqO,GAAwBrO,EAAO,OAC/Bgd,GAAUrlB,EAAOqlB,QAEjBC,IAAcD,KAAYA,GAAiB,YAAMA,GAAiB,UAAEE,UAGpEC,GAAsB7nB,GAAezD,GAAM,WAC7C,OAES,GAFFwqB,EAAmBI,EAAqB,GAAI,IAAK,CACtDp0D,IAAK,WAAc,OAAOo0D,EAAqBl2D,KAAM,IAAK,CAAE0J,MAAO,IAAK2vB,MACtEA,KACD,SAAUqQ,EAAGmW,EAAGC,GACnB,IAAI+W,EAA4BpJ,EAA+BpN,EAAiBR,GAC5EgX,UAAkCxW,EAAgBR,GACtDqW,EAAqBxsB,EAAGmW,EAAGC,GACvB+W,GAA6BntB,IAAM2W,GACrC6V,EAAqB7V,EAAiBR,EAAGgX,IAEzCX,EAEA5E,GAAO,SAAU1jB,EAAK0nB,GACxB,IAAIjY,EAASgZ,EAAWzoB,GAAOkoB,EAAmBhb,EAAiB,WAOnE,OANAwO,EAAiBjM,EAAQ,CACvB59C,KAAMu1C,EACNpH,IAAKA,EACL0nB,YAAaA,IAEVvmB,IAAasO,EAAOiY,YAAcA,GAChCjY,GAGLuC,GAAkB,SAAwBlW,EAAGmW,EAAGC,GAC9CpW,IAAM2W,GAAiBT,GAAgB0W,EAAwBzW,EAAGC,GACtEjT,EAASnD,GACT,IAAIlB,EAAM2G,EAAc0Q,GAExB,OADAhT,EAASiT,GACLzjC,EAAIg6C,EAAY7tB,IACbsX,EAAW7Q,YAIV5yB,EAAIqtB,EAAGssB,IAAWtsB,EAAEssB,GAAQxtB,KAAMkB,EAAEssB,GAAQxtB,IAAO,GACvDsX,EAAagW,EAAmBhW,EAAY,CAAE7Q,WAAYR,EAAyB,GAAG,OAJjFpyB,EAAIqtB,EAAGssB,IAASE,EAAqBxsB,EAAGssB,EAAQvnB,EAAyB,EAAG,KACjF/E,EAAEssB,GAAQxtB,IAAO,GAIVouB,GAAoBltB,EAAGlB,EAAKsX,IAC9BoW,EAAqBxsB,EAAGlB,EAAKsX,IAGpCgX,GAAoB,SAA0BptB,EAAGgW,GACnD7S,EAASnD,GACT,IAAIqtB,EAAa9sB,EAAgByV,GAC7BtrB,EAAO2pB,EAAWgZ,GAAYhvC,OAAOivC,GAAuBD,IAIhE,OAHAluB,EAASzU,GAAM,SAAUoU,GAClBuG,IAAewR,GAAsBvW,KAAK+sB,EAAYvuB,IAAMoX,GAAgBlW,EAAGlB,EAAKuuB,EAAWvuB,OAE/FkB,GAOL6W,GAAwB,SAA8BE,GACxD,IAAIZ,EAAI1Q,EAAcsR,GAClBxR,EAAamnB,EAA2BpsB,KAAKhqC,KAAM6/C,GACvD,QAAI7/C,OAASqgD,GAAmBhkC,EAAIg6C,EAAYxW,KAAOxjC,EAAIi6C,EAAwBzW,QAC5E5Q,IAAe5yB,EAAIrc,KAAM6/C,KAAOxjC,EAAIg6C,EAAYxW,IAAMxjC,EAAIrc,KAAMg2D,IAAWh2D,KAAKg2D,GAAQnW,KAAK5Q,IAGlG8Q,GAA4B,SAAkCrW,EAAGmW,GACnE,IAAIhY,EAAKoC,EAAgBP,GACrBlB,EAAM2G,EAAc0Q,GACxB,GAAIhY,IAAOwY,IAAmBhkC,EAAIg6C,EAAY7tB,IAASnsB,EAAIi6C,EAAwB9tB,GAAnF,CACA,IAAI6L,EAAaoZ,EAA+B5lB,EAAIW,GAIpD,OAHI6L,IAAch4B,EAAIg6C,EAAY7tB,IAAUnsB,EAAIwrB,EAAImuB,IAAWnuB,EAAGmuB,GAAQxtB,KACxE6L,EAAWpF,YAAa,GAEnBoF,IAGL2L,GAAuB,SAA6BtW,GACtD,IAAI4W,EAAQ6V,EAA0BlsB,EAAgBP,IAClDzqB,EAAS,GAIb,OAHA4pB,EAASyX,GAAO,SAAU9X,GACnBnsB,EAAIg6C,EAAY7tB,IAASnsB,EAAIg8B,EAAY7P,IAAMvpB,EAAOzgB,KAAKgqC,MAE3DvpB,GAGL+3C,GAAyB,SAA+BttB,GAC1D,IAAIutB,EAAsBvtB,IAAM2W,EAC5BC,EAAQ6V,EAA0Bc,EAAsBX,EAAyBrsB,EAAgBP,IACjGzqB,EAAS,GAMb,OALA4pB,EAASyX,GAAO,SAAU9X,IACpBnsB,EAAIg6C,EAAY7tB,IAAUyuB,IAAuB56C,EAAIgkC,EAAiB7X,IACxEvpB,EAAOzgB,KAAK63D,EAAW7tB,OAGpBvpB,GAKJ4oC,IAcHnY,GAbAoL,EAAU,WACR,GAAI96C,gBAAgB86C,EAAS,MAAMhT,UAAU,+BAC7C,IAAIwtB,EAAe1xD,UAAUrF,aAA2B4M,IAAjBvH,UAAU,GAA+BwuD,EAAUxuD,UAAU,SAAhCuH,EAChEyiC,EAAM4K,EAAI8c,GACV3U,EAAS,SAAUj3C,GACjB1J,OAASqgD,GAAiBM,EAAO3W,KAAKssB,EAAwB5sD,GAC9D2S,EAAIrc,KAAMg2D,IAAW35C,EAAIrc,KAAKg2D,GAASpoB,KAAM5tC,KAAKg2D,GAAQpoB,IAAO,GACrEgpB,GAAoB52D,KAAM4tC,EAAKa,EAAyB,EAAG/kC,KAG7D,OADIqlC,GAAe2nB,IAAYE,GAAoBvW,EAAiBzS,EAAK,CAAErF,cAAc,EAAMxkC,IAAK48C,IAC7F2Q,GAAK1jB,EAAK0nB,KAGO,UAAG,YAAY,WACvC,OAAOjU,EAAiBrhD,MAAM4tC,OAGhC8B,EAASoL,EAAS,iBAAiB,SAAUwa,GAC3C,OAAOhE,GAAK9Y,EAAI8c,GAAcA,MAGhCrX,EAA2B3V,EAAIiY,GAC/BpY,EAAqBG,EAAIsX,GACzB5R,EAA+B1F,EAAIyX,GACnCzH,EAA0BhQ,EAAIytB,EAA4BztB,EAAI0X,GAC9DhC,EAA4B1V,EAAI0uB,GAEhC9lB,EAA6B5I,EAAI,SAAUt2B,GACzC,OAAOs/C,GAAKrpB,EAAgBj2B,GAAOA,IAGjC+8B,IAEFmnB,EAAqBpb,EAAiB,UAAG,cAAe,CACtDvS,cAAc,EACdzmC,IAAK,WACH,OAAOu/C,EAAiBrhD,MAAMs1D,eAG7B3lB,GACHD,EAAS2Q,EAAiB,uBAAwBE,GAAuB,CAAEiB,QAAQ,MAKzF1jD,EAAE,CAAEszC,QAAQ,EAAMkgB,MAAM,EAAMtgB,QAAS6W,EAAelT,MAAOkT,GAAiB,CAC5E1W,OAAQ2J,IAGVjS,EAASkV,EAAW+J,KAAwB,SAAU91C,GACpD6jD,EAAsB7jD,MAGxBlU,EAAE,CAAEsD,OAAQ4zC,EAAQP,MAAM,EAAMzD,QAAS6W,GAAiB,CAGxD,IAAO,SAAUrf,GACf,IAAIkS,EAAS0X,EAAU5pB,GACvB,GAAInsB,EAAIk6C,GAAwB7b,GAAS,OAAO6b,GAAuB7b,GACvE,IAAI2C,EAASvC,EAAQJ,GAGrB,OAFA6b,GAAuB7b,GAAU2C,EACjCmZ,GAAuBnZ,GAAU3C,EAC1B2C,GAIT6Z,OAAQ,SAAgBC,GACtB,IAAK5P,EAAS4P,GAAM,MAAMrvB,UAAUqvB,EAAM,oBAC1C,GAAI96C,EAAIm6C,GAAwBW,GAAM,OAAOX,GAAuBW,IAEtEC,UAAW,WAAcV,IAAa,GACtCW,UAAW,WAAcX,IAAa,KAGxC54D,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,QAAS6W,EAAelT,MAAO5F,GAAe,CAG9E7G,OA3HY,SAAgBwB,EAAGgW,GAC/B,YAAsBv0C,IAAfu0C,EAA2BoW,EAAmBpsB,GAAKotB,GAAkBhB,EAAmBpsB,GAAIgW,IA6HnG57C,eAAgB87C,GAGhBnB,iBAAkBqY,GAGlB5oB,yBAA0B6R,KAG5BjiD,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,QAAS6W,GAAiB,CAG1D3O,oBAAqB8G,GAGrB5C,sBAAuB4Z,KAKzBl5D,EAAE,CAAEsD,OAAQ,SAAUqzC,MAAM,EAAMzD,OAAQ1F,GAAM,WAAc0S,EAA4B1V,EAAE,OAAU,CACpG8U,sBAAuB,SAA+BvV,GACpD,OAAOmW,EAA4B1V,EAAEW,EAASpB,OAM9CouB,GAWFn4D,EAAE,CAAEsD,OAAQ,OAAQqzC,MAAM,EAAMzD,QAVH6W,GAAiBvc,GAAM,WAClD,IAAI+R,EAASvC,IAEb,MAA+B,UAAxBmb,EAAW,CAAC5Y,KAEe,MAA7B4Y,EAAW,CAAE58B,EAAGgkB,KAEc,MAA9B4Y,EAAWpyD,OAAOw5C,QAGwC,CAE/D/Z,UAAW,SAAmBuE,EAAI6rB,EAAU4D,GAI1C,IAHA,IAEIC,EAFAp0B,EAAO,CAAC0E,GACRr9B,EAAQ,EAEL5G,UAAUrF,OAASiM,GAAO24B,EAAK3kC,KAAKoF,UAAU4G,MAErD,GADA+sD,EAAY7D,GACP1rB,EAAS0rB,SAAoBvoD,IAAP08B,KAAoB0f,EAAS1f,GAMxD,OALK6E,EAAQgnB,KAAWA,EAAW,SAAUlrB,EAAK9+B,GAEhD,GADwB,mBAAb6tD,IAAyB7tD,EAAQ6tD,EAAUvtB,KAAKhqC,KAAMwoC,EAAK9+B,KACjE69C,EAAS79C,GAAQ,OAAOA,IAE/By5B,EAAK,GAAKuwB,EACHuC,EAAWtyD,MAAM,KAAMw/B,MAO/B2X,EAAiB,UAAE0M,IACtB/X,EAA4BqL,EAAiB,UAAG0M,EAAc1M,EAAiB,UAAEmG,SAInFvS,EAAeoM,EAAS9F,GAExBqD,EAAW2d,IAAU,wBCjTO,EAAQ,KAIpCH,CAAsB,qCCJM,EAAQ,KAIpCA,CAAsB,qCCJtB,IAAIzkB,EAAS,EAAQ,MACjBomB,EAAe,EAAQ,MACvBnvD,EAAU,EAAQ,MAClBonC,EAA8B,EAAQ,MAE1C,IAAK,IAAIgoB,KAAmBD,EAAc,CACxC,IAAIE,EAAatmB,EAAOqmB,GACpBE,EAAsBD,GAAcA,EAAWh0D,UAEnD,GAAIi0D,GAAuBA,EAAoBtvD,UAAYA,EAAS,IAClEonC,EAA4BkoB,EAAqB,UAAWtvD,GAC5D,MAAO7I,GACPm4D,EAAoBtvD,QAAUA,0BCZlC,IAAI+oC,EAAS,EAAQ,MACjBomB,EAAe,EAAQ,MACvBI,EAAuB,EAAQ,MAC/BnoB,EAA8B,EAAQ,MACtCxH,EAAkB,EAAQ,MAE1B+E,EAAW/E,EAAgB,YAC3ByF,EAAgBzF,EAAgB,eAChC4vB,EAAcD,EAAqB3kC,OAEvC,IAAK,IAAIwkC,KAAmBD,EAAc,CACxC,IAAIE,EAAatmB,EAAOqmB,GACpBE,EAAsBD,GAAcA,EAAWh0D,UACnD,GAAIi0D,EAAqB,CAEvB,GAAIA,EAAoB3qB,KAAc6qB,EAAa,IACjDpoB,EAA4BkoB,EAAqB3qB,EAAU6qB,GAC3D,MAAOr4D,GACPm4D,EAAoB3qB,GAAY6qB,EAKlC,GAHKF,EAAoBjqB,IACvB+B,EAA4BkoB,EAAqBjqB,EAAe+pB,GAE9DD,EAAaC,GAAkB,IAAK,IAAIhsB,KAAemsB,EAEzD,GAAID,EAAoBlsB,KAAiBmsB,EAAqBnsB,GAAc,IAC1EgE,EAA4BkoB,EAAqBlsB,EAAamsB,EAAqBnsB,IACnF,MAAOjsC,GACPm4D,EAAoBlsB,GAAemsB,EAAqBnsB,yCC1BhE,EAAQ,MACR,IAAI3tC,EAAI,EAAQ,MACZ61C,EAAa,EAAQ,MACrBmkB,EAAiB,EAAQ,KACzBpoB,EAAW,EAAQ,MACnB0e,EAAc,EAAQ,MACtB1f,EAAiB,EAAQ,MACzBa,EAA4B,EAAQ,MACpC6R,EAAsB,EAAQ,MAC9BkN,EAAa,EAAQ,MACrB1W,EAAS,EAAQ,MACjBr2C,EAAO,EAAQ,MACfkyC,EAAU,EAAQ,KAClB5G,EAAW,EAAQ,MACnB7E,EAAW,EAAQ,KACnBoqB,EAAY,EAAQ,MACpBlqB,EAAS,EAAQ,IACjBuG,EAA2B,EAAQ,MACnCspB,EAAc,EAAQ,MACtBzuB,EAAoB,EAAQ,MAC5BrB,EAAkB,EAAQ,MAE1B+vB,EAAcrkB,EAAW,SACzBskB,EAAgBtkB,EAAW,WAC3BukB,EAAmBD,GAAiBA,EAAcv0D,UAClDy0D,EAAUxkB,EAAW,WACrB3G,EAAW/E,EAAgB,YAC3BmwB,EAAoB,kBACpBC,EAA6BD,0BAC7B9O,EAAmBlI,EAAoBr9C,IACvCu0D,EAAyBlX,EAAoBjH,UAAUie,GACvDG,EAA2BnX,EAAoBjH,UAAUke,GAEzDG,EAAO,MACPC,EAAYp6D,MAAM,GAElBq6D,EAAkB,SAAUC,GAC9B,OAAOF,EAAUE,EAAQ,KAAOF,EAAUE,EAAQ,GAAK7jB,OAAO,qBAAuB6jB,EAAQ,KAAM,QAGjGC,EAAgB,SAAUC,GAC5B,IACE,OAAO9yB,mBAAmB8yB,GAC1B,MAAOr5D,GACP,OAAOq5D,IAIPC,EAAc,SAAUjxB,GAC1B,IAAI5oB,EAAS4oB,EAAG19B,QAAQquD,EAAM,KAC1BG,EAAQ,EACZ,IACE,OAAO5yB,mBAAmB9mB,GAC1B,MAAOzf,GACP,KAAOm5D,GACL15C,EAASA,EAAO9U,QAAQuuD,EAAgBC,KAAUC,GAEpD,OAAO35C,IAIPnc,EAAO,eAEPqH,EAAU,CACZ,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,KAGLupD,EAAW,SAAUt6B,GACvB,OAAOjvB,EAAQivB,IAGb2/B,EAAY,SAAUlxB,GACxB,OAAO7B,mBAAmB6B,GAAI19B,QAAQrH,EAAM4wD,IAG1CsF,EAAoB,SAAU/5C,EAAQ5D,GACxC,GAAIA,EAIF,IAHA,IAEI49C,EAAWC,EAFXC,EAAa99C,EAAMld,MAAM,KACzBqM,EAAQ,EAELA,EAAQ2uD,EAAW56D,SACxB06D,EAAYE,EAAW3uD,MACTjM,SACZ26D,EAAQD,EAAU96D,MAAM,KACxB8gB,EAAOzgB,KAAK,CACVgqC,IAAKswB,EAAYI,EAAMryD,SACvB6C,MAAOovD,EAAYI,EAAMz6D,KAAK,UAOpC26D,EAAqB,SAAU/9C,GACjCrb,KAAK8wC,QAAQvyC,OAAS,EACtBy6D,EAAkBh5D,KAAK8wC,QAASz1B,IAG9Bg+C,EAA0B,SAAUC,EAAQC,GAC9C,GAAID,EAASC,EAAU,MAAMzxB,UAAU,yBAGrC0xB,EAA0BjqB,GAA0B,SAAkBn/B,EAAQo5C,GAChFF,EAAiBtpD,KAAM,CACrBP,KAAM44D,EACN5uB,SAAUsuB,EAAYO,EAAuBloD,GAAQ0gC,SACrD0Y,KAAMA,MAEP,YAAY,WACb,IAAI5P,EAAQ2e,EAAyBv4D,MACjCwpD,EAAO5P,EAAM4P,KACbhgB,EAAOoQ,EAAMnQ,SAAS9yB,OACtBuiD,EAAQ1vB,EAAK9/B,MAGf,OAFG8/B,EAAKvL,OACRuL,EAAK9/B,MAAiB,SAAT8/C,EAAkB0P,EAAM1wB,IAAe,WAATghB,EAAoB0P,EAAMxvD,MAAQ,CAACwvD,EAAM1wB,IAAK0wB,EAAMxvD,QACxF8/B,KAKPiwB,EAA6B,WAC/BnL,EAAWtuD,KAAMy5D,EAA4BrB,GAC7C,IAGIruB,EAAgBN,EAAU9yB,EAAM6yB,EAAMkwB,EAAeC,EAAW1yC,EAAOG,EAAQohB,EAH/EhX,EAAO5tB,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,EAC7C8/B,EAAOjrC,KACP8wC,EAAU,GAUd,GAPAwY,EAAiBre,EAAM,CACrBxrC,KAAM24D,EACNtnB,QAASA,EACT8oB,UAAW,aACXR,mBAAoBA,SAGTjuD,IAATqmB,EACF,GAAIwW,EAASxW,GAEX,GAA8B,mBAD9BuY,EAAiBT,EAAkB9X,IAIjC,IADA7a,GADA8yB,EAAWM,EAAeC,KAAKxY,IACf7a,OACP6yB,EAAO7yB,EAAKqzB,KAAKP,IAAWxL,MAAM,CAGzC,IACGhX,GAFH0yC,GADAD,EAAgB3B,EAAYlrB,EAASrD,EAAK9/B,SAChBiN,MAELqzB,KAAK0vB,IAAgBz7B,OACvC7W,EAASuyC,EAAU3vB,KAAK0vB,IAAgBz7B,OACxC07B,EAAU3vB,KAAK0vB,GAAez7B,KAC/B,MAAM6J,UAAU,mCAClBgJ,EAAQtyC,KAAK,CAAEgqC,IAAK4pB,EAAUnrC,EAAMvd,OAAQA,MAAO0oD,EAAUhrC,EAAO1d,cAEjE,IAAK8+B,KAAOhX,EAAUomB,EAAOpmB,EAAMgX,IAAMsI,EAAQtyC,KAAK,CAAEgqC,IAAKA,EAAK9+B,MAAO0oD,EAAU5gC,EAAKgX,WAE/FwwB,EACEloB,EACgB,iBAATtf,EAAuC,MAAnBA,EAAKiX,OAAO,GAAajX,EAAK9hB,MAAM,GAAK8hB,EAAO4gC,EAAU5gC,KAMzFqoC,EAA2BJ,EAA2B/1D,UA2J1D,GAzJA0qD,EAAYyL,EAA0B,CAGpC1wD,OAAQ,SAAgB6I,EAAMtI,GAC5B2vD,EAAwBz1D,UAAUrF,OAAQ,GAC1C,IAAIq7C,EAAQ0e,EAAuBt4D,MACnC45C,EAAM9I,QAAQtyC,KAAK,CAAEgqC,IAAK4pB,EAAUpgD,GAAOtI,MAAO0oD,EAAU1oD,KAC5DkwC,EAAMggB,aAIR,OAAU,SAAU5nD,GAClBqnD,EAAwBz1D,UAAUrF,OAAQ,GAK1C,IAJA,IAAIq7C,EAAQ0e,EAAuBt4D,MAC/B8wC,EAAU8I,EAAM9I,QAChBtI,EAAM4pB,EAAUpgD,GAChBxH,EAAQ,EACLA,EAAQsmC,EAAQvyC,QACjBuyC,EAAQtmC,GAAOg+B,MAAQA,EAAKsI,EAAQqI,OAAO3uC,EAAO,GACjDA,IAEPovC,EAAMggB,aAIR93D,IAAK,SAAakQ,GAChBqnD,EAAwBz1D,UAAUrF,OAAQ,GAI1C,IAHA,IAAIuyC,EAAUwnB,EAAuBt4D,MAAM8wC,QACvCtI,EAAM4pB,EAAUpgD,GAChBxH,EAAQ,EACLA,EAAQsmC,EAAQvyC,OAAQiM,IAC7B,GAAIsmC,EAAQtmC,GAAOg+B,MAAQA,EAAK,OAAOsI,EAAQtmC,GAAOd,MAExD,OAAO,MAITowD,OAAQ,SAAgB9nD,GACtBqnD,EAAwBz1D,UAAUrF,OAAQ,GAK1C,IAJA,IAAIuyC,EAAUwnB,EAAuBt4D,MAAM8wC,QACvCtI,EAAM4pB,EAAUpgD,GAChBiN,EAAS,GACTzU,EAAQ,EACLA,EAAQsmC,EAAQvyC,OAAQiM,IACzBsmC,EAAQtmC,GAAOg+B,MAAQA,GAAKvpB,EAAOzgB,KAAKsyC,EAAQtmC,GAAOd,OAE7D,OAAOuV,GAIT5C,IAAK,SAAarK,GAChBqnD,EAAwBz1D,UAAUrF,OAAQ,GAI1C,IAHA,IAAIuyC,EAAUwnB,EAAuBt4D,MAAM8wC,QACvCtI,EAAM4pB,EAAUpgD,GAChBxH,EAAQ,EACLA,EAAQsmC,EAAQvyC,QACrB,GAAIuyC,EAAQtmC,KAASg+B,MAAQA,EAAK,OAAO,EAE3C,OAAO,GAITzkC,IAAK,SAAaiO,EAAMtI,GACtB2vD,EAAwBz1D,UAAUrF,OAAQ,GAQ1C,IAPA,IAMI26D,EANAtf,EAAQ0e,EAAuBt4D,MAC/B8wC,EAAU8I,EAAM9I,QAChB5b,GAAQ,EACRsT,EAAM4pB,EAAUpgD,GAChBnQ,EAAMuwD,EAAU1oD,GAChBc,EAAQ,EAELA,EAAQsmC,EAAQvyC,OAAQiM,KAC7B0uD,EAAQpoB,EAAQtmC,IACNg+B,MAAQA,IACZtT,EAAO4b,EAAQqI,OAAO3uC,IAAS,IAEjC0qB,GAAQ,EACRgkC,EAAMxvD,MAAQ7H,IAIfqzB,GAAO4b,EAAQtyC,KAAK,CAAEgqC,IAAKA,EAAK9+B,MAAO7H,IAC5C+3C,EAAMggB,aAIRzmD,KAAM,WACJ,IAII+lD,EAAOa,EAAcC,EAJrBpgB,EAAQ0e,EAAuBt4D,MAC/B8wC,EAAU8I,EAAM9I,QAEhBphC,EAAQohC,EAAQphC,QAGpB,IADAohC,EAAQvyC,OAAS,EACZy7D,EAAa,EAAGA,EAAatqD,EAAMnR,OAAQy7D,IAAc,CAE5D,IADAd,EAAQxpD,EAAMsqD,GACTD,EAAe,EAAGA,EAAeC,EAAYD,IAChD,GAAIjpB,EAAQipB,GAAcvxB,IAAM0wB,EAAM1wB,IAAK,CACzCsI,EAAQqI,OAAO4gB,EAAc,EAAGb,GAChC,MAGAa,IAAiBC,GAAYlpB,EAAQtyC,KAAK06D,GAEhDtf,EAAMggB,aAGRvxD,QAAS,SAAiBwuB,GAKxB,IAJA,IAGIqiC,EAHApoB,EAAUwnB,EAAuBt4D,MAAM8wC,QACvC3F,EAAgB5pC,EAAKs1B,EAAUjzB,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,EAAW,GAChFX,EAAQ,EAELA,EAAQsmC,EAAQvyC,QAErB4sC,GADA+tB,EAAQpoB,EAAQtmC,MACId,MAAOwvD,EAAM1wB,IAAKxoC,OAI1Co0B,KAAM,WACJ,OAAO,IAAIolC,EAAwBx5D,KAAM,SAG3CizB,OAAQ,WACN,OAAO,IAAIumC,EAAwBx5D,KAAM,WAG3C8wC,QAAS,WACP,OAAO,IAAI0oB,EAAwBx5D,KAAM,aAE1C,CAAEivC,YAAY,IAGjBS,EAASmqB,EAA0B7sB,EAAU6sB,EAAyB/oB,SAItEpB,EAASmqB,EAA0B,YAAY,WAK7C,IAJA,IAGIX,EAHApoB,EAAUwnB,EAAuBt4D,MAAM8wC,QACvC7xB,EAAS,GACTzU,EAAQ,EAELA,EAAQsmC,EAAQvyC,QACrB26D,EAAQpoB,EAAQtmC,KAChByU,EAAOzgB,KAAKu6D,EAAUG,EAAM1wB,KAAO,IAAMuwB,EAAUG,EAAMxvD,QACzD,OAAOuV,EAAOxgB,KAAK,OACpB,CAAEwwC,YAAY,IAEjBP,EAAe+qB,EAA4BrB,GAE3Ct6D,EAAE,CAAEszC,QAAQ,EAAMJ,QAAS8mB,GAAkB,CAC3CnjC,gBAAiB8kC,KAId3B,GAAoC,mBAAXK,EAAuB,CACnD,IAAI8B,EAAqB,SAAUzoC,GACjC,GAAIwW,EAASxW,GAAO,CAClB,IACI0oC,EADArpD,EAAO2gB,EAAK3gB,KAEhB,GAAI4iC,EAAQ5iC,KAAUunD,EAKpB,OAJA8B,EAAU1oC,EAAK0oC,QAAU,IAAI/B,EAAQ3mC,EAAK0oC,SAAW,IAAI/B,GAC5C97C,IAAI,iBACf69C,EAAQn2D,IAAI,eAAgB,mDAEvBmkC,EAAO1W,EAAM,CAClB3gB,KAAM49B,EAAyB,EAAG1G,OAAOl3B,IACzCqpD,QAASzrB,EAAyB,EAAGyrB,KAGzC,OAAO1oC,GAWX,GAR0B,mBAAfwmC,GACTl6D,EAAE,CAAEszC,QAAQ,EAAMnC,YAAY,EAAM+B,QAAQ,GAAQ,CAClDmpB,MAAO,SAAepZ,GACpB,OAAOiX,EAAYjX,EAAOn9C,UAAUrF,OAAS,EAAI07D,EAAmBr2D,UAAU,IAAM,OAK9D,mBAAjBq0D,EAA6B,CACtC,IAAImC,EAAqB,SAAiBrZ,GAExC,OADAuN,EAAWtuD,KAAMo6D,EAAoB,WAC9B,IAAInC,EAAclX,EAAOn9C,UAAUrF,OAAS,EAAI07D,EAAmBr2D,UAAU,IAAM,KAG5Fs0D,EAAiBxsB,YAAc0uB,EAC/BA,EAAmB12D,UAAYw0D,EAE/Bp6D,EAAE,CAAEszC,QAAQ,EAAMJ,QAAQ,GAAQ,CAChCqpB,QAASD,KAKfzyB,EAAOC,QAAU,CACfjT,gBAAiB8kC,EACjBa,SAAUhC,qCC3WZ,EAAQ,MACR,IA4CIiC,EA5CAz8D,EAAI,EAAQ,MACZixC,EAAc,EAAQ,MACtB+oB,EAAiB,EAAQ,KACzB1mB,EAAS,EAAQ,MACjBqN,EAAmB,EAAQ,MAC3B/O,EAAW,EAAQ,MACnB4e,EAAa,EAAQ,MACrBjyC,EAAM,EAAQ,MACd8hC,EAAS,EAAQ,MACjBqc,EAAY,EAAQ,MACpBzW,EAAS,eACT0W,EAAU,EAAQ,MAClBrI,EAAY,EAAQ,MACpB1jB,EAAiB,EAAQ,MACzBgsB,EAAwB,EAAQ,MAChCtZ,EAAsB,EAAQ,MAE9BuZ,EAAYvpB,EAAOkM,IACnB3oB,EAAkB+lC,EAAsB/lC,gBACxCimC,EAA+BF,EAAsBJ,SACrDhR,EAAmBlI,EAAoBr9C,IACvC82D,EAAsBzZ,EAAoBjH,UAAU,OACpD/mC,EAAQ5Q,KAAK4Q,MACbw5C,EAAMpqD,KAAKoqD,IAGXkO,EAAiB,iBACjBC,EAAe,eACfC,EAAe,eAEfC,EAAQ,WAERC,EAAe,gBACfC,EAAQ,KACRC,EAAY,OACZC,EAAM,WACNC,EAAM,QACNC,EAAM,gBAENC,EAA4B,6BAC5BC,EAA8C,4BAC9CC,EAA2C,uCAC3CC,EAAmB,YAInBC,EAAY,SAAUhrD,EAAKmwC,GAC7B,IAAI9hC,EAAQ48C,EAAYrxD,EACxB,GAAuB,KAAnBu2C,EAAMtY,OAAO,GAAW,CAC1B,GAAsC,KAAlCsY,EAAMtY,OAAOsY,EAAMxiD,OAAS,GAAW,OAAOw8D,EAElD,KADA97C,EAAS68C,EAAU/a,EAAMrxC,MAAM,GAAI,KACtB,OAAOqrD,EACpBnqD,EAAI8sC,KAAOz+B,OAEN,GAAK88C,EAAUnrD,GAQf,CAEL,GADAmwC,EAAQ0Z,EAAQ1Z,GACZya,EAA0BriD,KAAK4nC,GAAQ,OAAOga,EAElD,GAAe,QADf97C,EAAS+8C,EAAUjb,IACE,OAAOga,EAC5BnqD,EAAI8sC,KAAOz+B,MAbe,CAC1B,GAAIw8C,EAA4CtiD,KAAK4nC,GAAQ,OAAOga,EAGpE,IAFA97C,EAAS,GACT48C,EAAarB,EAAUzZ,GAClBv2C,EAAQ,EAAGA,EAAQqxD,EAAWt9D,OAAQiM,IACzCyU,GAAUg9C,EAAcJ,EAAWrxD,GAAQ0xD,GAE7CtrD,EAAI8sC,KAAOz+B,IAUX+8C,EAAY,SAAUjb,GACxB,IACIob,EAAaC,EAAS5xD,EAAOwM,EAAMo1C,EAAOgB,EAAQiP,EADlDnlD,EAAQ6pC,EAAM5iD,MAAM,KAMxB,GAJI+Y,EAAM3Y,QAAqC,IAA3B2Y,EAAMA,EAAM3Y,OAAS,IACvC2Y,EAAMolD,OAERH,EAAcjlD,EAAM3Y,QACF,EAAG,OAAOwiD,EAE5B,IADAqb,EAAU,GACL5xD,EAAQ,EAAGA,EAAQ2xD,EAAa3xD,IAAS,CAE5C,GAAY,KADZwM,EAAOE,EAAM1M,IACG,OAAOu2C,EAMvB,GALAqL,EAAQ,GACJp1C,EAAKzY,OAAS,GAAuB,KAAlByY,EAAKyxB,OAAO,KACjC2jB,EAAQgP,EAAUjiD,KAAKnC,GAAQ,GAAK,EACpCA,EAAOA,EAAKtH,MAAe,GAAT08C,EAAa,EAAI,IAExB,KAATp1C,EACFo2C,EAAS,MACJ,CACL,KAAe,IAAThB,EAAckP,EAAe,GAATlP,EAAaiP,EAAME,GAAKpiD,KAAKnC,GAAO,OAAO+pC,EACrEqM,EAASv7C,SAASmF,EAAMo1C,GAE1BgQ,EAAQ59D,KAAK4uD,GAEf,IAAK5iD,EAAQ,EAAGA,EAAQ2xD,EAAa3xD,IAEnC,GADA4iD,EAASgP,EAAQ5xD,GACbA,GAAS2xD,EAAc,GACzB,GAAI/O,GAAUR,EAAI,IAAK,EAAIuP,GAAc,OAAO,UAC3C,GAAI/O,EAAS,IAAK,OAAO,KAGlC,IADAiP,EAAOD,EAAQE,MACV9xD,EAAQ,EAAGA,EAAQ4xD,EAAQ79D,OAAQiM,IACtC6xD,GAAQD,EAAQ5xD,GAASoiD,EAAI,IAAK,EAAIpiD,GAExC,OAAO6xD,GAILP,EAAY,SAAU/a,GACxB,IAIIr3C,EAAOnL,EAAQg+D,EAAaC,EAAWpP,EAAQqP,EAAOC,EAJtDC,EAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChCC,EAAa,EACbC,EAAW,KACXC,EAAU,EAGVC,EAAO,WACT,OAAOhc,EAAMtY,OAAOq0B,IAGtB,GAAc,KAAVC,IAAe,CACjB,GAAuB,KAAnBhc,EAAMtY,OAAO,GAAW,OAC5Bq0B,GAAW,EAEXD,IADAD,EAGF,KAAOG,KAAQ,CACb,GAAkB,GAAdH,EAAiB,OACrB,GAAc,KAAVG,IAAJ,CAQA,IADArzD,EAAQnL,EAAS,EACVA,EAAS,GAAKg9D,EAAIpiD,KAAK4jD,MAC5BrzD,EAAgB,GAARA,EAAamI,SAASkrD,IAAQ,IACtCD,IACAv+D,IAEF,GAAc,KAAVw+D,IAAe,CACjB,GAAc,GAAVx+D,EAAa,OAEjB,GADAu+D,GAAWv+D,EACPq+D,EAAa,EAAG,OAEpB,IADAL,EAAc,EACPQ,KAAQ,CAEb,GADAP,EAAY,KACRD,EAAc,EAAG,CACnB,KAAc,KAAVQ,KAAiBR,EAAc,GAC9B,OADiCO,IAGxC,IAAK3B,EAAMhiD,KAAK4jD,KAAS,OACzB,KAAO5B,EAAMhiD,KAAK4jD,MAAS,CAEzB,GADA3P,EAASv7C,SAASkrD,IAAQ,IACR,OAAdP,EAAoBA,EAAYpP,MAC/B,IAAiB,GAAboP,EAAgB,OACpBA,EAAwB,GAAZA,EAAiBpP,EAClC,GAAIoP,EAAY,IAAK,OACrBM,IAEFH,EAAQC,GAAoC,IAAtBD,EAAQC,GAAoBJ,EAE/B,KADnBD,GACuC,GAAfA,GAAkBK,IAE5C,GAAmB,GAAfL,EAAkB,OACtB,MACK,GAAc,KAAVQ,KAET,GADAD,KACKC,IAAQ,YACR,GAAIA,IAAQ,OACnBJ,EAAQC,KAAgBlzD,MA3CxB,CACE,GAAiB,OAAbmzD,EAAmB,OACvBC,IAEAD,IADAD,GA0CJ,GAAiB,OAAbC,EAGF,IAFAJ,EAAQG,EAAaC,EACrBD,EAAa,EACQ,GAAdA,GAAmBH,EAAQ,GAChCC,EAAOC,EAAQC,GACfD,EAAQC,KAAgBD,EAAQE,EAAWJ,EAAQ,GACnDE,EAAQE,IAAaJ,GAASC,OAE3B,GAAkB,GAAdE,EAAiB,OAC5B,OAAOD,GA6BLK,EAAgB,SAAUtf,GAC5B,IAAIz+B,EAAQzU,EAAOqyD,EAAUI,EAE7B,GAAmB,iBAARvf,EAAkB,CAE3B,IADAz+B,EAAS,GACJzU,EAAQ,EAAGA,EAAQ,EAAGA,IACzByU,EAAOi+C,QAAQxf,EAAO,KACtBA,EAAOtqC,EAAMsqC,EAAO,KACpB,OAAOz+B,EAAOxgB,KAAK,KAEhB,GAAmB,iBAARi/C,EAAkB,CAGlC,IAFAz+B,EAAS,GACT49C,EAtC0B,SAAUM,GAMtC,IALA,IAAIC,EAAW,KACXC,EAAY,EACZC,EAAY,KACZC,EAAa,EACb/yD,EAAQ,EACLA,EAAQ,EAAGA,IACI,IAAhB2yD,EAAK3yD,IACH+yD,EAAaF,IACfD,EAAWE,EACXD,EAAYE,GAEdD,EAAY,KACZC,EAAa,IAEK,OAAdD,IAAoBA,EAAY9yD,KAClC+yD,GAON,OAJIA,EAAaF,IACfD,EAAWE,EACXD,EAAYE,GAEPH,EAeMI,CAAwB9f,GAC9BlzC,EAAQ,EAAGA,EAAQ,EAAGA,IACrByyD,GAA2B,IAAhBvf,EAAKlzC,KAChByyD,IAASA,GAAU,GACnBJ,IAAaryD,GACfyU,GAAUzU,EAAQ,IAAM,KACxByyD,GAAU,IAEVh+C,GAAUy+B,EAAKlzC,GAAO8mB,SAAS,IAC3B9mB,EAAQ,IAAGyU,GAAU,OAG7B,MAAO,IAAMA,EAAS,IACtB,OAAOy+B,GAGPwe,EAA4B,GAC5BuB,EAA2Btf,EAAO,GAAI+d,EAA2B,CACnE,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAEnCwB,EAAuBvf,EAAO,GAAIsf,EAA0B,CAC9D,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAE3BE,EAA2Bxf,EAAO,GAAIuf,EAAsB,CAC9D,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAG5EzB,EAAgB,SAAUc,EAAMh5D,GAClC,IAAI4mD,EAAO5G,EAAOgZ,EAAM,GACxB,OAAOpS,EAAO,IAAQA,EAAO,MAAStuC,EAAItY,EAAKg5D,GAAQA,EAAO/2B,mBAAmB+2B,IAG/Ea,EAAiB,CACnBC,IAAK,GACLC,KAAM,KACNC,KAAM,GACNC,MAAO,IACPC,GAAI,GACJC,IAAK,KAGHnC,EAAY,SAAUnrD,GACxB,OAAOyL,EAAIuhD,EAAgBhtD,EAAIutD,SAG7BC,EAAsB,SAAUxtD,GAClC,MAAuB,IAAhBA,EAAI6sC,UAAkC,IAAhB7sC,EAAIytD,UAG/BC,EAAiC,SAAU1tD,GAC7C,OAAQA,EAAI8sC,MAAQ9sC,EAAI2tD,kBAAkC,QAAd3tD,EAAIutD,QAG9CK,GAAuB,SAAU9jB,EAAQ+jB,GAC3C,IAAIr3C,EACJ,OAAwB,GAAjBszB,EAAOn8C,QAAe08D,EAAM9hD,KAAKuhC,EAAOjS,OAAO,MACjB,MAA9BrhB,EAASszB,EAAOjS,OAAO,MAAgBg2B,GAAwB,KAAVr3C,IAG1Ds3C,GAA+B,SAAUhkB,GAC3C,IAAIyR,EACJ,OAAOzR,EAAOn8C,OAAS,GAAKigE,GAAqB9jB,EAAOhrC,MAAM,EAAG,MAC9C,GAAjBgrC,EAAOn8C,QACyB,OAA9B4tD,EAAQzR,EAAOjS,OAAO,KAAyB,OAAV0jB,GAA4B,MAAVA,GAA2B,MAAVA,IAI1EwS,GAAkB,SAAU/tD,GAC9B,IAAIqgC,EAAOrgC,EAAIqgC,KACX2tB,EAAW3tB,EAAK1yC,QAChBqgE,GAA2B,QAAdhuD,EAAIutD,QAAgC,GAAZS,GAAkBJ,GAAqBvtB,EAAK,IAAI,IACvFA,EAAKqrB,OAILuC,GAAc,SAAUC,GAC1B,MAAmB,MAAZA,GAA6C,QAA1BA,EAAQnkB,eAShCokB,GAAe,GACfC,GAAS,GACTC,GAAY,GACZC,GAAgC,GAChCC,GAAoB,GACpBC,GAAW,GACXC,GAAiB,GACjBC,GAA4B,GAC5BC,GAAmC,GACnCC,GAAY,GACZC,GAAO,GACPC,GAAW,GACXC,GAAO,GACPC,GAAO,GACPC,GAAa,GACbC,GAAY,GACZC,GAAa,GACbC,GAAO,GACPC,GAA4B,GAC5BC,GAAQ,GACRC,GAAW,GAGXC,GAAW,SAAUxvD,EAAKmwC,EAAOsf,EAAexb,GAClD,IAMIgX,EAAYkB,EAAMuD,EAAkBC,EApCdzB,EA8BtBllB,EAAQymB,GAAiBtB,GACzBjC,EAAU,EACV0D,EAAS,GACTC,GAAS,EACTC,GAAc,EACdC,GAAoB,EAoBxB,IAjBKN,IACHzvD,EAAIutD,OAAS,GACbvtD,EAAI6sC,SAAW,GACf7sC,EAAIytD,SAAW,GACfztD,EAAI8sC,KAAO,KACX9sC,EAAI01C,KAAO,KACX11C,EAAIqgC,KAAO,GACXrgC,EAAIyK,MAAQ,KACZzK,EAAIkxB,SAAW,KACflxB,EAAI2tD,kBAAmB,EACvBxd,EAAQA,EAAM52C,QAAQuxD,EAA0C,KAGlE3a,EAAQA,EAAM52C,QAAQwxD,EAAkB,IAExCE,EAAarB,EAAUzZ,GAEhB+b,GAAWjB,EAAWt9D,QAAQ,CAEnC,OADAw+D,EAAOlB,EAAWiB,GACVljB,GACN,KAAKmlB,GACH,IAAIhC,IAAQ9B,EAAM9hD,KAAK4jD,GAGhB,IAAKsD,EAGL,OAAOvF,EAFZlhB,EAAQqlB,GACR,SAJAuB,GAAUzD,EAAKpiB,cACff,EAAQolB,GAKV,MAEF,KAAKA,GACH,GAAIjC,IAAS7B,EAAa/hD,KAAK4jD,IAAiB,KAARA,GAAuB,KAARA,GAAuB,KAARA,GACpEyD,GAAUzD,EAAKpiB,kBACV,IAAY,KAARoiB,EA0BJ,IAAKsD,EAKL,OAAOvF,EAJZ0F,EAAS,GACT5mB,EAAQqlB,GACRnC,EAAU,EACV,SA7BA,GAAIuD,IACDtE,EAAUnrD,IAAQyL,EAAIuhD,EAAgB4C,IAC5B,QAAVA,IAAqBpC,EAAoBxtD,IAAqB,OAAbA,EAAI01C,OACvC,QAAd11C,EAAIutD,SAAqBvtD,EAAI8sC,MAC7B,OAEH,GADA9sC,EAAIutD,OAASqC,EACTH,EAEF,YADItE,EAAUnrD,IAAQgtD,EAAehtD,EAAIutD,SAAWvtD,EAAI01C,OAAM11C,EAAI01C,KAAO,OAG3Eka,EAAS,GACS,QAAd5vD,EAAIutD,OACNvkB,EAAQgmB,GACC7D,EAAUnrD,IAAQi0C,GAAQA,EAAKsZ,QAAUvtD,EAAIutD,OACtDvkB,EAAQslB,GACCnD,EAAUnrD,GACnBgpC,EAAQ0lB,GAC4B,KAA3BzD,EAAWiB,EAAU,IAC9BljB,EAAQulB,GACRrC,MAEAlsD,EAAI2tD,kBAAmB,EACvB3tD,EAAIqgC,KAAKzyC,KAAK,IACdo7C,EAAQqmB,IAQZ,MAEF,KAAKhB,GACH,IAAKpa,GAASA,EAAK0Z,kBAA4B,KAARxB,EAAc,OAAOjC,EAC5D,GAAIjW,EAAK0Z,kBAA4B,KAARxB,EAAa,CACxCnsD,EAAIutD,OAAStZ,EAAKsZ,OAClBvtD,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQwpC,EAAKxpC,MACjBzK,EAAIkxB,SAAW,GACflxB,EAAI2tD,kBAAmB,EACvB3kB,EAAQumB,GACR,MAEFvmB,EAAuB,QAAfiL,EAAKsZ,OAAmByB,GAAOR,GACvC,SAEF,KAAKF,GACH,GAAY,KAARnC,GAA0C,KAA3BlB,EAAWiB,EAAU,GAGjC,CACLljB,EAAQwlB,GACR,SAJAxlB,EAAQ2lB,GACRzC,IAIA,MAEJ,KAAKqC,GACH,GAAY,KAARpC,EAAa,CACfnjB,EAAQ4lB,GACR,MAEA5lB,EAAQomB,GACR,SAGJ,KAAKZ,GAEH,GADAxuD,EAAIutD,OAAStZ,EAAKsZ,OACdpB,GAAQxC,EACV3pD,EAAI6sC,SAAWoH,EAAKpH,SACpB7sC,EAAIytD,SAAWxZ,EAAKwZ,SACpBztD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAI01C,KAAOzB,EAAKyB,KAChB11C,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQwpC,EAAKxpC,WACZ,GAAY,KAAR0hD,GAAwB,MAARA,GAAgBhB,EAAUnrD,GACnDgpC,EAAQylB,QACH,GAAY,KAARtC,EACTnsD,EAAI6sC,SAAWoH,EAAKpH,SACpB7sC,EAAIytD,SAAWxZ,EAAKwZ,SACpBztD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAI01C,KAAOzB,EAAKyB,KAChB11C,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQ,GACZu+B,EAAQsmB,OACH,IAAY,KAARnD,EASJ,CACLnsD,EAAI6sC,SAAWoH,EAAKpH,SACpB7sC,EAAIytD,SAAWxZ,EAAKwZ,SACpBztD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAI01C,KAAOzB,EAAKyB,KAChB11C,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIqgC,KAAKqrB,MACT1iB,EAAQomB,GACR,SAhBApvD,EAAI6sC,SAAWoH,EAAKpH,SACpB7sC,EAAIytD,SAAWxZ,EAAKwZ,SACpBztD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAI01C,KAAOzB,EAAKyB,KAChB11C,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQwpC,EAAKxpC,MACjBzK,EAAIkxB,SAAW,GACf8X,EAAQumB,GAUR,MAEJ,KAAKd,GACH,IAAItD,EAAUnrD,IAAiB,KAARmsD,GAAuB,MAARA,EAE/B,IAAY,KAARA,EAEJ,CACLnsD,EAAI6sC,SAAWoH,EAAKpH,SACpB7sC,EAAIytD,SAAWxZ,EAAKwZ,SACpBztD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAI01C,KAAOzB,EAAKyB,KAChB1M,EAAQomB,GACR,SAPApmB,EAAQ4lB,QAFR5lB,EAAQ2lB,GAUR,MAEJ,KAAKD,GAEH,GADA1lB,EAAQ2lB,GACI,KAARxC,GAA6C,KAA9ByD,EAAO/3B,OAAOq0B,EAAU,GAAW,SACtDA,IACA,MAEF,KAAKyC,GACH,GAAY,KAARxC,GAAuB,MAARA,EAAc,CAC/BnjB,EAAQ4lB,GACR,SACA,MAEJ,KAAKA,GACH,GAAY,KAARzC,EAAa,CACX0D,IAAQD,EAAS,MAAQA,GAC7BC,GAAS,EACTH,EAAmB9F,EAAUgG,GAC7B,IAAK,IAAIliE,EAAI,EAAGA,EAAIgiE,EAAiB/hE,OAAQD,IAAK,CAChD,IAAIsiE,EAAYN,EAAiBhiE,GACjC,GAAiB,KAAbsiE,GAAqBD,EAAzB,CAIA,IAAIE,EAAoB5E,EAAc2E,EAAWjD,GAC7CgD,EAAmB/vD,EAAIytD,UAAYwC,EAClCjwD,EAAI6sC,UAAYojB,OALnBF,GAAoB,EAOxBH,EAAS,QACJ,GACLzD,GAAQxC,GAAe,KAARwC,GAAuB,KAARA,GAAuB,KAARA,GACpC,MAARA,GAAgBhB,EAAUnrD,GAC3B,CACA,GAAI6vD,GAAoB,IAAVD,EAAc,MApfd,oBAqfd1D,GAAWtC,EAAUgG,GAAQjiE,OAAS,EACtCiiE,EAAS,GACT5mB,EAAQ6lB,QACHe,GAAUzD,EACjB,MAEF,KAAK0C,GACL,KAAKC,GACH,GAAIW,GAA+B,QAAdzvD,EAAIutD,OAAkB,CACzCvkB,EAAQkmB,GACR,SACK,GAAY,KAAR/C,GAAgB2D,EAOpB,IACL3D,GAAQxC,GAAe,KAARwC,GAAuB,KAARA,GAAuB,KAARA,GACpC,MAARA,GAAgBhB,EAAUnrD,GAC3B,CACA,GAAImrD,EAAUnrD,IAAkB,IAAV4vD,EAAc,OAAOzF,EAC3C,GAAIsF,GAA2B,IAAVG,IAAiBpC,EAAoBxtD,IAAqB,OAAbA,EAAI01C,MAAgB,OAEtF,GADAia,EAAU3E,EAAUhrD,EAAK4vD,GACZ,OAAOD,EAGpB,GAFAC,EAAS,GACT5mB,EAAQmmB,GACJM,EAAe,OACnB,SAEY,KAARtD,EAAa2D,GAAc,EACd,KAAR3D,IAAa2D,GAAc,GACpCF,GAAUzD,MAtB4B,CACtC,GAAc,IAAVyD,EAAc,OAAOzF,EAEzB,GADAwF,EAAU3E,EAAUhrD,EAAK4vD,GACZ,OAAOD,EAGpB,GAFAC,EAAS,GACT5mB,EAAQ+lB,GACJU,GAAiBX,GAAU,OAiB/B,MAEJ,KAAKC,GACH,IAAIxE,EAAMhiD,KAAK4jD,GAER,IACLA,GAAQxC,GAAe,KAARwC,GAAuB,KAARA,GAAuB,KAARA,GACpC,MAARA,GAAgBhB,EAAUnrD,IAC3ByvD,EACA,CACA,GAAc,IAAVG,EAAc,CAChB,IAAIla,EAAOz0C,SAAS2uD,EAAQ,IAC5B,GAAIla,EAAO,MAAQ,OAAO0U,EAC1BpqD,EAAI01C,KAAQyV,EAAUnrD,IAAQ01C,IAASsX,EAAehtD,EAAIutD,QAAW,KAAO7X,EAC5Eka,EAAS,GAEX,GAAIH,EAAe,OACnBzmB,EAAQmmB,GACR,SACK,OAAO/E,EAfZwF,GAAUzD,EAgBZ,MAEF,KAAK6C,GAEH,GADAhvD,EAAIutD,OAAS,OACD,KAARpB,GAAuB,MAARA,EAAcnjB,EAAQimB,OACpC,KAAIhb,GAAuB,QAAfA,EAAKsZ,OAyBf,CACLvkB,EAAQomB,GACR,SA1BA,GAAIjD,GAAQxC,EACV3pD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQwpC,EAAKxpC,WACZ,GAAY,KAAR0hD,EACTnsD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQ,GACZu+B,EAAQsmB,OACH,IAAY,KAARnD,EAMJ,CACA2B,GAA6B7C,EAAWnsD,MAAMotD,GAASr+D,KAAK,OAC/DmS,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBivD,GAAgB/tD,IAElBgpC,EAAQomB,GACR,SAZApvD,EAAI8sC,KAAOmH,EAAKnH,KAChB9sC,EAAIqgC,KAAO4T,EAAK5T,KAAKvhC,QACrBkB,EAAIyK,MAAQwpC,EAAKxpC,MACjBzK,EAAIkxB,SAAW,GACf8X,EAAQumB,IAaV,MAEJ,KAAKN,GACH,GAAY,KAAR9C,GAAuB,MAARA,EAAc,CAC/BnjB,EAAQkmB,GACR,MAEEjb,GAAuB,QAAfA,EAAKsZ,SAAqBO,GAA6B7C,EAAWnsD,MAAMotD,GAASr+D,KAAK,OAC5F+/D,GAAqB3Z,EAAK5T,KAAK,IAAI,GAAOrgC,EAAIqgC,KAAKzyC,KAAKqmD,EAAK5T,KAAK,IACjErgC,EAAI8sC,KAAOmH,EAAKnH,MAEvB9D,EAAQomB,GACR,SAEF,KAAKF,GACH,GAAI/C,GAAQxC,GAAe,KAARwC,GAAuB,MAARA,GAAwB,KAARA,GAAuB,KAARA,EAAa,CAC5E,IAAKsD,GAAiB7B,GAAqBgC,GACzC5mB,EAAQomB,QACH,GAAc,IAAVQ,EAAc,CAEvB,GADA5vD,EAAI8sC,KAAO,GACP2iB,EAAe,OACnBzmB,EAAQmmB,OACH,CAEL,GADAQ,EAAU3E,EAAUhrD,EAAK4vD,GACZ,OAAOD,EAEpB,GADgB,aAAZ3vD,EAAI8sC,OAAqB9sC,EAAI8sC,KAAO,IACpC2iB,EAAe,OACnBG,EAAS,GACT5mB,EAAQmmB,GACR,SACGS,GAAUzD,EACjB,MAEF,KAAKgD,GACH,GAAIhE,EAAUnrD,IAEZ,GADAgpC,EAAQomB,GACI,KAARjD,GAAuB,MAARA,EAAc,cAC5B,GAAKsD,GAAyB,KAARtD,EAGtB,GAAKsD,GAAyB,KAARtD,GAGtB,GAAIA,GAAQxC,IACjB3gB,EAAQomB,GACI,KAARjD,GAAa,cAJjBnsD,EAAIkxB,SAAW,GACf8X,EAAQumB,QAJRvvD,EAAIyK,MAAQ,GACZu+B,EAAQsmB,GAOR,MAEJ,KAAKF,GACH,GACEjD,GAAQxC,GAAe,KAARwC,GACN,MAARA,GAAgBhB,EAAUnrD,KACzByvD,IAA0B,KAARtD,GAAuB,KAARA,GACnC,CAkBA,GA3XW,QADnB+B,GAD0BA,EA4WF0B,GA3WN7lB,gBACqB,SAAZmkB,GAAkC,SAAZA,GAAkC,WAAZA,GA2W7DH,GAAgB/tD,GACJ,KAARmsD,GAAyB,MAARA,GAAgBhB,EAAUnrD,IAC7CA,EAAIqgC,KAAKzyC,KAAK,KAEPqgE,GAAY2B,GACT,KAARzD,GAAyB,MAARA,GAAgBhB,EAAUnrD,IAC7CA,EAAIqgC,KAAKzyC,KAAK,KAGE,QAAdoS,EAAIutD,SAAqBvtD,EAAIqgC,KAAK1yC,QAAUigE,GAAqBgC,KAC/D5vD,EAAI8sC,OAAM9sC,EAAI8sC,KAAO,IACzB8iB,EAASA,EAAO/3B,OAAO,GAAK,KAE9B73B,EAAIqgC,KAAKzyC,KAAKgiE,IAEhBA,EAAS,GACS,QAAd5vD,EAAIutD,SAAqBpB,GAAQxC,GAAe,KAARwC,GAAuB,KAARA,GACzD,KAAOnsD,EAAIqgC,KAAK1yC,OAAS,GAAqB,KAAhBqS,EAAIqgC,KAAK,IACrCrgC,EAAIqgC,KAAKpqC,QAGD,KAARk2D,GACFnsD,EAAIyK,MAAQ,GACZu+B,EAAQsmB,IACS,KAARnD,IACTnsD,EAAIkxB,SAAW,GACf8X,EAAQumB,SAGVK,GAAUvE,EAAcc,EAAMW,GAC9B,MAEJ,KAAKuC,GACS,KAARlD,GACFnsD,EAAIyK,MAAQ,GACZu+B,EAAQsmB,IACS,KAARnD,GACTnsD,EAAIkxB,SAAW,GACf8X,EAAQumB,IACCpD,GAAQxC,IACjB3pD,EAAIqgC,KAAK,IAAMgrB,EAAcc,EAAMb,IACnC,MAEJ,KAAKgE,GACEG,GAAyB,KAARtD,EAGXA,GAAQxC,IACL,KAARwC,GAAehB,EAAUnrD,GAAMA,EAAIyK,OAAS,MAC1BzK,EAAIyK,OAAT,KAAR0hD,EAA0B,MACjBd,EAAcc,EAAMb,KALtCtrD,EAAIkxB,SAAW,GACf8X,EAAQumB,IAKR,MAEJ,KAAKA,GACCpD,GAAQxC,IAAK3pD,EAAIkxB,UAAYm6B,EAAcc,EAAMU,IAIzDX,MAMAgE,GAAiB,SAAalwD,GAChC,IAIImwD,EAAWR,EAJXt1B,EAAOqjB,EAAWtuD,KAAM8gE,GAAgB,OACxCjc,EAAOjhD,UAAUrF,OAAS,EAAIqF,UAAU,QAAKuH,EAC7C61D,EAAY5O,EAAUxhD,GACtBgpC,EAAQ0P,EAAiBre,EAAM,CAAExrC,KAAM,QAE3C,QAAa0L,IAAT05C,EACF,GAAIA,aAAgBic,GAAgBC,EAAYlG,EAAoBhW,QAGlE,GADA0b,EAAUH,GAASW,EAAY,GAAI3O,EAAUvN,IAChC,MAAM/c,UAAUy4B,GAIjC,GADAA,EAAUH,GAASxmB,EAAOonB,EAAW,KAAMD,GAC9B,MAAMj5B,UAAUy4B,GAC7B,IAAIhjB,EAAe3D,EAAM2D,aAAe,IAAI5oB,EACxCssC,EAAoBrG,EAA6Brd,GACrD0jB,EAAkB7H,mBAAmBxf,EAAMv+B,OAC3C4lD,EAAkBrH,UAAY,WAC5BhgB,EAAMv+B,MAAQ0sB,OAAOwV,IAAiB,MAEnCxO,IACH9D,EAAKt8B,KAAOuyD,GAAal3B,KAAKiB,GAC9BA,EAAKk2B,OAASC,GAAUp3B,KAAKiB,GAC7BA,EAAKl6B,SAAWswD,GAAYr3B,KAAKiB,GACjCA,EAAKwS,SAAW6jB,GAAYt3B,KAAKiB,GACjCA,EAAKozB,SAAWkD,GAAYv3B,KAAKiB,GACjCA,EAAKyS,KAAO8jB,GAAQx3B,KAAKiB,GACzBA,EAAKj6B,SAAWywD,GAAYz3B,KAAKiB,GACjCA,EAAKqb,KAAOob,GAAQ13B,KAAKiB,GACzBA,EAAKh6B,SAAW0wD,GAAY33B,KAAKiB,GACjCA,EAAKxW,OAASmtC,GAAU53B,KAAKiB,GAC7BA,EAAKsS,aAAeskB,GAAgB73B,KAAKiB,GACzCA,EAAKjW,KAAO8sC,GAAQ93B,KAAKiB,KAIzB82B,GAAejB,GAAep9D,UAE9Bw9D,GAAe,WACjB,IAAItwD,EAAMiqD,EAAoB76D,MAC1Bm+D,EAASvtD,EAAIutD,OACb1gB,EAAW7sC,EAAI6sC,SACf4gB,EAAWztD,EAAIytD,SACf3gB,EAAO9sC,EAAI8sC,KACX4I,EAAO11C,EAAI01C,KACXrV,EAAOrgC,EAAIqgC,KACX51B,EAAQzK,EAAIyK,MACZymB,EAAWlxB,EAAIkxB,SACfkjB,EAASmZ,EAAS,IAYtB,OAXa,OAATzgB,GACFsH,GAAU,KACNoZ,EAAoBxtD,KACtBo0C,GAAUvH,GAAY4gB,EAAW,IAAMA,EAAW,IAAM,KAE1DrZ,GAAUgY,EAActf,GACX,OAAT4I,IAAetB,GAAU,IAAMsB,IAChB,QAAV6X,IAAkBnZ,GAAU,MACvCA,GAAUp0C,EAAI2tD,iBAAmBttB,EAAK,GAAKA,EAAK1yC,OAAS,IAAM0yC,EAAKxyC,KAAK,KAAO,GAClE,OAAV4c,IAAgB2pC,GAAU,IAAM3pC,GACnB,OAAbymB,IAAmBkjB,GAAU,IAAMljB,GAChCkjB,GAGLoc,GAAY,WACd,IAAIxwD,EAAMiqD,EAAoB76D,MAC1Bm+D,EAASvtD,EAAIutD,OACb7X,EAAO11C,EAAI01C,KACf,GAAc,QAAV6X,EAAkB,IACpB,OAAO,IAAI2C,GAAe3C,EAAOltB,KAAK,IAAIkwB,OAC1C,MAAO3hE,GACP,MAAO,OAET,MAAc,QAAV2+D,GAAqBpC,EAAUnrD,GAC5ButD,EAAS,MAAQnB,EAAcpsD,EAAI8sC,OAAkB,OAAT4I,EAAgB,IAAMA,EAAO,IADhC,QAI9C+a,GAAc,WAChB,OAAOxG,EAAoB76D,MAAMm+D,OAAS,KAGxCmD,GAAc,WAChB,OAAOzG,EAAoB76D,MAAMy9C,UAG/B8jB,GAAc,WAChB,OAAO1G,EAAoB76D,MAAMq+D,UAG/BmD,GAAU,WACZ,IAAI5wD,EAAMiqD,EAAoB76D,MAC1B09C,EAAO9sC,EAAI8sC,KACX4I,EAAO11C,EAAI01C,KACf,OAAgB,OAAT5I,EAAgB,GACV,OAAT4I,EAAgB0W,EAActf,GAC9Bsf,EAActf,GAAQ,IAAM4I,GAG9Bmb,GAAc,WAChB,IAAI/jB,EAAOmd,EAAoB76D,MAAM09C,KACrC,OAAgB,OAATA,EAAgB,GAAKsf,EAActf,IAGxCgkB,GAAU,WACZ,IAAIpb,EAAOuU,EAAoB76D,MAAMsmD,KACrC,OAAgB,OAATA,EAAgB,GAAKve,OAAOue,IAGjCqb,GAAc,WAChB,IAAI/wD,EAAMiqD,EAAoB76D,MAC1BixC,EAAOrgC,EAAIqgC,KACf,OAAOrgC,EAAI2tD,iBAAmBttB,EAAK,GAAKA,EAAK1yC,OAAS,IAAM0yC,EAAKxyC,KAAK,KAAO,IAG3EmjE,GAAY,WACd,IAAIvmD,EAAQw/C,EAAoB76D,MAAMqb,MACtC,OAAOA,EAAQ,IAAMA,EAAQ,IAG3BwmD,GAAkB,WACpB,OAAOhH,EAAoB76D,MAAMu9C,cAG/BukB,GAAU,WACZ,IAAIhgC,EAAW+4B,EAAoB76D,MAAM8hC,SACzC,OAAOA,EAAW,IAAMA,EAAW,IAGjCkgC,GAAqB,SAAUC,EAAQthB,GACzC,MAAO,CAAE7+C,IAAKmgE,EAAQl+D,IAAK48C,EAAQpY,cAAc,EAAM0G,YAAY,IAyHrE,GAtHIF,GACF0P,EAAiBsjB,GAAc,CAG7BpzD,KAAMqzD,GAAmBd,IAAc,SAAUvyD,GAC/C,IAAIiC,EAAMiqD,EAAoB76D,MAC1BghE,EAAY5O,EAAUzjD,GACtB4xD,EAAUH,GAASxvD,EAAKowD,GAC5B,GAAIT,EAAS,MAAMz4B,UAAUy4B,GAC7B3F,EAA6BhqD,EAAI2sC,cAAc6b,mBAAmBxoD,EAAIyK,UAIxE8lD,OAAQa,GAAmBZ,IAG3BrwD,SAAUixD,GAAmBX,IAAa,SAAUtwD,GAClD,IAAIH,EAAMiqD,EAAoB76D,MAC9BogE,GAASxvD,EAAKwhD,EAAUrhD,GAAY,IAAKguD,OAI3CthB,SAAUukB,GAAmBV,IAAa,SAAU7jB,GAClD,IAAI7sC,EAAMiqD,EAAoB76D,MAC1B67D,EAAarB,EAAUpI,EAAU3U,IACrC,IAAI6gB,EAA+B1tD,GAAnC,CACAA,EAAI6sC,SAAW,GACf,IAAK,IAAIn/C,EAAI,EAAGA,EAAIu9D,EAAWt9D,OAAQD,IACrCsS,EAAI6sC,UAAYwe,EAAcJ,EAAWv9D,GAAIq/D,OAKjDU,SAAU2D,GAAmBT,IAAa,SAAUlD,GAClD,IAAIztD,EAAMiqD,EAAoB76D,MAC1B67D,EAAarB,EAAUpI,EAAUiM,IACrC,IAAIC,EAA+B1tD,GAAnC,CACAA,EAAIytD,SAAW,GACf,IAAK,IAAI//D,EAAI,EAAGA,EAAIu9D,EAAWt9D,OAAQD,IACrCsS,EAAIytD,UAAYpC,EAAcJ,EAAWv9D,GAAIq/D,OAKjDjgB,KAAMskB,GAAmBR,IAAS,SAAU9jB,GAC1C,IAAI9sC,EAAMiqD,EAAoB76D,MAC1B4Q,EAAI2tD,kBACR6B,GAASxvD,EAAKwhD,EAAU1U,GAAO+hB,OAIjCzuD,SAAUgxD,GAAmBP,IAAa,SAAUzwD,GAClD,IAAIJ,EAAMiqD,EAAoB76D,MAC1B4Q,EAAI2tD,kBACR6B,GAASxvD,EAAKwhD,EAAUphD,GAAW0uD,OAIrCpZ,KAAM0b,GAAmBN,IAAS,SAAUpb,GAC1C,IAAI11C,EAAMiqD,EAAoB76D,MAC1Bs+D,EAA+B1tD,KAEvB,KADZ01C,EAAO8L,EAAU9L,IACD11C,EAAI01C,KAAO,KACtB8Z,GAASxvD,EAAK01C,EAAMqZ,QAI3B1uD,SAAU+wD,GAAmBL,IAAa,SAAU1wD,GAClD,IAAIL,EAAMiqD,EAAoB76D,MAC1B4Q,EAAI2tD,mBACR3tD,EAAIqgC,KAAO,GACXmvB,GAASxvD,EAAKwhD,EAAUnhD,GAAW8uD,QAIrCtrC,OAAQutC,GAAmBJ,IAAW,SAAUntC,GAC9C,IAAI7jB,EAAMiqD,EAAoB76D,MAEhB,KADdy0B,EAAS29B,EAAU39B,IAEjB7jB,EAAIyK,MAAQ,MAER,KAAOoZ,EAAOgU,OAAO,KAAIhU,EAASA,EAAO/kB,MAAM,IACnDkB,EAAIyK,MAAQ,GACZ+kD,GAASxvD,EAAK6jB,EAAQyrC,KAExBtF,EAA6BhqD,EAAI2sC,cAAc6b,mBAAmBxoD,EAAIyK,UAIxEkiC,aAAcykB,GAAmBH,IAGjC7sC,KAAMgtC,GAAmBF,IAAS,SAAU9sC,GAC1C,IAAIpkB,EAAMiqD,EAAoB76D,MAElB,KADZg1B,EAAOo9B,EAAUp9B,KAKb,KAAOA,EAAKyT,OAAO,KAAIzT,EAAOA,EAAKtlB,MAAM,IAC7CkB,EAAIkxB,SAAW,GACfs+B,GAASxvD,EAAKokB,EAAMmrC,KALlBvvD,EAAIkxB,SAAW,UAYvB4N,EAASqyB,GAAc,UAAU,WAC/B,OAAOb,GAAal3B,KAAKhqC,QACxB,CAAEivC,YAAY,IAIjBS,EAASqyB,GAAc,YAAY,WACjC,OAAOb,GAAal3B,KAAKhqC,QACxB,CAAEivC,YAAY,IAEb0rB,EAAW,CACb,IAAIuH,GAAwBvH,EAAUwH,gBAClCC,GAAwBzH,EAAU0H,gBAIlCH,IAAuBxyB,EAASoxB,GAAgB,mBAAmB,SAAyBwB,GAC9F,OAAOJ,GAAsBv+D,MAAMg3D,EAAW/2D,cAK5Cw+D,IAAuB1yB,EAASoxB,GAAgB,mBAAmB,SAAyBlwD,GAC9F,OAAOwxD,GAAsBz+D,MAAMg3D,EAAW/2D,cAIlD8qC,EAAeoyB,GAAgB,OAE/BhjE,EAAE,CAAEszC,QAAQ,EAAMJ,QAAS8mB,EAAgBnjB,MAAO5F,GAAe,CAC/DuO,IAAKwjB,0BC7+BP,OAKA,SAAUhgE,EAAQkC,EAAUu/D,EAAYp3D,GACtC,aAEF,IA+FIgzC,EA/FAqkB,EAAkB,CAAC,GAAI,SAAU,MAAO,KAAM,KAAM,KACpDC,EAAez/D,EAASqhB,cAAc,OAItCqD,EAAQllB,KAAKklB,MACbjlB,EAAMD,KAAKC,IACXkkC,EAAM1Q,KAAK0Q,IASf,SAAS+7B,EAAkB9iE,EAAIwmC,EAASC,GACpC,OAAOvqB,WAAW6mD,EAAO/iE,EAAIymC,GAAUD,GAY3C,SAASw8B,EAAexoB,EAAKx6C,EAAIymC,GAC7B,QAAIhoC,MAAMquC,QAAQ0N,KACdz4C,EAAKy4C,EAAK/T,EAAQzmC,GAAKymC,IAChB,GAWf,SAAS1kC,EAAKkhE,EAAKp5B,EAAUpD,GACzB,IAAI/nC,EAEJ,GAAKukE,EAIL,GAAIA,EAAIx6D,QACJw6D,EAAIx6D,QAAQohC,EAAUpD,QACnB,GAAIw8B,EAAItkE,SAAW4M,EAEtB,IADA7M,EAAI,EACGA,EAAIukE,EAAItkE,QACXkrC,EAASO,KAAK3D,EAASw8B,EAAIvkE,GAAIA,EAAGukE,GAClCvkE,SAGJ,IAAKA,KAAKukE,EACNA,EAAIlrB,eAAer5C,IAAMmrC,EAASO,KAAK3D,EAASw8B,EAAIvkE,GAAIA,EAAGukE,GAYvE,SAASC,EAAU9xC,EAAQhf,EAAM+wD,GAC7B,IAAIC,EAAqB,sBAAwBhxD,EAAO,KAAO+wD,EAAU,SACzE,OAAO,WACH,IAAIthE,EAAI,IAAI0V,MAAM,mBACd8rD,EAAQxhE,GAAKA,EAAEwhE,MAAQxhE,EAAEwhE,MAAM94D,QAAQ,kBAAmB,IACzDA,QAAQ,cAAe,IACvBA,QAAQ,6BAA8B,kBAAoB,sBAE3D+4B,EAAMpiC,EAAOvB,UAAYuB,EAAOvB,QAAQ0oB,MAAQnnB,EAAOvB,QAAQ2jC,KAInE,OAHIA,GACAA,EAAI8G,KAAKlpC,EAAOvB,QAASyjE,EAAoBC,GAE1CjyC,EAAOrtB,MAAM3D,KAAM4D,YAa9Bu6C,EADyB,mBAAlBt6C,OAAOs6C,OACL,SAAgB/8C,GACrB,GAAIA,IAAW+J,GAAwB,OAAX/J,EACxB,MAAM,IAAI0mC,UAAU,8CAIxB,IADA,IAAIkd,EAASnhD,OAAOzC,GACXoJ,EAAQ,EAAGA,EAAQ5G,UAAUrF,OAAQiM,IAAS,CACnD,IAAIyjC,EAASrqC,UAAU4G,GACvB,GAAIyjC,IAAW9iC,GAAwB,OAAX8iC,EACxB,IAAK,IAAIi1B,KAAWj1B,EACZA,EAAO0J,eAAeurB,KACtBle,EAAOke,GAAWj1B,EAAOi1B,IAKzC,OAAOle,GAGFnhD,OAAOs6C,OAWpB,IAAIj+C,EAAS4iE,GAAU,SAAgBK,EAAM/yC,EAAKgc,GAG9C,IAFA,IAAIhY,EAAOvwB,OAAOuwB,KAAKhE,GACnB9xB,EAAI,EACDA,EAAI81B,EAAK71B,UACP6tC,GAAUA,GAAS+2B,EAAK/uC,EAAK91B,MAAQ6M,KACtCg4D,EAAK/uC,EAAK91B,IAAM8xB,EAAIgE,EAAK91B,KAE7BA,IAEJ,OAAO6kE,IACR,SAAU,iBAST/2B,EAAQ02B,GAAU,SAAeK,EAAM/yC,GACvC,OAAOlwB,EAAOijE,EAAM/yC,GAAK,KAC1B,QAAS,iBAQZ,SAASgzC,EAAQC,EAAOxe,EAAMkS,GAC1B,IACIuM,EADAC,EAAQ1e,EAAKnhD,WAGjB4/D,EAASD,EAAM3/D,UAAYG,OAAOqkC,OAAOq7B,IAClC73B,YAAc23B,EACrBC,EAAOE,OAASD,EAEZxM,GACA5Y,EAAOmlB,EAAQvM,GAUvB,SAAS4L,EAAO/iE,EAAIymC,GAChB,OAAO,WACH,OAAOzmC,EAAG+D,MAAM0iC,EAASziC,YAWjC,SAAS6/D,EAAS5hE,EAAKshC,GACnB,MA1LgB,mBA0LLthC,EACAA,EAAI8B,MAAMw/B,GAAOA,EAAK,IAAkBh4B,EAAWg4B,GAEvDthC,EASX,SAAS6hE,EAAYC,EAAMC,GACvB,OAAQD,IAASx4D,EAAay4D,EAAOD,EASzC,SAASE,EAAkBziE,EAAQ0iE,EAAOvT,GACtC5uD,EAAKoiE,EAASD,IAAQ,SAASrkE,GAC3B2B,EAAOW,iBAAiBtC,EAAM8wD,GAAS,MAU/C,SAASyT,EAAqB5iE,EAAQ0iE,EAAOvT,GACzC5uD,EAAKoiE,EAASD,IAAQ,SAASrkE,GAC3B2B,EAAOmB,oBAAoB9C,EAAM8wD,GAAS,MAWlD,SAAS0T,EAAUhoB,EAAM5tB,GACrB,KAAO4tB,GAAM,CACT,GAAIA,GAAQ5tB,EACR,OAAO,EAEX4tB,EAAOA,EAAKioB,WAEhB,OAAO,EASX,SAASC,EAAM7kE,EAAKwD,GAChB,OAAOxD,EAAIsH,QAAQ9D,IAAS,EAQhC,SAASihE,EAASzkE,GACd,OAAOA,EAAI6mD,OAAOhoD,MAAM,QAU5B,SAASu8B,EAAQtK,EAAKttB,EAAMshE,GACxB,GAAIh0C,EAAIxpB,UAAYw9D,EAChB,OAAOh0C,EAAIxpB,QAAQ9D,GAGnB,IADA,IAAIxE,EAAI,EACDA,EAAI8xB,EAAI7xB,QAAQ,CACnB,GAAK6lE,GAAah0C,EAAI9xB,GAAG8lE,IAActhE,IAAWshE,GAAah0C,EAAI9xB,KAAOwE,EACtE,OAAOxE,EAEXA,IAEJ,OAAQ,EAShB,SAAS60B,EAAQ0vC,GACb,OAAOxkE,MAAMqF,UAAUgM,MAAMs6B,KAAK64B,EAAK,GAU3C,SAASwB,EAAYj0C,EAAKoY,EAAKr1B,GAK3B,IAJA,IAAI2gD,EAAU,GACV7gC,EAAS,GACT30B,EAAI,EAEDA,EAAI8xB,EAAI7xB,QAAQ,CACnB,IAAIsD,EAAM2mC,EAAMpY,EAAI9xB,GAAGkqC,GAAOpY,EAAI9xB,GAC9Bo8B,EAAQzH,EAAQpxB,GAAO,GACvBiyD,EAAQt1D,KAAK4xB,EAAI9xB,IAErB20B,EAAO30B,GAAKuD,EACZvD,IAaJ,OAVI6U,IAII2gD,EAHCtrB,EAGSsrB,EAAQ3gD,MAAK,SAAyBkmB,EAAGC,GAC/C,OAAOD,EAAEmP,GAAOlP,EAAEkP,MAHZsrB,EAAQ3gD,QAQnB2gD,EASX,SAASwQ,EAASzB,EAAK7nD,GAKnB,IAJA,IAAIupD,EAAQr8D,EACRs8D,EAAYxpD,EAAS,GAAGrL,cAAgBqL,EAAStL,MAAM,GAEvDpR,EAAI,EACDA,EAAIkkE,EAAgBjkE,QAAQ,CAI/B,IAFA2J,GADAq8D,EAAS/B,EAAgBlkE,IACPimE,EAASC,EAAYxpD,KAE3B6nD,EACR,OAAO36D,EAEX5J,IAEJ,OAAO6M,EAOX,IAAIs5D,EAAY,EAUhB,SAASC,EAAoBn8D,GACzB,IAAI68B,EAAM78B,EAAQo8D,eAAiBp8D,EACnC,OAAQ68B,EAAIw/B,aAAex/B,EAAIia,cAAgBv+C,EAGnD,IAEI+jE,EAAiB,iBAAkB/jE,EACnCgkE,EAAyBR,EAASxjE,EAAQ,kBAAoBqK,EAC9D45D,EAAqBF,GAJN,wCAIoC1rD,KAAKpY,UAAUwyC,WAElEyxB,EAAmB,QAEnBC,EAAmB,QAoBnBC,EAAW,CAAC,IAAK,KACjBC,EAAkB,CAAC,UAAW,WASlC,SAASC,EAAMC,EAASxuC,GACpB,IAAIO,EAAOp3B,KACXA,KAAKqlE,QAAUA,EACfrlE,KAAK62B,SAAWA,EAChB72B,KAAKuI,QAAU88D,EAAQ98D,QACvBvI,KAAKoB,OAASikE,EAAQvlE,QAAQwlE,YAI9BtlE,KAAKulE,WAAa,SAAS1tD,GACnB4rD,EAAS4B,EAAQvlE,QAAQm5C,OAAQ,CAACosB,KAClCjuC,EAAKm5B,QAAQ14C,IAIrB7X,KAAKwxB,OA4DT,SAASg0C,EAAaH,EAASI,EAAW1kB,GACtC,IAAI2kB,EAAc3kB,EAAM4kB,SAASpnE,OAC7BqnE,EAAqB7kB,EAAM8kB,gBAAgBtnE,OAC3CunE,EAvGU,EAuGCL,GAA4BC,EAAcE,GAAuB,EAC5EG,EAAuB,GAAZN,GAA2CC,EAAcE,GAAuB,EAE/F7kB,EAAM+kB,UAAYA,EAClB/kB,EAAMglB,UAAYA,EAEdD,IACAT,EAAQW,QAAU,IAKtBjlB,EAAM0kB,UAAYA,EAiBtB,SAA0BJ,EAAStkB,GAC/B,IAAIilB,EAAUX,EAAQW,QAClBL,EAAW5kB,EAAM4kB,SACjBM,EAAiBN,EAASpnE,OAGzBynE,EAAQE,aACTF,EAAQE,WAAaC,EAAqBplB,IAI1CklB,EAAiB,IAAMD,EAAQI,cAC/BJ,EAAQI,cAAgBD,EAAqBplB,GACnB,IAAnBklB,IACPD,EAAQI,eAAgB,GAG5B,IAAIF,EAAaF,EAAQE,WACrBE,EAAgBJ,EAAQI,cACxBC,EAAeD,EAAgBA,EAAcztD,OAASutD,EAAWvtD,OAEjEA,EAASooC,EAAMpoC,OAAS2tD,EAAUX,GACtC5kB,EAAMwlB,UAAY5/B,IAClBoa,EAAMylB,UAAYzlB,EAAMwlB,UAAYL,EAAWK,UAE/CxlB,EAAM0lB,MAAQC,EAASL,EAAc1tD,GACrCooC,EAAMr+C,SAAWikE,EAAYN,EAAc1tD,GA0B/C,SAAwBqtD,EAASjlB,GAC7B,IAAIpoC,EAASooC,EAAMpoC,OACfyM,EAAS4gD,EAAQY,aAAe,GAChCC,EAAYb,EAAQa,WAAa,GACjCC,EAAYd,EAAQc,WAAa,GA5LvB,IA8LV/lB,EAAM0kB,WA5LE,IA4L2BqB,EAAUrB,YAC7CoB,EAAYb,EAAQa,UAAY,CAC5BjoE,EAAGkoE,EAAUxnC,QAAU,EACvBzgC,EAAGioE,EAAUxtD,QAAU,GAG3B8L,EAAS4gD,EAAQY,YAAc,CAC3BhoE,EAAG+Z,EAAO/Z,EACVC,EAAG8Z,EAAO9Z,IAIlBkiD,EAAMzhB,OAASunC,EAAUjoE,GAAK+Z,EAAO/Z,EAAIwmB,EAAOxmB,GAChDmiD,EAAMznC,OAASutD,EAAUhoE,GAAK8Z,EAAO9Z,EAAIumB,EAAOvmB,GA3ChDkoE,CAAef,EAASjlB,GACxBA,EAAMimB,gBAAkBC,EAAalmB,EAAMzhB,OAAQyhB,EAAMznC,QAEzD,IAuNcvE,EAAOlN,EAvNjBq/D,EAAkBC,EAAYpmB,EAAMylB,UAAWzlB,EAAMzhB,OAAQyhB,EAAMznC,QACvEynC,EAAMqmB,iBAAmBF,EAAgBtoE,EACzCmiD,EAAMsmB,iBAAmBH,EAAgBroE,EACzCkiD,EAAMmmB,gBAAmBzkE,EAAIykE,EAAgBtoE,GAAK6D,EAAIykE,EAAgBroE,GAAMqoE,EAAgBtoE,EAAIsoE,EAAgBroE,EAEhHkiD,EAAMnoC,MAAQwtD,GAkNArxD,EAlNyBqxD,EAAcT,SAmN9CgB,GADc9+D,EAlN0C89D,GAmNxC,GAAI99D,EAAI,GAAIs9D,GAAmBwB,EAAY5xD,EAAM,GAAIA,EAAM,GAAIowD,IAnNX,EAC3EpkB,EAAMumB,SAAWlB,EAsMrB,SAAqBrxD,EAAOlN,GACxB,OAAO6+D,EAAS7+D,EAAI,GAAIA,EAAI,GAAIs9D,GAAmBuB,EAAS3xD,EAAM,GAAIA,EAAM,GAAIowD,GAvM/CoC,CAAYnB,EAAcT,SAAUA,GAAY,EAEjF5kB,EAAMymB,YAAexB,EAAQc,UAAsC/lB,EAAM4kB,SAASpnE,OAC9EynE,EAAQc,UAAUU,YAAezmB,EAAM4kB,SAASpnE,OAASynE,EAAQc,UAAUU,YADtCzmB,EAAM4kB,SAASpnE,OAwC5D,SAAkCynE,EAASjlB,GACvC,IAEI0mB,EAAUC,EAAWC,EAAW9mD,EAFhC2W,EAAOwuC,EAAQ4B,cAAgB7mB,EAC/BylB,EAAYzlB,EAAMwlB,UAAY/uC,EAAK+uC,UAGvC,GArNe,GAqNXxlB,EAAM0kB,YAA8Be,EA1NrB,IA0NqDhvC,EAAKiwC,WAAat8D,GAAY,CAClG,IAAIm0B,EAASyhB,EAAMzhB,OAAS9H,EAAK8H,OAC7BhmB,EAASynC,EAAMznC,OAASke,EAAKle,OAE7BsxC,EAAIuc,EAAYX,EAAWlnC,EAAQhmB,GACvCouD,EAAY9c,EAAEhsD,EACd+oE,EAAY/c,EAAE/rD,EACd4oE,EAAYhlE,EAAImoD,EAAEhsD,GAAK6D,EAAImoD,EAAE/rD,GAAM+rD,EAAEhsD,EAAIgsD,EAAE/rD,EAC3CgiB,EAAYomD,EAAa3nC,EAAQhmB,GAEjC0sD,EAAQ4B,aAAe7mB,OAGvB0mB,EAAWjwC,EAAKiwC,SAChBC,EAAYlwC,EAAKkwC,UACjBC,EAAYnwC,EAAKmwC,UACjB9mD,EAAY2W,EAAK3W,UAGrBkgC,EAAM0mB,SAAWA,EACjB1mB,EAAM2mB,UAAYA,EAClB3mB,EAAM4mB,UAAYA,EAClB5mB,EAAMlgC,UAAYA,EAhElBgnD,CAAyB7B,EAASjlB,GAGlC,IAAI3/C,EAASikE,EAAQ98D,QACjB07D,EAAUljB,EAAM+mB,SAAS1mE,OAAQA,KACjCA,EAAS2/C,EAAM+mB,SAAS1mE,QAE5B2/C,EAAM3/C,OAASA,EA/Df2mE,CAAiB1C,EAAStkB,GAG1BskB,EAAQtU,KAAK,eAAgBhQ,GAE7BskB,EAAQ2C,UAAUjnB,GAClBskB,EAAQW,QAAQc,UAAY/lB,EA0HhC,SAASolB,EAAqBplB,GAK1B,IAFA,IAAI4kB,EAAW,GACXrnE,EAAI,EACDA,EAAIyiD,EAAM4kB,SAASpnE,QACtBonE,EAASrnE,GAAK,CACVQ,QAAS4oB,EAAMq5B,EAAM4kB,SAASrnE,GAAGQ,SACjCC,QAAS2oB,EAAMq5B,EAAM4kB,SAASrnE,GAAGS,UAErCT,IAGJ,MAAO,CACHioE,UAAW5/B,IACXg/B,SAAUA,EACVhtD,OAAQ2tD,EAAUX,GAClBrmC,OAAQyhB,EAAMzhB,OACdhmB,OAAQynC,EAAMznC,QAStB,SAASgtD,EAAUX,GACf,IAAIM,EAAiBN,EAASpnE,OAG9B,GAAuB,IAAnB0nE,EACA,MAAO,CACHrnE,EAAG8oB,EAAMi+C,EAAS,GAAG7mE,SACrBD,EAAG6oB,EAAMi+C,EAAS,GAAG5mE,UAK7B,IADA,IAAIH,EAAI,EAAGC,EAAI,EAAGP,EAAI,EACfA,EAAI2nE,GACPrnE,GAAK+mE,EAASrnE,GAAGQ,QACjBD,GAAK8mE,EAASrnE,GAAGS,QACjBT,IAGJ,MAAO,CACHM,EAAG8oB,EAAM9oB,EAAIqnE,GACbpnE,EAAG6oB,EAAM7oB,EAAIonE,IAWrB,SAASkB,EAAYX,EAAW5nE,EAAGC,GAC/B,MAAO,CACHD,EAAGA,EAAI4nE,GAAa,EACpB3nE,EAAGA,EAAI2nE,GAAa,GAU5B,SAASS,EAAaroE,EAAGC,GACrB,OAAID,IAAMC,EAzTO,EA6Tb4D,EAAI7D,IAAM6D,EAAI5D,GACPD,EAAI,EA7TE,EACC,EA8TXC,EAAI,EA7TI,EACE,GAsUrB,SAAS8nE,EAAYsB,EAAIC,EAAI7xC,GACpBA,IACDA,EAAQ6uC,GAEZ,IAAItmE,EAAIspE,EAAG7xC,EAAM,IAAM4xC,EAAG5xC,EAAM,IAC5Bx3B,EAAIqpE,EAAG7xC,EAAM,IAAM4xC,EAAG5xC,EAAM,IAEhC,OAAO7zB,KAAK2lE,KAAMvpE,EAAIA,EAAMC,EAAIA,GAUpC,SAAS6nE,EAASuB,EAAIC,EAAI7xC,GACjBA,IACDA,EAAQ6uC,GAEZ,IAAItmE,EAAIspE,EAAG7xC,EAAM,IAAM4xC,EAAG5xC,EAAM,IAC5Bx3B,EAAIqpE,EAAG7xC,EAAM,IAAM4xC,EAAG5xC,EAAM,IAChC,OAA0B,IAAnB7zB,KAAK4lE,MAAMvpE,EAAGD,GAAW4D,KAAK6lE,GA1TzCjD,EAAM1hE,UAAY,CAKd6sD,QAAS,aAKT/+B,KAAM,WACFxxB,KAAKsoE,MAAQzE,EAAkB7jE,KAAKuI,QAASvI,KAAKsoE,KAAMtoE,KAAKulE,YAC7DvlE,KAAKuoE,UAAY1E,EAAkB7jE,KAAKoB,OAAQpB,KAAKuoE,SAAUvoE,KAAKulE,YACpEvlE,KAAKwoE,OAAS3E,EAAkBa,EAAoB1kE,KAAKuI,SAAUvI,KAAKwoE,MAAOxoE,KAAKulE,aAMxFkD,QAAS,WACLzoE,KAAKsoE,MAAQtE,EAAqBhkE,KAAKuI,QAASvI,KAAKsoE,KAAMtoE,KAAKulE,YAChEvlE,KAAKuoE,UAAYvE,EAAqBhkE,KAAKoB,OAAQpB,KAAKuoE,SAAUvoE,KAAKulE,YACvEvlE,KAAKwoE,OAASxE,EAAqBU,EAAoB1kE,KAAKuI,SAAUvI,KAAKwoE,MAAOxoE,KAAKulE,cA4T/F,IAAImD,EAAkB,CAClBC,UA/Xc,EAgYdC,UA/Xa,EAgYbC,QA/XY,GAkYZC,EAAuB,YACvBC,EAAsB,oBAO1B,SAASC,IACLhpE,KAAKsoE,KAAOQ,EACZ9oE,KAAKwoE,MAAQO,EAEb/oE,KAAKipE,SAAU,EAEf7D,EAAMzhE,MAAM3D,KAAM4D,WAGtBw/D,EAAQ4F,EAAY5D,EAAO,CAKvB7U,QAAS,SAAmB14C,GACxB,IAAI4tD,EAAYiD,EAAgB7wD,EAAGpY,MA3ZzB,EA8ZNgmE,GAAyC,IAAd5tD,EAAGqxD,SAC9BlpE,KAAKipE,SAAU,GA9ZV,EAiaLxD,GAAuC,IAAb5tD,EAAG3W,QAC7BukE,EAjaI,GAqaHzlE,KAAKipE,UAraF,EAyaJxD,IACAzlE,KAAKipE,SAAU,GAGnBjpE,KAAK62B,SAAS72B,KAAKqlE,QAASI,EAAW,CACnCE,SAAU,CAAC9tD,GACXguD,gBAAiB,CAAChuD,GAClBsxD,YAAalE,EACb6C,SAAUjwD,QAKtB,IAAIuxD,GAAoB,CACpBC,YAzbc,EA0bdC,YAzba,EA0bbC,UAzbY,EA0bZC,cAzbe,EA0bfC,WA1be,GA8bfC,GAAyB,CACzB,EAAG1E,EACH,EAzciB,MA0cjB,EAAGC,EACH,EAzcoB,UA4cpB0E,GAAyB,cACzBC,GAAwB,sCAa5B,SAASC,KACL7pE,KAAKsoE,KAAOqB,GACZ3pE,KAAKwoE,MAAQoB,GAEbxE,EAAMzhE,MAAM3D,KAAM4D,WAElB5D,KAAKk4C,MAASl4C,KAAKqlE,QAAQW,QAAQ8D,cAAgB,GAhBnDhpE,EAAOipE,iBAAmBjpE,EAAOkpE,eACjCL,GAAyB,gBACzBC,GAAwB,6CAiB5BxG,EAAQyG,GAAmBzE,EAAO,CAK9B7U,QAAS,SAAmB14C,GACxB,IAAIqgC,EAAQl4C,KAAKk4C,MACb+xB,GAAgB,EAEhBC,EAAsBryD,EAAGpY,KAAKk7C,cAAcxwC,QAAQ,KAAM,IAC1Ds7D,EAAY2D,GAAkBc,GAC9Bf,EAAcO,GAAuB7xD,EAAGsxD,cAAgBtxD,EAAGsxD,YAE3DgB,EAAWhB,GAAenE,EAG1BoF,EAAa1vC,EAAQwd,EAAOrgC,EAAGwyD,UAAW,aA/epC,EAkfN5E,IAA0C,IAAd5tD,EAAGqxD,QAAgBiB,GAC3CC,EAAa,IACblyB,EAAM15C,KAAKqZ,GACXuyD,EAAalyB,EAAM35C,OAAS,GAEb,GAAZknE,IACPwE,GAAgB,GAIhBG,EAAa,IAKjBlyB,EAAMkyB,GAAcvyD,EAEpB7X,KAAK62B,SAAS72B,KAAKqlE,QAASI,EAAW,CACnCE,SAAUztB,EACV2tB,gBAAiB,CAAChuD,GAClBsxD,YAAaA,EACbrB,SAAUjwD,IAGVoyD,GAEA/xB,EAAMiB,OAAOixB,EAAY,OAKrC,IAAIE,GAAyB,CACzBC,WAlhBc,EAmhBdC,UAlhBa,EAmhBbC,SAlhBY,EAmhBZC,YAlhBe,GAqhBfC,GAA6B,aAC7BC,GAA6B,4CAOjC,SAASC,KACL7qE,KAAKuoE,SAAWoC,GAChB3qE,KAAKwoE,MAAQoC,GACb5qE,KAAK8qE,SAAU,EAEf1F,EAAMzhE,MAAM3D,KAAM4D,WAsCtB,SAASmnE,GAAuBlzD,EAAIpY,GAChC,IAAIqwD,EAAM38B,EAAQtb,EAAGqgB,SACjB8yC,EAAU73C,EAAQtb,EAAGozD,gBAMzB,OAJW,GAAPxrE,IACAqwD,EAAMuU,EAAYvU,EAAI/nC,OAAOijD,GAAU,cAAc,IAGlD,CAAClb,EAAKkb,GA3CjB5H,EAAQyH,GAAkBzF,EAAO,CAC7B7U,QAAS,SAAmB14C,GACxB,IAAIpY,EAAO6qE,GAAuBzyD,EAAGpY,MAOrC,GAjjBU,IA6iBNA,IACAO,KAAK8qE,SAAU,GAGd9qE,KAAK8qE,QAAV,CAIA,IAAI5yC,EAAU6yC,GAAuB/gC,KAAKhqC,KAAM6X,EAAIpY,GAGzC,GAAPA,GAAqCy4B,EAAQ,GAAG35B,OAAS25B,EAAQ,GAAG35B,QAAW,IAC/EyB,KAAK8qE,SAAU,GAGnB9qE,KAAK62B,SAAS72B,KAAKqlE,QAAS5lE,EAAM,CAC9BkmE,SAAUztC,EAAQ,GAClB2tC,gBAAiB3tC,EAAQ,GACzBixC,YAAanE,EACb8C,SAAUjwD,QAsBtB,IAAIqzD,GAAkB,CAClBX,WAvlBc,EAwlBdC,UAvlBa,EAwlBbC,SAvlBY,EAwlBZC,YAvlBe,GA0lBfS,GAAsB,4CAO1B,SAASC,KACLprE,KAAKuoE,SAAW4C,GAChBnrE,KAAKqrE,UAAY,GAEjBjG,EAAMzhE,MAAM3D,KAAM4D,WA0BtB,SAAS0nE,GAAWzzD,EAAIpY,GACpB,IAAI8rE,EAAap4C,EAAQtb,EAAGqgB,SACxBmzC,EAAYrrE,KAAKqrE,UAGrB,GAAW,EAAP5rE,GAA2D,IAAtB8rE,EAAWhtE,OAEhD,OADA8sE,EAAUE,EAAW,GAAGC,aAAc,EAC/B,CAACD,EAAYA,GAGxB,IAAIjtE,EACAY,EACA+rE,EAAiB93C,EAAQtb,EAAGozD,gBAC5BQ,EAAuB,GACvBrqE,EAASpB,KAAKoB,OAQlB,GALAlC,EAAgBqsE,EAAWllE,QAAO,SAASqlE,GACvC,OAAOzH,EAAUyH,EAAMtqE,OAAQA,MAppBrB,IAwpBV3B,EAEA,IADAnB,EAAI,EACGA,EAAIY,EAAcX,QACrB8sE,EAAUnsE,EAAcZ,GAAGktE,aAAc,EACzCltE,IAMR,IADAA,EAAI,EACGA,EAAI2sE,EAAe1sE,QAClB8sE,EAAUJ,EAAe3sE,GAAGktE,aAC5BC,EAAqBjtE,KAAKysE,EAAe3sE,IAIlC,GAAPmB,UACO4rE,EAAUJ,EAAe3sE,GAAGktE,YAEvCltE,IAGJ,OAAKmtE,EAAqBltE,OAInB,CAEH8lE,EAAYnlE,EAAc6oB,OAAO0jD,GAAuB,cAAc,GACtEA,QAPJ,EAwBJ,SAASE,KACLvG,EAAMzhE,MAAM3D,KAAM4D,WAElB,IAAI2sD,EAAUoS,EAAO3iE,KAAKuwD,QAASvwD,MACnCA,KAAK0rE,MAAQ,IAAIN,GAAWprE,KAAKqlE,QAAS9U,GAC1CvwD,KAAK4rE,MAAQ,IAAI5C,EAAWhpE,KAAKqlE,QAAS9U,GAE1CvwD,KAAK6rE,aAAe,KACpB7rE,KAAK8rE,YAAc,GAqCvB,SAASC,GAActG,EAAWuG,GAnvBhB,EAovBVvG,GACAzlE,KAAK6rE,aAAeG,EAAUnG,gBAAgB,GAAG2F,WACjDS,GAAajiC,KAAKhqC,KAAMgsE,IACL,GAAZvG,GACPwG,GAAajiC,KAAKhqC,KAAMgsE,GAIhC,SAASC,GAAaD,GAClB,IAAIN,EAAQM,EAAUnG,gBAAgB,GAEtC,GAAI6F,EAAMF,aAAexrE,KAAK6rE,aAAc,CACxC,IAAIK,EAAY,CAACttE,EAAG8sE,EAAM5sE,QAASD,EAAG6sE,EAAM3sE,SAC5CiB,KAAK8rE,YAAYttE,KAAK0tE,GACtB,IAAIC,EAAMnsE,KAAK8rE,YAOfhwD,YANsB,WAClB,IAAIxd,EAAI6tE,EAAIvlE,QAAQslE,GAChB5tE,GAAK,GACL6tE,EAAIhzB,OAAO76C,EAAG,KAnEV,OA0EpB,SAAS8tE,GAAiBJ,GAEtB,IADA,IAAIptE,EAAIotE,EAAUlE,SAAShpE,QAASD,EAAImtE,EAAUlE,SAAS/oE,QAClDT,EAAI,EAAGA,EAAI0B,KAAK8rE,YAAYvtE,OAAQD,IAAK,CAC9C,IAAIsmC,EAAI5kC,KAAK8rE,YAAYxtE,GACrB+tE,EAAK7pE,KAAKC,IAAI7D,EAAIgmC,EAAEhmC,GAAI0tE,EAAK9pE,KAAKC,IAAI5D,EAAI+lC,EAAE/lC,GAChD,GAAIwtE,GA9ES,IA8EeC,GA9Ef,GA+ET,OAAO,EAGf,OAAO,EA3KXlJ,EAAQgI,GAAYhG,EAAO,CACvB7U,QAAS,SAAoB14C,GACzB,IAAIpY,EAAOyrE,GAAgBrzD,EAAGpY,MAC1By4B,EAAUozC,GAAWthC,KAAKhqC,KAAM6X,EAAIpY,GACnCy4B,GAILl4B,KAAK62B,SAAS72B,KAAKqlE,QAAS5lE,EAAM,CAC9BkmE,SAAUztC,EAAQ,GAClB2tC,gBAAiB3tC,EAAQ,GACzBixC,YAAanE,EACb8C,SAAUjwD,OA0FtBurD,EAAQuI,GAAiBvG,EAAO,CAO5B7U,QAAS,SAAoB8U,EAASkH,EAAYC,GAC9C,IAAIrC,EAAWqC,EAAUrD,aAAenE,EACpCyH,EAAWD,EAAUrD,aAAelE,EAExC,KAAIwH,GAAWD,EAAUE,oBAAsBF,EAAUE,mBAAmBC,kBAA5E,CAKA,GAAIxC,EACA4B,GAAc/hC,KAAKhqC,KAAMusE,EAAYC,QAClC,GAAIC,GAAWL,GAAiBpiC,KAAKhqC,KAAMwsE,GAC9C,OAGJxsE,KAAK62B,SAASwuC,EAASkH,EAAYC,KAMvC/D,QAAS,WACLzoE,KAAK0rE,MAAMjD,UACXzoE,KAAK4rE,MAAMnD,aA0CnB,IAAImE,GAAwBtI,EAAS7B,EAAarrD,MAAO,eACrDy1D,GAAsBD,KAA0BzhE,EAGhD2hE,GAAuB,UACvBC,GAAoB,OACpBC,GAA4B,eAC5BC,GAAoB,OACpBC,GAAqB,QACrBC,GAAqB,QACrBC,GA4IJ,WACI,IAAKP,GACD,OAAO,EAEX,IAAIQ,EAAW,GACXC,EAAcxsE,EAAOysE,KAAOzsE,EAAOysE,IAAIC,SAO3C,MANA,CAAC,OAAQ,eAAgB,QAAS,QAAS,cAAe,QAAQnlE,SAAQ,SAASxG,GAI/EwrE,EAASxrE,IAAOyrE,GAAcxsE,EAAOysE,IAAIC,SAAS,eAAgB3rE,MAE/DwrE,EAxJYI,GASvB,SAASC,GAAYrI,EAAS37D,GAC1B1J,KAAKqlE,QAAUA,EACfrlE,KAAK+D,IAAI2F,GAGbgkE,GAAYhqE,UAAY,CAKpBK,IAAK,SAAS2F,GAENA,GAASojE,KACTpjE,EAAQ1J,KAAK2tE,WAGbd,IAAuB7sE,KAAKqlE,QAAQ98D,QAAQ6O,OAASg2D,GAAiB1jE,KACtE1J,KAAKqlE,QAAQ98D,QAAQ6O,MAAMw1D,IAAyBljE,GAExD1J,KAAK4tE,QAAUlkE,EAAMixC,cAAcwL,QAMvC1nC,OAAQ,WACJze,KAAK+D,IAAI/D,KAAKqlE,QAAQvlE,QAAQ+Z,cAOlC8zD,QAAS,WACL,IAAIC,EAAU,GAMd,OALAjsE,EAAK3B,KAAKqlE,QAAQwI,aAAa,SAASC,GAChCrK,EAASqK,EAAWhuE,QAAQm5C,OAAQ,CAAC60B,MACrCF,EAAUA,EAAQ7lD,OAAO+lD,EAAWC,sBAgEpD,SAA2BH,GAEvB,GAAIzJ,EAAMyJ,EAASX,IACf,OAAOA,GAGX,IAAIe,EAAU7J,EAAMyJ,EAASV,IACzBe,EAAU9J,EAAMyJ,EAAST,IAM7B,OAAIa,GAAWC,EACJhB,GAIPe,GAAWC,EACJD,EAAUd,GAAqBC,GAItChJ,EAAMyJ,EAASZ,IACRA,GAGJD,GAxFImB,CAAkBN,EAAQnvE,KAAK,OAO1C0vE,gBAAiB,SAASptB,GACtB,IAAI+mB,EAAW/mB,EAAM+mB,SACjBjnD,EAAYkgC,EAAMimB,gBAGtB,GAAIhnE,KAAKqlE,QAAQW,QAAQoI,UACrBtG,EAASznE,qBADb,CAKA,IAAIutE,EAAU5tE,KAAK4tE,QACfS,EAAUlK,EAAMyJ,EAASX,MAAuBG,GAAkC,KAClFa,EAAU9J,EAAMyJ,EAAST,MAAwBC,GAAiBD,SAClEa,EAAU7J,EAAMyJ,EAASV,MAAwBE,GAAiBF,SAEtE,GAAImB,EAAS,CAGT,IAAIC,EAAyC,IAA1BvtB,EAAM4kB,SAASpnE,OAC9BgwE,EAAgBxtB,EAAMr+C,SAAW,EACjC8rE,EAAiBztB,EAAMylB,UAAY,IAEvC,GAAI8H,GAAgBC,GAAiBC,EACjC,OAIR,IAAIR,IAAWC,EAKf,OAAII,GACCJ,GAj3BcQ,EAi3BH5tD,GACXmtD,GAj3BYU,GAi3BD7tD,EACL7gB,KAAK2uE,WAAW7G,QAH3B,IAWJ6G,WAAY,SAAS7G,GACjB9nE,KAAKqlE,QAAQW,QAAQoI,WAAY,EACjCtG,EAASznE,mBAiFjB,IAMIuuE,GAAe,GAQnB,SAASC,GAAW/uE,GAChBE,KAAKF,QAAUq+C,EAAO,GAAIn+C,KAAKsL,SAAUxL,GAAW,IAEpDE,KAAK44C,GApgCE6rB,IAsgCPzkE,KAAKqlE,QAAU,KAGfrlE,KAAKF,QAAQm5C,OAASyqB,EAAY1jE,KAAKF,QAAQm5C,QAAQ,GAEvDj5C,KAAK45C,MAxBY,EA0BjB55C,KAAK8uE,aAAe,GACpB9uE,KAAK+uE,YAAc,GAqOvB,SAASC,GAASp1B,GACd,OA5PkB,GA4PdA,EACO,SA/PG,EAgQHA,EACA,MAlQK,EAmQLA,EACA,OArQG,EAsQHA,EACA,QAEJ,GAQX,SAASq1B,GAAapuD,GAClB,OAnuCiB,IAmuCbA,EACO,OAruCI,GAsuCJA,EACA,KAzuCM,GA0uCNA,EACA,OA1uCO,GA2uCPA,EACA,QAEJ,GASX,SAASquD,GAA6BC,EAAiBrB,GACnD,IAAIzI,EAAUyI,EAAWzI,QACzB,OAAIA,EACOA,EAAQvjE,IAAIqtE,GAEhBA,EAQX,SAASC,KACLP,GAAWlrE,MAAM3D,KAAM4D,WA6D3B,SAASyrE,KACLD,GAAezrE,MAAM3D,KAAM4D,WAE3B5D,KAAKsvE,GAAK,KACVtvE,KAAKuvE,GAAK,KA4Ed,SAASC,KACLJ,GAAezrE,MAAM3D,KAAM4D,WAsC/B,SAAS6rE,KACLZ,GAAWlrE,MAAM3D,KAAM4D,WAEvB5D,KAAK0vE,OAAS,KACd1vE,KAAK2vE,OAAS,KAmElB,SAASC,KACLR,GAAezrE,MAAM3D,KAAM4D,WA8B/B,SAASisE,KACLT,GAAezrE,MAAM3D,KAAM4D,WA2D/B,SAASksE,KACLjB,GAAWlrE,MAAM3D,KAAM4D,WAIvB5D,KAAK+vE,OAAQ,EACb/vE,KAAKgwE,SAAU,EAEfhwE,KAAK0vE,OAAS,KACd1vE,KAAK2vE,OAAS,KACd3vE,KAAK+lD,MAAQ,EAqGjB,SAASrsC,GAAOnR,EAASzI,GAGrB,OAFAA,EAAUA,GAAW,IACb+tE,YAAcnK,EAAY5jE,EAAQ+tE,YAAan0D,GAAOpO,SAAS2kE,QAChE,IAAIC,GAAQ3nE,EAASzI,GAiIhC,SAASowE,GAAQ3nE,EAASzI,GACtBE,KAAKF,QAAUq+C,EAAO,GAAIzkC,GAAOpO,SAAUxL,GAAW,IAEtDE,KAAKF,QAAQwlE,YAActlE,KAAKF,QAAQwlE,aAAe/8D,EAEvDvI,KAAKmwE,SAAW,GAChBnwE,KAAKgmE,QAAU,GACfhmE,KAAK6tE,YAAc,GACnB7tE,KAAKowE,YAAc,GAEnBpwE,KAAKuI,QAAUA,EACfvI,KAAK+gD,MArwDE,IAqwD0B/gD,KAlxDRF,QAAQuwE,aAItBvL,EACA+E,GACA9E,EACAqG,GACCvG,EAGD8G,GAFA3C,IAywDsBhpE,KArwDNwlE,GAswD3BxlE,KAAK6Z,YAAc,IAAI6zD,GAAY1tE,KAAMA,KAAKF,QAAQ+Z,aAEtDy2D,GAAetwE,MAAM,GAErB2B,EAAK3B,KAAKF,QAAQ+tE,aAAa,SAASvmC,GACpC,IAAIwmC,EAAa9tE,KAAK0I,IAAI,IAAK4+B,EAAK,GAAIA,EAAK,KAC7CA,EAAK,IAAMwmC,EAAWyC,cAAcjpC,EAAK,IACzCA,EAAK,IAAMwmC,EAAW0C,eAAelpC,EAAK,MAC3CtnC,MA4PP,SAASswE,GAAejL,EAAS38D,GAC7B,IAIIR,EAJAK,EAAU88D,EAAQ98D,QACjBA,EAAQ6O,QAIbzV,EAAK0jE,EAAQvlE,QAAQ2wE,UAAU,SAAS/mE,EAAOsI,GAC3C9J,EAAOo8D,EAAS/7D,EAAQ6O,MAAOpF,GAC3BtJ,GACA28D,EAAQ+K,YAAYloE,GAAQK,EAAQ6O,MAAMlP,GAC1CK,EAAQ6O,MAAMlP,GAAQwB,GAEtBnB,EAAQ6O,MAAMlP,GAAQm9D,EAAQ+K,YAAYloE,IAAS,MAGtDQ,IACD28D,EAAQ+K,YAAc,KA9nC9BvB,GAAWnrE,UAAY,CAKnB4H,SAAU,GAOVvH,IAAK,SAASjE,GAKV,OAJAq+C,EAAOn+C,KAAKF,QAASA,GAGrBE,KAAKqlE,SAAWrlE,KAAKqlE,QAAQxrD,YAAY4E,SAClCze,MAQXuwE,cAAe,SAASpB,GACpB,GAAIvM,EAAeuM,EAAiB,gBAAiBnvE,MACjD,OAAOA,KAGX,IAAI8uE,EAAe9uE,KAAK8uE,aAMxB,OAJKA,GADLK,EAAkBD,GAA6BC,EAAiBnvE,OAC9B44C,MAC9Bk2B,EAAaK,EAAgBv2B,IAAMu2B,EACnCA,EAAgBoB,cAAcvwE,OAE3BA,MAQX0wE,kBAAmB,SAASvB,GACxB,OAAIvM,EAAeuM,EAAiB,oBAAqBnvE,QAIzDmvE,EAAkBD,GAA6BC,EAAiBnvE,aACzDA,KAAK8uE,aAAaK,EAAgBv2B,KAJ9B54C,MAafwwE,eAAgB,SAASrB,GACrB,GAAIvM,EAAeuM,EAAiB,iBAAkBnvE,MAClD,OAAOA,KAGX,IAAI+uE,EAAc/uE,KAAK+uE,YAMvB,OAJ+C,IAA3Cr0C,EAAQq0C,EADZI,EAAkBD,GAA6BC,EAAiBnvE,SAE5D+uE,EAAYvwE,KAAK2wE,GACjBA,EAAgBqB,eAAexwE,OAE5BA,MAQX2wE,mBAAoB,SAASxB,GACzB,GAAIvM,EAAeuM,EAAiB,qBAAsBnvE,MACtD,OAAOA,KAGXmvE,EAAkBD,GAA6BC,EAAiBnvE,MAChE,IAAIwK,EAAQkwB,EAAQ16B,KAAK+uE,YAAaI,GAItC,OAHI3kE,GAAS,GACTxK,KAAK+uE,YAAY51B,OAAO3uC,EAAO,GAE5BxK,MAOX4wE,mBAAoB,WAChB,OAAO5wE,KAAK+uE,YAAYxwE,OAAS,GAQrCsyE,iBAAkB,SAAS1B,GACvB,QAASnvE,KAAK8uE,aAAaK,EAAgBv2B,KAQ/CmY,KAAM,SAAShQ,GACX,IAAI3pB,EAAOp3B,KACP45C,EAAQ55C,KAAK45C,MAEjB,SAASmX,EAAKpyD,GACVy4B,EAAKiuC,QAAQtU,KAAKpyD,EAAOoiD,GAIzBnH,EArJM,GAsJNmX,EAAK35B,EAAKt3B,QAAQnB,MAAQqwE,GAASp1B,IAGvCmX,EAAK35B,EAAKt3B,QAAQnB,OAEdoiD,EAAM+vB,iBACN/f,EAAKhQ,EAAM+vB,iBAIXl3B,GAhKM,GAiKNmX,EAAK35B,EAAKt3B,QAAQnB,MAAQqwE,GAASp1B,KAU3Cm3B,QAAS,SAAShwB,GACd,GAAI/gD,KAAKgxE,UACL,OAAOhxE,KAAK+wD,KAAKhQ,GAGrB/gD,KAAK45C,MAAQg1B,IAOjBoC,QAAS,WAEL,IADA,IAAI1yE,EAAI,EACDA,EAAI0B,KAAK+uE,YAAYxwE,QAAQ,CAChC,KAAkC,GAA5ByB,KAAK+uE,YAAYzwE,GAAGs7C,OACtB,OAAO,EAEXt7C,IAEJ,OAAO,GAOX0pE,UAAW,SAASwE,GAGhB,IAAIyE,EAAiB9yB,EAAO,GAAIquB,GAGhC,IAAK/I,EAASzjE,KAAKF,QAAQm5C,OAAQ,CAACj5C,KAAMixE,IAGtC,OAFAjxE,KAAKkxE,aACLlxE,KAAK45C,MAAQg1B,IAKA,GAAb5uE,KAAK45C,QACL55C,KAAK45C,MAvNI,GA0Nb55C,KAAK45C,MAAQ55C,KAAK0zC,QAAQu9B,GAIT,GAAbjxE,KAAK45C,OACL55C,KAAK+wE,QAAQE,IAWrBv9B,QAAS,SAAS84B,KAOlBuB,eAAgB,aAOhBmD,MAAO,cA8DX9N,EAAQgM,GAAgBP,GAAY,CAKhCvjE,SAAU,CAKNq6D,SAAU,GASdwL,SAAU,SAASpwB,GACf,IAAIqwB,EAAiBpxE,KAAKF,QAAQ6lE,SAClC,OAA0B,IAAnByL,GAAwBrwB,EAAM4kB,SAASpnE,SAAW6yE,GAS7D19B,QAAS,SAASqN,GACd,IAAInH,EAAQ55C,KAAK45C,MACb6rB,EAAY1kB,EAAM0kB,UAElB4L,EAAuB,EAARz3B,EACf03B,EAAUtxE,KAAKmxE,SAASpwB,GAG5B,OAAIswB,IAlzCO,EAkzCU5L,IAA6B6L,GAvVpC,GAwVH13B,EACAy3B,GAAgBC,EArzCnB,EAszCA7L,EA5VE,EA6VK7rB,EA/VL,EAgWOA,EA/VL,EAkWDA,EAnWD,EAqWHg1B,MAiBfxL,EAAQiM,GAAeD,GAAgB,CAKnC9jE,SAAU,CACN3M,MAAO,MACP8nC,UAAW,GACXk/B,SAAU,EACV9kD,UA50CY0wD,IA+0ChBxD,eAAgB,WACZ,IAAIltD,EAAY7gB,KAAKF,QAAQ+gB,UACzB+sD,EAAU,GAOd,OA11CmBa,EAo1Cf5tD,GACA+sD,EAAQpvE,KAAK2uE,IAp1CAuB,GAs1Cb7tD,GACA+sD,EAAQpvE,KAAK0uE,IAEVU,GAGX4D,cAAe,SAASzwB,GACpB,IAAIjhD,EAAUE,KAAKF,QACf2xE,GAAW,EACX/uE,EAAWq+C,EAAMr+C,SACjBme,EAAYkgC,EAAMlgC,UAClBjiB,EAAImiD,EAAMzhB,OACVzgC,EAAIkiD,EAAMznC,OAed,OAZMuH,EAAY/gB,EAAQ+gB,YAt2CP4tD,EAu2CX3uE,EAAQ+gB,WACRA,EAAmB,IAANjiB,EA92CR,EA82CqCA,EAAI,EA72CzC,EACC,EA62CN6yE,EAAW7yE,GAAKoB,KAAKsvE,GACrB5sE,EAAWF,KAAKC,IAAIs+C,EAAMzhB,UAE1Bze,EAAmB,IAANhiB,EAl3CR,EAk3CqCA,EAAI,EA/2C3C,EACE,GA+2CL4yE,EAAW5yE,GAAKmB,KAAKuvE,GACrB7sE,EAAWF,KAAKC,IAAIs+C,EAAMznC,UAGlCynC,EAAMlgC,UAAYA,EACX4wD,GAAY/uE,EAAW5C,EAAQ2mC,WAAa5lB,EAAY/gB,EAAQ+gB,WAG3EswD,SAAU,SAASpwB,GACf,OAAOquB,GAAe1rE,UAAUytE,SAASnnC,KAAKhqC,KAAM+gD,KAva1C,EAwaL/gD,KAAK45C,SAxaA,EAwa0B55C,KAAK45C,QAAwB55C,KAAKwxE,cAAczwB,KAGxFgQ,KAAM,SAAShQ,GAEX/gD,KAAKsvE,GAAKvuB,EAAMzhB,OAChBt/B,KAAKuvE,GAAKxuB,EAAMznC,OAEhB,IAAIuH,EAAYouD,GAAaluB,EAAMlgC,WAE/BA,IACAkgC,EAAM+vB,gBAAkB9wE,KAAKF,QAAQnB,MAAQkiB,GAEjD7gB,KAAKwjE,OAAOzS,KAAK/mB,KAAKhqC,KAAM+gD,MAcpCqiB,EAAQoM,GAAiBJ,GAAgB,CAKrC9jE,SAAU,CACN3M,MAAO,QACP8nC,UAAW,EACXk/B,SAAU,GAGdoI,eAAgB,WACZ,MAAO,CAACd,KAGZkE,SAAU,SAASpwB,GACf,OAAO/gD,KAAKwjE,OAAO2N,SAASnnC,KAAKhqC,KAAM+gD,KAClCv+C,KAAKC,IAAIs+C,EAAMnoC,MAAQ,GAAK5Y,KAAKF,QAAQ2mC,WApdpC,EAodiDzmC,KAAK45C,QAGpEmX,KAAM,SAAShQ,GACX,GAAoB,IAAhBA,EAAMnoC,MAAa,CACnB,IAAI84D,EAAQ3wB,EAAMnoC,MAAQ,EAAI,KAAO,MACrCmoC,EAAM+vB,gBAAkB9wE,KAAKF,QAAQnB,MAAQ+yE,EAEjD1xE,KAAKwjE,OAAOzS,KAAK/mB,KAAKhqC,KAAM+gD,MAiBpCqiB,EAAQqM,GAAiBZ,GAAY,CAKjCvjE,SAAU,CACN3M,MAAO,QACPgnE,SAAU,EACVgM,KAAM,IACNlrC,UAAW,GAGfsnC,eAAgB,WACZ,MAAO,CAAChB,KAGZr5B,QAAS,SAASqN,GACd,IAAIjhD,EAAUE,KAAKF,QACf8xE,EAAgB7wB,EAAM4kB,SAASpnE,SAAWuB,EAAQ6lE,SAClDkM,EAAgB9wB,EAAMr+C,SAAW5C,EAAQ2mC,UACzCqrC,EAAY/wB,EAAMylB,UAAY1mE,EAAQ6xE,KAM1C,GAJA3xE,KAAK2vE,OAAS5uB,GAIT8wB,IAAkBD,GAAoC,GAAlB7wB,EAAM0kB,YAA2CqM,EACtF9xE,KAAKkxE,aACF,GAn+CG,EAm+CCnwB,EAAM0kB,UACbzlE,KAAKkxE,QACLlxE,KAAK0vE,OAAShN,GAAkB,WAC5B1iE,KAAK45C,MA1gBH,EA2gBF55C,KAAK+wE,YACNjxE,EAAQ6xE,KAAM3xE,WACd,GAv+CC,EAu+CG+gD,EAAM0kB,UACb,OA9gBM,EAghBV,OAAOmJ,IAGXsC,MAAO,WACH1qC,aAAaxmC,KAAK0vE,SAGtB3e,KAAM,SAAShQ,GAvhBD,IAwhBN/gD,KAAK45C,QAILmH,GAt/CI,EAs/CMA,EAAM0kB,UAChBzlE,KAAKqlE,QAAQtU,KAAK/wD,KAAKF,QAAQnB,MAAQ,KAAMoiD,IAE7C/gD,KAAK2vE,OAAOpJ,UAAY5/B,IACxB3mC,KAAKqlE,QAAQtU,KAAK/wD,KAAKF,QAAQnB,MAAOqB,KAAK2vE,aAevDvM,EAAQwM,GAAkBR,GAAgB,CAKtC9jE,SAAU,CACN3M,MAAO,SACP8nC,UAAW,EACXk/B,SAAU,GAGdoI,eAAgB,WACZ,MAAO,CAACd,KAGZkE,SAAU,SAASpwB,GACf,OAAO/gD,KAAKwjE,OAAO2N,SAASnnC,KAAKhqC,KAAM+gD,KAClCv+C,KAAKC,IAAIs+C,EAAMumB,UAAYtnE,KAAKF,QAAQ2mC,WAlkBnC,EAkkBgDzmC,KAAK45C,UAcvEwpB,EAAQyM,GAAiBT,GAAgB,CAKrC9jE,SAAU,CACN3M,MAAO,QACP8nC,UAAW,GACXghC,SAAU,GACV5mD,UAAW0wD,GACX5L,SAAU,GAGdoI,eAAgB,WACZ,OAAOsB,GAAc3rE,UAAUqqE,eAAe/jC,KAAKhqC,OAGvDmxE,SAAU,SAASpwB,GACf,IACI0mB,EADA5mD,EAAY7gB,KAAKF,QAAQ+gB,UAW7B,OARgB,GAAZA,EACA4mD,EAAW1mB,EAAMmmB,gBArjDFuH,EAsjDR5tD,EACP4mD,EAAW1mB,EAAMqmB,iBAtjDJsH,GAujDN7tD,IACP4mD,EAAW1mB,EAAMsmB,kBAGdrnE,KAAKwjE,OAAO2N,SAASnnC,KAAKhqC,KAAM+gD,IACnClgC,EAAYkgC,EAAMimB,iBAClBjmB,EAAMr+C,SAAW1C,KAAKF,QAAQ2mC,WAC9Bsa,EAAMymB,aAAexnE,KAAKF,QAAQ6lE,UAClCljE,EAAIglE,GAAYznE,KAAKF,QAAQ2nE,UAzkDzB,EAykDqC1mB,EAAM0kB,WAGvD1U,KAAM,SAAShQ,GACX,IAAIlgC,EAAYouD,GAAaluB,EAAMimB,iBAC/BnmD,GACA7gB,KAAKqlE,QAAQtU,KAAK/wD,KAAKF,QAAQnB,MAAQkiB,EAAWkgC,GAGtD/gD,KAAKqlE,QAAQtU,KAAK/wD,KAAKF,QAAQnB,MAAOoiD,MA2B9CqiB,EAAQ0M,GAAejB,GAAY,CAK/BvjE,SAAU,CACN3M,MAAO,MACPgnE,SAAU,EACVoM,KAAM,EACNC,SAAU,IACVL,KAAM,IACNlrC,UAAW,EACXwrC,aAAc,IAGlBlE,eAAgB,WACZ,MAAO,CAACf,KAGZt5B,QAAS,SAASqN,GACd,IAAIjhD,EAAUE,KAAKF,QAEf8xE,EAAgB7wB,EAAM4kB,SAASpnE,SAAWuB,EAAQ6lE,SAClDkM,EAAgB9wB,EAAMr+C,SAAW5C,EAAQ2mC,UACzCyrC,EAAiBnxB,EAAMylB,UAAY1mE,EAAQ6xE,KAI/C,GAFA3xE,KAAKkxE,QAzoDK,EA2oDLnwB,EAAM0kB,WAA4C,IAAfzlE,KAAK+lD,MACzC,OAAO/lD,KAAKmyE,cAKhB,GAAIN,GAAiBK,GAAkBN,EAAe,CAClD,GAhpDI,GAgpDA7wB,EAAM0kB,UACN,OAAOzlE,KAAKmyE,cAGhB,IAAIC,GAAgBpyE,KAAK+vE,OAAShvB,EAAMwlB,UAAYvmE,KAAK+vE,MAAQjwE,EAAQkyE,SACrEK,GAAiBryE,KAAKgwE,SAAWrJ,EAAY3mE,KAAKgwE,QAASjvB,EAAMpoC,QAAU7Y,EAAQmyE,aAgBvF,GAdAjyE,KAAK+vE,MAAQhvB,EAAMwlB,UACnBvmE,KAAKgwE,QAAUjvB,EAAMpoC,OAEhB05D,GAAkBD,EAGnBpyE,KAAK+lD,OAAS,EAFd/lD,KAAK+lD,MAAQ,EAKjB/lD,KAAK2vE,OAAS5uB,EAKG,GADF/gD,KAAK+lD,MAAQjmD,EAAQiyE,KAIhC,OAAK/xE,KAAK4wE,sBAGN5wE,KAAK0vE,OAAShN,GAAkB,WAC5B1iE,KAAK45C,MAltBX,EAmtBM55C,KAAK+wE,YACNjxE,EAAQkyE,SAAUhyE,MAttBvB,GAEA,EAytBV,OAAO4uE,IAGXuD,YAAa,WAIT,OAHAnyE,KAAK0vE,OAAShN,GAAkB,WAC5B1iE,KAAK45C,MAAQg1B,KACd5uE,KAAKF,QAAQkyE,SAAUhyE,MACnB4uE,IAGXsC,MAAO,WACH1qC,aAAaxmC,KAAK0vE,SAGtB3e,KAAM,WAvuBQ,GAwuBN/wD,KAAK45C,QACL55C,KAAK2vE,OAAO2C,SAAWtyE,KAAK+lD,MAC5B/lD,KAAKqlE,QAAQtU,KAAK/wD,KAAKF,QAAQnB,MAAOqB,KAAK2vE,YAoBvDj2D,GAAO64D,QAAU,QAMjB74D,GAAOpO,SAAW,CAOdknE,WAAW,EAQX34D,YAAaizD,GAMb7zB,QAAQ,EASRqsB,YAAa,KAOb+K,WAAY,KAOZJ,OAAQ,CAEJ,CAACL,GAAkB,CAAC32B,QAAQ,IAC5B,CAACu2B,GAAiB,CAACv2B,QAAQ,GAAQ,CAAC,WACpC,CAAC42B,GAAiB,CAAChvD,UArwDA4tD,IAswDnB,CAACY,GAAe,CAACxuD,UAtwDE4tD,GAswDgC,CAAC,UACpD,CAACqB,IACD,CAACA,GAAe,CAACnxE,MAAO,YAAaozE,KAAM,GAAI,CAAC,QAChD,CAACtC,KAQLgB,SAAU,CAMNgC,WAAY,OAOZC,YAAa,OASbC,aAAc,OAOdC,eAAgB,OAOhBC,SAAU,OAQVC,kBAAmB,kBAoC3B5C,GAAQxsE,UAAY,CAMhBK,IAAK,SAASjE,GAaV,OAZAq+C,EAAOn+C,KAAKF,QAASA,GAGjBA,EAAQ+Z,aACR7Z,KAAK6Z,YAAY4E,SAEjB3e,EAAQwlE,cAERtlE,KAAK+gD,MAAM0nB,UACXzoE,KAAK+gD,MAAM3/C,OAAStB,EAAQwlE,YAC5BtlE,KAAK+gD,MAAMvvB,QAERxxB,MASXqE,KAAM,SAAS0uE,GACX/yE,KAAKgmE,QAAQhrB,QAAU+3B,EA5Db,EADP,GAsEP/K,UAAW,SAASwE,GAChB,IAAIxG,EAAUhmE,KAAKgmE,QACnB,IAAIA,EAAQhrB,QAAZ,CAOA,IAAI8yB,EAFJ9tE,KAAK6Z,YAAYs0D,gBAAgB3B,GAGjC,IAAIqB,EAAc7tE,KAAK6tE,YAKnBmF,EAAgBhN,EAAQgN,gBAIvBA,GAAkBA,GAz8Bb,EAy8B8BA,EAAcp5B,SAClDo5B,EAAgBhN,EAAQgN,cAAgB,MAI5C,IADA,IAAI10E,EAAI,EACDA,EAAIuvE,EAAYtvE,QACnBuvE,EAAaD,EAAYvvE,GA9FnB,IAsGF0nE,EAAQhrB,SACHg4B,GAAiBlF,GAAckF,IAChClF,EAAW+C,iBAAiBmC,GAGhClF,EAAWoD,QAFXpD,EAAW9F,UAAUwE,IAOpBwG,GAAoC,GAAnBlF,EAAWl0B,QAC7Bo5B,EAAgBhN,EAAQgN,cAAgBlF,GAE5CxvE,MASRwD,IAAK,SAASgsE,GACV,GAAIA,aAAsBe,GACtB,OAAOf,EAIX,IADA,IAAID,EAAc7tE,KAAK6tE,YACdvvE,EAAI,EAAGA,EAAIuvE,EAAYtvE,OAAQD,IACpC,GAAIuvE,EAAYvvE,GAAGwB,QAAQnB,OAASmvE,EAChC,OAAOD,EAAYvvE,GAG3B,OAAO,MASXoK,IAAK,SAASolE,GACV,GAAIlL,EAAekL,EAAY,MAAO9tE,MAClC,OAAOA,KAIX,IAAIizE,EAAWjzE,KAAK8B,IAAIgsE,EAAWhuE,QAAQnB,OAS3C,OARIs0E,GACAjzE,KAAK8G,OAAOmsE,GAGhBjzE,KAAK6tE,YAAYrvE,KAAKsvE,GACtBA,EAAWzI,QAAUrlE,KAErBA,KAAK6Z,YAAY4E,SACVqvD,GAQXhnE,OAAQ,SAASgnE,GACb,GAAIlL,EAAekL,EAAY,SAAU9tE,MACrC,OAAOA,KAMX,GAHA8tE,EAAa9tE,KAAK8B,IAAIgsE,GAGN,CACZ,IAAID,EAAc7tE,KAAK6tE,YACnBrjE,EAAQkwB,EAAQmzC,EAAaC,IAElB,IAAXtjE,IACAqjE,EAAY10B,OAAO3uC,EAAO,GAC1BxK,KAAK6Z,YAAY4E,UAIzB,OAAOze,MASXiH,GAAI,SAASisE,EAAQ3iB,GACjB,GAAI2iB,IAAW/nE,GAGXolD,IAAYplD,EAAhB,CAIA,IAAIglE,EAAWnwE,KAAKmwE,SAKpB,OAJAxuE,EAAKoiE,EAASmP,IAAS,SAASv0E,GAC5BwxE,EAASxxE,GAASwxE,EAASxxE,IAAU,GACrCwxE,EAASxxE,GAAOH,KAAK+xD,MAElBvwD,OASXgH,IAAK,SAASksE,EAAQ3iB,GAClB,GAAI2iB,IAAW/nE,EAAf,CAIA,IAAIglE,EAAWnwE,KAAKmwE,SAQpB,OAPAxuE,EAAKoiE,EAASmP,IAAS,SAASv0E,GACvB4xD,EAGD4f,EAASxxE,IAAUwxE,EAASxxE,GAAOw6C,OAAOze,EAAQy1C,EAASxxE,GAAQ4xD,GAAU,UAFtE4f,EAASxxE,MAKjBqB,OAQX+wD,KAAM,SAASpyD,EAAOwC,GAEdnB,KAAKF,QAAQ0yE,WAkEzB,SAAyB7zE,EAAOwC,GAC5B,IAAIgyE,EAAenwE,EAAS6jC,YAAY,SACxCssC,EAAatiB,UAAUlyD,GAAO,GAAM,GACpCw0E,EAAaC,QAAUjyE,EACvBA,EAAKC,OAAOo1B,cAAc28C,GArElBE,CAAgB10E,EAAOwC,GAI3B,IAAIgvE,EAAWnwE,KAAKmwE,SAASxxE,IAAUqB,KAAKmwE,SAASxxE,GAAO+Q,QAC5D,GAAKygE,GAAaA,EAAS5xE,OAA3B,CAIA4C,EAAK1B,KAAOd,EACZwC,EAAKd,eAAiB,WAClBc,EAAK2mE,SAASznE,kBAIlB,IADA,IAAI/B,EAAI,EACDA,EAAI6xE,EAAS5xE,QAChB4xE,EAAS7xE,GAAG6C,GACZ7C,MAQRmqE,QAAS,WACLzoE,KAAKuI,SAAW+nE,GAAetwE,MAAM,GAErCA,KAAKmwE,SAAW,GAChBnwE,KAAKgmE,QAAU,GACfhmE,KAAK+gD,MAAM0nB,UACXzoE,KAAKuI,QAAU,OAyCvB41C,EAAOzkC,GAAQ,CACX45D,YAtoEc,EAuoEdC,WAtoEa,EAuoEbC,UAtoEY,EAuoEZC,aAtoEe,EAwoEfC,eAlrCiB,EAmrCjBC,YAlrCc,EAmrCdC,cAlrCgB,EAmrChBC,YAlrCc,EAmrCdC,iBAnrCc,EAorCdC,gBAlrCkB,GAmrClBnF,aAAcA,GAEdoF,eA9oEiB,EA+oEjBvF,eA9oEiB,EA+oEjBwF,gBA9oEkB,EA+oElBvF,aA9oEe,EA+oEfwF,eA9oEiB,GA+oEjB3C,qBA7oEuB9C,EA8oEvB0F,mBA7oEqBzF,GA8oErB0F,cA7oEgB7C,GA+oEhBrB,QAASA,GACT9K,MAAOA,EACPsI,YAAaA,GAEbtC,WAAYA,GACZpC,WAAYA,EACZa,kBAAmBA,GACnB8B,gBAAiBA,GACjBd,iBAAkBA,GAElBgE,WAAYA,GACZO,eAAgBA,GAChBiF,IAAKvE,GACLwE,IAAKjF,GACLkF,MAAO1E,GACP2E,MAAOhF,GACPiF,OAAQ7E,GACR8E,MAAOjF,GAEPxoE,GAAI48D,EACJ78D,IAAKg9D,EACLriE,KAAMA,EACNyqC,MAAOA,EACPlsC,OAAQA,EACRi+C,OAAQA,EACRilB,QAASA,EACTT,OAAQA,EACR2B,SAAUA,UAKsB,IAAXxjE,EAAyBA,EAA0B,oBAATs2B,KAAuBA,KAAO,IACtF1d,OAASA,IAGhB,aACI,OAAOA,IACV,kCAtkFL,CA6kFG5Y,OAAQkC,iCC7kFV,SAAUlF,EAAGkF,EAAUlC,GACvB,IAmIA6zE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAIA71E,EACA81E,EACAC,EACAC,EACAC,EACA1rE,EACA2rE,EACAvjE,EACAwjE,EACAC,EACAC,EACAC,EAIA/kD,EAtKAlmB,EAAW,CAEVL,MAAM,EACNkrE,OAAO,EACPxwC,QAAQ,EACRr2B,QAAQ,EAGRknE,WAAY,UACZxsD,MAAO,IACPysD,QAAS,IACT3kE,OAAO,EACP4kE,aAAc,MACdpkE,YAAY,EACZqkE,UAAU,EACV5kE,QAAQ,EACR6kE,cAAe,MACfnkE,aAAa,EACbokE,WAAW,EACXC,aAAa,EACbC,WAAW,EACXxnE,QAAS,GACTynE,YAAY,EACZxxE,WAAW,EACXyxE,cAAc,EACdC,QAAQ,EACRC,UAAU,EACVx3E,KAAK,EACLwrB,QAAQ,EACRzrB,MAAM,EACN2pB,OAAO,EACP+tD,OAAO,EACPj2E,UAAMgK,EACN61B,aAAa,EACbq2C,YAAY,EACZzkE,MAAM,EACN0kE,YAAY,EACZziE,MAAM,EACN0iE,WAAW,EACXC,eAAe,EACfC,eAAgB,KAChBC,eAAgB,kBAChBC,cAAe,iBACfC,WAAY,2DAGZC,aAAa,EACbC,WAAW,EACXC,aAAc,SAGdC,QAAS,6BACTC,SAAU,WACVthE,KAAM,OACNwoC,MAAO,QACP+4B,SAAU,+BACVC,SAAU,6BAGVC,aAAa,EACbC,WAAW,EAGXC,QAAQ,EACR9oE,QAAQ,EACR+oE,YAAY,EACZC,WAAW,EACXC,UAAU,EAEVC,IAAK,WACJ,OAAO14E,KAAK04E,KAEb/pE,KAAM,WAEL,OAAO7Q,EAAEkC,MAAM0H,KAAK,SAErBxB,MAAO,WACN,OAAOlG,KAAKkG,OAEbyyE,UAAW,WACV,IAAIC,EAAM,IAAIC,MACVC,EAAQh7E,EAAEkC,MAAMmB,KAAK,kBAQzB,MANqB,iBAAV23E,GACVh7E,EAAE6D,KAAKm3E,GAAO,SAAStwC,EAAK3mC,GAC3B+2E,EAAIpwC,GAAO3mC,KAIN+2E,GAERG,aAAc,WACb,IAAIpzC,EAAS3iC,EAASqhB,cAAc,UAChCy0D,EAAQh7E,EAAEkC,MAAMmB,KAAK,qBAiBzB,MAfqB,iBAAV23E,GACVh7E,EAAE6D,KAAKm3E,GAAO,SAAStwC,EAAK3mC,GAC3B8jC,EAAO6C,GAAO3mC,KAIZ,gBAAiB8jC,IACpBA,EAAOqzC,YAAc,GAElB,sBAAuBrzC,IAC1BA,EAAOszC,kBAAoB,QAE5BtzC,EAAO3zB,MAAO,IAAKikB,MAAQC,UAC3ByP,EAAOuzC,iBAAkB,EAElBvzC,IAKTt2B,EAAW,WAEX8pE,EAAa5U,cAIb6U,EAAa7U,YACb8U,EAAiB9U,gBACjB+U,EAAgB/U,eAChBgV,EAAehV,cACfiV,EAAcjV,aAuBdkV,EAAU37E,EAAE,QAeZwmB,EAAM,MACNo1D,EAAW,EACXC,EAAc,GAQd,SAASC,EAAKhsC,EAAKgL,EAAIjnC,GACtB,IAAIpJ,EAAUvF,EAASqhB,cAAcupB,GAUrC,OARIgL,IACHrwC,EAAQqwC,GA7DD,OA6DeA,GAGnBjnC,IACHpJ,EAAQ6O,MAAME,QAAU3F,GAGlB7T,EAAEyK,GAKV,SAASsxE,IACR,OAAO/4E,EAAO2R,YAAc3R,EAAO2R,YAAc3U,EAAEgD,GAAQiR,SAG5D,SAAS+nE,EAASvxE,EAASzI,GACtBA,IAAY+D,OAAO/D,KACtBA,EAAU,IAGXE,KAAKuvB,MAAQ,GACbvvB,KAAKqN,GAAK9E,EAEVvI,KAAK0J,MAAQ,SAAS8+B,GACrB,IAAIuxC,EAcJ,YAZwB5uE,IAApBnL,KAAKuvB,MAAMiZ,UAGGr9B,KAFjB4uE,EAAWj8E,EAAEkC,KAAKqN,IAAI3F,KAAK,aAAa8gC,IAGvCxoC,KAAKuvB,MAAMiZ,GAAOuxC,OACS5uE,IAAjBrL,EAAQ0oC,GAClBxoC,KAAKuvB,MAAMiZ,GAAO1oC,EAAQ0oC,QACEr9B,IAAlBG,EAASk9B,KACnBxoC,KAAKuvB,MAAMiZ,GAAOl9B,EAASk9B,KAItBxoC,KAAKuvB,MAAMiZ,IAGnBxoC,KAAK8B,IAAM,SAAS0mC,GACnB,IAAI9+B,EAAQ1J,KAAK0J,MAAM8+B,GACvB,OAAO1qC,EAAEk8E,WAAWtwE,GAASA,EAAMsgC,KAAKhqC,KAAKqN,GAAIrN,MAAQ0J,GAK3D,SAASuwE,EAASC,GACjB,IACAv3E,EAAMwyE,EAAS52E,OACfk7B,GAAYjvB,EAAQ0vE,GAAav3E,EAEjC,OAAQ82B,EAAW,EAAK92B,EAAM82B,EAAWA,EAI1C,SAAS0gD,EAAQt2B,EAAMu2B,GACtB,OAAO53E,KAAKklB,OAAO,IAAIvO,KAAK0qC,IAAwB,MAAdu2B,EAAoBhF,EAAQtjE,QAAU+nE,KAAe,IAAO,GAAKhoE,SAASgyC,EAAM,KAKvH,SAASw2B,EAAQp6E,EAAU2Q,GAC1B,OAAO3Q,EAAS6B,IAAI,UAAY7B,EAAS6B,IAAI,cAAcqX,KAAKvI,GAGjE,SAASknE,GAAU73E,EAAU2Q,GAC5B,OAAO3Q,EAAS6B,IAAI,cAAgBhB,EAAOw5E,iBAAmB,EAAI1pE,EAAIzG,QAAQlK,EAAS6B,IAAI,cAAe7B,EAAS6B,IAAI,iBAAmB8O,EAG3I,SAASynE,GAAU52E,GACd,aAAcmzE,EAAK,KAAOA,EAAK,GAAG2F,SAAS94E,EAAEL,SAAWK,EAAEL,SAAWuzE,EAAS,KACjFlzE,EAAEoB,kBACF+xE,EAAK4F,SAIP,SAASC,GAASn7E,GACbm7E,GAASn7E,MAAQA,IACpBs1E,EAAKlsE,IAAIisE,GAAUhtE,YAAY8yE,GAASn7E,KAAKsI,SAAStI,GACtDm7E,GAASn7E,IAAMA,GAyBjB,SAASmQ,GAAQ9Q,GAEhBb,EAAEkF,GAAUyM,QAAQ9Q,GAEpB86E,EAAQiB,eAAe/7E,GAGxB,IAAI44E,GAAa,WAChB,IAAInB,EAGHuE,EAFAn1E,EAAY++D,iBACZh0D,EAAQ,aAGT,SAASi2C,IACRhgB,aAAam0C,GAGd,SAAS52E,KACJ9D,EAAS6B,IAAI,SAAWqzE,EAAS3qE,EAAQ,MAC5Cg8C,IACAm0B,EAAU7+D,WAAWy6D,EAAa5/D,KAAM1W,EAAS6B,IAAI,oBAIvD,SAASiT,IACR2gE,EACEzqE,KAAKhL,EAAS6B,IAAI,kBAClBQ,OAAOiO,GACP+f,IAAI/f,EAAOlM,GAEbo1E,EACEl4E,KAAK83E,EAAgBt1E,GACrBxC,KAAK63E,EAAY5yB,GAEnBouB,EAAKjtE,YAAYnC,EAAY,OAAOoC,SAASpC,EAAY,MAG1D,SAASnB,IACRmiD,IAEAizB,EACEn3E,OAAO+2E,EAAgBt1E,GACvBzB,OAAO82E,EAAY5yB,GAErBkvB,EACEzqE,KAAKhL,EAAS6B,IAAI,mBAClBQ,OAAOiO,GACP+f,IAAI/f,GAAO,WACXgmE,EAAa5/D,OACb5B,OAGF6/D,EAAKjtE,YAAYnC,EAAY,MAAMoC,SAASpC,EAAY,OAGzD,SAAS0rE,IACRkF,GAAS,EACTV,EAAW7mE,OACX23C,IACAizB,EACEn3E,OAAO+2E,EAAgBt1E,GACvBzB,OAAO82E,EAAY5yB,GACrBouB,EAAKjtE,YAAYnC,EAAY,OAASA,EAAY,MAGnD,OAAO,WACF4wE,EACEn2E,EAAS6B,IAAI,eACjB23E,EAAQn3E,OAAOg3E,EAAepI,GAC9BA,KAGGjxE,EAAS6B,IAAI,cAAgBqzE,EAAS,KACzCiB,GAAS,EACTqD,EAAQnpD,IAAIgpD,EAAepI,GACvBjxE,EAAS6B,IAAI,iBAChBiT,IAEA1Q,IAEDqxE,EAAWzwD,SAzEC,GAiFhB,SAAS21D,GAAOryE,GACf,IAAIzI,EA9Ge44E,EAgHnB,IAAKrC,EAAS,CAQb,GANAv2E,EAAUhC,EAAEyK,GAASpH,KAAKkO,GAE1BpP,EAAW,IAAI65E,EAASvxE,EAASzI,GApHf44E,EAsHPz4E,EAAS6B,IAAI,OArHzB0I,EAAQ,EAEJkuE,IAAe,IAARA,GAAyB,aAARA,GAC3BvD,EAAWr3E,EAAE,gBAAkBuI,QAAO,WAGrC,OADe,IAAIyzE,EAAS95E,KADdlC,EAAEqD,KAAKnB,KAAMqP,IAEVvN,IAAI,SAAW42E,MAKlB,KAHfluE,EAAQ2qE,EAAS3qE,MAAMvK,EAASoN,OAI/B8nE,EAAWA,EAASzsE,IAAIzI,EAASoN,IACjC7C,EAAQ2qE,EAAS52E,OAAS,IAG3B42E,EAAWr3E,EAAEmC,EAASoN,KAuGjBuF,EAAM,CACVA,EAAOwjE,GAAS,EAEhBqE,GAASx6E,EAAS6B,IAAI,cAGtB8yE,EAAKjjE,IAAI,CAACka,WAAW,SAAU4zB,QAAQ,QAASlwC,QAAQ,KAExD8lE,EAAUuE,EAAKt1D,EAAK,gBAAiB,yDACrCwwD,EAASnjE,IAAI,CAACG,MAAM,GAAIC,OAAO,KAAK5I,OAAOksE,GAG3CU,EAAkBhB,EAAWhjE,SAAWmjE,EAAcnjE,SAAW+iE,EAASljE,aAAY,GAAQkjE,EAAS/iE,SACvGikE,EAAiBhB,EAAYljE,QAAUmjE,EAAanjE,QAAUgjE,EAAS+F,YAAW,GAAQ/F,EAAShjE,QACnGmkE,EAAeZ,EAAQzjE,aAAY,GACnCskE,EAAcb,EAAQwF,YAAW,GAGjC,IAAInE,EAAeyD,EAAQl6E,EAAS6B,IAAI,gBAAiB,KACrD80E,EAAgBuD,EAAQl6E,EAAS6B,IAAI,iBAAkB,KACvD60E,EAAW12E,EAAS6B,IAAI,YACxB+0E,EAAY52E,EAAS6B,IAAI,aAE7B7B,EAAS66E,EAAIt4E,KAAKG,MAAkB,IAAbg0E,EAAqBn0E,KAAKgH,IAAIktE,EAAcyD,EAAQxD,EAAU,MAAQD,GAAgBR,EAAcF,EAAgB,GAC3I/1E,EAAS86E,EAAIv4E,KAAKG,MAAmB,IAAdk0E,EAAsBr0E,KAAKgH,IAAIotE,EAAeuD,EAAQtD,EAAW,MAAQD,GAAiBX,EAAeF,EAAiB,GAEjJV,EAAQ1jE,IAAI,CAACG,MAAM,GAAIC,OAAO9R,EAAS86E,IACvCxE,EAAa9qD,WAEbhc,GApSU80D,aAqSVtkE,EAAS6B,IAAI,UAEbg0E,EAAeptE,IAAI8sE,GAAQ3mE,OAE3B+lE,EAAK4F,QAEDv6E,EAAS6B,IAAI,cAGZkB,EAASjB,mBAEZiB,EAASjB,iBAAiB,QAASs2E,IAAW,GAE9CoB,EAAQnpD,IAAIipD,GAAc,WACzBv2E,EAAST,oBAAoB,QAAS81E,IAAW,OAMhDp4E,EAAS6B,IAAI,gBAChB23E,EAAQnpD,IAAIipD,GAAc,WACzBz7E,EAAEmC,EAASoN,IAAImtE,WAKlB,IAAIjrE,EAAUyrE,WAAW/6E,EAAS6B,IAAI,YACtC6yE,EAAShjE,IAAI,CACZpC,QAASA,GAAYA,EAAUA,EAAU,GACzC0rE,OAAQh7E,EAAS6B,IAAI,gBAAkB,UAAY,GACnD+pB,WAAY,YACV5G,OAEChlB,EAAS6B,IAAI,eAChB+zE,EAAO5qE,KAAKhL,EAAS6B,IAAI,UAAUoN,SAAS4lE,GAE5Ce,EAAO3mE,SAAS,UAocnB,WACC,IAAIP,EAAMusE,EAAqCC,EAA1BC,EAAO7E,EAAa6E,KAAeC,IAAY3B,EAuCpE,GArCAtD,GAAS,EAETD,GAAQ,EAER1mE,GAAQ+pE,GACR/pE,GAAQ2pE,GACRn5E,EAAS6B,IAAI,UAEb7B,EAAS86E,EAAI96E,EAAS6B,IAAI,UACxBq4E,EAAQl6E,EAAS6B,IAAI,UAAW,KAAOm0E,EAAeF,EACtD91E,EAAS6B,IAAI,gBAAkBq4E,EAAQl6E,EAAS6B,IAAI,eAAgB,KAEtE7B,EAAS66E,EAAI76E,EAAS6B,IAAI,SACxBq4E,EAAQl6E,EAAS6B,IAAI,SAAU,KAAOo0E,EAAcF,EACpD/1E,EAAS6B,IAAI,eAAiBq4E,EAAQl6E,EAAS6B,IAAI,cAAe,KAGpE7B,EAASq7E,GAAKr7E,EAAS66E,EACvB76E,EAASs7E,GAAKt7E,EAAS86E,EAInB96E,EAAS6B,IAAI,cAChB7B,EAASq7E,GAAKnB,EAAQl6E,EAAS6B,IAAI,YAAa,KAAOo0E,EAAcF,EACrE/1E,EAASq7E,GAAKr7E,EAAS66E,GAAK76E,EAAS66E,EAAI76E,EAASq7E,GAAKr7E,EAAS66E,EAAI76E,EAASq7E,IAE1Er7E,EAAS6B,IAAI,eAChB7B,EAASs7E,GAAKpB,EAAQl6E,EAAS6B,IAAI,aAAc,KAAOm0E,EAAeF,EACvE91E,EAASs7E,GAAKt7E,EAAS86E,GAAK96E,EAAS86E,EAAI96E,EAASs7E,GAAKt7E,EAAS86E,EAAI96E,EAASs7E,IAG9E5sE,EAAO1O,EAAS6B,IAAI,QAEpBw0E,EAAex6D,YAAW,WACzBy5D,EAAgBtwD,SACd,KAEChlB,EAAS6B,IAAI,UAAW,CAC3B,IAAI05E,EAAU19E,EAAE6Q,GAAM8sE,GAAG,GAGzBN,EAAUr9E,EAAE,SAAS+Q,OAAO6sE,aAAaF,GAEzC/B,EAAQnpD,IAAIkpD,GAAa,WACxB2B,EAAQQ,YAAYH,MAGrBJ,EAAKI,QACKv7E,EAAS6B,IAAI,UAGvBs5E,EAAK,KACKn7E,EAAS6B,IAAI,QACvBs5E,EAAKn7E,EAAS6B,IAAI,SACRu4E,EAAQp6E,EAAU0O,IAE5BA,EAAOmpE,GAAU73E,EAAU0O,GAE3BwnE,EAAQl2E,EAAS6B,IAAI,aAErBhE,EAAEq4E,GACDvuE,SAAS28D,aACThjE,KAAK,cAAgB,WACrB65E,EAAKxB,EAAKt1D,EAAK,SAASrZ,KAAKhL,EAAS6B,IAAI,iBAE1CwuB,IAAI,QAAQ,WACR+qD,IAAY3B,GAMhB59D,YAAW,WACV,IAAI8/D,EAEA37E,EAAS6B,IAAI,gBAAkBhB,EAAOw5E,iBAAmB,IAC5DnE,EAAMpkE,OAASokE,EAAMpkE,OAASjR,EAAOw5E,iBACrCnE,EAAMrkE,MAAQqkE,EAAMrkE,MAAQhR,EAAOw5E,kBAGhCr6E,EAAS6B,IAAI,iBAChBo5E,EAAY,WACX/E,EAAMpkE,QAAUokE,EAAMpkE,OAAS6pE,EAC/BzF,EAAMrkE,OAASqkE,EAAMrkE,MAAQ8pE,GAE1B37E,EAASq7E,IAAMnF,EAAMrkE,MAAQ7R,EAASq7E,KACzCM,GAAWzF,EAAMrkE,MAAQ7R,EAASq7E,IAAMnF,EAAMrkE,MAC9CopE,KAEGj7E,EAASs7E,IAAMpF,EAAMpkE,OAAS9R,EAASs7E,KAC1CK,GAAWzF,EAAMpkE,OAAS9R,EAASs7E,IAAMpF,EAAMpkE,OAC/CmpE,MAIEj7E,EAAS86E,IACZ5E,EAAM/+D,MAAMykE,UAAYr5E,KAAKG,IAAI1C,EAASs7E,GAAKpF,EAAMpkE,OAAQ,GAAK,EAAI,MAGnEojE,EAAS,KAAOl1E,EAAS6B,IAAI,SAAWqzE,EAAS3qE,EAAQ,MAC5D2rE,EAAM/+D,MAAM6jE,OAAS,UAErBn9E,EAAEq4E,GAAO50E,KAAK,cAAiB,WAC9Bg1E,EAAa5/D,WAIfw/D,EAAM/+D,MAAMtF,MAAQqkE,EAAMrkE,MAAQ,KAClCqkE,EAAM/+D,MAAMrF,OAASokE,EAAMpkE,OAAS,KACpCqpE,EAAKjF,KACH,MAGJA,EAAM/lD,IAAMzhB,GAEFA,GACV2mE,EAAYwG,KAAKntE,EAAM1O,EAAS6B,IAAI,SAAS,SAAUX,EAAM46E,GACxDV,IAAY3B,GACf0B,EAAgB,UAAXW,EAAqBnC,EAAKt1D,EAAK,SAASrZ,KAAKhL,EAAS6B,IAAI,aAAehE,EAAEkC,MAAMg8E,eA1jBxFF,IAMF,SAASG,KACHrH,IACJpjD,GAAO,EACP4jD,EAAUt3E,EAAEgD,GACZ8zE,EAAOgF,EAAKt1D,GAAK5c,KAAK,CACrBkxC,GAAIvpC,EACJ,OAA+B,IAAtBvR,EAAEo+E,QAAQ3sE,QAAoBg1D,SAAgB,GACvD4X,KAAM,SACNC,SAAU,OACRvtE,OACH8lE,EAAWiF,EAAKt1D,EAAK,WAAWzV,OAChC0mE,EAAkBz3E,EAAE,CAAC87E,EAAKt1D,EAAK,kBAAkB,GAAGs1D,EAAKt1D,EAAK,kBAAkB,KAChFuwD,EAAQ+E,EAAKt1D,EAAK,WAClBwwD,EAAW8E,EAAKt1D,EAAK,WAAWnb,OAC/BqsE,EAASoE,EAAKt1D,EAAK,SACnBmxD,EAAWmE,EAAKt1D,EAAK,WACrBsxD,EAAQ93E,EAAE,2BAA2B4J,KAAK,CAACkxC,GAAG2rB,iBAC9CoR,EAAQ73E,EAAE,2BAA2B4J,KAAK,CAACkxC,GAAG2rB,aAC9CmR,EAAa53E,EAAE,2BAA2B4J,KAAK,CAACkxC,GAAG2rB,kBACnDgR,GAGDM,EAAS/3E,EAAE,2BAA2B4J,KAAK,CAACkxC,GAAG2rB,cAE/CsQ,EAAM1rE,OACLywE,EAAKt1D,GAAKnb,OACTywE,EAAKt1D,EAAK,WACVywD,EAAa6E,EAAKt1D,EAAK,aACvBs1D,EAAKt1D,EAAK,aAEXs1D,EAAKt1D,GAAK,EAAO,cAAcnb,OAC9B6rE,EAAc4E,EAAKt1D,EAAK,cACxBwwD,EACAG,EAAe2E,EAAKt1D,EAAK,gBAE1Bs1D,EAAKt1D,GAAK,EAAO,cAAcnb,OAC9BywE,EAAKt1D,EAAK,cACV4wD,EAAgB0E,EAAKt1D,EAAK,gBAC1Bs1D,EAAKt1D,EAAK,iBAEVxhB,KAAK,WAAW6O,IAAI,CAAC,MAAS,SAEhC2jE,EAAcsE,EAAKt1D,GAAK,EAAO,qFAE/BwxD,EAAiBH,EAAMjtE,IAAIktE,GAAOltE,IAAI+sE,GAAU/sE,IAAIgtE,IAEjD1yE,EAAS6N,OAAS+jE,EAAKvmD,SAAS9vB,QACnCT,EAAEkF,EAAS6N,MAAM1H,OAAOwrE,EAAUC,EAAKzrE,OAAO0rE,EAAOS,IAqEnDx3E,EAAU,WAKdA,EAAEm+E,KASF1F,EAAez4E,EAAE8B,GAAW,SAAI9B,EAAU,SAAI,SAAUgC,EAAS+2B,GAChE,IACIwlD,EAAOr8E,KASX,OAPAF,EAAUA,GAAW,GAEjBhC,EAAEk8E,WAAWqC,KAChBA,EAAOv+E,EAAE,QACTgC,EAAQ8S,MAAO,GAGXypE,EAAK,IAIVJ,KA7FD,WACC,SAASK,EAAa76E,GAGfA,EAAEP,MAAQ,GAAKO,EAAE86E,UAAY96E,EAAE+6E,QAAU/6E,EAAEg7E,SAAWh7E,EAAEwX,UAC7DxX,EAAEpB,iBACFu6E,GAAO56E,OAIT,QAAI40E,IACEpjD,IACJA,GAAO,EAGPmkD,EAAMplE,OAAM,WACXgmE,EAAa5/D,UAEdi/D,EAAMrlE,OAAM,WACXgmE,EAAargE,UAEd2/D,EAAOtlE,OAAM,WACZgmE,EAAap3B,WAEdw1B,EAASpkE,OAAM,WACVtQ,EAAS6B,IAAI,iBAChBy0E,EAAap3B,WAKfrhD,EAAEkF,GAAUzB,KAAK,gBAAqB,SAAUE,GAC/C,IAAI+mC,EAAM/mC,EAAE61B,QACR1kB,GAAQ3S,EAAS6B,IAAI,WAAqB,KAAR0mC,IACrC/mC,EAAEpB,iBACFk2E,EAAap3B,SAEVvsC,GAAQ3S,EAAS6B,IAAI,aAAeqzE,EAAS,KAAO1zE,EAAE+6E,SAC7C,KAARh0C,GACH/mC,EAAEpB,iBACFu1E,EAAMrlE,SACY,KAARi4B,IACV/mC,EAAEpB,iBACFs1E,EAAMplE,aAKLzS,EAAEk8E,WAAWl8E,EAAE8B,GAAGqH,IAErBnJ,EAAEkF,GAAUiE,GAAG,aAAiB,eAAgBq1E,GAKhDx+E,EAAE,gBAAgB4+E,KAAK,aAAiBJ,KAGnC,GAqCJK,KAEC9lD,IACH/2B,EAAQy4E,WAAa1hD,GAGtBwlD,EAAK16E,MAAK,WACT,IAAIi7E,EAAM9+E,EAAEqD,KAAKnB,KAAMqP,IAAa,GACpCvR,EAAEqD,KAAKnB,KAAMqP,EAAUvR,EAAEoC,OAAO08E,EAAK98E,OACnC8H,SAASuxE,GAED,IAAIW,EAASuC,EAAK,GAAIv8E,GAEpBgC,IAAI,SAChB84E,GAAOyB,EAAK,KAIPA,GAvBCA,IA0BI5wD,SAAW,SAAUzB,EAAO6yD,GACxC,IACAlrE,EAIAtP,EACAD,EAJAzC,EAAM,EACND,EAAO,EACP0lB,EAASwvD,EAAKxvD,SA8Cd,SAAS03D,IACR/H,EAAW,GAAG39D,MAAMtF,MAAQojE,EAAc,GAAG99D,MAAMtF,MAAQgjE,EAAS,GAAG19D,MAAMtF,MAASD,SAAS+iE,EAAK,GAAGx9D,MAAMtF,MAAM,IAAMkkE,EAAgB,KACzIlB,EAAS,GAAG19D,MAAMrF,OAASijE,EAAY,GAAG59D,MAAMrF,OAASkjE,EAAa,GAAG79D,MAAMrF,OAAUF,SAAS+iE,EAAK,GAAGx9D,MAAMrF,OAAO,IAAMgkE,EAAiB,KAM/I,GAlDAX,EAAQ9yE,OAAO,eAGfsyE,EAAKjjE,IAAI,CAAChS,KAAM,IAAKD,MAAO,MAE5B2C,EAAY+yE,EAAQ/yE,YACpBD,EAAagzE,EAAQhzE,aAEjBnC,EAAS6B,IAAI,UAChBsjB,EAAOzlB,KAAO0C,EACd+iB,EAAO1lB,MAAQ0C,EACfwyE,EAAKjjE,IAAI,CAAC8Z,SAAU,YAEpB9rB,EAAM0C,EACN3C,EAAO0C,EACPwyE,EAAKjjE,IAAI,CAAC8Z,SAAU,eAIS,IAA1BxrB,EAAS6B,IAAI,SAChBpC,GAAQ8C,KAAKG,IAAIyyE,EAAQtjE,QAAU7R,EAAS66E,EAAI5E,EAAcF,EAAiBmE,EAAQl6E,EAAS6B,IAAI,SAAU,KAAM,IACjF,IAAzB7B,EAAS6B,IAAI,QACvBpC,GAAQy6E,EAAQl6E,EAAS6B,IAAI,QAAS,KAEtCpC,GAAQ8C,KAAKklB,MAAMllB,KAAKG,IAAIyyE,EAAQtjE,QAAU7R,EAAS66E,EAAI5E,EAAcF,EAAgB,GAAK,IAGhE,IAA3B/1E,EAAS6B,IAAI,UAChBnC,GAAO6C,KAAKG,IAAIk3E,IAAc55E,EAAS86E,EAAI9E,EAAeF,EAAkBoE,EAAQl6E,EAAS6B,IAAI,UAAW,KAAM,IAChF,IAAxB7B,EAAS6B,IAAI,OACvBnC,GAAOw6E,EAAQl6E,EAAS6B,IAAI,OAAQ,KAEpCnC,GAAO6C,KAAKklB,MAAMllB,KAAKG,IAAIk3E,IAAc55E,EAAS86E,EAAI9E,EAAeF,EAAiB,GAAK,GAG5FnB,EAAKjjE,IAAI,CAAChS,IAAKylB,EAAOzlB,IAAKD,KAAM0lB,EAAO1lB,KAAMmsB,WAAW,YAKzDgpD,EAAM,GAAGz9D,MAAMtF,MAAQ+iE,EAAM,GAAGz9D,MAAMrF,OAAS,SAO/CJ,EAAM,CAACG,MAAO7R,EAAS66E,EAAI5E,EAAcF,EAAgBjkE,OAAQ9R,EAAS86E,EAAI9E,EAAeF,EAAiBp2E,IAAKA,EAAKD,KAAMA,GAG1HsqB,EAAO,CACV,IAAI+yD,EAAY,EAChBj/E,EAAE6D,KAAKgQ,GAAK,SAASrT,GAChBqT,EAAIrT,KAAOq7E,EAAYr7E,KAC1By+E,EAAY/yD,MAIdA,EAAQ+yD,EAGTpD,EAAchoE,EAETqY,GACJ4qD,EAAKjjE,IAAIA,GAGVijE,EAAKoI,UAAUzzE,QAAQoI,EAAK,CAC3BsrE,SAAUjzD,GAAS,EACnB0X,SAAU,WACTo7C,IAEA1G,GAAS,EAGTvB,EAAM,GAAGz9D,MAAMtF,MAAS7R,EAAS66E,EAAI5E,EAAcF,EAAkB,KACrEnB,EAAM,GAAGz9D,MAAMrF,OAAU9R,EAAS86E,EAAI9E,EAAeF,EAAmB,KAEpE91E,EAAS6B,IAAI,eAChBga,YAAW,WACVs5D,EAAQ7zE,KAAK,cAAoBg1E,EAAa9qD,YAC5C,GAGA3tB,EAAEk8E,WAAW6C,IAChBA,KAGFrzC,KAAMszC,KAIRvG,EAAajyE,OAAS,SAAUxE,GAC/B,IAAIo9E,EAEAtqE,KACH9S,EAAUA,GAAW,IAETgS,QACX7R,EAAS66E,EAAIX,EAAQr6E,EAAQgS,MAAO,KAAOokE,EAAcF,GAGtDl2E,EAAQwS,aACXrS,EAAS66E,EAAIX,EAAQr6E,EAAQwS,WAAY,MAG1C+iE,EAAQ1jE,IAAI,CAACG,MAAO7R,EAAS66E,IAEzBh7E,EAAQiS,SACX9R,EAAS86E,EAAIZ,EAAQr6E,EAAQiS,OAAQ,KAAOkkE,EAAeF,GAGxDj2E,EAAQ2S,cACXxS,EAAS86E,EAAIZ,EAAQr6E,EAAQ2S,YAAa,MAGtC3S,EAAQ2S,aAAgB3S,EAAQiS,SACpCmrE,EAAY7H,EAAQhzE,YACpBgzE,EAAQ1jE,IAAI,CAACI,OAAQ,SACrB9R,EAAS86E,EAAI1F,EAAQtjE,UAGtBsjE,EAAQ1jE,IAAI,CAACI,OAAQ9R,EAAS86E,IAE3BmC,GACF7H,EAAQhzE,UAAU66E,GAGnB3G,EAAa9qD,SAAwC,SAA/BxrB,EAAS6B,IAAI,cAA2B,EAAI7B,EAAS6B,IAAI,YAIjFy0E,EAAa6E,KAAO,SAAU7tC,GAC7B,GAAK36B,EAAL,CAIA,IAAIikB,EAAU7M,EAAuC,SAA/B/pB,EAAS6B,IAAI,cAA2B,EAAI7B,EAAS6B,IAAI,SAE/EuzE,EAAQvuE,UAERuuE,EAAUuE,EAAKt1D,EAAK,iBAAiBnb,OAAOokC,IAapC1+B,OACPK,SAASomE,EAAYrwD,QACrBtT,IAAI,CAACG,OAZL7R,EAAS66E,EAAI76E,EAAS66E,GAAKzF,EAAQvjE,QACnC7R,EAAS66E,EAAI76E,EAASq7E,IAAMr7E,EAASq7E,GAAKr7E,EAAS66E,EAAI76E,EAASq7E,GAAKr7E,EAAS66E,EACvE76E,EAAS66E,GAUQr6D,SAAUxgB,EAAS6B,IAAI,aAAe,OAAS,WACvE6P,IAAI,CAACI,QARL9R,EAAS86E,EAAI96E,EAAS86E,GAAK1F,EAAQtjE,SACnC9R,EAAS86E,EAAI96E,EAASs7E,IAAMt7E,EAASs7E,GAAKt7E,EAAS86E,EAAI96E,EAASs7E,GAAKt7E,EAAS86E,EACvE96E,EAAS86E,KAOhBl3C,UAAUixC,GAEXQ,EAAYzmE,OAIZ/Q,EAAEq4E,GAAOxkE,IAAI,CAAC,MAAS,SAEvB8oE,GAASx6E,EAAS6B,IAAI,cAEtB+0B,EAAW,WACV,IACC8O,EACAjE,EAFGy7C,EAAQhI,EAAS52E,OAQrB,SAAS6+E,KACkB,IAAtBt/E,EAAEo+E,QAAQ3sE,SACbqlE,EAAK,GAAGx9D,MAAMimE,gBAAgB,UAN3BzqE,IAUL8uB,EAAW,WACV8E,aAAa8vC,GACbf,EAAgB1mE,OAChBY,GAAQ4pE,GACRp5E,EAAS6B,IAAI,eAId0zE,EAAOvqE,KAAKhL,EAAS6B,IAAI,UAAUmjB,OACnCowD,EAAQpwD,OAEJk4D,EAAQ,GAC4B,iBAA5Bl9E,EAAS6B,IAAI,YACvB2zE,EAASxqE,KAAKhL,EAAS6B,IAAI,WAAWqI,QAAQ,YAAaK,EAAQ,GAAGL,QAAQ,UAAWgzE,IAAQl4D,OAGlG0wD,EAAO11E,EAAS6B,IAAI,SAAW0I,EAAQ2yE,EAAQ,EAAK,OAAS,UAAUlyE,KAAKhL,EAAS6B,IAAI,SACzF8zE,EAAO31E,EAAS6B,IAAI,SAAW0I,EAAS,OAAS,UAAUS,KAAKhL,EAAS6B,IAAI,aAE7Ey1E,KAGIt3E,EAAS6B,IAAI,eAChBhE,EAAE6D,KAAK,CAACs4E,GAAU,GAAIA,EAAS,KAAK,WACnC,IACC37E,EAAI62E,EAASn1E,MACbC,EAAW,IAAI65E,EAASx7E,EAAGR,EAAEqD,KAAK7C,EAAG+Q,IACrC+gB,EAAMnwB,EAAS6B,IAAI,QAEhBsuB,GAAOiqD,EAAQp6E,EAAUmwB,KAC5BA,EAAM0nD,GAAU73E,EAAUmwB,GACpBptB,EAASqhB,cAAc,OACzB+L,IAAMA,OAKb0lD,EAAejnE,OAGZ5O,EAAS6B,IAAI,WAEhB6jC,EAAS1lC,EAAS6B,IAAI,gBAEjB7B,EAAS6B,IAAI,eACjB6jC,EAAOoxC,UAAY,MAGpBj5E,EAAE6nC,GACAj+B,KAAK,CACL0oB,IAAKnwB,EAAS6B,IAAI,QAClB,MAASyiE,eAETj0C,IAAI,OAAQoR,GACZxyB,SAASmmE,GAEXoE,EAAQnpD,IAAIkpD,GAAa,WACxB7zC,EAAOvV,IAAM,mBAGVnwB,EAAS6B,IAAI,eAChBhE,EAAE6nC,GAAQl2B,QAAQ,SAGnBiyB,IAGkC,SAA/BzhC,EAAS6B,IAAI,cAChB8yE,EAAK0I,OAAOtzD,EAAO,EAAGozD,GAEtBA,MAIiC,SAA/Bn9E,EAAS6B,IAAI,cAChB8yE,EAAK0I,OAAOtzD,EAAO,GAAG,WACrBusD,EAAa9qD,SAAS,EAAGoL,MAG1B0/C,EAAa9qD,SAASzB,EAAO6M,KAoI/B0/C,EAAa5/D,KAAO,YACdy/D,GAAUjB,EAAS,KAAOl1E,EAAS6B,IAAI,SAAWqzE,EAAS3qE,EAAQ,MACvEA,EAAQyvE,EAAS,GACjBW,GAAOzF,EAAS3qE,MAIlB+rE,EAAargE,KAAO,YACdkgE,GAAUjB,EAAS,KAAOl1E,EAAS6B,IAAI,SAAW0I,KACtDA,EAAQyvE,GAAU,GAClBW,GAAOzF,EAAS3qE,MAKlB+rE,EAAap3B,MAAQ,WAChBvsC,IAASyjE,IAEZA,GAAU,EACVzjE,GAAO,EACPnD,GAAQ6pE,GACRr5E,EAAS6B,IAAI,aACbszE,EAAQ9yE,OAAO,SACfqyE,EAAS2I,OAAOr9E,EAAS6B,IAAI,YAAc,EAAG,GAE9C8yE,EAAKvwE,OAAOi5E,OAAOr9E,EAAS6B,IAAI,YAAc,EAAG,GAAG,WACnD8yE,EAAK/lE,OACL8lE,EAAS9lE,OACTY,GAAQ+pE,GACRnE,EAAQvuE,SAERgV,YAAW,WACVu6D,GAAU,EACV5mE,GAAQ8pE,GACRt5E,EAAS6B,IAAI,cACX,QAMNy0E,EAAazvE,OAAS,WAChB8tE,IAELA,EAAKvwE,OACLvG,EAAU,SAAEqhD,QACZy1B,EAAKvwE,MAAK,GAAO,GAAMyC,SACvB6tE,EAAS7tE,SACTuvE,GAAU,EACVzB,EAAO,KACP92E,EAAE,gBACAy/E,WAAWluE,GACX1H,YAAYwxE,GAEdr7E,EAAEkF,GAAUV,OAAO,cAAiBA,OAAO,kBAK5Ci0E,EAAahuE,QAAU,WACtB,OAAOzK,EAAEmC,EAASoN,KAGnBkpE,EAAat2E,SAAWqL,GAzkCzB,SA2kCUtI,SAAUlC,+BCtkCpB,SAAWhD,GAMT,GAHAA,EAAEo+E,QAAQxQ,MAAQ,eAAgB1oE,SAG7BlF,EAAEo+E,QAAQxQ,MAAf,CAIA,IAGI8R,EAHAC,EAAa3/E,EAAE+L,GAAG+hE,MAAMloE,UACxBg6E,EAAaD,EAAWC,WACxBC,EAAgBF,EAAWE,cA+C/BF,EAAWG,YAAc,SAAUj/E,IAK7B6+E,GAHOx9E,KAGe69E,cAAcl/E,EAAMU,cAAc4rE,eAAe,MAK3EuS,GAAe,EARJx9E,KAWN89E,aAAc,EAGnBC,EAAmBp/E,EAAO,aAG1Bo/E,EAAmBp/E,EAAO,aAG1Bo/E,EAAmBp/E,EAAO,eAO5B8+E,EAAWO,WAAa,SAAUr/E,GAG3B6+E,IAKLx9E,KAAK89E,aAAc,EAGnBC,EAAmBp/E,EAAO,eAO5B8+E,EAAWQ,UAAY,SAAUt/E,GAG1B6+E,IAKLO,EAAmBp/E,EAAO,WAG1Bo/E,EAAmBp/E,EAAO,YAGrBqB,KAAK89E,aAGRC,EAAmBp/E,EAAO,SAI5B6+E,GAAe,IASjBC,EAAWC,WAAa,WAEtB,IAAItmD,EAAOp3B,KAGXo3B,EAAK7uB,QAAQhH,KAAK,CAChBgpE,WAAYzsE,EAAEogF,MAAM9mD,EAAM,eAC1BozC,UAAW1sE,EAAEogF,MAAM9mD,EAAM,cACzBqzC,SAAU3sE,EAAEogF,MAAM9mD,EAAM,eAI1BsmD,EAAW1zC,KAAK5S,IAMlBqmD,EAAWE,cAAgB,WAEzB,IAAIvmD,EAAOp3B,KAGXo3B,EAAK7uB,QAAQjG,OAAO,CAClBioE,WAAYzsE,EAAEogF,MAAM9mD,EAAM,eAC1BozC,UAAW1sE,EAAEogF,MAAM9mD,EAAM,cACzBqzC,SAAU3sE,EAAEogF,MAAM9mD,EAAM,eAI1BumD,EAAc3zC,KAAK5S,IAlJrB,SAAS2mD,EAAoBp/E,EAAOw/E,GAGlC,KAAIx/E,EAAMU,cAAc64B,QAAQ35B,OAAS,GAAzC,CAIAI,EAAM0B,iBAEN,IAAIqrE,EAAQ/sE,EAAMU,cAAc4rE,eAAe,GAC3CmT,EAAiBp7E,SAAS6jC,YAAY,eAG1Cu3C,EAAeC,eACbF,GACA,GACA,EACAr9E,OACA,EACA4qE,EAAM1sE,QACN0sE,EAAMzsE,QACNysE,EAAM5sE,QACN4sE,EAAM3sE,SACN,GACA,GACA,GACA,EACA,EACA,MAIFJ,EAAMyC,OAAOo1B,cAAc4nD,KApD/B,gCCVA,UAqBE,EAAQ,CAAE,QAAU,cAAsB,0BAAP,EAMlC,SAAUtgF,GAEb,IAshDIwgF,EAthDAC,EAAY,cACfC,EAAiB,mBACjBC,EAAoB,sBAIpBhuD,EAAS3yB,EA6jDV,OA3jDAA,EAAE4gF,QAAU,CACXC,OAAQ,IAaT,SAAYluD,EAAQtlB,GAEnB,IAwHAyzE,EApHAC,EAAc,0BAGdC,EAAgB,CAAE,CAChB1pC,GAAI,sFACJ2pC,MAAO,SAAUC,GAChB,MAAO,CACNA,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,MAGZ,CACF5pC,GAAI,8GACJ2pC,MAAO,SAAUC,GAChB,MAAO,CACY,KAAlBA,EAAY,GACM,KAAlBA,EAAY,GACM,KAAlBA,EAAY,GACZA,EAAY,MAGZ,CAGF5pC,GAAI,2CACJ2pC,MAAO,SAAUC,GAChB,MAAO,CACNntE,SAAUmtE,EAAY,GAAK,IAC3BntE,SAAUmtE,EAAY,GAAK,IAC3BntE,SAAUmtE,EAAY,GAAK,OAG3B,CAGF5pC,GAAI,kCACJ2pC,MAAO,SAAUC,GAChB,MAAO,CACNntE,SAAUmtE,EAAY,GAAMA,EAAY,GAAK,IAC7CntE,SAAUmtE,EAAY,GAAMA,EAAY,GAAK,IAC7CntE,SAAUmtE,EAAY,GAAMA,EAAY,GAAK,OAG7C,CACF5pC,GAAI,4GACJkiB,MAAO,OACPynB,MAAO,SAAUC,GAChB,MAAO,CACNA,EAAY,GACZA,EAAY,GAAM,IAClBA,EAAY,GAAM,IAClBA,EAAY,OAMhBC,EAAQxuD,EAAOyuD,MAAQ,SAAUD,EAAOE,EAAOC,EAAMC,GACpD,OAAO,IAAI5uD,EAAOyuD,MAAMt/E,GAAGm/E,MAAOE,EAAOE,EAAOC,EAAMC,IAEvDC,EAAS,CACRC,KAAM,CACLlpD,MAAO,CACNmpD,IAAK,CACJ59E,IAAK,EACLnC,KAAM,QAEP0/E,MAAO,CACNv9E,IAAK,EACLnC,KAAM,QAEP2/E,KAAM,CACLx9E,IAAK,EACLnC,KAAM,UAKTggF,KAAM,CACLppD,MAAO,CACNqpD,IAAK,CACJ99E,IAAK,EACLnC,KAAM,WAEPkgF,WAAY,CACX/9E,IAAK,EACLnC,KAAM,WAEPmgF,UAAW,CACVh+E,IAAK,EACLnC,KAAM,cAKVogF,EAAY,CACX,KAAQ,CACPzsE,OAAO,EACPzQ,IAAK,KAEN,QAAW,CACVA,IAAK,GAEN,QAAW,CACVm9E,IAAK,IACL1sE,OAAO,IAGT8oE,EAAU+C,EAAM/C,QAAU,GAG1B6D,EAActvD,EAAQ,OAAS,GAM/B9uB,EAAO8uB,EAAO9uB,KAiBf,SAAS6R,EAAO9J,EAAOxB,EAAM83E,GAC5B,IAAIvgF,EAAOogF,EAAW33E,EAAKzI,OAAU,GAErC,OAAc,MAATiK,EACKs2E,IAAe93E,EAAK+3E,IAAQ,KAAO/3E,EAAK+3E,KAIlDv2E,EAAQjK,EAAK2T,QAAU1J,EAAQsxE,WAAYtxE,GAItCoB,MAAOpB,GACJxB,EAAK+3E,IAGRxgF,EAAKqgF,KAIAp2E,EAAQjK,EAAKqgF,KAAQrgF,EAAKqgF,IAI7B,EAAIp2E,EAAQ,EAAIjK,EAAKkD,IAAM+G,EAAQjK,EAAKkD,IAAM+G,GAGtD,SAASw2E,EAAaxlC,GACrB,IAAIylC,EAAOlB,IACVM,EAAOY,EAAKC,MAAQ,GAwBrB,OAtBA1lC,EAASA,EAAOC,cAEhBh5C,EAAMm9E,GAAe,SAAUxgF,EAAG+hF,GACjC,IAAIC,EACHlnD,EAAQinD,EAAOjrC,GAAGzgC,KAAM+lC,GACxBznB,EAASmG,GAASinD,EAAOtB,MAAO3lD,GAChCmnD,EAAYF,EAAO/oB,OAAS,OAE7B,GAAKrkC,EASJ,OARAqtD,EAASH,EAAMI,GAAattD,GAI5BktD,EAAMb,EAAQiB,GAAYhxD,OAAU+wD,EAAQhB,EAAQiB,GAAYhxD,OAChEgwD,EAAOY,EAAKC,MAAQE,EAAOF,OAGpB,KAKJb,EAAKhhF,QAIY,YAAhBghF,EAAK9gF,QACTgyB,EAAOvwB,OAAQq/E,EAAMX,EAAO4B,aAEtBL,GAIDvB,EAAQlkC,GAyNhB,SAAS+lC,EAAS3jE,EAAG4oC,EAAGq1B,GAEvB,OAAS,GADTA,GAAMA,EAAI,GAAM,GACH,EACLj+D,GAAM4oC,EAAI5oC,GAAMi+D,EAAI,EAEnB,EAAJA,EAAQ,EACLr1B,EAEC,EAAJq1B,EAAQ,EACLj+D,GAAM4oC,EAAI5oC,IAAU,EAAI,EAAMi+D,GAAM,EAErCj+D,EAlTRijE,EAAY3oE,MAAME,QAAU,kCAC5B4kE,EAAQqD,KAAOQ,EAAY3oE,MAAMspE,gBAAgB95E,QAAS,SAAY,EAItEjF,EAAM29E,GAAQ,SAAUiB,EAAWjpB,GAClCA,EAAM/nC,MAAQ,IAAMgxD,EACpBjpB,EAAMjhC,MAAMgpD,MAAQ,CACnBz9E,IAAK,EACLnC,KAAM,UACNwgF,IAAK,MAuEPhB,EAAMr/E,GAAK6wB,EAAOvwB,OAAQ++E,EAAMv7E,UAAW,CAC1Cq7E,MAAO,SAAUS,EAAKL,EAAOC,EAAMC,GAClC,GAAKG,IAAQr0E,EAEZ,OADAnL,KAAKogF,MAAQ,CAAE,KAAM,KAAM,KAAM,MAC1BpgF,MAEHw/E,EAAImB,QAAUnB,EAAIoB,YACtBpB,EAAM/uD,EAAQ+uD,GAAM7tE,IAAKwtE,GACzBA,EAAQh0E,GAGT,IAAIg1E,EAAOngF,KACVP,EAAOgxB,EAAOhxB,KAAM+/E,GACpBD,EAAOv/E,KAAKogF,MAAQ,GAQrB,OALKjB,IAAUh0E,IACdq0E,EAAM,CAAEA,EAAKL,EAAOC,EAAMC,GAC1B5/E,EAAO,SAGM,WAATA,EACGO,KAAK++E,MAAOmB,EAAaV,IAASZ,EAAOiC,UAGnC,UAATphF,GACJkC,EAAM29E,EAAOC,KAAKlpD,OAAO,SAAUmS,EAAKtgC,GACvCq3E,EAAMr3E,EAAKtG,KAAQ4R,EAAOgsE,EAAKt3E,EAAKtG,KAAOsG,MAErClI,MAGM,WAATP,GAEHkC,EAAM29E,EADFE,aAAeP,EACL,SAAUsB,EAAWjpB,GAC7BkoB,EAAKloB,EAAM/nC,SACf4wD,EAAM7oB,EAAM/nC,OAAUiwD,EAAKloB,EAAM/nC,OAAQ7f,UAI7B,SAAU6wE,EAAWjpB,GAClC,IAAI/nC,EAAQ+nC,EAAM/nC,MAClB5tB,EAAM21D,EAAMjhC,OAAO,SAAUmS,EAAKtgC,GAGjC,IAAMi4E,EAAM5wD,IAAW+nC,EAAMjM,GAAK,CAIjC,GAAa,UAAR7iB,GAAiC,MAAdg3C,EAAKh3C,GAC5B,OAED23C,EAAM5wD,GAAU+nC,EAAMjM,GAAI80B,EAAKC,OAKhCD,EAAM5wD,GAASrnB,EAAKtG,KAAQ4R,EAAOgsE,EAAKh3C,GAAOtgC,GAAM,MAIjDi4E,EAAM5wD,IACTkB,EAAOiK,QAAS,KAAMylD,EAAM5wD,GAAQ7f,MAAO,EAAG,IAAQ,IAGvDywE,EAAM5wD,GAAS,GAAM,EAChB+nC,EAAMlqB,OACV+yC,EAAKC,MAAQ9oB,EAAMlqB,KAAM+yC,EAAM5wD,QAK5BvvB,WAxCR,GA2CDmjD,GAAI,SAAU29B,GACb,IAAI39B,EAAK87B,EAAO6B,GACfC,GAAO,EACPZ,EAAOngF,KAgBR,OAdA2B,EAAM29E,GAAQ,SAAUjsB,EAAGiE,GAC1B,IAAI0pB,EACHC,EAAU99B,EAAImU,EAAM/nC,OAUrB,OATK0xD,IACJD,EAAab,EAAM7oB,EAAM/nC,QAAW+nC,EAAMjM,IAAMiM,EAAMjM,GAAI80B,EAAKC,QAAW,GAC1Ez+E,EAAM21D,EAAMjhC,OAAO,SAAUg9B,EAAGnrD,GAC/B,GAA4B,MAAvB+4E,EAAS/4E,EAAKtG,KAElB,OADAm/E,EAASE,EAAS/4E,EAAKtG,OAAUo/E,EAAY94E,EAAKtG,SAK9Cm/E,KAEDA,GAERG,OAAQ,WACP,IAAIC,EAAO,GACVhB,EAAOngF,KAMR,OALA2B,EAAM29E,GAAQ,SAAUiB,EAAWjpB,GAC7B6oB,EAAM7oB,EAAM/nC,QAChB4xD,EAAK3iF,KAAM+hF,MAGNY,EAAK7kB,OAEbka,WAAY,SAAU4K,EAAO1+E,GAC5B,IAAImF,EAAMo3E,EAAOmC,GAChBb,EAAY14E,EAAIq5E,SAChB5pB,EAAQgoB,EAAQiB,GAChBc,EAA8B,IAAjBrhF,KAAKq/E,QAAgBJ,EAAO,eAAkBj/E,KAC3D+U,EAAQssE,EAAY/pB,EAAM/nC,QAAW+nC,EAAMjM,GAAIg2B,EAAWjB,OAC1DnhE,EAASlK,EAAMrF,QA4BhB,OA1BA7H,EAAMA,EAAKyvD,EAAM/nC,OACjB5tB,EAAM21D,EAAMjhC,OAAO,SAAUmS,EAAKtgC,GACjC,IAAIsC,EAAQtC,EAAKtG,IAChB0/E,EAAavsE,EAAOvK,GACpB+2E,EAAW15E,EAAK2C,GAChB/K,EAAOogF,EAAW33E,EAAKzI,OAAU,GAGhB,OAAb8hF,IAKe,OAAfD,EACJriE,EAAQzU,GAAU+2E,GAEb9hF,EAAKqgF,MACJyB,EAAWD,EAAa7hF,EAAKqgF,IAAM,EACvCwB,GAAc7hF,EAAKqgF,IACRwB,EAAaC,EAAW9hF,EAAKqgF,IAAM,IAC9CwB,GAAc7hF,EAAKqgF,MAGrB7gE,EAAQzU,GAAUgJ,GAAS+tE,EAAWD,GAAe5+E,EAAW4+E,EAAYp5E,QAGvElI,KAAMugF,GAAathE,IAE3BuiE,MAAO,SAAUC,GAGhB,GAAyB,IAApBzhF,KAAKogF,MAAO,GAChB,OAAOpgF,KAGR,IAAI0hF,EAAM1hF,KAAKogF,MAAM1wE,QACpB2pB,EAAIqoD,EAAIplB,MACRklB,EAAQvC,EAAOwC,GAASrB,MAEzB,OAAOnB,EAAOxuD,EAAO9qB,IAAK+7E,GAAK,SAAU92B,EAAGtsD,GAC3C,OAAS,EAAI+6B,GAAMmoD,EAAOljF,GAAM+6B,EAAIuxB,OAGtC+2B,aAAc,WACb,IAAIpd,EAAS,QACZgb,EAAO9uD,EAAO9qB,IAAK3F,KAAKogF,OAAO,SAAUx1B,EAAGtsD,GAC3C,OAAY,MAALssD,EAActsD,EAAI,EAAI,EAAI,EAAMssD,KAQzC,OALmB,IAAd20B,EAAM,KACVA,EAAKjjB,MACLiI,EAAS,QAGHA,EAASgb,EAAK9gF,OAAS,KAE/BmjF,aAAc,WACb,IAAIrd,EAAS,QACZkb,EAAOhvD,EAAO9qB,IAAK3F,KAAKy/E,QAAQ,SAAU70B,EAAGtsD,GAS5C,OARU,MAALssD,IACJA,EAAItsD,EAAI,EAAI,EAAI,GAIZA,GAAKA,EAAI,IACbssD,EAAIpoD,KAAKklB,MAAW,IAAJkjC,GAAY,KAEtBA,KAOT,OAJmB,IAAd60B,EAAM,KACVA,EAAKnjB,MACLiI,EAAS,QAEHA,EAASkb,EAAKhhF,OAAS,KAE/BojF,YAAa,SAAUC,GACtB,IAAIvC,EAAOv/E,KAAKogF,MAAM1wE,QACrB2vE,EAAQE,EAAKjjB,MAMd,OAJKwlB,GACJvC,EAAK/gF,QAAkB,IAAR6gF,IAGT,IAAM5uD,EAAO9qB,IAAK45E,GAAM,SAAU30B,GAIxC,OAAoB,KADpBA,GAAMA,GAAK,GAAIt5B,SAAU,KAChB/yB,OAAe,IAAMqsD,EAAIA,KAC/BnsD,KAAM,KAEX6yB,SAAU,WACT,OAA2B,IAApBtxB,KAAKogF,MAAO,GAAY,cAAgBpgF,KAAK2hF,kBAGtD1C,EAAMr/E,GAAGm/E,MAAMr7E,UAAYu7E,EAAMr/E,GAmBjC0/E,EAAOG,KAAKp0B,GAAK,SAAUk0B,GAC1B,GAAkB,MAAbA,EAAM,IAA4B,MAAbA,EAAM,IAA4B,MAAbA,EAAM,GACpD,MAAO,CAAE,KAAM,KAAM,KAAMA,EAAM,IAElC,IASCxE,EAAG9tB,EATAx2C,EAAI8oE,EAAM,GAAM,IACnB7nC,EAAI6nC,EAAM,GAAM,IAChBjmD,EAAIimD,EAAM,GAAM,IAChBlmD,EAAIkmD,EAAM,GACV58E,EAAMH,KAAKG,IAAK8T,EAAGihC,EAAGpe,GACtB9vB,EAAMhH,KAAKgH,IAAKiN,EAAGihC,EAAGpe,GACtByoD,EAAOp/E,EAAM6G,EACbd,EAAM/F,EAAM6G,EACZm7B,EAAU,GAANj8B,EAsBL,OAlBCqyE,EADIvxE,IAAQ7G,EACR,EACO8T,IAAM9T,EACX,IAAO+0C,EAAIpe,GAAMyoD,EAAS,IACrBrqC,IAAM/0C,EACX,IAAO22B,EAAI7iB,GAAMsrE,EAAS,IAE1B,IAAOtrE,EAAIihC,GAAMqqC,EAAS,IAMhC90B,EADa,IAAT80B,EACA,EACOp9C,GAAK,GACZo9C,EAAOr5E,EAEPq5E,GAAS,EAAIr5E,GAEX,CAAElG,KAAKklB,MAAOqzD,GAAM,IAAK9tB,EAAGtoB,EAAQ,MAALtL,EAAY,EAAIA,IAGvDimD,EAAOG,KAAKryC,KAAO,SAAUqyC,GAC5B,GAAkB,MAAbA,EAAM,IAA4B,MAAbA,EAAM,IAA4B,MAAbA,EAAM,GACpD,MAAO,CAAE,KAAM,KAAM,KAAMA,EAAM,IAElC,IAAI1E,EAAI0E,EAAM,GAAM,IACnBxyB,EAAIwyB,EAAM,GACV96C,EAAI86C,EAAM,GACVpmD,EAAIomD,EAAM,GACV/5B,EAAI/gB,GAAK,GAAMA,GAAM,EAAIsoB,GAAMtoB,EAAIsoB,EAAItoB,EAAIsoB,EAC3CnwC,EAAI,EAAI6nB,EAAI+gB,EAEb,MAAO,CACNljD,KAAKklB,MAAwC,IAAjC+4D,EAAS3jE,EAAG4oC,EAAGq1B,EAAM,EAAI,IACrCv4E,KAAKklB,MAA4B,IAArB+4D,EAAS3jE,EAAG4oC,EAAGq1B,IAC3Bv4E,KAAKklB,MAAwC,IAAjC+4D,EAAS3jE,EAAG4oC,EAAGq1B,EAAM,EAAI,IACrC1hD,IAIF13B,EAAM29E,GAAQ,SAAUiB,EAAWjpB,GAClC,IAAIjhC,EAAQihC,EAAMjhC,MACjB9G,EAAQ+nC,EAAM/nC,MACd87B,EAAKiM,EAAMjM,GACXje,EAAOkqB,EAAMlqB,KAGd6xC,EAAMr/E,GAAI2gF,GAAc,SAAU72E,GAMjC,GAHK2hD,IAAOrrD,KAAMuvB,KACjBvvB,KAAMuvB,GAAU87B,EAAIrrD,KAAKogF,QAErB12E,IAAUyB,EACd,OAAOnL,KAAMuvB,GAAQ7f,QAGtB,IAAItR,EACHqB,EAAOgxB,EAAOhxB,KAAMiK,GACpBs4E,EAAiB,UAATviF,GAA6B,WAATA,EAAsBiK,EAAQ9F,UAC1Dq+E,EAAQjiF,KAAMuvB,GAAQ7f,QAUvB,OARA/N,EAAM00B,GAAO,SAAUmS,EAAKtgC,GAC3B,IAAIrG,EAAMmgF,EAAc,WAATviF,EAAoB+oC,EAAMtgC,EAAKtG,KAClC,MAAPC,IACJA,EAAMogF,EAAO/5E,EAAKtG,MAEnBqgF,EAAO/5E,EAAKtG,KAAQ4R,EAAO3R,EAAKqG,MAG5BklC,IACJhvC,EAAM6gF,EAAO7xC,EAAM60C,KACd1yD,GAAU0yD,EACR7jF,GAEA6gF,EAAOgD,IAKhBtgF,EAAM00B,GAAO,SAAUmS,EAAKtgC,GAGtB+2E,EAAMr/E,GAAI4oC,KAGfy2C,EAAMr/E,GAAI4oC,GAAQ,SAAU9+B,GAC3B,IAIC0vB,EAJG8oD,EAAQzxD,EAAOhxB,KAAMiK,GACxB9J,EAAe,UAAR4oC,EAAoBxoC,KAAKmiF,MAAQ,OAAS,OAAW5B,EAC5D0B,EAAQjiF,KAAMJ,KACdunC,EAAM86C,EAAO/5E,EAAKtG,KAGnB,MAAe,cAAVsgF,EACG/6C,GAGO,aAAV+6C,IACJx4E,EAAQA,EAAMsgC,KAAMhqC,KAAMmnC,GAC1B+6C,EAAQzxD,EAAOhxB,KAAMiK,IAER,MAATA,GAAiBxB,EAAKsY,MACnBxgB,MAEO,WAAVkiF,IACJ9oD,EAAQylD,EAAYlqE,KAAMjL,MAEzBA,EAAQy9B,EAAM6zC,WAAY5hD,EAAO,KAAyB,MAAfA,EAAO,GAAc,GAAK,IAGvE6oD,EAAO/5E,EAAKtG,KAAQ8H,EACb1J,KAAMJ,GAAMqiF,aAOtBhD,EAAMmD,KAAO,SAAUA,GACtB,IAAIC,EAAQD,EAAKjkF,MAAO,KACxBwD,EAAM0gF,GAAO,SAAU/jF,EAAG8jF,GACzB3xD,EAAO6xD,SAAUF,GAAS,CACzBr+E,IAAK,SAAU09B,EAAM/3B,GACpB,IAAI42E,EAAQiC,EACX7B,EAAkB,GAEnB,GAAe,gBAAVh3E,IAAsD,WAAzB+mB,EAAOhxB,KAAMiK,KAC3C42E,EAASJ,EAAax2E,KAAc,CAEvC,GADAA,EAAQu1E,EAAOqB,GAAU52E,IACnBwyE,EAAQqD,MAA6B,IAArB71E,EAAM02E,MAAO,GAAY,CAE9C,IADAmC,EAAmB,oBAATH,EAA6B3gD,EAAKyiC,WAAaziC,GAElC,KAApBi/C,GAA8C,gBAApBA,IAC5B6B,GAAWA,EAAQnrE,OAEnB,IACCspE,EAAkBjwD,EAAO9e,IAAK4wE,EAAS,mBACvCA,EAAUA,EAAQre,WACjB,MAAQziE,IAIXiI,EAAQA,EAAM83E,MAAOd,GAAuC,gBAApBA,EACvCA,EACA,YAGFh3E,EAAQA,EAAMi4E,eAEf,IACClgD,EAAKrqB,MAAOgrE,GAAS14E,EACpB,MAAQjI,OAOZgvB,EAAO+xD,GAAGh5C,KAAM44C,GAAS,SAAUI,GAC5BA,EAAGC,YACRD,EAAGztE,MAAQkqE,EAAOuD,EAAG/gD,KAAM2gD,GAC3BI,EAAG36E,IAAMo3E,EAAOuD,EAAG36E,KACnB26E,EAAGC,WAAY,GAEhBhyD,EAAO6xD,SAAUF,GAAOr+E,IAAKy+E,EAAG/gD,KAAM+gD,EAAGztE,MAAMyhE,WAAYgM,EAAG36E,IAAK26E,EAAG5+B,WAMzEq7B,EAAMmD,KA7mBW,8JA+mBjB3xD,EAAO6xD,SAASI,YAAc,CAC7BC,OAAQ,SAAUj5E,GACjB,IAAIk5E,EAAW,GAKf,OAHAjhF,EAAM,CAAE,MAAO,QAAS,SAAU,SAAU,SAAUrD,EAAG0Y,GACxD4rE,EAAU,SAAW5rE,EAAO,SAAYtN,KAElCk5E,IAOThE,EAASnuD,EAAOyuD,MAAM5+B,MAAQ,CAG7BuiC,KAAM,UACNC,MAAO,UACP1D,KAAM,UACN2D,QAAS,UACTC,KAAM,UACN7D,MAAO,UACP8D,KAAM,UACNC,OAAQ,UACRC,KAAM,UACNC,MAAO,UACPC,OAAQ,UACR7D,IAAK,UACL8D,OAAQ,UACRC,KAAM,UACNC,MAAO,UACPC,OAAQ,UAGRjD,YAAa,CAAE,KAAM,KAAM,KAAM,GAEjCK,SAAU,WAtpBX,CAypBKpwD,GAKL,WAEA,IA4JuBizD,EA5JnBC,EAAwB,CAAE,MAAO,SAAU,UAC9CC,EAAkB,CACjBh4D,OAAQ,EACRi4D,aAAc,EACdnB,YAAa,EACboB,WAAY,EACZC,YAAa,EACbC,UAAW,EACXC,YAAa,EACbC,OAAQ,EACR34E,QAAS,GAeX,SAAS44E,EAAkB1iD,GAC1B,IAAI+G,EAAKigB,EACRrxC,EAAQqqB,EAAKkjC,cAAcC,YAC1BnjC,EAAKkjC,cAAcC,YAAYwf,iBAAkB3iD,EAAM,MACvDA,EAAK4iD,aACNC,EAAS,GAEV,GAAKltE,GAASA,EAAM7Y,QAAU6Y,EAAO,IAAOA,EAAOA,EAAO,IAEzD,IADAqxC,EAAMrxC,EAAM7Y,OACJkqD,KAEsB,iBAAjBrxC,EADZoxB,EAAMpxB,EAAOqxC,MAEZ67B,EAAQxmF,EAAEymF,UAAW/7C,IAAUpxB,EAAOoxB,SAMxC,IAAMA,KAAOpxB,EACiB,iBAAjBA,EAAOoxB,KAClB87C,EAAQ97C,GAAQpxB,EAAOoxB,IAK1B,OAAO87C,EArCRxmF,EAAE6D,KACD,CAAE,kBAAmB,mBAAoB,oBAAqB,mBAC9D,SAAU0xD,EAAGnrD,GACZpK,EAAE0kF,GAAGh5C,KAAMthC,GAAS,SAAUs6E,IACb,SAAXA,EAAG36E,MAAmB26E,EAAGgC,SAAsB,IAAXhC,EAAG5+B,MAAc4+B,EAAGgC,WAC5D/zD,EAAOrZ,MAAOorE,EAAG/gD,KAAMv5B,EAAMs6E,EAAG36E,KAChC26E,EAAGgC,SAAU,OAqDX1mF,EAAE8B,GAAG6kF,UACV3mF,EAAE8B,GAAG6kF,QAAU,SAAUhiD,GACxB,OAAOziC,KAAK0I,IAAiB,MAAZ+5B,EAChBziC,KAAK0kF,WAAa1kF,KAAK0kF,WAAWr+E,OAAQo8B,MAK7C3kC,EAAE4gF,QAAQiG,aAAe,SAAUj7E,EAAOuzE,EAAU2H,EAAQ/tD,GAC3D,IAAIguD,EAAI/mF,EAAEksB,MAAOizD,EAAU2H,EAAQ/tD,GAEnC,OAAO72B,KAAK4mD,OAAO,WAClB,IAECk+B,EAFGC,EAAWjnF,EAAGkC,MACjBglF,EAAYD,EAASr9E,KAAM,UAAa,GAExCu9E,EAAgBJ,EAAErhD,SAAWuhD,EAASjiF,KAAM,KAAM2hF,UAAYM,EAG/DE,EAAgBA,EAAct/E,KAAK,WAElC,MAAO,CACN0H,GAFQvP,EAAGkC,MAGX+U,MAAOovE,EAAkBnkF,WAK3B8kF,EAAmB,WAClBhnF,EAAE6D,KAAMgiF,GAAuB,SAAUrlF,EAAG4mF,GACtCx7E,EAAOw7E,IACXH,EAAUG,EAAS,SAAWx7E,EAAOw7E,WAOxCD,EAAgBA,EAAct/E,KAAK,WAGlC,OAFA3F,KAAK6H,IAAMs8E,EAAkBnkF,KAAKqN,GAAI,IACtCrN,KAAK+hF,KA1DR,SAA0BoD,EAAUC,GACnC,IACCpzE,EAAMtI,EADHq4E,EAAO,GAGX,IAAM/vE,KAAQozE,EACb17E,EAAQ07E,EAAUpzE,GACbmzE,EAAUnzE,KAAWtI,IACnBk6E,EAAiB5xE,KACjBlU,EAAE0kF,GAAGh5C,KAAMx3B,IAAWlH,MAAOkwE,WAAYtxE,MAC7Cq4E,EAAM/vE,GAAStI,IAMnB,OAAOq4E,EA2COsD,CAAiBrlF,KAAK+U,MAAO/U,KAAK6H,KACvC7H,QAIR+kF,EAASr9E,KAAM,QAASs9E,GAGxBC,EAAgBA,EAAct/E,KAAK,WAClC,IAAIoR,EAAY/W,KACfslF,EAAMxnF,EAAEynF,WACR5yE,EAAO7U,EAAEoC,OAAQ,GAAI2kF,EAAG,CACvBj+B,OAAO,EACPllB,SAAU,WACT4jD,EAAI/rE,QAASxC,MAKhB,OADA/W,KAAKqN,GAAG9D,QAASvJ,KAAK+hF,KAAMpvE,GACrB2yE,EAAIxnD,aAIZhgC,EAAEkgC,KAAKr6B,MAAO7F,EAAGmnF,EAAcnjF,OAAQm8B,MAAM,WAG5C6mD,IAIAhnF,EAAE6D,KAAMiC,WAAW,WAClB,IAAIyJ,EAAKrN,KAAKqN,GACdvP,EAAE6D,KAAM3B,KAAK+hF,MAAM,SAAUv5C,GAC5Bn7B,EAAGsE,IAAK62B,EAAK,UAMfq8C,EAAEnjD,SAASsI,KAAM+6C,EAAU,WAK9BjnF,EAAE8B,GAAGM,OAAQ,CACZ0H,UAAsB87E,EAOjB5lF,EAAE8B,GAAGgI,SANF,SAAU49E,EAAYx7D,EAAO46D,EAAQ/tD,GAC3C,OAAO7M,EACNlsB,EAAE4gF,QAAQiG,aAAa36C,KAAMhqC,KAC5B,CAAE0I,IAAK88E,GAAcx7D,EAAO46D,EAAQ/tD,GACrC6sD,EAAK//E,MAAO3D,KAAM4D,aAIrB+D,YAAa,SAAY+7E,GACxB,OAAO,SAAU8B,EAAYx7D,EAAO46D,EAAQ/tD,GAC3C,OAAOjzB,UAAUrF,OAAS,EACzBT,EAAE4gF,QAAQiG,aAAa36C,KAAMhqC,KAC5B,CAAE8G,OAAQ0+E,GAAcx7D,EAAO46D,EAAQ/tD,GACxC6sD,EAAK//E,MAAO3D,KAAM4D,YALR,CAOR9F,EAAE8B,GAAG+H,aAEV89E,YAAa,SAAY/B,GACxB,OAAO,SAAU8B,EAAYzS,EAAO/oD,EAAO46D,EAAQ/tD,GAClD,MAAsB,kBAAVk8C,QAAiC5nE,IAAV4nE,EAC5B/oD,EAKElsB,EAAE4gF,QAAQiG,aAAa36C,KAAMhqC,KACjC+yE,EAAQ,CAAErqE,IAAK88E,GAAe,CAAE1+E,OAAQ0+E,GAC1Cx7D,EAAO46D,EAAQ/tD,GAJT6sD,EAAK//E,MAAO3D,KAAM4D,WASnB9F,EAAE4gF,QAAQiG,aAAa36C,KAAMhqC,KACnC,CAAEg8C,OAAQwpC,GAAczS,EAAO/oD,EAAO46D,IAhB7B,CAmBR9mF,EAAE8B,GAAG6lF,aAEVC,YAAa,SAAU5+E,EAAQ4B,EAAKshB,EAAO46D,EAAQ/tD,GAClD,OAAO/4B,EAAE4gF,QAAQiG,aAAa36C,KAAMhqC,KAAM,CACzC0I,IAAKA,EACL5B,OAAQA,GACNkjB,EAAO46D,EAAQ/tD,MAzMpB,GAmNA,WAG2B,IAAY6sD,EA8UvC,SAASiC,EAAqBhH,EAAQ7+E,EAASkqB,EAAO6M,GAiDrD,OA9CK/4B,EAAE8nF,cAAejH,KACrB7+E,EAAU6+E,EACVA,EAASA,EAAOA,QAIjBA,EAAS,CAAEA,OAAQA,GAGH,MAAX7+E,IACJA,EAAU,IAINhC,EAAEk8E,WAAYl6E,KAClB+2B,EAAW/2B,EACXkqB,EAAQ,KACRlqB,EAAU,KAIa,iBAAZA,GAAwBhC,EAAE0kF,GAAGqD,OAAQ/lF,MAChD+2B,EAAW7M,EACXA,EAAQlqB,EACRA,EAAU,IAINhC,EAAEk8E,WAAYhwD,KAClB6M,EAAW7M,EACXA,EAAQ,MAIJlqB,GACJhC,EAAEoC,OAAQy+E,EAAQ7+E,GAGnBkqB,EAAQA,GAASlqB,EAAQm9E,SACzB0B,EAAO1B,SAAWn/E,EAAE0kF,GAAGx7E,IAAM,EACX,iBAAVgjB,EAAqBA,EAC5BA,KAASlsB,EAAE0kF,GAAGqD,OAAS/nF,EAAE0kF,GAAGqD,OAAQ77D,GACpClsB,EAAE0kF,GAAGqD,OAAOhF,SAEblC,EAAOj9C,SAAW7K,GAAY/2B,EAAQ4hC,SAE/Bi9C,EAGR,SAASmH,EAAyB1gF,GAGjC,QAAMA,GAA4B,iBAAXA,IAAuBtH,EAAE0kF,GAAGqD,OAAQzgF,KAKpC,iBAAXA,IAAwBtH,EAAE4gF,QAAQC,OAAQv5E,MAKjDtH,EAAEk8E,WAAY50E,IAKI,iBAAXA,IAAwBA,EAAOu5E,OA+M5C,SAASoH,EAAWzmF,EAAKiJ,GACvB,IAAIsyE,EAAatyE,EAAQsyE,aACxBjpE,EAAcrJ,EAAQqJ,cAEtBqhB,EADY,wIACOte,KAAMrV,IAAS,CAAE,GAAI,EAAGu7E,EAAYjpE,EAAa,GAErE,MAAO,CACNjS,IAAKq7E,WAAY/nD,EAAQ,KAAS,EAClC5J,MAAuB,SAAhB4J,EAAQ,GAAiB4nD,EAAaG,WAAY/nD,EAAQ,IACjE9H,OAAwB,SAAhB8H,EAAQ,GAAiBrhB,EAAcopE,WAAY/nD,EAAQ,IACnEvzB,KAAMs7E,WAAY/nD,EAAQ,KAAS,GA9mBjCn1B,EAAEkoF,MAAQloF,EAAEkoF,KAAKC,SAAWnoF,EAAEkoF,KAAKC,QAAQlB,WAC/CjnF,EAAEkoF,KAAKC,QAAQlB,UAAuBrB,EAIjC5lF,EAAEkoF,KAAKC,QAAQlB,SAHZ,SAAUtjD,GAChB,QAAS3jC,EAAG2jC,GAAOtgC,KAAMs9E,IAAuBiF,EAAMjiD,OAKjC,IAAnB3jC,EAAEooF,cACNpoF,EAAEoC,OAAQpC,EAAE4gF,QAAS,CAGpByH,KAAM,SAAU59E,EAASxE,GAExB,IADA,IAAIzF,EAAI,EAAGC,EAASwF,EAAIxF,OAChBD,EAAIC,EAAQD,IACD,OAAbyF,EAAKzF,IACTiK,EAAQpH,KAAMo9E,EAAYx6E,EAAKzF,GAAKiK,EAAS,GAAI6O,MAAOrT,EAAKzF,MAMhE8nF,QAAS,SAAU79E,EAASxE,GAE3B,IADA,IAAIlC,EAAKvD,EAAI,EAAGC,EAASwF,EAAIxF,OACrBD,EAAIC,EAAQD,IACD,OAAbyF,EAAKzF,KACTuD,EAAM0G,EAAQpH,KAAMo9E,EAAYx6E,EAAKzF,IACrCiK,EAAQoJ,IAAK5N,EAAKzF,GAAKuD,KAK1BwkF,QAAS,SAAUh5E,EAAIzH,GAItB,MAHc,WAATA,IACJA,EAAOyH,EAAG81C,GAAI,WAAc,OAAS,QAE/Bv9C,GAIR0gF,cAAe,SAAU/9E,GAGxB,GAAKA,EAAQ8lB,SAAS80B,GAAI,uBACzB,OAAO56C,EAAQ8lB,SAIhB,IAAIgI,EAAQ,CACVvkB,MAAOvJ,EAAQsyE,YAAY,GAC3B9oE,OAAQxJ,EAAQqJ,aAAa,GAC7B,MAASrJ,EAAQoJ,IAAK,UAEvBlO,EAAU3F,EAAG,eACX8J,SAAU,sBACV+J,IAAK,CACL40E,SAAU,OACVC,WAAY,cACZ56D,OAAQ,OACRs4D,OAAQ,EACR34E,QAAS,IAIXs4C,EAAO,CACN/xC,MAAOvJ,EAAQuJ,QACfC,OAAQxJ,EAAQwJ,UAEjBqkE,EAASpzE,SAASsiC,cAKnB,IACC8wC,EAAOx9B,GACN,MAAQn3C,GACT20E,EAASpzE,SAAS6N,KAuCnB,OApCAtI,EAAQ+oD,KAAM7tD,IAGT8E,EAAS,KAAQ6tE,GAAUt4E,EAAEy8E,SAAUhyE,EAAS,GAAK6tE,KACzDt4E,EAAGs4E,GAAS3mE,QAAS,SAKtBhM,EAAU8E,EAAQ8lB,SAGiB,WAA9B9lB,EAAQoJ,IAAK,aACjBlO,EAAQkO,IAAK,CAAE8Z,SAAU,aACzBljB,EAAQoJ,IAAK,CAAE8Z,SAAU,eAEzB3tB,EAAEoC,OAAQm2B,EAAO,CAChB5K,SAAUljB,EAAQoJ,IAAK,YACvB+S,OAAQnc,EAAQoJ,IAAK,aAEtB7T,EAAE6D,KAAM,CAAE,MAAO,OAAQ,SAAU,UAAW,SAAUrD,EAAGslD,GAC1DvtB,EAAOutB,GAAQr7C,EAAQoJ,IAAKiyC,GACvB94C,MAAO+G,SAAUwkB,EAAOutB,GAAO,OACnCvtB,EAAOutB,GAAQ,WAGjBr7C,EAAQoJ,IAAK,CACZ8Z,SAAU,WACV9rB,IAAK,EACLD,KAAM,EACN2pB,MAAO,OACP8B,OAAQ,UAGV5iB,EAAQoJ,IAAKkyC,GAENpgD,EAAQkO,IAAK0kB,GAAQpR,QAG7BwhE,cAAe,SAAUl+E,GACxB,IAAI6tE,EAASpzE,SAASsiC,cAWtB,OATK/8B,EAAQ8lB,SAAS80B,GAAI,yBACzB56C,EAAQ8lB,SAASstD,YAAapzE,IAGzBA,EAAS,KAAQ6tE,GAAUt4E,EAAEy8E,SAAUhyE,EAAS,GAAK6tE,KACzDt4E,EAAGs4E,GAAS3mE,QAAS,UAIhBlH,KAKVzK,EAAEoC,OAAQpC,EAAE4gF,QAAS,CACpBjtD,QAAS,SAETi1D,OAAQ,SAAU10E,EAAMpM,EAAM+4E,GAS7B,OARMA,IACLA,EAAS/4E,EACTA,EAAO,UAGR9H,EAAE4gF,QAAQC,OAAQ3sE,GAAS2sE,EAC3B7gF,EAAE4gF,QAAQC,OAAQ3sE,GAAOpM,KAAOA,EAEzB+4E,GAGRgI,iBAAkB,SAAUp+E,EAASqzE,EAAS/6D,GAC7C,GAAiB,IAAZ+6D,EACJ,MAAO,CACN7pE,OAAQ,EACRD,MAAO,EACPF,YAAa,EACbipE,WAAY,GAId,IAAIj8E,EAAkB,eAAdiiB,GAAiC+6D,GAAW,KAAQ,IAAQ,EACnE/8E,EAAkB,aAAdgiB,GAA+B+6D,GAAW,KAAQ,IAAQ,EAE/D,MAAO,CACN7pE,OAAQxJ,EAAQwJ,SAAWlT,EAC3BiT,MAAOvJ,EAAQuJ,QAAUlT,EACzBgT,YAAarJ,EAAQqJ,cAAgB/S,EACrCg8E,WAAYtyE,EAAQsyE,aAAej8E,IAKrCgoF,UAAW,SAAUC,GACpB,MAAO,CACN/0E,MAAO+0E,EAAUC,KAAKz9D,MAAQw9D,EAAUC,KAAKpnF,KAC7CqS,OAAQ80E,EAAUC,KAAK37D,OAAS07D,EAAUC,KAAKnnF,IAC/CD,KAAMmnF,EAAUC,KAAKpnF,KACrBC,IAAKknF,EAAUC,KAAKnnF,MAKtBu9D,QAAS,SAAU30D,EAASw+E,EAAahhC,GACxC,IAAIa,EAAQr+C,EAAQq+C,QAEfmgC,EAAc,GAClBngC,EAAMzN,OAAOx1C,MAAOijD,EACnB,CAAE,EAAG,GAAI7+B,OAAQ6+B,EAAMzN,OAAQ4tC,EAAahhC,KAE9Cx9C,EAAQy0E,WAGTgK,UAAW,SAAUz+E,GACpBA,EAAQpH,KAAMq9E,EAAgBj2E,EAAS,GAAI6O,MAAME,UAGlD2vE,aAAc,SAAU1+E,GACvBA,EAAS,GAAI6O,MAAME,QAAU/O,EAAQpH,KAAMq9E,IAAoB,GAC/Dj2E,EAAQg1E,WAAYiB,IAGrB54E,KAAM,SAAU2C,EAAS3C,GACxB,IAAIshF,EAAS3+E,EAAQ46C,GAAI,WAQzB,MANc,WAATv9C,IACJA,EAAOshF,EAAS,OAAS,SAErBA,EAAkB,SAATthF,EAA2B,SAATA,KAC/BA,EAAO,QAEDA,GAIRuhF,YAAa,SAAUhmB,EAAQvrB,GAC9B,IAAI/2C,EAAGD,EAEP,OAASuiE,EAAQ,IACjB,IAAK,MACJtiE,EAAI,EACJ,MACD,IAAK,SACJA,EAAI,GACJ,MACD,IAAK,SACJA,EAAI,EACJ,MACD,QACCA,EAAIsiE,EAAQ,GAAMvrB,EAAS7jC,OAG5B,OAASovD,EAAQ,IACjB,IAAK,OACJviE,EAAI,EACJ,MACD,IAAK,SACJA,EAAI,GACJ,MACD,IAAK,QACJA,EAAI,EACJ,MACD,QACCA,EAAIuiE,EAAQ,GAAMvrB,EAAS9jC,MAG5B,MAAO,CACNlT,EAAGA,EACHC,EAAGA,IAKLuoF,kBAAmB,SAAU7+E,GAC5B,IAAI8+E,EACHC,EAAc/+E,EAAQoJ,IAAK,YAC3B8Z,EAAWljB,EAAQkjB,WA+CpB,OAzCAljB,EAAQoJ,IAAK,CACZkqE,UAAWtzE,EAAQoJ,IAAK,aACxB41E,aAAch/E,EAAQoJ,IAAK,gBAC3B61E,WAAYj/E,EAAQoJ,IAAK,cACzB81E,YAAal/E,EAAQoJ,IAAK,iBAE1BkpE,WAAYtyE,EAAQsyE,cACpBjpE,YAAarJ,EAAQqJ,eAEjB,qBAAqBuH,KAAMmuE,KAC/BA,EAAc,WAEdD,EAAcvpF,EAAG,IAAMyK,EAAS,GAAIm/E,SAAW,KAAMljD,YAAaj8B,GAAUoJ,IAAK,CAIhF8tC,QAAS,iBAAiBtmC,KAAM5Q,EAAQoJ,IAAK,YAC5C,eACA,QACDka,WAAY,SAGZgwD,UAAWtzE,EAAQoJ,IAAK,aACxB41E,aAAch/E,EAAQoJ,IAAK,gBAC3B61E,WAAYj/E,EAAQoJ,IAAK,cACzB81E,YAAal/E,EAAQoJ,IAAK,eAC1B,MAASpJ,EAAQoJ,IAAK,WAEtBkpE,WAAYtyE,EAAQsyE,cACpBjpE,YAAarJ,EAAQqJ,eACrBhK,SAAU,0BAEXW,EAAQpH,KAAMo9E,EAAY,cAAe8I,IAG1C9+E,EAAQoJ,IAAK,CACZ8Z,SAAU67D,EACV5nF,KAAM+rB,EAAS/rB,KACfC,IAAK8rB,EAAS9rB,MAGR0nF,GAGRM,kBAAmB,SAAUp/E,GAC5B,IAAIq/E,EAAUrJ,EAAY,cACxB8I,EAAc9+E,EAAQpH,KAAMymF,GAEzBP,IACJA,EAAYvgF,SACZyB,EAAQg1E,WAAYqK,KAMtBC,QAAS,SAAUt/E,GAClBzK,EAAE4gF,QAAQuI,aAAc1+E,GACxBzK,EAAE4gF,QAAQiJ,kBAAmBp/E,IAG9Bu/E,cAAe,SAAUv/E,EAASmuC,EAAMqxC,EAAQr+E,GAQ/C,OAPAA,EAAQA,GAAS,GACjB5L,EAAE6D,KAAM+0C,GAAM,SAAUp4C,EAAGM,GAC1B,IAAIopF,EAAOz/E,EAAQ0/E,QAASrpF,GACvBopF,EAAM,GAAM,IAChBt+E,EAAO9K,GAAMopF,EAAM,GAAMD,EAASC,EAAM,OAGnCt+E,KAmFT5L,EAAE8B,GAAGM,OAAQ,CACZy+E,OAAQ,WACP,IAAIx7C,EAAOwiD,EAAoBhiF,MAAO3D,KAAM4D,WAC3CskF,EAAepqF,EAAE4gF,QAAQC,OAAQx7C,EAAKw7C,QACtCwJ,EAAcD,EAAatiF,KAC3BghD,EAAQzjB,EAAKyjB,MACbwhC,EAAYxhC,GAAS,KACrBllB,EAAWyB,EAAKzB,SAChB97B,EAAOu9B,EAAKv9B,KACZyiF,EAAQ,GACRC,EAAY,SAAU3xE,GACrB,IAAItJ,EAAKvP,EAAGkC,MACXuoF,EAAiBzqF,EAAE4gF,QAAQ94E,KAAMyH,EAAIzH,IAAUuiF,EAGhD96E,EAAGlM,KAAMs9E,GAAmB,GAK5B4J,EAAM7pF,KAAM+pF,GAGPJ,IAAoC,SAAnBI,GAClBA,IAAmBJ,GAAkC,SAAnBI,IACrCl7E,EAAG4X,OAGEkjE,GAAkC,SAAnBI,GACpBzqF,EAAE4gF,QAAQsI,UAAW35E,GAGjBvP,EAAEk8E,WAAYrjE,IAClBA,KAIH,GAAK7Y,EAAE0kF,GAAGx7E,MAAQkhF,EAGjB,OAAKtiF,EACG5F,KAAM4F,GAAQu9B,EAAK85C,SAAUv7C,GAE7B1hC,KAAK2B,MAAM,WACZ+/B,GACJA,EAASsI,KAAMhqC,SAMnB,SAAS6mD,EAAKlwC,GACb,IAAI8qB,EAAO3jC,EAAGkC,MAcd,SAASi+B,IACHngC,EAAEk8E,WAAYt4C,IAClBA,EAASsI,KAAMvI,EAAM,IAGjB3jC,EAAEk8E,WAAYrjE,IAClBA,IAMFwsB,EAAKv9B,KAAOyiF,EAAMxhF,SAEM,IAAnB/I,EAAEooF,cAA2BiC,EAUd,SAAdhlD,EAAKv9B,MAGT67B,EAAM77B,KACNq4B,KAEAiqD,EAAal+C,KAAMvI,EAAM,GAAK0B,GA1ChC,WACC1B,EAAK87C,WAAYkB,GAEjB3gF,EAAE4gF,QAAQmJ,QAASpmD,GAEA,SAAd0B,EAAKv9B,MACT67B,EAAK5yB,OAGNovB,QAkBKwD,EAAK0hB,GAAI,WAAuB,SAATv9C,EAA2B,SAATA,IAG7C67B,EAAM77B,KACNq4B,KAEAiqD,EAAal+C,KAAMvI,EAAM,GAAK0B,EAAMlF,GAiBvC,OAAiB,IAAV2oB,EACN5mD,KAAK2B,KAAM2mF,GAAY3mF,KAAMklD,GAC7B7mD,KAAK4mD,MAAOwhC,EAAWE,GAAY1hC,MAAOwhC,EAAWvhC,IAGvD5hC,KAAM,SAAYy+D,GACjB,OAAO,SAAUt+E,GAChB,GAAK0gF,EAAyB1gF,GAC7B,OAAOs+E,EAAK//E,MAAO3D,KAAM4D,WAEzB,IAAIu/B,EAAOwiD,EAAoBhiF,MAAO3D,KAAM4D,WAE5C,OADAu/B,EAAKv9B,KAAO,OACL5F,KAAK2+E,OAAO30C,KAAMhqC,KAAMmjC,IAP5B,CAUDrlC,EAAE8B,GAAGqlB,MAEVpW,KAAM,SAAY60E,GACjB,OAAO,SAAUt+E,GAChB,GAAK0gF,EAAyB1gF,GAC7B,OAAOs+E,EAAK//E,MAAO3D,KAAM4D,WAEzB,IAAIu/B,EAAOwiD,EAAoBhiF,MAAO3D,KAAM4D,WAE5C,OADAu/B,EAAKv9B,KAAO,OACL5F,KAAK2+E,OAAO30C,KAAMhqC,KAAMmjC,IAP5B,CAUDrlC,EAAE8B,GAAGiP,MAEVmtC,OAAQ,SAAY0nC,GACnB,OAAO,SAAUt+E,GAChB,GAAK0gF,EAAyB1gF,IAA8B,kBAAXA,EAChD,OAAOs+E,EAAK//E,MAAO3D,KAAM4D,WAEzB,IAAIu/B,EAAOwiD,EAAoBhiF,MAAO3D,KAAM4D,WAE5C,OADAu/B,EAAKv9B,KAAO,SACL5F,KAAK2+E,OAAO30C,KAAMhqC,KAAMmjC,IAP1B,CAUHrlC,EAAE8B,GAAGo8C,QAEVisC,QAAS,SAAUz/C,GAClB,IAAIpxB,EAAQpX,KAAK2R,IAAK62B,GACrB3mC,EAAM,GAOP,OALA/D,EAAE6D,KAAM,CAAE,KAAM,KAAM,IAAK,OAAQ,SAAUrD,EAAG0pF,GAC1C5wE,EAAMxQ,QAASohF,GAAS,IAC5BnmF,EAAM,CAAEm5E,WAAY5jE,GAAS4wE,OAGxBnmF,GAGR2mF,QAAS,SAAUC,GAClB,OAAKA,EACGzoF,KAAK2R,IAAK,OAAQ,QAAU82E,EAAQ9oF,IAAM,MAAQ8oF,EAAQp/D,MAAQ,MACxEo/D,EAAQt9D,OAAS,MAAQs9D,EAAQ/oF,KAAO,OAEnCqmF,EAAW/lF,KAAK2R,IAAK,QAAU3R,OAGvC0oF,SAAU,SAAU5oF,EAASm+B,GAC5B,IAAI11B,EAAUzK,EAAGkC,MAChBoB,EAAStD,EAAGgC,EAAQurD,IACpBs9B,EAA2C,UAA7BvnF,EAAOuQ,IAAK,YAC1Bd,EAAO/S,EAAG,QACV8qF,EAASD,EAAc93E,EAAKxO,YAAc,EAC1CwmF,EAAUF,EAAc93E,EAAKzO,aAAe,EAC5C0mF,EAAc1nF,EAAOgkB,SACrByhE,EAAY,CACXlnF,IAAKmpF,EAAYnpF,IAAMipF,EACvBlpF,KAAMopF,EAAYppF,KAAOmpF,EACzB92E,OAAQ3Q,EAAOqR,cACfX,MAAO1Q,EAAOkR,cAEfy2E,EAAgBxgF,EAAQ6c,SACxBsjE,EAAW5qF,EAAG,2CACZoR,SAAU,QACVtH,SAAU9H,EAAQ0F,WAClBmM,IAAK,CACLhS,IAAKopF,EAAcppF,IAAMipF,EACzBlpF,KAAMqpF,EAAcrpF,KAAOmpF,EAC3B92E,OAAQxJ,EAAQkK,cAChBX,MAAOvJ,EAAQ+J,aACfmZ,SAAUk9D,EAAc,QAAU,aAElCp/E,QAASs9E,EAAW/mF,EAAQm9E,SAAUn9E,EAAQ8kF,QAAQ,WACtD8D,EAAS5hF,SACJhJ,EAAEk8E,WAAY/7C,IAClBA,UAoBNngC,EAAE0kF,GAAGh5C,KAAKs9C,KAAO,SAAUtE,GACpBA,EAAGwG,WACRxG,EAAGztE,MAAQjX,EAAG0kF,EAAG/gD,MAAO+mD,UACD,iBAAXhG,EAAG36E,MACd26E,EAAG36E,IAAMk+E,EAAWvD,EAAG36E,IAAK26E,EAAG/gD,OAEhC+gD,EAAGwG,UAAW,GAGflrF,EAAG0kF,EAAG/gD,MAAO+mD,QAAS,CACrB7oF,IAAK6iF,EAAG5+B,KAAQ4+B,EAAG36E,IAAIlI,IAAM6iF,EAAGztE,MAAMpV,KAAQ6iF,EAAGztE,MAAMpV,IACvD0pB,MAAOm5D,EAAG5+B,KAAQ4+B,EAAG36E,IAAIwhB,MAAQm5D,EAAGztE,MAAMsU,OAAUm5D,EAAGztE,MAAMsU,MAC7D8B,OAAQq3D,EAAG5+B,KAAQ4+B,EAAG36E,IAAIsjB,OAASq3D,EAAGztE,MAAMoW,QAAWq3D,EAAGztE,MAAMoW,OAChEzrB,KAAM8iF,EAAG5+B,KAAQ4+B,EAAG36E,IAAInI,KAAO8iF,EAAGztE,MAAMrV,MAAS8iF,EAAGztE,MAAMrV,QAjoB5D,GA+oBI4+E,EAAc,GAElBxgF,EAAE6D,KAAM,CAAE,OAAQ,QAAS,QAAS,QAAS,SAAU,SAAUrD,EAAG0T,GACnEssE,EAAatsE,GAAS,SAAU8K,GAC/B,OAAOta,KAAKoqD,IAAK9vC,EAAGxe,EAAI,OAI1BR,EAAEoC,OAAQo+E,EAAa,CACtB2K,KAAM,SAAUnsE,GACf,OAAO,EAAIta,KAAK0mF,IAAKpsE,EAAIta,KAAK6lE,GAAK,IAEpC8gB,KAAM,SAAUrsE,GACf,OAAO,EAAIta,KAAK2lE,KAAM,EAAIrrD,EAAIA,IAE/BssE,QAAS,SAAUtsE,GAClB,OAAa,IAANA,GAAiB,IAANA,EAAUA,GAC1Bta,KAAKoqD,IAAK,EAAG,GAAM9vC,EAAI,IAAQta,KAAK6mF,KAAmB,IAAVvsE,EAAI,GAAW,KAAQta,KAAK6lE,GAAK,KAEjFihB,KAAM,SAAUxsE,GACf,OAAOA,EAAIA,GAAM,EAAIA,EAAI,IAE1BysE,OAAQ,SAAUzsE,GAIjB,IAHA,IAAIsS,EACHo6D,EAAS,EAEF1sE,IAAQsS,EAAO5sB,KAAKoqD,IAAK,IAAK48B,IAAa,GAAM,KACzD,OAAO,EAAIhnF,KAAKoqD,IAAK,EAAG,EAAI48B,GAAW,OAAShnF,KAAKoqD,KAAc,EAAPx9B,EAAW,GAAM,GAAKtS,EAAG,MAIvFhf,EAAE6D,KAAM28E,GAAa,SAAUtsE,EAAMy3E,GACpC3rF,EAAE8mF,OAAQ,SAAW5yE,GAASy3E,EAC9B3rF,EAAE8mF,OAAQ,UAAY5yE,GAAS,SAAU8K,GACxC,OAAO,EAAI2sE,EAAQ,EAAI3sE,IAExBhf,EAAE8mF,OAAQ,YAAc5yE,GAAS,SAAU8K,GAC1C,OAAOA,EAAI,GACV2sE,EAAY,EAAJ3sE,GAAU,EAClB,EAAI2sE,GAAa,EAAL3sE,EAAS,GAAM,MAMvBhf,EAAE4gF,UA3kDmC,qDCrB5C,UAIE,EAAQ,CAAE,QAAU,cAAsB,0BAAP,EAMjC,SAAU5gF,GAGd,OAAOA,EAAE+L,GAAG6/E,KAAO,cAAc/0E,KAAM5T,UAAUwyC,UAAUoH,iBATf,qDCJ5C,UAkBE,EAAQ,CAAE,QAAU,cAAsB,0BAAP,EAMjC,SAAU78C,GACd,OAAOA,EAAE+L,GAAGytB,QAAU,CACrBqyD,UAAW,EACXC,MAAO,IACPC,OAAQ,GACRC,KAAM,GACNC,IAAK,GACLC,MAAO,GACPC,OAAQ,GACRC,KAAM,GACNC,KAAM,GACNC,UAAW,GACXC,QAAS,GACTC,OAAQ,IACRC,MAAO,GACPC,MAAO,GACPC,IAAK,EACLC,GAAI,MAvBuC,qDClB5C,UAIE,EAAQ,CAAE,cAAmB,0BAAP,EAMpB,SAAU5sF,GAId,OAFAA,EAAE+L,GAAK/L,EAAE+L,IAAM,GAER/L,EAAE+L,GAAG4nB,QAAU,WAVS,qDCJ/B,UAmBE,EAAQ,CAAE,QAAU,cAAsB,0BAAP,EAMlC,SAAU3zB,GAEb,IAG0B4lF,EAHtBiH,EAAa,EACbC,EAAcvsF,MAAMqF,UAAUgM,MA8rBlC,OA5rBA5R,EAAE+sF,WAAwBnH,EAiBrB5lF,EAAE+sF,UAhBC,SAAUC,GAChB,IAAI5X,EAAQzxC,EAAMnjC,EAClB,IAAMA,EAAI,EAA4B,OAAvBmjC,EAAOqpD,EAAOxsF,IAAeA,IAC3C,KAGC40E,EAASp1E,EAAEitF,MAAOtpD,EAAM,YACTyxC,EAAOpsE,QACrBhJ,EAAG2jC,GAAOi5C,eAAgB,UAI1B,MAAQj5E,IAEXiiF,EAAMoH,KAIRhtF,EAAEktF,OAAS,SAAUh5E,EAAM6yC,EAAMnhD,GAChC,IAAIunF,EAAqBv/C,EAAaw/C,EAIlCC,EAAmB,GAEnBzqF,EAAYsR,EAAK7T,MAAO,KAAO,GAE/BitF,EAAW1qF,EAAY,KAD3BsR,EAAOA,EAAK7T,MAAO,KAAO,IAuH1B,OApHMuF,IACLA,EAAYmhD,EACZA,EAAO/mD,EAAEutF,QAGLvtF,EAAE4uC,QAAShpC,KACfA,EAAY5F,EAAEoC,OAAOyD,MAAO,KAAM,CAAE,IAAKokB,OAAQrkB,KAIlD5F,EAAEkoF,KAAM,KAAOoF,EAASzwC,eAAkB,SAAUlZ,GACnD,QAAS3jC,EAAEqD,KAAMsgC,EAAM2pD,IAGxBttF,EAAG4C,GAAc5C,EAAG4C,IAAe,GACnCuqF,EAAsBntF,EAAG4C,GAAasR,GACtC05B,EAAc5tC,EAAG4C,GAAasR,GAAS,SAAUlS,EAASyI,GAGzD,IAAMvI,KAAKsrF,cACV,OAAO,IAAI5/C,EAAa5rC,EAASyI,GAK7B3E,UAAUrF,QACdyB,KAAKsrF,cAAexrF,EAASyI,IAK/BzK,EAAEoC,OAAQwrC,EAAau/C,EAAqB,CAC3Cx5D,QAAS/tB,EAAU+tB,QAInB85D,OAAQztF,EAAEoC,OAAQ,GAAIwD,GAItB8nF,mBAAoB,MAGrBN,EAAgB,IAAIrmC,GAKN/kD,QAAUhC,EAAEktF,OAAO9qF,OAAQ,GAAIgrF,EAAcprF,SAC3DhC,EAAE6D,KAAM+B,GAAW,SAAUwE,EAAMwB,GAC5B5L,EAAEk8E,WAAYtwE,GAIpByhF,EAAkBjjF,GAAS,WAC1B,SAASs7D,IACR,OAAO3e,EAAKnhD,UAAWwE,GAAOvE,MAAO3D,KAAM4D,WAG5C,SAAS6nF,EAAatoD,GACrB,OAAO0hB,EAAKnhD,UAAWwE,GAAOvE,MAAO3D,KAAMmjC,GAG5C,OAAO,WACN,IAEIxD,EAFA+rD,EAAU1rF,KAAKwjE,OACfmoB,EAAe3rF,KAAKyrF,YAWxB,OARAzrF,KAAKwjE,OAASA,EACdxjE,KAAKyrF,YAAcA,EAEnB9rD,EAAcj2B,EAAM/F,MAAO3D,KAAM4D,WAEjC5D,KAAKwjE,OAASkoB,EACd1rF,KAAKyrF,YAAcE,EAEZhsD,GAtBkB,GAH1BwrD,EAAkBjjF,GAASwB,KA6B7BgiC,EAAYhoC,UAAY5F,EAAEktF,OAAO9qF,OAAQgrF,EAAe,CAKvDU,kBAAmBX,GAAwBC,EAAcU,mBAA8B55E,GACrFm5E,EAAkB,CACpBz/C,YAAaA,EACbhrC,UAAWA,EACXmrF,WAAY75E,EACZ85E,eAAgBV,IAOZH,GACJntF,EAAE6D,KAAMspF,EAAoBO,oBAAoB,SAAUltF,EAAG+kE,GAC5D,IAAI0oB,EAAiB1oB,EAAM3/D,UAI3B5F,EAAEktF,OAAQe,EAAerrF,UAAY,IAAMqrF,EAAeF,WAAYngD,EACrE23B,EAAMkoB,kBAKDN,EAAoBO,oBAE3B3mC,EAAK2mC,mBAAmBhtF,KAAMktC,GAG/B5tC,EAAEktF,OAAOgB,OAAQh6E,EAAM05B,GAEhBA,GAGR5tC,EAAEktF,OAAO9qF,OAAS,SAAUkB,GAO3B,IANA,IAGIonC,EACA9+B,EAJAq3C,EAAQ6pC,EAAY5gD,KAAMpmC,UAAW,GACrCqoF,EAAa,EACbhnC,EAAclE,EAAMxiD,OAIhB0tF,EAAahnC,EAAagnC,IACjC,IAAMzjD,KAAOuY,EAAOkrC,GACnBviF,EAAQq3C,EAAOkrC,GAAczjD,GACxBuY,EAAOkrC,GAAat0C,eAAgBnP,SAAmBr9B,IAAVzB,IAG5C5L,EAAE8nF,cAAel8E,GACrBtI,EAAQonC,GAAQ1qC,EAAE8nF,cAAexkF,EAAQonC,IACxC1qC,EAAEktF,OAAO9qF,OAAQ,GAAIkB,EAAQonC,GAAO9+B,GAGpC5L,EAAEktF,OAAO9qF,OAAQ,GAAIwJ,GAItBtI,EAAQonC,GAAQ9+B,GAKpB,OAAOtI,GAGRtD,EAAEktF,OAAOgB,OAAS,SAAUh6E,EAAMu7B,GACjC,IAAI69C,EAAW79C,EAAO7pC,UAAUooF,gBAAkB95E,EAClDlU,EAAE8B,GAAIoS,GAAS,SAAUlS,GACxB,IAAIosF,EAAkC,iBAAZpsF,EACtBqjC,EAAOynD,EAAY5gD,KAAMpmC,UAAW,GACpC+7B,EAAc3/B,KA2DlB,OAzDKksF,EAIElsF,KAAKzB,QAAsB,aAAZuB,EAGpBE,KAAK2B,MAAM,WACV,IAAIwqF,EACAj6B,EAAWp0D,EAAEqD,KAAMnB,KAAMorF,GAE7B,MAAiB,aAAZtrF,GACJ6/B,EAAcuyB,GACP,GAGFA,EAMAp0D,EAAEk8E,WAAY9nB,EAAUpyD,KAAuC,MAAxBA,EAAQ2oC,OAAQ,IAK7D0jD,EAAcj6B,EAAUpyD,GAAU6D,MAAOuuD,EAAU/uB,MAE9B+uB,QAA4B/mD,IAAhBghF,GAChCxsD,EAAcwsD,GAAeA,EAAYxL,OACxChhD,EAAYysD,UAAWD,EAAYrqF,OACnCqqF,GACM,QAJR,EANQruF,EAAE0B,MAAO,mBAAqBM,EAAU,SAAWkS,EACzD,oBAPMlU,EAAE0B,MAAO,0BAA4BwS,EAA5B,uDAEgBlS,EAAU,QAd5C6/B,OAAcx0B,GAmCVg4B,EAAK5kC,SACTuB,EAAUhC,EAAEktF,OAAO9qF,OAAOyD,MAAO,KAAM,CAAE7D,GAAUioB,OAAQob,KAG5DnjC,KAAK2B,MAAM,WACV,IAAIuwD,EAAWp0D,EAAEqD,KAAMnB,KAAMorF,GACxBl5B,GACJA,EAAS9sD,OAAQtF,GAAW,IACvBoyD,EAASm6B,OACbn6B,EAASm6B,SAGVvuF,EAAEqD,KAAMnB,KAAMorF,EAAU,IAAI79C,EAAQztC,EAASE,WAKzC2/B,IAIT7hC,EAAEutF,OAAS,aACXvtF,EAAEutF,OAAOG,mBAAqB,GAE9B1tF,EAAEutF,OAAO3nF,UAAY,CACpBmoF,WAAY,SACZD,kBAAmB,GACnBU,eAAgB,QAEhBxsF,QAAS,CACRysF,QAAS,GACTC,UAAU,EAGVtkD,OAAQ,MAGTojD,cAAe,SAAUxrF,EAASyI,GACjCA,EAAUzK,EAAGyK,GAAWvI,KAAKssF,gBAAkBtsF,MAAQ,GACvDA,KAAKuI,QAAUzK,EAAGyK,GAClBvI,KAAKysF,KAAO9B,IACZ3qF,KAAK0sF,eAAiB,IAAM1sF,KAAK6rF,WAAa7rF,KAAKysF,KAEnDzsF,KAAK2sF,SAAW7uF,IAChBkC,KAAK4sF,UAAY9uF,IACjBkC,KAAK6sF,UAAY/uF,IACjBkC,KAAK8sF,qBAAuB,GAEvBvkF,IAAYvI,OAChBlC,EAAEqD,KAAMoH,EAASvI,KAAK8rF,eAAgB9rF,MACtCA,KAAK+sF,KAAK,EAAM/sF,KAAKuI,QAAS,CAC7BzB,OAAQ,SAAUnI,GACZA,EAAMyC,SAAWmH,GACrBvI,KAAKyoE,aAIRzoE,KAAKgD,SAAWlF,EAAGyK,EAAQ6O,MAG1B7O,EAAQo8D,cAGRp8D,EAAQvF,UAAYuF,GACrBvI,KAAKc,OAAShD,EAAGkC,KAAKgD,SAAU,GAAI4hE,aAAe5kE,KAAKgD,SAAU,GAAIq8C,eAGvEr/C,KAAKF,QAAUhC,EAAEktF,OAAO9qF,OAAQ,GAC/BF,KAAKF,QACLE,KAAKgtF,oBACLltF,GAEDE,KAAKitF,UAEAjtF,KAAKF,QAAQ0sF,UACjBxsF,KAAKktF,mBAAoBltF,KAAKF,QAAQ0sF,UAGvCxsF,KAAKmtF,SAAU,SAAU,KAAMntF,KAAKotF,uBACpCptF,KAAKqsF,SAGNW,kBAAmB,WAClB,MAAO,IAGRI,oBAAqBtvF,EAAEuvF,KAEvBJ,QAASnvF,EAAEuvF,KAEXhB,MAAOvuF,EAAEuvF,KAET5kB,QAAS,WACR,IAAIx9B,EAAOjrC,KAEXA,KAAKstF,WACLxvF,EAAE6D,KAAM3B,KAAK8sF,sBAAsB,SAAUtkD,EAAK9+B,GACjDuhC,EAAKsiD,aAAc7jF,EAAO8+B,MAK3BxoC,KAAKuI,QACHvB,IAAKhH,KAAK0sF,gBACVnP,WAAYv9E,KAAK8rF,gBACnB9rF,KAAKgrF,SACHhkF,IAAKhH,KAAK0sF,gBACVc,WAAY,iBAGdxtF,KAAK2sF,SAAS3lF,IAAKhH,KAAK0sF,iBAGzBY,SAAUxvF,EAAEuvF,KAEZrC,OAAQ,WACP,OAAOhrF,KAAKuI,SAGbnD,OAAQ,SAAUojC,EAAK9+B,GACtB,IACIwN,EACAu2E,EACAnvF,EAHAwB,EAAU0oC,EAKd,GAA0B,IAArB5kC,UAAUrF,OAGd,OAAOT,EAAEktF,OAAO9qF,OAAQ,GAAIF,KAAKF,SAGlC,GAAoB,iBAAR0oC,EAMX,GAHA1oC,EAAU,GACVoX,EAAQsxB,EAAIrqC,MAAO,KACnBqqC,EAAMtxB,EAAMrQ,QACPqQ,EAAM3Y,OAAS,CAEnB,IADAkvF,EAAY3tF,EAAS0oC,GAAQ1qC,EAAEktF,OAAO9qF,OAAQ,GAAIF,KAAKF,QAAS0oC,IAC1DlqC,EAAI,EAAGA,EAAI4Y,EAAM3Y,OAAS,EAAGD,IAClCmvF,EAAWv2E,EAAO5Y,IAAQmvF,EAAWv2E,EAAO5Y,KAAS,GACrDmvF,EAAYA,EAAWv2E,EAAO5Y,IAG/B,GADAkqC,EAAMtxB,EAAMolD,MACc,IAArB14D,UAAUrF,OACd,YAA4B4M,IAArBsiF,EAAWjlD,GAAsB,KAAOilD,EAAWjlD,GAE3DilD,EAAWjlD,GAAQ9+B,MACb,CACN,GAA0B,IAArB9F,UAAUrF,OACd,YAA+B4M,IAAxBnL,KAAKF,QAAS0oC,GAAsB,KAAOxoC,KAAKF,QAAS0oC,GAEjE1oC,EAAS0oC,GAAQ9+B,EAMnB,OAFA1J,KAAK0tF,YAAa5tF,GAEXE,MAGR0tF,YAAa,SAAU5tF,GACtB,IAAI0oC,EAEJ,IAAMA,KAAO1oC,EACZE,KAAK2tF,WAAYnlD,EAAK1oC,EAAS0oC,IAGhC,OAAOxoC,MAGR2tF,WAAY,SAAUnlD,EAAK9+B,GAW1B,MAVa,YAAR8+B,GACJxoC,KAAK4tF,kBAAmBlkF,GAGzB1J,KAAKF,QAAS0oC,GAAQ9+B,EAET,aAAR8+B,GACJxoC,KAAKktF,mBAAoBxjF,GAGnB1J,MAGR4tF,kBAAmB,SAAUlkF,GAC5B,IAAIqnB,EAAU88D,EAAUC,EAExB,IAAM/8D,KAAYrnB,EACjBokF,EAAkB9tF,KAAK8sF,qBAAsB/7D,GACxCrnB,EAAOqnB,KAAe/wB,KAAKF,QAAQysF,QAASx7D,IAC9C+8D,GACAA,EAAgBvvF,SAQnBsvF,EAAW/vF,EAAGgwF,EAAgBhsF,OAC9B9B,KAAKutF,aAAcO,EAAiB/8D,GAMpC88D,EAASjmF,SAAU5H,KAAK+tF,SAAU,CACjCxlF,QAASslF,EACTz5D,KAAMrD,EACNw7D,QAAS7iF,EACThB,KAAK,OAKRwkF,mBAAoB,SAAUxjF,GAC7B1J,KAAKguF,aAAchuF,KAAKgrF,SAAUhrF,KAAK8rF,eAAiB,YAAa,OAAQpiF,GAGxEA,IACJ1J,KAAKutF,aAAcvtF,KAAK4sF,UAAW,KAAM,kBACzC5sF,KAAKutF,aAAcvtF,KAAK6sF,UAAW,KAAM,oBAI3C5zC,OAAQ,WACP,OAAOj5C,KAAK0tF,YAAa,CAAElB,UAAU,KAGtCyB,QAAS,WACR,OAAOjuF,KAAK0tF,YAAa,CAAElB,UAAU,KAGtCuB,SAAU,SAAUjuF,GACnB,IAAI29B,EAAO,GACPwN,EAAOjrC,KAOX,SAASkuF,EAAoB3B,EAAS4B,GACrC,IAAInW,EAAS15E,EACb,IAAMA,EAAI,EAAGA,EAAIiuF,EAAQhuF,OAAQD,IAChC05E,EAAU/sC,EAAK6hD,qBAAsBP,EAASjuF,KAASR,IAEtDk6E,EADIl4E,EAAQ4I,IACF5K,EAAGA,EAAEswF,OAAQpW,EAAQl2E,MAAMimB,OAAQjoB,EAAQyI,QAAQzG,SAEnDhE,EAAGk6E,EAAQqW,IAAKvuF,EAAQyI,SAAUzG,OAE7CmpC,EAAK6hD,qBAAsBP,EAASjuF,IAAQ05E,EAC5Cv6C,EAAKj/B,KAAM+tF,EAASjuF,IACf6vF,GAAeruF,EAAQysF,QAASA,EAASjuF,KAC7Cm/B,EAAKj/B,KAAMsB,EAAQysF,QAASA,EAASjuF,KAgBxC,OAjCAwB,EAAUhC,EAAEoC,OAAQ,CACnBqI,QAASvI,KAAKuI,QACdgkF,QAASvsF,KAAKF,QAAQysF,SAAW,IAC/BzsF,GAmBHE,KAAK+sF,IAAKjtF,EAAQyI,QAAS,CAC1B,OAAU,2BAGNzI,EAAQs0B,MACZ85D,EAAoBpuF,EAAQs0B,KAAKgF,MAAO,SAAY,IAAI,GAEpDt5B,EAAQqlD,OACZ+oC,EAAoBpuF,EAAQqlD,MAAM/rB,MAAO,SAAY,IAG/CqE,EAAKh/B,KAAM,MAGnB6vF,uBAAwB,SAAU3vF,GACjC,IAAIssC,EAAOjrC,KACXlC,EAAE6D,KAAMspC,EAAK6hD,sBAAsB,SAAUtkD,EAAK9+B,IACN,IAAtC5L,EAAE48B,QAAS/7B,EAAMyC,OAAQsI,KAC7BuhC,EAAK6hD,qBAAsBtkD,GAAQ1qC,EAAG4L,EAAM2kF,IAAK1vF,EAAMyC,QAASU,YAKnEyrF,aAAc,SAAUhlF,EAAS6rB,EAAM+wB,GACtC,OAAOnlD,KAAKguF,aAAczlF,EAAS6rB,EAAM+wB,GAAO,IAGjDopC,UAAW,SAAUhmF,EAAS6rB,EAAM+wB,GACnC,OAAOnlD,KAAKguF,aAAczlF,EAAS6rB,EAAM+wB,GAAO,IAGjD6oC,aAAc,SAAUzlF,EAAS6rB,EAAM+wB,EAAOz8C,GAC7CA,EAAuB,kBAARA,EAAsBA,EAAMy8C,EAC3C,IAAIt+C,EAA6B,iBAAZ0B,GAAoC,OAAZA,EAC5CzI,EAAU,CACTqlD,MAAOt+C,EAAQutB,EAAO+wB,EACtB/wB,KAAMvtB,EAAQ0B,EAAU6rB,EACxB7rB,QAAS1B,EAAQ7G,KAAKuI,QAAUA,EAChCG,IAAKA,GAGP,OADA5I,EAAQyI,QAAQk9E,YAAazlF,KAAK+tF,SAAUjuF,GAAW4I,GAChD1I,MAGR+sF,IAAK,SAAUyB,EAAuBjmF,EAAS4nE,GAC9C,IAAIse,EACAv8B,EAAWlyD,KAGuB,kBAA1BwuF,IACXre,EAAW5nE,EACXA,EAAUimF,EACVA,GAAwB,GAInBre,GAKL5nE,EAAUkmF,EAAkB3wF,EAAGyK,GAC/BvI,KAAK2sF,SAAW3sF,KAAK2sF,SAASjkF,IAAKH,KALnC4nE,EAAW5nE,EACXA,EAAUvI,KAAKuI,QACfkmF,EAAkBzuF,KAAKgrF,UAMxBltF,EAAE6D,KAAMwuE,GAAU,SAAUxxE,EAAO4xD,GAClC,SAASm+B,IAKR,GAAMF,IAC4B,IAA9Bt8B,EAASpyD,QAAQ0sF,WACnB1uF,EAAGkC,MAAO69B,SAAU,qBAGtB,OAA4B,iBAAZ0yB,EAAuB2B,EAAU3B,GAAYA,GAC3D5sD,MAAOuuD,EAAUtuD,WAII,iBAAZ2sD,IACXm+B,EAAaC,KAAOp+B,EAAQo+B,KAC3Bp+B,EAAQo+B,MAAQD,EAAaC,MAAQ7wF,EAAE6wF,QAGzC,IAAIv1D,EAAQz6B,EAAMy6B,MAAO,sBACrB9C,EAAY8C,EAAO,GAAM84B,EAASw6B,eAClCjqD,EAAWrJ,EAAO,GAEjBqJ,EACJgsD,EAAgBxnF,GAAIqvB,EAAWmM,EAAUisD,GAEzCnmF,EAAQtB,GAAIqvB,EAAWo4D,OAK1BE,KAAM,SAAUrmF,EAAS+tB,GACxBA,GAAcA,GAAa,IAAKn4B,MAAO,KAAMM,KAAMuB,KAAK0sF,eAAiB,KACxE1sF,KAAK0sF,eACNnkF,EAAQvB,IAAKsvB,GAAYtvB,IAAKsvB,GAG9Bt2B,KAAK2sF,SAAW7uF,EAAGkC,KAAK2sF,SAAS0B,IAAK9lF,GAAUzG,OAChD9B,KAAK6sF,UAAY/uF,EAAGkC,KAAK6sF,UAAUwB,IAAK9lF,GAAUzG,OAClD9B,KAAK4sF,UAAY9uF,EAAGkC,KAAK4sF,UAAUyB,IAAK9lF,GAAUzG,QAGnD+sF,OAAQ,SAAUt+B,EAASxyB,GAK1B,IAAIm0B,EAAWlyD,KACf,OAAO8b,YALP,WACC,OAA4B,iBAAZy0C,EAAuB2B,EAAU3B,GAAYA,GAC3D5sD,MAAOuuD,EAAUtuD,aAGam6B,GAAS,IAG3C+wD,WAAY,SAAUvmF,GACrBvI,KAAK4sF,UAAY5sF,KAAK4sF,UAAUlkF,IAAKH,GACrCvI,KAAK+sF,IAAKxkF,EAAS,CAClBwmF,WAAY,SAAUpwF,GACrBqB,KAAKuuF,UAAWzwF,EAAGa,EAAM2I,eAAiB,KAAM,mBAEjD62B,WAAY,SAAUx/B,GACrBqB,KAAKutF,aAAczvF,EAAGa,EAAM2I,eAAiB,KAAM,sBAKtD0nF,WAAY,SAAUzmF,GACrBvI,KAAK6sF,UAAY7sF,KAAK6sF,UAAUnkF,IAAKH,GACrCvI,KAAK+sF,IAAKxkF,EAAS,CAClB0mF,QAAS,SAAUtwF,GAClBqB,KAAKuuF,UAAWzwF,EAAGa,EAAM2I,eAAiB,KAAM,mBAEjD4nF,SAAU,SAAUvwF,GACnBqB,KAAKutF,aAAczvF,EAAGa,EAAM2I,eAAiB,KAAM,sBAKtD6lF,SAAU,SAAU1tF,EAAMd,EAAOwC,GAChC,IAAI+G,EAAMw7E,EACN7sD,EAAW72B,KAAKF,QAASL,GAc7B,GAZA0B,EAAOA,GAAQ,IACfxC,EAAQb,EAAEqxF,MAAOxwF,IACXc,MAASA,IAASO,KAAK4rF,kBAC5BnsF,EACAO,KAAK4rF,kBAAoBnsF,GAAOk7C,cAIjCh8C,EAAMyC,OAASpB,KAAKuI,QAAS,GAG7Bm7E,EAAO/kF,EAAMU,cAEZ,IAAM6I,KAAQw7E,EACLx7E,KAAQvJ,IACfA,EAAOuJ,GAASw7E,EAAMx7E,IAMzB,OADAlI,KAAKuI,QAAQkH,QAAS9Q,EAAOwC,KACnBrD,EAAEk8E,WAAYnjD,KAC2C,IAAlEA,EAASlzB,MAAO3D,KAAKuI,QAAS,GAAK,CAAE5J,GAAQopB,OAAQ5mB,KACrDxC,EAAMywF,wBAITtxF,EAAE6D,KAAM,CAAEsjB,KAAM,SAAUpW,KAAM,YAAa,SAAUmiB,EAAQq+D,GAC9DvxF,EAAEutF,OAAO3nF,UAAW,IAAMstB,GAAW,SAAUzoB,EAASzI,EAAS+2B,GAKhE,IAAIy4D,EAJoB,iBAAZxvF,IACXA,EAAU,CAAE6+E,OAAQ7+E,IAIrB,IAAIyvF,EAAczvF,GAEL,IAAZA,GAAuC,iBAAZA,EAC1BuvF,EACAvvF,EAAQ6+E,QAAU0Q,EAHnBr+D,EAMuB,iBADxBlxB,EAAUA,GAAW,MAEpBA,EAAU,CAAEm9E,SAAUn9E,IAGvBwvF,GAAcxxF,EAAE0xF,cAAe1vF,GAC/BA,EAAQ4hC,SAAW7K,EAEd/2B,EAAQi+B,OACZx1B,EAAQw1B,MAAOj+B,EAAQi+B,OAGnBuxD,GAAcxxF,EAAE4gF,SAAW5gF,EAAE4gF,QAAQC,OAAQ4Q,GACjDhnF,EAASyoB,GAAUlxB,GACRyvF,IAAev+D,GAAUzoB,EAASgnF,GAC7ChnF,EAASgnF,GAAczvF,EAAQm9E,SAAUn9E,EAAQ8kF,OAAQ/tD,GAEzDtuB,EAAQq+C,OAAO,SAAUjwC,GACxB7Y,EAAGkC,MAAQgxB,KACN6F,GACJA,EAASmT,KAAMzhC,EAAS,IAEzBoO,WAMG7Y,EAAEktF,SAvsBmC,qDCnB5C,UAkBE,EAAQ,CACP,QACA,QACA,QACA,cACS,0BAAP,EAMF,SAAUltF,GAEb,IAAI2xF,GAAe,EAKnB,OAJA3xF,EAAGkF,UAAWiE,GAAI,WAAW,WAC5BwoF,GAAe,KAGT3xF,EAAEktF,OAAQ,WAAY,CAC5Bv5D,QAAS,SACT3xB,QAAS,CACR4vF,OAAQ,0CACRhtF,SAAU,EACVq7B,MAAO,GAER2/C,WAAY,WACX,IAAIzyC,EAAOjrC,KAEXA,KAAKuI,QACHtB,GAAI,aAAejH,KAAK6rF,YAAY,SAAUltF,GAC9C,OAAOssC,EAAK0kD,WAAYhxF,MAExBsI,GAAI,SAAWjH,KAAK6rF,YAAY,SAAUltF,GAC1C,IAAK,IAASb,EAAEqD,KAAMxC,EAAMyC,OAAQ6pC,EAAK4gD,WAAa,sBAGrD,OAFA/tF,EAAEy/E,WAAY5+E,EAAMyC,OAAQ6pC,EAAK4gD,WAAa,sBAC9CltF,EAAMiE,4BACC,KAIV5C,KAAK8qE,SAAU,GAKhB6S,cAAe,WACd39E,KAAKuI,QAAQvB,IAAK,IAAMhH,KAAK6rF,YACxB7rF,KAAK4vF,oBACT5vF,KAAKgD,SACHgE,IAAK,aAAehH,KAAK6rF,WAAY7rF,KAAK4vF,oBAC1C5oF,IAAK,WAAahH,KAAK6rF,WAAY7rF,KAAK6vF,mBAI5CF,WAAY,SAAUhxF,GAGrB,IAAK8wF,EAAL,CAIAzvF,KAAK8vF,aAAc,EAGjB9vF,KAAK+vF,eAAiB/vF,KAAKgwF,SAAUrxF,GAEvCqB,KAAKiwF,gBAAkBtxF,EAEvB,IAAIssC,EAAOjrC,KACVkwF,EAA8B,IAAhBvxF,EAAMuC,MAIpBivF,IAA8C,iBAAxBnwF,KAAKF,QAAQ4vF,SAAuB/wF,EAAMyC,OAAOsmF,WACtE5pF,EAAGa,EAAMyC,QAAS8oB,QAASlqB,KAAKF,QAAQ4vF,QAASnxF,OACnD,QAAM2xF,IAAaC,GAAenwF,KAAK69E,cAAel/E,KAItDqB,KAAKowF,eAAiBpwF,KAAKF,QAAQi+B,MAC7B/9B,KAAKowF,gBACVpwF,KAAKqwF,iBAAmBv0E,YAAY,WACnCmvB,EAAKmlD,eAAgB,IACnBpwF,KAAKF,QAAQi+B,QAGZ/9B,KAAKswF,kBAAmB3xF,IAAWqB,KAAKuwF,eAAgB5xF,KAC5DqB,KAAK+vF,eAAgD,IAA9B/vF,KAAKwwF,YAAa7xF,IACnCqB,KAAK+vF,gBACVpxF,EAAM0B,iBACC,KAKJ,IAASvC,EAAEqD,KAAMxC,EAAMyC,OAAQpB,KAAK6rF,WAAa,uBACrD/tF,EAAEy/E,WAAY5+E,EAAMyC,OAAQpB,KAAK6rF,WAAa,sBAI/C7rF,KAAK4vF,mBAAqB,SAAUjxF,GACnC,OAAOssC,EAAKwlD,WAAY9xF,IAEzBqB,KAAK6vF,iBAAmB,SAAUlxF,GACjC,OAAOssC,EAAK+kD,SAAUrxF,IAGvBqB,KAAKgD,SACHiE,GAAI,aAAejH,KAAK6rF,WAAY7rF,KAAK4vF,oBACzC3oF,GAAI,WAAajH,KAAK6rF,WAAY7rF,KAAK6vF,kBAEzClxF,EAAM0B,iBAENovF,GAAe,EACR,OAGRgB,WAAY,SAAU9xF,GAMrB,GAAKqB,KAAK8vF,YAAc,CAGvB,GAAKhyF,EAAE+L,GAAG6/E,MAAS1mF,SAAS0tF,cAAgB1tF,SAAS0tF,aAAe,KACjE/xF,EAAMuqE,OACR,OAAOlpE,KAAKgwF,SAAUrxF,GAGhB,IAAMA,EAAMuC,MAKlB,GAAKvC,EAAMU,cAAcm9E,QAAU79E,EAAMU,cAAc4Z,SACrDta,EAAMU,cAAco9E,SAAW99E,EAAMU,cAAck9E,SACpDv8E,KAAK2wF,oBAAqB,OACpB,IAAM3wF,KAAK2wF,mBACjB,OAAO3wF,KAAKgwF,SAAUrxF,GASzB,OAJKA,EAAMuC,OAASvC,EAAMuqE,UACzBlpE,KAAK8vF,aAAc,GAGf9vF,KAAK+vF,eACT/vF,KAAK4wF,WAAYjyF,GACVA,EAAM0B,mBAGTL,KAAKswF,kBAAmB3xF,IAAWqB,KAAKuwF,eAAgB5xF,KAC5DqB,KAAK+vF,eACkD,IAApD/vF,KAAKwwF,YAAaxwF,KAAKiwF,gBAAiBtxF,GACzCqB,KAAK+vF,cAAgB/vF,KAAK4wF,WAAYjyF,GAAUqB,KAAKgwF,SAAUrxF,KAG1DqB,KAAK+vF,gBAGdC,SAAU,SAAUrxF,GACnBqB,KAAKgD,SACHgE,IAAK,aAAehH,KAAK6rF,WAAY7rF,KAAK4vF,oBAC1C5oF,IAAK,WAAahH,KAAK6rF,WAAY7rF,KAAK6vF,kBAErC7vF,KAAK+vF,gBACT/vF,KAAK+vF,eAAgB,EAEhBpxF,EAAMyC,SAAWpB,KAAKiwF,gBAAgB7uF,QAC1CtD,EAAEqD,KAAMxC,EAAMyC,OAAQpB,KAAK6rF,WAAa,sBAAsB,GAG/D7rF,KAAK6wF,WAAYlyF,IAGbqB,KAAKqwF,mBACT7pD,aAAcxmC,KAAKqwF,yBACZrwF,KAAKqwF,kBAGbrwF,KAAK2wF,oBAAqB,EAC1BlB,GAAe,EACf9wF,EAAM0B,kBAGPiwF,kBAAmB,SAAU3xF,GAC5B,OAAS6D,KAAKG,IACZH,KAAKC,IAAKzC,KAAKiwF,gBAAgB9wF,MAAQR,EAAMQ,OAC7CqD,KAAKC,IAAKzC,KAAKiwF,gBAAgB7wF,MAAQT,EAAMS,SACzCY,KAAKF,QAAQ4C,UAIpB6tF,eAAgB,WACf,OAAOvwF,KAAKowF,eAIbI,YAAa,aACbI,WAAY,aACZC,WAAY,aACZhT,cAAe,WAA0B,OAAO,OAvMrC,qDCvBZ,UAsBE,EAAQ,CACP,QACA,QACA,QACA,QACA,cACS,0BAAP,EAMF,SAAU//E,GAEb,OAAOA,EAAEktF,OAAQ,YAAaltF,EAAE+L,GAAG+hE,MAAO,CACzCn6C,QAAS,SACTm6D,kBAAmB,QAEnB9rF,QAAS,CACRyJ,SAAS,EACTgjF,QAAS,CACR,YAAa,gBACb,mBAAoB,gBAIpB,kBAAmB,kCAEpB7pF,SAAU,EACVC,IAAK,IACL6G,IAAK,EACLsnF,YAAa,aACblnF,OAAO,EACP4/B,KAAM,EACN9/B,MAAO,EACPupB,OAAQ,KAGR89D,OAAQ,KACRC,MAAO,KACPj8E,MAAO,KACP1Q,KAAM,MAKP4sF,SAAU,EAEVhE,QAAS,WACRjtF,KAAKkxF,aAAc,EACnBlxF,KAAKmxF,eAAgB,EACrBnxF,KAAKoxF,aAAc,EACnBpxF,KAAKqxF,aAAe,KACpBrxF,KAAKsxF,qBACLtxF,KAAK09E,aACL19E,KAAKuxF,mBAELvxF,KAAKuuF,UAAW,uBAAyBvuF,KAAK8wF,YAC7C,+BAED9wF,KAAKwxF,WAELxxF,KAAKoxF,aAAc,GAGpBI,SAAU,WACTxxF,KAAKyxF,eACLzxF,KAAK0xF,iBACL1xF,KAAK2xF,eACL3xF,KAAK4xF,iBAGNF,eAAgB,WACf,IAAIpzF,EAAGuzF,EACN/xF,EAAUE,KAAKF,QACfgyF,EAAkB9xF,KAAKuI,QAAQzF,KAAM,qBAErCivF,EAAU,GASX,IAPAF,EAAgB/xF,EAAQmzB,QAAUnzB,EAAQmzB,OAAO10B,QAAY,EAExDuzF,EAAgBvzF,OAASszF,IAC7BC,EAAgBpiF,MAAOmiF,GAAc/qF,SACrCgrF,EAAkBA,EAAgBpiF,MAAO,EAAGmiF,IAGvCvzF,EAAIwzF,EAAgBvzF,OAAQD,EAAIuzF,EAAavzF,IAClDyzF,EAAQvzF,KAXC,8BAcVwB,KAAK+xF,QAAUD,EAAgBppF,IAAK5K,EAAGi0F,EAAQtzF,KAAM,KAAOyQ,SAAUlP,KAAKuI,UAE3EvI,KAAKuuF,UAAWvuF,KAAK+xF,QAAS,mBAAoB,oBAElD/xF,KAAKgyF,OAAShyF,KAAK+xF,QAAQtW,GAAI,GAE/Bz7E,KAAK+xF,QAAQpwF,MAAM,SAAUrD,GAC5BR,EAAGkC,MACDmB,KAAM,yBAA0B7C,GAChCoJ,KAAM,WAAY,OAItB+pF,aAAc,WACb,IAAI3xF,EAAUE,KAAKF,QAEdA,EAAQ8J,QACW,IAAlB9J,EAAQ8J,QACN9J,EAAQmzB,OAEFnzB,EAAQmzB,OAAO10B,QAAoC,IAA1BuB,EAAQmzB,OAAO10B,OACnDuB,EAAQmzB,OAAS,CAAEnzB,EAAQmzB,OAAQ,GAAKnzB,EAAQmzB,OAAQ,IAC7Cn1B,EAAE4uC,QAAS5sC,EAAQmzB,UAC9BnzB,EAAQmzB,OAASnzB,EAAQmzB,OAAOvjB,MAAO,IAJvC5P,EAAQmzB,OAAS,CAAEjzB,KAAKiyF,YAAajyF,KAAKiyF,cAQtCjyF,KAAK4J,OAAU5J,KAAK4J,MAAMrL,QAM/ByB,KAAKutF,aAAcvtF,KAAK4J,MAAO,2CAG/B5J,KAAK4J,MAAM+H,IAAK,CACf,KAAQ,GACR,OAAU,OAVX3R,KAAK4J,MAAQ9L,EAAG,SACdoR,SAAUlP,KAAKuI,SAEjBvI,KAAKuuF,UAAWvuF,KAAK4J,MAAO,oBAUN,QAAlB9J,EAAQ8J,OAAqC,QAAlB9J,EAAQ8J,OACvC5J,KAAKuuF,UAAWvuF,KAAK4J,MAAO,mBAAqB9J,EAAQ8J,SAGrD5J,KAAK4J,OACT5J,KAAK4J,MAAM9C,SAEZ9G,KAAK4J,MAAQ,OAIf+nF,aAAc,WACb3xF,KAAK4uF,KAAM5uF,KAAK+xF,SAChB/xF,KAAK+sF,IAAK/sF,KAAK+xF,QAAS/xF,KAAKkyF,eAC7BlyF,KAAK8uF,WAAY9uF,KAAK+xF,SACtB/xF,KAAKgvF,WAAYhvF,KAAK+xF,UAGvBzE,SAAU,WACTttF,KAAK+xF,QAAQjrF,SACR9G,KAAK4J,OACT5J,KAAK4J,MAAM9C,SAGZ9G,KAAK29E,iBAGNE,cAAe,SAAUl/E,GACxB,IAAI8sB,EAAU0mE,EAAWzvF,EAAU0vF,EAAe5nF,EAAgB4a,EAAQitE,EACzEpnD,EAAOjrC,KACP6kF,EAAI7kF,KAAKF,QAEV,OAAK+kF,EAAE2H,WAIPxsF,KAAKsyF,YAAc,CAClBxgF,MAAO9R,KAAKuI,QAAQsyE,aACpB9oE,OAAQ/R,KAAKuI,QAAQqJ,eAEtB5R,KAAKuyF,cAAgBvyF,KAAKuI,QAAQ6c,SAElCqG,EAAW,CAAE7sB,EAAGD,EAAMQ,MAAON,EAAGF,EAAMS,OACtC+yF,EAAYnyF,KAAKwyF,oBAAqB/mE,GACtC/oB,EAAW1C,KAAKyyF,YAAczyF,KAAKiyF,YAAc,EACjDjyF,KAAK+xF,QAAQpwF,MAAM,SAAUrD,GAC5B,IAAIo0F,EAAelwF,KAAKC,IAAK0vF,EAAYlnD,EAAKhY,OAAQ30B,KAC/CoE,EAAWgwF,GACfhwF,IAAagwF,IACZp0F,IAAM2sC,EAAK0nD,mBAAqB1nD,EAAKhY,OAAQ30B,KAAQumF,EAAEr7E,QAC1D9G,EAAWgwF,EACXN,EAAgBt0F,EAAGkC,MACnBwK,EAAQlM,OAKO,IADP0B,KAAK4yF,OAAQj0F,EAAO6L,KAI9BxK,KAAKmxF,eAAgB,EAErBnxF,KAAKqxF,aAAe7mF,EAEpBxK,KAAKuuF,UAAW6D,EAAe,KAAM,mBACrCA,EAAc3iF,QAAS,SAEvB2V,EAASgtE,EAAchtE,SACvBitE,GAAmBv0F,EAAGa,EAAMyC,QAAS+O,UAAUs0E,UAAUthC,GAAI,qBAC7DnjD,KAAK6yF,aAAeR,EAAkB,CAAE3yF,KAAM,EAAGC,IAAK,GAAM,CAC3DD,KAAMf,EAAMQ,MAAQimB,EAAO1lB,KAAS0yF,EAActgF,QAAU,EAC5DnS,IAAKhB,EAAMS,MAAQgmB,EAAOzlB,IACvByyF,EAAcrgF,SAAW,GACzBF,SAAUugF,EAAczgF,IAAK,kBAAoB,KAAQ,IACzDE,SAAUugF,EAAczgF,IAAK,qBAAuB,KAAQ,IAC5DE,SAAUugF,EAAczgF,IAAK,aAAe,KAAQ,IAGlD3R,KAAK+xF,QAAQl0D,SAAU,mBAC5B79B,KAAK8yF,OAAQn0F,EAAO6L,EAAO2nF,GAE5BnyF,KAAKoxF,aAAc,GACZ,KAGRZ,YAAa,WACZ,OAAO,GAGRI,WAAY,SAAUjyF,GACrB,IAAI8sB,EAAW,CAAE7sB,EAAGD,EAAMQ,MAAON,EAAGF,EAAMS,OACzC+yF,EAAYnyF,KAAKwyF,oBAAqB/mE,GAIvC,OAFAzrB,KAAK8yF,OAAQn0F,EAAOqB,KAAKqxF,aAAcc,IAEhC,GAGRtB,WAAY,SAAUlyF,GAWrB,OAVAqB,KAAKutF,aAAcvtF,KAAK+xF,QAAS,KAAM,mBACvC/xF,KAAKmxF,eAAgB,EAErBnxF,KAAK+yF,MAAOp0F,EAAOqB,KAAKqxF,cACxBrxF,KAAKgzF,QAASr0F,EAAOqB,KAAKqxF,cAE1BrxF,KAAKqxF,aAAe,KACpBrxF,KAAK6yF,aAAe,KACpB7yF,KAAKoxF,aAAc,GAEZ,GAGRE,mBAAoB,WACnBtxF,KAAK8wF,YAA6C,aAA7B9wF,KAAKF,QAAQgxF,YAA+B,WAAa,cAG/E0B,oBAAqB,SAAU/mE,GAC9B,IAAIwnE,EACHC,EACAC,EACAC,EACAC,EA0BD,MAxB0B,eAArBrzF,KAAK8wF,aACTmC,EAAajzF,KAAKsyF,YAAYxgF,MAC9BohF,EAAaznE,EAAS7sB,EAAIoB,KAAKuyF,cAAc7yF,MAC1CM,KAAK6yF,aAAe7yF,KAAK6yF,aAAanzF,KAAO,KAEhDuzF,EAAajzF,KAAKsyF,YAAYvgF,OAC9BmhF,EAAaznE,EAAS5sB,EAAImB,KAAKuyF,cAAc5yF,KAC1CK,KAAK6yF,aAAe7yF,KAAK6yF,aAAalzF,IAAM,KAGhDwzF,EAAiBD,EAAaD,GACV,IACnBE,EAAe,GAEXA,EAAe,IACnBA,EAAe,GAEU,aAArBnzF,KAAK8wF,cACTqC,EAAe,EAAIA,GAGpBC,EAAapzF,KAAKyyF,YAAczyF,KAAKiyF,YACrCoB,EAAarzF,KAAKiyF,YAAckB,EAAeC,EAExCpzF,KAAKszF,gBAAiBD,IAG9BE,QAAS,SAAU/oF,EAAOd,EAAOupB,GAChC,IAAIugE,EAAS,CACZxB,OAAQhyF,KAAK+xF,QAASvnF,GACtBipF,YAAajpF,EACbd,WAAiByB,IAAVzB,EAAsBA,EAAQ1J,KAAK0J,SAQ3C,OALK1J,KAAK0zF,uBACTF,EAAO9pF,WAAkByB,IAAVzB,EAAsBA,EAAQ1J,KAAKizB,OAAQzoB,GAC1DgpF,EAAOvgE,OAASA,GAAUjzB,KAAKizB,UAGzBugE,GAGRE,mBAAoB,WACnB,OAAO1zF,KAAKF,QAAQmzB,QAAUjzB,KAAKF,QAAQmzB,OAAO10B,QAGnDq0F,OAAQ,SAAUj0F,EAAO6L,GACxB,OAAOxK,KAAKmtF,SAAU,QAASxuF,EAAOqB,KAAKuzF,QAAS/oF,KAGrDsoF,OAAQ,SAAUn0F,EAAO6L,EAAO4W,GAC/B,IAAauyE,EACZ5uC,EAAe/kD,KAAK0J,QACpBkqF,EAAY5zF,KAAKizB,SAEbjzB,KAAK0zF,uBACTC,EAAW3zF,KAAKizB,OAAQzoB,EAAQ,EAAI,GACpCu6C,EAAe/kD,KAAKizB,OAAQzoB,GAEQ,IAA/BxK,KAAKF,QAAQmzB,OAAO10B,SAAuC,IAAvByB,KAAKF,QAAQ8J,QACrDwX,EAAoB,IAAV5W,EAAchI,KAAKgH,IAAKmqF,EAAUvyE,GAAW5e,KAAKG,IAAKgxF,EAAUvyE,IAG5EwyE,EAAWppF,GAAU4W,GAGjBA,IAAW2jC,IAOC,IAHP/kD,KAAKmtF,SAAU,QAASxuF,EAAOqB,KAAKuzF,QAAS/oF,EAAO4W,EAAQwyE,MAOjE5zF,KAAK0zF,qBACT1zF,KAAKizB,OAAQzoB,EAAO4W,GAEpBphB,KAAK0J,MAAO0X,KAId2xE,MAAO,SAAUp0F,EAAO6L,GACvBxK,KAAKmtF,SAAU,OAAQxuF,EAAOqB,KAAKuzF,QAAS/oF,KAG7CwoF,QAAS,SAAUr0F,EAAO6L,GACnBxK,KAAKkxF,aAAgBlxF,KAAKmxF,gBAG/BnxF,KAAK2yF,kBAAoBnoF,EACzBxK,KAAKmtF,SAAU,SAAUxuF,EAAOqB,KAAKuzF,QAAS/oF,MAIhDd,MAAO,SAAUmqF,GAChB,OAAKjwF,UAAUrF,QACdyB,KAAKF,QAAQ4J,MAAQ1J,KAAKszF,gBAAiBO,GAC3C7zF,KAAK4xF,qBACL5xF,KAAKgzF,QAAS,KAAM,IAIdhzF,KAAK8zF,UAGb7gE,OAAQ,SAAUzoB,EAAOqpF,GACxB,IAAIE,EACHH,EACAt1F,EAED,GAAKsF,UAAUrF,OAAS,EAIvB,OAHAyB,KAAKF,QAAQmzB,OAAQzoB,GAAUxK,KAAKszF,gBAAiBO,GACrD7zF,KAAK4xF,qBACL5xF,KAAKgzF,QAAS,KAAMxoF,GAIrB,IAAK5G,UAAUrF,OAiBd,OAAOyB,KAAKg0F,UAhBZ,IAAKl2F,EAAE4uC,QAAS9oC,UAAW,IAS1B,OAAK5D,KAAK0zF,qBACF1zF,KAAKg0F,QAASxpF,GAEdxK,KAAK0J,QATb,IAFAqqF,EAAO/zF,KAAKF,QAAQmzB,OACpB2gE,EAAYhwF,UAAW,GACjBtF,EAAI,EAAGA,EAAIy1F,EAAKx1F,OAAQD,GAAK,EAClCy1F,EAAMz1F,GAAM0B,KAAKszF,gBAAiBM,EAAWt1F,IAC7C0B,KAAKgzF,QAAS,KAAM10F,GAErB0B,KAAK4xF,iBAaRjE,WAAY,SAAUnlD,EAAK9+B,GAC1B,IAAIpL,EACH21F,EAAa,EAkBd,OAhBa,UAARzrD,IAA0C,IAAvBxoC,KAAKF,QAAQ8J,QACrB,QAAVF,GACJ1J,KAAKF,QAAQ4J,MAAQ1J,KAAKg0F,QAAS,GACnCh0F,KAAKF,QAAQmzB,OAAS,MACD,QAAVvpB,IACX1J,KAAKF,QAAQ4J,MAAQ1J,KAAKg0F,QAASh0F,KAAKF,QAAQmzB,OAAO10B,OAAS,GAChEyB,KAAKF,QAAQmzB,OAAS,OAInBn1B,EAAE4uC,QAAS1sC,KAAKF,QAAQmzB,UAC5BghE,EAAaj0F,KAAKF,QAAQmzB,OAAO10B,QAGlCyB,KAAKwjE,OAAQh7B,EAAK9+B,GAET8+B,GACR,IAAK,cACJxoC,KAAKsxF,qBACLtxF,KAAKutF,aAAc,2CACjBgB,UAAW,aAAevuF,KAAK8wF,aACjC9wF,KAAK4xF,gBACA5xF,KAAKF,QAAQ8J,OACjB5J,KAAKk0F,cAAexqF,GAIrB1J,KAAK+xF,QAAQpgF,IAAe,eAAVjI,EAAyB,SAAW,OAAQ,IAC9D,MACD,IAAK,QACJ1J,KAAKoxF,aAAc,EACnBpxF,KAAK4xF,gBACL5xF,KAAKgzF,QAAS,KAAM,GACpBhzF,KAAKoxF,aAAc,EACnB,MACD,IAAK,SAKJ,IAJApxF,KAAKoxF,aAAc,EACnBpxF,KAAK4xF,gBAGCtzF,EAAI21F,EAAa,EAAG31F,GAAK,EAAGA,IACjC0B,KAAKgzF,QAAS,KAAM10F,GAErB0B,KAAKoxF,aAAc,EACnB,MACD,IAAK,OACL,IAAK,MACL,IAAK,MACJpxF,KAAKoxF,aAAc,EACnBpxF,KAAKuxF,mBACLvxF,KAAK4xF,gBACL5xF,KAAKoxF,aAAc,EACnB,MACD,IAAK,QACJpxF,KAAKoxF,aAAc,EACnBpxF,KAAKwxF,WACLxxF,KAAKoxF,aAAc,IAKtBlE,mBAAoB,SAAUxjF,GAC7B1J,KAAKwjE,OAAQ95D,GAEb1J,KAAKguF,aAAc,KAAM,sBAAuBtkF,IAKjDoqF,OAAQ,WACP,IAAIjyF,EAAM7B,KAAKF,QAAQ4J,MAGvB,OAFM1J,KAAKszF,gBAAiBzxF,IAQ7BmyF,QAAS,SAAUxpF,GAClB,IAAI3I,EACHkyF,EACAz1F,EAED,GAAKsF,UAAUrF,OAId,OAHAsD,EAAM7B,KAAKF,QAAQmzB,OAAQzoB,GACrBxK,KAAKszF,gBAAiBzxF,GAGtB,GAAK7B,KAAK0zF,qBAAuB,CAKvC,IADAK,EAAO/zF,KAAKF,QAAQmzB,OAAOvjB,QACrBpR,EAAI,EAAGA,EAAIy1F,EAAKx1F,OAAQD,GAAK,EAClCy1F,EAAMz1F,GAAM0B,KAAKszF,gBAAiBS,EAAMz1F,IAGzC,OAAOy1F,EAEP,MAAO,IAKTT,gBAAiB,SAAUzxF,GAC1B,GAAKA,GAAO7B,KAAKiyF,YAChB,OAAOjyF,KAAKiyF,YAEb,GAAKpwF,GAAO7B,KAAKyyF,YAChB,OAAOzyF,KAAKyyF,YAEb,IAAIjpD,EAASxpC,KAAKF,QAAQ0pC,KAAO,EAAMxpC,KAAKF,QAAQ0pC,KAAO,EAC1D2qD,GAAetyF,EAAM7B,KAAKiyF,aAAgBzoD,EAC1C4qD,EAAavyF,EAAMsyF,EAQpB,OAN8B,EAAzB3xF,KAAKC,IAAK0xF,IAAoB3qD,IAClC4qD,GAAgBD,EAAa,EAAM3qD,GAAUA,GAKvCwxC,WAAYoZ,EAAWxkF,QAAS,KAGxC2hF,iBAAkB,WACjB,IAAI5uF,EAAM3C,KAAKF,QAAQ6C,IACtB6G,EAAMxJ,KAAKiyF,YACXzoD,EAAOxpC,KAAKF,QAAQ0pC,MAErB7mC,EADYH,KAAKklB,OAAS/kB,EAAM6G,GAAQggC,GAASA,EAChChgC,GACNxJ,KAAKF,QAAQ6C,MAGvBA,GAAO6mC,GAERxpC,KAAK2C,IAAMq4E,WAAYr4E,EAAIiN,QAAS5P,KAAKq0F,gBAG1CA,WAAY,WACX,IAAIC,EAAYt0F,KAAKu0F,aAAcv0F,KAAKF,QAAQ0pC,MAIhD,OAH0B,OAArBxpC,KAAKF,QAAQ0J,MACjB8qF,EAAY9xF,KAAKG,IAAK2xF,EAAWt0F,KAAKu0F,aAAcv0F,KAAKF,QAAQ0J,OAE3D8qF,GAGRC,aAAc,SAAU5nE,GACvB,IAAIrtB,EAAMqtB,EAAI2E,WACbkjE,EAAUl1F,EAAIsH,QAAS,KACxB,OAAoB,IAAb4tF,EAAiB,EAAIl1F,EAAIf,OAASi2F,EAAU,GAGpDvC,UAAW,WACV,OAAOjyF,KAAKF,QAAQ0J,KAGrBipF,UAAW,WACV,OAAOzyF,KAAK2C,KAGbuxF,cAAe,SAAUpD,GACH,aAAhBA,GACJ9wF,KAAK4J,MAAM+H,IAAK,CAAE,MAAS,GAAI,KAAQ,KAEnB,eAAhBm/E,GACJ9wF,KAAK4J,MAAM+H,IAAK,CAAE,OAAU,GAAI,OAAU,MAI5CigF,cAAe,WACd,IAAI6C,EAAgBC,EAAYhrF,EAAOirF,EAAUC,EAChDC,EAAS70F,KAAKF,QAAQ8J,MACtBi7E,EAAI7kF,KAAKF,QACTmrC,EAAOjrC,KACPuJ,GAAavJ,KAAKoxF,aAAgBvM,EAAEt7E,QACpCurF,EAAO,GAEH90F,KAAK0zF,qBACT1zF,KAAK+xF,QAAQpwF,MAAM,SAAUrD,GAC5Bo2F,GAAezpD,EAAKhY,OAAQ30B,GAAM2sC,EAAKgnD,cAAkBhnD,EAAKwnD,YAC7DxnD,EAAKgnD,aAAgB,IACtB6C,EAA2B,eAArB7pD,EAAK6lD,YAA+B,OAAS,UAAa4D,EAAa,IAC7E52F,EAAGkC,MAAOqE,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAASurF,EAAMjQ,EAAEt7E,UACnC,IAAvB0hC,EAAKnrC,QAAQ8J,QACS,eAArBqhC,EAAK6lD,aACE,IAANxyF,GACJ2sC,EAAKrhC,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvD7J,KAAMg1F,EAAa,KACjB7P,EAAEt7E,SAEK,IAANjL,GACJ2sC,EAAKrhC,MAAOL,EAAU,UAAY,OAAS,CAC1CuI,MAAS4iF,EAAaD,EAAmB,KACvC,CACF7tC,OAAO,EACPq2B,SAAU4H,EAAEt7E,YAIH,IAANjL,GACJ2sC,EAAKrhC,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvD4hB,OAAQ,EAAiB,KACvB05D,EAAEt7E,SAEK,IAANjL,GACJ2sC,EAAKrhC,MAAOL,EAAU,UAAY,OAAS,CAC1CwI,OAAU2iF,EAAaD,EAAmB,KACxC,CACF7tC,OAAO,EACPq2B,SAAU4H,EAAEt7E,YAKhBkrF,EAAiBC,MAGlBhrF,EAAQ1J,KAAK0J,QACbirF,EAAW30F,KAAKiyF,YAChB2C,EAAW50F,KAAKyyF,YAChBiC,EAAeE,IAAaD,GACxBjrF,EAAQirF,IAAeC,EAAWD,GAAa,IACjD,EACFG,EAA2B,eAArB90F,KAAK8wF,YAA+B,OAAS,UAAa4D,EAAa,IAC7E10F,KAAKgyF,OAAO3tF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAASurF,EAAMjQ,EAAEt7E,SAEjD,QAAXsrF,GAAyC,eAArB70F,KAAK8wF,aAC7B9wF,KAAK4J,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvDuI,MAAO4iF,EAAa,KAClB7P,EAAEt7E,SAEU,QAAXsrF,GAAyC,eAArB70F,KAAK8wF,aAC7B9wF,KAAK4J,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvDuI,MAAS,IAAM4iF,EAAe,KAC5B7P,EAAEt7E,SAEU,QAAXsrF,GAAyC,aAArB70F,KAAK8wF,aAC7B9wF,KAAK4J,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvDwI,OAAQ2iF,EAAa,KACnB7P,EAAEt7E,SAEU,QAAXsrF,GAAyC,aAArB70F,KAAK8wF,aAC7B9wF,KAAK4J,MAAMvF,KAAM,EAAG,GAAKkF,EAAU,UAAY,OAAS,CACvDwI,OAAU,IAAM2iF,EAAe,KAC7B7P,EAAEt7E,WAKR2oF,cAAe,CACd76D,QAAS,SAAU14B,GAClB,IAAao2F,EAAQ3zE,EAAQooB,EAC5Bh/B,EAAQ1M,EAAGa,EAAMyC,QAASD,KAAM,0BAEjC,OAASxC,EAAM24B,SACd,KAAKx5B,EAAE+L,GAAGytB,QAAQ4yD,KAClB,KAAKpsF,EAAE+L,GAAGytB,QAAQyyD,IAClB,KAAKjsF,EAAE+L,GAAGytB,QAAQ+yD,QAClB,KAAKvsF,EAAE+L,GAAGytB,QAAQ8yD,UAClB,KAAKtsF,EAAE+L,GAAGytB,QAAQozD,GAClB,KAAK5sF,EAAE+L,GAAGytB,QAAQizD,MAClB,KAAKzsF,EAAE+L,GAAGytB,QAAQwyD,KAClB,KAAKhsF,EAAE+L,GAAGytB,QAAQ6yD,KAEjB,GADAxrF,EAAM0B,kBACAL,KAAKkxF,cACVlxF,KAAKkxF,aAAc,EACnBlxF,KAAKuuF,UAAWzwF,EAAGa,EAAMyC,QAAU,KAAM,oBAExB,IADPpB,KAAK4yF,OAAQj0F,EAAO6L,IAE7B,OAaJ,OAPAg/B,EAAOxpC,KAAKF,QAAQ0pC,KAEnBurD,EAAS3zE,EADLphB,KAAK0zF,qBACS1zF,KAAKizB,OAAQzoB,GAEbxK,KAAK0J,QAGf/K,EAAM24B,SACd,KAAKx5B,EAAE+L,GAAGytB,QAAQ4yD,KACjB9oE,EAASphB,KAAKiyF,YACd,MACD,KAAKn0F,EAAE+L,GAAGytB,QAAQyyD,IACjB3oE,EAASphB,KAAKyyF,YACd,MACD,KAAK30F,EAAE+L,GAAGytB,QAAQ+yD,QACjBjpE,EAASphB,KAAKszF,gBACbyB,GAAa/0F,KAAKyyF,YAAczyF,KAAKiyF,aAAgBjyF,KAAKixF,UAE3D,MACD,KAAKnzF,EAAE+L,GAAGytB,QAAQ8yD,UACjBhpE,EAASphB,KAAKszF,gBACbyB,GAAa/0F,KAAKyyF,YAAczyF,KAAKiyF,aAAgBjyF,KAAKixF,UAC3D,MACD,KAAKnzF,EAAE+L,GAAGytB,QAAQozD,GAClB,KAAK5sF,EAAE+L,GAAGytB,QAAQizD,MACjB,GAAKwK,IAAW/0F,KAAKyyF,YACpB,OAEDrxE,EAASphB,KAAKszF,gBAAiByB,EAASvrD,GACxC,MACD,KAAK1rC,EAAE+L,GAAGytB,QAAQwyD,KAClB,KAAKhsF,EAAE+L,GAAGytB,QAAQ6yD,KACjB,GAAK4K,IAAW/0F,KAAKiyF,YACpB,OAED7wE,EAASphB,KAAKszF,gBAAiByB,EAASvrD,GAI1CxpC,KAAK8yF,OAAQn0F,EAAO6L,EAAO4W,IAE5BkZ,MAAO,SAAU37B,GAChB,IAAI6L,EAAQ1M,EAAGa,EAAMyC,QAASD,KAAM,0BAE/BnB,KAAKkxF,cACTlxF,KAAKkxF,aAAc,EACnBlxF,KAAK+yF,MAAOp0F,EAAO6L,GACnBxK,KAAKgzF,QAASr0F,EAAO6L,GACrBxK,KAAKutF,aAAczvF,EAAGa,EAAMyC,QAAU,KAAM,0BA7sBpC,iDCrBZ,IAAI4zF,EAAW,SAAUptD,GACvB,aAEA,IAEIz8B,EAFA8pF,EAAKpxF,OAAOH,UACZk0C,EAASq9C,EAAGt9C,eAEZmD,EAA4B,mBAAX3J,OAAwBA,OAAS,GAClD+jD,EAAiBp6C,EAAQrR,UAAY,aACrC0rD,EAAsBr6C,EAAQs6C,eAAiB,kBAC/CC,EAAoBv6C,EAAQw6C,aAAe,gBAE/C,SAAS5O,EAAO7jB,EAAKr6B,EAAK9+B,GAOxB,OANA7F,OAAOC,eAAe++D,EAAKr6B,EAAK,CAC9B9+B,MAAOA,EACPulC,YAAY,EACZ1G,cAAc,EACd2G,UAAU,IAEL2zB,EAAIr6B,GAEb,IAEEk+C,EAAO,GAAI,IACX,MAAO3yE,GACP2yE,EAAS,SAAS7jB,EAAKr6B,EAAK9+B,GAC1B,OAAOm5D,EAAIr6B,GAAO9+B,GAItB,SAAS4nD,EAAKikC,EAASC,EAASp+D,EAAMq+D,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQ9xF,qBAAqBiyF,EAAYH,EAAUG,EAC/EC,EAAY/xF,OAAOqkC,OAAOwtD,EAAehyF,WACzC2iC,EAAU,IAAIwvD,EAAQJ,GAAe,IAMzC,OAFAG,EAAUE,QAuMZ,SAA0BP,EAASn+D,EAAMiP,GACvC,IAAIuT,EAAQm8C,EAEZ,OAAO,SAAgB/kE,EAAQopB,GAC7B,GAAIR,IAAUo8C,EACZ,MAAM,IAAI7+E,MAAM,gCAGlB,GAAIyiC,IAAUq8C,EAAmB,CAC/B,GAAe,UAAXjlE,EACF,MAAMopB,EAKR,OAAO87C,IAMT,IAHA7vD,EAAQrV,OAASA,EACjBqV,EAAQ+T,IAAMA,IAED,CACX,IAAI+7C,EAAW9vD,EAAQ8vD,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAU9vD,GACnD,GAAI+vD,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnB/vD,EAAQrV,OAGVqV,EAAQkwD,KAAOlwD,EAAQmwD,MAAQnwD,EAAQ+T,SAElC,GAAuB,UAAnB/T,EAAQrV,OAAoB,CACrC,GAAI4oB,IAAUm8C,EAEZ,MADAn8C,EAAQq8C,EACF5vD,EAAQ+T,IAGhB/T,EAAQowD,kBAAkBpwD,EAAQ+T,SAEN,WAAnB/T,EAAQrV,QACjBqV,EAAQqwD,OAAO,SAAUrwD,EAAQ+T,KAGnCR,EAAQo8C,EAER,IAAIW,EAASC,EAASrB,EAASn+D,EAAMiP,GACrC,GAAoB,WAAhBswD,EAAOl3F,KAAmB,CAO5B,GAJAm6C,EAAQvT,EAAQpI,KACZg4D,EACAY,EAEAF,EAAOv8C,MAAQk8C,EACjB,SAGF,MAAO,CACL5sF,MAAOitF,EAAOv8C,IACdnc,KAAMoI,EAAQpI,MAGS,UAAhB04D,EAAOl3F,OAChBm6C,EAAQq8C,EAGR5vD,EAAQrV,OAAS,QACjBqV,EAAQ+T,IAAMu8C,EAAOv8C,OA/QP08C,CAAiBvB,EAASn+D,EAAMiP,GAE7CuvD,EAcT,SAASgB,EAASh3F,EAAIijE,EAAKzoB,GACzB,IACE,MAAO,CAAE36C,KAAM,SAAU26C,IAAKx6C,EAAGoqC,KAAK64B,EAAKzoB,IAC3C,MAAOrmC,GACP,MAAO,CAAEtU,KAAM,QAAS26C,IAAKrmC,IAhBjC6zB,EAAQ0pB,KAAOA,EAoBf,IAAIykC,EAAyB,iBACzBc,EAAyB,iBACzBb,EAAoB,YACpBC,EAAoB,YAIpBK,EAAmB,GAMvB,SAASX,KACT,SAASoB,KACT,SAASC,KAIT,IAAIxoD,EAAoB,GACxBk4C,EAAOl4C,EAAmB0mD,GAAgB,WACxC,OAAOl1F,QAGT,IAAIi3F,EAAWpzF,OAAO0qC,eAClB2oD,EAA0BD,GAAYA,EAASA,EAAShkE,EAAO,MAC/DikE,GACAA,IAA4BjC,GAC5Br9C,EAAO5N,KAAKktD,EAAyBhC,KAGvC1mD,EAAoB0oD,GAGtB,IAAIC,EAAKH,EAA2BtzF,UAClCiyF,EAAUjyF,UAAYG,OAAOqkC,OAAOsG,GAYtC,SAAS4oD,EAAsB1zF,GAC7B,CAAC,OAAQ,QAAS,UAAU2E,SAAQ,SAAS2oB,GAC3C01D,EAAOhjF,EAAWstB,GAAQ,SAASopB,GACjC,OAAOp6C,KAAK81F,QAAQ9kE,EAAQopB,SAkClC,SAASi9C,EAAczB,EAAW0B,GAChC,SAASC,EAAOvmE,EAAQopB,EAAK7gC,EAASqkC,GACpC,IAAI+4C,EAASC,EAAShB,EAAU5kE,GAAS4kE,EAAWx7C,GACpD,GAAoB,UAAhBu8C,EAAOl3F,KAEJ,CACL,IAAIwf,EAAS03E,EAAOv8C,IAChB1wC,EAAQuV,EAAOvV,MACnB,OAAIA,GACiB,iBAAVA,GACPkuC,EAAO5N,KAAKtgC,EAAO,WACd4tF,EAAY/9E,QAAQ7P,EAAM8tF,SAASt7C,MAAK,SAASxyC,GACtD6tF,EAAO,OAAQ7tF,EAAO6P,EAASqkC,MAC9B,SAAS7pC,GACVwjF,EAAO,QAASxjF,EAAKwF,EAASqkC,MAI3B05C,EAAY/9E,QAAQ7P,GAAOwyC,MAAK,SAASu7C,GAI9Cx4E,EAAOvV,MAAQ+tF,EACfl+E,EAAQ0F,MACP,SAASzf,GAGV,OAAO+3F,EAAO,QAAS/3F,EAAO+Z,EAASqkC,MAvBzCA,EAAO+4C,EAAOv8C,KA4BlB,IAAIs9C,EAgCJ13F,KAAK81F,QA9BL,SAAiB9kE,EAAQopB,GACvB,SAASu9C,IACP,OAAO,IAAIL,GAAY,SAAS/9E,EAASqkC,GACvC25C,EAAOvmE,EAAQopB,EAAK7gC,EAASqkC,MAIjC,OAAO85C,EAaLA,EAAkBA,EAAgBx7C,KAChCy7C,EAGAA,GACEA,KAkHV,SAAStB,EAAoBF,EAAU9vD,GACrC,IAAIrV,EAASmlE,EAAS1sD,SAASpD,EAAQrV,QACvC,GAAIA,IAAW7lB,EAAW,CAKxB,GAFAk7B,EAAQ8vD,SAAW,KAEI,UAAnB9vD,EAAQrV,OAAoB,CAE9B,GAAImlE,EAAS1sD,SAAiB,SAG5BpD,EAAQrV,OAAS,SACjBqV,EAAQ+T,IAAMjvC,EACdkrF,EAAoBF,EAAU9vD,GAEP,UAAnBA,EAAQrV,QAGV,OAAOslE,EAIXjwD,EAAQrV,OAAS,QACjBqV,EAAQ+T,IAAM,IAAItS,UAChB,kDAGJ,OAAOwuD,EAGT,IAAIK,EAASC,EAAS5lE,EAAQmlE,EAAS1sD,SAAUpD,EAAQ+T,KAEzD,GAAoB,UAAhBu8C,EAAOl3F,KAIT,OAHA4mC,EAAQrV,OAAS,QACjBqV,EAAQ+T,IAAMu8C,EAAOv8C,IACrB/T,EAAQ8vD,SAAW,KACZG,EAGT,IAAIsB,EAAOjB,EAAOv8C,IAElB,OAAMw9C,EAOFA,EAAK35D,MAGPoI,EAAQ8vD,EAAS0B,YAAcD,EAAKluF,MAGpC28B,EAAQ1vB,KAAOw/E,EAAS2B,QAQD,WAAnBzxD,EAAQrV,SACVqV,EAAQrV,OAAS,OACjBqV,EAAQ+T,IAAMjvC,GAUlBk7B,EAAQ8vD,SAAW,KACZG,GANEsB,GA3BPvxD,EAAQrV,OAAS,QACjBqV,EAAQ+T,IAAM,IAAItS,UAAU,oCAC5BzB,EAAQ8vD,SAAW,KACZG,GAoDX,SAASyB,EAAaC,GACpB,IAAI9+B,EAAQ,CAAE++B,OAAQD,EAAK,IAEvB,KAAKA,IACP9+B,EAAMg/B,SAAWF,EAAK,IAGpB,KAAKA,IACP9+B,EAAMi/B,WAAaH,EAAK,GACxB9+B,EAAMk/B,SAAWJ,EAAK,IAGxBh4F,KAAKq4F,WAAW75F,KAAK06D,GAGvB,SAASo/B,EAAcp/B,GACrB,IAAIy9B,EAASz9B,EAAMq/B,YAAc,GACjC5B,EAAOl3F,KAAO,gBACPk3F,EAAOv8C,IACd8e,EAAMq/B,WAAa5B,EAGrB,SAASd,EAAQJ,GAIfz1F,KAAKq4F,WAAa,CAAC,CAAEJ,OAAQ,SAC7BxC,EAAYptF,QAAQ0vF,EAAc/3F,MAClCA,KAAKkxE,OAAM,GA8Bb,SAASj+C,EAAOgoB,GACd,GAAIA,EAAU,CACZ,IAAIlR,EAAiBkR,EAASi6C,GAC9B,GAAInrD,EACF,OAAOA,EAAeC,KAAKiR,GAG7B,GAA6B,mBAAlBA,EAAStkC,KAClB,OAAOskC,EAGT,IAAKnwC,MAAMmwC,EAAS18C,QAAS,CAC3B,IAAID,GAAK,EAAGqY,EAAO,SAASA,IAC1B,OAASrY,EAAI28C,EAAS18C,QACpB,GAAIq5C,EAAO5N,KAAKiR,EAAU38C,GAGxB,OAFAqY,EAAKjN,MAAQuxC,EAAS38C,GACtBqY,EAAKsnB,MAAO,EACLtnB,EAOX,OAHAA,EAAKjN,MAAQyB,EACbwL,EAAKsnB,MAAO,EAELtnB,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMu/E,GAIjB,SAASA,IACP,MAAO,CAAExsF,MAAOyB,EAAW8yB,MAAM,GA+MnC,OA7mBA84D,EAAkBrzF,UAAYszF,EAC9BtQ,EAAOyQ,EAAI,cAAeH,GAC1BtQ,EAAOsQ,EAA4B,cAAeD,GAClDA,EAAkByB,YAAc9R,EAC9BsQ,EACA3B,EACA,qBAaFztD,EAAQ6wD,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOhtD,YAClD,QAAOitD,IACHA,IAAS5B,GAG2B,uBAAnC4B,EAAKH,aAAeG,EAAK3mF,QAIhC41B,EAAQgxD,KAAO,SAASF,GAQtB,OAPI70F,OAAO2rC,eACT3rC,OAAO2rC,eAAekpD,EAAQ1B,IAE9B0B,EAAO73C,UAAYm2C,EACnBtQ,EAAOgS,EAAQrD,EAAmB,sBAEpCqD,EAAOh1F,UAAYG,OAAOqkC,OAAOivD,GAC1BuB,GAOT9wD,EAAQixD,MAAQ,SAASz+C,GACvB,MAAO,CAAEo9C,QAASp9C,IAsEpBg9C,EAAsBC,EAAc3zF,WACpCgjF,EAAO2Q,EAAc3zF,UAAWyxF,GAAqB,WACnD,OAAOn1F,QAET4nC,EAAQyvD,cAAgBA,EAKxBzvD,EAAQkxD,MAAQ,SAASvD,EAASC,EAASp+D,EAAMq+D,EAAa6B,QACxC,IAAhBA,IAAwBA,EAAc/+E,SAE1C,IAAIwgF,EAAO,IAAI1B,EACb/lC,EAAKikC,EAASC,EAASp+D,EAAMq+D,GAC7B6B,GAGF,OAAO1vD,EAAQ6wD,oBAAoBjD,GAC/BuD,EACAA,EAAKpiF,OAAOulC,MAAK,SAASj9B,GACxB,OAAOA,EAAOgf,KAAOhf,EAAOvV,MAAQqvF,EAAKpiF,WAuKjDygF,EAAsBD,GAEtBzQ,EAAOyQ,EAAI9B,EAAmB,aAO9B3O,EAAOyQ,EAAIjC,GAAgB,WACzB,OAAOl1F,QAGT0mF,EAAOyQ,EAAI,YAAY,WACrB,MAAO,wBAkCTvvD,EAAQxT,KAAO,SAASmZ,GACtB,IAAInZ,EAAO,GACX,IAAK,IAAIoU,KAAO+E,EACdnZ,EAAK51B,KAAKgqC,GAMZ,OAJApU,EAAK4kE,UAIE,SAASriF,IACd,KAAOyd,EAAK71B,QAAQ,CAClB,IAAIiqC,EAAMpU,EAAKkoC,MACf,GAAI9zB,KAAO+E,EAGT,OAFA52B,EAAKjN,MAAQ8+B,EACb7xB,EAAKsnB,MAAO,EACLtnB,EAQX,OADAA,EAAKsnB,MAAO,EACLtnB,IAsCXixB,EAAQ3U,OAASA,EAMjB4iE,EAAQnyF,UAAY,CAClBgoC,YAAamqD,EAEb3kB,MAAO,SAAS+nB,GAcd,GAbAj5F,KAAKkW,KAAO,EACZlW,KAAK2W,KAAO,EAGZ3W,KAAKu2F,KAAOv2F,KAAKw2F,MAAQrrF,EACzBnL,KAAKi+B,MAAO,EACZj+B,KAAKm2F,SAAW,KAEhBn2F,KAAKgxB,OAAS,OACdhxB,KAAKo6C,IAAMjvC,EAEXnL,KAAKq4F,WAAWhwF,QAAQiwF,IAEnBW,EACH,IAAK,IAAIjnF,KAAQhS,KAEQ,MAAnBgS,EAAKy2B,OAAO,IACZmP,EAAO5N,KAAKhqC,KAAMgS,KACjBlH,OAAOkH,EAAKtC,MAAM,MACrB1P,KAAKgS,GAAQ7G,IAMrB9G,KAAM,WACJrE,KAAKi+B,MAAO,EAEZ,IACIi7D,EADYl5F,KAAKq4F,WAAW,GACLE,WAC3B,GAAwB,UAApBW,EAAWz5F,KACb,MAAMy5F,EAAW9+C,IAGnB,OAAOp6C,KAAKm5F,MAGd1C,kBAAmB,SAAS2C,GAC1B,GAAIp5F,KAAKi+B,KACP,MAAMm7D,EAGR,IAAI/yD,EAAUrmC,KACd,SAASgyF,EAAOqH,EAAKC,GAYnB,OAXA3C,EAAOl3F,KAAO,QACdk3F,EAAOv8C,IAAMg/C,EACb/yD,EAAQ1vB,KAAO0iF,EAEXC,IAGFjzD,EAAQrV,OAAS,OACjBqV,EAAQ+T,IAAMjvC,KAGNmuF,EAGZ,IAAK,IAAIh7F,EAAI0B,KAAKq4F,WAAW95F,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAI46D,EAAQl5D,KAAKq4F,WAAW/5F,GACxBq4F,EAASz9B,EAAMq/B,WAEnB,GAAqB,SAAjBr/B,EAAM++B,OAIR,OAAOjG,EAAO,OAGhB,GAAI94B,EAAM++B,QAAUj4F,KAAKkW,KAAM,CAC7B,IAAIqjF,EAAW3hD,EAAO5N,KAAKkvB,EAAO,YAC9BsgC,EAAa5hD,EAAO5N,KAAKkvB,EAAO,cAEpC,GAAIqgC,GAAYC,EAAY,CAC1B,GAAIx5F,KAAKkW,KAAOgjD,EAAMg/B,SACpB,OAAOlG,EAAO94B,EAAMg/B,UAAU,GACzB,GAAIl4F,KAAKkW,KAAOgjD,EAAMi/B,WAC3B,OAAOnG,EAAO94B,EAAMi/B,iBAGjB,GAAIoB,GACT,GAAIv5F,KAAKkW,KAAOgjD,EAAMg/B,SACpB,OAAOlG,EAAO94B,EAAMg/B,UAAU,OAG3B,KAAIsB,EAMT,MAAM,IAAIriF,MAAM,0CALhB,GAAInX,KAAKkW,KAAOgjD,EAAMi/B,WACpB,OAAOnG,EAAO94B,EAAMi/B,gBAU9BzB,OAAQ,SAASj3F,EAAM26C,GACrB,IAAK,IAAI97C,EAAI0B,KAAKq4F,WAAW95F,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAI46D,EAAQl5D,KAAKq4F,WAAW/5F,GAC5B,GAAI46D,EAAM++B,QAAUj4F,KAAKkW,MACrB0hC,EAAO5N,KAAKkvB,EAAO,eACnBl5D,KAAKkW,KAAOgjD,EAAMi/B,WAAY,CAChC,IAAIsB,EAAevgC,EACnB,OAIAugC,IACU,UAATh6F,GACS,aAATA,IACDg6F,EAAaxB,QAAU79C,GACvBA,GAAOq/C,EAAatB,aAGtBsB,EAAe,MAGjB,IAAI9C,EAAS8C,EAAeA,EAAalB,WAAa,GAItD,OAHA5B,EAAOl3F,KAAOA,EACdk3F,EAAOv8C,IAAMA,EAETq/C,GACFz5F,KAAKgxB,OAAS,OACdhxB,KAAK2W,KAAO8iF,EAAatB,WAClB7B,GAGFt2F,KAAK0hC,SAASi1D,IAGvBj1D,SAAU,SAASi1D,EAAQyB,GACzB,GAAoB,UAAhBzB,EAAOl3F,KACT,MAAMk3F,EAAOv8C,IAcf,MAXoB,UAAhBu8C,EAAOl3F,MACS,aAAhBk3F,EAAOl3F,KACTO,KAAK2W,KAAOggF,EAAOv8C,IACM,WAAhBu8C,EAAOl3F,MAChBO,KAAKm5F,KAAOn5F,KAAKo6C,IAAMu8C,EAAOv8C,IAC9Bp6C,KAAKgxB,OAAS,SACdhxB,KAAK2W,KAAO,OACa,WAAhBggF,EAAOl3F,MAAqB24F,IACrCp4F,KAAK2W,KAAOyhF,GAGP9B,GAGToD,OAAQ,SAASvB,GACf,IAAK,IAAI75F,EAAI0B,KAAKq4F,WAAW95F,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAI46D,EAAQl5D,KAAKq4F,WAAW/5F,GAC5B,GAAI46D,EAAMi/B,aAAeA,EAGvB,OAFAn4F,KAAK0hC,SAASw3B,EAAMq/B,WAAYr/B,EAAMk/B,UACtCE,EAAcp/B,GACPo9B,IAKb,MAAS,SAAS2B,GAChB,IAAK,IAAI35F,EAAI0B,KAAKq4F,WAAW95F,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAI46D,EAAQl5D,KAAKq4F,WAAW/5F,GAC5B,GAAI46D,EAAM++B,SAAWA,EAAQ,CAC3B,IAAItB,EAASz9B,EAAMq/B,WACnB,GAAoB,UAAhB5B,EAAOl3F,KAAkB,CAC3B,IAAIk6F,EAAShD,EAAOv8C,IACpBk+C,EAAcp/B,GAEhB,OAAOygC,GAMX,MAAM,IAAIxiF,MAAM,0BAGlByiF,cAAe,SAAS3+C,EAAU48C,EAAYC,GAa5C,OAZA93F,KAAKm2F,SAAW,CACd1sD,SAAUxW,EAAOgoB,GACjB48C,WAAYA,EACZC,QAASA,GAGS,SAAhB93F,KAAKgxB,SAGPhxB,KAAKo6C,IAAMjvC,GAGNmrF,IAQJ1uD,EA9sBK,CAqtBiBD,EAAOC,SAGtC,IACEiyD,mBAAqB7E,EACrB,MAAO8E,GAWmB,iBAAfriD,WACTA,WAAWoiD,mBAAqB7E,EAEhCr+C,SAAS,IAAK,yBAAdA,CAAwCq+C,mCC/uB5CrtD,EAAOC,QAAUnX,8NC+BV,SAASspE,EAAwBx0F,EAAUy0F,GAC9C,MAAQzxF,SAAS,QAAEw2C,GAAS,MAAE7nC,GAAU3R,EAClC00F,EAASj3F,SAASk3F,iBAAiBn7C,EAnBpB,IAmB+C,MAAM,GAC1E,IAAIo7C,EAAYC,EAA+BljF,GAC3CF,EAAOE,EAAMijF,GACbE,GAAa,EACbC,EAAc,EAClB,MAAMC,EAA0B,GAChC,IAAIC,EAAsB,KAC1B,KAAOP,EAAOQ,YAAY,CACtBJ,IACA,MAAMp+C,EAAOg+C,EAAOS,YAiBpB,IAfIz+C,EAAK0+C,kBAAoBH,IACzBA,EAAsB,MAGtBR,EAAc39E,IAAI4/B,KAClBs+C,EAAwB/7F,KAAKy9C,GAED,OAAxBu+C,IACAA,EAAsBv+C,IAIF,OAAxBu+C,GACAF,SAEYnvF,IAAT6L,GAAsBA,EAAKxM,QAAU6vF,GAGxCrjF,EAAKxM,MAAgC,OAAxBgwF,GAAgC,EAAIxjF,EAAKxM,MAAQ8vF,EAE9DH,EAAYC,EAA+BljF,EAAOijF,GAClDnjF,EAAOE,EAAMijF,GAGrBI,EAAwBlyF,SAAS2mB,GAAMA,EAAEk1C,WAAWj9B,YAAYjY,KAEpE,MAAM4rE,EAAc3+C,IAChB,IAAI8J,EAA2B,KAAlB9J,EAAK2kC,SAAqD,EAAI,EAC3E,MAAMqZ,EAASj3F,SAASk3F,iBAAiBj+C,EA1DpB,IA0D4C,MAAM,GACvE,KAAOg+C,EAAOQ,YACV10C,IAEJ,OAAOA,GAELq0C,EAAiC,CAACljF,EAAOiF,GAAa,KACxD,IAAK,IAAI7d,EAAI6d,EAAa,EAAG7d,EAAI4Y,EAAM3Y,OAAQD,IAAK,CAChD,MAAM0Y,EAAOE,EAAM5Y,GACnB,IAAI,QAAqB0Y,GACrB,OAAO1Y,EAGf,OAAQ,+CCtDZ,MAAMu8F,EAAsB,CAACp7F,EAAMq7F,IAAc,GAAGr7F,MAASq7F,IAC7D,IAAIC,GAA4B,OACD,IAApBj6F,OAAOk6F,SACdD,GAA4B,OAEuB,IAAvCj6F,OAAOk6F,SAASC,qBAC5B17F,QAAQ0oB,KAAK,6IAGb8yE,GAA4B,GAMzB,MAAMG,EAAwBJ,GAAe77E,IAChD,MAAMk8E,EAAWN,EAAoB57E,EAAOxf,KAAMq7F,GAClD,IAAIM,EAAgB,QAAmBD,QACjBhwF,IAAlBiwF,IACAA,EAAgB,CACZC,aAAc,IAAIxkF,QAClBykF,UAAW,IAAIC,KAEnB,QAAmBJ,EAAUC,IAEjC,IAAI71F,EAAW61F,EAAcC,aAAav5F,IAAImd,EAAO1H,SACrD,QAAiBpM,IAAb5F,EACA,OAAOA,EAEX,MAAMijC,EAAMvpB,EAAO1H,QAAQ9Y,KAAK,MAEhC,GADA8G,EAAW61F,EAAcE,UAAUx5F,IAAI0mC,QACtBr9B,IAAb5F,EAAwB,CACxB,MAAMgD,EAAU0W,EAAOu8E,qBACnBT,GACAj6F,OAAOk6F,SAASC,mBAAmB1yF,EAASuyF,GAEhDv1F,EAAW,IAAI,KAAS0Z,EAAQ1W,GAChC6yF,EAAcE,UAAUv3F,IAAIykC,EAAKjjC,GAGrC,OADA61F,EAAcC,aAAat3F,IAAIkb,EAAO1H,QAAShS,GACxCA,GAELk2F,EAAiB,CAAC,OAAQ,OAoB1BC,EAAiB,IAAIlkF,ICpE3B1W,OAAO66F,0BACH,CAACzzF,EAAM0zF,IAAS1zF,EACb,MAAM2zF,EAAmB,CAC5BC,YAAYpyF,EAAOjK,GACf,OAAQA,GACJ,KAAKmsC,QACD,OAAOliC,EAAQ,GAAK,KACxB,KAAK7F,OACL,KAAKxF,MAGD,OAAgB,MAATqL,EAAgBA,EAAQ25B,KAAKC,UAAU55B,GAEtD,OAAOA,GAEXqyF,cAAcryF,EAAOjK,GACjB,OAAQA,GACJ,KAAKmsC,QACD,OAAiB,OAAVliC,EACX,KAAKwR,OACD,OAAiB,OAAVxR,EAAiB,KAAOwR,OAAOxR,GAC1C,KAAK7F,OACL,KAAKxF,MACD,OAAOglC,KAAK07C,MAAMr1E,GAE1B,OAAOA,IAOFsyF,EAAW,CAACtyF,EAAOkzE,IAErBA,IAAQlzE,IAAUkzE,GAAQA,GAAOlzE,GAAUA,GAEhDuyF,EAA6B,CAC/BhjC,WAAW,EACXx5D,KAAMsoC,OACNm0D,UAAWL,EACXM,SAAS,EACThhF,WAAY6gF,GAmBT,MAAMI,UAAwBC,YACjC3wD,cACI4wD,QACAt8F,KAAKu8F,aAMT,gCAEIv8F,KAAKw8F,WACL,MAAMrjC,EAAa,GAUnB,OAPAn5D,KAAKy8F,iBAAiBp0F,SAAQ,CAACuiD,EAAG9tC,KAC9B,MAAMpV,EAAO1H,KAAK08F,0BAA0B5/E,EAAG8tC,QAClCz/C,IAATzD,IACA1H,KAAK28F,wBAAwB54F,IAAI2D,EAAMoV,GACvCq8C,EAAW36D,KAAKkJ,OAGjByxD,EAQX,gCAEI,IAAKn5D,KAAK23C,eAAegkD,0BAA0B,mBAAoB37F,OAAQ,CAC3EA,KAAKy8F,iBAAmB,IAAIlB,IAE5B,MAAMqB,EAAkB/4F,OAAO0qC,eAAevuC,MAAMy8F,sBAC5BtxF,IAApByxF,GACAA,EAAgBv0F,SAAQ,CAACuiD,EAAGjG,IAAM3kD,KAAKy8F,iBAAiB14F,IAAI4gD,EAAGiG,MA0B3E,sBAAsB54C,EAAMlS,EAAUm8F,GAWlC,GAPAj8F,KAAK68F,yBACL78F,KAAKy8F,iBAAiB14F,IAAIiO,EAAMlS,GAM5BA,EAAQg9F,YAAc98F,KAAK0D,UAAUi0C,eAAe3lC,GACpD,OAEJ,MAAMw2B,EAAsB,iBAATx2B,EAAoBm/B,SAAW,KAAKn/B,IACjDqiC,EAAar0C,KAAK+8F,sBAAsB/qF,EAAMw2B,EAAK1oC,QACtCqL,IAAfkpC,GACAxwC,OAAOC,eAAe9D,KAAK0D,UAAWsO,EAAMqiC,GA2BpD,6BAA6BriC,EAAMw2B,EAAK1oC,GACpC,MAAO,CAEHgC,MACI,OAAO9B,KAAKwoC,IAEhBzkC,IAAI2F,GACA,MAAMszF,EAAWh9F,KAAKgS,GACtBhS,KAAKwoC,GAAO9+B,EACZ1J,KACKi9F,sBAAsBjrF,EAAMgrF,EAAUl9F,IAE/CyoC,cAAc,EACd0G,YAAY,GAepB,0BAA0Bj9B,GACtB,OAAOhS,KAAKy8F,kBAAoBz8F,KAAKy8F,iBAAiB36F,IAAIkQ,IACtDiqF,EAOR,kBAEI,MAAMiB,EAAYr5F,OAAO0qC,eAAevuC,MAYxC,GAXKk9F,EAAUvlD,eA1JL,cA2JNulD,EAAUV,WAEdx8F,KAAc,WAAI,EAClBA,KAAK68F,yBAEL78F,KAAK28F,wBAA0B,IAAIpB,IAK/Bv7F,KAAK23C,eAAegkD,0BAA0B,aAAc37F,OAAQ,CACpE,MAAMq2B,EAAQr2B,KAAK+2D,WAEbomC,EAAW,IACVt5F,OAAOq1C,oBAAoB7iB,MACc,mBAAjCxyB,OAAOu5C,sBACdv5C,OAAOu5C,sBAAsB/mB,GAC7B,IAGR,IAAK,MAAMvZ,KAAKqgF,EAIZn9F,KAAKqpC,eAAevsB,EAAGuZ,EAAMvZ,KAQzC,iCAAiC9K,EAAMlS,GACnC,MAAMm5D,EAAYn5D,EAAQm5D,UAC1B,OAAqB,IAAdA,OACH9tD,EACsB,iBAAd8tD,EACJA,EACiB,iBAATjnD,EAAoBA,EAAK2oC,mBAAgBxvC,EAQ7D,wBAAwBzB,EAAOkzE,EAAKzhE,EAAa6gF,GAC7C,OAAO7gF,EAAWzR,EAAOkzE,GAQ7B,mCAAmClzE,EAAO5J,GACtC,MAAML,EAAOK,EAAQL,KACfy8F,EAAYp8F,EAAQo8F,WAAaL,EACjCE,EAAsC,mBAAdG,EAA2BA,EAAYA,EAAUH,cAC/E,OAAOA,EAAgBA,EAAcryF,EAAOjK,GAAQiK,EAUxD,iCAAiCA,EAAO5J,GACpC,QAAwBqL,IAApBrL,EAAQq8F,QACR,OAEJ,MAAM18F,EAAOK,EAAQL,KACfy8F,EAAYp8F,EAAQo8F,UAG1B,OAFoBA,GAAaA,EAAUJ,aACvCD,EAAiBC,aACFpyF,EAAOjK,GAM9B88F,aACIv8F,KAAKo9F,aAAe,EACpBp9F,KAAKq9F,eACD,IAAI9kF,SAASC,GAAQxY,KAAKs9F,wBAA0B9kF,IACxDxY,KAAKu9F,mBAAqB,IAAIhC,IAC9Bv7F,KAAKw9F,0BAGLx9F,KAAKi9F,wBAcTO,0BAGIx9F,KAAK0rC,YACA+wD,iBAAiBp0F,SAAQ,CAACo1F,EAAI3gF,KAC/B,GAAI9c,KAAK23C,eAAe76B,GAAI,CACxB,MAAMpT,EAAQ1J,KAAK8c,UACZ9c,KAAK8c,GACP9c,KAAK09F,sBACN19F,KAAK09F,oBAAsB,IAAInC,KAEnCv7F,KAAK09F,oBAAoB35F,IAAI+Y,EAAGpT,OAO5Ci0F,2BAII39F,KAAK09F,oBAAoBr1F,SAAQ,CAACuiD,EAAG9tC,IAAM9c,KAAK8c,GAAK8tC,IACrD5qD,KAAK09F,yBAAsBvyF,EAE/ByyF,oBAGI59F,KAAK69F,iBAETA,sBACyC1yF,IAAjCnL,KAAKs9F,0BACLt9F,KAAKs9F,0BACLt9F,KAAKs9F,6BAA0BnyF,GAQvC2yF,wBAKAC,yBAAyB/rF,EAAM4qE,EAAKlzE,GAC5BkzE,IAAQlzE,GACR1J,KAAKg+F,qBAAqBhsF,EAAMtI,GAGxCu0F,qBAAqBjsF,EAAMtI,EAAO5J,EAAUm8F,GACxC,MAAMtD,EAAO34F,KAAK0rC,YACZhkC,EAAOixF,EAAK+D,0BAA0B1qF,EAAMlS,GAClD,QAAaqL,IAATzD,EAAoB,CACpB,MAAMw2F,EAAYvF,EAAKwF,0BAA0Bz0F,EAAO5J,GAExD,QAAkBqL,IAAd+yF,EACA,OAUJl+F,KAAKo9F,aAhVwB,EAgVTp9F,KAAKo9F,aACR,MAAbc,EACAl+F,KAAKq9E,gBAAgB31E,GAGrB1H,KAAKihC,aAAav5B,EAAMw2F,GAG5Bl+F,KAAKo9F,cAAmC,EAApBp9F,KAAKo9F,cAGjCY,qBAAqBhsF,EAAMtI,GAGvB,GA9ViC,EA8V7B1J,KAAKo9F,aACL,OAEJ,MAAMzE,EAAO34F,KAAK0rC,YAIZx3B,EAAWykF,EAAKgE,wBAAwB76F,IAAIkQ,GAClD,QAAiB7G,IAAb+I,EAAwB,CACxB,MAAMpU,EAAU64F,EAAKyF,mBAAmBlqF,GAExClU,KAAKo9F,aAxWuB,GAwWRp9F,KAAKo9F,aACzBp9F,KAAKkU,GAEDykF,EAAK0F,4BAA4B30F,EAAO5J,GAE5CE,KAAKo9F,cAAmC,GAApBp9F,KAAKo9F,cAQjCH,sBAAsBjrF,EAAMgrF,EAAUl9F,GAClC,IAAIw+F,GAAsB,EAE1B,QAAanzF,IAAT6G,EAAoB,CACpB,MAAM2mF,EAAO34F,KAAK0rC,YAClB5rC,EAAUA,GAAW64F,EAAKyF,mBAAmBpsF,GACzC2mF,EAAK4F,iBAAiBv+F,KAAKgS,GAAOgrF,EAAUl9F,EAAQqb,aAC/Cnb,KAAKu9F,mBAAmBlhF,IAAIrK,IAC7BhS,KAAKu9F,mBAAmBx5F,IAAIiO,EAAMgrF,IAMd,IAApBl9F,EAAQq8F,SAnYY,GAoYlBn8F,KAAKo9F,oBAC4BjyF,IAA/BnL,KAAKw+F,wBACLx+F,KAAKw+F,sBAAwB,IAAIjD,KAErCv7F,KAAKw+F,sBAAsBz6F,IAAIiO,EAAMlS,KAKzCw+F,GAAsB,GAGzBt+F,KAAKy+F,qBAAuBH,IAC7Bt+F,KAAKq9F,eAAiBr9F,KAAK0+F,kBAgBnC3/E,cAAc/M,EAAMgrF,GAEhB,OADAh9F,KAAKi9F,sBAAsBjrF,EAAMgrF,GAC1Bh9F,KAAK2+F,eAKhB,uBACI3+F,KAAKo9F,aA3akB,EA2aHp9F,KAAKo9F,aACzB,UAGUp9F,KAAKq9F,eAEf,MAAO57F,IAIP,MAAMwd,EAASjf,KAAK4+F,gBAOpB,OAHc,MAAV3/E,SACMA,GAEFjf,KAAKy+F,oBAEjB,0BACI,OA/buB,EA+bfz+F,KAAKo9F,aAEjB,iBACI,OAnckB,EAmcVp9F,KAAKo9F,aAkBjBwB,gBAII,IAAK5+F,KAAKy+F,oBACN,OAGAz+F,KAAK09F,qBACL19F,KAAK29F,2BAET,IAAIkB,GAAe,EACnB,MAAMC,EAAoB9+F,KAAKu9F,mBAC/B,IACIsB,EAAe7+F,KAAK6+F,aAAaC,GAC7BD,EACA7+F,KAAKye,OAAOqgF,GAGZ9+F,KAAK++F,eAGb,MAAOt9F,GAMH,MAHAo9F,GAAe,EAEf7+F,KAAK++F,eACCt9F,EAENo9F,IAnfc,EAofR7+F,KAAKo9F,eACPp9F,KAAKo9F,aArfK,EAqfUp9F,KAAKo9F,aACzBp9F,KAAKg/F,aAAaF,IAEtB9+F,KAAKi/F,QAAQH,IAGrBC,eACI/+F,KAAKu9F,mBAAqB,IAAIhC,IAC9Bv7F,KAAKo9F,cAAmC,EAApBp9F,KAAKo9F,aAiB7B,qBACI,OAAOp9F,KAAKk/F,qBAkBhBA,qBACI,OAAOl/F,KAAKq9F,eAShBwB,aAAatB,GACT,OAAO,EAUX9+E,OAAO8+E,QACgCpyF,IAA/BnL,KAAKw+F,uBACLx+F,KAAKw+F,sBAAsB36C,KAAO,IAGlC7jD,KAAKw+F,sBAAsBn2F,SAAQ,CAACuiD,EAAGjG,IAAM3kD,KAAKi+F,qBAAqBt5C,EAAG3kD,KAAK2kD,GAAIiG,KACnF5qD,KAAKw+F,2BAAwBrzF,GAEjCnL,KAAK++F,eAWTE,QAAQ1B,IAWRyB,aAAazB,KAOjBnB,EAAkB,WAAI,EClpBtB,MAmCathF,EAAiB2qB,GAAa05D,GAAoD,mBAAtBA,EAnC7C,EAAC15D,EAAS25D,KAClCt+F,OAAOu+F,eAAe3Y,OAAOjhD,EAAS25D,GAO/BA,GA4BPE,CAAoB75D,EAAS05D,GA1BH,EAAC15D,EAAS4O,KACpC,MAAM,KAAEmV,EAAI,SAAEqkC,GAAax5C,EAC3B,MAAO,CACHmV,KAAAA,EACAqkC,SAAAA,EAEA0R,SAASH,GACLt+F,OAAOu+F,eAAe3Y,OAAOjhD,EAAS25D,MAoB9CI,CAAsB/5D,EAAS05D,GAC7BM,EAAmB,CAAC3/F,EAASyI,IAIV,WAAjBA,EAAQihD,MAAqBjhD,EAAQ8rC,cACnC,UAAW9rC,EAAQ8rC,YACdxwC,OAAOs6C,OAAOt6C,OAAOs6C,OAAO,GAAI51C,GAAU,CAAEg3F,SAASH,GACpDA,EAAM/1D,eAAe9gC,EAAQigC,IAAK1oC,MAOnC,CACH0pD,KAAM,QACNhhB,IAAK2I,SACLuuD,UAAW,MACXrrD,WAAY,GAUZsrD,cACuC,mBAAxBp3F,EAAQo3F,cACf3/F,KAAKuI,EAAQigC,KAAOjgC,EAAQo3F,YAAY31D,KAAKhqC,QAGrDu/F,SAASH,GACLA,EAAM/1D,eAAe9gC,EAAQigC,IAAK1oC,KA2B3C,SAASkb,EAASlb,GAErB,MAAO,CAAC8/F,EAAmB5tF,SAAmB7G,IAAT6G,EAxBlB,EAAClS,EAASixC,EAAO/+B,KACpC++B,EAAMrF,YACDrC,eAAer3B,EAAMlS,IAuBtB+/F,CAAe//F,EAAS8/F,EAAmB5tF,GAC3CytF,EAAiB3/F,EAAS8/F,GAyC3B,SAASvkF,EAAMonB,EAAUlT,GAC5B,MAAO,CAACqwE,EAER5tF,KACI,MAAMqiC,EAAa,CACfvyC,MACI,OAAO9B,KAAK8/F,WAAWt3F,cAAci6B,IAEzCwM,YAAY,EACZ1G,cAAc,GAElB,GAAIhZ,EAAO,CACP,MAAMiZ,EAAsB,iBAATx2B,EAAoBm/B,SAAW,KAAKn/B,IACvDqiC,EAAWvyC,IAAM,WAKb,YAJkBqJ,IAAdnL,KAAKwoC,KACJxoC,KAAKwoC,GACFxoC,KAAK8/F,WAAWt3F,cAAci6B,IAE/BziC,KAAKwoC,IAGpB,YAAiBr9B,IAAT6G,EACJ+tF,EAAY1rD,EAAYurD,EAAmB5tF,GAC3CguF,EAAc3rD,EAAYurD,IAmGtC,MAAMG,EAAc,CAAC1rD,EAAYtD,EAAO/+B,KACpCnO,OAAOC,eAAeitC,EAAO/+B,EAAMqiC,IAEjC2rD,EAAgB,CAAC3rD,EAAY9rC,KAAY,CAC3CihD,KAAM,SACNk2C,UAAW,YACXl3D,IAAKjgC,EAAQigC,IACb6L,WAAAA,IAuDE4rD,EAAeC,QAAQx8F,UACPu8F,EAAaE,mBAAqBF,EAAaG,sBCzU9D,MAAMC,EAA+Bv/F,OAAiB,kBACpCqK,IAApBrK,OAAOk6F,UAA0Bl6F,OAAOk6F,SAASsF,eACjD,uBAAwBC,SAAS78F,WACjC,YAAa88F,cAAc98F,UAC1B+8F,EAAoBtvD,SACnB,MAAMuvD,EACTh1D,YAAYp0B,EAASqpF,GACjB,GAAIA,IAAcF,EACd,MAAM,IAAItpF,MAAM,qEAEpBnX,KAAKsX,QAAUA,EAInB,iBAYI,YAXyBnM,IAArBnL,KAAK4gG,cAGDP,GACArgG,KAAK4gG,YAAc,IAAIJ,cACvBxgG,KAAK4gG,YAAYC,YAAY7gG,KAAKsX,UAGlCtX,KAAK4gG,YAAc,MAGpB5gG,KAAK4gG,YAEhBtvE,WACI,OAAOtxB,KAAKsX,SAUb,MAqBM3F,EAAM,CAAC4F,KAAY0b,KAC5B,MAAM3b,EAAU2b,EAAO7mB,QAAO,CAACg7B,EAAKwjB,EAAGhpD,IAAQwlC,EAnBzB,CAAC19B,IACvB,GAAIA,aAAiBg3F,EACjB,OAAOh3F,EAAM4N,QAEZ,GAAqB,iBAAV5N,EACZ,OAAOA,EAGP,MAAM,IAAIyN,MAAM,mEAAmEzN,uGAWlCo3F,CAAkBl2C,GAAKrzC,EAAQ3V,EAAM,IAAI2V,EAAQ,IACtG,OAAO,IAAImpF,EAAUppF,EAASmpF,KCVjC3/F,OAA2B,qBAAMA,OAA2B,mBAAI,KAC5DtC,KAAK,SAKV,MAAMuiG,EAAuB,GAStB,MAAMhmF,UAAmBqhF,EAO5B,mBACI,OAAOp8F,KAAKskF,OAGhB,0BAEI,GAAItkF,KAAK23C,eAAegkD,0BAA0B,UAAW37F,OACzD,OAQJ,MAAMghG,EAAahhG,KAAKihG,YACxB,GAAI5iG,MAAMquC,QAAQs0D,GAAa,CAO3B,MAAME,EAAY,CAAC5c,EAAQvgF,IAAQugF,EAAO6c,aAAY,CAACp9F,EAAKkpD,IAE5D5uD,MAAMquC,QAAQugB,GAAKi0C,EAAUj0C,EAAGlpD,IAAQA,EAAI2E,IAAIukD,GAAIlpD,IAAMA,GAGpDA,EAAMm9F,EAAUF,EAAY,IAAIxpF,KAChC8sE,EAAS,GACfvgF,EAAIsE,SAASuiD,GAAM05B,EAAOpnB,QAAQtS,KAClC5qD,KAAKohG,QAAU9c,OAGftkF,KAAKohG,aAAyBj2F,IAAf61F,EAA2B,GAAK,CAACA,GAQpDhhG,KAAKohG,QAAUphG,KAAKohG,QAAQz7F,KAAKsnD,IAC7B,GAAIA,aAAauzC,gBAAkBH,EAA6B,CAK5D,MAAM/oF,EAAUjZ,MAAMqF,UAAUgM,MAAMs6B,KAAKijB,EAAEo0C,UACxCj1F,QAAO,CAACuF,EAAK2vF,IAAS3vF,EAAM2vF,EAAKhqF,SAAS,IAC/C,ODpFL,IAAIopF,EAAU34D,OCoFQzwB,GDpFOmpF,GCsF5B,OAAOxzC,KAQfsvC,aACID,MAAMC,aACNv8F,KAAK0rC,YAAY61D,mBACjBvhG,KAAK8/F,WAAa9/F,KAAKwhG,mBAInB1gG,OAAO2gG,YAAczhG,KAAK8/F,sBAAsBh/F,OAAO2gG,YACvDzhG,KAAK0hG,cAUbF,mBACI,OAAOxhG,KAAK2hG,aAAa,CAAE/7F,KAAM,SAWrC87F,cACI,MAAMpd,EAAStkF,KAAK0rC,YAAY01D,QACV,IAAlB9c,EAAO/lF,cAQa4M,IAApBrK,OAAOk6F,UAA2Bl6F,OAAOk6F,SAASsF,aAG7CD,EACLrgG,KAAK8/F,WAAW8B,mBACZtd,EAAO3+E,KAAKsnD,GAAMA,aAAauzC,cAAgBvzC,EAAIA,EAAE40C,aAKzD7hG,KAAK8hG,8BAA+B,EATpChhG,OAAOk6F,SAAS+G,YAAYC,sBAAsB1d,EAAO3+E,KAAKsnD,GAAMA,EAAE31C,UAAUtX,KAAKiiG,YAY7FrE,oBACItB,MAAMsB,oBAGF59F,KAAKkiG,iBAAkC/2F,IAApBrK,OAAOk6F,UAC1Bl6F,OAAOk6F,SAASmH,aAAaniG,MASrCye,OAAOqgF,GAIH,MAAMsD,EAAiBpiG,KAAKqiG,SAC5B/F,MAAM79E,OAAOqgF,GAETsD,IAAmBrB,GACnB/gG,KAAK0rC,YACA22D,OAAOD,EAAgBpiG,KAAK8/F,WAAY,CAAEhF,UAAW96F,KAAKiiG,UAAWK,aAActiG,OAKxFA,KAAK8hG,+BACL9hG,KAAK8hG,8BAA+B,EACpC9hG,KAAK0rC,YAAY01D,QAAQ/4F,SAAS4kD,IAC9B,MAAM71C,EAAQpU,SAASqhB,cAAc,SACrCjN,EAAMmrF,YAAct1C,EAAE31C,QACtBtX,KAAK8/F,WAAWp7D,YAAYttB,OAUxCirF,SACI,OAAOtB,GAUfhmF,EAAsB,WAAI,EAkB1BA,EAAWsnF,OJrCW,CAACpjF,EAAQO,EAAW1f,KACtC,IAAKA,GAA8B,iBAAZA,IAAyBA,EAAQg7F,UACpD,MAAM,IAAI3jF,MAAM,uCAEpB,MAAM2jF,EAAYh7F,EAAQg7F,UACpB0H,EAAc,QAAUhjF,GACxBijF,EAAe1H,GACM,KAAvBv7E,EAAUohE,YACRphE,EAAUk+B,KAEVglD,EAAmBD,IAAiB/G,EAAer/E,IAAIy+E,GAGvD6H,EAAkBD,EAAmB1/F,SAAS4/F,yBAA2BpjF,EAW/E,IAVA,OAAUP,EAAQ0jF,EAAiB9+F,OAAOs6C,OAAO,CAAE0kD,gBAAiB3H,EAAqBJ,IAAch7F,IAUnG4iG,EAAkB,CAClB,MAAM1rF,EAAO,QAAU2rF,GACvB,WAAaA,GAzJS,EAAC7H,EAAWgI,EAAav9F,KACnDm2F,EAAehzF,IAAIoyF,GAInB,MAAMiI,EAAoBx9F,EAAWA,EAASgD,QAAUvF,SAASqhB,cAAc,YAEzEigE,EAASwe,EAAYE,iBAAiB,UACtC,OAAEzkG,GAAW+lF,EAEnB,GAAe,IAAX/lF,EAYA,YADAuC,OAAOk6F,SAASiI,sBAAsBF,EAAiBjI,GAG3D,MAAMoI,EAAiBlgG,SAASqhB,cAAc,SAM9C,IAAK,IAAI/lB,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAC7B,MAAM8Y,EAAQktE,EAAOhmF,GACrB8Y,EAAM8sD,WAAWj9B,YAAY7vB,GAC7B8rF,EAAeX,aAAenrF,EAAMmrF,YAhEP,CAACzH,IAClCW,EAAepzF,SAAS5I,IACpB,MAAM0jG,EAAY,QAAmBtI,EAAoBp7F,EAAMq7F,SAC7C3vF,IAAdg4F,GACAA,EAAU7H,UAAUjzF,SAAS9C,IACzB,MAAQgD,SAAS,QAAEw2C,IAAcx5C,EAE3B++E,EAAS,IAAI9sE,IACnBnZ,MAAM+uC,KAAK2R,EAAQikD,iBAAiB,UAAU36F,SAAS4kD,IACnDq3B,EAAO57E,IAAIukD,MAEf8sC,EAAwBx0F,EAAU++E,UAwD9C8e,CAA6BtI,GAG7B,MAAM/7C,EAAUgkD,EAAgBhkD,QAC1Bx5C,EDxDH,SAAgCA,EAAU02C,EAAMonD,EAAU,MAC7D,MAAQ96F,SAAS,QAAEw2C,GAAS,MAAE7nC,GAAU3R,EAGxC,GAAI89F,MAAAA,EAEA,YADAtkD,EAAQra,YAAYuX,GAGxB,MAAMg+C,EAASj3F,SAASk3F,iBAAiBn7C,EAtFpB,IAsF+C,MAAM,GAC1E,IAAIo7C,EAAYC,EAA+BljF,GAC3Ci0C,EAAc,EACdm4C,GAAe,EACnB,KAAOrJ,EAAOQ,YAOV,IANA6I,IACmBrJ,EAAOS,cACP2I,IACfl4C,EAAcyvC,EAAW3+C,GACzBonD,EAAQn/B,WAAWwX,aAAaz/B,EAAMonD,KAEpB,IAAflJ,GAAoBjjF,EAAMijF,GAAW3vF,QAAU84F,GAAa,CAE/D,GAAIn4C,EAAc,EAAG,CACjB,MAAsB,IAAfgvC,GACHjjF,EAAMijF,GAAW3vF,OAAS2gD,EAC1BgvC,EAAYC,EAA+BljF,EAAOijF,GAEtD,OAEJA,EAAYC,EAA+BljF,EAAOijF,IC6BtDoJ,CAAuBh+F,EAAU29F,EAAgBnkD,EAAQykD,YAGzDzkD,EAAQ28B,aAAawnB,EAAgBnkD,EAAQykD,YAKjD1iG,OAAOk6F,SAASiI,sBAAsBF,EAAiBjI,GACvD,MAAM1jF,EAAQ2nC,EAAQv2C,cAAc,SACpC,GAAI1H,OAAOk6F,SAASsF,cAA0B,OAAVlpF,EAGhC0rF,EAAYpnB,aAAatkE,EAAMqsF,WAAU,GAAOX,EAAYU,iBAE3D,GAAMj+F,EAAU,CASjBw5C,EAAQ28B,aAAawnB,EAAgBnkD,EAAQykD,YAC7C,MAAME,EAAU,IAAIlsF,IACpBksF,EAAQh7F,IAAIw6F,GACZnJ,EAAwBx0F,EAAUm+F,KA8FlCT,CAAsBnI,EAAW6H,EAHhB3rF,EAAKtN,iBAAiB,IACnCsN,EAAKtN,MAAMnE,cACX4F,IAEJ,QAAYqU,EAAWA,EAAUgkF,YACjChkF,EAAUklB,YAAYi+D,GACtB,QAAUnjF,EAAWxI,IAQpBwrF,GAAeC,GAChB3hG,OAAOk6F,SAASmH,aAAa3iF,EAAUk+B,iGK7Q/C,MAAMimD,EAAa,IAAI9sF,QAyCV+sF,EAAat7D,GAAM,IAAKnF,KACjC,MAAM3uB,EAAI8zB,KAAKnF,GAEf,OADAwgE,EAAW5/F,IAAIyQ,GAAG,GACXA,GAEEqvF,EAAehf,GACJ,mBAANA,GAAoB8e,EAAWtnF,IAAIwoE,sHC5C9C,MAAMif,EAAiC,oBAAXhjG,QACN,MAAzBA,OAAOu+F,qBAEHl0F,IADJrK,OAAOu+F,eAAe0E,0BAObC,EAAgB,CAACxkF,EAAWzK,EAAOlN,EAAM,KAAMo8F,EAAS,QACjE,KAAOlvF,IAAUlN,GAAK,CAClB,MAAMmnB,EAAIja,EAAMmvF,YAChB1kF,EAAUk8D,aAAa3mE,EAAOkvF,GAC9BlvF,EAAQia,IAOHm1E,EAAc,CAAC3kF,EAAWzK,EAAOlN,EAAM,QAChD,KAAOkN,IAAUlN,GAAK,CAClB,MAAMmnB,EAAIja,EAAMmvF,YAChB1kF,EAAUynB,YAAYlyB,GACtBA,EAAQia,8FCvBT,MAAMo1E,EAAW,GAIXC,EAAU,8SCFhB,MAAMC,EAAe56F,GACN,OAAVA,KACe,iBAAVA,GAAuC,mBAAVA,GAEjC66F,EAAc76F,GAChBrL,MAAMquC,QAAQhjC,OAEdA,IAASA,EAAMynC,OAAO1H,WAO1B,MAAM+6D,EACT94D,YAAYnjC,EAASyJ,EAAMuF,GACvBvX,KAAKykG,OAAQ,EACbzkG,KAAKuI,QAAUA,EACfvI,KAAKgS,KAAOA,EACZhS,KAAKuX,QAAUA,EACfvX,KAAKkX,MAAQ,GACb,IAAK,IAAI5Y,EAAI,EAAGA,EAAIiZ,EAAQhZ,OAAS,EAAGD,IACpC0B,KAAKkX,MAAM5Y,GAAK0B,KAAK0kG,cAM7BA,cACI,OAAO,IAAIC,EAAc3kG,MAE7B4kG,YACI,MAAMrtF,EAAUvX,KAAKuX,QACfotB,EAAIptB,EAAQhZ,OAAS,EACrB2Y,EAAQlX,KAAKkX,MAcnB,GAAU,IAANytB,GAA0B,KAAfptB,EAAQ,IAA4B,KAAfA,EAAQ,GAAW,CACnD,MAAMqzC,EAAI1zC,EAAM,GAAGxN,MACnB,GAAiB,iBAANkhD,EACP,OAAO7iB,OAAO6iB,GAElB,GAAiB,iBAANA,IAAmB25C,EAAW35C,GACrC,OAAOA,EAGf,IAAI9iD,EAAO,GACX,IAAK,IAAIxJ,EAAI,EAAGA,EAAIqmC,EAAGrmC,IAAK,CACxBwJ,GAAQyP,EAAQjZ,GAChB,MAAM0Y,EAAOE,EAAM5Y,GACnB,QAAa6M,IAAT6L,EAAoB,CACpB,MAAM4zC,EAAI5zC,EAAKtN,MACf,GAAI46F,EAAY15C,KAAO25C,EAAW35C,GAC9B9iD,GAAqB,iBAAN8iD,EAAiBA,EAAI7iB,OAAO6iB,QAG3C,IAAK,MAAMhmB,KAAKgmB,EACZ9iD,GAAqB,iBAAN88B,EAAiBA,EAAImD,OAAOnD,IAM3D,OADA98B,GAAQyP,EAAQotB,GACT78B,EAEX+8F,SACQ7kG,KAAKykG,QACLzkG,KAAKykG,OAAQ,EACbzkG,KAAKuI,QAAQ04B,aAAajhC,KAAKgS,KAAMhS,KAAK4kG,eAO/C,MAAMD,EACTj5D,YAAYz0B,GACRjX,KAAK0J,WAAQyB,EACbnL,KAAKiX,UAAYA,EAErB6tF,SAASp7F,GACDA,IAAU,KAAc46F,EAAY56F,IAAUA,IAAU1J,KAAK0J,QAC7D1J,KAAK0J,MAAQA,GAIR,OAAYA,KACb1J,KAAKiX,UAAUwtF,OAAQ,IAInCI,SACI,MAAO,OAAY7kG,KAAK0J,QAAQ,CAC5B,MAAMk6F,EAAY5jG,KAAK0J,MACvB1J,KAAK0J,MAAQ,IACbk6F,EAAU5jG,MAEVA,KAAK0J,QAAU,KAGnB1J,KAAKiX,UAAU4tF,UAWhB,MAAME,EACTr5D,YAAY5rC,GACRE,KAAK0J,WAAQyB,EACbnL,KAAKglG,oBAAiB75F,EACtBnL,KAAKF,QAAUA,EAOnBmlG,WAAWzlF,GACPxf,KAAKklG,UAAY1lF,EAAUklB,aAAY,WACvC1kC,KAAKmlG,QAAU3lF,EAAUklB,aAAY,WASzC0gE,gBAAgBC,GACZrlG,KAAKklG,UAAYG,EACjBrlG,KAAKmlG,QAAUE,EAAInB,YAOvBoB,eAAetuF,GACXA,EAAKuuF,SAASvlG,KAAKklG,WAAY,WAC/BluF,EAAKuuF,SAASvlG,KAAKmlG,SAAU,WAOjCK,gBAAgBH,GACZA,EAAIE,SAASvlG,KAAKklG,WAAY,WAC9BllG,KAAKmlG,QAAUE,EAAIF,QACnBE,EAAIF,QAAUnlG,KAAKklG,UAEvBJ,SAASp7F,GACL1J,KAAKglG,eAAiBt7F,EAE1Bm7F,SACI,GAAkC,OAA9B7kG,KAAKklG,UAAUhhC,WACf,OAEJ,MAAO,OAAYlkE,KAAKglG,iBAAiB,CACrC,MAAMpB,EAAY5jG,KAAKglG,eACvBhlG,KAAKglG,eAAiB,IACtBpB,EAAU5jG,MAEd,MAAM0J,EAAQ1J,KAAKglG,eACft7F,IAAU,MAGV46F,EAAY56F,GACRA,IAAU1J,KAAK0J,OACf1J,KAAKylG,aAAa/7F,GAGjBA,aAAiB,IACtB1J,KAAK0lG,uBAAuBh8F,GAEvBA,aAAiBi8F,KACtB3lG,KAAK4lG,aAAal8F,GAEb66F,EAAW76F,GAChB1J,KAAK6lG,iBAAiBn8F,GAEjBA,IAAU,KACf1J,KAAK0J,MAAQ,IACb1J,KAAKwmD,SAILxmD,KAAKylG,aAAa/7F,IAG1B67F,SAAStpD,GACLj8C,KAAKmlG,QAAQjhC,WAAWwX,aAAaz/B,EAAMj8C,KAAKmlG,SAEpDS,aAAal8F,GACL1J,KAAK0J,QAAUA,IAGnB1J,KAAKwmD,QACLxmD,KAAKulG,SAAS77F,GACd1J,KAAK0J,MAAQA,GAEjB+7F,aAAa/7F,GACT,MAAMuyC,EAAOj8C,KAAKklG,UAAUhB,YAItB4B,EAAiC,iBAHvCp8F,EAAiB,MAATA,EAAgB,GAAKA,GAGqBA,EAAQq+B,OAAOr+B,GAC7DuyC,IAASj8C,KAAKmlG,QAAQxK,iBACJ,IAAlB1+C,EAAK2kC,SAIL3kC,EAAK96C,KAAO2kG,EAGZ9lG,KAAK4lG,aAAa5iG,SAASg6C,eAAe8oD,IAE9C9lG,KAAK0J,MAAQA,EAEjBg8F,uBAAuBh8F,GACnB,MAAMnE,EAAWvF,KAAKF,QAAQ+iG,gBAAgBn5F,GAC9C,GAAI1J,KAAK0J,iBAAiB,KACtB1J,KAAK0J,MAAMnE,WAAaA,EACxBvF,KAAK0J,MAAM+U,OAAO/U,EAAMupB,YAEvB,CAKD,MAAMi/B,EAAW,IAAI,IAAiB3sD,EAAUmE,EAAMq8F,UAAW/lG,KAAKF,SAChEgiC,EAAWowB,EAAS8zC,SAC1B9zC,EAASzzC,OAAO/U,EAAMupB,QACtBjzB,KAAK4lG,aAAa9jE,GAClB9hC,KAAK0J,MAAQwoD,GAGrB2zC,iBAAiBn8F,GAURrL,MAAMquC,QAAQ1sC,KAAK0J,SACpB1J,KAAK0J,MAAQ,GACb1J,KAAKwmD,SAIT,MAAMy/C,EAAYjmG,KAAK0J,MACvB,IACIw8F,EADA/L,EAAY,EAEhB,IAAK,MAAM7yD,KAAQ59B,EAEfw8F,EAAWD,EAAU9L,QAEJhvF,IAAb+6F,IACAA,EAAW,IAAInB,EAAS/kG,KAAKF,SAC7BmmG,EAAUznG,KAAK0nG,GACG,IAAd/L,EACA+L,EAASZ,eAAetlG,MAGxBkmG,EAASV,gBAAgBS,EAAU9L,EAAY,KAGvD+L,EAASpB,SAASx9D,GAClB4+D,EAASrB,SACT1K,IAEAA,EAAY8L,EAAU1nG,SAEtB0nG,EAAU1nG,OAAS47F,EACnBn6F,KAAKwmD,MAAM0/C,GAAYA,EAASf,UAGxC3+C,MAAM0+C,EAAYllG,KAAKklG,YACnB,QAAYllG,KAAKklG,UAAUhhC,WAAYghC,EAAUhB,YAAalkG,KAAKmlG,UAUpE,MAAMgB,EACTz6D,YAAYnjC,EAASyJ,EAAMuF,GAGvB,GAFAvX,KAAK0J,WAAQyB,EACbnL,KAAKglG,oBAAiB75F,EACC,IAAnBoM,EAAQhZ,QAA+B,KAAfgZ,EAAQ,IAA4B,KAAfA,EAAQ,GACrD,MAAM,IAAIJ,MAAM,2DAEpBnX,KAAKuI,QAAUA,EACfvI,KAAKgS,KAAOA,EACZhS,KAAKuX,QAAUA,EAEnButF,SAASp7F,GACL1J,KAAKglG,eAAiBt7F,EAE1Bm7F,SACI,MAAO,OAAY7kG,KAAKglG,iBAAiB,CACrC,MAAMpB,EAAY5jG,KAAKglG,eACvBhlG,KAAKglG,eAAiB,IACtBpB,EAAU5jG,MAEd,GAAIA,KAAKglG,iBAAmB,IACxB,OAEJ,MAAMt7F,IAAU1J,KAAKglG,eACjBhlG,KAAK0J,QAAUA,IACXA,EACA1J,KAAKuI,QAAQ04B,aAAajhC,KAAKgS,KAAM,IAGrChS,KAAKuI,QAAQ80E,gBAAgBr9E,KAAKgS,MAEtChS,KAAK0J,MAAQA,GAEjB1J,KAAKglG,eAAiB,KAYvB,MAAMoB,UAA0B5B,EACnC94D,YAAYnjC,EAASyJ,EAAMuF,GACvB+kF,MAAM/zF,EAASyJ,EAAMuF,GACrBvX,KAAKqmG,OACmB,IAAnB9uF,EAAQhZ,QAA+B,KAAfgZ,EAAQ,IAA4B,KAAfA,EAAQ,GAE9DmtF,cACI,OAAO,IAAI4B,EAAatmG,MAE5B4kG,YACI,OAAI5kG,KAAKqmG,OACErmG,KAAKkX,MAAM,GAAGxN,MAElB4yF,MAAMsI,YAEjBC,SACQ7kG,KAAKykG,QACLzkG,KAAKykG,OAAQ,EAEbzkG,KAAKuI,QAAQvI,KAAKgS,MAAQhS,KAAK4kG,cAIpC,MAAM0B,UAAqB3B,GAMlC,IAAI4B,GAAwB,EAG5B,MACI,IACI,MAAMzmG,EAAU,CACZ,cAEI,OADAymG,GAAwB,GACjB,IAIfzlG,OAAOiB,iBAAiB,OAAQjC,EAASA,GAEzCgB,OAAOyB,oBAAoB,OAAQzC,EAASA,GAEhD,MAAO0mG,MAbX,GAiBO,MAAMC,EACT/6D,YAAYnjC,EAAS+tB,EAAWgsE,GAC5BtiG,KAAK0J,WAAQyB,EACbnL,KAAKglG,oBAAiB75F,EACtBnL,KAAKuI,QAAUA,EACfvI,KAAKs2B,UAAYA,EACjBt2B,KAAKsiG,aAAeA,EACpBtiG,KAAK0mG,mBAAsBjlG,GAAMzB,KAAK2mG,YAAYllG,GAEtDqjG,SAASp7F,GACL1J,KAAKglG,eAAiBt7F,EAE1Bm7F,SACI,MAAO,OAAY7kG,KAAKglG,iBAAiB,CACrC,MAAMpB,EAAY5jG,KAAKglG,eACvBhlG,KAAKglG,eAAiB,IACtBpB,EAAU5jG,MAEd,GAAIA,KAAKglG,iBAAmB,IACxB,OAEJ,MAAM4B,EAAc5mG,KAAKglG,eACnB6B,EAAc7mG,KAAK0J,MACnBo9F,EAAsC,MAAfF,GACV,MAAfC,IACKD,EAAYrvD,UAAYsvD,EAAYtvD,SACjCqvD,EAAYG,OAASF,EAAYE,MACjCH,EAAYzsF,UAAY0sF,EAAY1sF,SAC1C6sF,EAAmC,MAAfJ,IAAuC,MAAfC,GAAuBC,GACrEA,GACA9mG,KAAKuI,QAAQhG,oBAAoBvC,KAAKs2B,UAAWt2B,KAAK0mG,mBAAoB1mG,KAAKinG,WAE/ED,IACAhnG,KAAKinG,UAAYC,EAAWN,GAC5B5mG,KAAKuI,QAAQxG,iBAAiB/B,KAAKs2B,UAAWt2B,KAAK0mG,mBAAoB1mG,KAAKinG,YAEhFjnG,KAAK0J,MAAQk9F,EACb5mG,KAAKglG,eAAiB,IAE1B2B,YAAYhoG,GACkB,mBAAfqB,KAAK0J,MACZ1J,KAAK0J,MAAMsgC,KAAKhqC,KAAKsiG,cAAgBtiG,KAAKuI,QAAS5J,GAGnDqB,KAAK0J,MAAMi9F,YAAYhoG,IAOnC,MAAMuoG,EAAcriB,GAAMA,IACrB0hB,EACG,CAAEhvD,QAASstC,EAAEttC,QAASp9B,QAAS0qE,EAAE1qE,QAAS4sF,KAAMliB,EAAEkiB,MAClDliB,EAAEttC,qIC1cH,MAAMrgC,EAAQ,IAAIL,QAgBZwrF,EAAS,CAACpjF,EAAQO,EAAW1f,KACtC,IAAIkX,EAAOE,EAAMpV,IAAI0d,QACRrU,IAAT6L,KACA,QAAYwI,EAAWA,EAAUgkF,YACjCtsF,EAAMnT,IAAIyb,EAAWxI,EAAO,IAAI,KAASnT,OAAOs6C,OAAO,CAAE0kD,gBAAe,KAAI/iG,KAC5EkX,EAAKiuF,WAAWzlF,IAEpBxI,EAAK8tF,SAAS7lF,GACdjI,EAAK6tF,kHCtBF,SAAShC,EAAgB5jF,GAC5B,IAAIm8E,EAAgB+L,EAAerlG,IAAImd,EAAOxf,WACxB0L,IAAlBiwF,IACAA,EAAgB,CACZC,aAAc,IAAIxkF,QAClBykF,UAAW,IAAIC,KAEnB4L,EAAepjG,IAAIkb,EAAOxf,KAAM27F,IAEpC,IAAI71F,EAAW61F,EAAcC,aAAav5F,IAAImd,EAAO1H,SACrD,QAAiBpM,IAAb5F,EACA,OAAOA,EAIX,MAAMijC,EAAMvpB,EAAO1H,QAAQ9Y,KAAK,MAWhC,OATA8G,EAAW61F,EAAcE,UAAUx5F,IAAI0mC,QACtBr9B,IAAb5F,IAEAA,EAAW,IAAI,KAAS0Z,EAAQA,EAAOu8E,sBAEvCJ,EAAcE,UAAUv3F,IAAIykC,EAAKjjC,IAGrC61F,EAAcC,aAAat3F,IAAIkb,EAAO1H,QAAShS,GACxCA,EAEJ,MAAM4hG,EAAiB,IAAI5L,+FC3B3B,MAAM6L,EACT17D,YAAYnmC,EAAUwgG,EAAWjmG,GAC7BE,KAAKqnG,QAAU,GACfrnG,KAAKuF,SAAWA,EAChBvF,KAAK+lG,UAAYA,EACjB/lG,KAAKF,QAAUA,EAEnB2e,OAAOwU,GACH,IAAI30B,EAAI,EACR,IAAK,MAAM0Y,KAAQhX,KAAKqnG,aACPl8F,IAAT6L,GACAA,EAAK8tF,SAAS7xE,EAAO30B,IAEzBA,IAEJ,IAAK,MAAM0Y,KAAQhX,KAAKqnG,aACPl8F,IAAT6L,GACAA,EAAK6tF,SAIjBmB,SAsCI,MAAMlkE,EAAW,KACb9hC,KAAKuF,SAASgD,QAAQw2C,QAAQ0kD,WAAU,GACxCzgG,SAASskG,WAAWtnG,KAAKuF,SAASgD,QAAQw2C,SAAS,GACjDkkB,EAAQ,GACR/rD,EAAQlX,KAAKuF,SAAS2R,MAEtB+iF,EAASj3F,SAASk3F,iBAAiBp4D,EAAU,IAAkD,MAAM,GAC3G,IAEI9qB,EAFAmjF,EAAY,EACZE,EAAY,EAEZp+C,EAAOg+C,EAAOQ,WAElB,KAAON,EAAYjjF,EAAM3Y,QAErB,GADAyY,EAAOE,EAAMijF,IACR,QAAqBnjF,GAA1B,CAQA,KAAOqjF,EAAYrjF,EAAKxM,OACpB6vF,IACsB,aAAlBp+C,EAAKyrC,WACLzkB,EAAMzkE,KAAKy9C,GACXg+C,EAAOS,YAAcz+C,EAAK8C,SAEK,QAA9B9C,EAAOg+C,EAAOQ,cAKfR,EAAOS,YAAcz3B,EAAM3G,MAC3BrgB,EAAOg+C,EAAOQ,YAItB,GAAkB,SAAdzjF,EAAKvX,KAAiB,CACtB,MAAMuX,EAAOhX,KAAK+lG,UAAUwB,qBAAqBvnG,KAAKF,SACtDkX,EAAKouF,gBAAgBnpD,EAAK0+C,iBAC1B36F,KAAKqnG,QAAQ7oG,KAAKwY,QAGlBhX,KAAKqnG,QAAQ7oG,QAAQwB,KAAK+lG,UAAUyB,2BAA2BvrD,EAAMjlC,EAAKhF,KAAMgF,EAAKO,QAASvX,KAAKF,UAEvGq6F,SA/BIn6F,KAAKqnG,QAAQ7oG,UAAK2M,GAClBgvF,IAoCR,OAJI,OACAn3F,SAASykG,UAAU3lE,GACnBu9D,eAAeqI,QAAQ5lE,IAEpBA,6FCxGf,MAAM6lE,EAAS7mG,OAAO8mG,cAClBA,aAAaC,aAAa,WAAY,CAAEC,WAAa76C,GAAMA,IACzD86C,EAAgB,IAAI,QAKnB,MAAMC,EACTt8D,YAAYn0B,EAAS0b,EAAQxzB,EAAMsmG,GAC/B/lG,KAAKuX,QAAUA,EACfvX,KAAKizB,OAASA,EACdjzB,KAAKP,KAAOA,EACZO,KAAK+lG,UAAYA,EAKrBkC,UACI,MAAMtjE,EAAI3kC,KAAKuX,QAAQhZ,OAAS,EAChC,IAAI0M,EAAO,GACPi9F,GAAmB,EACvB,IAAK,IAAI5pG,EAAI,EAAGA,EAAIqmC,EAAGrmC,IAAK,CACxB,MAAM2uD,EAAIjtD,KAAKuX,QAAQjZ,GAkBjB6pG,EAAcl7C,EAAEm7C,YAAY,WAIlCF,GAAoBC,GAAe,GAAKD,KACG,IAAvCj7C,EAAErmD,QAAQ,SAAOuhG,EAAc,GAInC,MAAME,EAAiB,UAA4Bp7C,GAO/ChiD,GANmB,OAAnBo9F,EAMQp7C,GAAKi7C,EAAmBH,EAAgB,KAMxC96C,EAAElrB,OAAO,EAAGsmE,EAAe79F,OAAS69F,EAAe,GACvDA,EAAe,GAAK,KAAuBA,EAAe,GAC1D,KAIZ,OADAp9F,GAAQjL,KAAKuX,QAAQotB,GACd15B,EAEXuwF,qBACI,MAAMj2F,EAAWvC,SAASqhB,cAAc,YACxC,IAAI3a,EAAQ1J,KAAKioG,UASjB,YARe98F,IAAXw8F,IAKAj+F,EAAQi+F,EAAOG,WAAWp+F,IAE9BnE,EAAS+7B,UAAY53B,EACdnE,uNC1FR,MAAM+iG,EAAS,SAASvgE,OAAOvlC,KAAKolD,UAAUl4C,MAAM,OAK9C64F,EAAa,UAAOD,UACpBE,EAAc,IAAI1zD,OAAO,GAAGwzD,KAAUC,KAItCE,EAAuB,QAI7B,MAAMC,EACTh9D,YAAYzsB,EAAQ1W,GAChBvI,KAAKkX,MAAQ,GACblX,KAAKuI,QAAUA,EACf,MAAMyxF,EAAgB,GAChB/2B,EAAQ,GAERg3B,EAASj3F,SAASk3F,iBAAiB3xF,EAAQw2C,QAAS,IAAkD,MAAM,GAIlH,IAAI4pD,EAAgB,EAChBn+F,GAAS,EACT2vF,EAAY,EAChB,MAAM,QAAE5iF,EAAS0b,QAAQ,OAAE10B,IAAa0gB,EACxC,KAAOk7E,EAAY57F,GAAQ,CACvB,MAAM09C,EAAOg+C,EAAOQ,WACpB,GAAa,OAATx+C,GASJ,GADAzxC,IACsB,IAAlByxC,EAAK2kC,SAAwC,CAC7C,GAAI3kC,EAAK2sD,gBAAiB,CACtB,MAAMzvC,EAAald,EAAKkd,YAClB,OAAE56D,GAAW46D,EAMnB,IAAIpT,EAAQ,EACZ,IAAK,IAAIznD,EAAI,EAAGA,EAAIC,EAAQD,IACpBuqG,EAAS1vC,EAAW76D,GAAG0T,KAAMy2F,IAC7B1iD,IAGR,KAAOA,KAAU,GAAG,CAGhB,MAAM+iD,EAAgBvxF,EAAQ4iF,GAExBnoF,EAAO+2F,EAAuBp0F,KAAKm0F,GAAe,GAMlDE,EAAsBh3F,EAAK2oC,cAAgB8tD,EAC3CQ,EAAiBhtD,EAAKitD,aAAaF,GACzC/sD,EAAKohC,gBAAgB2rB,GACrB,MAAMG,EAAUF,EAAe9qG,MAAMqqG,GACrCxoG,KAAKkX,MAAM1Y,KAAK,CAAEiB,KAAM,YAAa+K,MAAAA,EAAOwH,KAAAA,EAAMuF,QAAS4xF,IAC3DhP,GAAagP,EAAQ5qG,OAAS,GAGjB,aAAjB09C,EAAKxW,UACLw9B,EAAMzkE,KAAKy9C,GACXg+C,EAAOS,YAAcz+C,EAAK8C,cAG7B,GAAsB,IAAlB9C,EAAK2kC,SAAqC,CAC/C,MAAMz/E,EAAO86C,EAAK96C,KAClB,GAAIA,EAAKyF,QAAQ0hG,IAAW,EAAG,CAC3B,MAAMj6E,EAAS4tB,EAAKioB,WACd3sD,EAAUpW,EAAKhD,MAAMqqG,GACrBxvE,EAAYzhB,EAAQhZ,OAAS,EAGnC,IAAK,IAAID,EAAI,EAAGA,EAAI06B,EAAW16B,IAAK,CAChC,IAAI8qG,EACAn8C,EAAI11C,EAAQjZ,GAChB,GAAU,KAAN2uD,EACAm8C,EAASC,QAER,CACD,MAAMjwE,EAAQ2vE,EAAuBp0F,KAAKs4C,GAC5B,OAAV7zB,GAAkByvE,EAASzvE,EAAM,GAAIqvE,KACrCx7C,EAAIA,EAAEv9C,MAAM,EAAG0pB,EAAM5uB,OAAS4uB,EAAM,GAChCA,EAAM,GAAG1pB,MAAM,GAAI+4F,EAAqBlqG,QAAU66B,EAAM,IAEhEgwE,EAASpmG,SAASg6C,eAAeiQ,GAErC5+B,EAAOqtD,aAAa0tB,EAAQntD,GAC5Bj8C,KAAKkX,MAAM1Y,KAAK,CAAEiB,KAAM,OAAQ+K,QAASA,IAIlB,KAAvB+M,EAAQyhB,IACR3K,EAAOqtD,aAAa2tB,IAAgBptD,GACpC+9C,EAAcx7F,KAAKy9C,IAGnBA,EAAK96C,KAAOoW,EAAQyhB,GAGxBmhE,GAAanhE,QAGhB,GAAsB,IAAlBijB,EAAK2kC,SACV,GAAI3kC,EAAK96C,OAASmnG,EAAQ,CACtB,MAAMj6E,EAAS4tB,EAAKioB,WAKS,OAAzBjoB,EAAK0+C,iBAA4BnwF,IAAUm+F,IAC3Cn+F,IACA6jB,EAAOqtD,aAAa2tB,IAAgBptD,IAExC0sD,EAAgBn+F,EAChBxK,KAAKkX,MAAM1Y,KAAK,CAAEiB,KAAM,OAAQ+K,MAAAA,IAGP,OAArByxC,EAAKioD,YACLjoD,EAAK96C,KAAO,IAGZ64F,EAAcx7F,KAAKy9C,GACnBzxC,KAEJ2vF,QAEC,CACD,IAAI77F,GAAK,EACT,MAAmD,KAA3CA,EAAI29C,EAAK96C,KAAKyF,QAAQ0hG,EAAQhqG,EAAI,KAKtC0B,KAAKkX,MAAM1Y,KAAK,CAAEiB,KAAM,OAAQ+K,OAAQ,IACxC2vF,UAjHRF,EAAOS,YAAcz3B,EAAM3G,MAuHnC,IAAK,MAAMttC,KAAKgrE,EACZhrE,EAAEk1C,WAAWj9B,YAAYjY,IAIrC,MAAM65E,EAAW,CAACvpG,EAAKgqG,KACnB,MAAM9+F,EAAQlL,EAAIf,OAAS+qG,EAAO/qG,OAClC,OAAOiM,GAAS,GAAKlL,EAAIoQ,MAAMlF,KAAW8+F,GAEjCC,EAAwBvyF,IAAyB,IAAhBA,EAAKxM,MAGtC6+F,EAAe,IAAMrmG,SAASwmG,cAAc,IA2B5CT,EAEb,6cCnKO,MAAM,EAA2B,IAjCjC,MAUHvB,2BAA2Bj/F,EAASyJ,EAAMuF,EAASzX,GAC/C,MAAMykE,EAASvyD,EAAK,GACpB,MAAe,MAAXuyD,EACkB,IAAI,IAAkBh8D,EAASyJ,EAAKtC,MAAM,GAAI6H,GAC/CL,MAEN,MAAXqtD,EACO,CAAC,IAAI,KAAUh8D,EAASyJ,EAAKtC,MAAM,GAAI5P,EAAQwiG,eAE3C,MAAX/9B,EACO,CAAC,IAAI,KAAqBh8D,EAASyJ,EAAKtC,MAAM,GAAI6H,IAE3C,IAAI,KAAmBhP,EAASyJ,EAAMuF,GACvCL,MAMrBqwF,qBAAqBznG,GACjB,OAAO,IAAI,KAASA,uFCFN,oBAAXgB,SACNA,OAAwB,kBAAMA,OAAwB,gBAAI,KAAKtC,KAAK,SAMlE,MAAMyM,EAAO,CAACsM,KAAY0b,IAAW,IAAI,IAAe1b,EAAS0b,EAAQ,OAAQ,KCnDpFw2E,yBAA2B,GCD3BC,SDIJ,SAASC,oBAAoBC,GAE5B,IAAIC,EAAeJ,yBAAyBG,GAC5C,QAAqBz+F,IAAjB0+F,EACH,OAAOA,EAAajiE,QAGrB,IAAID,EAAS8hE,yBAAyBG,GAAY,CACjDhxD,GAAIgxD,EACJl6E,QAAQ,EACRkY,QAAS,IAUV,OANAkiE,oBAAoBF,GAAU5/D,KAAKrC,EAAOC,QAASD,EAAQA,EAAOC,QAAS+hE,qBAG3EhiE,EAAOjY,QAAS,EAGTiY,EAAOC,QAIf+hE,oBAAoBljG,EAAIqjG,oBC5BpBJ,SAAW,GACfC,oBAAoBjgE,EAAI,SAASzqB,EAAQ8qF,EAAUnqG,EAAIoqG,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAej1F,EAAAA,EACnB,IAAS1W,EAAI,EAAGA,EAAIorG,SAASnrG,OAAQD,IAAK,CACrCyrG,EAAWL,SAASprG,GAAG,GACvBsB,EAAK8pG,SAASprG,GAAG,GACjB0rG,EAAWN,SAASprG,GAAG,GAE3B,IAJA,IAGI4rG,GAAY,EACP79D,EAAI,EAAGA,EAAI09D,EAASxrG,OAAQ8tC,MACpB,EAAX29D,GAAsBC,GAAgBD,IAAanmG,OAAOuwB,KAAKu1E,oBAAoBjgE,GAAGhC,OAAM,SAASc,GAAO,OAAOmhE,oBAAoBjgE,EAAElB,GAAKuhE,EAAS19D,OAC3J09D,EAAS5wD,OAAO9M,IAAK,IAErB69D,GAAY,EACTF,EAAWC,IAAcA,EAAeD,IAG7C,GAAGE,EAAW,CACbR,SAASvwD,OAAO76C,IAAK,GACrB,IAAImY,EAAI7W,SACEuL,IAANsL,IAAiBwI,EAASxI,IAGhC,OAAOwI,EAzBN+qF,EAAWA,GAAY,EACvB,IAAI,IAAI1rG,EAAIorG,SAASnrG,OAAQD,EAAI,GAAKorG,SAASprG,EAAI,GAAG,GAAK0rG,EAAU1rG,IAAKorG,SAASprG,GAAKorG,SAASprG,EAAI,GACrGorG,SAASprG,GAAK,CAACyrG,EAAUnqG,EAAIoqG,ICJ/BL,oBAAoB36E,EAAI,SAAS2Y,GAChC,IAAIs6B,EAASt6B,GAAUA,EAAOwiE,WAC7B,WAAa,OAAOxiE,EAAgB,SACpC,WAAa,OAAOA,GAErB,OADAgiE,oBAAoBn1F,EAAEytD,EAAQ,CAAE5oC,EAAG4oC,IAC5BA,GCLR0nC,oBAAoBn1F,EAAI,SAASozB,EAASwiE,GACzC,IAAI,IAAI5hE,KAAO4hE,EACXT,oBAAoB9kB,EAAEulB,EAAY5hE,KAASmhE,oBAAoB9kB,EAAEj9C,EAASY,IAC5E3kC,OAAOC,eAAe8jC,EAASY,EAAK,CAAEyG,YAAY,EAAMntC,IAAKsoG,EAAW5hE,MCJ3EmhE,oBAAoBjyD,EAAI,WACvB,GAA0B,iBAAfD,WAAyB,OAAOA,WAC3C,IACC,OAAOz3C,MAAQ,IAAI22C,SAAS,cAAb,GACd,MAAOl1C,GACR,GAAsB,iBAAXX,OAAqB,OAAOA,QALjB,GCAxB6oG,oBAAoB9kB,EAAI,SAAShiB,EAAK36D,GAAQ,OAAOrE,OAAOH,UAAUi0C,eAAe3N,KAAK64B,EAAK36D,ICC/FyhG,oBAAoBlzF,EAAI,SAASmxB,GACX,oBAAXuJ,QAA0BA,OAAOmkD,aAC1CzxF,OAAOC,eAAe8jC,EAASuJ,OAAOmkD,YAAa,CAAE5rF,MAAO,WAE7D7F,OAAOC,eAAe8jC,EAAS,aAAc,CAAEl+B,OAAO,KCLvDigG,oBAAoBU,IAAM,SAAS1iE,GAGlC,OAFAA,EAAO2iE,MAAQ,GACV3iE,EAAOnE,WAAUmE,EAAOnE,SAAW,IACjCmE,cCER,IAAI4iE,EAAkB,CACrB,IAAK,GAaNZ,oBAAoBjgE,EAAE2C,EAAI,SAASm+D,GAAW,OAAoC,IAA7BD,EAAgBC,IAGrE,IAAIC,EAAuB,SAASC,EAA4BvpG,GAC/D,IAKIyoG,EAAUY,EALVT,EAAW5oG,EAAK,GAChBwpG,EAAcxpG,EAAK,GACnB6zF,EAAU7zF,EAAK,GAGI7C,EAAI,EAC3B,GAAGyrG,EAAS3+D,MAAK,SAASwN,GAAM,OAA+B,IAAxB2xD,EAAgB3xD,MAAe,CACrE,IAAIgxD,KAAYe,EACZhB,oBAAoB9kB,EAAE8lB,EAAaf,KACrCD,oBAAoBljG,EAAEmjG,GAAYe,EAAYf,IAGhD,GAAG5U,EAAS,IAAI/1E,EAAS+1E,EAAQ2U,qBAGlC,IADGe,GAA4BA,EAA2BvpG,GACrD7C,EAAIyrG,EAASxrG,OAAQD,IACzBksG,EAAUT,EAASzrG,GAChBqrG,oBAAoB9kB,EAAE0lB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBR,EAASzrG,IAAM,EAEhC,OAAOqrG,oBAAoBjgE,EAAEzqB,IAG1B2rF,EAAqBxzE,KAA8C,wCAAIA,KAA8C,yCAAK,GAC9HwzE,EAAmBviG,QAAQoiG,EAAqBlpG,KAAK,KAAM,IAC3DqpG,EAAmBpsG,KAAOisG,EAAqBlpG,KAAK,KAAMqpG,EAAmBpsG,KAAK+C,KAAKqpG,OC/CvF,IAAIC,oBAAsBlB,oBAAoB,MAC9CkB,oBAAsBlB,oBAAoBjgE,EAAEmhE","sources":["webpack://@internetarchive/bookreader/./src/dragscrollable-br.js","webpack://@internetarchive/bookreader/./src/BookReader/utils/classes.js","webpack://@internetarchive/bookreader/./src/BookReader/events.js","webpack://@internetarchive/bookreader/./src/BookReader/Navbar/Navbar.js","webpack://@internetarchive/bookreader/./src/BookReader/options.js","webpack://@internetarchive/bookreader/./src/BookReader/Toolbar/Toolbar.js","webpack://@internetarchive/bookreader/./src/BookReader/BookModel.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/directives/style-map.js","webpack://@internetarchive/bookreader/./src/BookReader/ModeSmoothZoom.js","webpack://@internetarchive/bookreader/./src/BookReader/utils/HTMLDimensionsCacher.js","webpack://@internetarchive/bookreader/./src/BookReader/Mode1UpLit.js","webpack://@internetarchive/bookreader/./src/BookReader/Mode1Up.js","webpack://@internetarchive/bookreader/./src/BookReader/Mode2Up.js","webpack://@internetarchive/bookreader/./src/BookReader/ModeThumb.js","webpack://@internetarchive/bookreader/./src/BookReader/ReduceSet.js","webpack://@internetarchive/bookreader/./src/BookReader/ImageCache.js","webpack://@internetarchive/bookreader/./src/BookReader.js","webpack://@internetarchive/bookreader/./src/BookReader/DebugConsole.js","webpack://@internetarchive/bookreader/./src/BookReader/PageContainer.js","webpack://@internetarchive/bookreader/./src/BookReader/utils.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/a-function.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/a-possible-prototype.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/add-to-unscopables.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/advance-string-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/an-instance.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/an-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-for-each.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-from.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-iteration.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-method-has-species-support.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-method-is-strict.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-reduce.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-sort.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-species-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-species-create.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/classof-raw.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/classof.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-property-descriptor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/date-to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/define-iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/descriptors.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/document-create-element.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/dom-iterables.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-ff-version.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-browser.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-ios.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-node.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-user-agent.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-v8-version.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-webkit-version.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/enum-bug-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/export.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/fails.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/flatten-into-array.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/freezing.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/function-bind-context.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/function-bind.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-built-in.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-iterator-method.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-substitution.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/global.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/has.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/hidden-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/host-report-errors.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/html.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/ie8-dom-define.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/indexed-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/inherit-if-required.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/inspect-source.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/internal-metadata.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/internal-state.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-array.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-pure.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-regexp.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterate.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterator-close.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterators-core.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterators.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/math-sign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/microtask.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-promise-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-weak-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/new-promise-capability.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/not-a-regexp.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-create.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-define-properties.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-define-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-keys-internal.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-to-array.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/own-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/path.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/perform.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/promise-resolve.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/redefine-all.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/redefine.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-exec-abstract.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-exec.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-flags.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-unsupported-dot-all.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-unsupported-ncg.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/require-object-coercible.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/same-value.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/set-global.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/set-species.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/set-to-string-tag.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared-key.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared-store.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/species-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-multibyte.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-repeat.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/task.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/this-number-value.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-absolute-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-indexed-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-integer.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-length.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-property-key.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-string-tag-support.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/uid.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/well-known-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/whitespaces.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.concat.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.filter.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.find-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.find.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.flat-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.from.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.join.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.reduce.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.slice.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.sort.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.splice.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.date.to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.function.name.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.json.to-string-tag.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.math.log2.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.math.sign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.math.to-string-tag.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.number.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.number.to-fixed.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.freeze.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.values.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.promise.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.construct.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.get.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.exec.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.replace.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.search.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.split.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.description.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url-search-params.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js","webpack://@internetarchive/bookreader/./node_modules/hammerjs/hammer.js","webpack://@internetarchive/bookreader/./node_modules/jquery-colorbox/jquery.colorbox.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui-touch-punch/jquery.ui.touch-punch.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/effect.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/ie.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/keycode.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/version.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/widget.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/widgets/mouse.js","webpack://@internetarchive/bookreader/./node_modules/jquery-ui/ui/widgets/slider.js","webpack://@internetarchive/bookreader/./node_modules/regenerator-runtime/runtime.js","webpack://@internetarchive/bookreader/external \"jQuery\"","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/modify-template.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/shady-render.js","webpack://@internetarchive/bookreader/./node_modules/lit-element/lib/updating-element.js","webpack://@internetarchive/bookreader/./node_modules/lit-element/lib/decorators.js","webpack://@internetarchive/bookreader/./node_modules/lit-element/lib/css-tag.js","webpack://@internetarchive/bookreader/./node_modules/lit-element/lit-element.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/directive.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/dom.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/part.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/parts.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/render.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/template-factory.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/template-instance.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/template-result.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/template.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lib/default-template-processor.js","webpack://@internetarchive/bookreader/./node_modules/lit-html/lit-html.js","webpack://@internetarchive/bookreader/webpack/bootstrap","webpack://@internetarchive/bookreader/webpack/runtime/chunk loaded","webpack://@internetarchive/bookreader/webpack/runtime/compat get default export","webpack://@internetarchive/bookreader/webpack/runtime/define property getters","webpack://@internetarchive/bookreader/webpack/runtime/global","webpack://@internetarchive/bookreader/webpack/runtime/hasOwnProperty shorthand","webpack://@internetarchive/bookreader/webpack/runtime/make namespace object","webpack://@internetarchive/bookreader/webpack/runtime/node module decorator","webpack://@internetarchive/bookreader/webpack/runtime/jsonp chunk loading","webpack://@internetarchive/bookreader/webpack/startup"],"sourcesContent":["/*\n * jQuery dragscrollable Plugin\n * version: 1.0 (25-Jun-2009)\n * Copyright (c) 2009 Miquel Herrera\n *\n * Portions Copyright (c) 2010 Reg Braithwaite\n * Copyright (c) 2010 Internet Archive / Michael Ang\n * Copyright (c) 2016 Internet Archive / Richard Caceres\n *\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * Modified by richard@archive.org 2016\n * - Added check to disable on touch enabled devices\n * - Change dragend handler to bind using event \"capturing\" instead of \"bubbling\"\n */\n(function($) { // secure $ jQuery alias\n\n /**\n * Adds the ability to manage elements scroll by dragging\n * one or more of its descendant elements. Options parameter\n * allow to specifically select which inner elements will\n * respond to the drag events.\n *\n * options properties:\n * ------------------------------------------------------------------------\n * dragSelector | jquery selector to apply to each wrapped element\n * | to find which will be the dragging elements.\n * | Defaults to '>:first' which is the first child of\n * | scrollable element\n * ------------------------------------------------------------------------\n * acceptPropagatedEvent| Will the dragging element accept propagated\n *\t | events? default is yes, a propagated mouse event\n *\t | on a inner element will be accepted and processed.\n *\t | If set to false, only events originated on the\n *\t | draggable elements will be processed.\n * ------------------------------------------------------------------------\n * preventDefault | Prevents the event to propagate further effectivey\n * | disabling other default actions. Defaults to true\n * ------------------------------------------------------------------------\n * scrollWindow | Scroll the window rather than the element\n * | Defaults to false\n * ------------------------------------------------------------------------\n *\n * usage examples:\n *\n * To add the scroll by drag to the element id=viewport when dragging its\n * first child accepting any propagated events\n *\t$('#viewport').dragscrollable();\n *\n * To add the scroll by drag ability to any element div of class viewport\n * when dragging its first descendant of class dragMe responding only to\n * evcents originated on the '.dragMe' elements.\n *\t$('div.viewport').dragscrollable({dragSelector:'.dragMe:first',\n *\t\t\t\t\t\t\t\t\t acceptPropagatedEvent: false});\n *\n * Notice that some 'viewports' could be nested within others but events\n * would not interfere as acceptPropagatedEvent is set to false.\n *\n */\n\n var append_namespace = function (string_of_events, ns) {\n\n /* IE doesn't have map\n\treturn string_of_events\n\t\t.split(' ')\n\t\t\t.map(function (name) { return name + ns; })\n\t\t\t\t.join(' ');\n */\n var pieces = string_of_events.split(' ');\n var ret = new Array();\n for (var i = 0; i < pieces.length; i++) {\n ret.push(pieces[i] + ns);\n }\n return ret.join(' ');\n };\n\n var left_top = function(event) {\n\n var x;\n var y;\n if (typeof(event.clientX) != 'undefined') {\n x = event.clientX;\n y = event.clientY;\n }\n else if (typeof(event.screenX) != 'undefined') {\n x = event.screenX;\n y = event.screenY;\n }\n else if (typeof(event.targetTouches) != 'undefined') {\n x = event.targetTouches[0].pageX;\n y = event.targetTouches[0].pageY;\n }\n else if (typeof(event.originalEvent) == 'undefined') {\n var str = '';\n for (const i in event) {\n str += ', ' + i + ': ' + event[i];\n }\n console.error(\"don't understand x and y for \" + event.type + ' event: ' + str);\n }\n else if (typeof(event.originalEvent.clientX) != 'undefined') {\n x = event.originalEvent.clientX;\n y = event.originalEvent.clientY;\n }\n else if (typeof(event.originalEvent.screenX) != 'undefined') {\n x = event.originalEvent.screenX;\n y = event.originalEvent.screenY;\n }\n else if (typeof(event.originalEvent.targetTouches) != 'undefined') {\n x = event.originalEvent.targetTouches[0].pageX;\n y = event.originalEvent.targetTouches[0].pageY;\n }\n\n return {left: x, top:y};\n };\n\n $.fn.dragscrollable = function( options ) {\n\n var handling_element = $(this);\n\n var settings = $.extend(\n {\n dragSelector:'>:first',\n acceptPropagatedEvent: true,\n preventDefault: true,\n dragstart: 'mousedown touchstart',\n dragcontinue: 'mousemove touchmove',\n dragend: 'mouseup touchend', // mouseleave\n dragMinDistance: 5,\n namespace: '.ds',\n scrollWindow: false,\n },options || {});\n\n settings.dragstart = append_namespace(settings.dragstart, settings.namespace);\n settings.dragcontinue = append_namespace(settings.dragcontinue, settings.namespace);\n //settings.dragend = append_namespace(settings.dragend, settings.namespace);\n\n var shouldAbort = function() {\n var isTouchDevice = !!('ontouchstart' in window) || !!('msmaxtouchpoints' in window.navigator);\n return isTouchDevice;\n };\n\n var dragContinueHandlerProxy;\n\n var dragscroll = {\n dragStartHandler : function(event) {\n if (shouldAbort()) { return true; }\n\n // mousedown, left click, check propagation\n if (event.which > 1 ||\n\t\t\t\t(!event.data.acceptPropagatedEvent && event.target != this)) {\n return false;\n }\n\n event.data.firstCoord = left_top(event);\n // Initial coordinates will be the last when dragging\n event.data.lastCoord = event.data.firstCoord;\n\n handling_element\n .bind(settings.dragcontinue, event.data, dragscroll.dragContinueHandler)\n //.bind(settings.dragend, event.data, dragscroll.dragEndHandler)\n ;\n\n // Note, we bind using addEventListener so we can use \"capture\" binding\n // instead of \"bubble\" binding\n dragContinueHandlerProxy = function(e) {\n e.data = event.data;\n dragscroll.dragEndHandler(e);\n };\n $.each(settings.dragend.split(' '), function(idx, val) {\n handling_element.get(0).addEventListener(val, dragContinueHandlerProxy, true);\n });\n\n if (event.data.preventDefault) {\n event.preventDefault();\n return false;\n }\n },\n dragContinueHandler : function(event) { // User is dragging\n // console.log('drag continue');\n if (shouldAbort()) { return true; }\n\n var lt = left_top(event);\n\n // How much did the mouse move?\n var delta = {left: (lt.left - event.data.lastCoord.left),\n top: (lt.top - event.data.lastCoord.top)};\n\n var scrollTarget = event.data.scrollable;\n if (event.data.scrollWindow) {\n scrollTarget = $(window);\n }\n // Set the scroll position relative to what ever the scroll is now\n scrollTarget.scrollLeft( scrollTarget.scrollLeft() - delta.left );\n scrollTarget.scrollTop(\tscrollTarget.scrollTop() - delta.top );\n\n // Save where the cursor is\n event.data.lastCoord = lt;\n\n if (event.data.preventDefault) {\n event.preventDefault();\n return false;\n }\n },\n dragEndHandler : function(event) { // Stop scrolling\n //console.log('dragEndHandler');\n\n if (shouldAbort()) { return true; }\n\n handling_element\n .unbind(settings.dragcontinue)\n // Note, for some reason, even though I removeEventListener below,\n // this call to unbind is still necessary. I don't know why.\n .unbind(settings.dragend)\n ;\n\n // Note, we bind using addEventListener so we can use \"capture\" binding\n // instead of \"bubble\" binding\n $.each(settings.dragend.split(' '), function(idx, val) {\n handling_element.get(0).removeEventListener(val, dragContinueHandlerProxy, true);\n });\n\n // How much did the mouse move total?\n var delta = {left: Math.abs(event.data.lastCoord.left - event.data.firstCoord.left),\n top: Math.abs(event.data.lastCoord.top - event.data.firstCoord.top)};\n var distance = Math.max(delta.left, delta.top);\n\n // Allow event to propagate if min distance was not achieved\n if (event.data.preventDefault && distance > settings.dragMinDistance) {\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n return false;\n }\n }\n };\n\n // set up the initial events\n return this.each(function() {\n // closure object data for each scrollable element\n var data = {scrollable : $(this),\n acceptPropagatedEvent : settings.acceptPropagatedEvent,\n preventDefault : settings.preventDefault,\n scrollWindow : settings.scrollWindow };\n // Set mouse initiating event on the desired descendant\n $(this).find(settings.dragSelector).\n bind(settings.dragstart, data, dragscroll.dragStartHandler);\n });\n }; //end plugin dragscrollable\n\n // Note, this probably doesn't work anymore with our modifications - Nov/8/2016\n $.fn.removedragscrollable = function (namespace) {\n if (typeof(namespace) == 'undefined')\n namespace = '.ds';\n return this.each(function() {\n $(document).find('*').andSelf().unbind(namespace);\n });\n };\n\n})( jQuery ); // confine scope\n","/**\n * Exposes a function from one class (FromClass) to another (ToClass), in such a way\n * that if the ToClass's method is overridden, the FromClass's method is also overridden.\n * WARNING: This modifies FromClass' prototype! So FromClasses cannot be shared between\n * different ToClasses.\n * @param {new () => TFrom} FromClass the class to get the method from\n * @param {keyof TFrom} fromMethod the method's name in FromClass\n * @param {function(TFrom): TTo} fromTransform how to get the TTo `this` to use when setting the method on TFrom\n * @param {new () => TTo} ToClass the class to add the method to\n * @param {string} toMethod the name of the method to add to TTo (likely will be equal to fromMethod)\n * @param {function(TTo): TFrom} toTransform how to get the TFrom this to use when calling the new method\n * @template TFrom type of FromClass for type-checking/autocomplete\n * @template TTo type of ToClass for type-checking/autocomplete\n */\nexport function exposeOverrideable(FromClass, fromMethod, fromTransform, ToClass, toMethod, toTransform) {\n // Wrapper function needed to \"capture\" the current version of fromMethod\n let wrapper = (fn => {\n return function () {\n return fn.apply(toTransform(this), arguments);\n };\n })(FromClass.prototype[fromMethod]);\n\n Object.defineProperty(ToClass.prototype, toMethod, {\n get() { return wrapper; },\n set(overrideFn) {\n // overrideFn expects `this` to be ToClass, so ensure as such\n // But we can also call this method from FromClass; need to ensure\n // it's always called with a ToClass\n FromClass.prototype[fromMethod] = function () {\n const newThis = this instanceof FromClass ? fromTransform(this) : this;\n return overrideFn.apply(newThis, arguments);\n };\n wrapper = overrideFn;\n }\n });\n}\n","/** @enum {string} */\nexport const EVENTS = {\n /** Indicates that the fragment (a serialization of the reader\n * state) has changed. */\n fragmentChange: 'fragmentChange',\n PostInit: 'PostInit',\n stop: 'stop',\n resize: 'resize',\n // nav events:\n navToggled: 'navToggled',\n // menu click events\n fullscreenToggled: 'fullscreenToggled',\n zoomOut: 'zoomOut',\n zoomIn: 'zoomIn',\n '1PageViewSelected': '1PageViewSelected',\n '2PageViewSelected': '2PageViewSelected',\n /* currently 3 represents thumbnail view */\n '3PageViewSelected': '3PageViewSelected',\n mobileNavOpen: 'mobileNavOpen',\n};\n","/** @typedef {import(\"../../BookReader.js\").default} BookReader */\n\nimport 'jquery-ui/ui/widget.js';\nimport 'jquery-ui/ui/widgets/mouse.js';\nimport 'jquery-ui/ui/widgets/slider.js';\nimport { EVENTS } from '../events.js';\n\nexport class Navbar {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n\n /** @type {JQuery} */\n this.$root = null;\n /** @type {JQuery} */\n this.$nav = null;\n /** @type {number} */\n this.maxPageNum = null;\n\n /** @type {Object} controls will be switch over \"this.maximumControls\" */\n this.minimumControls = [\n 'viewmode'\n ];\n /** @type {Object} controls will be switch over \"this.minimumControls\" */\n this.maximumControls = [\n 'book_left', 'book_right', 'zoom_in', 'zoom_out', 'onepg', 'twopg', 'thumb'\n ];\n }\n\n controlFor(controlName) {\n const option = this.br.options.controls[controlName];\n if (!option.visible) { return ''; }\n if (option.template) {\n return `<li>${option.template(this.br)}</li>`;\n }\n return `<li>\n <button class=\"BRicon ${option.className}\" title=\"${option.label}\">\n <div class=\"icon icon-${option.iconClassName}\"></div>\n <span class=\"tooltip\">${option.label}</span>\n </button>\n </li>`;\n }\n\n /** @private */\n _renderControls() {\n return [\n 'bookLeft',\n 'bookRight',\n 'onePage',\n 'twoPage',\n 'thumbnail',\n 'viewmode',\n 'zoomOut',\n 'zoomIn',\n 'fullScreen',\n ].map((mode) => (\n this.controlFor(mode)\n )).join('');\n }\n\n /** @private */\n _bindViewModeButton() {\n const { br } = this;\n const viewModeOptions = br.options.controls.viewmode;\n const viewModes = [{\n mode: br.constMode1up,\n className: 'onepg',\n title: 'One-page view',\n }, {\n mode: br.constMode2up,\n className: 'twopg',\n title: 'Two-page view',\n }, {\n mode: br.constModeThumb,\n className: 'thumb',\n title: 'Thumbnail view',\n }].filter((mode) => (\n !viewModeOptions.excludedModes.includes(mode.mode)\n ));\n const viewModeOrder = viewModes.map((m) => m.mode);\n\n if (viewModeOptions.excludedModes.includes(br.mode)) {\n br.switchMode(viewModeOrder[0]);\n }\n\n // Reorder the viewModeOrder so the current view mode is at the end\n const currentModeIndex = viewModeOrder.indexOf(br.mode);\n for (let i = 0; i <= currentModeIndex; i++) {\n viewModeOrder.push(viewModeOrder.shift());\n }\n\n if (viewModes.length < 2) {\n this.$nav.find(`.${viewModeOptions.className}`).remove();\n }\n\n this.br.bind(EVENTS.PostInit, () => {\n const $button = this.$nav.find(`.${viewModeOptions.className}`)\n .off('.bindNavigationHandlers')\n .on('click', (e) => {\n const nextModeID = viewModeOrder.shift();\n const newViewMode = viewModes.find((m) => m.mode === nextModeID);\n const nextViewMode = viewModes.find((m) => m.mode === viewModeOrder[0]);\n\n viewModeOrder.push(nextModeID);\n br.viewModeOrder = viewModeOrder;\n this.updateViewModeButton($(e.currentTarget), nextViewMode.className, nextViewMode.title);\n br.switchMode(newViewMode.mode);\n });\n const currentViewModeButton = viewModes.find((m) => m.mode === viewModeOrder[0]);\n this.updateViewModeButton(\n $button,\n currentViewModeButton.className,\n currentViewModeButton.title\n );\n });\n }\n\n /**\n * Toggle viewmode button to change page view\n */\n updateViewModeButton($button, iconClass, tooltipText) {\n $button\n .attr('title', tooltipText)\n .find('.icon')\n .removeClass()\n .addClass(`icon icon-${iconClass}`)\n .end()\n .find('.tooltip')\n .text(tooltipText);\n }\n\n /**\n * Switch navbar controls on mobile and desktop\n */\n switchNavbarControls() {\n // we don't want navbar controls switching with liner-notes\n if (this.br.options.bookType !== 'linerNotes') {\n if (this.br.refs.$brContainer.prop('clientWidth') < 640) {\n this.showMinimumNavbarControls();\n } else {\n this.showMaximumNavbarControls();\n }\n }\n }\n\n /**\n * Switch Book Navbar controls to minimised\n * NOTE: only `this.minimumControls` and `this.maximumControls` switch on resize\n */\n showMinimumNavbarControls() {\n this.minimumControls.forEach((control) => {\n const element = document.querySelector(`.controls .${control}`);\n if (element) element.classList.remove('hide');\n });\n this.maximumControls.forEach((control) => {\n const element = document.querySelector(`.controls .${control}`);\n if (element) element.classList.add('hide');\n });\n }\n\n /**\n * Switch Book Navbar controls to maximized\n * NOTE: only `this.minimumControls` and `this.maximumControls` switch on resize\n */\n showMaximumNavbarControls() {\n this.maximumControls.forEach((control) => {\n const element = document.querySelector(`.controls .${control}`);\n if (element) element.classList.remove('hide');\n });\n this.minimumControls.forEach((control) => {\n const element = document.querySelector(`.controls .${control}`);\n if (element) element.classList.add('hide');\n });\n }\n\n /**\n * Initialize the navigation bar (bottom)\n * @return {JQuery}\n */\n init() {\n const { br } = this;\n const { navbarTitle: title } = br.options;\n const isRTL = br.pageProgression === 'rl';\n const bookFlipLeft = isRTL ? 'book_flip_next' : 'book_flip_prev';\n const bookFlipRight = isRTL ? 'book_flip_prev' : 'book_flip_next';\n\n this.br.options.controls['bookLeft'].className = `book_left ${bookFlipLeft}`;\n this.br.options.controls['bookRight'].className = `book_right ${bookFlipRight}`;\n\n br.refs.$BRfooter = this.$root = $(`<div class=\"BRfooter\"></div>`);\n br.refs.$BRnav = this.$nav = $(\n `<div class=\"BRnav BRnavDesktop\">\n ${title ? `<div class=\"BRnavTitle\">${title}</div>` : ''}\n <nav class=\"BRcontrols\">\n <ul class=\"controls\">\n <li class=\"scrubber\">\n <div class=\"BRnavpos\">\n <div class=\"BRpager\"></div>\n <div class=\"BRnavline\"></div>\n </div>\n <p><span class='BRcurrentpage'></span></p>\n </li>\n ${this._renderControls()}\n </ul>\n </nav>\n </div>`);\n\n this.$root.append(this.$nav);\n br.refs.$br.append(this.$root);\n\n const $slider = this.$root.find('.BRpager').slider({\n animate: true,\n min: 0,\n max: br.getNumLeafs() - 1,\n value: br.currentIndex(),\n range: \"min\"\n });\n\n $slider.on('slide', (event, ui) => {\n this.updateNavPageNum(ui.value);\n return true;\n });\n\n $slider.on('slidechange', (event, ui) => {\n this.updateNavPageNum(ui.value);\n // recursion prevention for jumpToIndex\n if ($slider.data('swallowchange')) {\n $slider.data('swallowchange', false);\n } else {\n br.jumpToIndex(ui.value);\n }\n return true;\n });\n\n br.options.controls.viewmode.visible && this._bindViewModeButton();\n this.updateNavPageNum(br.currentIndex());\n\n return this.$nav;\n }\n\n /**\n * Initialize the navigation bar when embedded\n */\n initEmbed() {\n const { br } = this;\n // IA-specific\n const thisLink = (window.location + '')\n .replace('?ui=embed','')\n .replace('/stream/', '/details/')\n .replace('#', '/');\n const logoHtml = br.showLogo ? `<a class=\"logo\" href=\"${br.logoURL}\" target=\"_blank\"></a>` : '';\n\n br.refs.$BRfooter = this.$root = $('<div class=\"BRfooter\"></div>');\n br.refs.$BRnav = this.$nav = $(\n `<div class=\"BRnav BRnavEmbed\">\n ${logoHtml}\n <span class=\"BRembedreturn\">\n <a href=\"${thisLink}\" target=\"_blank\">${br.bookTitle}</a>\n </span>\n <span class=\"BRtoolbarbuttons\">\n <button class=\"BRicon book_left\"></button>\n <button class=\"BRicon book_right\"></button>\n <button class=\"BRicon full\"></button>\n </span>\n </div>`);\n this.$root.append(this.$nav);\n br.refs.$br.append(this.$root);\n }\n\n /**\n * Returns the textual representation of the current page for the navbar\n * @param {number} index\n * @return {string}\n */\n getNavPageNumString(index) {\n const { br } = this;\n // Accessible index starts at 0 (alas) so we add 1 to make human\n const pageNum = br.getPageNum(index);\n const pageType = br.getPageProp(index, 'pageType');\n const numLeafs = br.getNumLeafs();\n\n if (!this.maxPageNum) {\n // Calculate Max page num (used for pagination display)\n let maxPageNum = 0;\n let pageNumVal;\n for (let i = 0; i < numLeafs; i++) {\n pageNumVal = br.getPageNum(i);\n if (!isNaN(pageNumVal) && pageNumVal > maxPageNum) {\n maxPageNum = pageNumVal;\n }\n }\n this.maxPageNum = maxPageNum;\n }\n\n return getNavPageNumHtml(index, numLeafs, pageNum, pageType, this.maxPageNum);\n }\n\n /**\n * Renders the navbar string to the DOM\n * @param {number} index\n */\n updateNavPageNum(index) {\n this.$root.find('.BRcurrentpage').html(this.getNavPageNumString(index));\n }\n\n /**\n * Update the nav bar display - does not cause navigation.\n * @param {number} index\n */\n updateNavIndex(index) {\n // We want to update the value, but normally moving the slider\n // triggers jumpToIndex which triggers this method\n index = index !== undefined ? index : this.br.currentIndex();\n this.$root.find('.BRpager').data('swallowchange', true).slider('value', index);\n }\n}\n\n/**\n * Renders the html for the page string\n * @param {number} index\n * @param {number} numLeafs\n * @param {number|string} pageNum\n * @param {*} pageType @deprecated\n * @param {number} maxPageNum\n * @return {string}\n */\nexport function getNavPageNumHtml(index, numLeafs, pageNum, pageType, maxPageNum) {\n const pageIsAsserted = pageNum[0] != 'n';\n\n if (!pageIsAsserted) {\n const pageIndex = index + 1;\n return `(${pageIndex} of ${numLeafs})`; // Page (8 of 10)\n }\n\n const bookLengthLabel = maxPageNum ? ` of ${maxPageNum}` : '';\n return `${pageNum}${bookLengthLabel}`;\n}\n","/** @typedef {import('./BookModel.js').PageNumString} PageNumString */\n/** @typedef {import('./BookModel.js').LeafNum} LeafNum */\n\nexport const DEFAULT_OPTIONS = {\n /**\n * @type {string} A string, such as \"mode/1up\". See\n * http://openlibrary.org/dev/docs/bookurls for valid syntax\n */\n defaults: null,\n\n /** Padding in 1up */\n padding: 10,\n\n /** @type {'full' | 'embed' | 'responsive'} UI mode */\n ui: 'full',\n\n /** Controls whether nav/toolbar will autohide */\n uiAutoHide: false,\n\n /** thumbnail mode */\n /** number of rows to pre-cache out a view */\n thumbRowBuffer: 1,\n thumbColumns: 6,\n /** number of thumbnails to load at once */\n thumbMaxLoading: 4,\n /** spacing between thumbnails */\n thumbPadding: 10,\n\n /** @type {number | 'fast' | 'slow'} speed for flip animation */\n flipSpeed: 'fast',\n\n showToolbar: true,\n showNavbar: true,\n navBarTitle: '',\n\n showLogo: true,\n /** Where the logo links to */\n logoURL: 'https://archive.org',\n\n /**\n * Base URL for UI images - should be overridden (before init) by\n * custom implementations.\n * $$$ This is the same directory as the images referenced by relative\n * path in the CSS. Would be better to automagically find that path.\n */\n imagesBaseURL: '/BookReader/images/',\n\n /** @type {'pow2' | 'integer'} What reduces are valid for getURI. */\n reduceSet: 'pow2',\n\n /**\n * Zoom levels\n * @type {ReductionFactor[]}\n * $$$ provide finer grained zooming, {reduce: 8, autofit: null}, {reduce: 16, autofit: null}\n * The autofit code ensures that fit to width and fit to height will be available\n */\n reductionFactors: [\n {reduce: 0.25, autofit: null},\n {reduce: 0.5, autofit: null},\n {reduce: 1, autofit: null},\n {reduce: 2, autofit: null},\n {reduce: 3, autofit: null},\n {reduce: 4, autofit: null},\n {reduce: 6, autofit: null}\n ],\n\n /** Object to hold parameters related to 1up mode */\n onePage: {\n /** @type {AutoFitValues} */\n autofit: 'auto',\n },\n\n /** Object to hold parameters related to 2up mode */\n twoPage: {\n /** Width of cover */\n coverInternalPadding: 0,\n /** Padding outside of cover */\n coverExternalPadding: 0,\n /** Width of book spine $$$ consider sizing based on book length */\n bookSpineDivWidth: 64,\n /** @type {AutoFitValues} */\n autofit: 'auto'\n },\n\n onePageMinBreakpoint: 800,\n\n bookTitle: '',\n /** @type {string} */\n bookUrl: null,\n /** @type {string} */\n bookUrlText: null,\n /** @type {string} */\n bookUrlTitle: null,\n enableBookTitleLink: true,\n /**\n * @type {string} language in ISO 639-1 (PRIVATE: Will also\n * handle language name in English, native name, 639-2/T, or 639-2/B . (archive.org books\n * appear to use 639-2/B ? But I don't think that's a guarantee). See\n * https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes ) */\n bookLanguage: null,\n\n /**\n * @type {Array<{label: string, value: *, extraValueClass: string?}>}\n * Fields used to populate the info window\n * @example [\n * {label: 'Title', value: 'Open Library BookReader Presentation'},\n * {label: 'Author', value: 'Internet Archive'},\n * {label: 'Demo Info', value: 'This demo shows how one could use BookReader with their own content.'},\n * ]\n **/\n metadata: [],\n /** @type {string} */\n thumbnail: null,\n /** @type {string} */\n bookUrlMoreInfo: null,\n\n /** Experimental Controls (eg b/w) */\n enableExperimentalControls: false,\n\n /** CSS selectors */\n /** Where BookReader mounts to */\n el: '#BookReader',\n\n /** @type {'lr' | 'rl'} Page progression */\n pageProgression: 'lr',\n\n /** The PPI the book is scanned at **/\n ppi: 500,\n\n /** Should image downloads be blocked */\n protected: false,\n\n /**\n * Settings for individual plugins. Note they have to be imported first.\n * WIP: Most plugins just put their options anywhere in this global options file,\n * but going forward we'll keep them here.\n **/\n plugins: {\n /** @type {import('../plugins/plugin.text_selection.js').TextSelectionPluginOptions} */\n textSelection: null,\n },\n\n /**\n * Any variables you want to define. If an option has a StringWithVars type, or\n * has something like `{{server}}/foo.com` in its value, these variables replace\n * the `{{foo}}`.\n * @type { {[var_name: string]: any } }\n */\n vars: {},\n\n /**\n * @type {Array<[PageData, PageData]|[PageData]>}\n * Data is a simple way to populate the bookreader\n *\n * Example:\n * ```\n * [\n * // Each child is a spread\n * [\n * {\n * width: 123,\n * height: 123,\n * // Optional: If not provided, include a getPageURI\n * uri: 'https://archive.org/image.jpg',\n * // Optional: Shown instead of leaf number if present.\n * pageNum: '1'\n * },\n * {width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '2'},\n * ]\n * ],\n * ```\n *\n * Note if URI is omitted, a custom getPageURI can be provided. This allows the page\n * URI to the result of a function, which allows for things such as dynamic\n * page scaling.\n */\n data: [],\n\n /** Advanced methods for page rendering */\n /** @type {() => number} */\n getNumLeafs: null,\n /** @type {(index: number) => number} */\n getPageWidth: null,\n /** @type {(index: number) => number} */\n getPageHeight: null,\n /** @type {(index: number, reduce: number, rotate: number) => *} */\n getPageURI: null,\n\n /**\n * @type {(index: number) => 'L' | 'R'}\n * Return which side, left or right, that a given page should be displayed on\n */\n getPageSide: null,\n\n /**\n * @type {(pindex: number) => [number, number]}\n * This function returns the left and right indices for the user-visible\n * spread that contains the given index. The return values may be\n * null if there is no facing page or the index is invalid.\n */\n getSpreadIndices: null,\n\n /** @type {(index: number) => string} */\n getPageNum: null,\n /** @type {(index: number) => *} */\n getPageProp: null,\n /** @type {(index: number) => number} */\n leafNumToIndex: null,\n\n /**\n * @type {(frameWidth: number|string, frameHeight: number|string, viewParams) => *}\n * Optional: if present, and embed code will be shown in the share dialog\n */\n getEmbedCode: null,\n\n controls: {\n bookLeft: {\n visible: true,\n label: 'Flip left',\n className: 'book_left',\n iconClassName: 'left-arrow'\n },\n bookRight: {\n visible: true,\n label: 'Flip right',\n className: 'book_right',\n iconClassName: 'left-arrow hflip'\n },\n onePage: {\n visible: true,\n label: 'One-page view',\n className: 'onepg',\n iconClassName: 'onepg'\n },\n twoPage: {\n visible: true,\n label: 'Two-page view',\n className: 'twopg',\n iconClassName: 'twopg'\n },\n thumbnail: {\n visible: true,\n label: 'Thumbnail view',\n className: 'thumb',\n iconClassName: 'thumb'\n },\n viewmode: {\n visible: true,\n className: 'viewmode',\n excludedModes: [],\n },\n zoomOut: {\n visible: true,\n label: 'Zoom out',\n className: 'zoom_out',\n iconClassName: 'magnify'\n },\n zoomIn: {\n visible: true,\n label: 'Zoom in',\n className: 'zoom_in',\n iconClassName: 'magnify plus'\n },\n fullScreen: {\n visible: true,\n label: 'Toggle fullscreen',\n className: 'full',\n iconClassName: 'fullscreen'\n },\n },\n\n /**\n * @type {Boolean}\n * Optional: if true, starts in fullscreen mode\n */\n startFullscreen: false,\n\n /**\n * @type {Boolean}\n * On init, by default, we want to handle resizing bookreader\n * when browser window changes size (inc. `orientationchange` event)\n * toggle off if you want to handle this outside of bookreader\n */\n autoResize: true,\n\n /**\n * @type {Boolean}\n * On init, by default, we want to use srcSet for images\n */\n useSrcSet: false,\n};\n\n/** @typedef {'width' | 'height' | 'auto' | 'none'} AutoFitValues */\n\n/**\n * @typedef {object} ReductionFactor\n * @property {number} reduce\n * @property {AutoFitValues} [autofit] If set, the corresponding reduction factors\n * are what will be used when the user tries to autofit by width/height.\n */\n\n/**\n * @typedef {Object} PageData\n * @property {number} width\n * @property {number} height\n * @property {string} [uri] If not provided, include a getPageURI\n * @property {PageNumString} [pageNum] Shown instead of leaf number if present\n * @property {LeafNum} [leafNum] Sometimes specified in Internet Archive books\n * @property {number} [ppi] The resolution of the page if different from {@see BookReaderOptions.ppi}\n * @property {'L' | 'R'} [pageSide] PRIVATE; computed automatically\n * @property {boolean} [viewable=true] Set false if page is not viewable. Displays a dummy preview image.\n * @property {number} [unviewablesStart] PRIVATE; index where the chunk of unviewable pages started\n *\n * Note if URI is omitted, a custom getPageURI can be provided. This allows the page\n * URI to the result of a function, which allows for things such as dynamic\n * page scaling.\n */\n\n/** @typedef {typeof DEFAULT_OPTIONS} BookReaderOptions */\n\n","import 'jquery-colorbox';\nimport { escapeHTML } from '../utils.js';\nimport { EVENTS } from '../events.js';\n/** @typedef {import(\"../../BookReader.js\").default} BookReader */\n\nexport class Toolbar {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n }\n\n /**\n * This method builds the html for the toolbar. It can be decorated to extend\n * the toolbar.\n * @return {JQuery}\n */\n buildToolbarElement() {\n const { br } = this;\n const logoHtml = !br.showLogo ? '' : `\n <span class=\"BRtoolbarSection BRtoolbarSectionLogo\">\n <a class=\"logo\" href=\"${br.logoURL}\"></a>\n </span>`;\n\n // Add large screen navigation\n br.refs.$BRtoolbar = $(`\n <div class=\"BRtoolbar header\">\n <div class=\"BRtoolbarbuttons\">\n <div class=\"BRtoolbarLeft\">\n ${logoHtml}\n <span class=\"BRtoolbarSection BRtoolbarSectionTitle\"></span>\n </div>\n <div class=\"BRtoolbarRight\">\n <span class=\"BRtoolbarSection BRtoolbarSectionInfo\">\n <button class=\"BRpill info js-tooltip\">Info</button>\n <button class=\"BRpill share js-tooltip\">Share</button>\n </span>\n </div>\n </div>\n </div>`);\n // TODO actual hamburger menu\n // <span class=\"BRtoolbarSection BRtoolbarSectionMenu\">\n // <button class=\"BRpill BRtoolbarHamburger\">\n // <img src=\"${br.imagesBaseURL}icon_hamburger.svg\" />\n // <div class=\"BRhamburgerDrawer\"><ul><li>hi</li></ul></div>\n // </button>\n // </span>\n\n const $titleSectionEl = br.refs.$BRtoolbar.find('.BRtoolbarSectionTitle');\n if (br.bookUrl && br.options.enableBookTitleLink) {\n $titleSectionEl.append(\n $('<a>')\n .attr({href: br.bookUrl, title: br.bookUrlTitle})\n .addClass('BRreturn')\n .html(br.bookUrlText || br.bookTitle)\n );\n } else if (br.bookTitle) {\n $titleSectionEl.append(br.bookUrlText || br.bookTitle);\n }\n\n // const $hamburger = br.refs.$BRtoolbar.find('BRtoolbarHamburger');\n return br.refs.$BRtoolbar;\n }\n\n /**\n * Initializes the toolbar (top)\n * @param {string} mode\n * @param {string} ui\n */\n initToolbar(mode, ui) {\n const { br } = this;\n br.refs.$br.append(this.buildToolbarElement());\n\n br.$('.BRnavCntl').addClass('BRup');\n br.$('.pause').hide();\n\n this.updateToolbarZoom(br.reduce); // Pretty format\n\n // We build in mode 2\n br.refs.$BRtoolbar.append();\n\n // Hide mode buttons and autoplay if 2up is not available\n // $$$ if we end up with more than two modes we should show the applicable buttons\n if ( !br.canSwitchToMode(br.constMode2up) ) {\n br.$('.two_page_mode, .play, .pause').hide();\n }\n if ( !br.canSwitchToMode(br.constModeThumb) ) {\n br.$('.thumbnail_mode').hide();\n }\n\n // Hide one page button if it is the only mode available\n if ( ! (br.canSwitchToMode(br.constMode2up) || br.canSwitchToMode(br.constModeThumb)) ) {\n br.$('.one_page_mode').hide();\n }\n\n $('<div style=\"display: none;\"></div>')\n .append(blankShareDiv())\n .append(blankInfoDiv())\n .appendTo(br.refs.$br);\n\n br.$('.BRinfo .BRfloatTitle a')\n .attr({href: br.bookUrl})\n .text(br.bookTitle)\n .addClass('title');\n\n // These functions can be overridden\n this.buildInfoDiv(br.$('.BRinfo'));\n this.buildShareDiv(br.$('.BRshare'));\n\n br.$('.share').colorbox({\n inline: true,\n opacity: \"0.5\",\n href: br.$('.BRshare'),\n onLoad: () => {\n br.trigger(EVENTS.stop);\n br.$('.BRpageviewValue').val(window.location.href);\n }\n });\n br.$('.info').colorbox({\n inline: true,\n opacity: \"0.5\",\n href: br.$('.BRinfo'),\n onLoad: () => {\n br.trigger(EVENTS.stop);\n }\n });\n }\n\n /**\n * @deprecated\n * @todo .BRzoom doesn't exist anywhere, so this is likely dead code\n * Update the displayed zoom factor based on reduction factor\n * @param {number} reduce\n */\n updateToolbarZoom(reduce) {\n const { br } = this;\n // $$$ TODO preserve zoom/fit for each mode\n const autofit = br.mode == br.constMode2up ? br.twoPage.autofit : br.onePage.autofit;\n /** @type {string} */\n let value;\n if (autofit) {\n value = autofit.slice(0,1).toUpperCase() + autofit.slice(1);\n } else {\n value = (100 / reduce)\n .toFixed(2)\n // Strip trailing zeroes and decimal if all zeroes\n .replace(/0+$/,'')\n .replace(/\\.$/,'')\n + '%';\n }\n br.$('.BRzoom').text(value);\n }\n\n /**\n * @param {JQuery} $shareDiv\n */\n buildShareDiv($shareDiv) {\n const { br } = this;\n const pageView = document.location + '';\n const bookView = (pageView + '').replace(/#.*/,'');\n\n const embedHtml = !br.getEmbedCode ? '' : `\n <div class=\"share-embed\">\n <p class=\"share-embed-prompt\">Copy and paste one of these options to share this book elsewhere.</p>\n <form method=\"post\" action=\"\">\n <fieldset class=\"fieldset-share-pageview\">\n <label for=\"pageview\">Link to this page view</label>\n <input type=\"text\" name=\"pageview\" class=\"BRpageviewValue\" value=\"${pageView}\"/>\n </fieldset>\n <fieldset class=\"fieldset-share-book-link\">\n <label for=\"booklink\">Link to the book</label>\n <input type=\"text\" name=\"booklink\" class=\"booklink\" value=\"${bookView}\"/>\n </fieldset>\n <fieldset class=\"fieldset-embed\">\n <label for=\"iframe\">Embed a mini Book Reader</label>\n <fieldset class=\"sub\">\n <label class=\"sub\">\n <input type=\"radio\" name=\"pages\" value=\"${br.constMode1up}\" checked=\"checked\"/>\n 1 page\n </label>\n <label class=\"sub\">\n <input type=\"radio\" name=\"pages\" value=\"${br.constMode2up}\"/>\n 2 pages\n </label>\n <label class=\"sub\">\n <input type=\"checkbox\" name=\"thispage\" value=\"thispage\"/>\n Open to this page?\n </label>\n </fieldset>\n <textarea cols=\"30\" rows=\"4\" name=\"iframe\" class=\"BRframeEmbed\"></textarea>\n </fieldset>\n </form>\n </div>`;\n\n const $form = $(`\n <div class=\"share-title\">Share this book</div>\n <div class=\"share-social\">\n <label class=\"sub open-to-this-page\">\n <input class=\"thispage-social\" type=\"checkbox\" />\n Open to this page?\n </label>\n <div><button class=\"BRaction share facebook-share-button\"><i class=\"BRicon fb\" /> Facebook</button></div>\n <div><button class=\"BRaction share twitter-share-button\"><i class=\"BRicon twitter\" /> Twitter</button></div>\n <div><button class=\"BRaction share email-share-button\"><i class=\"BRicon email\" /> Email</button></div>\n </div>\n ${embedHtml}\n <div class=\"BRfloatFoot\">\n <button class=\"share-finished\" type=\"button\" onclick=\"$.fn.colorbox.close();\">Finished</button>\n </div>`);\n\n $form.appendTo($shareDiv);\n\n $form.find('.fieldset-embed input').on('change', event => {\n const form = $(event.target).parents('form:first');\n const params = {};\n params.mode = $(form.find('.fieldset-embed input[name=pages]:checked')).val();\n if (form.find('.fieldset-embed input[name=thispage]').prop('checked')) {\n params.page = br.getPageNum(br.currentIndex());\n }\n\n if (br.getEmbedCode) {\n // $$$ changeable width/height to be added to share UI\n const frameWidth = \"480px\";\n const frameHeight = \"430px\";\n form.find('.BRframeEmbed').val(br.getEmbedCode(frameWidth, frameHeight, params));\n }\n });\n\n $form.find('input, textarea').on('focus', event => event.target.select());\n\n // Bind share buttons\n\n // Use url without hashes\n $form.find('.facebook-share-button').click(() => {\n const params = $.param({ u: this._getSocialShareUrl() });\n const url = 'https://www.facebook.com/sharer.php?' + params;\n createPopup(url, 600, 400, 'Share');\n });\n $form.find('.twitter-share-button').click(() => {\n const params = $.param({\n url: this._getSocialShareUrl(),\n text: br.bookTitle\n });\n const url = 'https://twitter.com/intent/tweet?' + params;\n createPopup(url, 600, 400, 'Share');\n });\n $form.find('.email-share-button').click(() => {\n const body = `${br.bookTitle}\\n\\n${this._getSocialShareUrl()}`;\n window.location.href = `mailto:?subject=${encodeURI(br.bookTitle)}&body=${encodeURI(body)}`;\n });\n\n $form.find('input[name=thispage]').trigger('change');\n\n $form.appendTo($shareDiv);\n }\n\n _getSocialShareUrl() {\n const { br } = this;\n const shareThisPage = br.$('.thispage-social').prop('checked');\n if (shareThisPage) {\n return window.location.href;\n } else {\n return `${document.location.protocol}//${window.location.hostname}${window.location.pathname}`;\n }\n }\n\n /**\n * @param {JQuery} $infoDiv DOM element. Appends info to this element\n * Can be overridden or extended\n */\n buildInfoDiv($infoDiv) {\n const { br } = this;\n // Remove these legacy elements\n $infoDiv.find('.BRfloatBody, .BRfloatCover, .BRfloatFoot').remove();\n\n const $leftCol = $(`<div class=\"BRinfoLeftCol\"></div>`);\n if (br.thumbnail) {\n $leftCol.append($(`\n <div class=\"BRimageW\">\n <img src=\"${br.thumbnail}\" alt=\"${escapeHTML(br.bookTitle)}\" />\n </div>`));\n }\n\n const $rightCol = $(`<div class=\"BRinfoRightCol\">`);\n\n // A loop to build fields\n for (const {extraValueClass = '', label, value} of br.metadata) {\n const escapedValue = label === 'Title' ? escapeHTML(value) : value;\n $rightCol.append($(`\n <div class=\"BRinfoValueWrapper\">\n <div class=\"BRinfoLabel\">${label}</div>\n <div class=\"BRinfoValue ${extraValueClass}\">${escapedValue}</div>\n </div>`));\n }\n\n const moreInfoText = br.bookUrlMoreInfo ? br.bookUrlMoreInfo : br.bookTitle;\n if (moreInfoText && br.bookUrl) {\n $rightCol.append($(`\n <div class=\"BRinfoValueWrapper\">\n <div class=\"BRinfoMoreInfoWrapper\">\n <a class=\"BRinfoMoreInfo\" href=\"${br.bookUrl}\">\n ${escapeHTML(moreInfoText)}\n </a>\n </div>\n </div>`));\n }\n\n const $footer = $(`<div class=\"BRfloatFoot BRinfoFooter\"></div>`);\n const $children = $('<div class=\"BRinfoW mv20-lg\">').append([\n $leftCol,\n $rightCol,\n $('<br style=\"clear:both\"/>'),\n ]);\n\n $infoDiv\n .append($children, $footer)\n .addClass('wide');\n }\n\n /**\n * @return {number} (in pixels) of the toolbar height. 0 if no toolbar.\n */\n getToolBarHeight() {\n const { $BRtoolbar } = this.br.refs;\n if ($BRtoolbar && $BRtoolbar.css('display') === 'block') {\n return ($BRtoolbar.outerHeight() + parseInt($BRtoolbar.css('top')));\n } else {\n return 0;\n }\n }\n}\n\nexport function blankInfoDiv() {\n return $(`\n <div class=\"BRfloat BRinfo\">\n <div class=\"BRfloatHead\">About this book\n <button class=\"floatShut\" href=\"javascript:;\" onclick=\"$.fn.colorbox.close();\"><span class=\"shift\">Close</span></button>\n </div>\n <div class=\"BRfloatBody\">\n <div class=\"BRfloatCover\"></div>\n <div class=\"BRfloatMeta\">\n <div class=\"BRfloatTitle\">\n <h2><a /></h2>\n </div>\n </div>\n </div>\n <div class=\"BRfloatFoot\">\n <a href=\"https://openlibrary.org/dev/docs/bookreader\">About the BookReader</a>\n </div>\n </div>`);\n}\n\nexport function blankShareDiv() {\n return $(`\n <div class=\"BRfloat BRshare\">\n <div class=\"BRfloatHead\">\n Share\n <button class=\"floatShut\" href=\"javascript:;\" onclick=\"$.fn.colorbox.close();\"><span class=\"shift\">Close</span></button>\n </div>\n </div>`);\n}\n\n/**\n * Helper opens a popup window. On mobile it only opens a new tab. Used for share.\n * @param {string} href\n * @param {number} width\n * @param {number} height\n * @param {string} name\n */\nexport function createPopup(href, width, height, name) {\n // Fixes dual-screen position\n const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;\n const dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;\n\n const win_w = window.innerWidth || document.documentElement.clientWidth || screen.width;\n const win_h = window.innerHeight || document.documentElement.clientHeight || screen.height;\n\n const left = ((win_w / 2) - (width / 2)) + dualScreenLeft;\n const top = ((win_h / 2) - (height / 2)) + dualScreenTop;\n const opts = `status=1,width=${width},height=${height},top=${top},left=${left}`;\n\n window.open(href, name, opts);\n}\n","// @ts-check\nimport { DEFAULT_OPTIONS } from './options.js';\nimport { clamp } from './utils.js';\n/** @typedef {import('./options.js').PageData} PageData */\n/** @typedef {import('../BookReader.js').default} BookReader */\n\n// URI to display when a page is not viewable.\n// TODO Render configurable html for the user instead.\n// FIXME Don't reference files on archive.org\nconst UNVIEWABLE_PAGE_URI = '/bookreader/static/preview-default.png';\n\n/**\n * Contains information about the Book/Document independent of the way it is\n * being rendering. Nothing here should reference e.g. the mode, zoom, etc.\n * It's just information about the book and its pages (usually as specified\n * in the BookReader data option.)\n */\nexport class BookModel {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n this.reduceSet = br.reduceSet;\n this.ppi = br.options?.ppi ?? DEFAULT_OPTIONS.ppi;\n\n /** @type {{width: number, height: number}} memoize storage */\n this._medianPageSize = null;\n /** @deprecated @type {{width: number, height: number}} memoize storage */\n this._medianPageSizePixels = null;\n /** @type {[PageData[], number]} */\n this._getDataFlattenedCached = null;\n }\n\n /**\n * @deprecated Use getMedianPageSizeInches\n * Memoized\n * @return {{width: number, height: number}}\n */\n getMedianPageSize() {\n if (this._medianPageSizePixels) {\n return this._medianPageSizePixels;\n }\n\n // A little expensive but we just do it once\n const widths = [];\n const heights = [];\n for (let i = 0; i < this.getNumLeafs(); i++) {\n widths.push(this.getPageWidth(i));\n heights.push(this.getPageHeight(i));\n }\n\n widths.sort();\n heights.sort();\n this._medianPageSizePixels = {\n width: widths[Math.floor(widths.length / 2)],\n height: heights[Math.floor(heights.length / 2)]\n };\n return this._medianPageSizePixels;\n }\n\n /** Get median width/height of page in inches. Memoized for performance. */\n getMedianPageSizeInches() {\n if (this._medianPageSize) {\n return this._medianPageSize;\n }\n\n const widths = [];\n const heights = [];\n for (const page of this.pagesIterator()) {\n widths.push(page.widthInches);\n heights.push(page.heightInches);\n }\n\n widths.sort();\n heights.sort();\n\n this._medianPageSize = {\n width: widths[Math.floor(widths.length / 2)],\n height: heights[Math.floor(heights.length / 2)]\n };\n return this._medianPageSize;\n }\n\n /**\n * Returns the page width for the given index, or first or last page if out of range\n * @deprecated see getPageWidth\n * @param {PageIndex} index\n */\n _getPageWidth(index) {\n // Synthesize a page width for pages not actually present in book.\n // May or may not be the best approach.\n // If index is out of range we return the width of first or last page\n index = clamp(index, 0, this.getNumLeafs() - 1);\n return this.getPageWidth(index);\n }\n\n /**\n * Returns the page height for the given index, or first or last page if out of range\n * @deprecated see getPageHeight\n * @param {PageIndex} index\n */\n _getPageHeight(index) {\n const clampedIndex = clamp(index, 0, this.getNumLeafs() - 1);\n return this.getPageHeight(clampedIndex);\n }\n\n /**\n * Returns the *highest* index the given page number, or undefined\n * @param {PageNumString} pageNum\n * @return {PageIndex|undefined}\n */\n getPageIndex(pageNum) {\n const pageIndices = this.getPageIndices(pageNum);\n return pageIndices.length ? pageIndices[pageIndices.length - 1] : undefined;\n }\n\n /**\n * Returns an array (possibly empty) of the indices with the given page number\n * @param {PageNumString} pageNum\n * @return {PageIndex[]}\n */\n getPageIndices(pageNum) {\n const indices = [];\n\n // Check for special \"nXX\" page number\n if (pageNum.slice(0,1) == 'n') {\n try {\n const pageIntStr = pageNum.slice(1, pageNum.length);\n const pageIndex = parseInt(pageIntStr);\n indices.push(pageIndex);\n return indices;\n } catch (err) {\n // Do nothing... will run through page names and see if one matches\n }\n }\n\n for (let i = 0; i < this.getNumLeafs(); i++) {\n if (this.getPageNum(i) == pageNum) {\n indices.push(i);\n }\n }\n\n return indices;\n }\n\n /**\n * Returns the name of the page as it should be displayed in the user interface\n * @param {PageIndex} index\n * @return {string}\n */\n getPageName(index) {\n return 'Page ' + this.getPageNum(index);\n }\n\n /**\n * @return {number} the total number of leafs (like an array length)\n */\n getNumLeafs() {\n // For deprecated interface support, if numLeafs is set, use that.\n if (this.br.numLeafs !== undefined)\n return this.br.numLeafs;\n return this._getDataFlattened().length;\n }\n\n /**\n * @param {PageIndex} index\n * @return {Number|undefined}\n */\n getPageWidth(index) {\n return this.getPageProp(index, 'width');\n }\n\n /**\n * @param {PageIndex} index\n * @return {Number|undefined}\n */\n getPageHeight(index) {\n return this.getPageProp(index, 'height');\n }\n\n /**\n * @param {PageIndex} index\n * @param {number} reduce - not used in default implementation\n * @param {number} rotate - not used in default implementation\n * @return {string|undefined}\n */\n // eslint-disable-next-line no-unused-vars\n getPageURI(index, reduce, rotate) {\n return !this.getPageProp(index, 'viewable', true) ? UNVIEWABLE_PAGE_URI : this.getPageProp(index, 'uri');\n }\n\n /**\n * @param {PageIndex} index\n * @return {'L' | 'R'}\n */\n getPageSide(index) {\n return this.getPageProp(index, 'pageSide') || (index % 2 === 0 ? 'R' : 'L');\n }\n\n /**\n * @param {PageIndex} index\n * @return {PageNumString}\n */\n getPageNum(index) {\n const pageNum = this.getPageProp(index, 'pageNum');\n return pageNum === undefined ? `n${index}` : pageNum;\n }\n\n /**\n * Generalized property accessor.\n * @param {PageIndex} index\n * @param {keyof PageData} propName\n * @param {*} [fallbackValue] return if undefined\n * @return {*|undefined}\n */\n getPageProp(index, propName, fallbackValue = undefined) {\n return this._getDataProp(index, propName, fallbackValue);\n }\n\n /**\n * This function returns the left and right indices for the user-visible\n * spread that contains the given index.\n * @note Can return indices out of range of what's in the book.\n * @param {PageIndex} pindex\n * @return {[PageIndex, PageIndex]} eg [0, 1]\n */\n getSpreadIndices(pindex) {\n if (this.br.pageProgression == 'rl') {\n return this.getPageSide(pindex) == 'R' ? [pindex + 1, pindex] : [pindex, pindex - 1];\n } else {\n return this.getPageSide(pindex) == 'L' ? [pindex, pindex + 1] : [pindex - 1, pindex];\n }\n }\n\n /**\n * Single images in the Internet Archive scandata.xml metadata are (somewhat incorrectly)\n * given a \"leaf\" number. Some of these images from the scanning process should not\n * be displayed in the BookReader (for example colour calibration cards). Since some\n * of the scanned images will not be displayed in the BookReader (those marked with\n * addToAccessFormats false in the scandata.xml) leaf numbers and BookReader page\n * indexes are generally not the same. This function returns the BookReader page\n * index given a scanned leaf number.\n *\n * This function is used, for example, to map between search results (that use the\n * leaf numbers) and the displayed pages in the BookReader.\n * @param {LeafNum} leafNum\n * @return {PageIndex}\n */\n leafNumToIndex(leafNum) {\n const index = this._getDataFlattened()\n .findIndex(d => d.leafNum == leafNum);\n // If no match is found, fall back to the leafNum provide (leafNum == index)\n return index > -1 ? index : leafNum;\n }\n\n /**\n * Parses the pageString format\n * @param {PageString} pageString\n * @return {PageIndex|undefined}\n */\n parsePageString(pageString) {\n let pageIndex;\n // Check for special \"leaf\"\n const leafMatch = /^leaf(\\d+)/.exec(pageString);\n if (leafMatch) {\n pageIndex = this.leafNumToIndex(parseInt(leafMatch[1], 10));\n if (pageIndex === null) {\n pageIndex = undefined; // to match return type of getPageIndex\n }\n } else {\n pageIndex = this.getPageIndex(pageString);\n }\n return pageIndex;\n }\n\n /**\n * @param {number} index use negatives to get page relative to end\n * @param loop whether to loop (i.e. -1 == last page)\n */\n getPage(index, loop = true) {\n const numLeafs = this.getNumLeafs();\n if (!loop && (index < 0 || index >= numLeafs)) {\n return undefined;\n }\n if (index < 0 && index >= -numLeafs) {\n index += numLeafs;\n }\n index = index % numLeafs;\n return new PageModel(this, index);\n }\n\n /**\n * @param {object} [arg0]\n * @param {number} [arg0.start] inclusive\n * @param {number} [arg0.end] exclusive\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Yield only first unviewable\n * of a chunk of unviewable pages instead of each page\n */\n * pagesIterator({ start = 0, end = Infinity, combineConsecutiveUnviewables = false } = {}) {\n start = Math.max(0, start);\n end = Math.min(end, this.getNumLeafs());\n\n for (let i = start; i < end; i++) {\n const page = this.getPage(i);\n if (combineConsecutiveUnviewables && page.isConsecutiveUnviewable) continue;\n\n yield page;\n }\n }\n\n /**\n * Flatten the nested structure (make 1d array), and also add pageSide prop\n * @return {PageData[]}\n */\n _getDataFlattened() {\n if (this._getDataFlattenedCached && this._getDataFlattenedCached[1] === this.br.data.length)\n return this._getDataFlattenedCached[0];\n\n let prevPageSide = null;\n /** @type {number|null} */\n let unviewablesChunkStart = null;\n let index = 0;\n // @ts-ignore TS doesn't know about flatMap for some reason\n const flattened = this.br.data.flatMap(spread => {\n return spread.map(page => {\n if (!page.pageSide) {\n if (prevPageSide === null) {\n page.pageSide = spread.length === 2 ? 'L' : 'R';\n } else {\n page.pageSide = prevPageSide === 'L' ? 'R' : 'L';\n }\n }\n prevPageSide = page.pageSide;\n\n if (page.viewable === false) {\n if (unviewablesChunkStart === null) {\n page.unviewablesStart = unviewablesChunkStart = index;\n } else {\n page.unviewablesStart = unviewablesChunkStart;\n }\n } else {\n unviewablesChunkStart = null;\n }\n\n index++;\n return page;\n });\n });\n\n // length is used as a cache breaker\n this._getDataFlattenedCached = [flattened, this.br.data.length];\n return flattened;\n }\n\n /**\n * Helper. Return a prop for a given index. Returns `fallbackValue` if index is invalid or\n * property not on page.\n * @param {PageIndex} index\n * @param {keyof PageData} prop\n * @param {*} fallbackValue return if property not on the record\n * @return {*}\n */\n _getDataProp(index, prop, fallbackValue = undefined) {\n const dataf = this._getDataFlattened();\n const invalidIndex = isNaN(index) || index < 0 || index >= dataf.length;\n if (invalidIndex || 'undefined' == typeof(dataf[index][prop]))\n return fallbackValue;\n return dataf[index][prop];\n }\n}\n\n/**\n * A controlled schema for page data.\n */\nexport class PageModel {\n /**\n * @param {BookModel} book\n * @param {PageIndex} index\n */\n constructor(book, index) {\n // TODO: Get default from config\n this.ppi = book._getDataProp(index, 'ppi', book.ppi);\n this.book = book;\n this.index = index;\n this.width = book.getPageWidth(index);\n this.widthInches = this.width / this.ppi;\n this.height = book.getPageHeight(index);\n this.heightInches = this.height / this.ppi;\n this.pageSide = book.getPageSide(index);\n this.leafNum = book._getDataProp(index, 'leafNum', this.index);\n\n /** @type {boolean} */\n this.isViewable = book._getDataProp(index, 'viewable', true);\n /** @type {PageIndex} The first in the series of unviewable pages this is in. */\n this.unviewablesStart = book._getDataProp(index, 'unviewablesStart') || null;\n /**\n * Consecutive unviewable pages are pages in an unviewable \"chunk\" which are not the first\n * of that chunk.\n */\n this.isConsecutiveUnviewable = !this.isViewable && this.unviewablesStart != this.index;\n\n this._rawData = this.book._getDataFlattened()[this.index];\n }\n\n /**\n * Updates the page to no longer be unviewable. Assumes the\n * Page's URI is already set/correct.\n */\n makeViewable(newViewableState = true) {\n if (this.isViewable == newViewableState) return;\n\n if (newViewableState) {\n this._rawData.viewable = true;\n delete this._rawData.unviewablesStart;\n // Update any subsequent page to now point to the right \"start\"\n for (const page of this.book.pagesIterator({ start: this.index + 1 })) {\n if (page.isViewable) break;\n page._rawData.unviewablesStart = this.index + 1;\n }\n } else {\n this._rawData.viewable = false;\n this._rawData.unviewablesStart = (this.prev && !this.prev.isViewable) ? this.prev.unviewablesStart : this.index;\n // Update any subsequent page to now point to the right \"start\"\n for (const page of this.book.pagesIterator({ start: this.index + 1 })) {\n if (!page.isViewable) break;\n page._rawData.unviewablesStart = this._rawData.unviewablesStart;\n }\n }\n }\n\n get prev() {\n return this.findPrev();\n }\n\n get next() {\n return this.findNext();\n }\n\n /**\n * @param {number} reduce\n * @param {number} rotate\n */\n getURI(reduce, rotate) {\n return this.book.getPageURI(this.index, reduce, rotate);\n }\n\n /**\n * Returns the srcset with correct URIs or void string if out of range\n * @param {number} reduce\n * @param {number} [rotate]\n */\n getURISrcSet(reduce, rotate = 0) {\n const { reduceSet } = this.book;\n const initialReduce = reduceSet.floor(reduce);\n // We don't need to repeat the initial reduce in the srcset\n const topReduce = reduceSet.decr(initialReduce);\n const reduces = [];\n for (let r = topReduce; r >= 1; r = reduceSet.decr(r)) {\n reduces.push(r);\n }\n return reduces\n .map(r => `${this.getURI(r, rotate)} ${initialReduce / r}x`)\n .join(', ');\n }\n\n /**\n * @param {object} [arg0]\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page\n * of a series of unviewable pages instead of each page\n * @return {PageModel|void}\n */\n findNext({ combineConsecutiveUnviewables = false } = {}) {\n return this.book\n .pagesIterator({ start: this.index + 1, combineConsecutiveUnviewables })\n .next().value;\n }\n\n /**\n * @param {object} [arg0]\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page\n * of a series of unviewable pages instead of each page\n * @return {PageModel|void}\n */\n findPrev({ combineConsecutiveUnviewables = false } = {}) {\n if (this.index == 0) return undefined;\n\n if (combineConsecutiveUnviewables) {\n if (this.isConsecutiveUnviewable) {\n return this.book.getPage(this.unviewablesStart);\n } else {\n // Recursively goes backward through the book\n // TODO make a reverse iterator to make it look identical to findNext\n const prev = new PageModel(this.book, this.index - 1);\n return prev.isViewable ? prev : prev.findPrev({ combineConsecutiveUnviewables });\n }\n } else {\n return new PageModel(this.book, this.index - 1);\n }\n }\n}\n\n// There are a few main ways we can reference a specific page in a book:\n/**\n * @typedef {string} PageNumString\n * Possible values: /^n?\\d+$/. Example: 'n7', '18'\n * Not necessarily unique\n */\n/**\n * @typedef {number} LeafNum\n * No clue if 0 or 1 indexed or consecutive; generally from IA book info.\n */\n/**\n * @typedef {string} PageString\n * Possible values: /^(leaf)?\\d+$/ Example: 'leaf7', '18'\n * If leaf-prefixed, then the number is a LeafNum. Otherwise it's a PageNumString\n */\n/** @typedef {number} PageIndex 0-based index of all the pages */\n","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributePart, directive, PropertyPart } from '../lit-html.js';\n/**\n * Stores the StyleInfo object applied to a given AttributePart.\n * Used to unset existing values when a new StyleInfo object is applied.\n */\nconst previousStylePropertyCache = new WeakMap();\n/**\n * A directive that applies CSS properties to an element.\n *\n * `styleMap` can only be used in the `style` attribute and must be the only\n * expression in the attribute. It takes the property names in the `styleInfo`\n * object and adds the property values as CSS properties. Property names with\n * dashes (`-`) are assumed to be valid CSS property names and set on the\n * element's style object using `setProperty()`. Names without dashes are\n * assumed to be camelCased JavaScript property names and set on the element's\n * style object using property assignment, allowing the style object to\n * translate JavaScript-style names to CSS property names.\n *\n * For example `styleMap({backgroundColor: 'red', 'border-top': '5px', '--size':\n * '0'})` sets the `background-color`, `border-top` and `--size` properties.\n *\n * @param styleInfo {StyleInfo}\n */\nexport const styleMap = directive((styleInfo) => (part) => {\n if (!(part instanceof AttributePart) || (part instanceof PropertyPart) ||\n part.committer.name !== 'style' || part.committer.parts.length > 1) {\n throw new Error('The `styleMap` directive must be used in the style attribute ' +\n 'and must be the only part in the attribute.');\n }\n const { committer } = part;\n const { style } = committer.element;\n let previousStyleProperties = previousStylePropertyCache.get(part);\n if (previousStyleProperties === undefined) {\n // Write static styles once\n style.cssText = committer.strings.join(' ');\n previousStylePropertyCache.set(part, previousStyleProperties = new Set());\n }\n // Remove old properties that no longer exist in styleInfo\n // We use forEach() instead of for-of so that re don't require down-level\n // iteration.\n previousStyleProperties.forEach((name) => {\n if (!(name in styleInfo)) {\n previousStyleProperties.delete(name);\n if (name.indexOf('-') === -1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style[name] = null;\n }\n else {\n style.removeProperty(name);\n }\n }\n });\n // Add or update properties\n for (const name in styleInfo) {\n previousStyleProperties.add(name);\n if (name.indexOf('-') === -1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style[name] = styleInfo[name];\n }\n else {\n style.setProperty(name, styleInfo[name]);\n }\n }\n});\n//# sourceMappingURL=style-map.js.map","// @ts-check\nimport Hammer from \"hammerjs\";\n/** @typedef {import('./utils/HTMLDimensionsCacher.js').HTMLDimensionsCacher} HTMLDimensionsCacher */\n\n/**\n * @typedef {object} SmoothZoomable\n * @property {HTMLElement} $container\n * @property {HTMLElement} $visibleWorld\n * @property {number} scale\n * @property {{ x: number, y: number }} scaleCenter\n * @property {HTMLDimensionsCacher} htmlDimensionsCacher\n * @property {function(): void} [attachScrollListeners]\n * @property {function(): void} [detachScrollListeners]\n */\n\n/** Manages pinch-zoom, ctrl-wheel, and trackpad pinch smooth zooming. */\nexport class ModeSmoothZoom {\n /** @param {SmoothZoomable} mode */\n constructor(mode) {\n /** @type {SmoothZoomable} */\n this.mode = mode;\n\n /** Non-null when a scale has been enqueued/is being processed by the buffer function */\n this.pinchMoveFrame = null;\n /** Promise for the current/enqueued pinch move frame. Resolves when it is complete. */\n this.pinchMoveFramePromise = Promise.resolve();\n this.oldScale = 1;\n /** @type {{ scale: number, center: { x: number, y: number }}} */\n this.lastEvent = null;\n this.attached = false;\n\n /** @type {function(function(): void): any} */\n this.bufferFn = window.requestAnimationFrame.bind(window);\n\n // Hammer.js by default set userSelect to None; we don't want that!\n // TODO: Is there any way to do this not globally on Hammer?\n delete Hammer.defaults.cssProps.userSelect;\n this.hammer = new Hammer.Manager(this.mode.$container, {\n touchAction: \"pan-x pan-y\",\n });\n\n this.hammer.add(new Hammer.Pinch());\n }\n\n attach() {\n if (this.attached) return;\n\n this.attachCtrlZoom();\n\n // GestureEvents work only on Safari; they interfere with Hammer,\n // so block them.\n this.mode.$container.addEventListener('gesturestart', this._preventEvent);\n this.mode.$container.addEventListener('gesturechange', this._preventEvent);\n this.mode.$container.addEventListener('gestureend', this._preventEvent);\n\n // The pinch listeners\n this.hammer.on(\"pinchstart\", this._pinchStart);\n this.hammer.on(\"pinchmove\", this._pinchMove);\n this.hammer.on(\"pinchend\", this._pinchEnd);\n this.hammer.on(\"pinchcancel\", this._pinchCancel);\n\n this.attached = true;\n }\n\n detach() {\n this.detachCtrlZoom();\n\n // GestureEvents work only on Safari; they interfere with Hammer,\n // so block them.\n this.mode.$container.removeEventListener('gesturestart', this._preventEvent);\n this.mode.$container.removeEventListener('gesturechange', this._preventEvent);\n this.mode.$container.removeEventListener('gestureend', this._preventEvent);\n\n // The pinch listeners\n this.hammer.off(\"pinchstart\", this._pinchStart);\n this.hammer.off(\"pinchmove\", this._pinchMove);\n this.hammer.off(\"pinchend\", this._pinchEnd);\n this.hammer.off(\"pinchcancel\", this._pinchCancel);\n\n this.attached = false;\n }\n\n /** @param {Event} ev */\n _preventEvent = (ev) => {\n ev.preventDefault();\n return false;\n }\n\n _pinchStart = () => {\n // Do this in case the pinchend hasn't fired yet.\n this.oldScale = 1;\n this.mode.$visibleWorld.style.willChange = \"transform\";\n this.detachCtrlZoom();\n this.mode.detachScrollListeners?.();\n }\n\n /** @param {{ scale: number, center: { x: number, y: number }}} e */\n _pinchMove = async (e) => {\n this.lastEvent = e;\n if (!this.pinchMoveFrame) {\n let pinchMoveFramePromiseRes = null;\n this.pinchMoveFramePromise = new Promise(\n (res) => (pinchMoveFramePromiseRes = res)\n );\n\n // Buffer these events; only update the scale when request animation fires\n this.pinchMoveFrame = this.bufferFn(() => {\n this.updateScaleCenter({\n clientX: this.lastEvent.center.x,\n clientY: this.lastEvent.center.y,\n });\n this.mode.scale *= this.lastEvent.scale / this.oldScale;\n this.oldScale = this.lastEvent.scale;\n this.pinchMoveFrame = null;\n pinchMoveFramePromiseRes();\n });\n }\n }\n\n _pinchEnd = async () => {\n // Want this to happen after the pinchMoveFrame,\n // if one is in progress; otherwise setting oldScale\n // messes up the transform.\n await this.pinchMoveFramePromise;\n this.mode.scaleCenter = { x: 0.5, y: 0.5 };\n this.oldScale = 1;\n this.mode.$visibleWorld.style.willChange = \"auto\";\n this.attachCtrlZoom();\n this.mode.attachScrollListeners?.();\n }\n\n _pinchCancel = async () => {\n // iOS fires pinchcancel ~randomly; it looks like it sometimes\n // thinks the pinch becomes a pan, at which point it cancels?\n await this._pinchEnd();\n }\n\n /** @private */\n attachCtrlZoom() {\n window.addEventListener(\"wheel\", this._handleCtrlWheel, { passive: false });\n }\n\n /** @private */\n detachCtrlZoom() {\n window.removeEventListener(\"wheel\", this._handleCtrlWheel);\n }\n\n /** @param {WheelEvent} ev **/\n _handleCtrlWheel = (ev) => {\n if (!ev.ctrlKey) return;\n ev.preventDefault();\n const zoomMultiplier =\n // Zooming on macs was painfully slow; likely due to their better\n // trackpads. Give them a higher zoom rate.\n /Mac/i.test(navigator.platform)\n ? 0.045\n : // This worked well for me on Windows\n 0.03;\n\n // Zoom around the cursor\n this.updateScaleCenter(ev);\n this.mode.scale *= 1 - Math.sign(ev.deltaY) * zoomMultiplier;\n }\n\n /**\n * @param {object} param0\n * @param {number} param0.clientX\n * @param {number} param0.clientY\n */\n updateScaleCenter({ clientX, clientY }) {\n const bc = this.mode.htmlDimensionsCacher.boundingClientRect;\n this.mode.scaleCenter = {\n x: (clientX - bc.left) / this.mode.htmlDimensionsCacher.clientWidth,\n y: (clientY - bc.top) / this.mode.htmlDimensionsCacher.clientHeight,\n };\n }\n}\n","// @ts-check\nimport { debounce } from '../utils';\n\n/**\n * Computing these things repeatedly is expensive (the browser needs to\n * do a lot of computations/redrawing to make sure these are correct),\n * so we store them here, and only recompute them when necessary:\n * - window resize could have cause the container to change size\n * - zoom could have cause scrollbars to appear/disappear, changing\n * the client size.\n */\nexport class HTMLDimensionsCacher {\n clientWidth = 100;\n clientHeight = 100;\n\n boundingClientRect = { top: 0, left: 0 };\n\n /**\n * @param {HTMLElement} element\n */\n constructor(element) {\n /** @type {HTMLElement} */\n this.element = element;\n }\n\n updateClientSizes = () => {\n const bc = this.element.getBoundingClientRect();\n this.clientWidth = this.element.clientWidth;\n this.clientHeight = this.element.clientHeight;\n this.boundingClientRect.top = bc.top;\n this.boundingClientRect.left = bc.left;\n }\n debouncedUpdateClientSizes = debounce(this.updateClientSizes, 150, false);\n\n /** @param {EventTarget} win */\n attachResizeListener(win = window) {\n win.addEventListener('resize', this.debouncedUpdateClientSizes);\n }\n\n /** @param {EventTarget} win */\n detachResizeListener(win = window) {\n win.removeEventListener('resize', this.debouncedUpdateClientSizes);\n }\n}\n","// @ts-check\nimport { customElement, html, LitElement, property, query } from 'lit-element';\nimport { styleMap } from 'lit-html/directives/style-map';\nimport { ModeSmoothZoom } from './ModeSmoothZoom';\nimport { arrChanged, calcScreenDPI, genToArray, sum, throttle } from './utils';\nimport { HTMLDimensionsCacher } from \"./utils/HTMLDimensionsCacher\";\n/** @typedef {import('./BookModel').BookModel} BookModel */\n/** @typedef {import('./BookModel').PageIndex} PageIndex */\n/** @typedef {import('./BookModel').PageModel} PageModel */\n/** @typedef {import('./ModeSmoothZoom').SmoothZoomable} SmoothZoomable */\n/** @typedef {import('./PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../BookReader').default} BookReader */\n\n// I _have_ to make this globally public, otherwise it won't let me call\n// it's constructor :/\n/** @implements {SmoothZoomable} */\n@customElement('br-mode-1up')\nexport class Mode1UpLit extends LitElement {\n /****************************************/\n /************** PROPERTIES **************/\n /****************************************/\n\n /** @type {BookReader} */\n br;\n\n /************** BOOK-RELATED PROPERTIES **************/\n\n /** @type {BookModel} */\n @property({ type: Object })\n book;\n\n /** @type {PageModel[]} */\n @property({ type: Array })\n pages = [];\n\n /** @type {Record<PageIndex, number>} in world coordinates (inches) */\n @property({ type: Object })\n pageTops = {};\n\n /************** SCALE-RELATED PROPERTIES **************/\n\n /** @private */\n screenDPI = calcScreenDPI();\n\n /**\n * How much smaller the rendered pages are than the real-world item\n *\n * Mode1Up doesn't use the br.reduce because it is DPI aware. The reduction factor\n * of a given leaf can change (since leaves can have different DPIs), but the real-world\n * reduction is constant throughout.\n */\n realWorldReduce = 1;\n\n @property({ type: Number })\n scale = 1;\n /** Position (in unit-less, [0, 1] coordinates) in client to scale around */\n @property({ type: Object })\n scaleCenter = { x: 0.5, y: 0.5 };\n\n /************** VIRTUAL-SCROLLING PROPERTIES **************/\n\n /** in world coordinates (inches) */\n @property({ type: Object })\n visibleRegion = {\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n };\n\n /** @type {PageModel[]} */\n @property({ type: Array, hasChanged: arrChanged })\n visiblePages = [];\n\n /** @type {PageModel[]} */\n @property({ type: Array })\n renderedPages = [];\n\n /** @type {Record<PageIndex, PageContainer>} position in inches */\n pageContainerCache = {};\n\n /************** WORLD-RELATED PROPERTIES **************/\n /**\n * The world is an imaginary giant document that contains all the pages.\n * The \"world\"'s size is used to determine how long the scroll bar should\n * be, for example.\n */\n\n /** @type {HTMLElement} */\n @query('.br-mode-1up__world')\n $world;\n\n worldDimensions = { width: 100, height: 100 };\n\n get worldStyle() {\n const wToR = this.worldUnitsToRenderedPixels;\n return {\n width: wToR(this.worldDimensions.width) + \"px\",\n height: wToR(this.worldDimensions.height) + \"px\",\n };\n }\n\n /** @type {HTMLElement} */\n get $container() { return this; }\n\n /** @type {HTMLElement} */\n @query('.br-mode-1up__visible-world')\n $visibleWorld;\n\n /************** DOM-RELATED PROPERTIES **************/\n\n /** @type {HTMLDimensionsCacher} Cache things like clientWidth to reduce repaints */\n htmlDimensionsCacher = new HTMLDimensionsCacher(this);\n\n smoothZoomer = new ModeSmoothZoom(this);\n\n /************** CONSTANT PROPERTIES **************/\n\n /** Vertical space between/around the pages in inches */\n SPACING_IN = 0.2;\n\n /** How much to zoom when zoom button pressed */\n ZOOM_FACTOR = 1.1;\n\n /****************************************/\n /************** PUBLIC API **************/\n /****************************************/\n\n /************** MAIN PUBLIC METHODS **************/\n\n /**\n * @param {PageIndex} index\n */\n jumpToIndex(index, { smooth = false } = {}) {\n if (smooth) {\n this.style.scrollBehavior = 'smooth';\n }\n this.scrollTop = this.worldUnitsToVisiblePixels(this.pageTops[index] - this.SPACING_IN / 2);\n // TODO: Also h center?\n if (smooth) {\n setTimeout(() => this.style.scrollBehavior = '', 100);\n }\n }\n\n zoomIn() {\n this.scale *= this.ZOOM_FACTOR;\n }\n\n zoomOut() {\n this.scale *= 1 / this.ZOOM_FACTOR;\n }\n\n /********************************************/\n /************** INTERNAL STUFF **************/\n /********************************************/\n\n /************** LIFE CYCLE **************/\n\n /**\n * @param {BookModel} book\n * @param {BookReader} br\n */\n constructor(book, br) {\n super();\n this.book = book;\n\n /** @type {BookReader} */\n this.br = br;\n }\n\n /** @override */\n firstUpdated(changedProps) {\n super.firstUpdated(changedProps);\n this.htmlDimensionsCacher.updateClientSizes();\n this.smoothZoomer.attach();\n }\n\n /**\n * @param {PageIndex} startIndex\n */\n initFirstRender(startIndex) {\n const page = this.book.getPage(startIndex);\n this.scale = this.computeDefaultScale(page);\n }\n\n /** @override */\n updated(changedProps) {\n // this.X is the new value\n // changedProps.get('X') is the old value\n if (changedProps.has('book')) {\n this.pages = genToArray(this.book.pagesIterator({ combineConsecutiveUnviewables: true }));\n }\n if (changedProps.has('pages')) {\n this.worldDimensions = this.computeWorldDimensions();\n this.pageTops = this.computePageTops(this.pages, this.SPACING_IN);\n }\n if (changedProps.has('visibleRegion')) {\n this.visiblePages = this.computeVisiblePages();\n }\n if (changedProps.has('visiblePages')) {\n this.throttledUpdateRenderedPages();\n this.br.displayedIndices = this.visiblePages.map(p => p.index);\n this.br.updateFirstIndex(this.br.displayedIndices[0]);\n this.br.updateNavIndexThrottled();\n }\n if (changedProps.has('scale')) {\n const oldVal = changedProps.get('scale');\n // Need to set this scale to actually scale the pages\n this.$visibleWorld.style.transform = `scale(${this.scale})`;\n this.updateViewportOnZoom(this.scale, oldVal);\n // Need to set this scale to update the world size, so the scrollbar gets the correct size\n this.$world.style.transform = `scale(${this.scale})`;\n }\n }\n\n /** @override */\n connectedCallback() {\n super.connectedCallback();\n this.htmlDimensionsCacher.attachResizeListener();\n this.attachScrollListeners();\n this.smoothZoomer.attach();\n }\n\n /** @override */\n disconnectedCallback() {\n this.htmlDimensionsCacher.detachResizeListener();\n this.detachScrollListeners();\n this.smoothZoomer.detach();\n super.disconnectedCallback();\n }\n\n /************** LIT CONFIGS **************/\n\n /** @override */\n createRenderRoot() {\n // Disable shadow DOM; that would require a huge rejiggering of CSS\n return this;\n }\n\n /************** COORDINATE SPACE CONVERTERS **************/\n /**\n * There are a few different \"coordinate spaces\" at play in BR:\n * (1) World units: i.e. inches. Unless otherwise stated, all computations\n * are done in world units.\n * (2) Rendered Pixels: i.e. img.width = '300'. Note this does _not_ take\n * into account zoom scaling.\n * (3) Visible Pixels: Just rendered pixels, but taking into account scaling.\n */\n\n worldUnitsToRenderedPixels = (/** @type {number} */inches) => inches * this.screenDPI / this.realWorldReduce;\n renderedPixelsToWorldUnits = (/** @type {number} */px) => px * this.realWorldReduce / this.screenDPI;\n\n renderedPixelsToVisiblePixels = (/** @type {number} */px) => px * this.scale;\n visiblePixelsToRenderedPixels = (/** @type {number} */px) => px / this.scale;\n\n worldUnitsToVisiblePixels = (/** @type {number} */px) => this.renderedPixelsToVisiblePixels(this.worldUnitsToRenderedPixels(px));\n visiblePixelsToWorldUnits = (/** @type {number} */px) => this.renderedPixelsToWorldUnits(this.visiblePixelsToRenderedPixels(px));\n\n /************** RENDERING **************/\n\n /** @override */\n render() {\n return html`\n <div class=\"br-mode-1up__world\" style=${styleMap(this.worldStyle)}></div>\n <div class=\"br-mode-1up__visible-world\">\n ${this.renderedPages.map(p => this.renderPage(p))}\n </div>`;\n }\n\n /** @param {PageModel} page */\n createPageContainer = (page) => {\n return this.pageContainerCache[page.index] || (\n this.pageContainerCache[page.index] = (\n // @ts-ignore I know it's protected, TS! But Mode1Up and BookReader are friends.\n this.br._createPageContainer(page.index)\n )\n );\n }\n\n /** @param {PageModel} page */\n renderPage = (page) => {\n const wToR = this.worldUnitsToRenderedPixels;\n const wToV = this.worldUnitsToVisiblePixels;\n const containerWidth = this.visiblePixelsToWorldUnits(this.htmlDimensionsCacher.clientWidth);\n\n const width = wToR(page.widthInches);\n const height = wToR(page.heightInches);\n const left = Math.max(this.SPACING_IN, (containerWidth - page.widthInches) / 2);\n const top = this.pageTops[page.index];\n\n const transform = `translate(${wToR(left)}px, ${wToR(top)}px)`;\n const pageContainerEl = this.createPageContainer(page)\n .update({\n dimensions: {\n width,\n height,\n top: 0,\n left: 0,\n },\n reduce: page.width / wToV(page.widthInches),\n }).$container[0];\n\n pageContainerEl.style.transform = transform;\n return pageContainerEl;\n }\n\n /************** VIRTUAL SCROLLING LOGIC **************/\n\n updateVisibleRegion = () => {\n const { scrollTop, scrollLeft } = this;\n // clientHeight excludes scrollbars, which is good.\n const clientWidth = this.htmlDimensionsCacher.clientWidth;\n const clientHeight = this.htmlDimensionsCacher.clientHeight;\n\n // Note: scrollTop, and clientWidth all are in visible space;\n // i.e. they are affects by the CSS transforms.\n\n const vToW = this.visiblePixelsToWorldUnits;\n this.visibleRegion = {\n top: vToW(scrollTop),\n height: vToW(clientHeight),\n // TODO: These are very likely wrong\n left: vToW(scrollLeft),\n width: vToW(clientWidth),\n };\n }\n\n /**\n * @returns {PageModel[]}\n */\n computeRenderedPages() {\n // Also render 1 page before/after\n // @ts-ignore TS doesn't understand the filtering out of null values\n return [\n this.visiblePages[0]?.prev,\n ...this.visiblePages,\n this.visiblePages[this.visiblePages.length - 1]?.next,\n ]\n .filter(p => p)\n // Never render more than 10 pages! Usually means something is wrong\n .slice(0, 10);\n }\n\n throttledUpdateRenderedPages = throttle(() => {\n this.renderedPages = this.computeRenderedPages();\n this.requestUpdate();\n }, 100, null)\n\n /**\n * @param {PageModel[]} pages\n * @param {number} spacing\n */\n computePageTops(pages, spacing) {\n /** @type {{ [pageIndex: string]: number }} */\n const result = {};\n let top = spacing;\n for (const page of pages) {\n result[page.index] = top;\n top += page.heightInches + spacing;\n }\n return result;\n }\n\n /**\n * @param {PageModel} page\n * @returns {number}\n */\n computeDefaultScale(page) {\n // Default to real size if it fits, otherwise default to full width\n const containerWidthIn = this.visiblePixelsToWorldUnits(this.htmlDimensionsCacher.clientWidth);\n return Math.min(1, containerWidthIn / (page.widthInches + 2 * this.SPACING_IN));\n }\n\n computeWorldDimensions() {\n return {\n width: Math.max(...this.pages.map(p => p.widthInches)) + 2 * this.SPACING_IN,\n height:\n sum(this.pages.map(p => p.heightInches)) +\n (this.pages.length + 1) * this.SPACING_IN,\n };\n }\n\n computeVisiblePages() {\n return this.pages.filter(page => {\n const PT = this.pageTops[page.index];\n const PB = PT + page.heightInches;\n\n const VT = this.visibleRegion.top;\n const VB = VT + this.visibleRegion.height;\n return PT <= VB && PB >= VT;\n });\n }\n\n /************** ZOOMING LOGIC **************/\n\n /**\n * @param {number} newScale\n * @param {number} oldScale\n */\n updateViewportOnZoom(newScale, oldScale) {\n const container = this;\n const { scrollTop: T, scrollLeft: L } = container;\n const W = this.htmlDimensionsCacher.clientWidth;\n const H = this.htmlDimensionsCacher.clientHeight;\n\n // Scale factor change\n const F = newScale / oldScale;\n\n // Where in the viewport the zoom is centered on\n const XPOS = this.scaleCenter.x;\n const YPOS = this.scaleCenter.y;\n const oldCenter = {\n x: L + XPOS * W,\n y: T + YPOS * H,\n };\n const newCenter = {\n x: F * oldCenter.x,\n y: F * oldCenter.y,\n };\n container.scrollTop = newCenter.y - YPOS * H;\n container.scrollLeft = newCenter.x - XPOS * W;\n this.updateVisibleRegion();\n }\n\n /************** INPUT HANDLERS **************/\n\n attachScrollListeners = () => {\n this.addEventListener(\"scroll\", this.updateVisibleRegion, { passive: true });\n }\n\n detachScrollListeners = () => {\n this.removeEventListener(\"scroll\", this.updateVisibleRegion);\n }\n}\n","// @ts-check\nimport '../dragscrollable-br.js';\nimport { Mode1UpLit } from './Mode1UpLit.js';\n/** @typedef {import('../BookReader.js').default} BookReader */\n/** @typedef {import('./BookModel.js').BookModel} BookModel */\n/** @typedef {import('./BookModel.js').PageIndex} PageIndex */\n\nexport class Mode1Up {\n /**\n * @param {BookReader} br\n * @param {BookModel} bookModel\n */\n constructor(br, bookModel) {\n this.br = br;\n this.book = bookModel;\n this.mode1UpLit = new Mode1UpLit(bookModel, br);\n\n /** @private */\n this.$el = $(this.mode1UpLit).addClass('br-mode-1up BRmode1up');\n\n /** Has mode1up ever been rendered before? */\n this.everShown = false;\n }\n\n // TODO: Might not need this anymore? Might want to delete.\n /** @private */\n get $brContainer() { return this.br.refs.$brContainer; }\n\n /**\n * This is called when we switch to one page view\n */\n prepare() {\n const startLeaf = this.br.currentIndex();\n this.$brContainer\n .empty()\n .css({ overflow: 'hidden' })\n .append(this.$el);\n\n // Need this in a setTimeout so that it happens after the browser has _actually_\n // appended the element to the DOM\n setTimeout(async () => {\n if (!this.everShown) {\n this.mode1UpLit.initFirstRender(startLeaf);\n this.everShown = true;\n await this.mode1UpLit.requestUpdate();\n $(this.mode1UpLit).dragscrollable({\n preventDefault: true,\n dragSelector: '.br-mode-1up__visible-world',\n // Only handle mouse events; let browser/HammerJS handle touch\n dragstart: 'mousedown',\n dragcontinue: 'mousemove',\n dragend: 'mouseup',\n });\n }\n this.mode1UpLit.jumpToIndex(startLeaf);\n });\n this.br.updateBrClasses();\n }\n\n /**\n * BREAKING CHANGE: No longer supports pageX/pageY\n * @param {PageIndex} index\n * @param {number} [pageX] x position on the page (in pixels) to center on\n * @param {number} [pageY] y position on the page (in pixels) to center on\n * @param {boolean} [noAnimate]\n */\n jumpToIndex(index, pageX, pageY, noAnimate) {\n // Only smooth for small distances\n const distance = Math.abs(this.br.currentIndex() - index);\n const smooth = !noAnimate && distance <= 4;\n this.mode1UpLit.jumpToIndex(index, { smooth });\n }\n\n /**\n * @param {'in' | 'out'} direction\n */\n zoom(direction) {\n if (direction == 'in') this.mode1UpLit.zoomIn();\n else this.mode1UpLit.zoomOut();\n }\n\n /**\n * Resize the current one page view\n * Note this calls drawLeafs\n */\n resizePageView() {\n this.mode1UpLit.htmlDimensionsCacher.updateClientSizes();\n this.mode1UpLit.requestUpdate();\n }\n}\n","// @ts-check\n// effect.js gives acces to extra easing function (e.g. easeInSine)\nimport 'jquery-ui/ui/effect.js';\nimport '../dragscrollable-br.js';\nimport { clamp } from './utils.js';\nimport { EVENTS } from './events.js';\nimport { ModeSmoothZoom } from \"./ModeSmoothZoom.js\";\nimport { HTMLDimensionsCacher } from './utils/HTMLDimensionsCacher.js';\n\n/** @typedef {import('../BookReader.js').default} BookReader */\n/** @typedef {import('./BookModel.js').BookModel} BookModel */\n/** @typedef {import('./BookModel.js').PageIndex} PageIndex */\n/** @typedef {import('./options.js').BookReaderOptions} BookReaderOptions */\n/** @typedef {import('./PageContainer.js').PageContainer} PageContainer */\n/** @typedef {import('./ModeSmoothZoom').SmoothZoomable} SmoothZoomable */\n\n/** @implements {SmoothZoomable} */\nexport class Mode2Up {\n /**\n * @param {BookReader} br\n * @param {BookModel} bookModel\n */\n constructor(br, bookModel) {\n this.br = br;\n this.book = bookModel;\n\n /** @type {HTMLDivElement} */\n this.leafEdgeL = null;\n /** @type {HTMLDivElement} */\n this.leafEdgeR = null;\n\n /** @type {{ [index: number]: PageContainer }} */\n this.pageContainers = {};\n\n /** @type {ModeSmoothZoom} */\n this.smoothZoomer = null;\n this._scale = 1;\n this.scaleCenter = { x: 0.5, y: 0.5 };\n }\n\n get $container() {\n return this.br.refs.$brContainer[0];\n }\n get $visibleWorld() {\n return this.br.refs.$brTwoPageView?.[0];\n }\n\n get scale() { return this._scale; }\n set scale(newVal) {\n this.$visibleWorld.style.transform = `scale(${newVal})`;\n this.updateViewportOnZoom(newVal, this._scale);\n this._scale = newVal;\n }\n\n /**\n * @param {PageIndex} index\n */\n jumpToIndex(index) {\n // By checking against min/max we do nothing if requested index\n // is current\n if (index < Math.min(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR)) {\n this.flipBackToIndex(index);\n } else if (index > Math.max(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR)) {\n this.flipFwdToIndex(index);\n }\n }\n\n /**\n * Draws book spread,\n * sets event handlers,\n * sets: `this.br.displayedIndices`\n * updates toolbar zoom\n * Important: `this.br.refs.$brTwoPageView` parent container must be emptied before calling\n */\n drawLeafs() {\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n const indexL = this.br.twoPage.currentIndexL;\n const indexR = this.br.twoPage.currentIndexR;\n\n this.createPageContainer(indexL).$container\n .css(this.leftLeafCss)\n .appendTo($twoPageViewEl);\n this.createPageContainer(indexR).$container\n .css(this.rightLeafCss)\n .appendTo($twoPageViewEl);\n\n this.displayedIndices = [this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR];\n this.br.displayedIndices = this.displayedIndices;\n this.br.updateToolbarZoom(this.br.reduce);\n this.br.trigger('pageChanged');\n }\n\n /**\n * @param {1} direction\n */\n zoom(direction) {\n this.br.stopFlipAnimations();\n\n // Recalculate autofit factors\n this.calculateReductionFactors();\n\n // Get new zoom state\n const reductionFactor = this.br.nextReduce(this.br.reduce, direction, this.br.twoPage.reductionFactors);\n if ((this.br.reduce == reductionFactor.reduce) && (this.br.twoPage.autofit == reductionFactor.autofit)) {\n // Same zoom\n return;\n }\n this.br.twoPage.autofit = reductionFactor.autofit;\n this.br.reduce = reductionFactor.reduce;\n this.br.pageScale = this.br.reduce; // preserve current reduce\n\n // Preserve view center position\n const oldCenter = this.getViewCenter();\n\n // Prepare view with new center to minimize visual glitches\n const drawNewSpread = true;\n this.prepareTwoPageView(oldCenter.percentageX, oldCenter.percentageY, drawNewSpread);\n }\n\n /**\n * Resize spread containers, does not prefetch\n * uses `this.br.twoPage` properties\n */\n resizeSpread() {\n this.br.resizeBRcontainer(false); // no animation\n this.calculateSpreadSize();\n\n this.br.refs?.$brTwoPageView.css(this.mainContainerCss);\n this.centerView(); // let function self adjust\n\n $(this.br.twoPage.coverDiv).css(this.spreadCoverCss); // click sheath is memoized somehow\n const $spreadLayers = this.br.refs.$brTwoPageView;\n\n $spreadLayers.find('.BRleafEdgeR')?.css(this.leafEdgeRCss);\n $spreadLayers.find('.BRleafEdgeL')?.css(this.leafEdgeLCss);\n $spreadLayers.find('.BRgutter')?.css(this.spineCss);\n\n const indexL = this.br.twoPage.currentIndexL;\n const indexR = this.br.twoPage.currentIndexR;\n this.pageContainers[indexL].$container.css(this.leftLeafCss);\n this.pageContainers[indexR].$container.css(this.rightLeafCss);\n }\n\n /**\n * @param {number} centerPercentageX\n * @param {number} centerPercentageY\n * @param {Boolean} drawNewSpread\n */\n prepareTwoPageView(centerPercentageX, centerPercentageY, drawNewSpread = false) {\n // Some decisions about two page view:\n //\n // Both pages will be displayed at the same height, even if they were different physical/scanned\n // sizes. This simplifies the animation (from a design as well as technical standpoint). We\n // examine the page aspect ratios (in calculateSpreadSize) and use the page with the most \"normal\"\n // aspect ratio to determine the height.\n //\n // The two page view div is resized to keep the middle of the book in the middle of the div\n // even as the page sizes change. To e.g. keep the middle of the book in the middle of the BRcontent\n // div requires adjusting the offset of BRtwpageview and/or scrolling in BRcontent.\n const startingReduce = this.br.reduce;\n const startingIndices = this.br.displayedIndices;\n\n this.br.refs.$brContainer.empty();\n this.br.refs.$brContainer.css('overflow', 'auto');\n\n // We want to display two facing pages. We may be missing\n // one side of the spread because it is the first/last leaf,\n // foldouts, missing pages, etc\n\n const targetLeaf = clamp(this.br.firstIndex, this.br.firstDisplayableIndex(), this.br.lastDisplayableIndex());\n const currentSpreadIndices = this.book.getSpreadIndices(targetLeaf);\n this.br.twoPage.currentIndexL = currentSpreadIndices[0];\n this.br.twoPage.currentIndexR = currentSpreadIndices[1];\n\n this.calculateSpreadSize(); //sets this.br.reduce, twoPage.width, twoPage.height and others\n\n /* check if calculations have changed that warrant a new book draw */\n const sameReducer = startingReduce == this.br.reduce;\n const sameStart = startingIndices == this.br.displayedIndices;\n const hasNewDisplayPagesOrDimensions = !sameStart || (sameStart && !sameReducer);\n\n if (drawNewSpread || hasNewDisplayPagesOrDimensions) {\n this.prunePageContainers();\n this.prefetch();\n }\n\n // Add the two page view\n // $$$ Can we get everything set up and then append?\n this.br.refs.$brTwoPageView = this.br.refs.$brTwoPageView || $('<div class=\"BRtwopageview\"></div>');\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n $twoPageViewEl.empty();\n $twoPageViewEl[0].style.transformOrigin = '0 0';\n this.br.refs.$brContainer.append($twoPageViewEl);\n\n // Attaches to first child, so must come after we add the page view\n this.br.refs.$brContainer.dragscrollable({\n preventDefault:true,\n // Only handle mouse events; let browser/HammerJS handle touch\n dragstart: 'mousedown',\n dragcontinue: 'mousemove',\n dragend: 'mouseup',\n });\n\n this.attachMouseHandlers();\n\n // $$$ calculate container size first\n this.br.refs?.$brTwoPageView.css(this.mainContainerCss);\n\n // This will trump the incoming coordinates\n // in order to center book when zooming out\n if (this.br.twoPage.totalWidth < this.br.refs.$brContainer.prop('clientWidth')) {\n centerPercentageX = 0.5;\n }\n if (this.br.twoPage.totalHeight < this.br.refs.$brContainer.prop('clientHeight')) {\n centerPercentageY = 0.5;\n }\n\n this.centerView(centerPercentageX, centerPercentageY);\n\n // then set\n this.br.twoPage.coverDiv = document.createElement('div');\n $(this.br.twoPage.coverDiv).attr('class', 'BRbookcover').css(this.spreadCoverCss).appendTo(this.br.refs.$brTwoPageView);\n\n this.leafEdgeR = document.createElement('div');\n this.leafEdgeR.className = 'BRleafEdgeR';\n $(this.leafEdgeR).css(this.leafEdgeRCss).appendTo(this.br.refs.$brTwoPageView);\n\n this.leafEdgeL = document.createElement('div');\n this.leafEdgeL.className = 'BRleafEdgeL';\n $(this.leafEdgeL).css(this.leafEdgeLCss).appendTo(this.br.refs.$brTwoPageView);\n\n const div = document.createElement('div');\n $(div).attr('class', 'BRgutter').css(this.spineCss).appendTo(this.br.refs.$brTwoPageView);\n\n this.preparePopUp();\n\n this.br.displayedIndices = [];\n\n this.drawLeafs();\n this.br.updateToolbarZoom(this.br.reduce);\n this.br.updateBrClasses();\n\n this.smoothZoomer = this.smoothZoomer || new ModeSmoothZoom(this);\n this.smoothZoomer.attach();\n\n this.htmlDimensionsCacher = this.htmlDimensionsCacher || new HTMLDimensionsCacher(this.$container);\n }\n\n unprepare() {\n // Mode2Up attaches these listeners to the main BR container, so we need to\n // detach these or it will cause issues for the other modes.\n this.smoothZoomer.detach();\n }\n\n /**\n * @param {number} newScale\n * @param {number} oldScale\n */\n updateViewportOnZoom(newScale, oldScale) {\n const container = this.br.refs.$brContainer[0];\n const { scrollTop: T, scrollLeft: L } = container;\n const W = this.htmlDimensionsCacher.clientWidth;\n const H = this.htmlDimensionsCacher.clientHeight;\n\n // Scale factor change\n const F = newScale / oldScale;\n\n // Where in the viewport the zoom is centered on\n const XPOS = this.scaleCenter.x;\n const YPOS = this.scaleCenter.y;\n const oldCenter = {\n x: L + XPOS * W,\n y: T + YPOS * H,\n };\n const newCenter = {\n x: F * oldCenter.x,\n y: F * oldCenter.y,\n };\n container.scrollTop = newCenter.y - YPOS * H;\n container.scrollLeft = newCenter.x - XPOS * W;\n\n // Also update the visible page containers to load in highres if necessary\n this.pageContainers[this.br.twoPage.currentIndexL]?.update({ reduce: this.br.reduce / newScale });\n this.pageContainers[this.br.twoPage.currentIndexR]?.update({ reduce: this.br.reduce / newScale });\n }\n\n prunePageContainers() {\n for (const index in this.pageContainers) {\n if ((index != this.br.twoPage.currentIndexL) && (index != this.br.twoPage.currentIndexR)) {\n $(this.pageContainers[index].$container).remove();\n }\n if ((index < this.br.twoPage.currentIndexL - 4) || (index > this.br.twoPage.currentIndexR + 4)) {\n delete this.pageContainers[index];\n }\n }\n }\n\n /**\n * This function prepares the \"View Page n\" popup that shows while the mouse is\n * over the left/right \"stack of sheets\" edges. It also binds the mouse\n * events for these divs.\n */\n preparePopUp() {\n this.br.twoPagePopUp = document.createElement('div');\n this.br.twoPagePopUp.className = 'BRtwoPagePopUp';\n $(this.br.twoPagePopUp).css({\n zIndex: '1000'\n }).appendTo(this.br.refs.$brContainer);\n $(this.br.twoPagePopUp).hide();\n\n const leafEdges = [\n {\n $leafEdge: $(this.leafEdgeL),\n /** @type {function(number): PageIndex} */\n jumpIndexForPageX: this.jumpIndexForLeftEdgePageX.bind(this),\n leftOffset: () => -$(this.br.twoPagePopUp).width() + 120,\n },\n {\n $leafEdge: $(this.leafEdgeR),\n /** @type {function(number): PageIndex} */\n jumpIndexForPageX: this.jumpIndexForRightEdgePageX.bind(this),\n leftOffset: () => -120,\n },\n ];\n\n for (const { $leafEdge, jumpIndexForPageX, leftOffset } of leafEdges) {\n $leafEdge.on('mouseenter', () => $(this.br.twoPagePopUp).show());\n $leafEdge.on('mouseleave', () => $(this.br.twoPagePopUp).hide());\n\n $leafEdge.on('click', e => {\n this.br.trigger(EVENTS.stop);\n this.br.jumpToIndex(jumpIndexForPageX(e.pageX));\n });\n\n $leafEdge.on('mousemove', e => {\n const jumpIndex = clamp(jumpIndexForPageX(e.pageX), 0, this.book.getNumLeafs() - 1);\n $(this.br.twoPagePopUp).text(`View ${this.book.getPageName(jumpIndex)}`);\n\n // $$$ TODO: Make sure popup is positioned so that it is in view\n // (https://bugs.edge.launchpad.net/gnubook/+bug/327456)\n $(this.br.twoPagePopUp).css({\n left: `${e.pageX - this.br.refs.$brContainer.offset().left + this.br.refs.$brContainer.scrollLeft() + leftOffset()}px`,\n top: `${e.pageY - this.br.refs.$brContainer.offset().top + this.br.refs.$brContainer.scrollTop()}px`\n });\n });\n }\n }\n\n setSpreadIndices() {\n const targetLeaf = clamp(this.br.firstIndex, this.br.firstDisplayableIndex(), this.br.lastDisplayableIndex());\n const currentSpreadIndices = this.book.getSpreadIndices(targetLeaf);\n this.br.twoPage.currentIndexL = currentSpreadIndices[0];\n this.br.twoPage.currentIndexR = currentSpreadIndices[1];\n }\n\n /**\n * Calculates 2-page spread dimensions based on this.br.twoPage.currentIndexL and\n * this.br.twoPage.currentIndexR\n * This function sets this.br.twoPage.height, twoPage.width\n */\n calculateSpreadSize() {\n const firstIndex = this.br.twoPage.currentIndexL;\n const secondIndex = this.br.twoPage.currentIndexR;\n\n // Calculate page sizes and total leaf width\n let spreadSize;\n if ( this.br.twoPage.autofit) {\n spreadSize = this.getIdealSpreadSize(firstIndex, secondIndex);\n } else {\n // set based on reduction factor\n spreadSize = this.getSpreadSizeFromReduce(firstIndex, secondIndex, this.br.reduce);\n }\n // Both pages together\n this.br.twoPage.height = spreadSize.height || 0;\n this.br.twoPage.width = spreadSize.width || 0;\n\n // Individual pages\n this.br.twoPage.scaledWL = this.getPageWidth(firstIndex) || 0;\n this.br.twoPage.scaledWR = this.getPageWidth(secondIndex) || 0;\n\n // Leaf edges\n this.br.twoPage.edgeWidth = spreadSize.totalLeafEdgeWidth; // The combined width of both edges\n this.br.twoPage.leafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n this.br.twoPage.leafEdgeWidthR = this.br.twoPage.edgeWidth - this.br.twoPage.leafEdgeWidthL;\n\n\n // Book cover\n // The width of the book cover div. The combined width of both pages, twice the width\n // of the book cover internal padding (2*10) and the page edges\n this.br.twoPage.bookCoverDivWidth = this.coverWidth(this.br.twoPage.scaledWL + this.br.twoPage.scaledWR);\n // The height of the book cover div\n this.br.twoPage.bookCoverDivHeight = this.br.twoPage.height + 2 * this.br.twoPage.coverInternalPadding;\n\n\n // We calculate the total width and height for the div so that we can make the book\n // spine centered\n const leftGutterOffset = this.gutterOffsetForIndex(firstIndex);\n const leftWidthFromCenter = this.br.twoPage.scaledWL - leftGutterOffset + this.br.twoPage.leafEdgeWidthL;\n const rightWidthFromCenter = this.br.twoPage.scaledWR + leftGutterOffset + this.br.twoPage.leafEdgeWidthR;\n const largestWidthFromCenter = Math.max( leftWidthFromCenter, rightWidthFromCenter );\n this.br.twoPage.totalWidth = 2 * (largestWidthFromCenter + this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n this.br.twoPage.totalHeight = this.br.twoPage.height + 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n\n // We want to minimize the unused space in two-up mode (maximize the amount of page\n // shown). We give width to the leaf edges and these widths change (though the sum\n // of the two remains constant) as we flip through the book. With the book\n // cover centered and fixed in the BRcontainer div the page images will meet\n // at the \"gutter\" which is generally offset from the center.\n this.br.twoPage.middle = this.br.twoPage.totalWidth >> 1;\n this.br.twoPage.gutter = this.br.twoPage.middle + this.gutterOffsetForIndex(firstIndex);\n\n // The left edge of the book cover moves depending on the width of the pages\n // $$$ change to getter\n this.br.twoPage.bookCoverDivLeft = this.br.twoPage.gutter - this.br.twoPage.scaledWL - this.br.twoPage.leafEdgeWidthL - this.br.twoPage.coverInternalPadding;\n // The top edge of the book cover stays a fixed distance from the top\n this.br.twoPage.bookCoverDivTop = this.br.twoPage.coverExternalPadding;\n\n // Book spine\n this.br.twoPage.bookSpineDivHeight = this.br.twoPage.height + 2 * this.br.twoPage.coverInternalPadding;\n this.br.twoPage.bookSpineDivLeft = this.br.twoPage.middle - (this.br.twoPage.bookSpineDivWidth >> 1);\n this.br.twoPage.bookSpineDivTop = this.br.twoPage.bookCoverDivTop;\n\n this.br.reduce = spreadSize.reduce < 0 ? this.br.reduce : spreadSize.reduce; // $$$ really set this here?\n }\n\n /**\n *\n * @param {number} firstIndex\n * @param {number} secondIndex\n * @return {{ width: number, height: number, totalLeafEdgeWidth: number, reduce: number}}\n */\n getIdealSpreadSize(firstIndex, secondIndex) {\n const ideal = {};\n\n // We check which page is closest to a \"normal\" page and use that to set the height\n // for both pages. This means that foldouts and other odd size pages will be displayed\n // smaller than the nominal zoom amount.\n const canon5Dratio = 1.5;\n\n const first = {\n height: this.book._getPageHeight(firstIndex),\n width: this.book._getPageWidth(firstIndex)\n };\n\n const second = {\n height: this.book._getPageHeight(secondIndex),\n width: this.book._getPageWidth(secondIndex)\n };\n\n const firstIndexRatio = first.height / first.width;\n const secondIndexRatio = second.height / second.width;\n\n let ratio;\n if (Math.abs(firstIndexRatio - canon5Dratio) < Math.abs(secondIndexRatio - canon5Dratio)) {\n ratio = firstIndexRatio;\n } else {\n ratio = secondIndexRatio;\n }\n\n const totalLeafEdgeWidth = Math.floor(this.book.getNumLeafs() * 0.1);\n const maxLeafEdgeWidth = Math.floor(this.br.refs.$brContainer.prop('clientWidth') * 0.1);\n ideal.totalLeafEdgeWidth = Math.min(totalLeafEdgeWidth, maxLeafEdgeWidth);\n\n const widthOutsidePages = 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding) + ideal.totalLeafEdgeWidth;\n const heightOutsidePages = 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n\n ideal.width = (this.br.refs.$brContainer.width() - widthOutsidePages) >> 1;\n ideal.width = ideal.width > 10 ? ideal.width - 10 : 1; // $$$ fudge factor\n\n ideal.height = this.br.refs.$brContainer.height() - heightOutsidePages;\n ideal.height = ideal.height > 15 ? ideal.height - 15 : 1; // $$$ fudge factor\n\n if (ideal.height / ratio <= ideal.width) {\n //use height\n ideal.width = Math.floor(ideal.height / ratio) || 1;\n } else {\n //use width\n ideal.height = Math.floor(ideal.width * ratio) || 1;\n }\n\n // $$$ check this logic with large spreads\n ideal.reduce = Math.round(((first.height + second.height) / 2) / ideal.height);\n\n return ideal;\n }\n\n /**\n * Returns the spread size calculated from the reduction factor for the given pages\n * @param {number} firstIndex\n * @param {number} secondIndex\n * @return {Object}\n */\n getSpreadSizeFromReduce(firstIndex, secondIndex, reduce) {\n const spreadSize = {};\n // $$$ Scale this based on reduce?\n const totalLeafEdgeWidth = Math.floor(this.book.getNumLeafs() * 0.1);\n // $$$ Assumes leaf edge width constant at all zoom levels\n const maxLeafEdgeWidth = Math.floor(this.br.refs.$brContainer.prop('clientWidth') * 0.1);\n spreadSize.totalLeafEdgeWidth = Math.min(totalLeafEdgeWidth, maxLeafEdgeWidth);\n\n // $$$ Possibly incorrect -- we should make height \"dominant\"\n const nativeWidth = this.book._getPageWidth(firstIndex) + this.book._getPageWidth(secondIndex);\n const nativeHeight = this.book._getPageHeight(firstIndex) + this.book._getPageHeight(secondIndex);\n spreadSize.height = Math.floor( (nativeHeight / 2) / this.br.reduce );\n spreadSize.width = Math.floor( (nativeWidth / 2) / this.br.reduce );\n spreadSize.reduce = reduce;\n\n return spreadSize;\n }\n\n /**\n * Returns the current ideal reduction factor\n * @return {number}\n */\n getAutofitReduce() {\n const spreadSize = this.getIdealSpreadSize(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR);\n return spreadSize.reduce;\n }\n\n /**\n * Returns true if the pages extend past the edge of the view\n * @deprecated slated for deprecation by v5.0.0\n * @return {boolean}\n */\n isZoomedIn() {\n let isZoomedIn = false;\n if (this.br.twoPage.autofit != 'auto') {\n if (this.br.reduce < this.getAutofitReduce()) {\n isZoomedIn = true;\n }\n }\n return isZoomedIn;\n }\n\n calculateReductionFactors() {\n this.br.twoPage.reductionFactors = this.br.reductionFactors.concat([\n {\n reduce: this.getIdealSpreadSize( this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR ).reduce,\n autofit: 'auto'\n }\n ]);\n this.br.twoPage.reductionFactors.sort(this.br._reduceSort);\n }\n\n /**\n * Set the cursor for two page view\n * @deprecated Since version 4.3.3. Will be deleted in version 5.0\n */\n setCursor() {\n console.warn('Call to deprecated method, Mode2Up.setCursor. No-op.');\n }\n\n /**\n * @param {Number|null} index to flip back one spread, pass index=null\n */\n flipBackToIndex(index) {\n if (this.br.constMode1up == this.br.mode) return;\n if (this.br.animating) return;\n\n if (null != this.br.leafEdgeTmp) {\n alert('error: leafEdgeTmp should be null!');\n return;\n }\n\n if (null == index) {\n const {currentIndexL, currentIndexR} = this.br.twoPage;\n const minDisplayedIndex = Math.min(currentIndexL, currentIndexR);\n const prev = this.book.getPage(minDisplayedIndex).findPrev({ combineConsecutiveUnviewables: true });\n if (!prev) return;\n index = prev.index;\n // Can only flip to a left page\n // (downstream code handles index = -1, so this is ok I guess)\n if (prev.pageSide == 'R') index--;\n }\n\n this.br.updateNavIndexThrottled(index);\n\n const previousIndices = this.book.getSpreadIndices(index);\n\n if (previousIndices[0] < this.br.firstDisplayableIndex() || previousIndices[1] < this.br.firstDisplayableIndex()) {\n return;\n }\n\n this.br.animating = true;\n\n if ('rl' != this.br.pageProgression) {\n // Assume LTR and we are going backward\n this.prepareFlipLeftToRight(previousIndices[0], previousIndices[1]);\n this.flipLeftToRight(previousIndices[0], previousIndices[1]);\n } else {\n // RTL and going backward\n this.prepareFlipRightToLeft(previousIndices[0], previousIndices[1]);\n this.flipRightToLeft(previousIndices[0], previousIndices[1]);\n }\n }\n\n /**\n * Flips the page on the left towards the page on the right\n * @param {number} newIndexL\n * @param {number} newIndexR\n */\n flipLeftToRight(newIndexL, newIndexR) {\n this.br.refs.$brContainer.addClass(\"BRpageFlipping\");\n const leftLeaf = this.br.twoPage.currentIndexL;\n\n const oldLeafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n const newLeafEdgeWidthL = this.br.leafEdgeWidth(newIndexL);\n const leafEdgeTmpW = oldLeafEdgeWidthL - newLeafEdgeWidthL;\n\n const currWidthL = this.getPageWidth(leftLeaf);\n const newWidthL = this.getPageWidth(newIndexL);\n const newWidthR = this.getPageWidth(newIndexR);\n\n const top = this.top();\n const gutter = this.br.twoPage.middle + this.gutterOffsetForIndex(newIndexL);\n\n //animation strategy:\n // 0. remove search highlight, if any.\n // 1. create a new div, called leafEdgeTmp to represent the leaf edge between the leftmost edge\n // of the left leaf and where the user clicked in the leaf edge.\n // Note that if this function was triggered by left() and not a\n // mouse click, the width of leafEdgeTmp is very small (zero px).\n // 2. animate both leafEdgeTmp to the gutter (without changing its width) and animate\n // leftLeaf to width=0.\n // 3. When step 2 is finished, animate leafEdgeTmp to right-hand side of new right leaf\n // (left=gutter+newWidthR) while also animating the new right leaf from width=0 to\n // its new full width.\n // 4. After step 3 is finished, do the following:\n // - remove leafEdgeTmp from the dom.\n // - resize and move the right leaf edge (leafEdgeR) to left=gutter+newWidthR\n // and width=twoPage.edgeWidth-newLeafEdgeWidthL.\n // - resize and move the left leaf edge (leafEdgeL) to left=gutter-newWidthL-newLeafEdgeWidthL\n // and width=newLeafEdgeWidthL.\n // - resize the back cover (twoPage.coverDiv) to left=gutter-newWidthL-newLeafEdgeWidthL-10\n // and width=newWidthL+newWidthR+twoPage.edgeWidth+20\n // - move new left leaf (newIndexL) forward to zindex=2 so it can receive clicks.\n // - remove old left and right leafs from the dom [prunePageContainers()].\n // - prefetch new adjacent leafs.\n // - set up click handlers for both new left and right leafs.\n // - redraw the search highlight.\n // - update the pagenum box and the url.\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n const leftEdgeTmpLeft = gutter - currWidthL - leafEdgeTmpW;\n\n this.br.leafEdgeTmp = document.createElement('div');\n this.br.leafEdgeTmp.className = 'BRleafEdgeTmp';\n $(this.br.leafEdgeTmp).css({\n width: `${leafEdgeTmpW}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${leftEdgeTmpLeft}px`,\n top: `${top}px`,\n zIndex: 1000,\n }).appendTo($twoPageViewEl);\n\n $(this.leafEdgeL).css({\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - currWidthL - newLeafEdgeWidthL}px`\n });\n\n // Left gets the offset of the current left leaf from the document\n const left = this.pageContainers[leftLeaf].$container.offset().left;\n // $$$ This seems very similar to the gutter. May be able to consolidate the logic.\n const right = `${$twoPageViewEl.prop('clientWidth') - left - this.pageContainers[leftLeaf].$container.width() + $twoPageViewEl.offset().left - 2}px`;\n\n // We change the left leaf to right positioning\n // $$$ This causes animation glitches during resize. See https://bugs.edge.launchpad.net/gnubook/+bug/328327\n this.pageContainers[leftLeaf].$container.css({\n right,\n left: ''\n });\n\n $(this.br.leafEdgeTmp).animate({left: gutter}, this.br.flipSpeed, 'easeInSine');\n\n this.pageContainers[leftLeaf].$container.animate({width: '0px'}, this.br.flipSpeed, 'easeInSine', () => {\n\n $(this.br.leafEdgeTmp).animate({left: `${gutter + newWidthR}px`}, this.br.flipSpeed, 'easeOutSine');\n\n this.br.$('.BRgutter').css({left: `${gutter - this.br.twoPage.bookSpineDivWidth * 0.5}px`});\n\n this.pageContainers[newIndexR].$container.animate({width: `${newWidthR}px`}, this.br.flipSpeed, 'easeOutSine', () => {\n this.pageContainers[newIndexL].$container.css('zIndex', 2);\n\n $(this.leafEdgeR).css({\n // Moves the right leaf edge\n width: `${this.br.twoPage.edgeWidth - newLeafEdgeWidthL}px`,\n left: `${gutter + newWidthR}px`\n });\n\n $(this.leafEdgeL).css({\n // Moves and resizes the left leaf edge\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL}px`\n });\n\n // Resizes the brown border div\n $(this.br.twoPage.coverDiv).css({\n width: `${this.coverWidth(newWidthL + newWidthR)}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL - this.br.twoPage.coverInternalPadding}px`\n });\n\n $(this.br.leafEdgeTmp).remove();\n this.br.leafEdgeTmp = null;\n\n // $$$ TODO refactor with opposite direction flip\n\n this.br.twoPage.currentIndexL = newIndexL;\n this.br.twoPage.currentIndexR = newIndexR;\n this.br.twoPage.scaledWL = newWidthL;\n this.br.twoPage.scaledWR = newWidthR;\n this.br.twoPage.gutter = gutter;\n\n this.br.updateFirstIndex(this.br.twoPage.currentIndexL);\n this.br.displayedIndices = [newIndexL, newIndexR];\n this.prunePageContainers();\n this.br.animating = false;\n\n this.resizeSpread();\n\n if (this.br.animationFinishedCallback) {\n this.br.animationFinishedCallback();\n this.br.animationFinishedCallback = null;\n }\n\n this.br.refs.$brContainer.removeClass(\"BRpageFlipping\");\n this.br.textSelectionPlugin?.stopPageFlip(this.br.refs.$brContainer);\n this.centerView();\n this.br.trigger('pageChanged');\n\n // get next previous batch immediately\n this.prunePageContainers();\n this.createPageContainer(newIndexL - 2);\n this.createPageContainer(newIndexR - 2);\n this.createPageContainer(newIndexL - 3);\n this.createPageContainer(newIndexR - 3);\n });\n });\n }\n\n /**\n * @param {PageIndex} index\n */\n createPageContainer(index) {\n if (!this.pageContainers[index]) {\n this.pageContainers[index] = this.br._createPageContainer(index);\n }\n this.pageContainers[index].update({ reduce: this.br.reduce / this.scale });\n return this.pageContainers[index];\n }\n\n /**\n * Whether we flip left or right is dependent on the page progression\n * to flip forward one spread, pass index=null\n * @param {number} index\n */\n flipFwdToIndex(index) {\n if (this.br.animating) return;\n\n if (null != this.br.leafEdgeTmp) {\n alert('error: leafEdgeTmp should be null!');\n return;\n }\n\n if (null == index) {\n // Need to use the max here, since it could be a right to left book\n const {currentIndexL, currentIndexR} = this.br.twoPage;\n const maxDisplayedIndex = Math.max(currentIndexL, currentIndexR);\n const nextPage = this.book.getPage(maxDisplayedIndex).findNext({ combineConsecutiveUnviewables: true });\n if (!nextPage) return;\n index = nextPage.index;\n }\n if (index > this.br.lastDisplayableIndex()) return;\n\n this.br.updateNavIndexThrottled(index);\n\n this.br.animating = true;\n\n const nextIndices = this.book.getSpreadIndices(index);\n\n if ('rl' != this.br.pageProgression) {\n // We did not specify RTL\n this.prepareFlipRightToLeft(nextIndices[0], nextIndices[1]);\n this.flipRightToLeft(nextIndices[0], nextIndices[1]);\n } else {\n // RTL\n this.prepareFlipLeftToRight(nextIndices[0], nextIndices[1]);\n this.flipLeftToRight(nextIndices[0], nextIndices[1]);\n }\n }\n\n /**\n * Flip from left to right and show the nextL and nextR indices on those sides\n * $$$ better not to have to pass gutter in\n * @param {number} newIndexL\n * @param {number} newIndexR\n */\n flipRightToLeft(newIndexL, newIndexR) {\n this.br.refs.$brContainer.addClass(\"BRpageFlipping\");\n\n const oldLeafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n const oldLeafEdgeWidthR = this.br.twoPage.edgeWidth - oldLeafEdgeWidthL;\n const newLeafEdgeWidthL = this.br.leafEdgeWidth(newIndexL);\n const newLeafEdgeWidthR = this.br.twoPage.edgeWidth - newLeafEdgeWidthL;\n\n const leafEdgeTmpW = oldLeafEdgeWidthR - newLeafEdgeWidthR;\n\n const top = this.top();\n const scaledW = this.getPageWidth(this.br.twoPage.currentIndexR);\n\n const middle = this.br.twoPage.middle;\n const gutter = middle + this.gutterOffsetForIndex(newIndexL);\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n\n this.br.leafEdgeTmp = document.createElement('div');\n this.br.leafEdgeTmp.className = 'BRleafEdgeTmp';\n $(this.br.leafEdgeTmp).css({\n width: `${leafEdgeTmpW}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${gutter + scaledW}px`,\n top: `${top}px`,\n zIndex:1000\n }).appendTo($twoPageViewEl);\n\n const newWidthL = this.getPageWidth(newIndexL);\n const newWidthR = this.getPageWidth(newIndexR);\n\n $(this.leafEdgeR).css({width: `${newLeafEdgeWidthR}px`, left: `${gutter + newWidthR}px` });\n const speed = this.br.flipSpeed;\n\n $(this.br.leafEdgeTmp).animate({left: gutter}, speed, 'easeInSine');\n this.pageContainers[this.br.twoPage.currentIndexR].$container.animate({width: '0px'}, speed, 'easeInSine', () => {\n this.br.$('BRgutter').css({left: `${gutter - this.br.twoPage.bookSpineDivWidth * 0.5}px`});\n $(this.br.leafEdgeTmp).animate({left: `${gutter - newWidthL - leafEdgeTmpW}px`}, speed, 'easeOutSine');\n this.pageContainers[newIndexL].$container.animate({width: `${newWidthL}px`}, speed, 'easeOutSine', () => {\n this.pageContainers[newIndexR].$container.css('zIndex', 2);\n\n $(this.leafEdgeL).css({\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL}px`\n });\n\n // Resizes the book cover\n $(this.br.twoPage.coverDiv).css({\n width: `${this.coverWidth(newWidthL + newWidthR)}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL - this.br.twoPage.coverInternalPadding}px`\n });\n\n $(this.br.leafEdgeTmp).remove();\n this.br.leafEdgeTmp = null;\n\n this.br.twoPage.currentIndexL = newIndexL;\n this.br.twoPage.currentIndexR = newIndexR;\n this.br.twoPage.scaledWL = newWidthL;\n this.br.twoPage.scaledWR = newWidthR;\n this.br.twoPage.gutter = gutter;\n\n this.br.updateFirstIndex(this.br.twoPage.currentIndexL);\n this.br.displayedIndices = [newIndexL, newIndexR];\n this.prunePageContainers();\n this.br.animating = false;\n\n this.resizeSpread();\n\n if (this.br.animationFinishedCallback) {\n this.br.animationFinishedCallback();\n this.br.animationFinishedCallback = null;\n }\n\n this.br.refs.$brContainer.removeClass(\"BRpageFlipping\");\n this.br.textSelectionPlugin?.stopPageFlip(this.br.refs.$brContainer);\n this.centerView();\n this.br.trigger('pageChanged');\n\n this.prunePageContainers();\n this.createPageContainer(newIndexL + 2);\n this.createPageContainer(newIndexR + 2);\n this.createPageContainer(newIndexL + 3);\n this.createPageContainer(newIndexR + 3);\n });\n });\n }\n\n attachMouseHandlers() {\n this.br.refs.$brTwoPageView\n .off('mouseup').on('mouseup', ev => {\n if (ev.which == 3) {\n // right click\n return !this.br.protected;\n }\n\n const $page = $(ev.target).closest('.BRpagecontainer');\n if ($page.data('side') == 'L') this.br.left();\n else if ($page.data('side') == 'R') this.br.right();\n });\n }\n\n /**\n * Prepare to flip the left page towards the right. This corresponds to moving\n * backward when the page progression is left to right.\n * @param {number} prevL\n * @param {number} prevR\n */\n prepareFlipLeftToRight(prevL, prevR) {\n this.createPageContainer(prevL, true);\n this.createPageContainer(prevR, true);\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n const height = this.book._getPageHeight(prevL);\n const width = this.book._getPageWidth(prevL);\n const middle = this.br.twoPage.middle;\n const top = this.top();\n const scaledW = this.br.twoPage.height * width / height; // $$$ assumes height of page is dominant\n\n // The gutter is the dividing line between the left and right pages.\n // It is offset from the middle to create the illusion of thickness to the pages\n const gutter = middle + this.gutterOffsetForIndex(prevL);\n\n const leftCSS = {\n left: `${gutter - scaledW}px`,\n right: '', // clear right property\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: `${scaledW}px`,\n zIndex: 1\n };\n\n this.pageContainers[prevL].$container\n .css(leftCSS)\n .appendTo($twoPageViewEl);\n\n const rightCSS = {\n left: `${gutter}px`,\n right: '',\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: '0',\n zIndex: 2\n };\n\n this.pageContainers[prevR].$container\n .css(rightCSS)\n .appendTo($twoPageViewEl);\n }\n\n /**\n * // $$$ mang we're adding an extra pixel in the middle. See https://bugs.edge.launchpad.net/gnubook/+bug/411667\n */\n prepareFlipRightToLeft(nextL, nextR) {\n this.createPageContainer(nextL, true);\n this.createPageContainer(nextR, true);\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n let height = this.book._getPageHeight(nextR);\n let width = this.book._getPageWidth(nextR);\n const middle = this.br.twoPage.middle;\n const top = this.top();\n let scaledW = this.br.twoPage.height * width / height;\n\n const gutter = middle + this.gutterOffsetForIndex(nextL);\n\n $(this.pageContainers[nextR].$container).css({\n left: `${gutter}px`,\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: `${scaledW}px`,\n zIndex: 1,\n })\n .appendTo($twoPageViewEl);\n\n height = this.book._getPageHeight(nextL);\n width = this.book._getPageWidth(nextL);\n scaledW = this.br.twoPage.height * width / height;\n\n $(this.pageContainers[nextL].$container).css({\n right: `${$twoPageViewEl.prop('clientWidth') - gutter}px`,\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: '0px', // Start at 0 width, then grow to the left\n zIndex: 2,\n })\n .appendTo($twoPageViewEl);\n }\n\n getPageWidth(index) {\n // We return the width based on the dominant height\n const height = this.book._getPageHeight(index);\n const width = this.book._getPageWidth(index);\n // $$$ we assume width is relative to current spread\n return Math.floor(this.br.twoPage.height * width / height);\n }\n\n /**\n * Returns the position of the gutter (line between the page images)\n */\n gutter() {\n return this.br.twoPage.middle + this.gutterOffsetForIndex(this.br.twoPage.currentIndexL);\n }\n\n /**\n * Returns the offset for the top of the page images\n */\n top() {\n return this.br.twoPage.coverExternalPadding + this.br.twoPage.coverInternalPadding; // $$$ + border?\n }\n\n /**\n * Returns the width of the cover div given the total page width\n * @param {number} totalPageWidth\n * @return {number}\n */\n coverWidth(totalPageWidth) {\n return totalPageWidth + this.br.twoPage.edgeWidth + 2 * this.br.twoPage.coverInternalPadding;\n }\n\n /**\n * Returns the percentage offset into twopageview div at the center of container div\n */\n getViewCenter() {\n const { $brContainer, $brTwoPageView } = this.br.refs;\n const center = {};\n\n const containerOffset = $brContainer.offset();\n const viewOffset = $brTwoPageView.offset();\n center.percentageX = (containerOffset.left - viewOffset.left + ($brContainer.prop('clientWidth') >> 1)) / this.br.twoPage.totalWidth;\n center.percentageY = (containerOffset.top - viewOffset.top + ($brContainer.prop('clientHeight') >> 1)) / this.br.twoPage.totalHeight;\n\n return center;\n }\n\n /**\n * Centers the point given by percentage from left,top of twopageview\n * @param {number} [percentageX=0.5]\n * @param {number} [percentageY=0.5]\n */\n centerView(percentageX, percentageY) {\n\n if ('undefined' == typeof(percentageX)) {\n percentageX = 0.5;\n }\n if ('undefined' == typeof(percentageY)) {\n percentageY = 0.5;\n }\n\n const viewWidth = this.br.refs.$brTwoPageView.width();\n const containerClientWidth = this.br.refs.$brContainer.prop('clientWidth');\n const intoViewX = percentageX * viewWidth;\n\n const viewHeight = this.br.refs.$brTwoPageView.height();\n const containerClientHeight = this.br.refs.$brContainer.prop('clientHeight');\n const intoViewY = percentageY * viewHeight;\n\n if (viewWidth < containerClientWidth) {\n // Can fit width without scrollbars - center by adjusting offset\n this.br.refs.$brTwoPageView.css('left', `${(containerClientWidth >> 1) - intoViewX}px`);\n } else {\n // Need to scroll to center\n this.br.refs.$brTwoPageView.css('left', 0);\n this.br.refs.$brContainer.scrollLeft(intoViewX - (containerClientWidth >> 1));\n }\n\n if (viewHeight < containerClientHeight) {\n // Fits with scrollbars - add offset\n this.br.refs.$brTwoPageView.css('top', `${(containerClientHeight >> 1) - intoViewY}px`);\n } else {\n this.br.refs.$brTwoPageView.css('top', 0);\n this.br.refs.$brContainer.scrollTop(intoViewY - (containerClientHeight >> 1));\n }\n }\n\n /**\n * Returns the integer height of the click-to-flip areas at the edges of the book\n * @return {number}\n */\n flipAreaHeight() {\n return Math.floor(this.br.twoPage.height);\n }\n\n /**\n * Returns the the integer width of the flip areas\n * @return {number}\n */\n flipAreaWidth() {\n const max = 100; // $$$ TODO base on view width?\n const min = 10;\n\n const width = this.br.twoPage.width * 0.15;\n return Math.floor(clamp(width, min, max));\n }\n\n /**\n * Returns integer top offset for flip areas\n * @return {number}\n */\n flipAreaTop() {\n return Math.floor(this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding);\n }\n\n /**\n * Left offset for left flip area\n * @return {number}\n */\n leftFlipAreaLeft() {\n return Math.floor(this.br.twoPage.gutter - this.br.twoPage.scaledWL);\n }\n\n /**\n * Left offset for right flip area\n * @return {number}\n */\n rightFlipAreaLeft() {\n return Math.floor(this.br.twoPage.gutter + this.br.twoPage.scaledWR - this.flipAreaWidth());\n }\n\n /**\n * Position calculation shared between search and text-to-speech functions\n */\n setHilightCss(div, index, left, right, top, bottom) {\n // We calculate the reduction factor for the specific page because it can be different\n // for each page in the spread\n const height = this.book._getPageHeight(index);\n const width = this.book._getPageWidth(index);\n const reduce = this.br.twoPage.height / height;\n const scaledW = Math.floor(width * reduce);\n\n const gutter = this.gutter();\n let pageL;\n if ('L' == this.book.getPageSide(index)) {\n pageL = gutter - scaledW;\n } else {\n pageL = gutter;\n }\n const pageT = this.top();\n\n $(div).css({\n width: `${(right - left) * reduce}px`,\n height: `${(bottom - top) * reduce}px`,\n left: `${pageL + left * reduce}px`,\n top: `${pageT + top * reduce}px`\n });\n }\n\n /**\n * Returns the gutter offset for the spread containing the given index.\n * This function supports RTL\n * @param {number} pindex\n * @return {number}\n */\n gutterOffsetForIndex(pindex) {\n // To find the offset of the gutter from the middle we calculate our percentage distance\n // through the book (0..1), remap to (-0.5..0.5) and multiply by the total page edge width\n let offset = Math.floor(((pindex / this.book.getNumLeafs()) - 0.5) * this.br.twoPage.edgeWidth);\n\n // But then again for RTL it's the opposite\n if ('rl' == this.br.pageProgression) {\n offset *= -1;\n }\n\n return offset;\n }\n\n /**\n * Returns the width of the leaf edge div for the page with index given\n * @param {number} pindex\n * @return {number}\n */\n leafEdgeWidth(pindex) {\n // $$$ could there be single pixel rounding errors for L vs R?\n if ((this.book.getPageSide(pindex) == 'L') && (this.br.pageProgression != 'rl')) {\n return Math.floor( (pindex / this.book.getNumLeafs()) * this.br.twoPage.edgeWidth + 0.5);\n } else {\n return Math.floor( (1 - pindex / this.book.getNumLeafs()) * this.br.twoPage.edgeWidth + 0.5);\n }\n }\n\n /**\n * Returns the target jump leaf given a page coordinate (inside the left page edge div)\n * @param {number} pageX\n * @return {PageIndex}\n */\n jumpIndexForLeftEdgePageX(pageX) {\n let jumpIndex;\n if ('rl' != this.br.pageProgression) {\n // LTR - flipping backward\n jumpIndex = this.br.twoPage.currentIndexL - ($(this.leafEdgeL).offset().left + $(this.leafEdgeL).width() - pageX) * 10;\n\n // browser may have resized the div due to font size change -- see https://bugs.launchpad.net/gnubook/+bug/333570\n jumpIndex = clamp(Math.round(jumpIndex), this.br.firstDisplayableIndex(), this.br.twoPage.currentIndexL - 2);\n return jumpIndex;\n\n } else {\n jumpIndex = this.br.twoPage.currentIndexL + ($(this.leafEdgeL).offset().left + $(this.leafEdgeL).width() - pageX) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.twoPage.currentIndexL + 2, this.br.lastDisplayableIndex());\n return jumpIndex;\n }\n }\n\n /**\n * Returns the target jump leaf given a page coordinate (inside the right page edge div)\n * @param {number} pageX\n * @return {PageIndex}\n */\n jumpIndexForRightEdgePageX(pageX) {\n let jumpIndex;\n if ('rl' != this.br.pageProgression) {\n // LTR\n jumpIndex = this.br.twoPage.currentIndexL + (pageX - $(this.leafEdgeR).offset().left) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.twoPage.currentIndexL + 2, this.br.lastDisplayableIndex());\n return jumpIndex;\n } else {\n jumpIndex = this.br.twoPage.currentIndexL - (pageX - $(this.leafEdgeR).offset().left) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.firstDisplayableIndex(), this.br.twoPage.currentIndexL - 2);\n return jumpIndex;\n }\n }\n\n /**\n * Fetches the currently displayed images (if not already fetching)\n * as wells as any nearby pages.\n */\n prefetch() {\n // $$$ We should check here if the current indices have finished\n // loading (with some timeout) before loading more page images\n // See https://bugs.edge.launchpad.net/bookreader/+bug/511391\n const { max, min } = Math;\n const { book } = this;\n const { currentIndexL, currentIndexR } = this.br.twoPage;\n const ADJACENT_PAGES_TO_LOAD = 2;\n // currentIndexL can be -1; getPage returns the last page of the book\n // when given -1, so need to prevent that.\n let lowPage = book.getPage(max(0, min(currentIndexL, currentIndexR)));\n let highPage = book.getPage(max(currentIndexL, currentIndexR));\n\n for (let i = 0; i < ADJACENT_PAGES_TO_LOAD + 2; i++) {\n if (lowPage) {\n this.createPageContainer(lowPage.index);\n lowPage = lowPage.findPrev({ combineConsecutiveUnviewables: true });\n }\n\n if (highPage) {\n this.createPageContainer(highPage.index);\n highPage = highPage.findNext({ combineConsecutiveUnviewables: true });\n }\n }\n }\n\n /* 2up Container Sizes */\n\n /** main positions for inner containers */\n get baseLeafCss() {\n return {\n position: 'absolute',\n right: '',\n top: `${this.top()}px`,\n zIndex: 2,\n };\n }\n\n /** main height for inner containers */\n get heightCss() {\n return {\n height: `${this.br.twoPage.height}px`, // $$$ height forced the same for both pages\n };\n }\n\n /** Left Page sizing */\n get leftLeafCss() {\n return {\n ...this.baseLeafCss,\n ...this.heightCss,\n left: `${this.br.twoPage.gutter - this.br.twoPage.scaledWL}px`,\n width: `${this.br.twoPage.scaledWL}px`,\n };\n }\n\n /** Left side book thickness */\n get leafEdgeLCss() {\n return {\n ...this.heightCss,\n width: `${this.br.twoPage.leafEdgeWidthL}px`,\n left: `${this.br.twoPage.bookCoverDivLeft + this.br.twoPage.coverInternalPadding}px`,\n top: `${this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding}px`,\n border: this.br.twoPage.leafEdgeWidthL === 0 ? 'none' : null\n };\n }\n\n /** Right Page sizing */\n get rightLeafCss() {\n return {\n ...this.baseLeafCss,\n ...this.heightCss,\n left: `${this.br.twoPage.gutter}px`,\n width: `${this.br.twoPage.scaledWR}px`,\n };\n }\n\n /** Right side book thickness */\n get leafEdgeRCss() {\n return {\n ...this.heightCss,\n width: `${this.br.twoPage.leafEdgeWidthR}px`,\n left: `${this.br.twoPage.scaledWL + this.br.twoPage.scaledWR + this.br.twoPage.leafEdgeWidthL}px`,\n top: `${this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding}px`,\n border: this.br.twoPage.leafEdgeWidthR === 0 ? 'none' : null\n };\n }\n\n /** main container sizing */\n get mainContainerCss() {\n return {\n height: `${this.br.twoPage.totalHeight}px`,\n width: `${this.br.twoPage.totalWidth}px`,\n position: 'absolute'\n };\n }\n\n /** book cover sizing */\n get spreadCoverCss() {\n return {\n width: `${this.br.twoPage.bookCoverDivWidth}px`,\n height: `${this.br.twoPage.bookCoverDivHeight}px`,\n visibility: 'visible'\n };\n }\n\n /** book spine sizing */\n get spineCss() {\n return {\n width: `${this.br.twoPage.bookSpineDivWidth}px`,\n height: `${this.br.twoPage.bookSpineDivHeight}px`,\n left: `${this.br.twoPage.gutter - (this.br.twoPage.bookSpineDivWidth / 2)}px`,\n top: `${this.br.twoPage.bookSpineDivTop}px`\n };\n }\n /** end CSS */\n}\n\n/**\n * @implements {BookReaderOptions[\"twoPage\"]}\n * @typedef {object} TwoPageState\n * @property {number} coverInternalPadding\n * @property {number} coverExternalPadding\n *\n * @property {import('./options.js').AutoFitValues} autofit\n * @property {number} width\n * @property {number} height\n * @property {number} currentIndexL\n * @property {number} currentIndexR\n * @property {number} scaledWL\n * @property {number} scaledWR\n * @property {number} gutter\n * @property {Array<{reduce: number, autofit: import('./options.js').AutoFitValues}>} reductionFactors\n * @property {number} totalHeight\n * @property {number} totalWidth\n *\n * @property {HTMLDivElement} coverDiv\n * @property {number} bookCoverDivTop\n * @property {number} bookCoverDivLeft\n * @property {number} bookCoverDivWidth\n * @property {number} bookCoverDivHeight\n *\n * @property {number} leafEdgeWidthL\n * @property {number} leafEdgeWidthR\n *\n * @property {number} bookSpineDivTop\n * @property {number} bookSpineDivLeft\n * @property {number} bookSpineDivWidth\n * @property {number} bookSpineDivHeight\n *\n * @property {number} edgeWidth\n * @property {number} middle\n */\n","// @ts-check\nimport { notInArray, clamp } from './utils.js';\nimport { EVENTS } from './events.js';\n/** @typedef {import('../BookREader.js').default} BookReader */\n/** @typedef {import('./BookModel.js').PageIndex} PageIndex */\n/** @typedef {import('./BookModel.js').BookModel} BookModel */\n\n/** @typedef {JQuery} $lazyLoadImgPlaceholder * jQuery element with data attributes: leaf, reduce */\n\nexport class ModeThumb {\n /**\n * @param {BookReader} br\n * @param {BookModel} bookModel\n */\n constructor(br, bookModel) {\n this.br = br;\n this.book = bookModel;\n }\n\n /**\n * Draws the thumbnail view\n * @param {number} [seekIndex] If seekIndex is defined, the view will be drawn\n * with that page visible (without any animated scrolling).\n *\n * Creates place holder for image to load after gallery has been drawn\n */\n drawLeafs(seekIndex) {\n const { floor } = Math;\n const { book } = this;\n const viewWidth = this.br.refs.$brContainer.prop('scrollWidth') - 20; // width minus buffer\n\n let leafHeight;\n let rightPos = 0;\n let bottomPos = 0;\n let maxRight = 0;\n let currentRow = 0;\n let leafIndex = 0;\n /** @type {Array<{ leafs?: Array<{num: PageIndex, left: number}>, height?: number, top?: number }>} */\n const leafMap = [];\n\n // Will be set to top of requested seek index, if set\n let seekTop;\n\n // Calculate the position of every thumbnail. $$$ cache instead of calculating on every draw\n // make `leafMap`\n for (const page of book.pagesIterator({ combineConsecutiveUnviewables: true })) {\n const leafWidth = this.br.thumbWidth;\n if (rightPos + (leafWidth + this.br.thumbPadding) > viewWidth) {\n currentRow++;\n rightPos = 0;\n leafIndex = 0;\n }\n\n // Init current row in leafMap\n if (!leafMap[currentRow]) {\n leafMap[currentRow] = {};\n }\n if (!leafMap[currentRow].leafs) {\n leafMap[currentRow].leafs = [];\n leafMap[currentRow].height = 0;\n leafMap[currentRow].top = 0;\n }\n leafMap[currentRow].leafs[leafIndex] = {\n num: page.index,\n left: rightPos,\n };\n\n leafHeight = floor((page.height * this.br.thumbWidth) / page.width);\n if (leafHeight > leafMap[currentRow].height) {\n leafMap[currentRow].height = leafHeight;\n }\n if (leafIndex === 0) { bottomPos += this.br.thumbPadding + leafMap[currentRow].height; }\n rightPos += leafWidth + this.br.thumbPadding;\n if (rightPos > maxRight) { maxRight = rightPos; }\n leafIndex++;\n\n if (page.index == seekIndex) {\n seekTop = bottomPos - this.br.thumbPadding - leafMap[currentRow].height;\n }\n }\n\n // reset the bottom position based on thumbnails\n this.br.refs.$brPageViewEl.height(bottomPos);\n\n const pageViewBuffer = floor((this.br.refs.$brContainer.prop('scrollWidth') - maxRight) / 2) - 14;\n\n // If seekTop is defined, seeking was requested and target found\n if (typeof(seekTop) != 'undefined') {\n this.br.refs.$brContainer.scrollTop(seekTop);\n }\n\n const scrollTop = this.br.refs.$brContainer.prop('scrollTop');\n const scrollBottom = scrollTop + this.br.refs.$brContainer.height();\n\n let leafTop = 0;\n let leafBottom = 0;\n const rowsToDisplay = [];\n const imagesToDisplay = [];\n\n // Visible leafs with least/greatest index\n let leastVisible = book.getNumLeafs() - 1;\n let mostVisible = 0;\n\n // Determine the thumbnails in view\n for (let i = 0; i < leafMap.length; i++) {\n if (!leafMap[i]) { continue; }\n leafBottom += this.br.thumbPadding + leafMap[i].height;\n const topInView = (leafTop >= scrollTop) && (leafTop <= scrollBottom);\n const bottomInView = (leafBottom >= scrollTop) && (leafBottom <= scrollBottom);\n const middleInView = (leafTop <= scrollTop) && (leafBottom >= scrollBottom);\n if (topInView || bottomInView || middleInView) {\n rowsToDisplay.push(i);\n if (leafMap[i].leafs[0].num < leastVisible) {\n leastVisible = leafMap[i].leafs[0].num;\n }\n if (leafMap[i].leafs[leafMap[i].leafs.length - 1].num > mostVisible) {\n mostVisible = leafMap[i].leafs[leafMap[i].leafs.length - 1].num;\n }\n }\n if (leafTop > leafMap[i].top) { leafMap[i].top = leafTop; }\n leafTop = leafBottom;\n }\n // at this point, `rowsToDisplay` now has all the rows in view\n\n // create a buffer of preloaded rows before and after the visible rows\n const firstRow = rowsToDisplay[0];\n const lastRow = rowsToDisplay[rowsToDisplay.length - 1];\n for (let i = 1; i < this.br.thumbRowBuffer + 1; i++) {\n if (lastRow + i < leafMap.length) { rowsToDisplay.push(lastRow + i); }\n }\n for (let i = 1; i < this.br.thumbRowBuffer; i++) {\n if (firstRow - i >= 0) { rowsToDisplay.push(firstRow - i); }\n }\n rowsToDisplay.sort();\n\n // Create the thumbnail divs and images (lazy loaded)\n for (const row of rowsToDisplay) {\n if (notInArray(row, this.br.displayedRows)) {\n if (!leafMap[row]) { continue; }\n for (const { num: leaf, left: leafLeft } of leafMap[row].leafs) {\n const leafWidth = this.br.thumbWidth;\n const leafHeight = floor((book.getPageHeight(leaf) * this.br.thumbWidth) / book.getPageWidth(leaf));\n const leafTop = leafMap[row].top;\n let left = leafLeft + pageViewBuffer;\n if ('rl' == this.br.pageProgression) {\n left = viewWidth - leafWidth - left;\n }\n\n left += this.br.thumbPadding;\n imagesToDisplay.push(leaf);\n\n /* get thumbnail's reducer */\n const idealReduce = floor(book.getPageWidth(leaf) / this.br.thumbWidth);\n const nearestFactor2 = 2 * Math.round(idealReduce / 2);\n const thumbReduce = nearestFactor2;\n\n const pageContainer = this.br._createPageContainer(leaf)\n .update({\n dimensions: {\n width: leafWidth,\n height: leafHeight,\n top: leafTop,\n left,\n },\n reduce: thumbReduce,\n });\n\n pageContainer.$container.data('leaf', leaf).on('mouseup', event => {\n // We want to suppress the fragmentChange triggers in `updateFirstIndex` and `switchMode`\n // because otherwise it repeatedly triggers listeners and we get in an infinite loop.\n // We manually trigger the `fragmentChange` once at the end.\n this.br.updateFirstIndex(leaf, { suppressFragmentChange: true });\n // as per request in webdev-4042, we want to switch 1-up mode while clicking on thumbnail leafs\n this.br.switchMode(this.br.constMode1up, { suppressFragmentChange: true });\n\n // shift viewModeOrder after clicking on thumbsnail leaf\n const nextModeID = this.br.viewModeOrder.shift();\n this.br.viewModeOrder.push(nextModeID);\n this.br.updateViewModeButton($('.viewmode'), 'twopg', 'Two-page view');\n\n this.br.trigger(EVENTS.fragmentChange);\n event.stopPropagation();\n });\n\n this.br.refs.$brPageViewEl.append(pageContainer.$container);\n }\n }\n }\n\n // Remove thumbnails that are not to be displayed\n for (const row of this.br.displayedRows) {\n if (notInArray(row, rowsToDisplay)) {\n for (const { num: index } of leafMap[row]?.leafs) {\n if (!imagesToDisplay?.includes(index)) {\n this.br.$(`.pagediv${index}`)?.remove();\n }\n }\n }\n }\n\n // Update which page is considered current to make sure a visible page is the current one\n const currentIndex = this.br.currentIndex();\n if (currentIndex < leastVisible) {\n this.br.updateFirstIndex(leastVisible);\n } else if (currentIndex > mostVisible) {\n this.br.updateFirstIndex(mostVisible);\n }\n\n // remember what rows are displayed\n this.br.displayedRows = rowsToDisplay.slice();\n\n // remove previous highlights\n this.br.$('.BRpagedivthumb_highlight').removeClass('BRpagedivthumb_highlight');\n\n // highlight current page\n this.br.$('.pagediv' + this.br.currentIndex()).addClass('BRpagedivthumb_highlight');\n\n this.br.updateToolbarZoom(this.br.reduce);\n }\n\n /**\n * Replaces placeholder image with real one\n *\n * @param {$lazyLoadImgPlaceholder} imgPlaceholder\n */\n lazyLoadImage(imgPlaceholder) {\n const leaf = $(imgPlaceholder).data('leaf');\n const reduce = $(imgPlaceholder).data('reduce');\n const $img = this.br.imageCache.image(leaf, reduce);\n const $parent = $(imgPlaceholder).parent();\n /* March 16, 2021 (isa) - manually append & remove, `replaceWith` currently loses closure scope */\n $($parent).append($img);\n $(imgPlaceholder).remove();\n }\n\n /**\n * @param {1 | -1} direction\n */\n zoom(direction) {\n const oldColumns = this.br.thumbColumns;\n switch (direction) {\n case -1:\n this.br.thumbColumns += 1;\n break;\n case 1:\n this.br.thumbColumns -= 1;\n break;\n }\n\n this.br.thumbColumns = clamp(this.br.thumbColumns, 2, 8);\n\n if (this.br.thumbColumns != oldColumns) {\n this.br.displayedRows = []; /* force a gallery redraw */\n this.prepare();\n }\n }\n\n /**\n * Returns the width per thumbnail to display the requested number of columns\n * Note: #BRpageview must already exist since its width is used to calculate the\n * thumbnail width\n * @param {number} thumbnailColumns\n */\n getThumbnailWidth(thumbnailColumns) {\n const DEFAULT_THUMBNAIL_WIDTH = 100;\n\n const padding = (thumbnailColumns + 1) * this.br.thumbPadding;\n const width = (this.br.refs.$brPageViewEl.width() - padding) / (thumbnailColumns + 0.5); // extra 0.5 is for some space at sides\n const idealThumbnailWidth = Math.floor(width);\n return idealThumbnailWidth > 0 ? idealThumbnailWidth : DEFAULT_THUMBNAIL_WIDTH;\n }\n\n prepare() {\n this.br.refs.$brContainer.empty();\n this.br.refs.$brContainer.css({\n overflowY: 'scroll',\n overflowX: 'auto'\n });\n\n this.br.refs.$brPageViewEl = $(\"<div class='BRpageview'></div>\");\n this.br.refs.$brContainer.append(this.br.refs.$brPageViewEl);\n this.br.refs.$brContainer.dragscrollable({preventDefault:true});\n\n this.br.bindGestures(this.br.refs.$brContainer);\n\n // $$$ keep select enabled for now since disabling it breaks keyboard\n // nav in FF 3.6 (https://bugs.edge.launchpad.net/bookreader/+bug/544666)\n // disableSelect(this.br.$('#BRpageview'));\n this.br.thumbWidth = this.getThumbnailWidth(this.br.thumbColumns);\n this.br.reduce = this.book.getPageWidth(0) / this.br.thumbWidth;\n this.br.displayedRows = [];\n // Draw leafs with current index directly in view (no animating to the index)\n this.drawLeafs(this.br.currentIndex());\n this.br.updateBrClasses();\n }\n\n /**\n * @param {PageIndex} index\n */\n jumpToIndex(index) {\n const { floor } = Math;\n const { book } = this;\n const viewWidth = this.br.refs.$brContainer.prop('scrollWidth') - 20; // width minus buffer\n const leafWidth = this.br.thumbWidth;\n let leafTop = 0;\n let rightPos = 0;\n let bottomPos = 0;\n let rowHeight = 0;\n let leafIndex = 0;\n\n for (let i = 0; i <= index; i++) {\n if (rightPos + (leafWidth + this.br.thumbPadding) > viewWidth) {\n rightPos = 0;\n rowHeight = 0;\n leafIndex = 0;\n }\n\n const leafHeight = floor((book.getPageHeight(leafIndex) * this.br.thumbWidth) / book.getPageWidth(leafIndex));\n if (leafHeight > rowHeight) { rowHeight = leafHeight; }\n if (leafIndex == 0) {\n leafTop = bottomPos;\n bottomPos += this.br.thumbPadding + rowHeight;\n }\n rightPos += leafWidth + this.br.thumbPadding;\n leafIndex++;\n }\n this.br.updateFirstIndex(index);\n if (this.br.refs.$brContainer.prop('scrollTop') == leafTop) {\n this.br.drawLeafs();\n } else {\n this.br.animating = true;\n this.br.refs.$brContainer.stop(true)\n .animate({ scrollTop: leafTop }, 'fast', () => { this.br.animating = false; });\n }\n }\n}\n","/**\n * @typedef {object} ReduceSet Set of valid numbers for a reduce variable.\n * @property {(n: number) => number} floor\n * @property {(n: number) => number} decr Return the predecessor of the given element\n */\n\n/** @type {ReduceSet} */\nexport const IntegerReduceSet = {\n floor: Math.floor,\n decr(n) { return n - 1; }\n};\n\n/** @type {ReduceSet} */\nexport const Pow2ReduceSet = {\n floor(n) {\n return 2 ** (Math.floor(Math.log2(Math.max(1, n))));\n },\n decr(n) {\n return 2 ** (Math.log2(n) - 1);\n }\n};\n\nexport const NAMED_REDUCE_SETS = {\n pow2: Pow2ReduceSet,\n integer: IntegerReduceSet,\n};\n","// @ts-check\n/**\n * Creates an image cache dictionary\n * storing images in `<img>` tags so that\n * BookReader can leverage browser caching\n */\n/** @typedef {import(\"./BookModel\").BookModel} BookModel */\n/** @typedef {import(\"./BookModel\").PageIndex} PageIndex */\n/** @typedef {import(\"./ReduceSet\").ReduceSet} ReduceSet */\n\nimport { Pow2ReduceSet } from \"./ReduceSet\";\n\nexport class ImageCache {\n /**\n * @param {BookModel} book\n * @param {object} opts\n * @param {boolean} [opts.useSrcSet]\n * @param {ReduceSet} [opts.reduceSet]\n */\n constructor(book, { useSrcSet = false, reduceSet = Pow2ReduceSet } = {}) {\n this.book = book;\n this.useSrcSet = useSrcSet;\n this.reduceSet = reduceSet;\n /** @type {{ [index: number]: { reduce: number, loaded: boolean }[] }} */\n this.cache = {};\n this.defaultScale = 8;\n }\n\n /**\n * Get an image\n * Checks cache first if image is available & of equal/better scale,\n * if not, a new image gets created\n *\n * @param {PageIndex} index\n * @param {Number} reduce\n */\n image(index, reduce) {\n const cachedImages = this.cache[index] || [];\n const sufficientImages = cachedImages\n .filter(x => x.loaded && x.reduce <= reduce);\n if (sufficientImages.length) {\n // Choose the largest reduction factor that meets our needs\n const bestReduce = Math.max(...sufficientImages.map(e => e.reduce));\n return this._serveImageElement(index, bestReduce);\n } else {\n // Don't use a cache entry; i.e. a fresh fetch will be made\n // for this reduce\n return this._serveImageElement(index, reduce);\n }\n }\n\n /**\n * Checks if an image of equal or greater quality has been loaded\n * @param {PageIndex} index\n * @param {Number} reduce\n * @returns {Boolean}\n */\n imageLoaded(index, reduce) {\n const cacheImg = this.cache[index]?.find(e => e.reduce <= reduce);\n return cacheImg?.loaded ?? false;\n }\n\n /**\n * Get the best image that's already loaded for the given index,\n * trying to choose values less that the given reduce\n * @param {PageIndex} index\n * @param idealMaxReduce\n * @returns {null | number}\n */\n getBestLoadedReduce(index, idealMaxReduce = Infinity) {\n const candidates = this.cache[index]?.filter(x => x.loaded) || [];\n if (!candidates.length) return null;\n\n const lowerResImages = candidates.filter(e => e.reduce >= idealMaxReduce);\n if (lowerResImages.length) {\n // Choose the highest quality loaded lower res image\n return Math.min(...lowerResImages.map(e => e.reduce));\n }\n // Otherwise choose whatever is closest to the reduce\n const higherRestImages = candidates.filter(e => e.reduce < idealMaxReduce);\n return Math.max(...higherRestImages.map(e => e.reduce));\n }\n\n /**\n * @private\n * Generates an image element on the fly from image info in cache\n *\n * @param {PageIndex} index\n * @param {number} reduce\n * @returns {JQuery<HTMLImageElement>} with base image classes\n */\n _serveImageElement(index, reduce) {\n const validReduce = this.reduceSet.floor(reduce);\n let cacheEntry = this.cache[index]?.find(e => e.reduce == validReduce);\n if (!cacheEntry) {\n cacheEntry = { reduce: validReduce, loaded: false };\n const entries = this.cache[index] || (this.cache[index] = []);\n entries.push(cacheEntry);\n }\n const page = this.book.getPage(index);\n\n const $img = $('<img />', {\n 'class': 'BRpageimage',\n 'alt': 'Book page image',\n src: page.getURI(validReduce, 0),\n })\n .data('reduce', validReduce);\n if (this.useSrcSet) {\n $img.attr('srcset', page.getURISrcSet(validReduce));\n }\n if (!cacheEntry.loaded) {\n $img.one('load', () => cacheEntry.loaded = true);\n }\n return $img;\n }\n}\n","/*\nCopyright(c)2008-2019 Internet Archive. Software license AGPL version 3.\n\nThis file is part of BookReader.\n\n BookReader is free software: you can redistribute it and/or modify\n it under the terms of the GNU Affero General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n BookReader is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License\n along with BookReader. If not, see <http://www.gnu.org/licenses/>.\n\n The BookReader source is hosted at http://github.com/internetarchive/bookreader/\n\n*/\n// effect.js gives acces to extra easing function (e.g. easeInOutExpo)\nimport 'jquery-ui/ui/effect.js';\n\n// Needed by touch-punch\nimport 'jquery-ui/ui/widget.js';\nimport 'jquery-ui/ui/widgets/mouse.js';\nimport 'jquery-ui-touch-punch';\n\nimport './dragscrollable-br.js';\nimport PACKAGE_JSON from '../package.json';\nimport * as utils from './BookReader/utils.js';\nimport { exposeOverrideable } from './BookReader/utils/classes.js';\nimport { Navbar, getNavPageNumHtml } from './BookReader/Navbar/Navbar.js';\nimport { DEFAULT_OPTIONS } from './BookReader/options.js';\n/** @typedef {import('./BookReader/options.js').BookReaderOptions} BookReaderOptions */\n/** @typedef {import('./BookReader/options.js').ReductionFactor} ReductionFactor */\n/** @typedef {import('./BookReader/BookModel.js').PageIndex} PageIndex */\nimport { EVENTS } from './BookReader/events.js';\nimport { DebugConsole } from './BookReader/DebugConsole.js';\nimport {\n Toolbar,\n blankInfoDiv,\n blankShareDiv,\n createPopup,\n} from './BookReader/Toolbar/Toolbar.js';\nimport { BookModel } from './BookReader/BookModel.js';\nimport { Mode1Up } from './BookReader/Mode1Up.js';\nimport { Mode2Up } from './BookReader/Mode2Up.js';\nimport { ModeThumb } from './BookReader/ModeThumb';\nimport { ImageCache } from './BookReader/ImageCache.js';\nimport { PageContainer } from './BookReader/PageContainer.js';\nimport { NAMED_REDUCE_SETS } from './BookReader/ReduceSet';\n\nif (location.toString().indexOf('_debugShowConsole=true') != -1) {\n $(() => new DebugConsole().init());\n}\n\n/**\n * BookReader\n * @param {BookReaderOptions} options\n * TODO document all options properties\n * @constructor\n */\nexport default function BookReader(overrides = {}) {\n const options = jQuery.extend(true, {}, BookReader.defaultOptions, overrides, BookReader.optionOverrides);\n this.setup(options);\n}\n\nBookReader.version = PACKAGE_JSON.version;\n\n// Mode constants\n/** 1 page view */\nBookReader.constMode1up = 1;\n/** 2 pages view */\nBookReader.constMode2up = 2;\n/** thumbnails view */\nBookReader.constModeThumb = 3;\n/** image cache */\nBookReader.imageCache = null;\n\n// Animation constants\nBookReader.constNavAnimationDuration = 300;\nBookReader.constResizeAnimationDuration = 100;\n\n// Names of events that can be triggered via BookReader.prototype.trigger()\nBookReader.eventNames = EVENTS;\n\nBookReader.defaultOptions = DEFAULT_OPTIONS;\n\n/**\n * @type {BookReaderOptions}\n * This is here, just in case you need to absolutely override an option.\n */\nBookReader.optionOverrides = {};\n\n/**\n * Setup\n * It is separate from the constructor, so plugins can extend.\n * @param {BookReaderOptions} options\n */\nBookReader.prototype.setup = function(options) {\n // Store the options used to setup bookreader\n this.options = options;\n\n /** @type {number} @deprecated some past iterations set this */\n this.numLeafs = undefined;\n\n /** Overridden by plugin.search.js */\n this.enableSearch = false;\n\n /**\n * Store viewModeOrder states\n * @var {boolean}\n */\n this.viewModeOrder = [];\n\n /**\n * Used to suppress fragment change for init with canonical URLs\n * @var {boolean}\n */\n this.suppressFragmentChange = false;\n\n /** @type {function(): void} */\n this.animationFinishedCallback = null;\n\n // @deprecated: Instance constants. Use Class constants instead\n /** 1 page view */\n this.constMode1up = BookReader.constMode1up;\n /** 2 pages view */\n this.constMode2up = BookReader.constMode2up;\n /** thumbnails view */\n this.constModeThumb = BookReader.constModeThumb;\n\n // Private properties below. Configuration should be done with options.\n /** @type {number} TODO: Make private */\n this.reduce = 8; /* start very small */\n this.defaults = options.defaults;\n this.padding = options.padding;\n\n this.reduceSet = NAMED_REDUCE_SETS[options.reduceSet];\n if (!this.reduceSet) {\n console.warn(`Invalid reduceSet ${options.reduceSet}. Ignoring.`);\n this.reduceSet = NAMED_REDUCE_SETS[DEFAULT_OPTIONS.reduceSet];\n }\n\n /** @type {number}\n * can be 1 or 2 or 3 based on the display mode const value\n */\n this.mode = null;\n this.prevReadMode = null;\n this.ui = options.ui;\n this.uiAutoHide = options.uiAutoHide;\n\n this.thumbWidth = 100; // will be overridden during prepareThumbnailView\n this.thumbRowBuffer = options.thumbRowBuffer;\n this.thumbColumns = options.thumbColumns;\n this.thumbMaxLoading = options.thumbMaxLoading;\n this.thumbPadding = options.thumbPadding;\n this.displayedRows = [];\n\n this.displayedIndices = [];\n /** @deprecated Unused; will be remove in v5 */\n this.imgs = {};\n /** @deprecated No longer used; will be remove in v5 */\n this.prefetchedImgs = {}; //an object with numeric keys corresponding to page index, reduce\n\n this.animating = false;\n this.flipSpeed = options.flipSpeed;\n this.flipDelay = options.flipDelay;\n this.twoPagePopUp = null;\n this.leafEdgeTmp = null;\n\n /**\n * Represents the first displayed index\n * In 2up mode it will be the left page\n * In 1 up mode it is the highest page\n * @property {number|null} firstIndex\n */\n this.firstIndex = null;\n this.lastDisplayableIndex2up = null;\n this.isFullscreenActive = false;\n this.lastScroll = null;\n\n this.showLogo = options.showLogo;\n this.logoURL = options.logoURL;\n this.imagesBaseURL = options.imagesBaseURL;\n\n this.reductionFactors = options.reductionFactors;\n this.onePage = options.onePage;\n /** @type {import('./BookReader/Mode2Up').TwoPageState} */\n this.twoPage = options.twoPage;\n this.onePageMinBreakpoint = options.onePageMinBreakpoint;\n\n this.bookTitle = options.bookTitle;\n this.bookUrl = options.bookUrl;\n this.bookUrlText = options.bookUrlText;\n this.bookUrlTitle = options.bookUrlTitle;\n this.titleLeaf = options.titleLeaf;\n\n this.metadata = options.metadata;\n this.thumbnail = options.thumbnail;\n this.bookUrlMoreInfo = options.bookUrlMoreInfo;\n\n this.enableExperimentalControls = options.enableExperimentalControls;\n this.el = options.el;\n\n this.pageProgression = options.pageProgression;\n this.protected = options.protected;\n this.getEmbedCode = options.getEmbedCode;\n this.popup = null;\n\n // Assign the data methods\n this.data = options.data;\n if (options.getNumLeafs) BookReader.prototype.getNumLeafs = options.getNumLeafs;\n if (options.getPageWidth) BookReader.prototype.getPageWidth = options.getPageWidth;\n if (options.getPageHeight) BookReader.prototype.getPageHeight = options.getPageHeight;\n if (options.getPageURI) BookReader.prototype.getPageURI = options.getPageURI;\n if (options.getPageSide) BookReader.prototype.getPageSide = options.getPageSide;\n if (options.getPageNum) BookReader.prototype.getPageNum = options.getPageNum;\n if (options.getPageProp) BookReader.prototype.getPageProp = options.getPageProp;\n if (options.getSpreadIndices) BookReader.prototype.getSpreadIndices = options.getSpreadIndices;\n if (options.leafNumToIndex) BookReader.prototype.leafNumToIndex = options.leafNumToIndex;\n\n /** @type {{[name: string]: JQuery}} */\n this.refs = {};\n\n /**\n * @private (for now) Models are largely state storing classes. This might be too much\n * granularity, but time will tell!\n */\n this._models = {\n book: new BookModel(this),\n };\n\n /**\n * @private Components are 'subchunks' of bookreader functionality, usually UI related\n * They should be relatively decoupled from each other/bookreader.\n * Note there are no hooks right now; components just provide methods that bookreader\n * calls at the correct moments.\n **/\n this._components = {\n navbar: new Navbar(this),\n toolbar: new Toolbar(this),\n };\n\n this._modes = {\n mode1Up: new Mode1Up(this, this._models.book),\n mode2Up: new Mode2Up(this, this._models.book),\n modeThumb: new ModeThumb(this, this._models.book),\n };\n\n /** Stores classes which we want to expose (selectively) some methods as overridable */\n this._overrideable = {\n '_models.book': this._models.book,\n '_components.navbar': this._components.navbar,\n '_components.toolbar': this._components.toolbar,\n '_modes.mode1Up': this._modes.mode1Up,\n '_modes.mode2Up': this._modes.mode2Up,\n '_modes.modeThumb': this._modes.modeThumb,\n };\n\n /** Image cache for general image fetching */\n this.imageCache = new ImageCache(this._models.book, {\n useSrcSet: this.options.useSrcSet,\n reduceSet: this.reduceSet,\n });\n};\n\n/**\n * Get all the HTML Elements that are being/can be rendered.\n * Includes cached elements which might be rendered again.\n */\nBookReader.prototype.getActivePageContainerElements = function() {\n let containerEls = Object.values(this._modes.mode2Up.pageContainers).map(pc => pc.$container[0])\n .concat(Object.values(this._modes.mode1Up.mode1UpLit.pageContainerCache).map(pc => pc.$container[0]));\n if (this.mode == this.constModeThumb) {\n containerEls = containerEls.concat(this.$('.BRpagecontainer').toArray());\n }\n return containerEls;\n};\n\n/**\n * Get the HTML Elements for the rendered page. Note there can be more than one, since\n * (at least as of writing) different modes can maintain different caches.\n * @param {PageIndex} pageIndex\n */\nBookReader.prototype.getActivePageContainerElementsForIndex = function(pageIndex) {\n return [\n this._modes.mode2Up.pageContainers[pageIndex]?.$container?.[0],\n this._modes.mode1Up.mode1UpLit.pageContainerCache[pageIndex]?.$container?.[0],\n ...(this.mode == this.constModeThumb ? this.$(`.pagediv${pageIndex}`).toArray() : [])\n ].filter(x => x);\n};\n\nObject.defineProperty(BookReader.prototype, 'activeMode', {\n /** @return {Mode1Up | Mode2Up | ModeThumb} */\n get() { return {\n 1: this._modes.mode1Up,\n 2: this._modes.mode2Up,\n 3: this._modes.modeThumb,\n }[this.mode]; },\n});\n\n/** @deprecated unused outside Mode2Up */\nObject.defineProperty(BookReader.prototype, 'leafEdgeL', {\n get() { return this._modes.mode2Up.leafEdgeL; },\n set(newVal) { this._modes.mode2Up.leafEdgeL = newVal; }\n});\n/** @deprecated unused outside Mode2Up */\nObject.defineProperty(BookReader.prototype, 'leafEdgeR', {\n get() { return this._modes.mode2Up.leafEdgeR; },\n set(newVal) { this._modes.mode2Up.leafEdgeR = newVal; }\n});\n\n/**\n * BookReader.util are static library functions\n * At top of file so they can be used below\n */\nBookReader.util = utils;\n\n/**\n * Helper to merge in params in to a params object.\n * It normalizes \"page\" into the \"index\" field to disambiguate and prevent concflicts\n * @private\n */\nBookReader.prototype.extendParams = function(params, newParams) {\n var modifiedNewParams = $.extend({}, newParams);\n if ('undefined' != typeof(modifiedNewParams.page)) {\n var pageIndex = this._models.book.parsePageString(modifiedNewParams.page);\n if (!isNaN(pageIndex))\n modifiedNewParams.index = pageIndex;\n delete modifiedNewParams.page;\n }\n $.extend(params, modifiedNewParams);\n};\n\n/**\n * Parses params from from various initialization contexts (url, cookie, options)\n * @private\n * @return {object} the parsed params\n */\nBookReader.prototype.initParams = function() {\n var params = {};\n // Flag initializing for updateFromParams()\n params.init = true;\n\n // Flag if page given in defaults or URL (not cookie)\n // Used for overriding goToFirstResult in plugin.search.js\n // Note: extendParams() converts params.page to index and gets rid of page\n // so check and set before extendParams()\n params.pageFound = false;\n\n // True if changing the URL\n params.fragmentChange = false;\n\n // This is ordered from lowest to highest priority\n\n // If we have a title leaf, use that as the default instead of index 0,\n // but only use as default if book has a few pages\n if ('undefined' != typeof(this.titleLeaf) && this._models.book.getNumLeafs() > 2) {\n params.index = this._models.book.leafNumToIndex(this.titleLeaf);\n } else {\n params.index = 0;\n }\n\n // this.defaults is a string passed in the url format. eg \"page/1/mode/1up\"\n if (this.defaults) {\n const defaultParams = this.paramsFromFragment(this.defaults);\n if ('undefined' != typeof(defaultParams.page)) {\n params.pageFound = true;\n }\n this.extendParams(params, defaultParams);\n }\n\n // Check for Resume plugin\n if (this.options.enablePageResume) {\n // Check cookies\n const val = this.getResumeValue();\n if (val !== null) {\n // If page index different from default\n if (params.index !== val) {\n // Show in URL\n params.fragmentChange = true;\n }\n params.index = val;\n }\n }\n\n // Check for URL plugin\n if (this.options.enableUrlPlugin) {\n // Params explicitly set in URL take precedence over all other methods\n var urlParams = this.paramsFromFragment(this.urlReadFragment());\n\n // Get params if hash fragment available with 'history' urlMode\n const hasHashURL = !Object.keys(urlParams).length && this.urlReadHashFragment();\n if (hasHashURL && (this.options.urlMode === 'history')) {\n urlParams = this.paramsFromFragment(this.urlReadHashFragment());\n }\n\n // If there were any parameters\n if (Object.keys(urlParams).length) {\n if ('undefined' != typeof(urlParams.page)) {\n params.pageFound = true;\n }\n this.extendParams(params, urlParams);\n // Show in URL\n params.fragmentChange = true;\n }\n }\n\n // Check for Search plugin\n if (this.options.enableSearch) {\n // Go to first result only if no default or URL page\n this.options.goToFirstResult = !params.pageFound;\n\n // If initialSearchTerm not set\n if (!this.options.initialSearchTerm) {\n // Look for any term in URL\n if (params.search) {\n // Old style: /search/[term]\n this.options.initialSearchTerm = params.search;\n this.searchTerm = params.search;\n } else {\n // If we have a query string: q=[term]\n const searchParams = new URLSearchParams(this.readQueryString());\n const searchTerm = searchParams.get('q');\n if (searchTerm) {\n this.options.initialSearchTerm = utils.decodeURIComponentPlus(searchTerm);\n }\n }\n }\n }\n\n // Set for init process, return to false at end of init()\n this.suppressFragmentChange = !params.fragmentChange;\n\n return params;\n};\n\n/**\n * Allow mocking of window.location.search\n */\nBookReader.prototype.getLocationSearch = function () {\n return window.location.search;\n};\n\n/**\n * Allow mocking of window.location.hash\n */\nBookReader.prototype.getLocationHash = function () {\n return window.location.hash;\n};\n\n/**\n * Return URL or fragment querystring\n */\nBookReader.prototype.readQueryString = function() {\n const queryString = this.getLocationSearch();\n if (queryString) {\n return queryString;\n }\n const hash = this.getLocationHash();\n const found = hash.search(/\\?\\w+=/);\n return found > -1 ? hash.slice(found) : '';\n};\n\n/**\n * Determines the initial mode for starting if a mode is not already\n * present in the params argument\n * @param {object} params\n * @return {number} the mode\n */\nBookReader.prototype.getInitialMode = function(params) {\n // Use params or browser width to set view mode\n var windowWidth = $(window).width();\n var nextMode;\n if ('undefined' != typeof(params.mode)) {\n nextMode = params.mode;\n } else if (this.ui == 'full'\n && this.enableMobileNav\n && this.isFullscreenActive\n && windowWidth <= this.onePageMinBreakpoint\n ) {\n // In full mode, we set the default based on width\n nextMode = this.constMode1up;\n } else {\n nextMode = this.constMode2up;\n }\n\n if (!this.canSwitchToMode(nextMode)) {\n nextMode = this.constMode1up;\n }\n return nextMode;\n};\n\n/**\n * This is called by the client to initialize BookReader.\n * It renders onto the DOM. It should only be called once.\n */\nBookReader.prototype.init = function() {\n this.init.initComplete = false;\n this.pageScale = this.reduce; // preserve current reduce\n\n var params = this.initParams();\n\n this.firstIndex = params.index ? params.index : 0;\n\n // Setup Navbars and other UI\n this.isTouchDevice = !!('ontouchstart' in window) || !!('msmaxtouchpoints' in window.navigator);\n\n this.refs.$br = $(this.el)\n .empty()\n .removeClass()\n .addClass(\"ui-\" + this.ui)\n .addClass(\"br-ui-\" + this.ui)\n .addClass('BookReader');\n\n // Add a class if this is a touch enabled device\n if (this.isTouchDevice) {\n this.refs.$br.addClass(\"touch\");\n } else {\n this.refs.$br.addClass(\"no-touch\");\n }\n\n this.refs.$brContainer = $(\"<div class='BRcontainer' dir='ltr'></div>\");\n this.refs.$br.append(this.refs.$brContainer);\n\n // Explicitly ensure params.mode exists for updateFromParams() below\n params.mode = this.getInitialMode(params);\n\n // Explicitly ensure this.mode exists for initNavbar() below\n this.mode = params.mode;\n\n if (this.ui == \"embed\" && this.options.showNavbar) {\n this.initEmbedNavbar();\n } else {\n if (this.options.showToolbar) {\n this.initToolbar(this.mode, this.ui); // Build inside of toolbar div\n }\n if (this.options.showNavbar) {\n this.initNavbar();\n }\n }\n\n // Switch navbar controls on mobile/desktop\n this.switchNavbarControls();\n\n this.resizeBRcontainer();\n this.updateFromParams(params);\n this.initUIStrings();\n\n // Bind to events\n\n this.bindNavigationHandlers();\n this.setupKeyListeners();\n\n this.lastScroll = (new Date().getTime());\n this.refs.$brContainer.bind('scroll', this, function(e) {\n // Note, this scroll event fires for both user, and js generated calls\n // It is functioning in some cases as the primary triggerer for rendering\n e.data.lastScroll = (new Date().getTime());\n if (e.data.constModeThumb == e.data.mode) {\n e.data.drawLeafsThrottled();\n }\n });\n\n if (this.options.autoResize) {\n $(window).bind('resize', this, function(e) {\n e.data.resize();\n });\n $(window).on(\"orientationchange\", this, function(e) {\n e.data.resize();\n }.bind(this));\n }\n\n if (this.protected) {\n this.$('.BRicon.share').hide();\n }\n\n // If not searching, set to allow on-going fragment changes\n if (!this.options.initialSearchTerm) {\n this.suppressFragmentChange = false;\n }\n\n this.init.initComplete = true;\n this.trigger(BookReader.eventNames.PostInit);\n\n // Must be called after this.init.initComplete set to true to allow\n // BookReader.prototype.resize to run.\n if (this.options.startFullscreen) {\n this.toggleFullscreen();\n }\n};\n\n/**\n * @param {EVENTS} name\n * @param {array | object} [props]\n */\nBookReader.prototype.trigger = function(name, props = this) {\n const eventName = 'BookReader:' + name;\n $(document).trigger(eventName, props);\n\n utils.polyfillCustomEvent(window);\n window.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n composed: true,\n detail: { props },\n }));\n};\n\nBookReader.prototype.bind = function(name, callback) {\n $(document).bind('BookReader:' + name, callback);\n};\n\nBookReader.prototype.unbind = function(name, callback) {\n $(document).unbind('BookReader:' + name, callback);\n};\n\n/**\n * Resizes based on the container width and height\n */\nBookReader.prototype.resize = function() {\n if (!this.init.initComplete) return;\n\n this.resizeBRcontainer();\n\n // Switch navbar controls on mobile/desktop\n this.switchNavbarControls();\n\n if (this.constMode1up == this.mode) {\n if (this.onePage.autofit != 'none') {\n this.resizePageView1up();\n this.centerPageView();\n } else {\n this.centerPageView();\n this.displayedIndices = [];\n this.drawLeafsThrottled();\n }\n } else if (this.constModeThumb == this.mode) {\n this.prepareThumbnailView();\n } else {\n // We only need to prepare again in autofit (size of spread changes)\n if (this.twoPage.autofit) {\n // most common path, esp. for archive.org books\n this.prepareTwoPageView();\n } else {\n // used when zoomed in\n // Re-center if the scrollbars have disappeared\n var center = this.twoPageGetViewCenter();\n var doRecenter = false;\n if (this.twoPage.totalWidth < this.refs.$brContainer.prop('clientWidth')) {\n center.percentageX = 0.5;\n doRecenter = true;\n }\n if (this.twoPage.totalHeight < this.refs.$brContainer.prop('clientHeight')) {\n center.percentageY = 0.5;\n doRecenter = true;\n }\n if (doRecenter) {\n this.twoPageCenterView(center.percentageX, center.percentageY);\n }\n }\n }\n this.trigger(BookReader.eventNames.resize);\n};\n\n/**\n * Binds keyboard event listeners\n */\nBookReader.prototype.setupKeyListeners = function() {\n var self = this;\n\n var KEY_PGUP = 33;\n var KEY_PGDOWN = 34;\n var KEY_END = 35;\n var KEY_HOME = 36;\n\n var KEY_LEFT = 37;\n var KEY_UP = 38;\n var KEY_RIGHT = 39;\n var KEY_DOWN = 40;\n // The minus(-) and equal(=) keys have different mappings for different browsers\n var KEY_MINUS = 189; // Chrome\n var KEY_MINUS_F = 173; // Firefox\n var KEY_NUMPAD_SUBTRACT = 109;\n var KEY_EQUAL = 187; // Chrome\n var KEY_EQUAL_F = 61; // Firefox\n var KEY_NUMPAD_ADD = 107;\n\n // We use document here instead of window to avoid a bug in jQuery on IE7\n $(document).keydown(function(e) {\n\n // Keyboard navigation\n switch (e.keyCode) {\n case KEY_PGUP:\n case KEY_UP:\n // In 1up mode page scrolling is handled by browser\n if (!utils.isInputActive() && self.constMode2up == self.mode) {\n e.preventDefault();\n self.prev();\n }\n break;\n case KEY_DOWN:\n case KEY_PGDOWN:\n if (!utils.isInputActive() && self.constMode2up == self.mode) {\n e.preventDefault();\n self.next();\n }\n break;\n case KEY_END:\n if (!utils.isInputActive()) {\n e.preventDefault();\n self.last();\n }\n break;\n case KEY_HOME:\n if (!utils.isInputActive()) {\n e.preventDefault();\n self.first();\n }\n break;\n case KEY_LEFT:\n if (!utils.isInputActive() && self.constModeThumb != self.mode) {\n e.preventDefault();\n self.left();\n }\n break;\n case KEY_RIGHT:\n if (!utils.isInputActive() && self.constModeThumb != self.mode) {\n e.preventDefault();\n self.right();\n }\n break;\n case KEY_MINUS:\n case KEY_MINUS_F:\n case KEY_NUMPAD_SUBTRACT:\n if (!utils.isInputActive()) {\n e.preventDefault();\n self.zoom(-1);\n }\n break;\n case KEY_EQUAL:\n case KEY_EQUAL_F:\n case KEY_NUMPAD_ADD:\n if (!utils.isInputActive()) {\n e.preventDefault();\n self.zoom(+1);\n }\n break;\n }\n });\n};\n\nBookReader.prototype.drawLeafs = function() {\n if (this.constMode1up == this.mode) {\n // Not needed for Mode1Up anymore\n } else if (this.constModeThumb == this.mode) {\n this.drawLeafsThumbnail();\n } else {\n this.drawLeafsTwoPage();\n }\n};\n\n/**\n * @protected\n * @param {PageIndex} index\n */\nBookReader.prototype._createPageContainer = function(index) {\n return new PageContainer(this._models.book.getPage(index, false), {\n isProtected: this.protected,\n imageCache: this.imageCache,\n loadingImage: this.imagesBaseURL + 'loading.gif',\n });\n};\n\nBookReader.prototype.bindGestures = function(jElement) {\n // TODO support gesture change is only iOS. Support android.\n // HACK(2017-01-20) - Momentum scrolling is causing the scroll position\n // to jump after zooming in on mobile device. I am able to reproduce\n // when you move the book with one finger and then add another\n // finger to pinch. Gestures are aware of scroll state.\n\n var self = this;\n var numTouches = 1;\n\n jElement.unbind('touchmove').bind('touchmove', function(e) {\n if (e.originalEvent.cancelable) numTouches = e.originalEvent.touches.length;\n e.stopPropagation();\n });\n\n jElement.unbind('gesturechange').bind('gesturechange', function(e) {\n e.preventDefault();\n // These are two very important fixes to adjust for the scroll position\n // issues described below\n if (!(numTouches !== 2 || (new Date().getTime()) - self.lastScroll < 500)) {\n if (e.originalEvent.scale > 1.5) {\n self.zoom(1);\n } else if (e.originalEvent.scale < 0.6) {\n self.zoom(-1);\n }\n }\n });\n};\n\n/** @deprecated Not used outside ModeThumb */\nBookReader.prototype.drawLeafsThumbnail = ModeThumb.prototype.drawLeafs;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'drawLeafs', 'drawLeafsThumbnail');\n/** @deprecated Not used outside ModeThumb */\nBookReader.prototype.lazyLoadThumbnails = ModeThumb.prototype.lazyLoadThumbnails;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'lazyLoadThumbnails', 'lazyLoadThumbnails');\nBookReader.prototype.lazyLoadImage = ModeThumb.prototype.lazyLoadImage;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'lazyLoadImage', 'lazyLoadImage');\n/** @deprecated Internal use only */\nBookReader.prototype.zoomThumb = ModeThumb.prototype.zoom;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'zoom', 'zoomThumb');\n/** @deprecated Not used outside ModeThumb */\nBookReader.prototype.getThumbnailWidth = ModeThumb.prototype.getThumbnailWidth;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'getThumbnailWidth', 'getThumbnailWidth');\n/** @deprecated Not used outside ModeThumb */\nBookReader.prototype.prepareThumbnailView = ModeThumb.prototype.prepare;\nexposeOverrideableMethod(ModeThumb, '_modes.modeThumb', 'prepare', 'prepareThumbnailView');\n\n/**\n * A throttled version of drawLeafs\n */\nBookReader.prototype.drawLeafsThrottled = utils.throttle(\n BookReader.prototype.drawLeafs,\n 250 // 250 ms gives quick feedback, but doesn't eat cpu\n);\n\n/**\n * @param {number} direction Pass 1 to zoom in, anything else to zoom out\n */\nBookReader.prototype.zoom = function(direction) {\n switch (this.mode) {\n case this.constMode1up:\n if (direction == 1) {\n // XXX other cases\n this.zoom1up('in');\n } else {\n this.zoom1up('out');\n }\n break;\n case this.constMode2up:\n if (direction == 1) {\n // XXX other cases\n this.zoom2up('in');\n } else {\n this.zoom2up('out');\n }\n break;\n case this.constModeThumb:\n // XXX update zoomThumb for named directions\n this.zoomThumb(direction);\n break;\n }\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n return;\n};\n\n/**\n * Resizes the inner container to fit within the visible space to prevent\n * the top toolbar and bottom navbar from clipping the visible book\n *\n * @param { boolean } animate - optional\n * When used, BookReader will fill the main container with the book's content.\n * This is primarily for 1up view - a follow up animation to the nav animation\n * So resize isn't perceived sharp/jerky\n */\nBookReader.prototype.resizeBRcontainer = function(animate) {\n if (animate) {\n this.refs.$brContainer.animate({\n top: this.getToolBarHeight(),\n bottom: this.getFooterHeight()\n }, this.constResizeAnimationDuration, 'linear');\n } else {\n this.refs.$brContainer.css({\n top: this.getToolBarHeight(),\n bottom: this.getFooterHeight()\n });\n }\n};\n\nBookReader.prototype.centerPageView = function() {\n var scrollWidth = this.refs.$brContainer.prop('scrollWidth');\n var clientWidth = this.refs.$brContainer.prop('clientWidth');\n if (scrollWidth > clientWidth) {\n this.refs.$brContainer.prop('scrollLeft', (scrollWidth - clientWidth) / 2);\n }\n};\n\n/**\n * Quantizes the given reduction factor to closest power of two from set from 12.5% to 200%\n * @param {number} reduce\n * @param {ReductionFactor[]} reductionFactors\n * @return {number}\n */\nBookReader.prototype.quantizeReduce = function(reduce, reductionFactors) {\n let quantized = reductionFactors[0].reduce;\n let distance = Math.abs(reduce - quantized);\n\n for (let i = 1; i < reductionFactors.length; i++) {\n const newDistance = Math.abs(reduce - reductionFactors[i].reduce);\n if (newDistance < distance) {\n distance = newDistance;\n quantized = reductionFactors[i].reduce;\n }\n }\n return quantized;\n};\n\n/**\n * @param {number} currentReduce\n * @param {'in' | 'out' | 'auto' | 'height' | 'width'} direction\n * @param {ReductionFactor[]} reductionFactors Must be sorted\n * @returns {ReductionFactor}\n */\nBookReader.prototype.nextReduce = function(currentReduce, direction, reductionFactors) {\n // XXX add 'closest', to replace quantize function\n\n if (direction === 'in') {\n let newReduceIndex = 0;\n for (let i = 1; i < reductionFactors.length; i++) {\n if (reductionFactors[i].reduce < currentReduce) {\n newReduceIndex = i;\n }\n }\n return reductionFactors[newReduceIndex];\n } else if (direction === 'out') {\n const lastIndex = reductionFactors.length - 1;\n let newReduceIndex = lastIndex;\n\n for (let i = lastIndex; i >= 0; i--) {\n if (reductionFactors[i].reduce > currentReduce) {\n newReduceIndex = i;\n }\n }\n return reductionFactors[newReduceIndex];\n } else if (direction === 'auto') {\n // If an 'auto' is specified, use that\n const autoMatch = reductionFactors.find(rf => rf.autofit == 'auto');\n if (autoMatch) return autoMatch;\n\n // Otherwise, choose the least reduction from height/width\n const candidates = reductionFactors.filter(({autofit}) => autofit == 'height' || autofit == 'width');\n let choice = null;\n for (let i = 0; i < candidates.length; i++) {\n if (choice === null || choice.reduce < candidates[i].reduce) {\n choice = candidates[i];\n }\n }\n if (choice) return choice;\n } else if (direction === 'height' || direction === 'width') {\n // Asked for specific autofit mode\n const match = reductionFactors.find(rf => rf.autofit == direction);\n if (match) return match;\n }\n\n return reductionFactors[0];\n};\n\n/**\n * @param {ReductionFactor} a\n * @param {ReductionFactor} b\n */\nBookReader.prototype._reduceSort = (a, b) => a.reduce - b.reduce;\n\n/**\n * Attempts to jump to page\n * @param {string}\n * @return {boolean} Returns true if page could be found, false otherwise.\n */\nBookReader.prototype.jumpToPage = function(pageNum) {\n var pageIndex = this._models.book.parsePageString(pageNum);\n\n if ('undefined' != typeof(pageIndex)) {\n this.jumpToIndex(pageIndex);\n return true;\n }\n\n // Page not found\n return false;\n};\n\n/**\n * Check whether the specified index is currently displayed\n * @param {PageIndex} index\n */\nBookReader.prototype._isIndexDisplayed = function(index) {\n // One up \"caches\" pages +- current, so exclude those in the test.\n return this.constMode1up == this.mode ? this.displayedIndices.slice(1, -1).includes(index) :\n this.displayedIndices ? this.displayedIndices.includes(index) :\n this.currentIndex() == index;\n};\n\n/**\n * Changes the current page\n * @param {PageIndex} index\n * @param {number} [pageX]\n * @param {number} [pageY]\n * @param {boolean} [noAnimate]\n */\nBookReader.prototype.jumpToIndex = function(index, pageX, pageY, noAnimate) {\n // Don't jump into specific unviewable page\n const page = this._models.book.getPage(index);\n if (!page.isViewable && page.unviewablesStart != page.index) {\n // If already in unviewable range, jump to end of that range\n const alreadyInPreview = this._isIndexDisplayed(page.unviewablesStart);\n const newIndex = alreadyInPreview ? page.findNext({ combineConsecutiveUnviewables: true }).index : page.unviewablesStart;\n return this.jumpToIndex(newIndex, pageX, pageY, noAnimate);\n }\n\n this.trigger(BookReader.eventNames.stop);\n\n if (this.constMode2up == this.mode) {\n this._modes.mode2Up.jumpToIndex(index);\n } else if (this.constModeThumb == this.mode) {\n this._modes.modeThumb.jumpToIndex(index);\n } else { // 1up\n this._modes.mode1Up.jumpToIndex(index, pageX, pageY, noAnimate);\n }\n};\n\n/**\n * Return mode or 1up if initial thumb\n * @param {number}\n * @see BookReader.prototype.drawLeafsThumbnail\n */\nBookReader.prototype.getPrevReadMode = function(mode) {\n if (mode === BookReader.constMode1up || mode === BookReader.constMode2up) {\n return mode;\n } else if (this.prevReadMode === null) {\n // Initial thumb, return 1up\n return BookReader.constMode1up;\n }\n};\n\n/**\n * Switches the mode (eg 1up 2up thumb)\n * @param {number}\n * @param {object} [options]\n * @param {boolean} [options.suppressFragmentChange = false]\n * @param {boolean} [options.onInit = false] - this\n */\nBookReader.prototype.switchMode = function(\n mode,\n {\n suppressFragmentChange = false,\n init = false,\n pageFound = false\n } = {}\n) {\n // Skip checks before init() complete\n if (this.init.initComplete) {\n if (mode === this.mode) {\n return;\n }\n if (!this.canSwitchToMode(mode)) {\n return;\n }\n }\n\n this.trigger(BookReader.eventNames.stop);\n\n this.prevReadMode = this.getPrevReadMode(this.mode);\n\n if (this.mode != mode) {\n this.activeMode.unprepare?.();\n }\n\n this.mode = mode;\n\n // reinstate scale if moving from thumbnail view\n if (this.pageScale !== this.reduce) {\n this.reduce = this.pageScale;\n }\n\n // $$$ TODO preserve center of view when switching between mode\n // See https://bugs.edge.launchpad.net/gnubook/+bug/416682\n\n // XXX maybe better to preserve zoom in each mode\n if (this.constMode1up == mode) {\n this.prepareOnePageView();\n } else if (this.constModeThumb == mode) {\n this.reduce = this.quantizeReduce(this.reduce, this.reductionFactors);\n this.prepareThumbnailView();\n } else {\n // $$$ why don't we save autofit?\n // this.twoPage.autofit = null; // Take zoom level from other mode\n // spread indices not set, so let's set them\n if (init || !pageFound) {\n this.setSpreadIndices();\n }\n\n this.twoPageCalculateReductionFactors(); // this sets this.twoPage && this.reduce\n this.prepareTwoPageView();\n this.twoPageCenterView(0.5, 0.5); // $$$ TODO preserve center\n }\n\n if (!(this.suppressFragmentChange || suppressFragmentChange)) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n var eventName = mode + 'PageViewSelected';\n this.trigger(BookReader.eventNames[eventName]);\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n};\n\nBookReader.prototype.updateBrClasses = function() {\n var modeToClass = {};\n modeToClass[this.constMode1up] = 'BRmode1up';\n modeToClass[this.constMode2up] = 'BRmode2Up';\n modeToClass[this.constModeThumb] = 'BRmodeThumb';\n\n this.refs.$br\n .removeClass('BRmode1up BRmode2Up BRmodeThumb')\n .addClass(modeToClass[this.mode]);\n\n if (this.isFullscreen()) {\n this.refs.$br.addClass('fullscreenActive');\n $(document.body).addClass('BRfullscreenActive');\n } else {\n this.refs.$br.removeClass('fullscreenActive');\n $(document.body).removeClass('BRfullscreenActive');\n }\n};\n\nBookReader.prototype.isFullscreen = function() {\n return this.isFullscreenActive;\n};\n\n/**\n * Toggles fullscreen\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.toggleFullscreen = async function(bindKeyboardControls = true) {\n if (this.isFullscreen()) {\n await this.exitFullScreen();\n } else {\n await this.enterFullscreen(bindKeyboardControls);\n }\n};\n\n/**\n * Enters fullscreen\n * including:\n * - animation\n * - binds keyboard controls\n * - fires custom event\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.enterFullscreen = async function(bindKeyboardControls = true) {\n const currentIndex = this.currentIndex();\n this.refs.$brContainer.css('opacity', 0);\n\n if (bindKeyboardControls) {\n this._fullscreenCloseHandler = (e) => {\n if (e.keyCode === 27) this.toggleFullscreen();\n };\n $(document).keyup(this._fullscreenCloseHandler);\n }\n\n const windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode1up);\n }\n\n this.isFullscreenActive = true;\n this.animating = true;\n await new Promise(res => this.refs.$brContainer.animate({opacity: 1}, 'fast', 'linear', res));\n this.resize();\n if (this.activeMode instanceof Mode1Up) {\n this.activeMode.mode1UpLit.scale = this.activeMode.mode1UpLit.computeDefaultScale(this._models.book.getPage(currentIndex));\n // Need the new scale to be applied before calling jumpToIndex\n await this.activeMode.mode1UpLit.requestUpdate();\n }\n this.jumpToIndex(currentIndex);\n this.animating = false;\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n this.trigger(BookReader.eventNames.fullscreenToggled);\n};\n\n/**\n * Exits fullscreen\n * - toggles fullscreen\n * - binds keyboard controls\n * - fires custom event\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.exitFullScreen = async function () {\n this.refs.$brContainer.css('opacity', 0);\n\n $(document).unbind('keyup', this._fullscreenCloseHandler);\n\n var windowWidth = $(window).width();\n\n const canShow2up = this.options.controls.twoPage.visible;\n if (canShow2up && (windowWidth <= this.onePageMinBreakpoint)) {\n this.switchMode(this.constMode2up);\n }\n\n this.isFullscreenActive = false;\n this.updateBrClasses();\n this.animating = true;\n await new Promise((res => this.refs.$brContainer.animate({opacity: 1}, 'fast', 'linear', res)));\n this.resize();\n\n if (this.activeMode instanceof Mode1Up) {\n this.activeMode.mode1UpLit.scale = this.activeMode.mode1UpLit.computeDefaultScale(this._models.book.getPage(this.currentIndex()));\n await this.activeMode.mode1UpLit.requestUpdate();\n }\n\n this.animating = false;\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n this.trigger(BookReader.eventNames.fullscreenToggled);\n};\n\n/**\n * Returns the currently active index\n * @return {number}\n * @throws\n */\nBookReader.prototype.currentIndex = function() {\n // $$$ we should be cleaner with our idea of which index is active in 1up/2up\n if (this.mode == this.constMode1up || this.mode == this.constModeThumb) {\n return this.firstIndex; // $$$ TODO page in center of view would be better\n } else if (this.mode == this.constMode2up) {\n // Only allow indices that are actually present in book\n return utils.clamp(this.firstIndex, 0, this._models.book.getNumLeafs() - 1);\n } else {\n throw 'currentIndex called for unimplemented mode ' + this.mode;\n }\n};\n\n/**\n * Setter for this.firstIndex\n * Also triggers an event and updates the navbar slider position\n * @param {number} index\n * @param {object} [options]\n * @param {boolean} [options.suppressFragmentChange = false]\n */\nBookReader.prototype.updateFirstIndex = function(\n index,\n { suppressFragmentChange = false } = {}\n) {\n // If there's no change, do nothing\n if (this.firstIndex === index) return;\n\n this.firstIndex = index;\n if (!(this.suppressFragmentChange || suppressFragmentChange)) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n // If there's an initial search we stop suppressing global URL changes\n // when local suppression ends\n // This seems to correctly handle multiple calls during mode/1up\n if (this.options.initialSearchTerm && !suppressFragmentChange) {\n this.suppressFragmentChange = false;\n }\n this.trigger('pageChanged');\n this.updateNavIndexThrottled(index);\n};\n\n/**\n * Flip the right page over onto the left\n */\nBookReader.prototype.right = function() {\n if ('rl' != this.pageProgression) {\n this.next();\n } else {\n this.prev();\n }\n};\n\n/**\n * Flip to the rightmost page\n */\nBookReader.prototype.rightmost = function() {\n if ('rl' != this.pageProgression) {\n this.last();\n } else {\n this.first();\n }\n};\n\n/**\n * Flip the left page over onto the right\n */\nBookReader.prototype.left = function() {\n if ('rl' != this.pageProgression) {\n this.prev();\n } else {\n this.next();\n }\n};\n\n/**\n * Flip to the leftmost page\n */\nBookReader.prototype.leftmost = function() {\n if ('rl' != this.pageProgression) {\n this.first();\n } else {\n this.last();\n }\n};\n\nBookReader.prototype.next = function() {\n if (this.constMode2up == this.mode) {\n this.trigger(BookReader.eventNames.stop);\n this.flipFwdToIndex(null);\n } else {\n if (this.firstIndex < this.lastDisplayableIndex()) {\n this.jumpToIndex(this.firstIndex + 1);\n }\n }\n};\n\nBookReader.prototype.prev = function() {\n const isOnFrontPage = this.firstIndex < 1;\n if (isOnFrontPage) return;\n\n if (this.constMode2up == this.mode) {\n this.trigger(BookReader.eventNames.stop);\n this.flipBackToIndex(null);\n } else {\n if (this.firstIndex >= 1) {\n this.jumpToIndex(this.firstIndex - 1);\n }\n }\n};\n\nBookReader.prototype.first = function() {\n this.jumpToIndex(this.firstDisplayableIndex());\n};\n\nBookReader.prototype.last = function() {\n this.jumpToIndex(this.lastDisplayableIndex());\n};\n\n/**\n * Scrolls down one screen view\n */\nBookReader.prototype.scrollDown = function() {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n if ( this.mode == this.constMode1up && (this.reduce >= this.onePageGetAutofitHeight()) ) {\n // Whole pages are visible, scroll whole page only\n return this.next();\n }\n\n this.refs.$brContainer.stop(true).animate(\n { scrollTop: '+=' + this._scrollAmount() + 'px'},\n 400, 'easeInOutExpo'\n );\n return true;\n } else {\n return false;\n }\n};\n\n/**\n * Scrolls up one screen view\n */\nBookReader.prototype.scrollUp = function() {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n if ( this.mode == this.constMode1up && (this.reduce >= this.onePageGetAutofitHeight()) ) {\n // Whole pages are visible, scroll whole page only\n return this.prev();\n }\n\n this.refs.$brContainer.stop(true).animate(\n { scrollTop: '-=' + this._scrollAmount() + 'px'},\n 400, 'easeInOutExpo'\n );\n return true;\n } else {\n return false;\n }\n};\n\n/**\n * The amount to scroll vertically in integer pixels\n */\nBookReader.prototype._scrollAmount = function() {\n if (this.constMode1up == this.mode) {\n // Overlap by % of page size\n return parseInt(this.refs.$brContainer.prop('clientHeight') - this._models.book.getPageHeight(this.currentIndex()) / this.reduce * 0.03);\n }\n\n return parseInt(0.9 * this.refs.$brContainer.prop('clientHeight'));\n};\n\n/**\n * @deprecated No longer used; will be remove in v5\n */\nBookReader.prototype.prefetchImg = async function(index, fetchNow = false) {\n console.warn('Call to deprecated function: BookReader.prefetchImg. No-op.');\n};\n\n/**\n * @deprecated No longer used; will be remove in v5\n */\nBookReader.prototype.pruneUnusedImgs = function() {\n console.warn('Call to deprecated function: BookReader.pruneUnused. No-op.');\n};\n\n/************************/\n/** Mode1Up extensions **/\n/************************/\n/** @deprecated not used outside BookReader */\nBookReader.prototype.prepareOnePageView = Mode1Up.prototype.prepare;\nexposeOverrideableMethod(Mode1Up, '_modes.mode1Up', 'prepare', 'prepareOnePageView');\n/** @deprecated not used outside BookReader */\nBookReader.prototype.zoom1up = Mode1Up.prototype.zoom;\nexposeOverrideableMethod(Mode1Up, '_modes.mode1Up', 'zoom', 'zoom1up');\n/** @deprecated not used outside Mode1Up, BookReader */\nBookReader.prototype.resizePageView1up = Mode1Up.prototype.resizePageView;\nexposeOverrideableMethod(Mode1Up, '_modes.mode1Up', 'resizePageView', 'resizePageView1up');\n/** @deprecated not used outside Mode1Up */\nBookReader.prototype.onePageCalculateViewDimensions = Mode1Up.prototype.calculateViewDimensions;\nexposeOverrideableMethod(Mode1Up, '_modes.mode1Up', 'calculateViewDimensions', 'onePageCalculateViewDimensions');\n\n/************************/\n/** Mode2Up extensions **/\n/************************/\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.zoom2up = Mode2Up.prototype.zoom;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'zoom', 'zoom2up');\nBookReader.prototype.twoPageGetAutofitReduce = Mode2Up.prototype.getAutofitReduce;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getAutofitReduce', 'twoPageGetAutofitReduce');\nBookReader.prototype.flipBackToIndex = Mode2Up.prototype.flipBackToIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipBackToIndex', 'flipBackToIndex');\nBookReader.prototype.flipFwdToIndex = Mode2Up.prototype.flipFwdToIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipFwdToIndex', 'flipFwdToIndex');\nBookReader.prototype.setHilightCss2UP = Mode2Up.prototype.setHilightCss;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setHilightCss', 'setHilightCss2UP');\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.drawLeafsTwoPage = Mode2Up.prototype.drawLeafs;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'drawLeafs', 'drawLeafsTwoPage');\n/** @deprecated not used outside BookReader */\nBookReader.prototype.prepareTwoPageView = Mode2Up.prototype.prepareTwoPageView;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareTwoPageView', 'prepareTwoPageView');\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.prepareTwoPagePopUp = Mode2Up.prototype.preparePopUp;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'preparePopUp', 'prepareTwoPagePopUp');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.calculateSpreadSize = Mode2Up.prototype.calculateSpreadSize;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'calculateSpreadSize', 'calculateSpreadSize');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.getIdealSpreadSize = Mode2Up.prototype.getIdealSpreadSize;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getIdealSpreadSize', 'getIdealSpreadSize');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.getSpreadSizeFromReduce = Mode2Up.prototype.getSpreadSizeFromReduce;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getSpreadSizeFromReduce', 'getSpreadSizeFromReduce');\n/** @deprecated unused */\nBookReader.prototype.twoPageIsZoomedIn = Mode2Up.prototype.isZoomedIn;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'isZoomedIn', 'twoPageIsZoomedIn');\n/** @deprecated not used outside BookReader */\nBookReader.prototype.twoPageCalculateReductionFactors = Mode2Up.prototype.calculateReductionFactors;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'calculateReductionFactors', 'twoPageCalculateReductionFactors');\n/** @deprecated unused */\nBookReader.prototype.twoPageSetCursor = Mode2Up.prototype.setCursor;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setCursor', 'twoPageSetCursor');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.flipLeftToRight = Mode2Up.prototype.flipLeftToRight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipLeftToRight', 'flipLeftToRight');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.flipRightToLeft = Mode2Up.prototype.flipRightToLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipRightToLeft', 'flipRightToLeft');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.prepareFlipLeftToRight = Mode2Up.prototype.prepareFlipLeftToRight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareFlipLeftToRight', 'prepareFlipLeftToRight');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.prepareFlipRightToLeft = Mode2Up.prototype.prepareFlipRightToLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareFlipRightToLeft', 'prepareFlipRightToLeft');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.getPageWidth2UP = Mode2Up.prototype.getPageWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getPageWidth', 'getPageWidth2UP');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageGutter = Mode2Up.prototype.gutter;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'gutter', 'twoPageGutter');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageTop = Mode2Up.prototype.top;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'top', 'twoPageTop');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageCoverWidth = Mode2Up.prototype.coverWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'coverWidth', 'twoPageCoverWidth');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageGetViewCenter = Mode2Up.prototype.getViewCenter;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getViewCenter', 'twoPageGetViewCenter');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.twoPageCenterView = Mode2Up.prototype.centerView;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'centerView', 'twoPageCenterView');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageFlipAreaHeight = Mode2Up.prototype.flipAreaHeight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaHeight', 'twoPageFlipAreaHeight');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageFlipAreaWidth = Mode2Up.prototype.flipAreaWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaWidth', 'twoPageFlipAreaWidth');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.twoPageFlipAreaTop = Mode2Up.prototype.flipAreaTop;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaTop', 'twoPageFlipAreaTop');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageLeftFlipAreaLeft = Mode2Up.prototype.leftFlipAreaLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'leftFlipAreaLeft', 'twoPageLeftFlipAreaLeft');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageRightFlipAreaLeft = Mode2Up.prototype.rightFlipAreaLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'rightFlipAreaLeft', 'twoPageRightFlipAreaLeft');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.gutterOffsetForIndex = Mode2Up.prototype.gutterOffsetForIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'gutterOffsetForIndex', 'gutterOffsetForIndex');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.leafEdgeWidth = Mode2Up.prototype.leafEdgeWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'leafEdgeWidth', 'leafEdgeWidth');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.jumpIndexForLeftEdgePageX = Mode2Up.prototype.jumpIndexForLeftEdgePageX;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'jumpIndexForLeftEdgePageX', 'jumpIndexForLeftEdgePageX');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.jumpIndexForRightEdgePageX = Mode2Up.prototype.jumpIndexForRightEdgePageX;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'jumpIndexForRightEdgePageX', 'jumpIndexForRightEdgePageX');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.prefetch = Mode2Up.prototype.prefetch;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prefetch', 'prefetch');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.setSpreadIndices = Mode2Up.prototype.setSpreadIndices;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setSpreadIndices', 'setSpreadIndices');\n/**\n * Immediately stop flip animations. Callbacks are triggered.\n */\nBookReader.prototype.stopFlipAnimations = function() {\n this.trigger(BookReader.eventNames.stop);\n\n // Stop animation, clear queue, trigger callbacks\n if (this.leafEdgeTmp) {\n $(this.leafEdgeTmp).stop(false, true);\n }\n jQuery.each(this._modes.mode2Up.pageContainers, function() {\n $(this.$container).stop(false, true);\n });\n\n // And again since animations also queued in callbacks\n if (this.leafEdgeTmp) {\n $(this.leafEdgeTmp).stop(false, true);\n }\n jQuery.each(this._modes.mode2Up.pageContainers, function() {\n $(this.$container).stop(false, true);\n });\n};\n\n/**\n * @template TClass extends { br: BookReader }\n * Helper method to expose a method onto BookReader from a composed class.\n * Only composed classes in BookReader._overridable can be exposed in this\n * way.\n * @param {new () => TClass} Class\n * @param {keyof BookReader['_overrideable']} classKey\n * @param {keyof TClass} method\n * @param {string} [brMethod]\n */\nfunction exposeOverrideableMethod(Class, classKey, method, brMethod = method) {\n /** @type {function(TClass): BookReader} */\n const classToBr = cls => cls.br;\n /** @type {function(BookReader): TClass} */\n const brToClass = br => br._overrideable[classKey];\n exposeOverrideable(Class, method, classToBr, BookReader, brMethod, brToClass);\n}\n\n\n/***********************/\n/** Navbar extensions **/\n/***********************/\nBookReader.prototype.initNavbar = Navbar.prototype.init;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'init', 'initNavbar');\nBookReader.prototype.switchNavbarControls = Navbar.prototype.switchNavbarControls;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'switchNavbarControls');\nBookReader.prototype.updateViewModeButton = Navbar.prototype.updateViewModeButton;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'updateViewModeButton');\nBookReader.prototype.getNavPageNumString = Navbar.prototype.getNavPageNumString;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'getNavPageNumString');\n/** @deprecated */\nBookReader.prototype.initEmbedNavbar = Navbar.prototype.initEmbed;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'initEmbed', 'initEmbedNavbar');\n/** @deprecated unused */\nBookReader.prototype.getNavPageNumHtml = getNavPageNumHtml;\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavPageNum = Navbar.prototype.updateNavPageNum;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'updateNavPageNum');\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavIndex = Navbar.prototype.updateNavIndex;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'updateNavIndex');\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavIndexThrottled = utils.throttle(BookReader.prototype.updateNavIndex, 250, false);\n/** @deprecated unused */\nBookReader.prototype.updateNavIndexDebounced = utils.debounce(BookReader.prototype.updateNavIndex, 500, false);\n\n\n/************************/\n/** Toolbar extensions **/\n/************************/\nBookReader.prototype.buildToolbarElement = Toolbar.prototype.buildToolbarElement;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildToolbarElement');\nBookReader.prototype.initToolbar = Toolbar.prototype.initToolbar;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'initToolbar');\nBookReader.prototype.buildShareDiv = Toolbar.prototype.buildShareDiv;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildShareDiv');\nBookReader.prototype.buildInfoDiv = Toolbar.prototype.buildInfoDiv;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildInfoDiv');\nBookReader.prototype.getToolBarHeight = Toolbar.prototype.getToolBarHeight;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'getToolBarHeight');\n/** @deprecated zoom no longer in toolbar */\nBookReader.prototype.updateToolbarZoom = Toolbar.prototype.updateToolbarZoom;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'updateToolbarZoom');\n/** @deprecated unused */\nBookReader.prototype.blankInfoDiv = blankInfoDiv;\n/** @deprecated unused */\nBookReader.prototype.blankShareDiv = blankShareDiv;\n/** @deprecated unused */\nBookReader.prototype.createPopup = createPopup;\n\n/**\n * Bind navigation handlers\n */\nBookReader.prototype.bindNavigationHandlers = function() {\n const self = this;\n\n // Note the mobile plugin attaches itself to body, so we need to select outside\n const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');\n // Map of jIcon class -> click handler\n const navigationControls = {\n book_left: () => {\n this.trigger(BookReader.eventNames.stop);\n this.left();\n },\n book_right: () => {\n this.trigger(BookReader.eventNames.stop);\n this.right();\n },\n book_up: () => {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n this.scrollUp();\n } else {\n this.prev();\n }\n },\n book_down: () => {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n this.scrollDown();\n } else {\n this.next();\n }\n },\n book_top: this.first.bind(this),\n book_bottom: this.last.bind(this),\n book_leftmost: this.leftmost.bind(this),\n book_rightmost: this.rightmost.bind(this),\n onepg: () => {\n this.switchMode(self.constMode1up);\n },\n thumb: () => {\n this.switchMode(self.constModeThumb);\n },\n twopg: () => {\n this.switchMode(self.constMode2up);\n },\n zoom_in: () => {\n this.trigger(BookReader.eventNames.stop);\n this.zoom(1);\n this.trigger(BookReader.eventNames.zoomIn);\n },\n zoom_out: () => {\n this.trigger(BookReader.eventNames.stop);\n this.zoom(-1);\n this.trigger(BookReader.eventNames.zoomOut);\n },\n full: () => {\n if (this.ui == 'embed') {\n var url = this.$('.BRembedreturn a').attr('href');\n window.open(url);\n } else {\n this.toggleFullscreen();\n }\n },\n };\n\n jIcons.filter('.fit').bind('fit', function() {\n // XXXmang implement autofit zoom\n });\n\n for (const control in navigationControls) {\n jIcons.filter(`.${control}`).on('click.bindNavigationHandlers', () => {\n navigationControls[control]();\n return false;\n });\n }\n\n var $brNavCntlBtmEl = this.$('.BRnavCntlBtm');\n var $brNavCntlTopEl = this.$('.BRnavCntlTop');\n\n this.$('.BRnavCntl').click(\n function() {\n var promises = [];\n // TODO don't use magic constants\n // TODO move this to a function\n if ($brNavCntlBtmEl.hasClass('BRdn')) {\n if (self.refs.$BRtoolbar)\n promises.push(self.refs.$BRtoolbar.animate(\n {top: self.getToolBarHeight() * -1}\n ).promise());\n promises.push(self.$('.BRfooter').animate({bottom: self.getFooterHeight() * -1}).promise());\n $brNavCntlBtmEl.addClass('BRup').removeClass('BRdn');\n $brNavCntlTopEl.addClass('BRdn').removeClass('BRup');\n self.$('.BRnavCntlBtm.BRnavCntl').animate({height:'45px'});\n self.$('.BRnavCntl').delay(1000).animate({opacity:.75}, 1000);\n } else {\n if (self.refs.$BRtoolbar)\n promises.push(self.refs.$BRtoolbar.animate({top:0}).promise());\n promises.push(self.$('.BRfooter').animate({bottom:0}).promise());\n $brNavCntlBtmEl.addClass('BRdn').removeClass('BRup');\n $brNavCntlTopEl.addClass('BRup').removeClass('BRdn');\n self.$('.BRnavCntlBtm.BRnavCntl').animate({height:'30px'});\n self.$('.BRvavCntl').animate({opacity:1});\n }\n $.when.apply($, promises).done(function() {\n // Only do full resize in auto mode and need to recalc. size\n if (self.mode == self.constMode2up && self.twoPage.autofit != null\n && self.twoPage.autofit != 'none'\n ) {\n self.resize();\n } else if (self.mode == self.constMode1up && self.onePage.autofit != null\n && self.onePage.autofit != 'none') {\n self.resize();\n } else {\n // Don't do a full resize to avoid redrawing images\n self.resizeBRcontainer();\n }\n });\n }\n );\n $brNavCntlBtmEl.mouseover(function() {\n if ($(this).hasClass('BRup')) {\n self.$('.BRnavCntl').animate({opacity:1},250);\n }\n }).mouseleave(function() {\n if ($(this).hasClass('BRup')) {\n self.$('.BRnavCntl').animate({opacity:.75},250);\n }\n });\n $brNavCntlTopEl.mouseover(function() {\n if ($(this).hasClass('BRdn')) {\n self.$('.BRnavCntl').animate({opacity:1},250);\n }\n }).mouseleave(function() {\n if ($(this).hasClass('BRdn')) {\n self.$('.BRnavCntl').animate({opacity:.75},250);\n }\n });\n\n this.initSwipeData();\n\n $(document).off('mousemove.navigation', this.el);\n $(document).on(\n 'mousemove.navigation',\n this.el,\n { 'br': this },\n this.navigationMousemoveHandler\n );\n\n $(document).off('mousedown.swipe', '.BRpageimage');\n $(document).on(\n 'mousedown.swipe',\n '.BRpageimage',\n { 'br': this },\n this.swipeMousedownHandler\n );\n\n this.bindMozTouchHandlers();\n};\n\n/**\n * Unbind navigation handlers\n */\nBookReader.prototype.unbindNavigationHandlers = function() {\n $(document).off('mousemove.navigation', this.el);\n};\n\n/**\n * Handle mousemove related to navigation. Bind at #BookReader level to allow autohide.\n */\nBookReader.prototype.navigationMousemoveHandler = function(event) {\n // $$$ possibly not great to be calling this for every mousemove\n if (event.data['br'].uiAutoHide) {\n // 77px is an approximate height of the Internet Archive Top Nav\n // 75 & 76 (pixels) provide used in this context is checked against the IA top nav height\n var navkey = $(document).height() - 75;\n if ((event.pageY < 76) || (event.pageY > navkey)) {\n // inside or near navigation elements\n event.data['br'].hideNavigation();\n } else {\n event.data['br'].showNavigation();\n }\n }\n};\n\nBookReader.prototype.initSwipeData = function(clientX, clientY) {\n /*\n * Based on the really quite awesome \"Today's Guardian\" at http://guardian.gyford.com/\n */\n this._swipe = {\n mightBeSwiping: false,\n didSwipe: false,\n mightBeDraggin: false,\n didDrag: false,\n startTime: (new Date).getTime(),\n startX: clientX,\n startY: clientY,\n lastX: clientX,\n lastY: clientY,\n deltaX: 0,\n deltaY: 0,\n deltaT: 0\n };\n};\n\nBookReader.prototype.swipeMousedownHandler = function(event) {\n var self = event.data['br'];\n\n // We should be the last bubble point for the page images\n // Disable image drag and select, but keep right-click\n if (event.which == 3) {\n return !self.protected;\n }\n\n $(event.target).bind('mouseout.swipe',\n { 'br': self},\n self.swipeMouseupHandler\n ).bind('mouseup.swipe',\n { 'br': self},\n self.swipeMouseupHandler\n ).bind('mousemove.swipe',\n { 'br': self },\n self.swipeMousemoveHandler\n );\n\n self.initSwipeData(event.clientX, event.clientY);\n self._swipe.mightBeSwiping = true;\n self._swipe.mightBeDragging = true;\n\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n};\n\nBookReader.prototype.swipeMousemoveHandler = function(event) {\n var self = event.data['br'];\n var _swipe = self._swipe;\n if (! _swipe.mightBeSwiping) {\n return;\n }\n\n // Update swipe data\n _swipe.deltaX = event.clientX - _swipe.startX;\n _swipe.deltaY = event.clientY - _swipe.startY;\n _swipe.deltaT = (new Date).getTime() - _swipe.startTime;\n\n var absX = Math.abs(_swipe.deltaX);\n var absY = Math.abs(_swipe.deltaY);\n\n // Minimum distance in the amount of tim to trigger the swipe\n var minSwipeLength = Math.min(self.refs.$br.width() / 5, 80);\n var maxSwipeTime = 400;\n\n // Check for horizontal swipe\n if (absX > absY && (absX > minSwipeLength) && _swipe.deltaT < maxSwipeTime) {\n _swipe.mightBeSwiping = false; // only trigger once\n _swipe.didSwipe = true;\n if (self.mode == self.constMode2up) {\n if (_swipe.deltaX < 0) {\n self.right();\n } else {\n self.left();\n }\n }\n }\n\n if ( _swipe.deltaT > maxSwipeTime && !_swipe.didSwipe) {\n if (_swipe.mightBeDragging) {\n // Dragging\n _swipe.didDrag = true;\n self.refs.$brContainer\n .scrollTop(self.refs.$brContainer.scrollTop() - event.clientY + _swipe.lastY)\n .scrollLeft(self.refs.$brContainer.scrollLeft() - event.clientX + _swipe.lastX);\n }\n }\n _swipe.lastX = event.clientX;\n _swipe.lastY = event.clientY;\n\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n};\n\nBookReader.prototype.swipeMouseupHandler = function(event) {\n var _swipe = event.data['br']._swipe;\n _swipe.mightBeSwiping = false;\n _swipe.mightBeDragging = false;\n\n $(event.target).unbind('mouseout.swipe').unbind('mouseup.swipe').unbind('mousemove.swipe');\n\n if (_swipe.didSwipe || _swipe.didDrag) {\n // Swallow event if completed swipe gesture\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n }\n return true;\n};\n\nBookReader.prototype.bindMozTouchHandlers = function() {\n var self = this;\n\n // Currently only want touch handlers in 2up\n this.refs.$br.bind('MozTouchDown', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n })\n .bind('MozTouchMove', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n })\n .bind('MozTouchUp', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n });\n};\n\n/**\n * Returns true if the navigation elements are currently visible\n * @return {boolean}\n */\nBookReader.prototype.navigationIsVisible = function() {\n // $$$ doesn't account for transitioning states, nav must be fully visible to return true\n var toolpos = this.refs.$BRtoolbar.position();\n var tooltop = toolpos.top;\n return tooltop == 0;\n};\n\n/**\n * Main controller that sets navigation into view.\n * Defaults to SHOW the navigation chrome\n */\nBookReader.prototype.setNavigationView = function brSetNavigationView(hide) {\n var animationLength = this.constNavAnimationDuration;\n var animationType = 'linear';\n var resizePageContainer = function resizePageContainer () {\n /* main page container fills whole container */\n if (this.constMode2up !== this.mode) {\n var animate = true;\n this.resizeBRcontainer(animate);\n }\n this.trigger(BookReader.eventNames.navToggled);\n }.bind(this);\n\n var toolbarHeight = 0;\n var navbarHeight = 0;\n if (hide) {\n toolbarHeight = this.getToolBarHeight() * -1;\n navbarHeight = this.getFooterHeight() * -1;\n\n this.refs.$BRtoolbar.addClass('js-menu-hide');\n this.refs.$BRfooter.addClass('js-menu-hide');\n } else {\n this.refs.$BRtoolbar.removeClass('js-menu-hide');\n this.refs.$BRfooter.removeClass('js-menu-hide');\n }\n\n this.refs.$BRtoolbar.animate(\n { top: toolbarHeight },\n animationLength,\n animationType,\n resizePageContainer\n );\n this.refs.$BRfooter.animate(\n { bottom: navbarHeight },\n animationLength,\n animationType,\n resizePageContainer\n );\n};\n/**\n * Hide navigation elements, if visible\n */\nBookReader.prototype.hideNavigation = function() {\n // Check if navigation is showing\n if (this.navigationIsVisible()) {\n var hide = true;\n this.setNavigationView(hide);\n }\n};\n\n/**\n * Show navigation elements\n */\nBookReader.prototype.showNavigation = function() {\n // Check if navigation is hidden\n if (!this.navigationIsVisible()) {\n this.setNavigationView();\n }\n};\n\n/**\n * Returns the index of the first visible page, dependent on the mode.\n * $$$ Currently we cannot display the front/back cover in 2-up and will need to update\n * this function when we can as part of https://bugs.launchpad.net/gnubook/+bug/296788\n * @return {number}\n */\nBookReader.prototype.firstDisplayableIndex = function() {\n if (this.mode != this.constMode2up) {\n return 0;\n }\n\n if ('rl' != this.pageProgression) {\n // LTR\n if (this._models.book.getPageSide(0) == 'L') {\n return 0;\n } else {\n return -1;\n }\n } else {\n // RTL\n if (this._models.book.getPageSide(0) == 'R') {\n return 0;\n } else {\n return -1;\n }\n }\n};\n\n/**\n * Returns the index of the last visible page, dependent on the mode.\n * $$$ Currently we cannot display the front/back cover in 2-up and will need to update\n * this function when we can as part of https://bugs.launchpad.net/gnubook/+bug/296788\n * @return {number}\n */\nBookReader.prototype.lastDisplayableIndex = function() {\n\n var lastIndex = this._models.book.getNumLeafs() - 1;\n\n if (this.mode != this.constMode2up) {\n return lastIndex;\n }\n\n if ('rl' != this.pageProgression) {\n // LTR\n if (this._models.book.getPageSide(lastIndex) == 'R') {\n return lastIndex;\n } else {\n return lastIndex + 1;\n }\n } else {\n // RTL\n if (this._models.book.getPageSide(lastIndex) == 'L') {\n return lastIndex;\n } else {\n return lastIndex + 1;\n }\n }\n};\n\n\n/**************************/\n/** BookModel extensions **/\n/**************************/\n/** @deprecated not used outside */\nBookReader.prototype.getMedianPageSize = BookModel.prototype.getMedianPageSize;\nexposeOverrideableMethod(BookModel, '_models.book', 'getMedianPageSize');\nBookReader.prototype._getPageWidth = BookModel.prototype._getPageWidth;\nexposeOverrideableMethod(BookModel, '_models.book', '_getPageWidth');\nBookReader.prototype._getPageHeight = BookModel.prototype._getPageHeight;\nexposeOverrideableMethod(BookModel, '_models.book', '_getPageHeight');\nBookReader.prototype.getPageIndex = BookModel.prototype.getPageIndex;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageIndex');\n/** @deprecated not used outside */\nBookReader.prototype.getPageIndices = BookModel.prototype.getPageIndices;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageIndices');\nBookReader.prototype.getPageName = BookModel.prototype.getPageName;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageName');\nBookReader.prototype.getNumLeafs = BookModel.prototype.getNumLeafs;\nexposeOverrideableMethod(BookModel, '_models.book', 'getNumLeafs');\nBookReader.prototype.getPageWidth = BookModel.prototype.getPageWidth;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageWidth');\nBookReader.prototype.getPageHeight = BookModel.prototype.getPageHeight;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageHeight');\nBookReader.prototype.getPageURI = BookModel.prototype.getPageURI;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageURI');\nBookReader.prototype.getPageSide = BookModel.prototype.getPageSide;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageSide');\nBookReader.prototype.getPageNum = BookModel.prototype.getPageNum;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageNum');\nBookReader.prototype.getPageProp = BookModel.prototype.getPageProp;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageProp');\nBookReader.prototype.getSpreadIndices = BookModel.prototype.getSpreadIndices;\nexposeOverrideableMethod(BookModel, '_models.book', 'getSpreadIndices');\nBookReader.prototype.leafNumToIndex = BookModel.prototype.leafNumToIndex;\nexposeOverrideableMethod(BookModel, '_models.book', 'leafNumToIndex');\nBookReader.prototype.parsePageString = BookModel.prototype.parsePageString;\nexposeOverrideableMethod(BookModel, '_models.book', 'parsePageString');\n/** @deprecated unused */\nBookReader.prototype._getDataFlattened = BookModel.prototype._getDataFlattened;\nexposeOverrideableMethod(BookModel, '_models.book', '_getDataFlattened');\n/** @deprecated unused */\nBookReader.prototype._getDataProp = BookModel.prototype._getDataProp;\nexposeOverrideableMethod(BookModel, '_models.book', '_getDataProp');\n\n// Parameter related functions\n\n/**\n * Update from the params object\n * @param {Object}\n */\nBookReader.prototype.updateFromParams = function(params) {\n // Set init, fragment change options for switchMode()\n const {\n mode = 0,\n init = false,\n fragmentChange = false,\n } = params;\n\n if (mode) {\n this.switchMode(\n mode,\n { init: init, suppressFragmentChange: !fragmentChange }\n );\n }\n\n // $$$ process /zoom\n // We only respect page if index is not set\n if ('undefined' != typeof(params.index)) {\n if (params.index != this.currentIndex()) {\n this.jumpToIndex(params.index);\n }\n } else if ('undefined' != typeof(params.page)) {\n // $$$ this assumes page numbers are unique\n if (params.page != this._models.book.getPageNum(this.currentIndex())) {\n this.jumpToPage(params.page);\n }\n }\n\n\n // process /search\n // @deprecated for urlMode 'history'\n // Continues to work for urlMode 'hash'\n if (this.enableSearch && 'undefined' != typeof(params.search)) {\n if (this.searchTerm !== params.search) {\n this.$('.BRsearchInput').val(params.search);\n }\n }\n\n // $$$ process /region\n // $$$ process /highlight\n\n // $$$ process /theme\n if (this.enableThemesPlugin && 'undefined' != typeof(params.theme)) {\n this.updateTheme(params.theme);\n }\n};\n\n/**\n * Returns true if we can switch to the requested mode\n * @param {number} mode\n * @return {boolean}\n */\nBookReader.prototype.canSwitchToMode = function(mode) {\n if (mode == this.constMode2up || mode == this.constModeThumb) {\n // check there are enough pages to display\n // $$$ this is a workaround for the mis-feature that we can't display\n // short books in 2up mode\n if (this._models.book.getNumLeafs() < 2) {\n return false;\n }\n }\n\n return true;\n};\n\n\n/**\n * @deprecated. Use PageModel.getURISrcSet. Slated for removal in v5.\n * Returns the srcset with correct URIs or void string if out of range\n * Also makes the reduce argument optional\n * @param {number} index\n * @param {number} [reduce]\n * @param {number} [rotate]\n * @return {string}\n */\nBookReader.prototype._getPageURISrcset = function(index, reduce, rotate) {\n const page = this._models.book.getPage(index, false);\n // Synthesize page\n if (!page) return \"\";\n\n // reduce not passed in\n // $$$ this probably won't work for thumbnail mode\n if ('undefined' == typeof(reduce)) {\n reduce = page.height / this.twoPage.height;\n }\n\n return page.getURISrcSet(reduce, rotate);\n};\n\n\n/**\n * Returns the page URI or transparent image if out of range\n * Also makes the reduce argument optional\n * @param {number} index\n * @param {number} [reduce]\n * @param {number} [rotate]\n * @return {string}\n */\nBookReader.prototype._getPageURI = function(index, reduce, rotate) {\n const page = this._models.book.getPage(index, false);\n // Synthesize page\n if (!page) return this.imagesBaseURL + \"transparent.png\";\n\n if ('undefined' == typeof(reduce)) {\n // reduce not passed in\n // $$$ this probably won't work for thumbnail mode\n reduce = page.height / this.twoPage.height;\n }\n\n return page.getURI(reduce, rotate);\n};\n\n/**\n * @param {string} msg\n * @param {function|undefined} onCloseCallback\n */\nBookReader.prototype.showProgressPopup = function(msg, onCloseCallback) {\n if (this.popup) return;\n\n this.popup = document.createElement(\"div\");\n $(this.popup).prop('className', 'BRprogresspopup');\n\n if (typeof(onCloseCallback) === 'function') {\n const closeButton = document.createElement('button');\n closeButton.setAttribute('title', 'close');\n closeButton.setAttribute('class', 'close-popup');\n const icon = document.createElement('span');\n icon.setAttribute('class', 'icon icon-close-dark');\n $(closeButton).append(icon);\n closeButton.addEventListener('click', () => {\n onCloseCallback();\n this.removeProgressPopup();\n });\n $(this.popup).append(closeButton);\n }\n\n const bar = document.createElement(\"div\");\n $(bar).css({\n height: '20px'\n }).prop('className', 'BRprogressbar');\n $(this.popup).append(bar);\n\n if (msg) {\n const msgdiv = document.createElement(\"div\");\n msgdiv.innerHTML = msg;\n $(this.popup).append(msgdiv);\n }\n\n $(this.popup).appendTo(this.refs.$br);\n};\n\nBookReader.prototype.removeProgressPopup = function() {\n $(this.popup).remove();\n this.$('.BRprogresspopup').remove();\n this.popup = null;\n};\n\n/**\n * Can be overridden\n */\nBookReader.prototype.initUIStrings = function() {\n // Navigation handlers will be bound after all UI is in place -- makes moving icons between\n // the toolbar and nav bar easier\n\n // Setup tooltips -- later we could load these from a file for i18n\n var titles = {\n '.logo': 'Go to Archive.org', // $$$ update after getting OL record\n '.zoom_in': 'Zoom in',\n '.zoom_out': 'Zoom out',\n '.onepg': 'One-page view',\n '.twopg': 'Two-page view',\n '.thumb': 'Thumbnail view',\n '.print': 'Print this page',\n '.embed': 'Embed BookReader',\n '.link': 'Link to this book (and page)',\n '.bookmark': 'Bookmark this page',\n '.share': 'Share this book',\n '.info': 'About this book',\n '.full': 'Toggle fullscreen',\n '.book_left': 'Flip left',\n '.book_right': 'Flip right',\n '.book_up': 'Page up',\n '.book_down': 'Page down',\n '.play': 'Play',\n '.pause': 'Pause',\n '.BRdn': 'Show/hide nav bar', // Would have to keep updating on state change to have just \"Hide nav bar\"\n '.BRup': 'Show/hide nav bar',\n '.book_top': 'First page',\n '.book_bottom': 'Last page',\n '.book_leftmost': 'First page',\n '.book_rightmost': 'Last page',\n };\n if ('rl' == this.pageProgression) {\n titles['.book_leftmost'] = 'Last page';\n titles['.book_rightmost'] = 'First page';\n }\n\n for (var icon in titles) {\n this.$(icon).prop('title', titles[icon]);\n }\n};\n\n/**\n * Reloads images. Useful when some images might have failed.\n */\nBookReader.prototype.reloadImages = function() {\n this.refs.$brContainer.find('img').each(function(index, elem) {\n if (!elem.complete || elem.naturalHeight === 0) {\n var src = elem.src;\n elem.src = '';\n setTimeout(function() {\n elem.src = src;\n }, 1000);\n }\n });\n};\n\n/**\n * @param {boolean} ignoreDisplay - bypass the display check\n * @return {number}\n */\nBookReader.prototype.getFooterHeight = function() {\n var $heightEl = this.mode == this.constMode2up ? this.refs.$BRfooter : this.refs.$BRnav;\n if ($heightEl && this.refs.$BRfooter) {\n var outerHeight = $heightEl.outerHeight();\n var bottom = parseInt(this.refs.$BRfooter.css('bottom'));\n if (!isNaN(outerHeight) && !isNaN(bottom)) {\n return outerHeight + bottom;\n }\n }\n return 0;\n};\n\n// Basic Usage built-in Methods (can be overridden through options)\n// This implementation uses options.data value for populating BookReader\n\n/**\n * Create a params object from the current parameters.\n * @return {Object}\n */\nBookReader.prototype.paramsFromCurrent = function() {\n var params = {};\n\n var index = this.currentIndex();\n var pageNum = this._models.book.getPageNum(index);\n if ((pageNum === 0) || pageNum) {\n params.page = pageNum;\n }\n\n params.index = index;\n params.mode = this.mode;\n\n // $$$ highlight\n // $$$ region\n\n // search\n if (this.enableSearch) {\n params.search = this.searchTerm;\n }\n\n return params;\n};\n\n/**\n * Return an object with configuration parameters from a fragment string.\n *\n * Fragments are formatted as a URL path but may be used outside of URLs as a\n * serialization format for BookReader parameters\n *\n * @see http://openlibrary.org/dev/docs/bookurls for fragment syntax\n *\n * @param {string} fragment initial # is allowed for backwards compatibility\n * but is deprecated\n * @return {Object}\n */\nBookReader.prototype.paramsFromFragment = function(fragment) {\n var params = {};\n\n // For backwards compatibility we allow an initial # character\n // (as from window.location.hash) but don't require it\n if (fragment.substr(0, 1) == '#') {\n fragment = fragment.substr(1);\n }\n\n // Simple #nn syntax\n var oldStyleLeafNum = parseInt( /^\\d+$/.exec(fragment) );\n if ( !isNaN(oldStyleLeafNum) ) {\n params.index = oldStyleLeafNum;\n\n // Done processing if using old-style syntax\n return params;\n }\n\n // Split into key-value pairs\n var urlArray = fragment.split('/');\n var urlHash = {};\n for (var i = 0; i < urlArray.length; i += 2) {\n urlHash[urlArray[i]] = urlArray[i + 1];\n }\n\n // Mode\n if ('1up' == urlHash['mode']) {\n params.mode = this.constMode1up;\n } else if ('2up' == urlHash['mode']) {\n params.mode = this.constMode2up;\n } else if ('thumb' == urlHash['mode']) {\n params.mode = this.constModeThumb;\n }\n\n // Index and page\n if ('undefined' != typeof(urlHash['page'])) {\n // page was set -- may not be int\n params.page = urlHash['page'];\n }\n\n // $$$ process /region\n // $$$ process /search\n\n if (urlHash['search'] != undefined) {\n params.search = utils.decodeURIComponentPlus(urlHash['search']);\n }\n\n // $$$ process /highlight\n\n // $$$ process /theme\n if (urlHash['theme'] != undefined) {\n params.theme = urlHash['theme'];\n }\n return params;\n};\n\n/**\n * Create a fragment string from the params object.\n *\n * Fragments are formatted as a URL path but may be used outside of URLs as a\n * serialization format for BookReader parameters\n *\n * @see https://openlibrary.org/dev/docs/bookurls for fragment syntax\n *\n * @param {Object} params\n * @param {string} [urlMode]\n * @return {string}\n */\nBookReader.prototype.fragmentFromParams = function(params, urlMode = 'hash') {\n const separator = '/';\n const fragments = [];\n\n if ('undefined' != typeof(params.page)) {\n fragments.push('page', params.page);\n } else {\n if ('undefined' != typeof(params.index)) {\n // Don't have page numbering but we do have the index\n fragments.push('page', 'n' + params.index);\n }\n }\n\n // $$$ highlight\n // $$$ region\n\n // mode\n if ('undefined' != typeof(params.mode)) {\n if (params.mode == this.constMode1up) {\n fragments.push('mode', '1up');\n } else if (params.mode == this.constMode2up) {\n fragments.push('mode', '2up');\n } else if (params.mode == this.constModeThumb) {\n fragments.push('mode', 'thumb');\n } else {\n throw 'fragmentFromParams called with unknown mode ' + params.mode;\n }\n }\n\n // search\n if (params.search && urlMode === 'hash') {\n fragments.push('search', params.search);\n }\n\n return utils.encodeURIComponentPlus(fragments.join(separator)).replace(/%2F/g, '/');\n};\n\n/**\n * Create, update querystring from the params object\n *\n * @param {Object} params\n * @param {string} currQueryString\n * @param {string} [urlMode]\n * @return {string}\n */\nBookReader.prototype.queryStringFromParams = function(\n params,\n currQueryString,\n urlMode = 'hash'\n) {\n const newParams = new URLSearchParams(currQueryString);\n if (params.search && urlMode === 'history') {\n newParams.set('q', params.search);\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString\n // Note: This method returns the query string without the question mark.\n const result = newParams.toString();\n return result ? '?' + result : '';\n};\n\n/**\n * Helper to select within instance's elements\n */\nBookReader.prototype.$ = function(selector) {\n return this.refs.$br.find(selector);\n};\n\n/**\n * Polyfill for deprecated method\n */\njQuery.curCSS = function(element, prop, val) {\n return jQuery(element).css(prop, val);\n};\n\nwindow.BookReader = BookReader;\n","/**\n * Displays a console on the document for debugging devices where remote\n * debugging is not feasible, and forwards all console.log's to be displayed\n * on screen.\n */\nexport class DebugConsole {\n constructor() {\n /** How many times we've seen the same line in a row */\n this.currentRun = 0;\n }\n\n init() {\n this.$log = $(`<div id=\"_debugLog\" style=\"width: 100%; height: 300px; overflow: auto\" />`);\n $(document.body).prepend(this.$log);\n\n this.$form = $(`\n <form>\n <input style=\"width:100%; font-family: monospace;\" id=\"_debugLogInput\">\n </form>`);\n this.$log.append(this.$form);\n\n this.$form.submit(ev => {\n ev.preventDefault();\n const result = eval(this.$form.find('input').val());\n this.logToScreen([result]);\n });\n\n const _realLog = console.log.bind(console);\n console.log = (...args) => {\n _realLog(...args);\n this.logToScreen(args);\n };\n\n window.onerror = (...args) => this.logToScreen(args);\n }\n\n /**\n * Log the provided array onto the on screen console\n * @param {Array} args\n */\n logToScreen(args) {\n const html = args.map(JSON.stringify).join(',');\n const $lastEntry = this.$log.children('.log-entry:last-child');\n if ($lastEntry.find('.entry-code').html() == html) {\n $lastEntry.find('.count').text(`(${++this.currentRun})`);\n } else {\n this.currentRun = 1;\n this.$log.append($(`\n <div class=\"log-entry\">\n <code class=\"count\"></code> <code class=\"entry-code\">${html}</code>\n </div>`));\n }\n }\n}\n","// @ts-check\n/** @typedef {import('./BookModel.js').PageModel} PageModel */\n/** @typedef {import('./ImageCache.js').ImageCache} ImageCache */\n\n\nexport class PageContainer {\n /**\n * @param {PageModel} page\n * @param {object} opts\n * @param {boolean} opts.isProtected Whether we're in a protected book\n * @param {ImageCache} opts.imageCache\n * @param {string} opts.loadingImage\n */\n constructor(page, {isProtected, imageCache, loadingImage}) {\n this.page = page;\n this.imageCache = imageCache;\n this.loadingImage = loadingImage;\n this.$container = $('<div />', {\n 'class': `BRpagecontainer ${page ? `pagediv${page.index}` : 'BRemptypage'}`,\n css: { position: 'absolute' },\n }).attr('data-side', page?.pageSide);\n\n if (isProtected) {\n this.$container.append($('<div class=\"BRscreen\" />'));\n this.$container.addClass('protected');\n }\n\n /** @type {JQuery<HTMLImageElement>} The main book page image */\n this.$img = null;\n }\n\n /**\n * @param {object} param0\n * @param {{ width: number, height: number, top: number, left: number }} [param0.dimensions]\n * @param {number} param0.reduce\n */\n update({dimensions = null, reduce = null}) {\n if (dimensions) {\n this.$container.css(dimensions);\n }\n\n if (reduce == null || !this.page) {\n return;\n }\n\n const alreadyLoaded = this.imageCache.imageLoaded(this.page.index, reduce);\n const nextBestLoadedReduce = !alreadyLoaded && this.imageCache.getBestLoadedReduce(this.page.index, reduce);\n\n // Add the actual, highres image\n this.$img?.remove();\n this.$img = this.imageCache\n .image(this.page.index, reduce)\n .prependTo(this.$container);\n\n const backgroundLayers = [];\n if (!alreadyLoaded) {\n this.$container.addClass('BRpageloading');\n backgroundLayers.push(`url(\"${this.loadingImage}\") center/20px no-repeat`);\n }\n if (nextBestLoadedReduce) {\n backgroundLayers.push(`url(\"${this.page.getURI(nextBestLoadedReduce, 0)}\") center/100% 100% no-repeat`);\n }\n\n if (!alreadyLoaded) {\n this.$img\n .css('background', backgroundLayers.join(','))\n .one('loadend', async (ev) => {\n $(ev.target).css({ 'background': '' });\n $(ev.target).parent().removeClass('BRpageloading');\n });\n }\n\n return this;\n }\n}\n\n\n/**\n * @param {PageModel} page\n * @param {string} className\n */\nexport function createSVGPageLayer(page, className) {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svg.setAttribute(\"viewBox\", `0 0 ${page.width} ${page.height}`);\n svg.setAttribute('class', `BRPageLayer ${className}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n return svg;\n}\n\n/**\n * @param {{ l: number, r: number, b: number, t: number }} box\n */\nexport function boxToSVGRect({ l: left, r: right, b: bottom, t: top }) {\n const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", left.toString());\n rect.setAttribute(\"y\", top.toString());\n rect.setAttribute(\"width\", (right - left).toString());\n rect.setAttribute(\"height\", (bottom - top).toString());\n return rect;\n}\n\n/**\n * @param {string} layerClass\n * @param {Array<{ l: number, r: number, b: number, t: number }>} boxes\n * @param {PageModel} page\n * @param {HTMLElement} containerEl\n */\nexport function renderBoxesInPageContainerLayer(layerClass, boxes, page, containerEl) {\n const mountedSvg = containerEl.querySelector(`.${layerClass}`);\n // Create the layer if it's not there\n const svg = mountedSvg || createSVGPageLayer(page, layerClass);\n if (!mountedSvg) {\n // Insert after the image if the image is already loaded.\n const imgEl = containerEl.querySelector('.BRpageimage');\n if (imgEl) $(svg).insertAfter(imgEl);\n else $(svg).prependTo(containerEl);\n }\n boxes.forEach(box => svg.appendChild(boxToSVGRect(box)));\n}\n","/**\n * Bind mouse handlers\n * Disable mouse click to avoid selected/highlighted page images\n * @param {JQuery} jObject\n */\nexport function disableSelect(jObject) {\n // $$$ check here for right-click and don't disable. Also use jQuery style\n // for stopping propagation. See https://bugs.edge.launchpad.net/gnubook/+bug/362626\n jObject.bind('mousedown', () => false);\n // Special hack for IE7\n jObject[0].onselectstart = () => false;\n}\n\n/**\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @return {number}\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Given value and maximum, calculate a percentage suitable for CSS\n * @param {number} value\n * @param {number} max\n * @return {string}\n */\nexport function cssPercentage(value, max) {\n return ((value / max) * 100) + '%';\n}\n\n/**\n * @param {*} value\n * @param {Array} array\n * @return {boolean}\n */\nexport function notInArray(value, array) {\n return !array.includes(value);\n}\n\n/**\n * Determines the active element, going into shadow doms.\n * @return {Element}\n */\nexport function getActiveElement(doc = document, recurseShadowDom = true) {\n const activeElement = doc.activeElement;\n if (recurseShadowDom && activeElement?.shadowRoot) {\n return getActiveElement(activeElement.shadowRoot, true);\n }\n return activeElement;\n}\n\n/** Check if an input field/textarea is active. Also checks shadow DOMs. */\nexport function isInputActive(doc = document) {\n const activeEl = getActiveElement(doc);\n return activeEl?.tagName == \"INPUT\" || activeEl?.tagName == \"TEXTAREA\";\n}\n\n/**\n * @param {HTMLIFrameElement} iframe\n * @return {Document}\n */\nexport function getIFrameDocument(iframe) {\n// Adapted from http://xkr.us/articles/dom/iframe-document/\n const outer = iframe.contentWindow || iframe.contentDocument;\n return outer.document || outer;\n}\n\n/**\n * @param {string} str\n * @return {string}\n */\nexport function escapeHTML(str) {\n return str.replace(/&/g,'&')\n .replace(/>/g,'>')\n .replace(/</g,'<')\n .replace(/\"/g,'"');\n}\n\n/**\n * Decodes a URI component and converts '+' to ' '\n * @param {string} value\n * @return {string}\n */\nexport function decodeURIComponentPlus(value) {\n return decodeURIComponent(value).replace(/\\+/g, ' ');\n}\n\n/**\n * Encodes a URI component and converts ' ' to '+'\n * @param {string|number|boolean} value\n * @return {string};\n */\nexport function encodeURIComponentPlus(value) {\n return encodeURIComponent(value).replace(/%20/g, '+');\n}\n\n/**\n * @template {Function} T\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @see https://davidwalsh.name/javascript-debounce-function\n *\n * @param {T} func\n * @param {number} wait\n * @param {boolean} immediate\n * @return {T}\n */\nexport function debounce(func, wait, immediate) {\n let timeout;\n return function() {\n const context = this;\n const args = arguments;\n const later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n}\n\n/**\n * @template T\n * Throttle function\n * @see https://remysharp.com/2010/07/21/throttling-function-calls\n * @param {T} fn\n * @param {number} threshold\n * @param {boolean} delay\n * @return {T}\n */\nexport function throttle(fn, threshold, delay) {\n threshold || (threshold = 250);\n let last;\n let deferTimer;\n if (delay) last = +new Date;\n return function () {\n const context = this;\n const now = +new Date;\n const args = arguments;\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(() => {\n last = now;\n fn.apply(context, args);\n }, threshold);\n } else {\n last = now;\n fn.apply(context, args);\n }\n };\n}\n\n/**\n * FIXME we need a better way to do this :/ This is not automatically poly-filled by\n * core-js https://github.com/zloirock/core-js/issues/354\n * @param {Window} window\n */\nexport function polyfillCustomEvent(window) {\n if (typeof window.CustomEvent === \"function\") return false;\n window.CustomEvent = PolyfilledCustomEvent;\n}\n\n/**\n * https://caniuse.com/customevent has issues on older browsers where it can't be\n * called as a constructor, so we have to use older methods.\n * @param {String} eventName\n * @return {CustomEvent}\n */\nexport function PolyfilledCustomEvent(eventName, {bubbles = false, cancelable = false, detail = null} = {}) {\n const event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, bubbles, cancelable, detail);\n return event;\n}\n\n/*\n * Returns the number pixels something should be rendered at to be ~1n on the users\n * screen when measured with a ruler.\n */\nexport function calcScreenDPI() {\n const el = document.createElement('div');\n el.style.width = '1in';\n document.body.appendChild(el);\n const dpi = el.offsetWidth;\n document.body.removeChild(el);\n\n // Do you believe in magic... numbers? We tested on some devices, and the displayed\n // size of `width: 1in` was less than desired. On @pezvi's mac, it was ~75% ; on\n // @cdrini's laptop it was ~85%. Since we want to avoid things appearing too small,\n // let's just use a multiplier of 1.25\n const screenDPI = dpi * 1.25;\n // This will return 0 in testing; never want it to be 0!\n return screenDPI == 0 ? 100 : screenDPI;\n}\n\n/**\n * @param {number[]} nums\n * @returns {number}\n */\nexport function sum(nums) {\n return nums.reduce((cur, acc) => cur + acc, 0);\n}\n\n/**\n * @template T\n * @param {Generator<T>} gen\n * @returns {T[]}\n */\nexport function genToArray(gen) {\n const result = [];\n for (const item of gen) {\n result.push(item);\n }\n return result;\n}\n\n/**\n * Check if arrays contain the same elements. Does reference comparison.\n * @param {Array} arr1\n * @param {Array} arr2\n */\nexport function arrEquals(arr1, arr2) {\n return arr1.length == arr2.length && arr1.every((x, i) => x == arr2[i]);\n}\n\n/**\n * Check if array has changed; namely to be used with lit's property.hasChanged\n * @param {Array} [arr1]\n * @param {Array} [arr2]\n */\nexport function arrChanged(arr1, arr2) {\n return arr1 && arr2 && !arrEquals(arr1, arr2);\n}\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","// TODO: use something more complex like timsort?\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n mergeSort(array.slice(0, middle), comparefn),\n mergeSort(array.slice(middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n var result = [];\n\n while (lindex < llength || rindex < rlength) {\n if (lindex < llength && rindex < rlength) {\n result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);\n } else {\n result.push(lindex < llength ? left[lindex++] : right[rindex++]);\n }\n } return result;\n};\n\nmodule.exports = mergeSort;\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n anObject(this);\n if (hint === 'string' || hint === 'default') hint = 'string';\n else if (hint !== 'number') throw TypeError('Incorrect hint');\n return ordinaryToPrimitive(this, hint);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","module.exports = typeof window == 'object';\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var $ = require('../internals/export');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = [].splice;\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice.call(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return typeof $Symbol == 'function' && Object(it) instanceof $Symbol;\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\n// eslint-disable-next-line es/no-math-sign -- safe\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (pref !== 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeExec = RegExp.prototype.exec;\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = patchedExec.call(raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = str.slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str.charAt(re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (key, value) {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.16.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.codePointAt` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var argumentsLength = arguments.length;\n var i = 1;\n while (argumentsLength > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = input[TO_PRIMITIVE];\n var result;\n if (exoticToPrim !== undefined) {\n if (pref === undefined) pref = 'default';\n result = exoticToPrim.call(input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : String(key);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var isSymbol = require('../internals/is-symbol');\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar aFunction = require('../internals/a-function');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A;\n aFunction(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aFunction(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);\n\n var items = [];\n var arrayLength = toLength(array.length);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) items.push(array[index]);\n }\n\n items = internalSort(items, getSortCompare(comparefn));\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar dateToPrimitive = require('../internals/date-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!(TO_PRIMITIVE in DatePrototype)) {\n createNonEnumerableProperty(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","var $ = require('../internals/export');\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\n// `Math.log2` method\n// https://tc39.es/ecma262/#sec-math.log2\n$({ target: 'Math', stat: true }, {\n log2: function log2(x) {\n return log(x) / LN2;\n }\n});\n","var $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\n// `Math.sign` method\n// https://tc39.es/ecma262/#sec-math.sign\n$({ target: 'Math', stat: true }, {\n sign: sign\n});\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a number');\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromiseConstructorPrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructorPrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromiseConstructorPrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructorPrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function' && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromiseConstructorPrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar has = require('../internals/has');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')\n ? descriptor.value\n : descriptor.get === undefined\n ? undefined\n : descriptor.get.call(receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~toString(requireObjectCoercible(this))\n .indexOf(toString(notARegExp(searchString)), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue === 'string' &&\n replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&\n replaceValue.indexOf('$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = toString(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeSearch, rx, S);\n\n if (res.done) return res.value;\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar nativeFetch = getBuiltIn('fetch');\nvar NativeRequest = getBuiltIn('Request');\nvar RequestPrototype = NativeRequest && NativeRequest.prototype;\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: $toString(init[key]) });\n } else {\n parseSearchParams(\n entries,\n typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : $toString(init)\n );\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && typeof Headers == 'function') {\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (typeof nativeFetch == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (typeof NativeRequest == 'function') {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestConstructor, 'Request');\n return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, forced: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = $toString(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, $toString(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = $toString(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, $toString(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom($toString(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom($toString(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, $toString(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, $toString(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = $toString(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, $toString(pathname), PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = $toString(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = $toString(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/*!\n\tColorbox 1.6.4\n\tlicense: MIT\n\thttp://www.jacklmoore.com/colorbox\n*/\n(function ($, document, window) {\n\tvar\n\t// Default settings object.\n\t// See http://jacklmoore.com/colorbox for details.\n\tdefaults = {\n\t\t// data sources\n\t\thtml: false,\n\t\tphoto: false,\n\t\tiframe: false,\n\t\tinline: false,\n\n\t\t// behavior and appearance\n\t\ttransition: \"elastic\",\n\t\tspeed: 300,\n\t\tfadeOut: 300,\n\t\twidth: false,\n\t\tinitialWidth: \"600\",\n\t\tinnerWidth: false,\n\t\tmaxWidth: false,\n\t\theight: false,\n\t\tinitialHeight: \"450\",\n\t\tinnerHeight: false,\n\t\tmaxHeight: false,\n\t\tscalePhotos: true,\n\t\tscrolling: true,\n\t\topacity: 0.9,\n\t\tpreloading: true,\n\t\tclassName: false,\n\t\toverlayClose: true,\n\t\tescKey: true,\n\t\tarrowKey: true,\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t\tfixed: false,\n\t\tdata: undefined,\n\t\tcloseButton: true,\n\t\tfastIframe: true,\n\t\topen: false,\n\t\treposition: true,\n\t\tloop: true,\n\t\tslideshow: false,\n\t\tslideshowAuto: true,\n\t\tslideshowSpeed: 2500,\n\t\tslideshowStart: \"start slideshow\",\n\t\tslideshowStop: \"stop slideshow\",\n\t\tphotoRegex: /\\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\\?).*)?$/i,\n\n\t\t// alternate image paths for high-res displays\n\t\tretinaImage: false,\n\t\tretinaUrl: false,\n\t\tretinaSuffix: '@2x.$1',\n\n\t\t// internationalization\n\t\tcurrent: \"image {current} of {total}\",\n\t\tprevious: \"previous\",\n\t\tnext: \"next\",\n\t\tclose: \"close\",\n\t\txhrError: \"This content failed to load.\",\n\t\timgError: \"This image failed to load.\",\n\n\t\t// accessbility\n\t\treturnFocus: true,\n\t\ttrapFocus: true,\n\n\t\t// callbacks\n\t\tonOpen: false,\n\t\tonLoad: false,\n\t\tonComplete: false,\n\t\tonCleanup: false,\n\t\tonClosed: false,\n\n\t\trel: function() {\n\t\t\treturn this.rel;\n\t\t},\n\t\thref: function() {\n\t\t\t// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')\n\t\t\treturn $(this).attr('href');\n\t\t},\n\t\ttitle: function() {\n\t\t\treturn this.title;\n\t\t},\n\t\tcreateImg: function() {\n\t\t\tvar img = new Image();\n\t\t\tvar attrs = $(this).data('cbox-img-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\timg[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn img;\n\t\t},\n\t\tcreateIframe: function() {\n\t\t\tvar iframe = document.createElement('iframe');\n\t\t\tvar attrs = $(this).data('cbox-iframe-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\tiframe[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ('frameBorder' in iframe) {\n\t\t\t\tiframe.frameBorder = 0;\n\t\t\t}\n\t\t\tif ('allowTransparency' in iframe) {\n\t\t\t\tiframe.allowTransparency = \"true\";\n\t\t\t}\n\t\t\tiframe.name = (new Date()).getTime(); // give the iframe a unique name to prevent caching\n\t\t\tiframe.allowFullscreen = true;\n\n\t\t\treturn iframe;\n\t\t}\n\t},\n\n\t// Abstracting the HTML and event identifiers for easy rebranding\n\tcolorbox = 'colorbox',\n\tprefix = 'cbox',\n\tboxElement = prefix + 'Element',\n\n\t// Events\n\tevent_open = prefix + '_open',\n\tevent_load = prefix + '_load',\n\tevent_complete = prefix + '_complete',\n\tevent_cleanup = prefix + '_cleanup',\n\tevent_closed = prefix + '_closed',\n\tevent_purge = prefix + '_purge',\n\n\t// Cached jQuery Object Variables\n\t$overlay,\n\t$box,\n\t$wrap,\n\t$content,\n\t$topBorder,\n\t$leftBorder,\n\t$rightBorder,\n\t$bottomBorder,\n\t$related,\n\t$window,\n\t$loaded,\n\t$loadingBay,\n\t$loadingOverlay,\n\t$title,\n\t$current,\n\t$slideshow,\n\t$next,\n\t$prev,\n\t$close,\n\t$groupControls,\n\t$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2\n\n\t// Variables for cached values or use across multiple functions\n\tsettings,\n\tinterfaceHeight,\n\tinterfaceWidth,\n\tloadedHeight,\n\tloadedWidth,\n\tindex,\n\tphoto,\n\topen,\n\tactive,\n\tclosing,\n\tloadingTimer,\n\tpublicMethod,\n\tdiv = \"div\",\n\trequests = 0,\n\tpreviousCSS = {},\n\tinit;\n\n\t// ****************\n\t// HELPER FUNCTIONS\n\t// ****************\n\n\t// Convenience function for creating new jQuery objects\n\tfunction $tag(tag, id, css) {\n\t\tvar element = document.createElement(tag);\n\n\t\tif (id) {\n\t\t\telement.id = prefix + id;\n\t\t}\n\n\t\tif (css) {\n\t\t\telement.style.cssText = css;\n\t\t}\n\n\t\treturn $(element);\n\t}\n\n\t// Get the window height using innerHeight when available to avoid an issue with iOS\n\t// http://bugs.jquery.com/ticket/6724\n\tfunction winheight() {\n\t\treturn window.innerHeight ? window.innerHeight : $(window).height();\n\t}\n\n\tfunction Settings(element, options) {\n\t\tif (options !== Object(options)) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.cache = {};\n\t\tthis.el = element;\n\n\t\tthis.value = function(key) {\n\t\t\tvar dataAttr;\n\n\t\t\tif (this.cache[key] === undefined) {\n\t\t\t\tdataAttr = $(this.el).attr('data-cbox-'+key);\n\n\t\t\t\tif (dataAttr !== undefined) {\n\t\t\t\t\tthis.cache[key] = dataAttr;\n\t\t\t\t} else if (options[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = options[key];\n\t\t\t\t} else if (defaults[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.cache[key];\n\t\t};\n\n\t\tthis.get = function(key) {\n\t\t\tvar value = this.value(key);\n\t\t\treturn $.isFunction(value) ? value.call(this.el, this) : value;\n\t\t};\n\t}\n\n\t// Determine the next and previous members in a group.\n\tfunction getIndex(increment) {\n\t\tvar\n\t\tmax = $related.length,\n\t\tnewIndex = (index + increment) % max;\n\n\t\treturn (newIndex < 0) ? max + newIndex : newIndex;\n\t}\n\n\t// Convert '%' and 'px' values to integers\n\tfunction setSize(size, dimension) {\n\t\treturn Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));\n\t}\n\n\t// Checks an href to see if it is a photo.\n\t// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.\n\tfunction isImage(settings, url) {\n\t\treturn settings.get('photo') || settings.get('photoRegex').test(url);\n\t}\n\n\tfunction retinaUrl(settings, url) {\n\t\treturn settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;\n\t}\n\n\tfunction trapFocus(e) {\n\t\tif ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {\n\t\t\te.stopPropagation();\n\t\t\t$box.focus();\n\t\t}\n\t}\n\n\tfunction setClass(str) {\n\t\tif (setClass.str !== str) {\n\t\t\t$box.add($overlay).removeClass(setClass.str).addClass(str);\n\t\t\tsetClass.str = str;\n\t\t}\n\t}\n\n\tfunction getRelated(rel) {\n\t\tindex = 0;\n\n\t\tif (rel && rel !== false && rel !== 'nofollow') {\n\t\t\t$related = $('.' + boxElement).filter(function () {\n\t\t\t\tvar options = $.data(this, colorbox);\n\t\t\t\tvar settings = new Settings(this, options);\n\t\t\t\treturn (settings.get('rel') === rel);\n\t\t\t});\n\t\t\tindex = $related.index(settings.el);\n\n\t\t\t// Check direct calls to Colorbox.\n\t\t\tif (index === -1) {\n\t\t\t\t$related = $related.add(settings.el);\n\t\t\t\tindex = $related.length - 1;\n\t\t\t}\n\t\t} else {\n\t\t\t$related = $(settings.el);\n\t\t}\n\t}\n\n\tfunction trigger(event) {\n\t\t// for external use\n\t\t$(document).trigger(event);\n\t\t// for internal use\n\t\t$events.triggerHandler(event);\n\t}\n\n\tvar slideshow = (function(){\n\t\tvar active,\n\t\t\tclassName = prefix + \"Slideshow_\",\n\t\t\tclick = \"click.\" + prefix,\n\t\t\ttimeOut;\n\n\t\tfunction clear () {\n\t\t\tclearTimeout(timeOut);\n\t\t}\n\n\t\tfunction set() {\n\t\t\tif (settings.get('loop') || $related[index + 1]) {\n\t\t\t\tclear();\n\t\t\t\ttimeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));\n\t\t\t}\n\t\t}\n\n\t\tfunction start() {\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStop'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, stop);\n\n\t\t\t$events\n\t\t\t\t.bind(event_complete, set)\n\t\t\t\t.bind(event_load, clear);\n\n\t\t\t$box.removeClass(className + \"off\").addClass(className + \"on\");\n\t\t}\n\n\t\tfunction stop() {\n\t\t\tclear();\n\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStart'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\tstart();\n\t\t\t\t});\n\n\t\t\t$box.removeClass(className + \"on\").addClass(className + \"off\");\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tactive = false;\n\t\t\t$slideshow.hide();\n\t\t\tclear();\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\t\t\t$box.removeClass(className + \"off \" + className + \"on\");\n\t\t}\n\n\t\treturn function(){\n\t\t\tif (active) {\n\t\t\t\tif (!settings.get('slideshow')) {\n\t\t\t\t\t$events.unbind(event_cleanup, reset);\n\t\t\t\t\treset();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (settings.get('slideshow') && $related[1]) {\n\t\t\t\t\tactive = true;\n\t\t\t\t\t$events.one(event_cleanup, reset);\n\t\t\t\t\tif (settings.get('slideshowAuto')) {\n\t\t\t\t\t\tstart();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstop();\n\t\t\t\t\t}\n\t\t\t\t\t$slideshow.show();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t}());\n\n\n\tfunction launch(element) {\n\t\tvar options;\n\n\t\tif (!closing) {\n\n\t\t\toptions = $(element).data(colorbox);\n\n\t\t\tsettings = new Settings(element, options);\n\n\t\t\tgetRelated(settings.get('rel'));\n\n\t\t\tif (!open) {\n\t\t\t\topen = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.\n\n\t\t\t\tsetClass(settings.get('className'));\n\n\t\t\t\t// Show colorbox so the sizes can be calculated in older versions of jQuery\n\t\t\t\t$box.css({visibility:'hidden', display:'block', opacity:''});\n\n\t\t\t\t$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');\n\t\t\t\t$content.css({width:'', height:''}).append($loaded);\n\n\t\t\t\t// Cache values needed for size calculations\n\t\t\t\tinterfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();\n\t\t\t\tinterfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();\n\t\t\t\tloadedHeight = $loaded.outerHeight(true);\n\t\t\t\tloadedWidth = $loaded.outerWidth(true);\n\n\t\t\t\t// Opens inital empty Colorbox prior to content being loaded.\n\t\t\t\tvar initialWidth = setSize(settings.get('initialWidth'), 'x');\n\t\t\t\tvar initialHeight = setSize(settings.get('initialHeight'), 'y');\n\t\t\t\tvar maxWidth = settings.get('maxWidth');\n\t\t\t\tvar maxHeight = settings.get('maxHeight');\n\n\t\t\t\tsettings.w = Math.max((maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth, 0);\n\t\t\t\tsettings.h = Math.max((maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight, 0);\n\n\t\t\t\t$loaded.css({width:'', height:settings.h});\n\t\t\t\tpublicMethod.position();\n\n\t\t\t\ttrigger(event_open);\n\t\t\t\tsettings.get('onOpen');\n\n\t\t\t\t$groupControls.add($title).hide();\n\n\t\t\t\t$box.focus();\n\n\t\t\t\tif (settings.get('trapFocus')) {\n\t\t\t\t\t// Confine focus to the modal\n\t\t\t\t\t// Uses event capturing that is not supported in IE8-\n\t\t\t\t\tif (document.addEventListener) {\n\n\t\t\t\t\t\tdocument.addEventListener('focus', trapFocus, true);\n\n\t\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t\tdocument.removeEventListener('focus', trapFocus, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Return focus on closing\n\t\t\t\tif (settings.get('returnFocus')) {\n\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t$(settings.el).focus();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar opacity = parseFloat(settings.get('opacity'));\n\t\t\t$overlay.css({\n\t\t\t\topacity: opacity === opacity ? opacity : '',\n\t\t\t\tcursor: settings.get('overlayClose') ? 'pointer' : '',\n\t\t\t\tvisibility: 'visible'\n\t\t\t}).show();\n\n\t\t\tif (settings.get('closeButton')) {\n\t\t\t\t$close.html(settings.get('close')).appendTo($content);\n\t\t\t} else {\n\t\t\t\t$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4\n\t\t\t}\n\n\t\t\tload();\n\t\t}\n\t}\n\n\t// Colorbox's markup needs to be added to the DOM prior to being called\n\t// so that the browser will go ahead and load the CSS background images.\n\tfunction appendHTML() {\n\t\tif (!$box) {\n\t\t\tinit = false;\n\t\t\t$window = $(window);\n\t\t\t$box = $tag(div).attr({\n\t\t\t\tid: colorbox,\n\t\t\t\t'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.\n\t\t\t\trole: 'dialog',\n\t\t\t\ttabindex: '-1'\n\t\t\t}).hide();\n\t\t\t$overlay = $tag(div, \"Overlay\").hide();\n\t\t\t$loadingOverlay = $([$tag(div, \"LoadingOverlay\")[0],$tag(div, \"LoadingGraphic\")[0]]);\n\t\t\t$wrap = $tag(div, \"Wrapper\");\n\t\t\t$content = $tag(div, \"Content\").append(\n\t\t\t\t$title = $tag(div, \"Title\"),\n\t\t\t\t$current = $tag(div, \"Current\"),\n\t\t\t\t$prev = $('<button type=\"button\"/>').attr({id:prefix+'Previous'}),\n\t\t\t\t$next = $('<button type=\"button\"/>').attr({id:prefix+'Next'}),\n\t\t\t\t$slideshow = $('<button type=\"button\"/>').attr({id:prefix+'Slideshow'}),\n\t\t\t\t$loadingOverlay\n\t\t\t);\n\n\t\t\t$close = $('<button type=\"button\"/>').attr({id:prefix+'Close'});\n\n\t\t\t$wrap.append( // The 3x3 Grid that makes up Colorbox\n\t\t\t\t$tag(div).append(\n\t\t\t\t\t$tag(div, \"TopLeft\"),\n\t\t\t\t\t$topBorder = $tag(div, \"TopCenter\"),\n\t\t\t\t\t$tag(div, \"TopRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$leftBorder = $tag(div, \"MiddleLeft\"),\n\t\t\t\t\t$content,\n\t\t\t\t\t$rightBorder = $tag(div, \"MiddleRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$tag(div, \"BottomLeft\"),\n\t\t\t\t\t$bottomBorder = $tag(div, \"BottomCenter\"),\n\t\t\t\t\t$tag(div, \"BottomRight\")\n\t\t\t\t)\n\t\t\t).find('div div').css({'float': 'left'});\n\n\t\t\t$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');\n\n\t\t\t$groupControls = $next.add($prev).add($current).add($slideshow);\n\t\t}\n\t\tif (document.body && !$box.parent().length) {\n\t\t\t$(document.body).append($overlay, $box.append($wrap, $loadingBay));\n\t\t}\n\t}\n\n\t// Add Colorbox's event bindings\n\tfunction addBindings() {\n\t\tfunction clickHandler(e) {\n\t\t\t// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.\n\t\t\t// See: http://jacklmoore.com/notes/click-events/\n\t\t\tif (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlaunch(this);\n\t\t\t}\n\t\t}\n\n\t\tif ($box) {\n\t\t\tif (!init) {\n\t\t\t\tinit = true;\n\n\t\t\t\t// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.\n\t\t\t\t$next.click(function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t});\n\t\t\t\t$prev.click(function () {\n\t\t\t\t\tpublicMethod.prev();\n\t\t\t\t});\n\t\t\t\t$close.click(function () {\n\t\t\t\t\tpublicMethod.close();\n\t\t\t\t});\n\t\t\t\t$overlay.click(function () {\n\t\t\t\t\tif (settings.get('overlayClose')) {\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Key Bindings\n\t\t\t\t$(document).bind('keydown.' + prefix, function (e) {\n\t\t\t\t\tvar key = e.keyCode;\n\t\t\t\t\tif (open && settings.get('escKey') && key === 27) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t\tif (open && settings.get('arrowKey') && $related[1] && !e.altKey) {\n\t\t\t\t\t\tif (key === 37) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$prev.click();\n\t\t\t\t\t\t} else if (key === 39) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$next.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ($.isFunction($.fn.on)) {\n\t\t\t\t\t// For jQuery 1.7+\n\t\t\t\t\t$(document).on('click.'+prefix, '.'+boxElement, clickHandler);\n\t\t\t\t} else {\n\t\t\t\t\t// For jQuery 1.3.x -> 1.6.x\n\t\t\t\t\t// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.\n\t\t\t\t\t// This is not here for jQuery 1.9, it's here for legacy users.\n\t\t\t\t\t$('.'+boxElement).live('click.'+prefix, clickHandler);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// Don't do anything if Colorbox already exists.\n\tif ($[colorbox]) {\n\t\treturn;\n\t}\n\n\t// Append the HTML when the DOM loads\n\t$(appendHTML);\n\n\n\t// ****************\n\t// PUBLIC FUNCTIONS\n\t// Usage format: $.colorbox.close();\n\t// Usage from within an iframe: parent.jQuery.colorbox.close();\n\t// ****************\n\n\tpublicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {\n\t\tvar settings;\n\t\tvar $obj = this;\n\n\t\toptions = options || {};\n\n\t\tif ($.isFunction($obj)) { // assume a call to $.colorbox\n\t\t\t$obj = $('<a/>');\n\t\t\toptions.open = true;\n\t\t}\n\n\t\tif (!$obj[0]) { // colorbox being applied to empty collection\n\t\t\treturn $obj;\n\t\t}\n\n\t\tappendHTML();\n\n\t\tif (addBindings()) {\n\n\t\t\tif (callback) {\n\t\t\t\toptions.onComplete = callback;\n\t\t\t}\n\n\t\t\t$obj.each(function () {\n\t\t\t\tvar old = $.data(this, colorbox) || {};\n\t\t\t\t$.data(this, colorbox, $.extend(old, options));\n\t\t\t}).addClass(boxElement);\n\n\t\t\tsettings = new Settings($obj[0], options);\n\n\t\t\tif (settings.get('open')) {\n\t\t\t\tlaunch($obj[0]);\n\t\t\t}\n\t\t}\n\n\t\treturn $obj;\n\t};\n\n\tpublicMethod.position = function (speed, loadedCallback) {\n\t\tvar\n\t\tcss,\n\t\ttop = 0,\n\t\tleft = 0,\n\t\toffset = $box.offset(),\n\t\tscrollTop,\n\t\tscrollLeft;\n\n\t\t$window.unbind('resize.' + prefix);\n\n\t\t// remove the modal so that it doesn't influence the document width/height\n\t\t$box.css({top: -9e4, left: -9e4});\n\n\t\tscrollTop = $window.scrollTop();\n\t\tscrollLeft = $window.scrollLeft();\n\n\t\tif (settings.get('fixed')) {\n\t\t\toffset.top -= scrollTop;\n\t\t\toffset.left -= scrollLeft;\n\t\t\t$box.css({position: 'fixed'});\n\t\t} else {\n\t\t\ttop = scrollTop;\n\t\t\tleft = scrollLeft;\n\t\t\t$box.css({position: 'absolute'});\n\t\t}\n\n\t\t// keeps the top and left positions within the browser's viewport.\n\t\tif (settings.get('right') !== false) {\n\t\t\tleft += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);\n\t\t} else if (settings.get('left') !== false) {\n\t\t\tleft += setSize(settings.get('left'), 'x');\n\t\t} else {\n\t\t\tleft += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);\n\t\t}\n\n\t\tif (settings.get('bottom') !== false) {\n\t\t\ttop += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);\n\t\t} else if (settings.get('top') !== false) {\n\t\t\ttop += setSize(settings.get('top'), 'y');\n\t\t} else {\n\t\t\ttop += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);\n\t\t}\n\n\t\t$box.css({top: offset.top, left: offset.left, visibility:'visible'});\n\n\t\t// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,\n\t\t// but it has to be shrank down around the size of div#colorbox when it's done. If not,\n\t\t// it can invoke an obscure IE bug when using iframes.\n\t\t$wrap[0].style.width = $wrap[0].style.height = \"9999px\";\n\n\t\tfunction modalDimensions() {\n\t\t\t$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';\n\t\t\t$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';\n\t\t}\n\n\t\tcss = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};\n\n\t\t// setting the speed to 0 if the content hasn't changed size or position\n\t\tif (speed) {\n\t\t\tvar tempSpeed = 0;\n\t\t\t$.each(css, function(i){\n\t\t\t\tif (css[i] !== previousCSS[i]) {\n\t\t\t\t\ttempSpeed = speed;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t\tspeed = tempSpeed;\n\t\t}\n\n\t\tpreviousCSS = css;\n\n\t\tif (!speed) {\n\t\t\t$box.css(css);\n\t\t}\n\n\t\t$box.dequeue().animate(css, {\n\t\t\tduration: speed || 0,\n\t\t\tcomplete: function () {\n\t\t\t\tmodalDimensions();\n\n\t\t\t\tactive = false;\n\n\t\t\t\t// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.\n\t\t\t\t$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + \"px\";\n\t\t\t\t$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + \"px\";\n\n\t\t\t\tif (settings.get('reposition')) {\n\t\t\t\t\tsetTimeout(function () { // small delay before binding onresize due to an IE8 bug.\n\t\t\t\t\t\t$window.bind('resize.' + prefix, publicMethod.position);\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\n\t\t\t\tif ($.isFunction(loadedCallback)) {\n\t\t\t\t\tloadedCallback();\n\t\t\t\t}\n\t\t\t},\n\t\t\tstep: modalDimensions\n\t\t});\n\t};\n\n\tpublicMethod.resize = function (options) {\n\t\tvar scrolltop;\n\n\t\tif (open) {\n\t\t\toptions = options || {};\n\n\t\t\tif (options.width) {\n\t\t\t\tsettings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;\n\t\t\t}\n\n\t\t\tif (options.innerWidth) {\n\t\t\t\tsettings.w = setSize(options.innerWidth, 'x');\n\t\t\t}\n\n\t\t\t$loaded.css({width: settings.w});\n\n\t\t\tif (options.height) {\n\t\t\t\tsettings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;\n\t\t\t}\n\n\t\t\tif (options.innerHeight) {\n\t\t\t\tsettings.h = setSize(options.innerHeight, 'y');\n\t\t\t}\n\n\t\t\tif (!options.innerHeight && !options.height) {\n\t\t\t\tscrolltop = $loaded.scrollTop();\n\t\t\t\t$loaded.css({height: \"auto\"});\n\t\t\t\tsettings.h = $loaded.height();\n\t\t\t}\n\n\t\t\t$loaded.css({height: settings.h});\n\n\t\t\tif(scrolltop) {\n\t\t\t\t$loaded.scrollTop(scrolltop);\n\t\t\t}\n\n\t\t\tpublicMethod.position(settings.get('transition') === \"none\" ? 0 : settings.get('speed'));\n\t\t}\n\t};\n\n\tpublicMethod.prep = function (object) {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar callback, speed = settings.get('transition') === \"none\" ? 0 : settings.get('speed');\n\n\t\t$loaded.remove();\n\n\t\t$loaded = $tag(div, 'LoadedContent').append(object);\n\n\t\tfunction getWidth() {\n\t\t\tsettings.w = settings.w || $loaded.width();\n\t\t\tsettings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;\n\t\t\treturn settings.w;\n\t\t}\n\t\tfunction getHeight() {\n\t\t\tsettings.h = settings.h || $loaded.height();\n\t\t\tsettings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;\n\t\t\treturn settings.h;\n\t\t}\n\n\t\t$loaded.hide()\n\t\t.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.\n\t\t.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})\n\t\t.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.\n\t\t.prependTo($content);\n\n\t\t$loadingBay.hide();\n\n\t\t// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.\n\n\t\t$(photo).css({'float': 'none'});\n\n\t\tsetClass(settings.get('className'));\n\n\t\tcallback = function () {\n\t\t\tvar total = $related.length,\n\t\t\t\tiframe,\n\t\t\t\tcomplete;\n\n\t\t\tif (!open) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2\n\t\t\t\tif ($.support.opacity === false) {\n\t\t\t\t\t$box[0].style.removeAttribute('filter');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomplete = function () {\n\t\t\t\tclearTimeout(loadingTimer);\n\t\t\t\t$loadingOverlay.hide();\n\t\t\t\ttrigger(event_complete);\n\t\t\t\tsettings.get('onComplete');\n\t\t\t};\n\n\n\t\t\t$title.html(settings.get('title')).show();\n\t\t\t$loaded.show();\n\n\t\t\tif (total > 1) { // handle grouping\n\t\t\t\tif (typeof settings.get('current') === \"string\") {\n\t\t\t\t\t$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();\n\t\t\t\t}\n\n\t\t\t\t$next[(settings.get('loop') || index < total - 1) ? \"show\" : \"hide\"]().html(settings.get('next'));\n\t\t\t\t$prev[(settings.get('loop') || index) ? \"show\" : \"hide\"]().html(settings.get('previous'));\n\n\t\t\t\tslideshow();\n\n\t\t\t\t// Preloads images within a rel group\n\t\t\t\tif (settings.get('preloading')) {\n\t\t\t\t\t$.each([getIndex(-1), getIndex(1)], function(){\n\t\t\t\t\t\tvar img,\n\t\t\t\t\t\t\ti = $related[this],\n\t\t\t\t\t\t\tsettings = new Settings(i, $.data(i, colorbox)),\n\t\t\t\t\t\t\tsrc = settings.get('href');\n\n\t\t\t\t\t\tif (src && isImage(settings, src)) {\n\t\t\t\t\t\t\tsrc = retinaUrl(settings, src);\n\t\t\t\t\t\t\timg = document.createElement('img');\n\t\t\t\t\t\t\timg.src = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$groupControls.hide();\n\t\t\t}\n\n\t\t\tif (settings.get('iframe')) {\n\n\t\t\t\tiframe = settings.get('createIframe');\n\n\t\t\t\tif (!settings.get('scrolling')) {\n\t\t\t\t\tiframe.scrolling = \"no\";\n\t\t\t\t}\n\n\t\t\t\t$(iframe)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tsrc: settings.get('href'),\n\t\t\t\t\t\t'class': prefix + 'Iframe'\n\t\t\t\t\t})\n\t\t\t\t\t.one('load', complete)\n\t\t\t\t\t.appendTo($loaded);\n\n\t\t\t\t$events.one(event_purge, function () {\n\t\t\t\t\tiframe.src = \"//about:blank\";\n\t\t\t\t});\n\n\t\t\t\tif (settings.get('fastIframe')) {\n\t\t\t\t\t$(iframe).trigger('load');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcomplete();\n\t\t\t}\n\n\t\t\tif (settings.get('transition') === 'fade') {\n\t\t\t\t$box.fadeTo(speed, 1, removeFilter);\n\t\t\t} else {\n\t\t\t\tremoveFilter();\n\t\t\t}\n\t\t};\n\n\t\tif (settings.get('transition') === 'fade') {\n\t\t\t$box.fadeTo(speed, 0, function () {\n\t\t\t\tpublicMethod.position(0, callback);\n\t\t\t});\n\t\t} else {\n\t\t\tpublicMethod.position(speed, callback);\n\t\t}\n\t};\n\n\tfunction load () {\n\t\tvar href, setResize, prep = publicMethod.prep, $inline, request = ++requests;\n\n\t\tactive = true;\n\n\t\tphoto = false;\n\n\t\ttrigger(event_purge);\n\t\ttrigger(event_load);\n\t\tsettings.get('onLoad');\n\n\t\tsettings.h = settings.get('height') ?\n\t\t\t\tsetSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :\n\t\t\t\tsettings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');\n\n\t\tsettings.w = settings.get('width') ?\n\t\t\t\tsetSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :\n\t\t\t\tsettings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');\n\n\t\t// Sets the minimum dimensions for use in image scaling\n\t\tsettings.mw = settings.w;\n\t\tsettings.mh = settings.h;\n\n\t\t// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.\n\t\t// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.\n\t\tif (settings.get('maxWidth')) {\n\t\t\tsettings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;\n\t\t\tsettings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;\n\t\t}\n\t\tif (settings.get('maxHeight')) {\n\t\t\tsettings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;\n\t\t\tsettings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;\n\t\t}\n\n\t\thref = settings.get('href');\n\n\t\tloadingTimer = setTimeout(function () {\n\t\t\t$loadingOverlay.show();\n\t\t}, 100);\n\n\t\tif (settings.get('inline')) {\n\t\t\tvar $target = $(href).eq(0);\n\t\t\t// Inserts an empty placeholder where inline content is being pulled from.\n\t\t\t// An event is bound to put inline content back when Colorbox closes or loads new content.\n\t\t\t$inline = $('<div>').hide().insertBefore($target);\n\n\t\t\t$events.one(event_purge, function () {\n\t\t\t\t$inline.replaceWith($target);\n\t\t\t});\n\n\t\t\tprep($target);\n\t\t} else if (settings.get('iframe')) {\n\t\t\t// IFrame element won't be added to the DOM until it is ready to be displayed,\n\t\t\t// to avoid problems with DOM-ready JS that might be trying to run in that iframe.\n\t\t\tprep(\" \");\n\t\t} else if (settings.get('html')) {\n\t\t\tprep(settings.get('html'));\n\t\t} else if (isImage(settings, href)) {\n\n\t\t\thref = retinaUrl(settings, href);\n\n\t\t\tphoto = settings.get('createImg');\n\n\t\t\t$(photo)\n\t\t\t.addClass(prefix + 'Photo')\n\t\t\t.bind('error.'+prefix,function () {\n\t\t\t\tprep($tag(div, 'Error').html(settings.get('imgError')));\n\t\t\t})\n\t\t\t.one('load', function () {\n\t\t\t\tif (request !== requests) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// A small pause because some browsers will occassionaly report a\n\t\t\t\t// img.width and img.height of zero immediately after the img.onload fires\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tvar percent;\n\n\t\t\t\t\tif (settings.get('retinaImage') && window.devicePixelRatio > 1) {\n\t\t\t\t\t\tphoto.height = photo.height / window.devicePixelRatio;\n\t\t\t\t\t\tphoto.width = photo.width / window.devicePixelRatio;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.get('scalePhotos')) {\n\t\t\t\t\t\tsetResize = function () {\n\t\t\t\t\t\t\tphoto.height -= photo.height * percent;\n\t\t\t\t\t\t\tphoto.width -= photo.width * percent;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (settings.mw && photo.width > settings.mw) {\n\t\t\t\t\t\t\tpercent = (photo.width - settings.mw) / photo.width;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (settings.mh && photo.height > settings.mh) {\n\t\t\t\t\t\t\tpercent = (photo.height - settings.mh) / photo.height;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.h) {\n\t\t\t\t\t\tphoto.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\t\t\t\tphoto.style.cursor = 'pointer';\n\n\t\t\t\t\t\t$(photo).bind('click.'+prefix, function () {\n\t\t\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tphoto.style.width = photo.width + 'px';\n\t\t\t\t\tphoto.style.height = photo.height + 'px';\n\t\t\t\t\tprep(photo);\n\t\t\t\t}, 1);\n\t\t\t});\n\n\t\t\tphoto.src = href;\n\n\t\t} else if (href) {\n\t\t\t$loadingBay.load(href, settings.get('data'), function (data, status) {\n\t\t\t\tif (request === requests) {\n\t\t\t\t\tprep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// Navigates to the next page/image in a set.\n\tpublicMethod.next = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\tindex = getIndex(1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\tpublicMethod.prev = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || index)) {\n\t\t\tindex = getIndex(-1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\t// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();\n\tpublicMethod.close = function () {\n\t\tif (open && !closing) {\n\n\t\t\tclosing = true;\n\t\t\topen = false;\n\t\t\ttrigger(event_cleanup);\n\t\t\tsettings.get('onCleanup');\n\t\t\t$window.unbind('.' + prefix);\n\t\t\t$overlay.fadeTo(settings.get('fadeOut') || 0, 0);\n\n\t\t\t$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {\n\t\t\t\t$box.hide();\n\t\t\t\t$overlay.hide();\n\t\t\t\ttrigger(event_purge);\n\t\t\t\t$loaded.remove();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tclosing = false;\n\t\t\t\t\ttrigger(event_closed);\n\t\t\t\t\tsettings.get('onClosed');\n\t\t\t\t}, 1);\n\t\t\t});\n\t\t}\n\t};\n\n\t// Removes changes Colorbox made to the document, but does not remove the plugin.\n\tpublicMethod.remove = function () {\n\t\tif (!$box) { return; }\n\n\t\t$box.stop();\n\t\t$[colorbox].close();\n\t\t$box.stop(false, true).remove();\n\t\t$overlay.remove();\n\t\tclosing = false;\n\t\t$box = null;\n\t\t$('.' + boxElement)\n\t\t\t.removeData(colorbox)\n\t\t\t.removeClass(boxElement);\n\n\t\t$(document).unbind('click.'+prefix).unbind('keydown.'+prefix);\n\t};\n\n\t// A method for fetching the current element Colorbox is referencing.\n\t// returns a jQuery object.\n\tpublicMethod.element = function () {\n\t\treturn $(settings.el);\n\t};\n\n\tpublicMethod.settings = defaults;\n\n}(jQuery, document, window));\n","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n * jquery.ui.widget.js\n * jquery.ui.mouse.js\n */\n(function ($) {\n\n // Detect touch support\n $.support.touch = 'ontouchend' in document;\n\n // Ignore browsers without touch support\n if (!$.support.touch) {\n return;\n }\n\n var mouseProto = $.ui.mouse.prototype,\n _mouseInit = mouseProto._mouseInit,\n _mouseDestroy = mouseProto._mouseDestroy,\n touchHandled;\n\n /**\n * Simulate a mouse event based on a corresponding touch event\n * @param {Object} event A touch event\n * @param {String} simulatedType The corresponding mouse event\n */\n function simulateMouseEvent (event, simulatedType) {\n\n // Ignore multi-touch events\n if (event.originalEvent.touches.length > 1) {\n return;\n }\n\n event.preventDefault();\n\n var touch = event.originalEvent.changedTouches[0],\n simulatedEvent = document.createEvent('MouseEvents');\n \n // Initialize the simulated mouse event using the touch event's coordinates\n simulatedEvent.initMouseEvent(\n simulatedType, // type\n true, // bubbles \n true, // cancelable \n window, // view \n 1, // detail \n touch.screenX, // screenX \n touch.screenY, // screenY \n touch.clientX, // clientX \n touch.clientY, // clientY \n false, // ctrlKey \n false, // altKey \n false, // shiftKey \n false, // metaKey \n 0, // button \n null // relatedTarget \n );\n\n // Dispatch the simulated event to the target element\n event.target.dispatchEvent(simulatedEvent);\n }\n\n /**\n * Handle the jQuery UI widget's touchstart events\n * @param {Object} event The widget element's touchstart event\n */\n mouseProto._touchStart = function (event) {\n\n var self = this;\n\n // Ignore the event if another widget is already being handled\n if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {\n return;\n }\n\n // Set the flag to prevent other widgets from inheriting the touch event\n touchHandled = true;\n\n // Track movement to determine if interaction was a click\n self._touchMoved = false;\n\n // Simulate the mouseover event\n simulateMouseEvent(event, 'mouseover');\n\n // Simulate the mousemove event\n simulateMouseEvent(event, 'mousemove');\n\n // Simulate the mousedown event\n simulateMouseEvent(event, 'mousedown');\n };\n\n /**\n * Handle the jQuery UI widget's touchmove events\n * @param {Object} event The document's touchmove event\n */\n mouseProto._touchMove = function (event) {\n\n // Ignore event if not handled\n if (!touchHandled) {\n return;\n }\n\n // Interaction was not a click\n this._touchMoved = true;\n\n // Simulate the mousemove event\n simulateMouseEvent(event, 'mousemove');\n };\n\n /**\n * Handle the jQuery UI widget's touchend events\n * @param {Object} event The document's touchend event\n */\n mouseProto._touchEnd = function (event) {\n\n // Ignore event if not handled\n if (!touchHandled) {\n return;\n }\n\n // Simulate the mouseup event\n simulateMouseEvent(event, 'mouseup');\n\n // Simulate the mouseout event\n simulateMouseEvent(event, 'mouseout');\n\n // If the touch interaction did not move, it should trigger a click\n if (!this._touchMoved) {\n\n // Simulate the click event\n simulateMouseEvent(event, 'click');\n }\n\n // Unset the flag to allow other widgets to inherit the touch event\n touchHandled = false;\n };\n\n /**\n * A duck punch of the $.ui.mouse _mouseInit method to support touch events.\n * This method extends the widget with bound touch event handlers that\n * translate touch events to mouse events and pass them to the widget's\n * original mouse event handling methods.\n */\n mouseProto._mouseInit = function () {\n \n var self = this;\n\n // Delegate the touch handlers to the widget's element\n self.element.bind({\n touchstart: $.proxy(self, '_touchStart'),\n touchmove: $.proxy(self, '_touchMove'),\n touchend: $.proxy(self, '_touchEnd')\n });\n\n // Call the original $.ui.mouse init method\n _mouseInit.call(self);\n };\n\n /**\n * Remove the touch event handlers\n */\n mouseProto._mouseDestroy = function () {\n \n var self = this;\n\n // Delegate the touch handlers to the widget's element\n self.element.unbind({\n touchstart: $.proxy(self, '_touchStart'),\n touchmove: $.proxy(self, '_touchMove'),\n touchend: $.proxy(self, '_touchEnd')\n });\n\n // Call the original $.ui.mouse destroy method\n _mouseDestroy.call(self);\n };\n\n})(jQuery);","/*!\n * jQuery UI Effects 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/category/effects-core/\n//>>demos: http://jqueryui.com/effect/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n( function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// Plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// A set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// JQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// Element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// Colors = jQuery.Color.names\n\tcolors,\n\n\t// Local aliases of functions called often\n\teach = jQuery.each;\n\n// Determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// Define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// We add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// For now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// If this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// Exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// If this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// Named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// If the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// If the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] &&\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// Use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// If null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// If we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// Catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// Default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// Hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// Makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// Generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// Alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// Add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on \"invalid\" values like\n\t\t\t\t\t// 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n} )( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\n\t$.expr.filters.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.filters.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.12.1\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.addClass( options.className )\n\t\t\t\t.css( {\n\t\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\t\theight: element.innerHeight(),\n\t\t\t\t\twidth: element.innerWidth(),\n\t\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t\t} )\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\tif ( $.isFunction( done ) ) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nreturn $.effects;\n\n} ) );\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\n// This file is deprecated\nreturn $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n} ) );\n","/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\nreturn $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n} ) );\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\n$.ui = $.ui || {};\n\nreturn $.ui.version = \"1.12.1\";\n\n} ) );\n","/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nreturn $.widget;\n\n} ) );\n","/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../ie\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nreturn $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n} ) );\n","/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: http://api.jqueryui.com/slider/\n//>>demos: http://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../keycode\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nreturn $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n} ) );\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","module.exports = jQuery;","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isTemplatePartActive } from './template.js';\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n * div#1 (remove) <-- start removing (removing node is div#1)\n * div\n * div#2 (remove) <-- continue removing (removing node is still div#1)\n * div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(template, nodesToRemove) {\n const { element: { content }, parts } = template;\n const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let part = parts[partIndex];\n let nodeIndex = -1;\n let removeCount = 0;\n const nodesToRemoveInTemplate = [];\n let currentRemovingNode = null;\n while (walker.nextNode()) {\n nodeIndex++;\n const node = walker.currentNode;\n // End removal if stepped past the removing node\n if (node.previousSibling === currentRemovingNode) {\n currentRemovingNode = null;\n }\n // A node to remove was found in the template\n if (nodesToRemove.has(node)) {\n nodesToRemoveInTemplate.push(node);\n // Track node we're removing\n if (currentRemovingNode === null) {\n currentRemovingNode = node;\n }\n }\n // When removing, increment count by which to adjust subsequent part indices\n if (currentRemovingNode !== null) {\n removeCount++;\n }\n while (part !== undefined && part.index === nodeIndex) {\n // If part is in a removed node deactivate it by setting index to -1 or\n // adjust the index as needed.\n part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n // go to the next active part.\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n part = parts[partIndex];\n }\n }\n nodesToRemoveInTemplate.forEach((n) => n.parentNode.removeChild(n));\n}\nconst countNodes = (node) => {\n let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n while (walker.nextNode()) {\n count++;\n }\n return count;\n};\nconst nextActiveIndexInTemplateParts = (parts, startIndex = -1) => {\n for (let i = startIndex + 1; i < parts.length; i++) {\n const part = parts[i];\n if (isTemplatePartActive(part)) {\n return i;\n }\n }\n return -1;\n};\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(template, node, refNode = null) {\n const { element: { content }, parts } = template;\n // If there's no refNode, then put node at end of template.\n // No part indices need to be shifted in this case.\n if (refNode === null || refNode === undefined) {\n content.appendChild(node);\n return;\n }\n const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n let partIndex = nextActiveIndexInTemplateParts(parts);\n let insertCount = 0;\n let walkerIndex = -1;\n while (walker.nextNode()) {\n walkerIndex++;\n const walkerNode = walker.currentNode;\n if (walkerNode === refNode) {\n insertCount = countNodes(node);\n refNode.parentNode.insertBefore(node, refNode);\n }\n while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n // If we've inserted the node, simply adjust all subsequent parts\n if (insertCount > 0) {\n while (partIndex !== -1) {\n parts[partIndex].index += insertCount;\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n return;\n }\n partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n }\n }\n}\n//# sourceMappingURL=modify-template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { removeNodes } from './dom.js';\nimport { insertNodeIntoTemplate, removeNodesFromTemplate } from './modify-template.js';\nimport { parts, render as litRender } from './render.js';\nimport { templateCaches } from './template-factory.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { marker, Template } from './template.js';\nexport { html, svg, TemplateResult } from '../lit-html.js';\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type, scopeName) => `${type}--${scopeName}`;\nlet compatibleShadyCSSVersion = true;\nif (typeof window.ShadyCSS === 'undefined') {\n compatibleShadyCSSVersion = false;\n}\nelse if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n console.warn(`Incompatible ShadyCSS version detected. ` +\n `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n `@webcomponents/shadycss@1.3.1.`);\n compatibleShadyCSSVersion = false;\n}\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName) => (result) => {\n const cacheKey = getTemplateCacheKey(result.type, scopeName);\n let templateCache = templateCaches.get(cacheKey);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(cacheKey, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n const key = result.strings.join(marker);\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n const element = result.getTemplateElement();\n if (compatibleShadyCSSVersion) {\n window.ShadyCSS.prepareTemplateDom(element, scopeName);\n }\n template = new Template(result, element);\n templateCache.keyString.set(key, template);\n }\n templateCache.stringsArray.set(result.strings, template);\n return template;\n};\nconst TEMPLATE_TYPES = ['html', 'svg'];\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName) => {\n TEMPLATE_TYPES.forEach((type) => {\n const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n if (templates !== undefined) {\n templates.keyString.forEach((template) => {\n const { element: { content } } = template;\n // IE 11 doesn't support the iterable param Set constructor\n const styles = new Set();\n Array.from(content.querySelectorAll('style')).forEach((s) => {\n styles.add(s);\n });\n removeNodesFromTemplate(template, styles);\n });\n }\n });\n};\nconst shadyRenderSet = new Set();\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles = (scopeName, renderedDOM, template) => {\n shadyRenderSet.add(scopeName);\n // If `renderedDOM` is stamped from a Template, then we need to edit that\n // Template's underlying template element. Otherwise, we create one here\n // to give to ShadyCSS, which still requires one while scoping.\n const templateElement = !!template ? template.element : document.createElement('template');\n // Move styles out of rendered DOM and store.\n const styles = renderedDOM.querySelectorAll('style');\n const { length } = styles;\n // If there are no styles, skip unnecessary work\n if (length === 0) {\n // Ensure prepareTemplateStyles is called to support adding\n // styles via `prepareAdoptedCssText` since that requires that\n // `prepareTemplateStyles` is called.\n //\n // ShadyCSS will only update styles containing @apply in the template\n // given to `prepareTemplateStyles`. If no lit Template was given,\n // ShadyCSS will not be able to update uses of @apply in any relevant\n // template. However, this is not a problem because we only create the\n // template for the purpose of supporting `prepareAdoptedCssText`,\n // which doesn't support @apply at all.\n window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n return;\n }\n const condensedStyle = document.createElement('style');\n // Collect styles into a single style. This helps us make sure ShadyCSS\n // manipulations will not prevent us from being able to fix up template\n // part indices.\n // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n // currently does this anyway. When it does not, this should be changed.\n for (let i = 0; i < length; i++) {\n const style = styles[i];\n style.parentNode.removeChild(style);\n condensedStyle.textContent += style.textContent;\n }\n // Remove styles from nested templates in this scope.\n removeStylesFromLitTemplates(scopeName);\n // And then put the condensed style into the \"root\" template passed in as\n // `template`.\n const content = templateElement.content;\n if (!!template) {\n insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n }\n else {\n content.insertBefore(condensedStyle, content.firstChild);\n }\n // Note, it's important that ShadyCSS gets the template that `lit-html`\n // will actually render so that it can update the style inside when\n // needed (e.g. @apply native Shadow DOM case).\n window.ShadyCSS.prepareTemplateStyles(templateElement, scopeName);\n const style = content.querySelector('style');\n if (window.ShadyCSS.nativeShadow && style !== null) {\n // When in native Shadow DOM, ensure the style created by ShadyCSS is\n // included in initially rendered output (`renderedDOM`).\n renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n }\n else if (!!template) {\n // When no style is left in the template, parts will be broken as a\n // result. To fix this, we put back the style node ShadyCSS removed\n // and then tell lit to remove that node from the template.\n // There can be no style in the template in 2 cases (1) when Shady DOM\n // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n // is in use ShadyCSS removes the style if it contains no content.\n // NOTE, ShadyCSS creates its own style so we can safely add/remove\n // `condensedStyle` here.\n content.insertBefore(condensedStyle, content.firstChild);\n const removes = new Set();\n removes.add(condensedStyle);\n removeNodesFromTemplate(template, removes);\n }\n};\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render = (result, container, options) => {\n if (!options || typeof options !== 'object' || !options.scopeName) {\n throw new Error('The `scopeName` option is required.');\n }\n const scopeName = options.scopeName;\n const hasRendered = parts.has(container);\n const needsScoping = compatibleShadyCSSVersion &&\n container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n !!container.host;\n // Handle first render to a scope specially...\n const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n // On first scope render, render into a fragment; this cannot be a single\n // fragment that is reused since nested renders can occur synchronously.\n const renderContainer = firstScopeRender ? document.createDocumentFragment() : container;\n litRender(result, renderContainer, Object.assign({ templateFactory: shadyTemplateFactory(scopeName) }, options));\n // When performing first scope render,\n // (1) We've rendered into a fragment so that there's a chance to\n // `prepareTemplateStyles` before sub-elements hit the DOM\n // (which might cause them to render based on a common pattern of\n // rendering in a custom element's `connectedCallback`);\n // (2) Scope the template with ShadyCSS one time only for this scope.\n // (3) Render the fragment into the container and make sure the\n // container knows its `part` is the one we just rendered. This ensures\n // DOM will be re-used on subsequent renders.\n if (firstScopeRender) {\n const part = parts.get(renderContainer);\n parts.delete(renderContainer);\n // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n // that should apply to `renderContainer` even if the rendered value is\n // not a TemplateInstance. However, it will only insert scoped styles\n // into the document if `prepareTemplateStyles` has already been called\n // for the given scope name.\n const template = part.value instanceof TemplateInstance ?\n part.value.template :\n undefined;\n prepareTemplateStyles(scopeName, renderContainer, template);\n removeNodes(container, container.firstChild);\n container.appendChild(renderContainer);\n parts.set(container, part);\n }\n // After elements have hit the DOM, update styling if this is the\n // initial render to this container.\n // This is needed whenever dynamic changes are made so it would be\n // safest to do every render; however, this would regress performance\n // so we leave it up to the user to call `ShadyCSS.styleElement`\n // for dynamic changes.\n if (!hasRendered && needsScoping) {\n window.ShadyCSS.styleElement(container.host);\n }\n};\n//# sourceMappingURL=shady-render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nvar _a;\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n (prop, _obj) => prop;\nexport const defaultConverter = {\n toAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value ? '' : null;\n case Object:\n case Array:\n // if the value is `null` or `undefined` pass this through\n // to allow removing/no change behavior.\n return value == null ? value : JSON.stringify(value);\n }\n return value;\n },\n fromAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value !== null;\n case Number:\n return value === null ? null : Number(value);\n case Object:\n case Array:\n return JSON.parse(value);\n }\n return value;\n }\n};\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual = (value, old) => {\n // This ensures (old==NaN, value==NaN) always returns false\n return old !== value && (old === old || value === value);\n};\nconst defaultPropertyDeclaration = {\n attribute: true,\n type: String,\n converter: defaultConverter,\n reflect: false,\n hasChanged: notEqual\n};\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport class UpdatingElement extends HTMLElement {\n constructor() {\n super();\n this.initialize();\n }\n /**\n * Returns a list of attributes corresponding to the registered properties.\n * @nocollapse\n */\n static get observedAttributes() {\n // note: piggy backing on this to ensure we're finalized.\n this.finalize();\n const attributes = [];\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this._classProperties.forEach((v, p) => {\n const attr = this._attributeNameForProperty(p, v);\n if (attr !== undefined) {\n this._attributeToPropertyMap.set(attr, p);\n attributes.push(attr);\n }\n });\n return attributes;\n }\n /**\n * Ensures the private `_classProperties` property metadata is created.\n * In addition to `finalize` this is also called in `createProperty` to\n * ensure the `@property` decorator can add property metadata.\n */\n /** @nocollapse */\n static _ensureClassProperties() {\n // ensure private storage for property declarations.\n if (!this.hasOwnProperty(JSCompiler_renameProperty('_classProperties', this))) {\n this._classProperties = new Map();\n // NOTE: Workaround IE11 not supporting Map constructor argument.\n const superProperties = Object.getPrototypeOf(this)._classProperties;\n if (superProperties !== undefined) {\n superProperties.forEach((v, k) => this._classProperties.set(k, v));\n }\n }\n }\n /**\n * Creates a property accessor on the element prototype if one does not exist\n * and stores a PropertyDeclaration for the property with the given options.\n * The property setter calls the property's `hasChanged` property option\n * or uses a strict identity check to determine whether or not to request\n * an update.\n *\n * This method may be overridden to customize properties; however,\n * when doing so, it's important to call `super.createProperty` to ensure\n * the property is setup correctly. This method calls\n * `getPropertyDescriptor` internally to get a descriptor to install.\n * To customize what properties do when they are get or set, override\n * `getPropertyDescriptor`. To customize the options for a property,\n * implement `createProperty` like this:\n *\n * static createProperty(name, options) {\n * options = Object.assign(options, {myOption: true});\n * super.createProperty(name, options);\n * }\n *\n * @nocollapse\n */\n static createProperty(name, options = defaultPropertyDeclaration) {\n // Note, since this can be called by the `@property` decorator which\n // is called before `finalize`, we ensure storage exists for property\n // metadata.\n this._ensureClassProperties();\n this._classProperties.set(name, options);\n // Do not generate an accessor if the prototype already has one, since\n // it would be lost otherwise and that would never be the user's intention;\n // Instead, we expect users to call `requestUpdate` themselves from\n // user-defined accessors. Note that if the super has an accessor we will\n // still overwrite it\n if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n return;\n }\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n Object.defineProperty(this.prototype, name, descriptor);\n }\n }\n /**\n * Returns a property descriptor to be defined on the given named property.\n * If no descriptor is returned, the property will not become an accessor.\n * For example,\n *\n * class MyElement extends LitElement {\n * static getPropertyDescriptor(name, key, options) {\n * const defaultDescriptor =\n * super.getPropertyDescriptor(name, key, options);\n * const setter = defaultDescriptor.set;\n * return {\n * get: defaultDescriptor.get,\n * set(value) {\n * setter.call(this, value);\n * // custom action.\n * },\n * configurable: true,\n * enumerable: true\n * }\n * }\n * }\n *\n * @nocollapse\n */\n static getPropertyDescriptor(name, key, options) {\n return {\n // tslint:disable-next-line:no-any no symbol in index\n get() {\n return this[key];\n },\n set(value) {\n const oldValue = this[name];\n this[key] = value;\n this\n .requestUpdateInternal(name, oldValue, options);\n },\n configurable: true,\n enumerable: true\n };\n }\n /**\n * Returns the property options associated with the given property.\n * These options are defined with a PropertyDeclaration via the `properties`\n * object or the `@property` decorator and are registered in\n * `createProperty(...)`.\n *\n * Note, this method should be considered \"final\" and not overridden. To\n * customize the options for a given property, override `createProperty`.\n *\n * @nocollapse\n * @final\n */\n static getPropertyOptions(name) {\n return this._classProperties && this._classProperties.get(name) ||\n defaultPropertyDeclaration;\n }\n /**\n * Creates property accessors for registered properties and ensures\n * any superclasses are also finalized.\n * @nocollapse\n */\n static finalize() {\n // finalize any superclasses\n const superCtor = Object.getPrototypeOf(this);\n if (!superCtor.hasOwnProperty(finalized)) {\n superCtor.finalize();\n }\n this[finalized] = true;\n this._ensureClassProperties();\n // initialize Map populated in observedAttributes\n this._attributeToPropertyMap = new Map();\n // make any properties\n // Note, only process \"own\" properties since this element will inherit\n // any properties defined on the superClass, and finalization ensures\n // the entire prototype chain is finalized.\n if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n const props = this.properties;\n // support symbols in properties (IE11 does not support this)\n const propKeys = [\n ...Object.getOwnPropertyNames(props),\n ...(typeof Object.getOwnPropertySymbols === 'function') ?\n Object.getOwnPropertySymbols(props) :\n []\n ];\n // This for/of is ok because propKeys is an array\n for (const p of propKeys) {\n // note, use of `any` is due to TypeSript lack of support for symbol in\n // index types\n // tslint:disable-next-line:no-any no symbol in index\n this.createProperty(p, props[p]);\n }\n }\n }\n /**\n * Returns the property name for the given attribute `name`.\n * @nocollapse\n */\n static _attributeNameForProperty(name, options) {\n const attribute = options.attribute;\n return attribute === false ?\n undefined :\n (typeof attribute === 'string' ?\n attribute :\n (typeof name === 'string' ? name.toLowerCase() : undefined));\n }\n /**\n * Returns true if a property should request an update.\n * Called when a property value is set and uses the `hasChanged`\n * option for the property if present or a strict identity check.\n * @nocollapse\n */\n static _valueHasChanged(value, old, hasChanged = notEqual) {\n return hasChanged(value, old);\n }\n /**\n * Returns the property value for the given attribute value.\n * Called via the `attributeChangedCallback` and uses the property's\n * `converter` or `converter.fromAttribute` property option.\n * @nocollapse\n */\n static _propertyValueFromAttribute(value, options) {\n const type = options.type;\n const converter = options.converter || defaultConverter;\n const fromAttribute = (typeof converter === 'function' ? converter : converter.fromAttribute);\n return fromAttribute ? fromAttribute(value, type) : value;\n }\n /**\n * Returns the attribute value for the given property value. If this\n * returns undefined, the property will *not* be reflected to an attribute.\n * If this returns null, the attribute will be removed, otherwise the\n * attribute will be set to the value.\n * This uses the property's `reflect` and `type.toAttribute` property options.\n * @nocollapse\n */\n static _propertyValueToAttribute(value, options) {\n if (options.reflect === undefined) {\n return;\n }\n const type = options.type;\n const converter = options.converter;\n const toAttribute = converter && converter.toAttribute ||\n defaultConverter.toAttribute;\n return toAttribute(value, type);\n }\n /**\n * Performs element initialization. By default captures any pre-set values for\n * registered properties.\n */\n initialize() {\n this._updateState = 0;\n this._updatePromise =\n new Promise((res) => this._enableUpdatingResolver = res);\n this._changedProperties = new Map();\n this._saveInstanceProperties();\n // ensures first update will be caught by an early access of\n // `updateComplete`\n this.requestUpdateInternal();\n }\n /**\n * Fixes any properties set on the instance before upgrade time.\n * Otherwise these would shadow the accessor and break these properties.\n * The properties are stored in a Map which is played back after the\n * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n * (<=41), properties created for native platform properties like (`id` or\n * `name`) may not have default values set in the element constructor. On\n * these browsers native properties appear on instances and therefore their\n * default value will overwrite any element default (e.g. if the element sets\n * this.id = 'id' in the constructor, the 'id' will become '' since this is\n * the native platform default).\n */\n _saveInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this.constructor\n ._classProperties.forEach((_v, p) => {\n if (this.hasOwnProperty(p)) {\n const value = this[p];\n delete this[p];\n if (!this._instanceProperties) {\n this._instanceProperties = new Map();\n }\n this._instanceProperties.set(p, value);\n }\n });\n }\n /**\n * Applies previously saved instance properties.\n */\n _applyInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n // tslint:disable-next-line:no-any\n this._instanceProperties.forEach((v, p) => this[p] = v);\n this._instanceProperties = undefined;\n }\n connectedCallback() {\n // Ensure first connection completes an update. Updates cannot complete\n // before connection.\n this.enableUpdating();\n }\n enableUpdating() {\n if (this._enableUpdatingResolver !== undefined) {\n this._enableUpdatingResolver();\n this._enableUpdatingResolver = undefined;\n }\n }\n /**\n * Allows for `super.disconnectedCallback()` in extensions while\n * reserving the possibility of making non-breaking feature additions\n * when disconnecting at some point in the future.\n */\n disconnectedCallback() {\n }\n /**\n * Synchronizes property values when attributes change.\n */\n attributeChangedCallback(name, old, value) {\n if (old !== value) {\n this._attributeToProperty(name, value);\n }\n }\n _propertyToAttribute(name, value, options = defaultPropertyDeclaration) {\n const ctor = this.constructor;\n const attr = ctor._attributeNameForProperty(name, options);\n if (attr !== undefined) {\n const attrValue = ctor._propertyValueToAttribute(value, options);\n // an undefined value does not change the attribute.\n if (attrValue === undefined) {\n return;\n }\n // Track if the property is being reflected to avoid\n // setting the property again via `attributeChangedCallback`. Note:\n // 1. this takes advantage of the fact that the callback is synchronous.\n // 2. will behave incorrectly if multiple attributes are in the reaction\n // stack at time of calling. However, since we process attributes\n // in `update` this should not be possible (or an extreme corner case\n // that we'd like to discover).\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n if (attrValue == null) {\n this.removeAttribute(attr);\n }\n else {\n this.setAttribute(attr, attrValue);\n }\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n }\n }\n _attributeToProperty(name, value) {\n // Use tracking info to avoid deserializing attribute value if it was\n // just set from a property setter.\n if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n return;\n }\n const ctor = this.constructor;\n // Note, hint this as an `AttributeMap` so closure clearly understands\n // the type; it has issues with tracking types through statics\n // tslint:disable-next-line:no-unnecessary-type-assertion\n const propName = ctor._attributeToPropertyMap.get(name);\n if (propName !== undefined) {\n const options = ctor.getPropertyOptions(propName);\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n this[propName] =\n // tslint:disable-next-line:no-any\n ctor._propertyValueFromAttribute(value, options);\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n }\n }\n /**\n * This protected version of `requestUpdate` does not access or return the\n * `updateComplete` promise. This promise can be overridden and is therefore\n * not free to access.\n */\n requestUpdateInternal(name, oldValue, options) {\n let shouldRequestUpdate = true;\n // If we have a property key, perform property update steps.\n if (name !== undefined) {\n const ctor = this.constructor;\n options = options || ctor.getPropertyOptions(name);\n if (ctor._valueHasChanged(this[name], oldValue, options.hasChanged)) {\n if (!this._changedProperties.has(name)) {\n this._changedProperties.set(name, oldValue);\n }\n // Add to reflecting properties set.\n // Note, it's important that every change has a chance to add the\n // property to `_reflectingProperties`. This ensures setting\n // attribute + property reflects correctly.\n if (options.reflect === true &&\n !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n if (this._reflectingProperties === undefined) {\n this._reflectingProperties = new Map();\n }\n this._reflectingProperties.set(name, options);\n }\n }\n else {\n // Abort the request if the property should not be considered changed.\n shouldRequestUpdate = false;\n }\n }\n if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n this._updatePromise = this._enqueueUpdate();\n }\n }\n /**\n * Requests an update which is processed asynchronously. This should\n * be called when an element should update based on some state not triggered\n * by setting a property. In this case, pass no arguments. It should also be\n * called when manually implementing a property setter. In this case, pass the\n * property `name` and `oldValue` to ensure that any configured property\n * options are honored. Returns the `updateComplete` Promise which is resolved\n * when the update completes.\n *\n * @param name {PropertyKey} (optional) name of requesting property\n * @param oldValue {any} (optional) old value of requesting property\n * @returns {Promise} A Promise that is resolved when the update completes.\n */\n requestUpdate(name, oldValue) {\n this.requestUpdateInternal(name, oldValue);\n return this.updateComplete;\n }\n /**\n * Sets up the element to asynchronously update.\n */\n async _enqueueUpdate() {\n this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n try {\n // Ensure any previous update has resolved before updating.\n // This `await` also ensures that property changes are batched.\n await this._updatePromise;\n }\n catch (e) {\n // Ignore any previous errors. We only care that the previous cycle is\n // done. Any error should have been handled in the previous update.\n }\n const result = this.performUpdate();\n // If `performUpdate` returns a Promise, we await it. This is done to\n // enable coordinating updates with a scheduler. Note, the result is\n // checked to avoid delaying an additional microtask unless we need to.\n if (result != null) {\n await result;\n }\n return !this._hasRequestedUpdate;\n }\n get _hasRequestedUpdate() {\n return (this._updateState & STATE_UPDATE_REQUESTED);\n }\n get hasUpdated() {\n return (this._updateState & STATE_HAS_UPDATED);\n }\n /**\n * Performs an element update. Note, if an exception is thrown during the\n * update, `firstUpdated` and `updated` will not be called.\n *\n * You can override this method to change the timing of updates. If this\n * method is overridden, `super.performUpdate()` must be called.\n *\n * For instance, to schedule updates to occur just before the next frame:\n *\n * ```\n * protected async performUpdate(): Promise<unknown> {\n * await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n * super.performUpdate();\n * }\n * ```\n */\n performUpdate() {\n // Abort any update if one is not pending when this is called.\n // This can happen if `performUpdate` is called early to \"flush\"\n // the update.\n if (!this._hasRequestedUpdate) {\n return;\n }\n // Mixin instance properties once, if they exist.\n if (this._instanceProperties) {\n this._applyInstanceProperties();\n }\n let shouldUpdate = false;\n const changedProperties = this._changedProperties;\n try {\n shouldUpdate = this.shouldUpdate(changedProperties);\n if (shouldUpdate) {\n this.update(changedProperties);\n }\n else {\n this._markUpdated();\n }\n }\n catch (e) {\n // Prevent `firstUpdated` and `updated` from running when there's an\n // update exception.\n shouldUpdate = false;\n // Ensure element can accept additional updates after an exception.\n this._markUpdated();\n throw e;\n }\n if (shouldUpdate) {\n if (!(this._updateState & STATE_HAS_UPDATED)) {\n this._updateState = this._updateState | STATE_HAS_UPDATED;\n this.firstUpdated(changedProperties);\n }\n this.updated(changedProperties);\n }\n }\n _markUpdated() {\n this._changedProperties = new Map();\n this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n }\n /**\n * Returns a Promise that resolves when the element has completed updating.\n * The Promise value is a boolean that is `true` if the element completed the\n * update without triggering another update. The Promise result is `false` if\n * a property was set inside `updated()`. If the Promise is rejected, an\n * exception was thrown during the update.\n *\n * To await additional asynchronous work, override the `_getUpdateComplete`\n * method. For example, it is sometimes useful to await a rendered element\n * before fulfilling this Promise. To do this, first await\n * `super._getUpdateComplete()`, then any subsequent state.\n *\n * @returns {Promise} The Promise returns a boolean that indicates if the\n * update resolved without triggering another update.\n */\n get updateComplete() {\n return this._getUpdateComplete();\n }\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * class MyElement extends LitElement {\n * async _getUpdateComplete() {\n * await super._getUpdateComplete();\n * await this._myChild.updateComplete;\n * }\n * }\n */\n _getUpdateComplete() {\n return this._updatePromise;\n }\n /**\n * Controls whether or not `update` should be called when the element requests\n * an update. By default, this method always returns `true`, but this can be\n * customized to control when to update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n shouldUpdate(_changedProperties) {\n return true;\n }\n /**\n * Updates the element. This method reflects property values to attributes.\n * It can be overridden to render and keep updated element DOM.\n * Setting properties inside this method will *not* trigger\n * another update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n update(_changedProperties) {\n if (this._reflectingProperties !== undefined &&\n this._reflectingProperties.size > 0) {\n // Use forEach so this works even if for/of loops are compiled to for\n // loops expecting arrays\n this._reflectingProperties.forEach((v, k) => this._propertyToAttribute(k, this[k], v));\n this._reflectingProperties = undefined;\n }\n this._markUpdated();\n }\n /**\n * Invoked whenever the element is updated. Implement to perform\n * post-updating tasks via DOM APIs, for example, focusing an element.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n updated(_changedProperties) {\n }\n /**\n * Invoked when the element is first updated. Implement to perform one time\n * work on the element after update.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n firstUpdated(_changedProperties) {\n }\n}\n_a = finalized;\n/**\n * Marks class as having finished creating properties.\n */\nUpdatingElement[_a] = true;\n//# sourceMappingURL=updating-element.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst legacyCustomElement = (tagName, clazz) => {\n window.customElements.define(tagName, clazz);\n // Cast as any because TS doesn't recognize the return type as being a\n // subtype of the decorated class when clazz is typed as\n // `Constructor<HTMLElement>` for some reason.\n // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n // applied to elements however.\n // tslint:disable-next-line:no-any\n return clazz;\n};\nconst standardCustomElement = (tagName, descriptor) => {\n const { kind, elements } = descriptor;\n return {\n kind,\n elements,\n // This callback is called once the class is otherwise fully defined\n finisher(clazz) {\n window.customElements.define(tagName, clazz);\n }\n };\n};\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n * render() {\n * return html``;\n * }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName) => (classOrDescriptor) => (typeof classOrDescriptor === 'function') ?\n legacyCustomElement(tagName, classOrDescriptor) :\n standardCustomElement(tagName, classOrDescriptor);\nconst standardProperty = (options, element) => {\n // When decorating an accessor, pass it through and add property metadata.\n // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n // stomp over the user's accessor.\n if (element.kind === 'method' && element.descriptor &&\n !('value' in element.descriptor)) {\n return Object.assign(Object.assign({}, element), { finisher(clazz) {\n clazz.createProperty(element.key, options);\n } });\n }\n else {\n // createProperty() takes care of defining the property, but we still\n // must return some kind of descriptor, so return a descriptor for an\n // unused prototype field. The finisher calls createProperty().\n return {\n kind: 'field',\n key: Symbol(),\n placement: 'own',\n descriptor: {},\n // When @babel/plugin-proposal-decorators implements initializers,\n // do this instead of the initializer below. See:\n // https://github.com/babel/babel/issues/9260 extras: [\n // {\n // kind: 'initializer',\n // placement: 'own',\n // initializer: descriptor.initializer,\n // }\n // ],\n initializer() {\n if (typeof element.initializer === 'function') {\n this[element.key] = element.initializer.call(this);\n }\n },\n finisher(clazz) {\n clazz.createProperty(element.key, options);\n }\n };\n }\n};\nconst legacyProperty = (options, proto, name) => {\n proto.constructor\n .createProperty(name, options);\n};\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n * @property({ type: Boolean })\n * clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options) {\n // tslint:disable-next-line:no-any decorator\n return (protoOrDescriptor, name) => (name !== undefined) ?\n legacyProperty(options, protoOrDescriptor, name) :\n standardProperty(options, protoOrDescriptor);\n}\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function internalProperty(options) {\n return property({ attribute: false, hasChanged: options === null || options === void 0 ? void 0 : options.hasChanged });\n}\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n * @query('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector, cache) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n if (cache) {\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n descriptor.get = function () {\n if (this[key] === undefined) {\n (this[key] =\n this.renderRoot.querySelector(selector));\n }\n return this[key];\n };\n }\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAsync('#first')\n * first;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n * (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n async get() {\n await this.updateComplete;\n return this.renderRoot.querySelector(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n * @queryAll('div')\n * divs;\n *\n * render() {\n * return html`\n * <div id=\"first\"></div>\n * <div id=\"second\"></div>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector) {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n return this.renderRoot.querySelectorAll(selector);\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\nconst legacyQuery = (descriptor, proto, name) => {\n Object.defineProperty(proto, name, descriptor);\n};\nconst standardQuery = (descriptor, element) => ({\n kind: 'method',\n placement: 'prototype',\n key: element.key,\n descriptor,\n});\nconst standardEventOptions = (options, element) => {\n return Object.assign(Object.assign({}, element), { finisher(clazz) {\n Object.assign(clazz.prototype[element.key], options);\n } });\n};\nconst legacyEventOptions = \n// tslint:disable-next-line:no-any legacy decorator\n(options, proto, name) => {\n Object.assign(proto[name], options);\n};\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n * clicked = false;\n *\n * render() {\n * return html`\n * <div @click=${this._onClick}`>\n * <button></button>\n * </div>\n * `;\n * }\n *\n * @eventOptions({capture: true})\n * _onClick(e) {\n * this.clicked = true;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options) {\n // Return value typed as any to prevent TypeScript from complaining that\n // standard decorator function signature does not match TypeScript decorator\n // signature\n // TODO(kschaaf): unclear why it was only failing on this decorator and not\n // the others\n return ((protoOrDescriptor, name) => (name !== undefined) ?\n legacyEventOptions(options, protoOrDescriptor, name) :\n standardEventOptions(options, protoOrDescriptor));\n}\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype;\nconst legacyMatches = ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n * @queryAssignedNodes('list', true, '.item')\n * listItems;\n *\n * render() {\n * return html`\n * <slot name=\"list\"></slot>\n * `;\n * }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(slotName = '', flatten = false, selector = '') {\n return (protoOrDescriptor, \n // tslint:disable-next-line:no-any decorator\n name) => {\n const descriptor = {\n get() {\n const slotSelector = `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n const slot = this.renderRoot.querySelector(slotSelector);\n let nodes = slot && slot.assignedNodes({ flatten });\n if (nodes && selector) {\n nodes = nodes.filter((node) => node.nodeType === Node.ELEMENT_NODE &&\n node.matches ?\n node.matches(selector) :\n legacyMatches.call(node, selector));\n }\n return nodes;\n },\n enumerable: true,\n configurable: true,\n };\n return (name !== undefined) ?\n legacyQuery(descriptor, protoOrDescriptor, name) :\n standardQuery(descriptor, protoOrDescriptor);\n };\n}\n//# sourceMappingURL=decorators.js.map","/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n ('adoptedStyleSheets' in Document.prototype) &&\n ('replace' in CSSStyleSheet.prototype);\nconst constructionToken = Symbol();\nexport class CSSResult {\n constructor(cssText, safeToken) {\n if (safeToken !== constructionToken) {\n throw new Error('CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n }\n this.cssText = cssText;\n }\n // Note, this is a getter so that it's lazy. In practice, this means\n // stylesheets are not created until the first element instance is made.\n get styleSheet() {\n if (this._styleSheet === undefined) {\n // Note, if `supportsAdoptingStyleSheets` is true then we assume\n // CSSStyleSheet is constructable.\n if (supportsAdoptingStyleSheets) {\n this._styleSheet = new CSSStyleSheet();\n this._styleSheet.replaceSync(this.cssText);\n }\n else {\n this._styleSheet = null;\n }\n }\n return this._styleSheet;\n }\n toString() {\n return this.cssText;\n }\n}\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value) => {\n return new CSSResult(String(value), constructionToken);\n};\nconst textFromCSSResult = (value) => {\n if (value instanceof CSSResult) {\n return value.cssText;\n }\n else if (typeof value === 'number') {\n return value;\n }\n else {\n throw new Error(`Value passed to 'css' function must be a 'css' function result: ${value}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`);\n }\n};\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css = (strings, ...values) => {\n const cssText = values.reduce((acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1], strings[0]);\n return new CSSResult(cssText, constructionToken);\n};\n//# sourceMappingURL=css-tag.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n * LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n * Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n * ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n * // Declare observed properties\n * static get properties() {\n * return {\n * adjective: {}\n * }\n * }\n *\n * constructor() {\n * this.adjective = 'awesome';\n * }\n *\n * // Define the element's template\n * render() {\n * return html`<p>your ${adjective} template here</p>`;\n * }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport { render } from 'lit-html/lib/shady-render.js';\nimport { UpdatingElement } from './lib/updating-element.js';\nexport * from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport { html, svg, TemplateResult, SVGTemplateResult } from 'lit-html/lit-html.js';\nimport { supportsAdoptingStyleSheets, unsafeCSS } from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n .push('2.4.0');\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n /**\n * Return the array of styles to apply to the element.\n * Override this method to integrate into a style management system.\n *\n * @nocollapse\n */\n static getStyles() {\n return this.styles;\n }\n /** @nocollapse */\n static _getUniqueStyles() {\n // Only gather styles once per class\n if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n return;\n }\n // Take care not to call `this.getStyles()` multiple times since this\n // generates new CSSResults each time.\n // TODO(sorvell): Since we do not cache CSSResults by input, any\n // shared styles will generate new stylesheet objects, which is wasteful.\n // This should be addressed when a browser ships constructable\n // stylesheets.\n const userStyles = this.getStyles();\n if (Array.isArray(userStyles)) {\n // De-duplicate styles preserving the _last_ instance in the set.\n // This is a performance optimization to avoid duplicated styles that can\n // occur especially when composing via subclassing.\n // The last item is kept to try to preserve the cascade order with the\n // assumption that it's most important that last added styles override\n // previous styles.\n const addStyles = (styles, set) => styles.reduceRight((set, s) => \n // Note: On IE set.add() does not return the set\n Array.isArray(s) ? addStyles(s, set) : (set.add(s), set), set);\n // Array.from does not work on Set in IE, otherwise return\n // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n const set = addStyles(userStyles, new Set());\n const styles = [];\n set.forEach((v) => styles.unshift(v));\n this._styles = styles;\n }\n else {\n this._styles = userStyles === undefined ? [] : [userStyles];\n }\n // Ensure that there are no invalid CSSStyleSheet instances here. They are\n // invalid in two conditions.\n // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n // this is impossible to check except via .replaceSync or use\n // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n // false)\n this._styles = this._styles.map((s) => {\n if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n // Flatten the cssText from the passed constructible stylesheet (or\n // undetectable non-constructible stylesheet). The user might have\n // expected to update their stylesheets over time, but the alternative\n // is a crash.\n const cssText = Array.prototype.slice.call(s.cssRules)\n .reduce((css, rule) => css + rule.cssText, '');\n return unsafeCSS(cssText);\n }\n return s;\n });\n }\n /**\n * Performs element initialization. By default this calls\n * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n * captures any pre-set values for registered properties.\n */\n initialize() {\n super.initialize();\n this.constructor._getUniqueStyles();\n this.renderRoot = this.createRenderRoot();\n // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n // element's getRootNode(). While this could be done, we're choosing not to\n // support this now since it would require different logic around de-duping.\n if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n this.adoptStyles();\n }\n }\n /**\n * Returns the node into which the element should render and by default\n * creates and returns an open shadowRoot. Implement to customize where the\n * element's DOM is rendered. For example, to render into the element's\n * childNodes, return `this`.\n * @returns {Element|DocumentFragment} Returns a node into which to render.\n */\n createRenderRoot() {\n return this.attachShadow({ mode: 'open' });\n }\n /**\n * Applies styling to the element shadowRoot using the [[`styles`]]\n * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n * available and will fallback otherwise. When Shadow DOM is polyfilled,\n * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n * is available but `adoptedStyleSheets` is not, styles are appended to the\n * end of the `shadowRoot` to [mimic spec\n * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n */\n adoptStyles() {\n const styles = this.constructor._styles;\n if (styles.length === 0) {\n return;\n }\n // There are three separate cases here based on Shadow DOM support.\n // (1) shadowRoot polyfilled: use ShadyCSS\n // (2) shadowRoot.adoptedStyleSheets available: use it\n // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n // rendering\n if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n window.ShadyCSS.ScopingShim.prepareAdoptedCssText(styles.map((s) => s.cssText), this.localName);\n }\n else if (supportsAdoptingStyleSheets) {\n this.renderRoot.adoptedStyleSheets =\n styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet);\n }\n else {\n // This must be done after rendering so the actual style insertion is done\n // in `update`.\n this._needsShimAdoptedStyleSheets = true;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n // Note, first update/render handles styleElement so we only call this if\n // connected after first update.\n if (this.hasUpdated && window.ShadyCSS !== undefined) {\n window.ShadyCSS.styleElement(this);\n }\n }\n /**\n * Updates the element. This method reflects property values to attributes\n * and calls `render` to render DOM via lit-html. Setting properties inside\n * this method will *not* trigger another update.\n * @param _changedProperties Map of changed properties with old values\n */\n update(changedProperties) {\n // Setting properties in `render` should not trigger an update. Since\n // updates are allowed after super.update, it's important to call `render`\n // before that.\n const templateResult = this.render();\n super.update(changedProperties);\n // If render is not implemented by the component, don't call lit-html render\n if (templateResult !== renderNotImplemented) {\n this.constructor\n .render(templateResult, this.renderRoot, { scopeName: this.localName, eventContext: this });\n }\n // When native Shadow DOM is used but adoptedStyles are not supported,\n // insert styling after rendering to ensure adoptedStyles have highest\n // priority.\n if (this._needsShimAdoptedStyleSheets) {\n this._needsShimAdoptedStyleSheets = false;\n this.constructor._styles.forEach((s) => {\n const style = document.createElement('style');\n style.textContent = s.cssText;\n this.renderRoot.appendChild(style);\n });\n }\n }\n /**\n * Invoked on each update to perform rendering tasks. This method may return\n * any value renderable by lit-html's `NodePart` - typically a\n * `TemplateResult`. Setting properties inside this method will *not* trigger\n * the element to update.\n */\n render() {\n return renderNotImplemented;\n }\n}\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See updating-element.ts for more information.\n */\nLitElement['finalized'] = true;\n/**\n * Reference to the underlying library method used to render the element's\n * DOM. By default, points to the `render` method from lit-html's shady-render\n * module.\n *\n * **Most users will never need to touch this property.**\n *\n * This property should not be confused with the `render` instance method,\n * which should be overridden to define a template for the element.\n *\n * Advanced users creating a new base class based on LitElement can override\n * this property to point to a custom render method with a signature that\n * matches [shady-render's `render`\n * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n *\n * @nocollapse\n */\nLitElement.render = render;\n//# sourceMappingURL=lit-element.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = (f) => ((...args) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n});\nexport const isDirective = (o) => {\n return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n window.customElements != null &&\n window.customElements.polyfillWrapFlushCallback !==\n undefined;\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes = (container, start, end = null, before = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.insertBefore(start, before);\n start = n;\n }\n};\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes = (container, start, end = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.removeChild(start);\n start = n;\n }\n};\n//# sourceMappingURL=dom.js.map","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n//# sourceMappingURL=part.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isDirective } from './directive.js';\nimport { removeNodes } from './dom.js';\nimport { noChange, nothing } from './part.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { TemplateResult } from './template-result.js';\nimport { createMarker } from './template.js';\nexport const isPrimitive = (value) => {\n return (value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value) => {\n return Array.isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !!(value && value[Symbol.iterator]);\n};\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n constructor(element, name, strings) {\n this.dirty = true;\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n this.parts[i] = this._createPart();\n }\n }\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n _createPart() {\n return new AttributePart(this);\n }\n _getValue() {\n const strings = this.strings;\n const l = strings.length - 1;\n const parts = this.parts;\n // If we're assigning an attribute via syntax like:\n // attr=\"${foo}\" or attr=${foo}\n // but not\n // attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n // then we don't want to coerce the attribute value into one long\n // string. Instead we want to just return the value itself directly,\n // so that sanitizeDOMValue can get the actual value rather than\n // String(value)\n // The exception is if v is an array, in which case we do want to smash\n // it together into a string without calling String() on the array.\n //\n // This also allows trusted values (when using TrustedTypes) being\n // assigned to DOM sinks without being stringified in the process.\n if (l === 1 && strings[0] === '' && strings[1] === '') {\n const v = parts[0].value;\n if (typeof v === 'symbol') {\n return String(v);\n }\n if (typeof v === 'string' || !isIterable(v)) {\n return v;\n }\n }\n let text = '';\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n }\n else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n text += strings[l];\n return text;\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue());\n }\n }\n}\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart {\n constructor(committer) {\n this.value = undefined;\n this.committer = committer;\n }\n setValue(value) {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart {\n constructor(options) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.options = options;\n }\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref) {\n this.startNode = ref;\n this.endNode = ref.nextSibling;\n }\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n if (this.startNode.parentNode === null) {\n return;\n }\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n }\n else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n }\n else if (value instanceof Node) {\n this.__commitNode(value);\n }\n else if (isIterable(value)) {\n this.__commitIterable(value);\n }\n else if (value === nothing) {\n this.value = nothing;\n this.clear();\n }\n else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n __insert(node) {\n this.endNode.parentNode.insertBefore(node, this.endNode);\n }\n __commitNode(value) {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n __commitText(value) {\n const node = this.startNode.nextSibling;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString = typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n node.data = valueAsString;\n }\n else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n __commitTemplateResult(value) {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n }\n else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance = new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n __commitIterable(value) {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value;\n let partIndex = 0;\n let itemPart;\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n }\n else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n clear(startNode = this.startNode) {\n removeNodes(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart {\n constructor(element, name, strings) {\n this.value = undefined;\n this.__pendingValue = undefined;\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error('Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n }\n else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n constructor(element, name, strings) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n _createPart() {\n return new PropertyPart(this);\n }\n _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.element[this.name] = this._getValue();\n }\n }\n}\nexport class PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options, options);\n }\n catch (_e) {\n // event options not supported\n }\n})();\nexport class EventPart {\n constructor(element, eventName, eventContext) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n if (shouldRemoveListener) {\n this.element.removeEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange;\n }\n handleEvent(event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n }\n else {\n this.value.handleEvent(event);\n }\n }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n (eventOptionsSupported ?\n { capture: o.capture, passive: o.passive, once: o.once } :\n o.capture);\n//# sourceMappingURL=parts.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { removeNodes } from './dom.js';\nimport { NodePart } from './parts.js';\nimport { templateFactory } from './template-factory.js';\nexport const parts = new WeakMap();\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render = (result, container, options) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart(Object.assign({ templateFactory }, options)));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n};\n//# sourceMappingURL=render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { marker, Template } from './template.js';\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(result.type, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\nexport const templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isCEPolyfill } from './dom.js';\nimport { isTemplatePartActive } from './template.js';\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n constructor(template, processor, options) {\n this.__parts = [];\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n update(values) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n _clone() {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari does not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) :\n document.importNode(this.template.element.content, true);\n const stack = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node.nodeName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n node = walker.nextNode();\n }\n }\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node.previousSibling);\n this.__parts.push(part);\n }\n else {\n this.__parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n//# sourceMappingURL=template-instance.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { reparentNodes } from './dom.js';\nimport { boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker } from './template.js';\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n trustedTypes.createPolicy('lit-html', { createHTML: (s) => s });\nconst commentMarker = ` ${marker} `;\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n constructor(strings, values, type, processor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML() {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment position.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n }\n else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n getTemplateElement() {\n const template = document.createElement('template');\n let value = this.getHTML();\n if (policy !== undefined) {\n // this is secure because `this.strings` is a TemplateStringsArray.\n // TODO: validate this when\n // https://github.com/tc39/proposal-array-is-template-object is\n // implemented.\n value = policy.createHTML(value);\n }\n template.innerHTML = value;\n return template;\n }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML() {\n return `<svg>${super.getHTML()}</svg>`;\n }\n getTemplateElement() {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n//# sourceMappingURL=template-result.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n constructor(result, element) {\n this.parts = [];\n this.element = element;\n const nodesToRemove = [];\n const stack = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(element.content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const { strings, values: { length } } = result;\n while (partIndex < length) {\n const node = walker.nextNode();\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n continue;\n }\n index++;\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if (node.hasAttributes()) {\n const attributes = node.attributes;\n const { length } = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)[2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n const attributeValue = node.getAttribute(attributeLookupName);\n node.removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({ type: 'attribute', index, name, strings: statics });\n partIndex += statics.length - 1;\n }\n }\n if (node.tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n }\n else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = node.data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n }\n else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({ type: 'node', index: ++index });\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n }\n else {\n node.data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n }\n else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if (node.data === marker) {\n const parent = node.parentNode;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({ type: 'node', index });\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n node.data = '';\n }\n else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n }\n else {\n let i = -1;\n while ((i = node.data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({ type: 'node', index: -1 });\n partIndex++;\n }\n }\n }\n }\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode.removeChild(n);\n }\n }\n}\nconst endsWith = (str, suffix) => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\nexport const isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex = \n// eslint-disable-next-line no-control-regex\n/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter } from './parts.js';\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(element, name, strings, options) {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options) {\n return new NodePart(options);\n }\n}\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { defaultTemplateProcessor } from './lib/default-template-processor.js';\nimport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { DefaultTemplateProcessor, defaultTemplateProcessor } from './lib/default-template-processor.js';\nexport { directive, isDirective } from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport { removeNodes, reparentNodes } from './lib/dom.js';\nexport { noChange, nothing } from './lib/part.js';\nexport { AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart } from './lib/parts.js';\nexport { parts, render } from './lib/render.js';\nexport { templateCaches, templateFactory } from './lib/template-factory.js';\nexport { TemplateInstance } from './lib/template-instance.js';\nexport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { createMarker, isTemplatePartActive, Template } from './lib/template.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings, ...values) => new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings, ...values) => new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n//# sourceMappingURL=lit-html.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t898: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_internetarchive_bookreader\"] = self[\"webpackChunk_internetarchive_bookreader\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module doesn't tell about it's top-level declarations so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(7570);\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["$","append_namespace","string_of_events","ns","pieces","split","ret","Array","i","length","push","join","left_top","event","x","y","clientX","clientY","screenX","screenY","targetTouches","pageX","pageY","originalEvent","str","console","error","type","left","top","fn","dragscrollable","options","handling_element","this","settings","extend","dragSelector","acceptPropagatedEvent","preventDefault","dragstart","dragcontinue","dragend","dragMinDistance","namespace","scrollWindow","dragContinueHandlerProxy","shouldAbort","window","navigator","dragscroll","dragStartHandler","which","data","target","firstCoord","lastCoord","bind","dragContinueHandler","e","dragEndHandler","each","idx","val","get","addEventListener","lt","delta","scrollTarget","scrollable","scrollLeft","scrollTop","unbind","removeEventListener","Math","abs","distance","max","stopImmediatePropagation","stopPropagation","find","removedragscrollable","document","andSelf","exposeOverrideable","FromClass","fromMethod","fromTransform","ToClass","toMethod","toTransform","wrapper","prototype","apply","arguments","Object","defineProperty","set","overrideFn","newThis","EVENTS","fragmentChange","PostInit","stop","resize","navToggled","fullscreenToggled","zoomOut","zoomIn","mobileNavOpen","Navbar","br","$root","$nav","maxPageNum","minimumControls","maximumControls","controlName","option","controls","visible","template","className","label","iconClassName","map","mode","controlFor","viewModeOptions","viewmode","viewModes","constMode1up","title","constMode2up","constModeThumb","filter","excludedModes","includes","viewModeOrder","m","switchMode","currentModeIndex","indexOf","shift","remove","$button","off","on","nextModeID","newViewMode","nextViewMode","updateViewModeButton","currentTarget","currentViewModeButton","iconClass","tooltipText","attr","removeClass","addClass","end","text","bookType","refs","$brContainer","prop","showMinimumNavbarControls","showMaximumNavbarControls","forEach","control","element","querySelector","classList","add","navbarTitle","isRTL","pageProgression","bookFlipLeft","bookFlipRight","$BRfooter","$BRnav","_renderControls","append","$br","$slider","slider","animate","min","getNumLeafs","value","currentIndex","range","ui","updateNavPageNum","jumpToIndex","_bindViewModeButton","thisLink","location","replace","logoHtml","showLogo","logoURL","bookTitle","index","pageNum","getPageNum","numLeafs","getPageProp","pageNumVal","isNaN","getNavPageNumHtml","pageType","html","getNavPageNumString","undefined","bookLengthLabel","DEFAULT_OPTIONS","defaults","padding","uiAutoHide","thumbRowBuffer","thumbColumns","thumbMaxLoading","thumbPadding","flipSpeed","showToolbar","showNavbar","navBarTitle","imagesBaseURL","reduceSet","reductionFactors","reduce","autofit","onePage","twoPage","coverInternalPadding","coverExternalPadding","bookSpineDivWidth","onePageMinBreakpoint","bookUrl","bookUrlText","bookUrlTitle","enableBookTitleLink","bookLanguage","metadata","thumbnail","bookUrlMoreInfo","enableExperimentalControls","el","ppi","protected","plugins","textSelection","vars","getPageWidth","getPageHeight","getPageURI","getPageSide","getSpreadIndices","leafNumToIndex","getEmbedCode","bookLeft","bookRight","fullScreen","startFullscreen","autoResize","useSrcSet","Toolbar","$BRtoolbar","$titleSectionEl","href","buildToolbarElement","hide","updateToolbarZoom","canSwitchToMode","blankShareDiv","blankInfoDiv","appendTo","buildInfoDiv","buildShareDiv","colorbox","inline","opacity","onLoad","trigger","slice","toUpperCase","toFixed","$shareDiv","pageView","bookView","embedHtml","$form","form","parents","params","page","select","click","createPopup","param","u","_getSocialShareUrl","url","body","encodeURI","protocol","hostname","pathname","$infoDiv","$leftCol","escapeHTML","$rightCol","extraValueClass","escapedValue","moreInfoText","$footer","$children","css","outerHeight","parseInt","width","height","name","dualScreenLeft","screenLeft","screen","dualScreenTop","screenTop","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","opts","open","BookModel","_medianPageSize","_medianPageSizePixels","_getDataFlattenedCached","widths","heights","sort","floor","pagesIterator","widthInches","heightInches","clamp","clampedIndex","pageIndices","getPageIndices","indices","pageIntStr","pageIndex","err","_getDataFlattened","rotate","propName","fallbackValue","_getDataProp","pindex","leafNum","findIndex","d","pageString","leafMatch","exec","getPageIndex","loop","PageModel","start","Infinity","combineConsecutiveUnviewables","getPage","isConsecutiveUnviewable","prevPageSide","unviewablesChunkStart","flattened","flatMap","spread","pageSide","viewable","unviewablesStart","dataf","invalidIndex","book","isViewable","_rawData","newViewableState","prev","findPrev","findNext","initialReduce","topReduce","decr","reduces","r","getURI","next","previousStylePropertyCache","WeakMap","styleMap","styleInfo","part","committer","parts","Error","style","previousStyleProperties","cssText","strings","Set","delete","removeProperty","setProperty","ModeSmoothZoom","ev","oldScale","$visibleWorld","willChange","detachCtrlZoom","detachScrollListeners","lastEvent","pinchMoveFrame","pinchMoveFramePromiseRes","pinchMoveFramePromise","Promise","res","bufferFn","updateScaleCenter","center","scale","scaleCenter","attachCtrlZoom","attachScrollListeners","_pinchEnd","ctrlKey","zoomMultiplier","test","platform","sign","deltaY","resolve","attached","requestAnimationFrame","Hammer","hammer","$container","touchAction","_preventEvent","_pinchStart","_pinchMove","_pinchCancel","_handleCtrlWheel","passive","bc","htmlDimensionsCacher","boundingClientRect","HTMLDimensionsCacher","getBoundingClientRect","debounce","updateClientSizes","win","debouncedUpdateClientSizes","Mode1UpLit","customElement","LitElement","property","calcScreenDPI","Number","hasChanged","arrChanged","query","wToR","worldUnitsToRenderedPixels","worldDimensions","smooth","scrollBehavior","worldUnitsToVisiblePixels","pageTops","SPACING_IN","setTimeout","ZOOM_FACTOR","changedProps","smoothZoomer","attach","startIndex","computeDefaultScale","has","pages","genToArray","computeWorldDimensions","computePageTops","visiblePages","computeVisiblePages","throttledUpdateRenderedPages","displayedIndices","p","updateFirstIndex","updateNavIndexThrottled","oldVal","transform","updateViewportOnZoom","$world","attachResizeListener","detachResizeListener","detach","inches","screenDPI","realWorldReduce","px","renderedPixelsToVisiblePixels","renderedPixelsToWorldUnits","visiblePixelsToRenderedPixels","worldStyle","renderedPages","renderPage","pageContainerCache","_createPageContainer","wToV","containerWidth","visiblePixelsToWorldUnits","pageContainerEl","createPageContainer","update","dimensions","vToW","visibleRegion","throttle","computeRenderedPages","requestUpdate","spacing","result","containerWidthIn","sum","PT","PB","VT","newScale","container","T","L","W","H","F","XPOS","YPOS","newCenter","updateVisibleRegion","Mode1Up","bookModel","mode1UpLit","$el","everShown","startLeaf","empty","overflow","initFirstRender","updateBrClasses","noAnimate","direction","Mode2Up","leafEdgeL","leafEdgeR","pageContainers","_scale","$brTwoPageView","newVal","currentIndexL","currentIndexR","flipBackToIndex","flipFwdToIndex","$twoPageViewEl","indexL","indexR","leftLeafCss","rightLeafCss","stopFlipAnimations","calculateReductionFactors","reductionFactor","nextReduce","pageScale","oldCenter","getViewCenter","prepareTwoPageView","percentageX","percentageY","resizeBRcontainer","calculateSpreadSize","mainContainerCss","centerView","coverDiv","spreadCoverCss","$spreadLayers","leafEdgeRCss","leafEdgeLCss","spineCss","centerPercentageX","centerPercentageY","drawNewSpread","startingReduce","startingIndices","targetLeaf","firstIndex","firstDisplayableIndex","lastDisplayableIndex","currentSpreadIndices","sameReducer","sameStart","hasNewDisplayPagesOrDimensions","prunePageContainers","prefetch","transformOrigin","attachMouseHandlers","totalWidth","totalHeight","createElement","div","preparePopUp","drawLeafs","twoPagePopUp","zIndex","leafEdges","$leafEdge","jumpIndexForPageX","jumpIndexForLeftEdgePageX","leftOffset","jumpIndexForRightEdgePageX","show","jumpIndex","getPageName","offset","spreadSize","secondIndex","getIdealSpreadSize","getSpreadSizeFromReduce","scaledWL","scaledWR","edgeWidth","totalLeafEdgeWidth","leafEdgeWidthL","leafEdgeWidth","leafEdgeWidthR","bookCoverDivWidth","coverWidth","bookCoverDivHeight","leftGutterOffset","gutterOffsetForIndex","leftWidthFromCenter","rightWidthFromCenter","largestWidthFromCenter","middle","gutter","bookCoverDivLeft","bookCoverDivTop","bookSpineDivHeight","bookSpineDivLeft","bookSpineDivTop","ratio","ideal","first","_getPageHeight","_getPageWidth","second","firstIndexRatio","secondIndexRatio","maxLeafEdgeWidth","widthOutsidePages","heightOutsidePages","round","nativeWidth","nativeHeight","isZoomedIn","getAutofitReduce","concat","_reduceSort","warn","animating","leafEdgeTmp","minDisplayedIndex","previousIndices","prepareFlipLeftToRight","flipLeftToRight","prepareFlipRightToLeft","flipRightToLeft","alert","newIndexL","newIndexR","leftLeaf","oldLeafEdgeWidthL","newLeafEdgeWidthL","leafEdgeTmpW","currWidthL","newWidthL","newWidthR","leftEdgeTmpLeft","right","resizeSpread","animationFinishedCallback","textSelectionPlugin","stopPageFlip","maxDisplayedIndex","nextPage","nextIndices","oldLeafEdgeWidthR","newLeafEdgeWidthR","scaledW","speed","$page","closest","prevL","prevR","leftCSS","rightCSS","nextL","nextR","totalPageWidth","containerOffset","viewOffset","viewWidth","containerClientWidth","intoViewX","viewHeight","containerClientHeight","intoViewY","flipAreaWidth","bottom","pageL","pageT","lowPage","highPage","ADJACENT_PAGES_TO_LOAD","position","baseLeafCss","heightCss","border","visibility","ModeThumb","seekIndex","leafHeight","seekTop","rightPos","bottomPos","maxRight","currentRow","leafIndex","leafMap","leafWidth","thumbWidth","leafs","num","$brPageViewEl","pageViewBuffer","scrollBottom","leafTop","leafBottom","rowsToDisplay","imagesToDisplay","leastVisible","mostVisible","firstRow","lastRow","row","notInArray","displayedRows","leaf","leafLeft","idealReduce","thumbReduce","pageContainer","suppressFragmentChange","imgPlaceholder","$img","imageCache","image","$parent","parent","oldColumns","prepare","thumbnailColumns","idealThumbnailWidth","overflowY","overflowX","bindGestures","getThumbnailWidth","rowHeight","IntegerReduceSet","n","Pow2ReduceSet","log2","NAMED_REDUCE_SETS","pow2","integer","ImageCache","cache","defaultScale","sufficientImages","loaded","bestReduce","_serveImageElement","cacheImg","idealMaxReduce","candidates","lowerResImages","higherRestImages","validReduce","cacheEntry","src","getURISrcSet","one","BookReader","overrides","jQuery","defaultOptions","optionOverrides","setup","exposeOverrideableMethod","Class","classKey","method","brMethod","classToBr","cls","brToClass","_overrideable","toString","DebugConsole","init","version","constNavAnimationDuration","constResizeAnimationDuration","eventNames","enableSearch","prevReadMode","imgs","prefetchedImgs","flipDelay","lastDisplayableIndex2up","isFullscreenActive","lastScroll","titleLeaf","popup","_models","_components","navbar","toolbar","_modes","mode1Up","mode2Up","modeThumb","getActivePageContainerElements","containerEls","values","pc","toArray","getActivePageContainerElementsForIndex","util","utils","extendParams","newParams","modifiedNewParams","parsePageString","initParams","defaultParams","paramsFromFragment","pageFound","enablePageResume","getResumeValue","enableUrlPlugin","urlParams","urlReadFragment","keys","urlReadHashFragment","urlMode","goToFirstResult","initialSearchTerm","search","searchTerm","URLSearchParams","readQueryString","decodeURIComponentPlus","getLocationSearch","getLocationHash","hash","queryString","found","getInitialMode","nextMode","windowWidth","enableMobileNav","initComplete","isTouchDevice","initEmbedNavbar","initToolbar","initNavbar","switchNavbarControls","updateFromParams","initUIStrings","bindNavigationHandlers","setupKeyListeners","Date","getTime","drawLeafsThrottled","toggleFullscreen","props","eventName","polyfillCustomEvent","dispatchEvent","CustomEvent","bubbles","composed","detail","callback","resizePageView1up","centerPageView","prepareThumbnailView","twoPageGetViewCenter","doRecenter","twoPageCenterView","self","keydown","keyCode","isInputActive","last","zoom","drawLeafsThumbnail","drawLeafsTwoPage","PageContainer","isProtected","loadingImage","jElement","numTouches","cancelable","touches","lazyLoadThumbnails","lazyLoadImage","zoomThumb","zoom1up","zoom2up","getToolBarHeight","getFooterHeight","scrollWidth","quantizeReduce","quantized","newDistance","currentReduce","newReduceIndex","lastIndex","autoMatch","rf","choice","match","a","b","jumpToPage","_isIndexDisplayed","newIndex","getPrevReadMode","activeMode","unprepare","prepareOnePageView","setSpreadIndices","twoPageCalculateReductionFactors","modeToClass","isFullscreen","bindKeyboardControls","exitFullScreen","enterFullscreen","_fullscreenCloseHandler","keyup","rightmost","leftmost","scrollDown","inArray","onePageGetAutofitHeight","_scrollAmount","scrollUp","prefetchImg","pruneUnusedImgs","resizePageView","onePageCalculateViewDimensions","calculateViewDimensions","twoPageGetAutofitReduce","setHilightCss2UP","setHilightCss","prepareTwoPagePopUp","twoPageIsZoomedIn","twoPageSetCursor","setCursor","getPageWidth2UP","twoPageGutter","twoPageTop","twoPageCoverWidth","twoPageFlipAreaHeight","flipAreaHeight","twoPageFlipAreaWidth","twoPageFlipAreaTop","flipAreaTop","twoPageLeftFlipAreaLeft","leftFlipAreaLeft","twoPageRightFlipAreaLeft","rightFlipAreaLeft","initEmbed","updateNavIndex","updateNavIndexDebounced","jIcons","navigationControls","book_left","book_right","book_up","book_down","book_top","book_bottom","book_leftmost","book_rightmost","onepg","thumb","twopg","zoom_in","zoom_out","full","$brNavCntlBtmEl","$brNavCntlTopEl","promises","hasClass","promise","delay","when","done","mouseover","mouseleave","initSwipeData","navigationMousemoveHandler","swipeMousedownHandler","bindMozTouchHandlers","unbindNavigationHandlers","navkey","hideNavigation","showNavigation","_swipe","mightBeSwiping","didSwipe","mightBeDraggin","didDrag","startTime","startX","startY","lastX","lastY","deltaX","deltaT","swipeMouseupHandler","swipeMousemoveHandler","mightBeDragging","returnValue","cancelBubble","absX","absY","minSwipeLength","navigationIsVisible","setNavigationView","animationLength","animationType","resizePageContainer","toolbarHeight","navbarHeight","getMedianPageSize","enableThemesPlugin","theme","updateTheme","_getPageURISrcset","_getPageURI","showProgressPopup","msg","onCloseCallback","closeButton","setAttribute","icon","removeProgressPopup","bar","msgdiv","innerHTML","titles","reloadImages","elem","complete","naturalHeight","$heightEl","paramsFromCurrent","fragment","substr","oldStyleLeafNum","urlArray","urlHash","fragmentFromParams","separator","fragments","encodeURIComponentPlus","queryStringFromParams","currQueryString","selector","curCSS","currentRun","$log","prepend","submit","eval","logToScreen","_realLog","log","args","onerror","JSON","stringify","$lastEntry","children","alreadyLoaded","imageLoaded","nextBestLoadedReduce","getBestLoadedReduce","prependTo","backgroundLayers","createSVGPageLayer","svg","createElementNS","renderBoxesInPageContainerLayer","layerClass","boxes","containerEl","mountedSvg","imgEl","insertAfter","box","appendChild","l","t","rect","disableSelect","jObject","onselectstart","cssPercentage","array","getActiveElement","doc","recurseShadowDom","activeElement","shadowRoot","activeEl","tagName","getIFrameDocument","iframe","outer","contentWindow","contentDocument","decodeURIComponent","encodeURIComponent","func","wait","immediate","timeout","context","later","callNow","clearTimeout","threshold","deferTimer","now","PolyfilledCustomEvent","createEvent","initCustomEvent","dpi","offsetWidth","removeChild","nums","cur","acc","gen","item","arrEquals","arr1","arr2","every","module","exports","it","TypeError","String","isObject","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","f","configurable","key","charAt","S","unicode","Constructor","$forEach","STRICT_METHOD","arrayMethodIsStrict","callbackfn","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","toLength","createProperty","getIteratorMethod","arrayLike","step","iterator","O","C","argumentsLength","mapfn","mapping","iteratorMethod","call","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","that","specificCreate","boundFunction","some","filterReject","fails","V8_VERSION","SPECIES","METHOD_NAME","constructor","foo","Boolean","argument","aFunction","IS_RIGHT","memo","mergeSort","comparefn","insertionSort","merge","j","llength","rlength","lindex","rindex","isArray","originalArray","arraySpeciesConstructor","anObject","iteratorClose","ENTRIES","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","from","SKIP_CLOSING","ITERATION_SUPPORT","object","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","ownKeys","getOwnPropertyDescriptorModule","source","getOwnPropertyDescriptor","MATCH","regexp","error1","error2","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","DESCRIPTORS","bitmap","enumerable","writable","toPropertyKey","propertyKey","ordinaryToPrimitive","hint","createIteratorConstructor","setPrototypeOf","createNonEnumerableProperty","redefine","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","proto","forced","path","wrappedWellKnownSymbolModule","Symbol","global","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","firefox","UA","userAgent","Pebble","classof","process","getBuiltIn","Deno","versions","v8","webkit","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","regexpExec","RegExpPrototype","RegExp","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","re","flags","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","$exec","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","targetIndex","sourceIndex","mapFn","isExtensible","preventExtensions","c","factories","construct","argsLength","list","Function","partArgs","variable","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","replacement","tailPos","symbols","ch","capture","check","globalThis","g","hasOwnProperty","hasOwn","propertyIsEnumerable","dummy","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","uid","FREEZING","REQUIRED","METADATA","id","setMetadata","objectID","weakData","meta","enable","getOwnPropertyNames","splice","fastKey","getWeakData","onFreeze","NATIVE_WEAK_MAP","objectHas","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","facade","STATE","enforce","getterFor","arg","feature","detection","normalize","POLYFILL","NATIVE","string","toLowerCase","isRegExp","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","iterable","unboundFunction","iterFn","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","condition","callFn","returnMethod","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","flush","head","notify","toggle","node","then","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","domain","exit","enter","nextTick","createTextNode","observe","characterData","task","getOwnPropertySymbols","symbol","URL","searchParams","toJSON","username","host","PromiseCapability","reject","$$resolve","$$reject","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","assign","A","B","alphabet","chr","activeXDocument","defineProperties","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","display","Properties","IE8_DOM_DEFINE","$defineProperty","P","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","V","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","TO_ENTRIES","input","pref","valueOf","newPromiseCapability","promiseCapability","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","R","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","group","raw","groups","sticky","charsAdded","strCopy","multiline","ignoreCase","dotAll","$RegExp","is","CONSTRUCTOR_NAME","TAG","SHARED","copyright","defaultConstructor","toInteger","requireObjectCoercible","CONVERT_TO_STRING","pos","size","charCodeAt","codeAt","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","fromCharCode","digitToBasic","digit","adapt","numPoints","firstTime","k","baseMinusTMin","base","encode","currentValue","output","inputLength","counter","extra","ucs2decode","bias","basicLength","handledCPCount","handledCPCountPlusOne","RangeError","q","qMinusT","baseMinusT","encoded","labels","count","whitespace","ltrim","rtrim","trim","defer","channel","port","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","queue","run","runner","listener","post","postMessage","port2","port1","onmessage","importScripts","ceil","isSymbol","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","len","E","$filter","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","$find","FIND","checkCorrectnessOfIteration","$includes","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","kind","Arguments","nativeJoin","ES3_STRINGS","$map","$reduce","CHROME_VERSION","HAS_SPECIES_SUPPORT","nativeSlice","fin","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","code","v","itemsLength","items","arrayLength","getSortCompare","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","to","actualStart","dateToPrimitive","DatePrototype","FunctionPrototype","FunctionPrototypeToString","nameRE","LN2","inheritIfRequired","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","radix","maxCode","digits","NaN","NumberWrapper","thisNumberValue","repeat","nativeToFixed","pow","multiply","c2","divide","dataToString","s","fractionDigits","z","number","fractDigits","x2","$freeze","freeze","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","getOwnPropertyDescriptors","nativeGetPrototypeOf","nativeKeys","$values","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","NativePromise","redefineAll","setSpecies","anInstance","iterate","speciesConstructor","microtask","promiseResolve","hostReportErrors","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","wrap","capability","$promiseResolve","remaining","alreadyCalled","race","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","instance","receiver","$toString","TO_STRING","nativeToString","NOT_GENERIC","INCORRECT_NAME","notARegExp","correctIsRegExpLogic","searchString","STRING_ITERATOR","point","fixRegExpWellKnownSymbolLogic","advanceStringIndex","getSubstitution","regExpExec","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","SEARCH","nativeSearch","searcher","previousLastIndex","callRegExpExec","arrayPush","MAX_UINT32","SPLIT","nativeSplit","internalSplit","limit","lim","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","originalExec","NativeSymbol","description","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","defineWellKnownSymbol","nativeObjectCreate","getOwnPropertyNamesExternal","HIDDEN","$stringify","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","space","$replacer","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","ArrayIteratorMethods","ArrayValues","USE_NATIVE_URL","getIterator","nativeFetch","NativeRequest","RequestPrototype","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","plus","sequences","percentSequence","bytes","percentDecode","sequence","deserialize","serialize","parseSearchParams","attribute","entry","attributes","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","getAll","entriesIndex","sliceIndex","wrapRequestOptions","headers","fetch","RequestConstructor","Request","getState","EOF","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getInternalURLState","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","ipv4","pop","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","char","serializeHost","ignore0","unshift","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","buffer","seenAt","seenBracket","seenPasswordToken","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","origin","getOrigin","getProtocol","getUsername","getPassword","getHost","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","getter","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","exportName","VENDOR_PREFIXES","TEST_ELEMENT","setTimeoutContext","bindFn","invokeArrayArg","obj","deprecate","message","deprecationMessage","stack","nextKey","dest","inherit","child","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","types","splitStr","removeEventListeners","hasParent","parentNode","inStr","findByKey","uniqueArray","prefixed","prefix","camelProp","_uniqueId","getWindowForElement","ownerDocument","defaultView","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","angle","getAngle","getDistance","offsetDelta","prevDelta","prevInput","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","lastInterval","computeIntervalInputData","srcEvent","computeInputData","recognize","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","button","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","compute","actions","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","STATE_FAILED","Recognizer","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","preset","Manager","handlers","oldCssProps","inputClass","toggleCssProps","recognizeWith","requireFailure","cssProps","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","attrTest","optionPointers","isRecognized","isValid","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","force","curRecognizer","existing","events","gestureEvent","gesture","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","$overlay","$box","$wrap","$content","$topBorder","$leftBorder","$rightBorder","$bottomBorder","$related","$window","$loaded","$loadingBay","$loadingOverlay","$title","$current","$slideshow","$next","$prev","$close","$groupControls","interfaceHeight","interfaceWidth","loadedHeight","loadedWidth","photo","active","closing","loadingTimer","publicMethod","transition","fadeOut","initialWidth","maxWidth","initialHeight","maxHeight","scalePhotos","scrolling","preloading","overlayClose","escKey","arrowKey","fixed","fastIframe","reposition","slideshow","slideshowAuto","slideshowSpeed","slideshowStart","slideshowStop","photoRegex","retinaImage","retinaUrl","retinaSuffix","current","previous","xhrError","imgError","returnFocus","trapFocus","onOpen","onComplete","onCleanup","onClosed","rel","createImg","img","Image","attrs","createIframe","frameBorder","allowTransparency","allowFullscreen","boxElement","event_load","event_complete","event_cleanup","event_closed","event_purge","$events","requests","previousCSS","$tag","winheight","Settings","dataAttr","isFunction","getIndex","increment","setSize","dimension","isImage","devicePixelRatio","contains","focus","setClass","triggerHandler","timeOut","launch","outerWidth","w","h","parseFloat","cursor","setResize","$inline","prep","request","mw","mh","$target","eq","insertBefore","replaceWith","percent","marginTop","load","status","contents","appendHTML","support","role","tabindex","$obj","clickHandler","shiftKey","altKey","metaKey","live","addBindings","old","loadedCallback","modalDimensions","tempSpeed","dequeue","duration","scrolltop","total","removeFilter","removeAttribute","fadeTo","removeData","touchHandled","mouseProto","_mouseInit","_mouseDestroy","_touchStart","_mouseCapture","_touchMoved","simulateMouseEvent","_touchMove","_touchEnd","proxy","simulatedType","simulatedEvent","initMouseEvent","baseEasings","dataSpace","dataSpaceStyle","dataSpaceAnimated","effects","effect","colors","rplusequals","stringParsers","parse","execResult","color","Color","green","blue","alpha","spaces","rgba","red","hsla","hue","saturation","lightness","propTypes","mod","supportElem","allowEmpty","def","stringParse","inst","_rgba","parser","parsed","spaceName","transparent","hue2rgb","backgroundColor","jquery","nodeType","_default","compare","same","localCache","isCache","_space","used","other","startColor","startValue","endValue","blend","opaque","rgb","toRgbaString","toHslaString","toHexString","includeAlpha","diff","arr","local","vtype","_hsla","hook","hooks","cssHooks","curElem","fx","colorInit","borderColor","expand","expanded","aqua","black","fuchsia","gray","lime","maroon","navy","olive","purple","silver","teal","white","yellow","orig","classAnimationActions","shorthandStyles","borderBottom","borderLeft","borderRight","borderTop","borderWidth","margin","getElementStyles","getComputedStyle","currentStyle","styles","camelCase","setAttr","addBack","prevObject","animateClass","easing","o","applyClassChange","animated","baseClass","allAnimations","action","oldStyle","newStyle","styleDifference","dfd","Deferred","classNames","toggleClass","switchClass","_normalizeArguments","isPlainObject","speeds","standardAnimationOption","parseClip","expr","filters","uiBackCompat","save","restore","setMode","createWrapper","fontSize","background","removeWrapper","define","scaledDimensions","clipToBox","animation","clip","queueLength","saveStyle","restoreStyle","hidden","getBaseline","createPlaceholder","placeholder","cssPosition","marginBottom","marginLeft","marginRight","nodeName","removePlaceholder","dataKey","cleanUp","setTransition","factor","unit","cssUnit","effectMethod","defaultMode","queueName","modes","prefilter","normalizedMode","cssClip","clipObj","transfer","targetFixed","fixTop","fixLeft","endPosition","startPosition","clipInit","Sine","cos","Circ","Elastic","sin","Back","Bounce","bounce","easeIn","ie","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","widgetUuid","widgetSlice","cleanData","elems","_data","widget","existingConstructor","basePrototype","proxiedPrototype","fullName","Widget","_createWidget","_proto","_childConstructors","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","isMethodCall","methodValue","pushStack","_init","defaultElement","classes","disabled","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","_destroy","_removeClass","removeAttr","curOption","_setOptions","_setOption","_setOptionClasses","elements","currentElements","_classes","_toggleClass","disable","processClassString","checkOption","unique","not","_untrackClassesElement","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","guid","_off","_delay","_hoverable","mouseenter","_focusable","focusin","focusout","Event","isDefaultPrevented","defaultEffect","hasOptions","effectName","isEmptyObject","mouseHandled","cancel","_mouseDown","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","elIsCancel","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","documentMode","ignoreMissingWhich","_mouseDrag","_mouseStop","orientation","change","slide","numPages","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_calculateNewMax","_refresh","_createRange","_createHandles","_setupEvents","_refreshValue","handleCount","existingHandles","handles","handle","_valueMin","_handleEvents","normValue","closestHandle","mouseOverHandle","elementSize","elementOffset","_normValueFromMouse","_valueMax","thisDistance","_lastChangedValue","_start","_clickOffset","_slide","_stop","_change","pixelTotal","pixelMouse","percentMouse","valueTotal","valueMouse","_trimAlignValue","_uiHash","uiHash","handleIndex","_hasMultipleValues","otherVal","newValues","newValue","_value","vals","_values","valsLength","_refreshRange","valModStep","alignValue","_precision","precision","_precisionOf","decimal","lastValPercent","valPercent","valueMin","valueMax","oRange","_set","curVal","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","reverse","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","removeNodesFromTemplate","nodesToRemove","walker","createTreeWalker","partIndex","nextActiveIndexInTemplateParts","nodeIndex","removeCount","nodesToRemoveInTemplate","currentRemovingNode","nextNode","currentNode","previousSibling","countNodes","getTemplateCacheKey","scopeName","compatibleShadyCSSVersion","ShadyCSS","prepareTemplateDom","shadyTemplateFactory","cacheKey","templateCache","stringsArray","keyString","Map","getTemplateElement","TEMPLATE_TYPES","shadyRenderSet","JSCompiler_renameProperty","_obj","defaultConverter","toAttribute","fromAttribute","notEqual","defaultPropertyDeclaration","converter","reflect","UpdatingElement","HTMLElement","super","initialize","finalize","_classProperties","_attributeNameForProperty","_attributeToPropertyMap","superProperties","_ensureClassProperties","noAccessor","getPropertyDescriptor","oldValue","requestUpdateInternal","superCtor","propKeys","_updateState","_updatePromise","_enableUpdatingResolver","_changedProperties","_saveInstanceProperties","_v","_instanceProperties","_applyInstanceProperties","connectedCallback","enableUpdating","disconnectedCallback","attributeChangedCallback","_attributeToProperty","_propertyToAttribute","attrValue","_propertyValueToAttribute","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","shouldUpdate","changedProperties","_markUpdated","firstUpdated","updated","_getUpdateComplete","classOrDescriptor","clazz","customElements","legacyCustomElement","finisher","standardCustomElement","standardProperty","placement","initializer","protoOrDescriptor","legacyProperty","renderRoot","legacyQuery","standardQuery","ElementProto","Element","msMatchesSelector","webkitMatchesSelector","supportsAdoptingStyleSheets","nativeShadow","Document","CSSStyleSheet","constructionToken","CSSResult","safeToken","_styleSheet","replaceSync","textFromCSSResult","renderNotImplemented","userStyles","getStyles","addStyles","reduceRight","_styles","cssRules","rule","_getUniqueStyles","createRenderRoot","ShadowRoot","adoptStyles","attachShadow","adoptedStyleSheets","styleSheet","_needsShimAdoptedStyleSheets","ScopingShim","prepareAdoptedCssText","localName","hasUpdated","styleElement","templateResult","render","eventContext","textContent","hasRendered","needsScoping","firstScopeRender","renderContainer","createDocumentFragment","templateFactory","renderedDOM","templateElement","querySelectorAll","prepareTemplateStyles","condensedStyle","templates","removeStylesFromLitTemplates","refNode","walkerIndex","insertNodeIntoTemplate","firstChild","cloneNode","removes","directives","directive","isDirective","isCEPolyfill","polyfillWrapFlushCallback","reparentNodes","before","nextSibling","removeNodes","noChange","nothing","isPrimitive","isIterable","AttributeCommitter","dirty","_createPart","AttributePart","_getValue","commit","setValue","NodePart","__pendingValue","appendInto","startNode","endNode","insertAfterNode","ref","appendIntoPart","__insert","insertAfterPart","__commitText","__commitTemplateResult","Node","__commitNode","__commitIterable","valueAsString","processor","_clone","itemParts","itemPart","BooleanAttributePart","PropertyCommitter","single","PropertyPart","eventOptionsSupported","_e","EventPart","__boundHandleEvent","handleEvent","newListener","oldListener","shouldRemoveListener","once","shouldAddListener","__options","getOptions","templateCaches","TemplateInstance","__parts","importNode","handleTextExpression","handleAttributeExpressions","adoptNode","upgrade","policy","trustedTypes","createPolicy","createHTML","commentMarker","TemplateResult","getHTML","isCommentBinding","commentOpen","lastIndexOf","attributeMatch","marker","nodeMarker","markerRegex","boundAttributeSuffix","Template","lastPartIndex","hasAttributes","endsWith","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","getAttribute","statics","insert","createMarker","suffix","isTemplatePartActive","createComment","__webpack_module_cache__","deferred","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkIds","priority","notFulfilled","fulfilled","__esModule","definition","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
|