From aa6a1d13d722884f0173abb3c2dedf97746cc01c Mon Sep 17 00:00:00 2001 From: Jacob Cain <115182890+jrcain-usgs@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:45:45 -0700 Subject: [PATCH] Docs pruning (#5628) * remove unused readthedocs template * Doxygen API Docs, header and footer, remove depreciated config * remove old vis * remove homepage windowing js * remove feed2js * remove progtest docs * remove isishistory and 'documents' structure * remove old vis (part 2) * remove unused toc and more unused javascripts * remove one more utility js reference * moved one-line files to inline in other files * menu arrow fix for api docs * move moon surface banner to be with rest of images * reorganized images * use menupath variable in more places * remove unused blackborderimage css * js.map files * favicon * css category fix * css category fix part 2 * css category fix part 3 --- .readthedocs.yaml | 18 - isis/cmake/BuildDocs.cmake | 94 +- isis/make/isismake.apps | 6 - isis/make/isismake.objs | 3 - .../src/docsys/Application/build/TOCindex.xsl | 293 ---- .../Application/build/TOCindex_alpha.xsl | 14 +- .../Application/build/TOCindex_category.xsl | 16 +- .../Application/build/TOCindex_oldvnew.xsl | 14 +- .../docsys/Application/build/toc_footer.xml | 1 - .../docsys/Application/build/toc_header.xml | 1 - isis/src/docsys/Application/data/Makefile | 4 +- .../ProgTester/IsisApplicationDocStyle.xsl | 1351 ----------------- .../Tabbed/styles/IsisApplicationDocStyle.xsl | 20 +- isis/src/docsys/Makefile | 3 +- isis/src/docsys/Object/Makefile | 30 +- isis/src/docsys/Object/build/Developer.conf | 71 +- .../docsys/Object/build/IsisObjectFooter.html | 68 +- .../docsys/Object/build/IsisObjectHeader.html | 245 ++- isis/src/docsys/Object/build/Programmer.conf | 68 +- .../docsys/Object/build/isisDoxyDefs.doxydef | 2 +- isis/src/docsys/assets/icons/USGS_logo55h.png | Bin 13100 -> 0 bytes isis/src/docsys/assets/icons/firstgov.gif | Bin 2090 -> 0 bytes .../docsys/assets/icons/firstgov_trans.gif | Bin 2721 -> 0 bytes isis/src/docsys/assets/icons/littleVIS.gif | Bin 634 -> 0 bytes .../img/00-image-licence-source-notice.md | 9 +- .../img/image-source-files}/ISIS_Logo.svg | 0 .../image-source-files}/ISIS_Quicklink.svg | 0 .../image-source-files/historic}/banner.psd | Bin .../image-source-files/historic}/banner2.psd | Bin .../image-source-files/historic}/banner3.psd | Bin .../image-source-files/historic}/banner4.psd | Bin .../historic}/isis_bg_texture.jpg | Bin .../historic}/isis_wallpaper.psd | Bin .../historic/jpg}/banner.jpg | Bin .../historic/jpg}/isis_bg.jpg | Bin .../historic/jpg}/isis_main.jpg | Bin .../historic/jpg}/isis_menu.jpg | Bin .../historic/jpg}/isis_wallpaper.jpg | Bin .../img/image-source-files/isis-logo.ai | 517 +++++++ .../assets/{banners => img}/moon-cr.jpg | Bin .../docsys/assets/scripts/feed2js/build.php | 213 --- .../docsys/assets/scripts/feed2js/feed2js.php | 316 ---- .../assets/scripts/feed2js/feed2js_config.php | 66 - .../assets/scripts/feed2js/feed2php.inc | 300 ---- isis/src/docsys/assets/scripts/feed2js/footer | 9 - .../feed2js/magpie/extlib/Snoopy.class.inc | 1250 --------------- .../scripts/feed2js/magpie/rss_cache.inc | 200 --- .../scripts/feed2js/magpie/rss_fetch.inc | 458 ------ .../scripts/feed2js/magpie/rss_parse.inc | 613 -------- .../scripts/feed2js/magpie/rss_utils.inc | 67 - .../assets/scripts/feed2js/magpie_debug.php | 87 -- .../assets/scripts/feed2js/magpie_simple.php | 28 - .../assets/scripts/feed2js/nosource.php | 41 - .../docsys/assets/scripts/feed2js/popup.js | 17 - .../docsys/assets/scripts/feed2js/preview.php | 92 -- .../docsys/assets/scripts/feed2js/readme.pdf | Bin 77886 -> 0 bytes .../docsys/assets/scripts/feed2js/style.php | 165 -- .../docsys/assets/scripts/feed2js/style/.css | 103 -- .../assets/scripts/feed2js/style/basic1.css | 80 - .../scripts/feed2js/style/bbc_style.css | 1 - .../assets/scripts/feed2js/style/blackbox.css | 1 - .../scripts/feed2js/style/css_classes.gif | Bin 5838 -> 0 bytes .../assets/scripts/feed2js/style/dog.css | 86 -- .../assets/scripts/feed2js/style/dog.jpg | Bin 4021 -> 0 bytes .../assets/scripts/feed2js/style/essc.css | 1 - .../assets/scripts/feed2js/style/feed2js.jpg | Bin 8551 -> 0 bytes .../scripts/feed2js/style/greenbars.css | 84 - .../assets/scripts/feed2js/style/kp.css | 1 - .../assets/scripts/feed2js/style/main.css | 75 - .../scripts/feed2js/style/marooned2.css | 1 - .../scripts/feed2js/style/nobullets.css | 1 - .../assets/scripts/feed2js/style/none.css | 61 - .../assets/scripts/feed2js/style/outlive.css | 76 - .../scripts/feed2js/style/play-button.jpg | Bin 751 -> 0 bytes .../assets/scripts/feed2js/style/plum.css | 1 - .../assets/scripts/feed2js/style/rss.css | 1 - .../assets/scripts/feed2js/style/sekodeng.css | 1 - .../scripts/feed2js/style/style_pile.php | 20 - .../scripts/feed2js/style/zanestate.css | 85 -- .../assets/scripts/feed2js/style_preview.php | 98 -- isis/src/docsys/assets/scripts/footer.js | 46 - isis/src/docsys/assets/scripts/homepage.js | 65 - .../docsys/assets/scripts/navigationBar.js | 272 ---- .../assets/scripts/uswds-init.min.js.map | 1 + .../docsys/assets/scripts/uswds.min.js.map | 1 + isis/src/docsys/assets/scripts/utility.js | 68 - .../src/docsys/assets/styles/IsisStyleAPI.css | 3 + .../docsys/assets/styles/IsisStyleCommon.css | 11 +- .../src/docsys/build/IsisDocumentTOCbuild.xsl | 74 - .../docsys/build/IsisInlineDocumentBuild.xsl | 42 - .../src/docsys/build/IsisPrimaryPageBuild.xsl | 305 ---- isis/src/docsys/build/IsisSubPageBuild.xsl | 281 ---- isis/src/docsys/build/doctoc_footer.xml | 1 - isis/src/docsys/build/doctoc_header.xml | 1 - isis/src/docsys/build/main.xsl | 1 - .../documents/IsisHistory/IsisHistory.xml | 513 ------- .../IsisHistory/images/computer_room.jpg | Bin 137174 -> 0 bytes .../documents/IsisHistory/images/ella.jpg | Bin 115133 -> 0 bytes .../documents/IsisHistory/images/grinnell.jpg | Bin 94232 -> 0 bytes .../IsisHistory/images/grinnell_station.jpg | Bin 193477 -> 0 bytes .../IsisHistory/images/screenshot_crop.jpg | Bin 67899 -> 0 bytes .../IsisHistory/images/screenshot_lowpass.jpg | Bin 76936 -> 0 bytes .../IsisHistory/images/screenshot_sharpen.jpg | Bin 67955 -> 0 bytes .../documents/IsisHistory/images/tae.jpg | Bin 150700 -> 0 bytes .../images/thumbs/computer_room.jpg | Bin 9146 -> 0 bytes .../IsisHistory/images/thumbs/ella.jpg | Bin 10422 -> 0 bytes .../IsisHistory/images/thumbs/grinnell.jpg | Bin 18615 -> 0 bytes .../images/thumbs/grinnell_station.jpg | Bin 25998 -> 0 bytes .../images/thumbs/screenshot_crop.jpg | Bin 17076 -> 0 bytes .../images/thumbs/screenshot_lowpass.jpg | Bin 20448 -> 0 bytes .../images/thumbs/screenshot_sharpen.jpg | Bin 20440 -> 0 bytes .../IsisHistory/images/thumbs/tae.jpg | Bin 21401 -> 0 bytes .../IsisHistory/images/thumbs/vax4000.jpg | Bin 18026 -> 0 bytes .../documents/IsisHistory/images/vax4000.jpg | Bin 96162 -> 0 bytes isis/src/docsys/documents/Makefile | 159 -- isis/src/docsys/documents/Makefile-documents | 66 - isis/src/docsys/favicon.ico | Bin 0 -> 184657 bytes rtd_docs/Makefile | 20 - rtd_docs/conf.py | 52 - rtd_docs/environment.yml | 8 - rtd_docs/index.rst | 10 - rtd_docs/make.bat | 35 - 122 files changed, 811 insertions(+), 8771 deletions(-) delete mode 100644 .readthedocs.yaml delete mode 100644 isis/src/docsys/Application/build/TOCindex.xsl delete mode 100644 isis/src/docsys/Application/build/toc_footer.xml delete mode 100644 isis/src/docsys/Application/build/toc_header.xml delete mode 100644 isis/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl delete mode 100644 isis/src/docsys/assets/icons/USGS_logo55h.png delete mode 100644 isis/src/docsys/assets/icons/firstgov.gif delete mode 100644 isis/src/docsys/assets/icons/firstgov_trans.gif delete mode 100644 isis/src/docsys/assets/icons/littleVIS.gif rename {rtd_docs => isis/src/docsys/assets/img/image-source-files}/ISIS_Logo.svg (100%) rename {rtd_docs => isis/src/docsys/assets/img/image-source-files}/ISIS_Quicklink.svg (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/banner.psd (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/banner2.psd (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/banner3.psd (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/banner4.psd (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/isis_bg_texture.jpg (100%) rename isis/src/docsys/{originals/assets/banners => assets/img/image-source-files/historic}/isis_wallpaper.psd (100%) rename isis/src/docsys/assets/{banners => img/image-source-files/historic/jpg}/banner.jpg (100%) rename isis/src/docsys/assets/{banners => img/image-source-files/historic/jpg}/isis_bg.jpg (100%) rename isis/src/docsys/assets/{banners => img/image-source-files/historic/jpg}/isis_main.jpg (100%) rename isis/src/docsys/assets/{banners => img/image-source-files/historic/jpg}/isis_menu.jpg (100%) rename isis/src/docsys/assets/{banners => img/image-source-files/historic/jpg}/isis_wallpaper.jpg (100%) create mode 100755 isis/src/docsys/assets/img/image-source-files/isis-logo.ai rename isis/src/docsys/assets/{banners => img}/moon-cr.jpg (100%) delete mode 100644 isis/src/docsys/assets/scripts/feed2js/build.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/feed2js.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/feed2js_config.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/feed2php.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/footer delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie/extlib/Snoopy.class.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie/rss_cache.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie/rss_fetch.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie/rss_parse.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie/rss_utils.inc delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie_debug.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/magpie_simple.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/nosource.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/popup.js delete mode 100644 isis/src/docsys/assets/scripts/feed2js/preview.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/readme.pdf delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/basic1.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/bbc_style.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/blackbox.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/css_classes.gif delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/dog.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/dog.jpg delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/essc.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/feed2js.jpg delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/greenbars.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/kp.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/main.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/marooned2.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/nobullets.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/none.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/outlive.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/play-button.jpg delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/plum.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/rss.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/sekodeng.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/style_pile.php delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style/zanestate.css delete mode 100644 isis/src/docsys/assets/scripts/feed2js/style_preview.php delete mode 100644 isis/src/docsys/assets/scripts/footer.js delete mode 100644 isis/src/docsys/assets/scripts/homepage.js delete mode 100644 isis/src/docsys/assets/scripts/navigationBar.js create mode 100755 isis/src/docsys/assets/scripts/uswds-init.min.js.map create mode 100755 isis/src/docsys/assets/scripts/uswds.min.js.map delete mode 100644 isis/src/docsys/assets/scripts/utility.js create mode 100644 isis/src/docsys/assets/styles/IsisStyleAPI.css delete mode 100644 isis/src/docsys/build/IsisDocumentTOCbuild.xsl delete mode 100644 isis/src/docsys/build/IsisInlineDocumentBuild.xsl delete mode 100644 isis/src/docsys/build/IsisPrimaryPageBuild.xsl delete mode 100644 isis/src/docsys/build/IsisSubPageBuild.xsl delete mode 100644 isis/src/docsys/build/doctoc_footer.xml delete mode 100644 isis/src/docsys/build/doctoc_header.xml delete mode 100644 isis/src/docsys/documents/IsisHistory/IsisHistory.xml delete mode 100644 isis/src/docsys/documents/IsisHistory/images/computer_room.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/ella.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/grinnell.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/grinnell_station.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/screenshot_crop.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/screenshot_lowpass.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/screenshot_sharpen.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/tae.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/computer_room.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/ella.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/grinnell.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/grinnell_station.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/screenshot_crop.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/screenshot_lowpass.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/screenshot_sharpen.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/tae.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/thumbs/vax4000.jpg delete mode 100644 isis/src/docsys/documents/IsisHistory/images/vax4000.jpg delete mode 100644 isis/src/docsys/documents/Makefile delete mode 100644 isis/src/docsys/documents/Makefile-documents create mode 100644 isis/src/docsys/favicon.ico delete mode 100644 rtd_docs/Makefile delete mode 100644 rtd_docs/conf.py delete mode 100644 rtd_docs/environment.yml delete mode 100644 rtd_docs/index.rst delete mode 100644 rtd_docs/make.bat diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index f23e96c0cb..0000000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# .readthedocs.yaml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Build documentation in the docs/ directory with Sphinx -sphinx: - configuration: rtd_docs/conf.py - -# Optionally build your docs in additional formats such as PDF -formats: - - pdf - -conda: - environment: rtd_docs/environment.yml - diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index 71d73e6738..361ea7adde 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -73,93 +73,14 @@ function(build_upper_level) # Create the main documentaion page. This is located in the version directory execute_process(COMMAND ${XALAN} ${XALAN_VALIDATE_OPTION} ${XALAN_PARAM_OPTION} menuPath \"\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/${docVersion}/index.html ${XALAN_INFILE_OPTION} ${docBuildFolder}/build/homepage.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/main.xsl) + # Copy Favicon + file(COPY ${docBuildFolder}/favicon.ico DESTINATION ${docInstallFolder}/${docVersion}/favicon.ico) endfunction(build_upper_level) - -# Build src/docsys/documents folder. -function(build_documents_folder) - - message("Building documents folder...") - message(" Building table of contents XML...") - - # Create RealeaseNotes.xml, ApiChanges.xml and ParameterChanges.xml if need-be - if(EXISTS "${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml") - execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ReleaseNotes\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ReleaseNotes.xsl OUTPUT_FILE ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotes.xml) - execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ParameterChanges\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ParameterChanges.xsl OUTPUT_FILE ${docBuildFolder}/documents/ParameterChanges/ParameterChanges.xml) - execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"ApiChanges\" ${XALAN_INFILE_OPTION} ${docBuildFolder}/documents/ReleaseNotes/ReleaseNotesList.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/ApiChanges.xsl OUTPUT_FILE ${docBuildFolder}/documents/ApiChanges/ApiChanges.xml) - else() - # Confirm that empty directories are not going to be traversed in loops coming up - message(" ReleaseNotesList.xml does not exist. Removing ReleaseNotes/ ParameterChanges/ and ApiChanges/ directories...") - execute_process(COMMAND rm -rf ${docBuildFolder}/documents/ReleaseNotes ${docBuildFolder}/documents/ParameterChanges ${docBuildFolder}/documents/ApiChanges) - endif() - - # Get list of folders of interest - get_subdirectory_list(${docBuildFolder}/documents docFolders) - - # Build doctoc.xml, the documents table of contents file. - set(doctocPath ${docBuildFolder}/build/doctoc.xml) - file(REMOVE ${doctocPath}) - cat(${docBuildFolder}/build/doctoc_header.xml ${doctocPath}) - foreach(f ${docFolders}) - - # Each folder in documents gets a section added to doctoc - get_filename_component(docName ${f} NAME_WE) - - execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"${docName}\" ${XALAN_INFILE_OPTION} ${f}/${docName}.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/IsisDocumentTOCbuild.xsl OUTPUT_VARIABLE result) - file(APPEND ${doctocPath} ${result}) - - endforeach() - cat(${docBuildFolder}/build/doctoc_footer.xml ${doctocPath}) - - # Write out a modified .xsl file with the correct location of the Xalan executable. - set(modDocBuildXslFile ${docBuildFolder}/build/IsisInlineDocumentBuild_mod.xsl) - file(READ ${PROJECT_SOURCE_DIR}/scripts/IsisInlineDocumentBuild_mod.xsl xslContents) - string(REPLACE XALAN_BIN_LOCATION ${XALAN} xslContents "${xslContents}") - file(WRITE ${modDocBuildXslFile} "${xslContents}") - - # Build individual documents folders - message(" Building individual documents...") - file(MAKE_DIRECTORY ${docInstallFolder}/${docVersion}/documents) - foreach(f ${docFolders}) - - message("Building documents folder: ${f}") - - # Handle paths for this folder - get_filename_component(docName ${f} NAME_WE) - set(thisOutputFolder ${docInstallFolder}/${docVersion}/documents/${docName}) - file(MAKE_DIRECTORY ${thisOutputFolder}) - - # Use Xalan to generate an intermediate makefile, then execute that makefile - # to generate the output documentation files. - - set(xalanCommand ${XALAN} ${XALAN_PARAM_OPTION} menuPath "../../" ${XALAN_PARAM_OPTION} dirParam "'${docName}'" ${XALAN_OUTFILE_OPTION} ${f}/Makefile_temp ${XALAN_INFILE_OPTION} ${docName}.xml ${XALAN_XSL_OPTION} ${modDocBuildXslFile}) - execute_process(COMMAND ${xalanCommand} WORKING_DIRECTORY ${f}) - - execute_process(COMMAND make -f Makefile_temp docs WORKING_DIRECTORY ${f}) - execute_process(COMMAND rm -f ${f}/Makefile_temp) # Clean up - - # Copy all generated html files and any assets to the install folder - file(GLOB htmlFiles ${f}/*.html) - file(COPY ${htmlFiles} DESTINATION ${thisOutputFolder}) - if(EXISTS "${f}/assets") - copy_folder(${f}/assets ${thisOutputFolder}/assets) - endif() - if(EXISTS "${f}/images") - copy_folder(${f}/images ${thisOutputFolder}/images) - endif() - - endforeach() - -endfunction(build_documents_folder) - - - - - # Supporting files should already be in /src/docsys/Application function(build_application_docs) @@ -206,7 +127,7 @@ function(build_application_docs) # Set up the file set(appTocPath "${CMAKE_INSTALL_PREFIX}/bin/xml/applicationTOC.xml") file(REMOVE ${appTocPath}) - cat(${docBuildFolder}/Application/build/toc_header.xml ${appTocPath}) + file(APPEND ${appTocPath} "") get_subdirectory_list(${appDataFolder} moduleFolders) # Loop through module folders @@ -225,8 +146,8 @@ function(build_application_docs) endforeach() endforeach() - # Append the footer to complete the TOC file! - cat(${docBuildFolder}/Application/build/toc_footer.xml ${appTocPath}) + # Append closing tag to complete the TOC file + file(APPEND ${appTocPath} "") endfunction(build_application_docs) @@ -297,7 +218,6 @@ function(build_object_conf) file(APPEND ${appsConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") file(APPEND ${appsConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") file(APPEND ${appsConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") - file(APPEND ${appsConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") file(APPEND ${appsConf} "HTML_OUTPUT = apps\n") if(NOT ${DOT_PATH} STREQUAL "") @@ -314,7 +234,6 @@ function(build_object_conf) file(APPEND ${programmerConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") file(APPEND ${programmerConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") file(APPEND ${programmerConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") - file(APPEND ${programmerConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") file(APPEND ${programmerConf} "HTML_OUTPUT = Programmer\n") file(APPEND ${programmerConf} "IMAGE_PATH = \n") @@ -348,7 +267,6 @@ function(build_object_conf) file(APPEND ${developerConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") file(APPEND ${developerConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") file(APPEND ${developerConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") - file(APPEND ${developerConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") file(APPEND ${developerConf} "HTML_OUTPUT = Developer\n") file(APPEND ${developerConf} "IMAGE_PATH = \n") string(FIND "${MODE}" "LOUD" pos) @@ -454,8 +372,6 @@ function(build_docs) message("Building upper level directories...") build_upper_level() - build_documents_folder() - message("Building application docs...") build_application_docs() diff --git a/isis/make/isismake.apps b/isis/make/isismake.apps index 41b09bbcaf..a8109dee54 100644 --- a/isis/make/isismake.apps +++ b/isis/make/isismake.apps @@ -89,9 +89,6 @@ $(BINS): $(UIHEADERS) $(QTRESOURCEFILES) protos $(OBJS) export PATH="$(CODE_COVERAGE_PATH_DIR):$$PATH"; \ $(CXX) $(ALLINCDIRS) $(ISISCPPFLAGS) $(ISIS_PROTOBUF_FLAGS) -c -o $@ $? -.xml.html : - $(XALAN) $(XALAN_VALIDATE_OPTION) $(XALAN_OUTFILE_OPTION) $@ $(XALAN_INFILE_OPTION) $? $(XALAN_XSL_OPTION) $(ISISROOT)/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl - protos: $(PROTOS:%.proto=%.pb.h) $(PROTOS:%.proto=%.pb.cc) %.pb.cc %.pb.h: %.proto @@ -170,9 +167,6 @@ install: app fi -validxml: - $(XALAN) $(XALAN_VALIDATE_OPTION) $(XALAN_OUTFILE_OPTION) /dev/null $(XALAN_INFILE_OPTION) $(BINS).xml $(XALAN_XSL_OPTION) $(ISISROOT)/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl; - docs: mkdir -p $(ISISROOT)/src/docsys/Application/data/`basename $(CURDIR)` cp -p `basename $(CURDIR)`.xml $(ISISROOT)/src/docsys/Application/data/`basename $(CURDIR)` diff --git a/isis/make/isismake.objs b/isis/make/isismake.objs index d1d5e868a3..c7d469bff1 100644 --- a/isis/make/isismake.objs +++ b/isis/make/isismake.objs @@ -172,7 +172,6 @@ help: echo "make plugin : Builds a plugin object if applicable" echo "make install : Calls the make target and copies the object and" echo " plugin to $ISISROOT/..." - echo "make html : Builds the html page for the object" echo "make clean : Removes the application, *.html and *.o files." echo " Also cleans the test directories" echo "make sanitize : Calls the clean target then removes tttt* junk.*" @@ -187,8 +186,6 @@ help: echo "make protos : Builds the object of google protocol buffer(*.proto) files" TEMPDIR:=${CURDIR} -html: force - (cd $(ISISROOT)/src/docsys/Object/ ; make CURDIR=$(TEMPDIR) doProgTest ) clean: localclean $(RM) $(OBJS) $(PROTOSGEN) $(MOCGEN) unitTest.o unitTest print.prt \ diff --git a/isis/src/docsys/Application/build/TOCindex.xsl b/isis/src/docsys/Application/build/TOCindex.xsl deleted file mode 100644 index e1ee3b8240..0000000000 --- a/isis/src/docsys/Application/build/TOCindex.xsl +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - USGS: ISIS Application Table of Contents - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - USGS
- - -

- ISIS Application Documentation

- -
- - - - - - - -
-

- Table of Contents -

-
- Home -
- - -

Categories

-

Core Programs

- - -

Mission Specific Programs

- - - - - - -
-

Core Programs

- - -
-

- - - -

- - - - - - - - - - - -
- - - - -
-
-
- - -
-

Mission Specific Programs

- - -
-

- - - -

- - - - - - - - - - - -
- - - - -
-
-
- - - -
-

Alphabetical Listing

- - - - - - - - - -
- - - - - -
-
-
- - - - -
-

Old Names vs. New Names

- - - - - - - - - - - - - - - -
- Old Name - - New Name(s) -
- - -
    - - -
  • - - - -
  • -
    -
    -
-
- - - - - - - - - - - - - - -
- - - - - - -
- -
diff --git a/isis/src/docsys/Application/build/TOCindex_alpha.xsl b/isis/src/docsys/Application/build/TOCindex_alpha.xsl index 17b84107e2..79d5d3329c 100644 --- a/isis/src/docsys/Application/build/TOCindex_alpha.xsl +++ b/isis/src/docsys/Application/build/TOCindex_alpha.xsl @@ -47,16 +47,16 @@ Deborah Lee Soltesz - - + + - - + + - - + + @@ -75,7 +75,7 @@ Deborah Lee Soltesz - + diff --git a/isis/src/docsys/Application/build/TOCindex_category.xsl b/isis/src/docsys/Application/build/TOCindex_category.xsl index 01f0b18427..28e4dbf1c7 100644 --- a/isis/src/docsys/Application/build/TOCindex_category.xsl +++ b/isis/src/docsys/Application/build/TOCindex_category.xsl @@ -46,16 +46,16 @@ Deborah Lee Soltesz - - + + - - + + - - + + @@ -69,11 +69,11 @@ Deborah Lee Soltesz - + - + diff --git a/isis/src/docsys/Application/build/TOCindex_oldvnew.xsl b/isis/src/docsys/Application/build/TOCindex_oldvnew.xsl index 42ee2004fb..22853d7bc4 100644 --- a/isis/src/docsys/Application/build/TOCindex_oldvnew.xsl +++ b/isis/src/docsys/Application/build/TOCindex_oldvnew.xsl @@ -47,16 +47,16 @@ - - + + - - + + - - + + @@ -75,7 +75,7 @@ - + diff --git a/isis/src/docsys/Application/build/toc_footer.xml b/isis/src/docsys/Application/build/toc_footer.xml deleted file mode 100644 index 3d8c267325..0000000000 --- a/isis/src/docsys/Application/build/toc_footer.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/isis/src/docsys/Application/build/toc_header.xml b/isis/src/docsys/Application/build/toc_header.xml deleted file mode 100644 index 355fbd1ec3..0000000000 --- a/isis/src/docsys/Application/build/toc_header.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/isis/src/docsys/Application/data/Makefile b/isis/src/docsys/Application/data/Makefile index f293a7daf3..16c0c1f0b2 100644 --- a/isis/src/docsys/Application/data/Makefile +++ b/isis/src/docsys/Application/data/Makefile @@ -46,12 +46,12 @@ toc: ../build/toc.xml ../build/toc.xml: $(APPSDIR) ../build/IsisApplicationTOCbuild.xsl echo " Table of Contents XML" - cat ../build/toc_header.xml > ../build/toc.xml + echo "" >> ../build/toc.xml for dirname in $(APPLICATIONS); do \ echo " Adding [$$dirname]" ; \ $(XALAN) $(XALAN_INFILE_OPTION) $$dirname/$$dirname.xml $(XALAN_XSL_OPTION) ../build/IsisApplicationTOCbuild.xsl >> ../build/toc.xml ; \ done - cat ../build/toc_footer.xml >> ../build/toc.xml + echo "" >> ../build/toc.xml mkdir -p $(ISISROOT)/bin/xml/ cp ../build/toc.xml $(ISISROOT)/bin/xml/applicationTOC.xml diff --git a/isis/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl b/isis/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl deleted file mode 100644 index 9c84385eeb..0000000000 --- a/isis/src/docsys/Application/presentation/ProgTester/IsisApplicationDocStyle.xsl +++ /dev/null @@ -1,1351 +0,0 @@ - - - - - - - - - - - - - - - - USGS: ISIS <xsl:value-of select="@name"/> Application Documentation - - - - - Isis, image processing, - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - USGS
- - -

- ISIS Application Documentation

- -
- -

- -

- -

- -

- - -

- - - Description
- - - - Categories
-
- - - - - Groups
-
- - - - Examples
-
- - - - History
-
- - - - Things To Do
-
- - -

- - - - -
-

- Description -

- -
- -
- - - - -
-

- Categories -

- -
    - -
  • -
    - -
  • - -
  • -
    -
- - - - -
-

- Related Applications to Previous Versions of ISIS -

- - This program replaces the following - - - applications - - - application - - - existing in previous versions of ISIS: - -
    - -
  • -
    -
-
- - - - - -
-

- - Related Objects and Documents -

- - - - - -

Applications

-
    - - -
  • -
  • -
    -
    -
-
- - -

Documents

-
    - - - - - -
  • -
  • -
    - - -
  • -
  • -
    - - -
  • - - - - , - - - - , - - - - ; - - - - ; - -
  • -
    - -
    -
    -
    -
-
- -
-
-
- - - - - - - -
-

- Parameter Groups -

- - - - -

- - - - - - - - - - - -
- Name - - Description -
- - - - -
-
-
- - - - - - - - -
-

- - - : - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Type - - -
- File Mode - - -
- Pixel Type - - -
- Default Path - - -
- Count - - -
- Default - - -
- Internal Default - - -
- Option List: - - - - - - - - - - - - - - - - - - -
- Option - Brief - Description - Exclusions - Inclusions
- - - - - - - - -
-
-
-
- - -
-
-
-
-
- Minimum - - - - - (inclusive) - - - (inclusive) - - - (exclusive) - - -
- Maximum - - - - - (inclusive) - - - (inclusive) - - - (exclusive) - - -
- Greater Than - -
    - -
  • - -
  • -
    -
-
- Greater Than or Equal - -
    - -
  • - -
  • -
    -
-
- Less Than - -
    - -
  • -
    -
-
- Less Than or Equal - -
    - -
  • -
    -
-
- Not Equal - -
    - -
  • -
    -
-
- Odd - - This value must be an odd number -
- Exclusions - -
    - -
  • -
    -
-
- Inclusions - -
    - -
  • -
    -
-
- Filter - - -
- - -

- Description -

- -
- -
- -
-
- - - -
- - - - - -
-

- Examples -

- - - -
-

- Example -

-

- -

- -

- Description -

- -
- -
- - -

- Command Line -

- -
- - - - - - -
-
- -
-
-
- -
- - - - -

- GUI Screenshot -

- -
- - - - -
-
- -
- - - - -

- - - Input Images - - - Input Image - - -

- -
- - - - -
-
- -
- - - - -

- - - Data Files - - - Data File - - -

- -
- - - - - - - -
- - - -
-
- -
- - - - -

- - - Output Images - - - Output Image - - -

- -
- - - - -
-
- - -
- -
-
- -
- - - - - -
-

- History -

- -

- All history entries are shown, including those marked hidden -

- - - - - - - - - - - -
- - - - - -
-
- - - - -
-

- Things To Do -

- -
    - -
  • -
    -
-
- - - - - - -
- footer will appear here - - - -
- - - - - - - - - - - - -
- -
- - - -

- -

- - -

- - Parameter Name: - - -
- -

-
- -
- -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/isis/src/docsys/Application/presentation/Tabbed/styles/IsisApplicationDocStyle.xsl b/isis/src/docsys/Application/presentation/Tabbed/styles/IsisApplicationDocStyle.xsl index 18d594de69..6499525cbc 100644 --- a/isis/src/docsys/Application/presentation/Tabbed/styles/IsisApplicationDocStyle.xsl +++ b/isis/src/docsys/Application/presentation/Tabbed/styles/IsisApplicationDocStyle.xsl @@ -40,20 +40,20 @@ - - + + - - + + - + - + @@ -84,10 +84,6 @@ - + diff --git a/isis/src/docsys/Makefile b/isis/src/docsys/Makefile index c69e0b02bb..e13235d30f 100644 --- a/isis/src/docsys/Makefile +++ b/isis/src/docsys/Makefile @@ -76,6 +76,7 @@ upperlevel: echo " [home page]" #rsync -lHptr --delete --rsh=ssh --cvs-exclude *.html $(DOCDIR)/ $(XALAN) $(XALAN_VALIDATE_OPTION) $(XALAN_PARAM_OPTION) menuPath "'./'" $(XALAN_OUTFILE_OPTION) $(DOCDIR)/index.html $(XALAN_INFILE_OPTION) build/homepage.xml $(XALAN_XSL_OPTION) build/main.xsl + cp favicon.ico $(DOCDIR)/favicon.ico echo " Finished Updating Directories" @@ -128,11 +129,9 @@ clean: rm -rf cgi-bin cd Schemas && rm -f *.html ; cd .. ; - cd build && rm -f doctoc.xml ; cd .. ; cd Application ; $(MAKE) clean ; cd .. ; cd Object ; $(MAKE) clean ; cd .. ; - cd documents ; $(MAKE) clean ; cd .. ; cleandocs: rm -r $(DOCDIR)/* diff --git a/isis/src/docsys/Object/Makefile b/isis/src/docsys/Object/Makefile index 82a930a88e..beb8a8f265 100644 --- a/isis/src/docsys/Object/Makefile +++ b/isis/src/docsys/Object/Makefile @@ -100,34 +100,8 @@ doProg: doDev: echo " ...building Developer documentation" $(DOXYGEN) build/Developer_temp.conf - -# The doProgTest target can be used to build documentation for an individual Object. -# E.G. from isis/src/base/objs/Camera do -# ( cd ../../../docsys/Object ; make CURDIR=/scratch/m04585/isis/src/base/objs/Camera doProgTest ) -doProgTest: - echo "Building ProgTester configuration in: $(CURDIR) ISISROOT is: $(ISISROOT)" - mkdir -p docbuild - cat $(ISISROOT)/src/docsys/Object/build//Programmer.conf > docbuild/ProgTester_temp.conf - echo "OUTPUT_DIRECTORY = $(CURDIR)/" >> docbuild/ProgTester_temp.conf - echo "STRIP_FROM_PATH = $(CURDIR)/" >> docbuild/ProgTester_temp.conf - echo "INPUT = $(CURDIR)/ \\" >> docbuild/ProgTester_temp.conf - echo " $(ISISROOT)/src/docsys/Object/build/isisDoxyDefs.doxydef" >> docbuild/ProgTester_temp.conf - echo "HTML_HEADER = $(ISISROOT)/src/docsys/Object/build/IsisObjectHeader.html" >> docbuild/ProgTester_temp.conf - echo "HTML_FOOTER = $(ISISROOT)/src/docsys/Object/build/IsisObjectFooter.html" >> docbuild/ProgTester_temp.conf - echo "HTML_OUTPUT = html" >> docbuild/ProgTester_temp.conf - echo "WARN_LOGFILE = " >> docbuild/ProgTester_temp.conf - echo "QUIET = YES" >> docbuild/ProgTester_temp.conf - echo "WARNINGS = YES" >> docbuild/ProgTester_temp.conf - echo "WARN_IF_UNDOCUMENTED = YES" >> docbuild/ProgTester_temp.conf - echo "WARN_IF_DOC_ERROR = YES" >> docbuild/ProgTester_temp.conf - echo "WARN_NO_PARAMDOC = YES" >> docbuild/ProgTester_temp.conf - $(DOXYGEN) docbuild/ProgTester_temp.conf - echo "View your documentation by opening the file html/index.html in a browser" -#do the following on a clean, as well as whacking the html directory created in this dir by doxy - rm -r docbuild - #---- # CLEAN clean: @@ -140,9 +114,7 @@ clean: cleandoc: rm -r $(ISISROOT)/doc/Object - - - + #TODO diff --git a/isis/src/docsys/Object/build/Developer.conf b/isis/src/docsys/Object/build/Developer.conf index a61df7d690..5434dd5f32 100644 --- a/isis/src/docsys/Object/build/Developer.conf +++ b/isis/src/docsys/Object/build/Developer.conf @@ -51,7 +51,7 @@ PROJECT_BRIEF = # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = ../../docsys/assets/icons/USGS_logo55h.png +PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -1211,8 +1211,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = ../assets/styles/IsisStyleCommon.css \ - assets/styles/IsisObjectAPIDocStyle.css +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1254,15 +1253,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1573,17 +1563,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1920,14 +1899,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2266,15 +2237,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2307,23 +2269,6 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - # By default doxygen will tell dot to use the default font as specified with # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # the path where dot can find it using this tag. @@ -2558,18 +2503,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 2 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = YES - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support diff --git a/isis/src/docsys/Object/build/IsisObjectFooter.html b/isis/src/docsys/Object/build/IsisObjectFooter.html index 3d5fa86f56..43a4afe71b 100644 --- a/isis/src/docsys/Object/build/IsisObjectFooter.html +++ b/isis/src/docsys/Object/build/IsisObjectFooter.html @@ -1,17 +1,55 @@ - - - - - - - - + + + + + + + + + - - + + + diff --git a/isis/src/docsys/Object/build/IsisObjectHeader.html b/isis/src/docsys/Object/build/IsisObjectHeader.html index 19165ad137..e4cb398711 100644 --- a/isis/src/docsys/Object/build/IsisObjectHeader.html +++ b/isis/src/docsys/Object/build/IsisObjectHeader.html @@ -2,69 +2,188 @@ - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + -$projectname: $title -$title - - - -$treeview -$search -$mathjax - -$extrastylesheet - - -
+ $projectname: $title + $title - -
- - - - - - - - - - - - - - - - - - - - - -
-
$projectname -  $projectnumber -
-
$projectbrief
-
-
$projectbrief
-
$searchbox
-
- - + + + + + + + + + + + + + + + $treeview + $search + $mathjax + + $extrastylesheet + + + +
+ + + + +
+ +
+ +
+
+
+
+
+ +
+ + +
+
+
+
+
+ +
+

+ Official websites use .gov
A + .gov website belongs to an official government + organization in the United States. +

+
+
+
+ +
+

+ Secure .gov websites use HTTPS
A + lock + ( + + + + ) or https:// means you’ve safely connected to + the .gov website. Share sensitive information only on official, + secure websites. +

+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
$projectname +  $projectnumber +
+
$projectbrief
+
+
$projectbrief
+
$searchbox
+
+ + diff --git a/isis/src/docsys/Object/build/Programmer.conf b/isis/src/docsys/Object/build/Programmer.conf index 9bb594a01e..5c340befff 100644 --- a/isis/src/docsys/Object/build/Programmer.conf +++ b/isis/src/docsys/Object/build/Programmer.conf @@ -51,7 +51,7 @@ PROJECT_BRIEF = # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = ../../docsys/assets/icons/USGS_logo55h.png +PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -1254,15 +1254,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1573,17 +1564,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1920,14 +1900,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2266,15 +2238,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2307,23 +2270,6 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - # By default doxygen will tell dot to use the default font as specified with # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # the path where dot can find it using this tag. @@ -2558,18 +2504,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 2 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = YES - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support diff --git a/isis/src/docsys/Object/build/isisDoxyDefs.doxydef b/isis/src/docsys/Object/build/isisDoxyDefs.doxydef index 11d3a08cfa..3ab53ff11e 100644 --- a/isis/src/docsys/Object/build/isisDoxyDefs.doxydef +++ b/isis/src/docsys/Object/build/isisDoxyDefs.doxydef @@ -681,7 +681,7 @@ * */ - /* @} end of Missions group */ + /** @} end of Missions group */ // MAIN PAGE - content of the table-of-contents page for the %Isis Object Documentation diff --git a/isis/src/docsys/assets/icons/USGS_logo55h.png b/isis/src/docsys/assets/icons/USGS_logo55h.png deleted file mode 100644 index 84ccf08ddffc18d4fc0fc86af80ff38e49b96e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13100 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 diff --git a/isis/src/docsys/assets/icons/firstgov.gif b/isis/src/docsys/assets/icons/firstgov.gif deleted file mode 100644 index eafecca2273b9d736bc2a8337cace72258b42220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2090 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/OCGs[23 0 R 24 0 R 25 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Illustrator 28.7 (Macintosh) + 2024-09-13T16:11:37-07:00 + 2024-09-13T16:11:38-07:00 + 2024-09-13T16:11:38-07:00 + + + + 256 + 164 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgApAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4ql+ta5Z6PDbz3iv6F xcR2xlQArG0poryVIonKgJ98jKVM4QMuSF84ahq2n6BPc6VEZLpWjBYRmYxxs4EkoiXd+CknjgmS BsywxBlRQHkvXlvpbu1k11NXljCSRq1q1lcIh2blGwXkvKlCF274Mcr62yzQqjVfG0V5Y1W+1G+1 715A9tZ6g1paKABxWKKMuKgAn4mPXDAkk+9jlgAI+YS6Pzvqj6nehNLWXSrC9+oXLRSFryMhgvrt bhN4iTtQ1pvkfEN8tmzwRQ33IvyZhlrjOxV2KuxV2KuxVjXnTzi/lgadcy2bT6bcz+jfXat/vOpA 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 + + + + 1 + False + False + + 330.000000 + 330.000000 + Pixels + + + + + UrbaneRounded-Medium + Urbane Rounded + Medium + Open Type + Version 7.000;hotconv 1.0.109;makeotfexe 2.5.65596 + False + .38228.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + application/pdf + + + isis-logo + + + xmp.did:812a6b46-9c8c-40c7-9a5b-b5457050d8f5 + uuid:e6af970f-a606-ab4e-bdb6-983f96b2dba7 + xmp.did:645a5ea1-3b7e-4280-a3f4-1e0276715760 + proof:pdf + + xmp.iid:2ce48adf-00ed-4397-8796-155ea50801b9 + xmp.did:2ce48adf-00ed-4397-8796-155ea50801b9 + xmp.did:645a5ea1-3b7e-4280-a3f4-1e0276715760 + + + + + saved + xmp.iid:645a5ea1-3b7e-4280-a3f4-1e0276715760 + 2024-09-06T23:44:10-07:00 + Adobe Illustrator 28.7 (Macintosh) + / + + + saved + xmp.iid:812a6b46-9c8c-40c7-9a5b-b5457050d8f5 + 2024-09-10T17:03:39-07:00 + Adobe Illustrator 28.7 (Macintosh) + / + + + + Document + AIRobin + Adobe PDF library 17.00 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 5 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 19 0 obj <>/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 20 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 21 0 obj <>/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 22 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 27 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 330.0 330.0]/Type/Page/PieceInfo<>>> endobj 35 0 obj <>stream +H‰ìVËŽ7 ¼÷Wè˜ G¤ÞWoŒ #0<@Ž9 b7€ÿR¤z¦Õ»ö‹m$Šb‘Òå·§py÷ÛŸŸÂöö>—¹$¯—t.E.=‡È©$|u„¯Ÿ¶Ë/bøôïö%Hˆø“ *¬-¶ -rm¥…Ûóf[ÏIìG¤G-á3–D2„A[µ•̹iʵÌÿÚ>þ´½ß¾@GJóŸìóõÏí÷ðÏbXºp¬±I‰%Õnæç¸'5¹Å¨pÉ0®µc*ÜòîÝ!sE¤7xYF +¹ržÇ³ðˆ#…¾ µEBœÅfÐ{¨ÂŒp\g¸U3b–3ÇXBEˆ Ö°beÍŒã4TÃà¸ms/ÔÑpV|”Ð?Ž@/â&Å1¸íP¹€Ë}À†Œ#²äFGEÄ•aôóVY)ë‘ܪÃ6 + ,C—"Á0H#;Íý œ *&n§'Ÿ÷’:h8^ ÏìÆ "¨¨P‚A…hq@ÉÒh³ (²cðß<¦qBƒÓšxLl¾‰Š _m zAr©ýTð…C¥ät ør@¡ôþp5®Ò R›Uû¬˜€¢v(–àW5dj‰³ÕQ£_ŽCLØbAR3Aâ‹.#Ýæ*@ËŒ Ó¬€ºè)éìõZ¹•J±ÓZl°ÌhéƒÅ4?!³ÏšíôùÛ¥2[ÈIE×4lh¦©›Ç­»L7Dn[›"¶Z³€´¡v½ŽÍvvÏQ€:=l!U Us‡ˆÈ¤@Žê¹sp¡[w³h¥tOvl<“ÜM¢—pèà€X‚’s̈ˆüXjP)¾ܬ¹§ˆSÍŽ4ûTu¿ÜÑ<­T§Ki4õòîÒP.¨ŸW”¡gèA:±†ÚкçàÍA›ƒ5+iÎЙ4´²†VÚЙ7´‡æÐ™:´r‡VòЙ=´Ò‡þЙ@´2ˆV +Ñ™C´’ˆVÑ™F+‹V9´PhaÐJ ZD …=ôàÏBŸ=“<ô=öîX]ñ`ºPbÑì‚0xäŒ+,óûènîKÖLËlªvZ±^²Ý‰÷_·íÅÖË£¯µ¿°ÿpl6O¨Ìb.£K+ñœãnGÖÑ­˹¯ ‹ßû8«á75Ô¥”¼ÿ–ç­'_ë~iþäÜÝé=ï·7×ír•?,×[FÝ€x5ØhìÞÜ7$&<ß$ª]I¸f®ÏÛ¿þxý{{{ýî FÀ\Ýî¦V’‘oŽ÷eQ0¨[vP9Ôv½L¯•hëÝn¶n0‡}Yâ鸣á Þ¥*‡GO¼­T RpëÝÇû† ku»îÁ@¶‡QãØ$<šjN~I§\û}Ü7ÔJDð¶Sƒ»äê:®ßÐÿÿÿÿÿ endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 28.7.1 %%For: (Cain, Jacob Ryan) () %%Title: (isis-logo.ai) %%CreationDate: 9/13/24 16:11 %%Canvassize: 16383 %%BoundingBox: -355 -376 768 332 %%HiResBoundingBox: -354.05588807154 -375.730426127837 767.29724070026 331.978515625 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 142 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -383.757776883302 -382.266472615025 -53.7577768833016 -52.2664726150251 %AI3_TemplateBox: 200.5 164 200.5 164 %AI3_TileBox: -506.757776883302 -573.266472615025 69.2422231166984 160.733527384975 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI24_LargeCanvasScale: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 3 %AI17_Begin_Content_if_version_gt:24 4 %AI10_OpenToVie: -839.446906761256 475.810144715402 0.805557178768144 0 7975.20660597216 8396.72329620919 2036 1101 18 0 0 2054 45 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -839.446906761256 475.810144715402 0.805557178768144 2036 1101 18 0 0 2054 45 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 766 %AI17_Begin_Content_if_version_gt:24 4 %AI17_Alternate_Content %AI17_End_Versioned_Content %%PageOrigin:-759 -376.5 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 11 0 obj <>stream +%AI24_ZStandard_Data(µ/ýXìÊAŸ¤'Dhõï1¦/ÖA·ÍD¸0Æ <¥žš‘¤\¾T«"€°  +› + ƒ” u9»ì…_rE²ø-è0Ù»fÐüÉQog:Û Œ±ÀØå2F·B½àPÖeŒïÙÏɾW­ïªÉØ=KL.·ÆäÒ´a Ò´eZïL˜í öýéq‡Ÿ·õÈél¿Qü¸‚£§=ÑóÀo‡Ü÷‚œÎ>pôF/½ÍÃÑ 9!`¿4m™‡i½5×]{úÓ µ¨GMêR›úÔ¨N5¦÷Þ|÷ííoƒ;Üâ7¹Ëmîs£;ÝšoÎyçÿ8ÈC.ò‘“¼ä&?9ÊS®ûî¼÷îõ¯ƒ=ì˜ØÇNö²›ýìhO»ö¶Ç½îyÞç^è‰Þè‘^é™Þé¡^êéoüëŸ÷}ø…Ÿøù•Ÿùú¥¦Á r°ƒø ‚"8‚$X‚&x‚(˜‚:Ü!{è…_†a(†cH†eh†gˆ†i¨Å-r±‹žø‰ Š˜(Ž")–¢)ž"*¦¢÷ÈÇ>zã7‚c8Šã8’c9šã9¢c:jr“œì¤G~$H†¤HŽ$I–¤Iž$J¦$¦Ë]ò²—^ù•`–b9–dY–fy–h™–ÚÜ&7»é™Ÿ š¡)š£Iš¥iš§‰š©©Ï}ò³ŸÞùàž˜xŽ'y–§yž'z¦§F7ÊÑŽz臂hˆŠèˆ’h‰šè‰¢hŠêt§<í©—~)˜†©˜Ž)™–©™ž)š¦)ˆ~¨‡vt£MOôÏóº·=í¥íg7{ÙÇ.ö°ƒýë^ïwÝSŽò“—œä$yÈAþqÌão®¹æé>·¹Í]nr[Üá··ûî›ï½õN5ªM]jRzÔ¢5¨?ýiOwÍõÖÀ0¶Ìx¦3Œ¡ÊXßZßW´È"óë[výê[fù@ÃÇë +”±ï Ž[°éçöʾgß6µš×iöïêvæ·]3}W×h32ûz·ÌVÚåcù{TÛºîjΟœ?¹š×ÎË‘Omf…šW@Ù‡ç–E³·ãU,š¹0ra8”­ä×/³ïçyEµü,yÕÎí´äv‘1To‹Z([dŒåNœŒõ´žQ~î𢭧üɈە[dŒÌÿÕMœz/ñ þêÛª^n‹7˜êmç·ýÞ˜>Ý™\øÔ2u˜wãxí´Ç3¯z}°Ûy›gëìú³Ç €¯]8îÌ]Q-»þî7–­*ßât£¸3wý*?¿m×ÆÝŒz±ð×Vë%w©T˺k;ÿ5î^­n‹û~^ýWu²ìÝsû¶©·íÀpgîúrù~»îlƒóñ€û¢¡®C0eÕÛ²0êE»o½ä ó¡!ì…ÿŠêXþ…Up7¿V·õú«ê}­: µÎ0ÛùþŸºþ¨µÕu­,{w†Y‘HÄáp.—»\P”DÉcßU~Á«ùûØËëéõ(n¿;÷ĺ©®Muü_èúS¥žm´¬{b[¾[É+ûúóp‡rH²ó¨5–;¹•ãÖuýœòî ·¼ë¶/U‡½í‡ÝÔ ¿îŠjU°ÛZ]”ß½Àì ·³ì_.¸ó«[÷…’×ûáοíÛ¶|Šýð«Õ½~Àëm[ò˱•¼º2§CÉ.åÙ~¹Žõ×–g×?wóJÕþ1ŒêXÿýï0Ù=±ïÚú^Õ­âõ«Ö¿ÆÝì]÷uê^¸Q^îToë~?ËÝüzTçýWy¶û^¥ZÙW‡½^¯†aî°·mÛÖ{ßaµ®ï¦Z/ÔoQk·®¨Ã8gÝvÞt~~¡V´[]·e=ÊìToûÉNneÿ}Ë’Èwæ¬_Õcæ]ÕÛÊ~†_®nì¿fRÁ.ü;Û†Éóë[-Ød_tÛ0†ÓZcšø~ý<¯nêmñÛ`8Ž|Ô|Ü[‹œ˜ñm¿j +¹ñ !‘·UµŸãUkgÁߎ>Ö›ØÀÏëûýì’ûó2ïÓ\ÜÙÖ{g`×<÷¨98òÎC»˜›‡ã§APsî Ç0Ó™çm Åp‡ß÷i‘Ó×Þ·CÏÛz‹Üzøñ † AÏãÆ.B²ˆoGpèõ1ǤwæñȬ20¥ZÓüúù…MÓÛª|i +÷…ܰžEä﬙Ök#Î/–ýgöª¿†öê¦ó'MŸëYX3fï®(Wý5còø…Ü00‹Èsûоw_­=4Ò¿ð&‹àÛþ GOì!ÿz9 îÌGÜ»sÎ=Î`ÖÃ’qP·õÀ}œÖÜÏ«·|h Ü$û¸þ6ÈC9ÇÅɸî]Á0 ¿ëb‡d™õ×V †Â ·­Ê:‹”êgÛ0EdÕÛγyÕÚº˜Â ¹aYÄ«VYdêrø·³È÷§Ökúí«4ñ}!w6¯­§ÞmSÓw!YÏz¿i½ZÖk ¬gßüñïzú¢,"Ï/œ²P«[fÀ®ëKÙ:¿^µj²w`fùÃ.lʲGÁ¿3¿¾õBÁç¶a¿ý‰áÈíÞ3kj‡#çB0ÌÂ.†|ƒÜÓ=ä¾°C2ïÛ¡Eñû4çÉþÓZ¶ ã½g"f`Ø!Ù÷uH—ª·eß\nÖÅî,âhey ð®æ¶a{GÀy¼ë»³ˆŸ×ó…[F»r° +v!r+·‹,âݹ mÆXdŒwðÉN0jÅd·]ÍEùpºmØæBNäYä…[ùû‘I¼Û†iÎãã³øð¼þY~¹î%Ë"žWÿÍmÃ2Íuˆ?Á, u´-­%óÿåÌ,f:÷àˆßpIYÓ:º¥ öÞ¬«£WV“[0 ŸnÃ/C¤ÂIìÕƒ´KÁiÑ8ÐWùý‰h€‡ÈðM ƒ¥Ï+ŠÃ#ÐeÏ;…L1€< }Þ0‚?âŸØžU·¡ZHÏ‹Ó +0-¤©˜»ÊÜhøýk Ú!B@ußá„•ƒr^PQªrÀJN8n°¨n|PbâŽP)=8A¯ÂG7  …<,(ÿ[œL¦™Î•ÎÅCcX:CSP8´ÊâÀ¡Œˆ&¦†5=´ˆKuh„¢¡­ÀƒG<×8:mŠŒZ2ƒ"`imc9Z%™§]’&›.éV{Ã¥³%㊓•ƒŒ!p€ ßÄÁênÂ)dà €bËÞ `'P‚ÕÅcßÄq–¬VhîN#Š#dø&Ž {dž…QþüÄËÅ‘]ɰY€í}!%¬ÿ4çôì,2IÜ~”ìOî~Yï+“Ûœyù•¹ë{¾—L^³ê%g­Çk6¿à«›­mæQ«gðœ±Þ¿Ù ðáìÑfo»ª|öÂÙ»ºqö‚xYe\zvÞ5“×Ì»m*{×Lõ¶V9{ý +€LÎ2¿š3ÿ×ÌË~Z̯g/ì ›´ÚZõ¶Ö¯†¼,jãÕT½íܲèÞñ‹gÝv}O­×*äçõû׫›õWÍ÷›óõå°~u{· X¿ +~¼B¬0²ÿ>‘^µ¶./ðéµ/ÜúüW(ø…5óz‚?ŠÜ/õ^d“·.Üù+û®3ˆ·³ìÏ6s)çOàÛÑÉÌòšªüçâUk'ŽW¾/$믚VûC¦ôìì}!u†°Wó«¼lR½mX³ß §ÞË ÆdóÛºîú®î)nY²öª5†½ü}ÿ¹Üàº0ÊuWÕ»~Ðþd¼·®ÙZ€W ™µóK‚o›aß5Ó!Nv!3¾ËÔA³½ÏЩŽ@&¶uב©MµßÒ³ó}ÇõÚN–i~![~Û ~³ñBvuJ©:$uú¾ž_d‹ò¿#À‡ÔÑ,¯ïÆíì¾4>À +šQ홑Ùü¶—åæ7u’×xmÍí‰;Á '¸á»ú7Ì^ž_…Ú.'Çß³ëJŽ7Š“c×ð.'ÇpêÇ.{zÉÜü¦V•99nOœ·ó»úùm¹ŠÃ›ã7h¢—¬T?òb@ µa”æb«æZ¨ÖEq±×…Qß»ž…[lsî,ÿ8þñÇåÜYfãØåñóÚfNëß6åÏ…W­­–ûqÌ¿P¿ªVö,w‚€WÜcîÇ1ê}É^~±1ÌÅüÜ®ˆ_2 ˜_ß~˜‡|x·nŠc?Jf½wK|zù¥ú«væØZÉŸK¥àµçv>Á ñê~À=­¯9ö£VœêÃp,³P«{â¾€óîŠrc”̱•òîÌ¥RðÿëéÃ.çÞÖ«Ö¸Mù·uSžÕÞ=q¬–*fá×B½ïºàäÏþpþ>À £þWq±€®û|kݨ#ЬŽ@gæNÕÈ]Q ï¶+ƒx}A]&‘eÿãl¶ó·`3=;¬?µPíÝ6ÿÎ +Õ® àv^?^>½@ò÷³o­í\HÖ"Û/Øt]oî亯ôB²'ž‰Üãß Ð~ØÂáùEfrÁ.·î +Ç2K^[.ŒâÚ˜ ³9U@XÄp'óªõ¥z×L–­sË¢ñóBñó|€v^]ÿA2­úÙξþ} ê%=jMç”Ï|Þ·yŠâ7†/Œò ? @]×›+UûÙ]ÌÄÛÝ› +ðì{™×4`nÝ6†CcXÎ)Ÿ™åöT½-¾‰žêmWrû®£9å3ã³ÏÃqäôÃuÞž'f{ÜâÎöܾ"-glûUÙÔëÿËïúçl¼ó+ž_œ»0*[³ñBº¯V+gßÇkœYí'[É^“r›6ì¡ÊæÌBÁ/Ë»§ÌÏ« Ëm–í}!-'ò¾0—1üMí’ç”Ï´ày†Oˆ; E¾û×¹Í÷^Íl À€aùnouÈ…:œWªÖ¯<ê¿`ªu7)ù…_Ö³P°»Û“ý5@ žåŠKä¿0Éob "¿nKÀ:¯§wãÖ*G̯Sûçyý¬Û®Pyö ïžÖö¯ö¼²ëì[ó¸x= ¿ϯÛÀ"ž…7 © Á÷¹E­1çð›~ÞÕÛä¾@ž½,“Þ=­ó‡ch7£ÚÓÇB<€äºÞÔ}õŸŒáozŸþ}àË-ç”ϘØö«[ÅO¢¹zþ[¿ôœõ ›‡'Ûµ9…"Ùìª×.ö= †Q™/…¡CòøWì!‡|!_!äij¨"¦BL¥zç+CŸZÕCÆŸ )ß=Èxú:ä 7סFùR¹P{Êó¾®)¦VˆˆÚ"d‹Ýƒ„lè!'”ÈîÓöÂÏYì ^Åð !àö'ˆ¨µaOœ…øî¿ +µAÏãšïoä{GCÉŒò®É—Öºùe6 ð¡l5·d° +Î,@®Å äZ\Ç.XÕlμgávne¸³ÈLöC®ÿÌo w¾Óìû‡ì,2wõŸ.Û%’¸À·#“:u#ãôb~ÛÎ|€ïeÿcY{Ô»ºë) ù~–×?¿—.Óz¯­»fíü® ü­ÊÿL€wãŒÊâÖEm~ÎüÛºó ξOez_H¹ýëèB¾^]d’GƘå63’õóúU­f‘I¬ÿ“‘¬3mØ:¯çȾ¨ÉãŸå6Sv0Tà :~ž½»vØÝ[f÷µ¦ü‰@§+5Z€{Pb `õã)RqT«ÙLçш›“ge€ @Z4;›P€Å(/í°®sñÓ¡†{{#ÿúÇélµÞƒãætÖ½o‡à8Š`Å1Ü] Èélì]_×<CwNc×mS–å¼>êe‘ë¶éܾØ6ç¿v2 öx/. —]¦±GÆÈ°Lg›“¤O¦3Æ€Õåö\dª·ý3ȳ0ª}E]Æðl+Ï/Î{d¬g?ŒòŸÞtY$ð×öì°Gö9.ÇY—J¡ ï¶i—-³—S)NæYðŸA¨V^KjAî©•ÛQ—mì‘uŒìmו¹À"Ù÷³Û¦é!‰Ä &ä„>I–òg—a’cIR¦16Ó +™&Ó; ÛYC¦3L¦±¤Lc+) 5Ø9‰ZätŽ[ÞÇþ»'ŽœÎtæéOƒâæû¿ð 9upëäÛû7z›Ó·Ž\uí9q2íݸՂ:ì‘ùÖºé2(€€çA%¥»SÐQ>[ÄÕÞ° +çÛt‡¶ü* oiE–G&ÎÉkf˕ҫù&f +åÓ‹%•\>ɧoR'ß´!V +nj''}“úE +®10 øÃºM¯vj¶+AÍÖm:Ôú.EêáR¤.EJÇ%u2bŒzb¤:^PÃ7xíüÂ7xÝê´:j«Óꨉ€Á¢M9Â`ñ,Ú4­^ƒHŒMDéš'B)ˆ›ˆÒ5O„R°ðD +âO„2w"æÃ¸F¾aн)˜Öáèó¹ Ì§cV@  ŠëÂ/ n"•Ü¢â²É06©Óv›Ô¡,^ò©ä®É¬²#ßൂE à®²‹6²¸ÊªãD}Td⋬‰Ëë.~J×mLÐ%p8Ñáp¢3qlØùÊèL„Ùx™NÆG66ë4I +¯DÐéŸr'âAÐÞÖk¡Å˜ ‹h’ôW`Ã,Ûò@GQ²ÄUIÈúU>Ú ŸDM²d@ÄÍ&h¡ª˜ K"¦†ÀS9‰Âç$pþ¶^ º 8 É ]p!À c’ÌŠäYDF%P¹ñ%OÅ. +8bx¨úÓÔƒ©ä!ÀE!ÕZ•Jžã + @¾Ñcª! éAA"4Š8—ôPbx¬Ài±úÐŽ8èwc°hGAWš&Š+ÍTÏ]…@Î +…”PŠv&¡t¡"0¦¦uäª+Îdv$\4¨ÂÙ¡o©°BĦ ­kÚèq+$«zìTkd­ŽŽ˜f(/´Þ°WóMJ&RÉÍ3S:S è&ŸÔI—Oª|R93¥_,©ägB83¥7Œ[D6lD à&·ˆ¤ô†‘H$Ç7éEä›L®ä°SÃN¹Ô‰É€ô9¬ÃN9;¥8“äR¤D¦ÕHÚ(Ýœt›.EJ÷¸¤Æ%uÔNC°(ÜÁ’,ÙÁ’,‰H"’ÈU!›%3X²×Öð ^3úÉü`¦¹x$X­èÖ{«£N@¤ˆ¤ŽŽÁ¢M†iõ&‚‚Õ +ÓêµãÛD”Þ7¬ VÇ V€1 +6E(¢tWõD +4O„òª€®Q —;¥1-î:öÂlŠÆ¡`Š‚MÁ´02\:x‚ëø‚MÁt¬Q ›ŒK_É +\•Ð=ŸfÀ’½¾4¨ã„qQ\¶Y.(— CT»ÈpÉdn"pfJ[TŽÅ¥ “'‰C©ä–)؇EÀE*”Y[‘Jþ±Læ‰Ã£ù„ ñ7Å%õ©Öê¨Û+0²&Ê~8ÊÐ…Ä¿$ »£ Œ ÃŒ%Ç‘”+A8 ²±ËÏjIÊÆ†a‘iõº8€6LS`åK_4EÁW¼L—‘5ql؉ í¶íÃèDÇÓx™,zK0XtG)M'ç³~Õ•2\ò˜€llXóØÐÉÄáé ¯Óèª`õ‰ ŽÖ¹ˆ®j6 ¦ã¿Ò‰Ã£q|@^§[ 2l tÝuDIDذ‚‹qÃÄSO²¤"† *š] +ž¨Š +¨Á +U‘ƒV&…¿;„1ž*rB dÉÇ‚¸*r†›Š™„Gñˆ ´UÓr6‹Ø7,¢U–]ùLBt€P=9=È çÆÛ`ï ¤»!=ÈÍA)Ằk:=|“…|J檰6°51IE(ª!G$,·^=Í8´ÈHe:÷"tZñŠšeÂìD 3zQÓ±`‚IÈ"uú3@´ 3Y‡ÖaMíÅ@Xh!ÖôÐ@ £‡fð9Ú–ŒÖÍSÉx]Û>'wxŽîÒ„:JÅÄ7¯nºÐfð‹g“è¥O@wÉ0µïóðdo‹ 2¥³P¸Á"v“ª3-ׄazÄE (äÄa.!ÀžE,Á„ŒŽ +ç<´Ù_?²a\¨½¾ÖVœIX”™ ˳™`uGÒ_Èf#Ê&;"òghÝÉEX㇑óD( Jû]‘«QˆBE;@6 —„…¯‚PqÃ> ”Y?àÉm‰…¿Ê­kà Æs —È·~N#…¿a +/è{¥Î4"üà8TQÞ° †+üR +!1誨Pt"-…Âw‚Õ ¼À7l4§¢Œá¨„/’% …«b„!À5r(ãOm$\ZbÃ2 Ó‹Ú&ÇlŸÄ3ql¤Î 7ì$X]!¡ ®gÀå1ét4&]IØ0RÂÑiyJ>by¸Y³`)4NRƒŠ³atAC*³i0Bí%,6©‚n0˜I“‰ r&lXãD1p%,@’Á`aÄ d ƒs´Èä «ôx¤ Ôù°R ª‘Æ ¸j§Š`ä°S ’Ö!‚wf$²'è…Ȉ$ÅHo˜É¹4‘þJŒ%a#IqN ÅÇh~x¶ R°a2s)@hÈ>Ò „oÚ m"M«²aŠ…u%¶¿¡ÑðHåj½a Á +e—å ;x‚ÕŸEþ×ÒøP„Œ®x”OFoå e% #VŠ,Ùëi‹`© 3zÃJáÂ+H­–¾ªjVõM"#TШcm´I¥zAü6(wë4¥šÃ[P•dX¦ú „žÈÆvÕðàåB À„6@Ñ©ŽÃ«/ž™tØ¢ô CT„ ª?¥ ÃDf®à¤dè6Ó‘Ð`â$4­^oØkc°hHÁ¦@:‚ô#83|À±a°—`µeÁØ6Ãkò:­á $Ãû_ΘîªßÄAù¬bõÉ×Yq,:n«¹ º|R'Ž—˜é܆½DœÃ0µOÃ$XM0PIE°'}sˆÞ)i˜ØPËDnX×*=œ ÂbÂ-žJ÷˜:ž`µ| 9]r‚ÿMo²èò³Zô†¹>¹ã4‚ï%7 ˜“+”o’³%ËËÉ±ß k:—fÙ™‚†l´^ÒÈ +\âÑ€.{öi@̤4ÙÈp鱋x¢H"•[@@uÕª%‚N·åÌÐ\VËÐ>ÖôÐÐ…ÑÄ¡š!Úeaôмÿo?ö‹4côÁMu*óIa“­Ì§ã>¨½ÁX}Ã^££a‘ùØ/X#sÙó0Lí}Pf#Z–©Â\inúbg¨ "c¹ì» œœÄ†¡LàL”'X ,ŸÜq1è›8%‚N{¥¢…VmÃ4D„h# +¢qš]h—êÐ0‹‡¶&D‹[Y€$-ùplÈÏŒ¾¤IŠO•¶þ©>]ÇÓžöce©lX¸ðTúÖc¹ÇŒ(C†2• €êú¦sÀ7¬±0€j‡Ê€AŸ àtãcºù-CM€jJ|9,Úß¹&sÖÄ¡‘F D39”C+Ø~ÓHŠ¢9LùC;yÞ’–çä‹ “\ µ‰¢!¶.<ö!R Éž€!ƒ + R›v¢UY1!-œö†qL ÇyÅÑ/’U¤"°ÐvÇ<íÍu›•]‘‡ÉkE"ÞX`ä)j7¥t¬@ É6òø€@“7Œ|Hô$Ý®Ñ7I# ¢™ÐøPÀ÷Qš8".{Ô$7´>¹ã\^!\™³WìK*#æg@6Œ µæBÑ `é\k§3 ¯Ÿ:ÐݰºdÚpY¦”ì¤@ É1 +&atpÃ6ˆ CY€²‚rÔt"¡Šò?¢#¯»´j¼$cmÉnà6ÝAÀ$ª°ôÏìÌÙxÉ‚£S!cÕc¯êv­ÆlØ{nÔ‡€²°Sú#\ ƒÏÉë Û° Û° ›l˜¨SPÃê¡q¬‰CˀЈÆËƆ…F™½AýDG˜ {¿’UÙÂöÓ-dÅj³X·‚h‰*ŽmTÙ ×hÃXÁ߆m˜ß° S }ô–‰oØ£±a­:YÅrWÑŸ…L \uòf$ ‘…>P":v´A9ÅѦH6Ì`µ¾N-"Ь‰XfJZG¿Pþèi_äXÓiZJGÔ­±P½aœãË´\/bw¡¡ȯ­/6ÌÒ‰Pþß0W?C$‹@UÏ„S @²aíéFRÙ +³)5ณLb ƒo˜rò S}+ÕKbA`Lö#0¦“1¦ ¾a(æßU8õu +,œÜsRø¨$¥* +szp*"ðƒÄ|Ê™n<(²¢ã¹)•è†qÍ•¦E¥ ìí)±²U*èTf\í Ja“…KÓx}Ó©„dC¥x*¤»@ؽa©AWö…@¬jhºÝ0ÖLéd@µÐlJ/£ŠÉzÃ6Ì@l#1‘P6Ì!/D1sÏbÁ*[F*ŸLdc6ì ÉÆn‘ŞÀH4±”>ŠQ…¡s½ʰ¢•ƒÒ `Ù)í´©oß`"W­Ý0!Àš84Nìzh& Š"B4ÉÁãÐ6ʡĮ‡¦ŽÔs7Š¢ñÏùЯ‡[‰.ÜEI¸p–º·æ{qR)lò@©lº C˜å‡w7 æ†5ˆR—]*97¥F&Ñë6ŒqÉœ6„'v·¶feá¥ÀËÄkâ8Œ™Îy"” ›f„&rn‘¿ôMf‡Á¢eUC[Ø”S¬+šùX\áJ{HÖ½DV„Ü™ð*X¥iÆSÚiH µuEG6´G=µOö ;½)ó3|¸Ó´JT&× ¯ÓcÃ÷©B¥Ã)ßSÖZ`h‚Á¢·A§!˱¹¯e$ÔÕiPºÿ»­:.¥ T‹ˆÄ€—sÑ ‘&ÊžN³Gq"uzæ¥oØ‹Eá NŽ8 øÿ|7VŸ +MþÈžÔ¹aÞ"3*‰°´25 –"b}JOÍ|Úç +8RªQ÷…%–ëû¸8š„E"~[…áåBtvMÐÀòåB•E—®RÁhA ‘gTp')fõû†y1ªÓÞ…æ.€ÀÁ¡­ :2söîT@þÕÕ«¤uÓMÖø´_“þ*Wåäü>8©2Ž ƒ;ߤ¡Y0|g’ ZsX÷aÝœæ°nˆæ°î‡æ°îï°S®„R".Å¥‘#ñ2I$dcwy8|ƒAê R! EÖ7lÃ/  Sz€`6¶ûJ;©ä؆YªÊy(Ptt±P¨["è´ ':'œèLN†+Ñ™ðáu0X´ûJ‡‚™XÄNi„=‚#Êƾ6â¨`#.´ô`²E•´Å…’ê*K(qÃzW +ŸóÁÂ%ò©¢'A£ðõC=·‹ÐUQs2þ㕊#Y¢Š—ÇAÂ×8È=6ÿ8mÀ"ö„G!êa-!ÀPN7,N +%o·>ž2”êŽM¥’‡?-É€C‘Ir#Q¨h°oD®Äá^¿Ãðþß0‚Á¢gÓRGuPÎWBƒˆâù•Œ@i\pÄ?0ðCõUT‘ºé2¦¦SØp‹t;)VEn8¹Ë {“ˆ(¥7¬‹ˆR³Ÿ½|R;ÎLé’i²He‰ôO©äŠ="PpM‚Œ|IéoÚ‹ˆÙ] ê(1Hˆ„t›Š”V¤)]RM-![ÄY²×ÝÈŒm*ºPˆ"q‡£Á`°hƒE›½ÕQ[Іy"”‚^w/̦`ºkذfcZ ÓÂ,"³)3Ae>Eœ/“Ò•Ã3‘Jn"•Ü¢Jl”y²-Õƒó/²¸Êª•‘õY\eSE'YGwqÍaÝý”®.~ÚVA{ü@PH -?ëü(¡]R:ì?R~"4REgâ8Å“sÑBÉPCÛ0ŒÀåäêÀÙq§"/¾ŠûÉ<öE¡‘uˆ7£îöÕ !¦´Ó}^ÅòIåÌ”þ83e–6ŒDb0Ä®W‚+AN‡u››é°nó°SzÃŒî4½¸¤Æ%u—F¤†K‘ÒÜÁ’}Ç™ ÙØ&K†Gê©#u"")ZV+»æ‰P +₽‰(½Ä‹ˆˆÒ=J/ˆ¥è9Dé˜Æsý…ÙL ³(Ø."ÐËÏZ°)˜ÎÍ^8.6Ÿ|>ù¥]\.—†Y%+ð.(“ÙbÙfRÉ)óÄá =&޲¨,ªÆ„«¬,²xºaŒ´Çñ£„. gºãG =@J]@¥‰ÃL@÷û(ç†m؆mjÃ6lÃ6lÃ0!ÐBV>—Ѩõµ¡&*%3ÈÌ€Œ‚4ó0 Ê&Ãé6×<>"FBL2* 0&ŽG"Á8 ‡ÅqbE‘œdP9gcBЭ]I|øQÅ„`¡H”Õ]ö-‚ŠøZghÎÆ¦÷‰8û2ÕšE¡8èØù•Ä¡$v?Y"kïa.eɳTcû¥íÆüÔ8xE€zfÇ/Ú: ³SÀ–¨mVýk‚ ¶,MVF{ÓfÖ\XYÈyj•ðìÒÏyøæÉQªÒ©lîõ)hf¢òzÌ7›?Gªò‹A4tiÉd¢`£/²ßà1OGZœ&‡§d–Þ¾Cþú~–º/D‡×Ì0Cnn®ãq§Ìk­£'Îø´lÍ:¦œ«È¹—˜ö¡è®j‰qÚ4¿"ÖÁb–,DµµJq”Վו˜ÏÒ°¨”#p AÕÆ{ˆßiÝöž¬\p”‰OQC²®æž„*(ÈÝ¥!YÓ¸©¦eÚTó…í£†@J»–Õ¨lTâO _ô C‚ÈÅ“*Êý°ÚÉ1«TS³Ê,Óà†AY‹y"íyVcªè„3m„ÄUk8j5õSɾ¼Ö(Ž/ºF¨ê\2˜L‘žm¿^ŒzÀ#1¢ú±kÞê4‰+ W²œÃ,}!c†vÇÐ⎊’2€ÝóFùV‰å®;ì²³JE Y¥WLÇ?÷è覆g„¾!F‡Œ}Zj=;ì+Âû…Î7å +ç4›Ëì´¾3]Ãj#D} mQåb¹óBs6§×å$z:-ÄÆ kt +™ó?õ+ñ.ºîxZ:*ô¤",+œšÔsÊ‹JÍ `ô +¦õ ŽB ¸ÿ‚þ÷™·a‡Îð×â¡Zñ}?$z·pô"[Pª¢Mæ!*}LÆðÖŽZ”1:#L>ýö-Á›)݇›šJ>û†åèÖ…¤‹Ž¦Rtq4RtÞÃŽŽ&IfG's<:Eîmüz뎊®…fш²Ñ‹7?–“áeôF ;÷²=Zö鯑mb +ˆ¾²“2;›íêç›pŽ—% @’m|ÅÑA,ñ°ã-&4Ùü`Œtmø–äðísxÿ¥IáãȱRëÜžÅEŒ€îß:¨¬è_ñ®þ2Ÿ–šÈmßò'¼]­‰v‚¡B 'l]€“ØâEýX4Ö«©FK‡åñ‡-°d»¸Ð(¤ÊŒý×üùá´óLçâ výjü9¦:î×ÐL,:¼-r–Ål/Ý¥Q£QÝ~Bv#¾FVOÊÜ_ØéDèõ±pRû·m‹Ð…*Ù0“ß1ÛUÉfŒSN˜W<)s»ØñElÙ10guî…ù8¡ÉÑûò|W!Ìcêú. Ì{%l¼¡?6Õæ¤ú0 ð–ÐúDCH¾Ë¨óÜâ½àÜ¥¾«dž¯Ùæ'*k­·0— [Ï71C'ÜÃæuŠZˉ’4âž7[1Tcš7âÎ/nXã¿1ã&>xdÁå¯f&ÆøûÓm&F¦v2§>ŠPÑLl­Âeƒ’ߌeLì$Ù½û¥#·Õ.róPЉÙcª’Qú©k[n 5­‰n„·¡Uøûõðn8 +×w ÇÒ,À@umùLû¢GÀŠCñQGÍâô¾žÄPÂzU«áü%,"{X®¿$½EµËH—à‚¿·¼'H û'dvÁìó šiàøÑã¶í«îÞoóKëñôÚ\¬7ábf –(­~´q“ϱ¬`Ênà ´N0<B ãA]†Òè‰ázíËo޵±Ý¿óÈò-ºr +›¨ÚGÃBh O×Ïq^Vû’ Úw#tŸ!—³m™óÆ+ q½½ç+a[†Ûu{z=ê ÒÑNi‹Ïkö5ቮ™—t +Aª‹¦‘ûs ‰cBÍœ ÜÙœñP™O¢Cäý‡Íkñ£Äö ÌtËnù›†> _I@Ù}xbWj®ÚT×ÐkCéðIôÖ…ïô¦CÅÀ³û}ÂZô~MŽq£ÒBп`¡^ôž÷áè.—Üè͘â1$T£3:…Ñûñ!?Èï^x€S¢õœœ‘ÇV!°tX‘½5¹wœËh-z§ž<‘3'*„mûÍ? ÷(8°Îù_¦';Uh|XàøÎÄö}u á¨`m4˜ÀäÙ‘™.Š£à-Úóÿ OŠþ)²ú.ëÛT˜ì¿‡ݤY8eÂLÌf-fÆëÈì˜ë® ¸Ú<\_uó¯€\|jå8§.¦N™ú_–ð¤O3IV~â“ö\°”ë†X%Ë+Þ(×ü3?´à Ìç-zsˆWšN;”³hy%¯6RÖÑbGJ®Oœ+Bâê‘laÔ9Cõ†aÏÌ4µ¥\0þÆÛôlÝÝsGžq£ÚM[ñʆ¶(¬!·ÅÎv‡œPÂ>fJbÛPôJ ¢õ°c0Ó÷Õ¾Ѓd žÂ6»8€“LÙ‰‚pwÇŽYKXî÷ø¦7>Å=ÖÛ(ù§\b{×dþ]<ÿ‚“Ñ!çZ!ÛѯˆÒéx‰óÕÁ“÷%T£‹Qm`ZÉ’øx¬Äç*²²ßä_JËT#öþ;€]¶¨2ú¾õ›?àÑûF÷Ÿkî̾©ŽDòUg ƒ´öÊaÍE®Î‰K•é»®{ø*ò¶^ Î{êå|À½“ÖÖ¬™!ùÕ±”θ£\r£)Ýn“õTþmæ¥Âé$3Hž¥%ö96T1:]Šò² ÐquÛ;BaRú­¨&ˆÔ„]ª—ÈFIÄ(;¹—òôM®Ñºz G84d dq¡ˆ][\Aeˆ1õÁú±u¾Hû­“¦Op饲R$Ìr•Nh°C¯Èb«Ïi •4uwQ3°Ó„д?Óµã<è†fê–ש#Þ²G<Û¥37%ùt_õÙ yW#Øü±Æo«‚v—¹Vû*ð–´'¤5ùC,bªÝÔl µ†åuùÒ”u᯴>š¡AæD]÷3l¶ã¸we^u„Ÿ{ϲu!ÊÑ‚vÉRݦ œ"§hÏ„^ƒk¬uûv­Ý +ÙQ-ß…GwAÌÏØt—ÇubsßvŸ9|4u÷£¡äè †Òo68Yr±DÇa›+8À-é.ƒï +zóJW¬òáoJ€!ÿ¿ÓÔüåsÚPÃÖ§shDN^móáÀâ_Ï,ÿç•ÄÄ–à½Æu¯¦F‰@\5"m~Û,¦äÆží•zk|Œ\•¹>צítãü+ÆÃf[ÄÊÇŽ ݼ¬oP",!‰ýQ¿«2k³0gy®áÚþ°¿†€W9³Ó¡ñA~.¯_ëàýÉtÔ0È5· "w>î‘\æYNZÒA]A¨,ã³jÎJó[è(F²Æ¼&ZëȹðÀ~Âù§ާ«ÙÄóƉÂ`÷i#RøeèWÑÚ–1­@8¡ù‰êÌfåH »M½&†Ú“‡8©~ß4x<Ë·%êœ7ÜYVª–óZ<°Ïhçâ)<ÜzåIž{ÃñQ`{Uæ/ð‰)ôM;€ÆE4x>b¨Aþ ›Šî;IzX;À»‹Î£¢ž¿u^ ½‚“±átz¬’Ô1¯×Ì\)øZ†H*‹Á\|’—U’ðV0žÁ:'¨§f&ÙŸ(à–3Ù”¦Éø£›ª{J{Ë@~¢2°SC ë Ž 9Y¯ÅñVšr#½½‰S4ÌRŽ·Ì¯{2V &ÜÕòM;L%êŒûý€–˜@ÛÊ‚›AïÒèa0ÜãAð þH¤œÉ^>¸r+&Wyzâ«)·X’xnæZ¬#ˆ¢Ü*‡¹Å^bkƒhv_.èÓÐô”[ç2ѸÕ6åÖ³þ@˜[.ƒjî¡8J*·nvJ’ÀÜzˆ'«Ü¢îeµý q·—iMRƒi®Ê-çMSE]2*·"“ÅÙñ1·Ó¤e•[¬3ëÿh±r«~€2sËݱ»‹ž3·”šè r yóCyh”±6z¸úZ‘,~ººµK`·,+0} ½_r•Â,—'BWkææ*!E5óDA‰ÐRDmþN#>)6ЖÈ>®àÕyº>ðUÖËìü[ádnQÆÃ^&hš•¸Ùž¹‘³E­HÓ™‰½4Ív&Ð>5R“É4)}‡þ}‡-‰~òýh©ƒ¡ZäZæâáÊ-ãq01~¯v Üjæ +š@òþiMéJ¬Fˆþ‚·–@ [±þŒ‚AŽ»N‘âÓ Ç ûˆ`ƒÛž"•mÙ­^ÞUmKô€ ö1i†ìíNzR!ó7éuM“˜¸.•ùÂQ€–08 +-*ŠV_¡éœˆ=9´« ÌY?lqSIÐã–z7Ù@Ó—ZD&Z<™HÚêè*ê3E`«$íŠ}D%Ú2æä^U`ò6¢dTv$CxóÎÈD’B;©×ô­Ä löYÐ~ù€~0T–-y˜gšò#3ŠÉÌ-³®xüÂ,ÅSĄ̊=KÄB±b«ˆ ª8—Q“º÷Àaº“­+\(ï¹alñ—VÚê–Òu·^­Nßŧ€™zƒIì.¾[“Xpt‚•[ñ¤ÌÏÒ’†64¸¢_§ƒUcI4Xôsî¿…"Œñ¥0Íhüèœ^bˆ|ËŽy£N=–ŒkšO°w4§#™“ÖÂþt ;‚Þ`ô@T":êÖ¼¿ú2;)p å¼n„¨•q´1‘u“$²g¬<¼µ? ²}mª„ä*ÉÓ­x÷Æ'?_uÏdD‹Y*¡z`]Æ„éÜVî´Nð‘#f¡°À’r ëf\u»FhïÝSæf;Юy#îm±Ø !hŽ–LꊥŒ-Ë€N96ônÞ®2þòÊà‘ 9"Ñ"¦Œ «¸ó­KæÓp8Yw¾L ¤:îFNÛ?ψ§zJjó^ùF™‰éÉæµIE°aâ3öGÕ·KÞHç@¼E@ÕºÛ×Ú™náœÛÒ-‚6Ãk_„Ç”¤&l,äÍC‘j¬zCP£ޱç?Rå£ žg†º% 5âxäþKʨ"„Ó ÓæB¿ñŸ:?¢Š\`õªòóêãEÂU7û[F{ÆÎzuvA + •YÞG_ìZr%zô¶º©'î]$¿¥-«sÖ7?>$Ä<JÓBgÂpŒÁ±5QÍ ¤Ü&ÛŠ2¤À)s¼®E.šBÏ~Éš’R¦Þu`ÑÀÚìP¾*!oa„‚ 8Hé™TÏ/w¹/*Â~påÂR“r¬¤šli®Û¤¶L—8Öõ“ùÌ‚QF*ð'“àA%3l +ƒ%”ò{GàžÕ9º†¡ÍM´J‰=é>™âB«švÙzµT˜ɣîr/0¼ßí.ü,oÔ«ê8¡Kh®Fóc½`nRL§z”â*ùoÙ'™vûÖ%¤;'+íª§”pu½ô|à”ûÚ›ò-Ø +1Ë8ggFç0T–øz]¾ètAš¬Š•ÕŸºWÅöEè8w¸]¢t<¡ÊºhàÀû„dŽÿtŽþ< +ªÅ‰Ž£™[uÞŹ*?üŠôWŠo—¿PC}Â^vžÕC~¼~öÛœ„"Â:Rð¸_Å&ÕA·Îõ¢¥u†¢B±DuÞ§NÿãFgÞºçM®q^ܽǛ¡î™‹:Wyg”Ãó¢ÎíÇÎp÷ÐÄ·Ñ[ ‡úŒüa»9Ô+¤À ™êDf’0B³6ã©¡¹`^æêÜc +àÒ6{xÑ—uöâM˜ÑR“¸ê¼Êïzmù& ’ Õ{»9¤?¨IÒìYËgm¨nÖN+‹€ñŒøÔ+S³H›,”c:ê¹#no>IÏ$h™Sîë*b¡íø†W[– b³1û¡®ï-ï8 Û­$ªywk¢·Hƒ†m+T„Ñœry¶:„¬@…éåš/Zî}ôæ_ÂÜš‰ øBóé*R»…l³3Íe±T™s@G~ìBÕµD›¼Ïyh.sšéá3SÐŒÐb”@²XÆÿÌá Í~ù”×¥~i=ï¡ÙŠåB·rg>óÿÍk/¡ŸKMŽÐLæn¡¡ìdEEàªvóùâ2¶Q¦©ÏìOè(›U€(¬\¯+¦ŸY|ƒ¹ͬžÑëØXBó¾?óJh.OךñX´žÐ|ëgnu ¡ùê»ãdB3r?3÷ÞB³×æ Êì"CsÙ䘵z©„fË|f´‘šGÒÇÌt-•мŒÏ,‚¯Ð¼m®_TŸ9†BóŒË÷¯Ÿ¹‘Õ•84_^榅.þeú3×-†fŽÏ¬·ÔPM2`†bA7X7êÐ&c™‹At¡Öi‡ÏŒ/ Íë³L.ùd¶ÞÿÌùÏ‹êËY nÖèû™'ßÐl·IN;W…Ëò„æâÈWh|üuWßèÖædf~dõšX·Ÿ>`1à÷Þi):Ÿfc‰¯ èÄ8´U¡„mwSå oœ¶#~½[–ËÑEØ¿¬æö.yX1“˜ÍlB÷¨|ãÂ0D?—nÉãÜP÷#¬ÄÀ‰œÚ˜:Á=ÍåóÖÞ»­$+ o«8£½.#.‡euò«â5Š×ÌÙw ˜¤z&­£ØÒqº9R35I®®ArJÄMØôW%]Þ> œøavB–â/D?vK-Ëì»Q6–…R@‘A˜cIцsÓ³³;0ÄG“´ªŽ=×r ö£¢*’Œ­t BPðt‹šE<7M?h£X±:”èµsmÑ9Nx^ÒÉ)Nšš)X•§ã/€d‹6UñMÇÒ¥Ðv¢XW 5‰œ=d>õÛ7rHˆû̼b㶌ӻ&"kï(^Ô[[¿k %Å;Ý‘fM˜iÞbð6çÍžqLšù¢8ÀˆÎ× 1 µÍÕ¦Èá1VÞVO&Ç_<ùäü@·m i11e€KÒüTViܾi¶*¥&àÒ“Msçÿçé/,i®+^†gš“/©•Cß–™æ‚Ï’’ÿ5",gš}òIÉSä"!$ã1ßGˆ¼ÙïHÈðT^ûÏÍOzN%Ÿ©¿Ï©ãFgg¸æüxˆfE¯?Ä9uNЭ¦pPH\88U•NS²}_ÀÂÊDú†WÊ¥l¹œ!ŸÉ‰"²d-ø>ltEà˜-2jÏL€\v#çÖ& UÈvQDsÝöö™áyyrŽº‡H‰pJv¥²6QÂÎÇz˜ÙÙ“Âö£¦zY¦R «!euF¥{Ûƒ-÷uSí˜f⺖H +HuNFvÓ|*Ì`.Ùx9½ù3²l2") eqô|ñjyÞ +ö«ÎÍ%#mo᫯>kµÈ›‡ýÁ•×°.e,œFMÚŸhìžc‡¶«°~IØÆ!  6ìø„šc¹¼¿LG´¬õ£ð©Ï ¦\ÂÊÝ]3)½Á¡£…ÊîÀû±:1ð!$p¼tbñG&,j,ù™Ñ`å"¯üø“€Ã$¤K²è–3'õ‚V}¯QµÄyzvŒ*o+£¾+¡Š>Ÿ1/‡«ùg‡”º¼2>Öe嘕¼Fâ3c½ð¸E†銱œòX×]‘ޱÝÄÙÒ‚5Pâ½ÑËÄ Ë_á94ã"hŠ|ÆòãJªµ9wô°ïÖµTd“™;p@º°«éÇ6Ùd dê‚3¼Á2%±2?Åøl(5ÜqWãç1ÆÍ ò8Ž–ŸIP²âÁ»POÎÿÑ\U ÝCÛ‹ÔXZµ±ï/Åb›i¶MêÍ`ûk]º$úÔJÍ"áBßF,vþì!Ä9t tÆíH¬€ºøžíWdÄy¡‰1¾ûŒá+ò,ËOòkß‹–Ù}úî܃¦äE¥,ª+LF0¸Ux”´Ð•½A&ÏÌ–…|ˆX“Çñ¯X"^o»Å¥rØ«ºîSžïKsÅîºáÇ‹“(ˆùÀÎHç@9Ñk…¾g~oÚa*B©»Œq‰ /?r4SÛ>b6-l Z©hÉÂÓ7X¿6í€j[ +èïu³Æá€¥C¹¶ÍˆŽ(»äH +/ŽV^½Yª¹³jrÇBwí¬r³qƒJ!@Ì*½nÁJî+DðË"}Â~ž·ãzI«Mª³[h_irŽÿ·_ðð‚Šoì^f°ãJ[¬X'þeÜa”ò0²»‡Øp˜ÞØZ£{q—¯û¥pü@R1YvB©¯´k(Ṙ D×EKÇ[M9ÿJ.ÓyßÀ17×ð-6ÊF÷R5cާD›Á•}n~5$•/òXŒeɃ3j~…ËQh$]ÍY~"±37«Ž= +Õ:ô]O–öG÷-c\ô…¶Ò”—Sڋÿ5Ð÷i©3sð‡EÄEz É…¹ùôög2Jªv9Ý–Qòi.QšƒŠuÀ`TPŠˆ¸šÅ àÛ¶ÖIÑAÅõôÑÒk@ª4—x8 Á7wlºÆ©#Œ«1M&¶©_ô·þ=$®)¸Q@¸76e‡‹Õõyâ*É>&Ø+C~' =µ L—2í£_á_ „ŒKQz˜v‚«£‚ÄΘ{‰oR`FxÓ¦~JU'IÆ)²ÙÁ,?ÆÐ0Pû¤ü¡}’‡Ê¾ta %ªÂìUA¦bF±X©ð¼Óæ+;O>ÚáóhüÑ¡oÖ(z ++˜fñºðžŠ§y¢ék 6ž$ÎlèC仌|Œ #tÚ°Ò§– +çjÖîÞ¦„·yÂZ¡û8<N¤Vß¼>”®窴jRü—g™ [ó|c ¾`ÓÁó’.?ÔÐtë é'ÜÐ #ó`_soŠB»~!|»S*^v3%¾‡>ùˆE„e'–0(BjV©¸îSÄê’∖Ôç@)&ÁzØ””ó7â#&ž²·{bU,ÕˆÓ–^áT°ìÚ”…ÙÓˆgKlRhã«“µ?\h’¼jijbYžé‰ocŸ<êøÄã.ÆkhÚà .4ω8,]áûΎϯõ•'”¾ÚlG,¾ù.~›a,3zx?â,5ð½#蘼¬“…÷€–³R*Cy©.žHtAiä9½×r}Ò\%ýLŸ{X~–Wr🞠+„J¨“J´nHÔBîJƒ¡%úÙ÷Û›³„ð0Ù´ +‘ï¶ i4íâWï|´<Þ²—¥TPÀ½ø0&Ž20s¾'Õû …Ôˆh5S¸˜f¸¹#³šFT1QŒd£!x¡šc%œV³qÿ %³Õ¬Ó$E´r‘~¿ð¾<%/e›çTƒŠ&Þ­kqpMøÐ‡Éª*DA)…pâÌqû^Ê"ˆ›bK59Y¡Ea×08»'%p¡­y•Æ¡]Äá¿96dYýkeG»2 X]ÂN¥ûbäL²ý¢†ÜVÃ<Ì”úñe'YÄȾÄý\ ED€s1¹S€"ioa®°0_†(¨8p0æ²¼q +u®ÂC'}t&.ýL}ñîåûRúõvà\Þ^JÜ,ºuÍ&ñ¬Ÿ^2ÉÝÅÄñßòÖ‚]cáXðßøË_•‹ƒ/,~´âëä®ß|Ù®Yü3ëL±x¤òâñ†¡‰|Bs3X…Ñ*pÔ®àtÿý¿ípµÓÁÏÆ@À™•^U©œiÉÍ%êjšžüjƒƒ¤#ÍꘫO;¹Ì,<ßç5 <š’z¯¬#µm™‚žNÉ VLòµËS{/ƒD³Þ ±¥Ž™§º8y‘x%¯³ Æ’(ö–aÈ÷–•cc#°šø%±Œ¥.Ûqˆ¼”í°aÈ[¼æå!Õé¾,‡|O˜VÍa4¯JiãÊÔ¢H!Í–y\ü»ÿyx¦„gv®`›¯ÐJ“ªæ:G_S9;ì„ÙÎx)æ¯HJÀ¢wð-¹šW ¥£­ÑÝ–„0ßs +KÐCW$ X!šœ +Ø@ I‰–°óûé¸g©B²Â©!òÃ5o:?!òKê‹rúçêÈ/‘öÂ’צ§^2*l^¾’c(70XúI$Eü +Ž¿,´ÿa«_ûˆØ a¿óÉÈÌéaù!YÖ\æc àÍ_”› Îì:Ø„öÚ7«È«aJ!ˆÍìjP,3_¶³8×üæ"†ªÊ•Ùº„3Z2v¯±jþ ÀæqÅ)©§ý¾˜Ã]1bI@Äþó1ƒ/¾f”¾÷ívü±çÙ)J£7’aþÜÝ1G «"(ê¼ë”ß<%‘LìFHG+ó ‡ ³;˜+Ëf†,òñ?nILœNk@EÊ©’ÜØD Áú–PcG|;VÆ9¤$]ª D3B³7ÈSïÊ~ØX`x¶`­¢¤?ï^€x“´H34•@z{TáÁÁ›FÍŒ…¤ªiöÑ‘µ ÞTS;3…45³þw®–¤\¡…?.;]Þå²0”œðÐeÞœ+ÙtÕÑð ¶¡Ÿn|Í%F'?˜Ç¥A@:Òó±>%?08 ꀆ–ÝwÛ??½{§¸áȽ§bºÜ-ã*kxªA@Ô€´Fá’å°â×à Ó}¼T:^tÅïálè}Òñz© +4èËé\EŸØê_>*GåôÃôhjF2¢¿J!ú)y÷F\ÍtôÇÍV2ýòA¼ "û¸<ö‰ @ôÅ0„脆cDÜ’ð>BŽG +µR¥¾M—ef ú^Åït∠obgˆöwÿÇy6ýA‰/£Kécu‘£o@(5u] 7ÎNK¡.VÌcDðh0lÇ„LBN‰Ü¥Èº´»nò;iVÆZ‚óÐY³“l]DŠKð2ßE“sŠ„‡ã  £(NÄ9myfœ ° +jb\ó5ÜöèüP䲩Žù¸¡¢íÝÞjz?\¶ÝÁ£˜ÜþâœSçý:&Ú¯gÄn+pà~ÿw(2së»f_;ªÀAÐiíoÄ“éÑÄ&Ð;€ë2 V‚û¨VP ®LÛæê³òyqè³t7£×µ¿ôÌîTMæ[ÅÇ -’X{LØöS f4%A™¼Ž ôǓڱ™T ˆú Ù†¯¢·Û)þÍÆ'à§vW +×’ÝÛe°)ø"_ë:ˆ™´þÍt l¶œ gþ6úõ$X,`5…!°Jxfɵ&‰2ð˜/±A¯FÂTº—ø¡CÕÿM&×)9ôØ;â6˜–R[òäÙ_qE´•H>‰ŽŽæ=ßïhsÌrM©îàe05b¶—‹\r¸ Xž´i!¹Q÷t=h ‚Ê Î®×`’ÑQ†‚WÄÇ~Ù‘\J¬é®õɇ£Ÿ»ËÛFéã¹èÝ emQ1t‚^¬šÊ® {tP!÷ ˆ° }QDRüϨ…º"‘¡VŒKƒÔ„$Úò°%žD½mØžî…O}E³M²´'qz~œT?¸% ÉËUôìáÃf~Â4=‘’¦YZHØ ñ üt°“úD5ÐF™ó’ã.ÙŒ³ÂÁþwâBOõ ¨ŸÚü©"ÿ÷½cL _'ŸÐ‹d“—õ#üyJéèXnðð?ø ù×?û!’o¦Ê[ØéÚ€ KV“#£ˆ°52祈‰L"eôcr‹ôzF¡.•ï‘71P‡a>,Vâ&‘ö7‰ù–þ‘-ÿ§I¹¾[jõg;NB*¸—¸Vᯑ¿aù2îoœn÷;æðþD5ÏÇB|µ}LèŸBt‘JŽèÒ“ÇJË™„ôWB†o7·fTs•NcßÚ$¬×*Ø*6V4g™.ÊŒUÈÿK¤[ìE³&’ß>¶ßœ‡Ü°5Vˆ;`jÁÄl†Ó®èvJ¯ÝMIÿWü(«—Ù†ÿPD ôLŽØŸì‚7|£9šž™áh^K½Ã +]™É š6 y° Ã 4C¥†[çoF‡¸“`€£®ù9;6›"Ã"lU¢î߈»o9*\û¨n’hcò\ 8RÆ'‘Ñ).ÒThœ)ÁÕWîU‡ëp¶’ —’”÷àâÙ½3’8ÜAZןjË>‹V.'ºÐ™Še‘¨K5¼æš}dÃðX±"H-Ö‹&r¨h€}дùç‡Ô¤·qÑ{1ƒ”VMÓsq~_ªPI• é­ksd¾ÖØ-T «ì·I1G@…â­ŒH“ö]ªò¼b¨œñ;Äõ@õ÷²¤ç“¨ÕÈ~h-uC/͹¯#{ñWL,l¼—ÊÇEÅ] œ9Û?†±‰zl²°ÿ™°aãÖá˜Ã!½ù j©ˆ*5zVߺ¤ 0*Þ‹7ú©mªúâ«ÎÛ$aN9†T&÷á¼C¤:3š("66¶(fn‹qµÎUJ_€%&”Hˆ[oäÏ&“ûÞ»mÔað"|í†îtF>yDº¶¤uIŽ8­rmoç6ÄLÁÄÏ ++MJ|/N°`ÕÍFFkö<ѲˆÈÓ§ÿ"®\´:6˜ZÁÚ¦µøËö€výU1¶¨5’©–êÚ€ÂIà+Š›|blÚ‰·2üɺÎ#gµûéã•áœÜn;ùLJÐIÝÕp~]9ƒu{ZÏgz_È•!…”³ÇìcY“[…¼%‚*L½­J•ƒ,ù^¬ggÝ›vÊeœg:y¸[½¼}<Ú¡Jq§¼ï+ Ó«_º;äf2‘Û6 v=¼|:»A´Ë?Þ Ps0ÿ6MºÒ®¬ÄüN6AÉßdŸñ¾ò ÅAŽE½_^,®qr²ÒúVl³Bï@ŽHáM+GgxFA`eYãöŠ]—?°Tvº`ü1ÖHÚœpªÍ™ŒHô»í§°+æíŽ_̪ùlΦ=Ïjpàígb@äûâ­]Šf?Ø À2àjÇíjNzKî3Ú8›™•Zº…VçŽ{FuÄo¯\y\!Àký|\º|ôùDqì˜æYc +™CßÈ&eFšõ+”#¿«uAñä -¾³£“Q%µCéÞ:P.¨ðóöaY±:‰×úþ‹®ÕÃ…*9B|tß‚ï5¯xgoLP–)kD ìŒÎ/_=Ì$ðÅ}Áà°¡ëàxÿ½Y½‡„¶—ï<ƒå©tS‹Êk"%EŒV"$)㹃@4åc¸¶M2ŸÙŸ_Ç·{äìgnu[„IfŸŸlþ‚_6Ì¿¥ÁéhÈßaÃØD‘‹óêÃÖ®´ (?EoÖá‡D­Ÿ[ü¯DIyÉž¥Sãb:.ÜÊÆÉ˜)¦± é“¶.ÓÀ9œÕTç¶8Û9S $=×yË@}¦BŽcñÌ4nÎsÿ¾÷6^s• ΢=HþdÏ€ö’ùJp˜ ž T½‚Ê<0`hs¨[øpâájÁ; +¿ƒÁåþ15¯ƒ¢ßB¦É|TB}±ÿ:9׌x­pÂMûŸtˆ²Uˆú\ÿÕî)|:‘ì—b¸æþ(Û>3MZÏö*WñGmÓb_Pd-VŒÖ§a»<ŠÌÁã|ŠýÙ€æ>úU}}#7 @*ˆ-ñ¬ByRë3Ä;æ`x¨òÑ¢ðߪ»-KºpU­áœ?en…Ž×[}©  f.ËüˆÃÆ¡H¢˜˜ÔãiˆËÿÅœdiÖÖ7ZL¬Á6S+©sLz +¤´ä{H¦"­o<ÞÚ' +3˜ìâ27àD8Ì…ñDõ‡9eÊàÞ›j°y#:M› .Èê;Ÿ±[¡Ä BgN¦bß\>ÏÊMGa´4ƒÞ‘¡öªÿ‹G+ Ø~ÁËÐݯˆ*ʬ@ºÏWîOÔrâ›ÀÁ´Õgš­±Ëlfáò.BÖ=§ü·3f»óx|‡•YÓÚ ëÿ&[hÍâÅô‡äþp›Àè +•'¼±ºñ(6ð=QÒ¢UeÓ­RqÊÌ~ì§îuØ]¯êmÝÆ0%"i®R”?iGZIUà®*™uGErB`OfбOèD}È8€*éuWèšrÚ÷—æšWy09ÞÁéô€¨ímHphBæŸW°©q}I”yoÂÀ=9sAÿ3ù°Ÿ='˜M°øÙÕ6áO0À8ïÆüàÙ™_~p9ï¡©:ÆÃ¢iþ1K_|JDONúÖŦàÙä“Z9(.6VÂN“­¼àÉ©äÀ’(Ó€aÖ[Ÿ7ÇåíR@`#ð–ÆL!!}ùü€¿sásÇ’®šøé|P»Þe]a/A®s=°f·Ä"$ }sj1;”ùØdqÀE÷zëu¹ˆ¼íû¨cp¸Õ+ÞÑÔbå‹ïéèÕ.ËðÁX~äKB j1Y1”Á?â!¹âò\TŸÙ ê?J–ˆA ƒÑ·oZðs(_Þi›äYþ ù€Iu¡ãÖ*üK/…+®eü G-÷ºŒ’ˆ´RØ‚6ååKp@6Ár›¶,!,¤$?Y¯À*Î+S+“–âØÅ´ËÝŒº2ËJ³;&¡¿¤%gíÓZyŒûÿ,g€Š|íüYFœÔ`§ãËÕ”ÿý¡ÿoˆésq@(¶€ì…[¨ÿ#åÑxç§ïH¯âXؘŠ&´tôŠR¤v»<$¾ç>Z4ê£e‹ +.ï “núSzÄMÙŠ… Å|^V¼ÙÑe3¢·\*:™†ëZ‚.`:®5HôŠ +Æfäì¹SÅüùñFg©…ÑA ò»Ù½æc+-·ÿTž—qþ«5„ú"VùJ»kv?×zpØC»#ª£·ï {fLÁi\»ho1©^µ²9òçL¬4*© +îùVw=ÊJ¢öôüâ¦|,…ž-n»ÏVÊDÌŠI$B2<ä«ùkcw ›ùpnÒ!ÌuÕÙ胣]‘†qaŒ[ý…´‚l#bã'—%ÝüÏ=ü}g +¬à@ãïÜ´b¤0"ûÜÔ+È,ú 6rÂÃ5ÛAÍvä»ÌÄÅ{Dó>Ëyò}ùå-÷[µñ¾óUUP9ï5—K–ë¥*›¦FÚqk9½ãf8'±{Ì“¦ÔuëöMU ^ס³ÏYöÔ\F ¸z¨Ïh4Üw±ûÿ¥j“$x™µmYƒhW±îD›øä«+áQ¾íWñ¶¿q цfè»>®ª2ºjuæ-fB-sP²¸ÿ*‹[oÔDzu–âŒêæV°ÖíiQ€Ö[ЇÌ,T˙Рc–ë¤u%t‹¨-±ó^aèT˜ó™ “s]tèÍ!ÐØü¯˜fk\WÅÜu¯“cí(W¤uËJZnH&H6ñx Õ0OVк08úHZË ÿünüïÞYy‚¯%ƽ`d4\µ6Ùz¯vH+Ó˜²uš¯;̘ùé ¦×ÊB¦×‘²ñcuÁ % "èÞÐXhŸ„nO€„å9Kᆰ"eÒCVñÇ/‘–e ~éñµÊ±h,ÜoWŒÀ–ª«ÕôùâôÐ0?òxO±ü‹dëÅᨦ „šD Mú.FTŸ/Ug?”=äø £º¡A\å)C_ü ÃÌ3´3™§ÃÍËy< +@ÌÀ*<@]Ãòîj¶m œ?ËÎn¨@?ààÑ+ž +q¹×U·–»¥›k_DU3òyWS½z£j¯ ƒq°×,zë¯Ru,c¶P;QV5x0ê ˰dàªI +ó_>4ô0É!‘ªW©ÁuËÕØÉÀh(EFåňi©)­ñJ)PXw¢e"ÖzÓ,FüsÞ‹ö‚‰VZ÷_ÃÀÕ  +ú°Œ8àZçcÿÙ®8ñ|@3†,D_^[,"—ôSj$Dö$—M–à&©DGúºÀˆÖ`ù²CIw½=¹C08Z6´ƒ.š¢à[‚ +š@‘j&X2 \#¢ÁÃú¶jrJæ@È,¼% ôë ; +1üÏh‚ÑBW諺¤E¹eüåÎfÇRÁæóbÑMáã7A3í°¢è_iû+èËFK*õ8 ÊðÀéúÉÊÁ¬Œ[Ýô‡;}²’‰@ÇLmt’ªPþ´Êï|Ú©IJ°p᜿Œé¬WŒGgƒxõw\"³p¿ÞÝÉ_Ä3;Dÿ4ìèA:lNå#}gòY­8£ÄnëûžŸŠ õÞ? +0pš¬ÂD-ñ€¿>ÿÞ´fâ›’ˆã)-ˆÓ‘ðˆNn4c ô@(H.&+z¸Hð`@B5”†’q ¥¡4Ô†ÅEÂBCIœ^6L4ê¬|ðÄA™HÄ!YX0äšù!‘$4< ¨h¨x>ÿ€ÀÀàAP°„ ‰„§’ÎI ÂÀ(°Œ|l” H* 2K! 4±ÁÏr0ÛŒ:‡2ö ácCôáB`C+ŸÓPË#ÃT4x„dF| ¼€ hc´!ê  ‰¤aÉ0ÎÉceäãâ±iàÓt¨,Ì@(Q`@N× Òlˆfl|D*lˆ$RJð#Ãé6 ¢Q‚†²Š„“#‘V>Š£ H§gâÐ9‘ÒƒT`rt‚²òÉX)æ4ŒÓ€ÄáЈ0A‰(‡áé Z¼xJÇ¢,‘˜P.M¼ AYùh(Œ–ùÎY—®C¢ÀÖ +)D¥ƒacòaH± CP‚ *¨ØÃcåc )%Ø!Ðá˜èÒíŽÙañ`wRÁ$•EK‹ÓP1 PŽs YC„!%–‡Š5 ’Ø•OÒƒJ`H +ÒʧUF(°C‡ rN  !T,*æ`æb£±ÑýX‹Ê‹”pr,™r Al†å'8¥ÜFBHѤ2pˆ24BBº÷‚r¦+ Uò<0¤§CFÅF )šùf‚c²”´È– :DÈDbX <àh"‚!#*. +ˆ³ê#áä<#˜Pîƒq¤«¸è¬|6 +½°Â·Æ¢ ›a-á9Ýs6à l0dÅ…ÂÊgÓaà$˜Hg: †!@Yù`˔뎘ӰN +äpqŠTØhAYù´……(9ÇDð€ +©âl0aÈÅ`„ 4€aȉѮ|<#£ÎA°øÆG´@é€8J.>(@N§¡:3œ „’ÎEŒ,l°#R*ð¢¥T‚yq*ÁP‡•gMJ¶fD,V¡À¡OWzxå* Ñ€%x+`‚“@FÅF†àtŠ#R”²À+< ,1* k?6ƒ2‘¬%'*¦1ñÀ¡“‘†)JÂÉ…hÙà†„ù8Ä´ò¹x@`ȧ‘˜P.7¥Dq‰•Ï*¹:lÎ/dT,¤ð©¡B/¥t€é˜@0Á‰‘‘Û0hè‚ +Äèt@*^<á €ÁçN¤„PCçDqViAO…†U,`œŽ³F +Œ#“a •OhÀ”“¹l|8û1¬ˆY@º‰ HŠ9P @(F }º“‰t³å„Žtkcò±Vôp"¬s"‰ÎÊ' r¢%Ã&Œ¸,Ü0ÂyH<îAÙè tlA˜<”6KCÃi``B¨/HP2ì¢!J˜WŠ8ÑШ£Ãñq‘¸ë8 "Jˆ ™H†ˆc"7bàc˜¢äT$œ\ÆË é6 &Ò]„€V> (  „‘ BÃnq@X!/ ê !/ .0B81 +Ÿ[–ú(4Í,Qv,{È(ñUp¨t˜ &"T`¢9ð€Oç£EŸi¨‘‡€É“hAâs]:“Çá³ðÒ8q˜`¨åT‚06D•PƒÐŠ.]±ðIqxÑŒ:÷°ÂòBB:‹† v LƒÐͰ ‹)Uà!E“ýàr"eaƒJÀ„˘”‹¸`áÜiB&r"%¤s÷ÙLp.b&6Z° s 'w1jДŽdÁa‚&á9]„håã1!°dXDȰ÷|(2Baåð8Œ![ <@>8Áá ,nÓ ŽEKŒŠqH±5‘JNTìVôp.Îaa‚j"Ä„rÛÁ ŽÂ”³ˆ™Ñ$ŃŽ6˜‰Òi¤x¬|(2Ãàs¢žÓµÌ~pfaÀãå_®aíÈ£ÁE·F(Ð"EŰÓÄé â°¢¨˜ |Ø E”‘ 3‹ˆ£a½Á͆!Å4,Z6¨Ð11Q?‰’‚  +3Iø‹nñ&^Qðœ}C +Jƒ](`BdJVÄÄY†1qº ƒÏ‚üÁÉÇ€H4à‡…HGÈ€ƒt Z¹‹i°`ã³raÓaøP¤Â‡¨5TG†œh 2aZHˆÅABºÃXðœ†q0ø¬eH±6aŒn˜tLè‚ä`a¸&(ƒbBÈØ¬ˆ8ŒpÒ$’àD3)žŸN©AÁÁRHcÀ@¤q@À! —’  ”. +8ñ'ÑF<Å<IpË1 §;§ŽŽ“ÈE†áJ40Ÿ†º‡†[pÑ2ƒ¤tœDOó ˆ‰­\€À; •>ü1 Ç Xf°*}N<£„ †R±¨XÂF‹“á€ñ(*æ(*í}¤ s%e˜·G†ù‘2LÆ%CÂSêxyÐAI)é è„w€PàPZçå +ˆ#ã%†…†Á” £ p aÆ ÉŒ2,Fb€Q1ðÅÀH‰\0✠l”¬Å€&À ¸x°x0x0šXxˆQñ@ñ )ñxÀ€I„3 4ÔÈ 8@R`„AŒ" ÌÌ„ €±ø¸ Œ”VÂsDœltœ|,@’”£ÍA˜ÌÀh(”„Að Òq3ÃÒÑÙ€ò¬V‚Òjl(!INN”0AˆÐ<Xã 3 âØg°8N©âx@Xrt@œBÃ-1”f>:"0(„Ä0ØŽ&"```>*8TóÙà#ÑÂàRÆè ÇÅ]ø‹Œ +‹‘ Fˆ’;Ø1°JÇš°äjÀ†‰ˆócåÁÉGå’#J8¹ ‡[Ó(+6>)Ã4$6&ZJPCM4DˆÒKN®"Ä¡s­&&!ÁÂ9ß͇ã#MPƒ†ùˆOgB@Zù”88LÐ9´AŠÊÙ'8"§aLlðd€Å‚ +>YtÎÁ€F 9 EtŽb€—Î90‘8`LÂDƒ)…ÅE0*°#âA”„“1á0A •Q +•.!9D!&Èy¹H@ DL @>jbÁ ÊÅÀ4rfÁ: B L¥– ⊠ˆƒñ€ -RBT¤´d,ˆ“@bAçJ/ž +ÌNp.4¥ !´” ‚ÒƒH<*(‰…!=H²!ÊIÇÈ|ŒA³ÂÊáƒâl‚éÈDDˆ@ŒFAEƒR˶à À\ ÃÉÀâ–HôpKáƒ@&„ #¤  ! @0Dœ|*<J!‰²Äñ ´¸Ð!(OX$F '",®ÁEw¤„“[!,»åc +#b&–òÅÉì(˜”ÌS áä:X\åc-‹!ÅNL(&I`A+#§ É +|ƨˆÑ‹F3™` $BØB> >6BÐà +Þ€¢ã‚ŒlHT¬nôp Û¬… .&rÄãc1)1 ðPb x|,fd™<>6ãÁðøXgEÇy¼ÌIÉLJ†!¤É´üBrVôpÖAú˜H#Ñi(ω„"m Hf},ˆÈº™&°Š€ ±¸‡Kà  Q¼˜HDD4D¥‘ õYk:¥q: §ÀJ â<°Ä¨84”ôQ0)YŒ ò(˜”¬S²$PÁ¦äB€–…“à ñŒÊ›rý:qøpàA5XÙ 0|<)ò `q4T‰ÇaDdcd„™‹2ÛdE2 xà*5 ¡ÈòѸ(Cv˜øéX*ÖÄ„„IéáLJ 4&#*AF…†b8 +B *"… +ˆ +ˆÑHÂHÄ‚9&., ž’NÐP`¥Œ ql|RF8YÁP"”ñé!‹†ÒyìK +Vè.©¡D\ DJCD6L($2 >H'&`q ‚[¶$Ê0i°¡X‹Á¢bJsÁÀàLÙ¢b¢‘ÎU<@ÑÄrÙøÌX¨t/`PŽôR JC‰ðJGCi(†ÒP*ÆsJ€ÀàAX8¦ ì 8ˆ>8™ð9À@ä2À†Å*(,ðåÁB”¥Qj¨’O/ Á@À#¤¡4TÅŒˆÊph¨7  ±PX0â`* +jfa4Ñ¥›áô0 +$¡6Kœ +–Å…ËÆ&EÅ4ŒAf"t`d¤À6*ÔÉïäg•ÿ½776šcåHÜïñ©>Ú#ղ鸆‡›êžæ§G›»¯›Ï˜-ŸŸ¢5ÒÛ¼Êv¯ÏûÜo}ïõ¨ÑŸúVÆG ñýõþò©óQ#?¾t¾*­ÑÙïúþ*¾äþÛu†ÔÈ:!ÚýõQ#ÿó>ë£Z ù°WS ÓÌTÏM”)í¨‘ª]¯ŸÔÏÝñÑìÐŽ2UÏO™Úй÷ªûŠ3Ÿ7Ó.÷nwuí¨ÑÚÚ]ÞÝááU‹Ë¼æ•·ž#;R#\G×k¼EjÄÇ‹|Œ|½Ô©¹oÓ±·ñ’ýÜïýoùy{©Ñ_¥˜è‰Ô(‘:!¢:ö#eÒ=jć¨I|ïø?™sç­*¯w3s¯;¤F{¯ûGÔoÓùÒùeòñU¾{~»XUÛQ¡^ÕyxÔèò/¯2½ä¿4½ËÊó˜¯ï-ñܲú»¤FgY1*§¿z¶qëöyã>R£ª‘q­ý¶_ßíÿŸ3«7Ÿ%*&5rCïí[ËÞ«îs{?³B_ÖF3Ã¥v~I°+¶÷Îäÿ÷E]ÍÕó±®_¤FUÞ¢bõœêˆ¨ˆšßˆXÝ­ÅjŸ;Ù[©Q¥‹Õ!¶£»fÕØªn»X«\}çóCÛÊ×R£ã^žXíê®v1c¥êÊïùÿŸK½òüõÝæFjT!*º>ÿÿó⯞¿Ûÿ1¯Úõ—ÞGªE¬ô²Ú¥‰U²é©¢™ý²Ë]¨¼Ø’U¼Ø¿ߦ›™ÝZÇêð´ÕÿÿmµcµK©Qµ+«Í¶?33Ë¥hYíÚ˪uíÒÏÌ|¥%ÕRñeuimˆgf½Öò°¢:*FTñQ/¢Ê¨™JETÙãUß•™Ø LÊÉÌGƒ“™+`9¹405`‡wˆ13+)' 0*`\BåE8X€HYip##•)NJ*X1A@¬œœÈœT@ VNP¦ÊLUe”©EUJ½ˆª£0R€‘ê(QeT‰†"#*Pm°¤‚¨*0Bd,D•QLÕ+ +ÅTYe[Yõ]}W»XÝÁ¨àÄ”âÀ¢äŽ €ó± ŽGC‚‚&.‡¡Ä$@Ï'DZ ¦ ŒO–_Èëâ#± s e`„dû¹Ø‘ÒƒÖh?æ)u$¶ÃàQr¢b'"i+z8ƒ˜ø Òñ1 +[rñ1“q D€(Oœ`Aœå2¬cJ’B³ar±‘à)Ð@›‡‹2«œRîDæc¡#‘Ȝֈ ·hl˜`I"d + + ËǰŒ°|ÌÂò1MÉ”¹ ƃÊÇlåÒr¢'Jl@ +F•†ÐÉÿÃ36# '÷&41àX'Yl|Çç!ÄãcŸÁt$œœ›ðá£$43@LÜ(8 +ä;ùáÀƒ€`Ó2á 2À‹uT¬ˆ&ºED¹ DòÑœd08–’,!ŠÄx j(—ŒE$ðqAÙ`©cÁQPbúh¨RÏ$üňN¸@… ‚†BñÓ=X1]ˆG ˆhôi-¤ Ah ¡a-œ´'G4”†ê€X\$( +¦SiÑdžIè¢2`ƒ-bp-œN†¹œ, ø|T€€ˆ>ªà@¤¡XdPC§\˜Ì'4 ÀÅŠ²%‘Æ„Ì'4àf–„3nñ 2«I@„64,Dù‚`aÀÇ,„„4<´èA Q ˆé`FHP®¤'.öàDC}4Tƒ š‰‡ˆ†B`˜k( ¡ÐðÀ€AB:†•†Ü¬ˆZF(œ›…8>-§¡8œ8 1ò‚r $+¢a`z9àúJCeh( ¥¡\C!à ˆƒ`Цƒ0`d£ƒãá,pˆò(<*¸J ‚‚%”€Äñ©8!A99tne€¦#- 0$ÓxAÔPJC5ÐÈ`p" Pĉ`H Ž +j¨ m,<ØøthZ:ŒDq:•ŠFh( Õ ¡@œÛ€ 8‡é0l|>VlÁAh€ñ ÄápÒPé…„tFXFÀr° ¥¡*PòcŠBb¸H OµŸÈ—Ë’©SµÆ¨{éþ‹ù<Õá›YëÙâãJ=õ²ÓÎ<Ïòx½±»1§ãÚ>O•¦ç¦hz¾Ö˜jP­¹¹éâ:¯óóTœý»Ú˜:Uiºˆé¨ì©Ð[óÔ?±—WÊ툞jï?urÕøªÇìʼ2ÑS-短F¦T÷Ë‹Êûúërßñ ue2ÕR!¢åjß-ÿÅÜ]Ä^­Lň*×E‡Qß·ç¿«âúéݯ»ãÎÿ_G\¸ëþªîùݸúx•"#²¡å¯§bFÕ~uc]éL™*ÿû×ÿdö…æšiØÈ¹¶—2U~¬ël¼ë©Íù¿WÓ×{wš¹½§rÖî|kÌ_í<ƒÓQ2c€JƒÌʨFÅŒÓýí¶ñ5.Ìþ6ï\íL’7µÛ³RWÛktö_§hæ­¼è©4[o™±×å&£«Ÿ!/Î<]×EO^ýX¡€:!¦)®1£/Ô>Ó6\ùL*]ÔÅÅÌ +ñ¾9ó´©S¥Š½œ«ÿø¯÷c§w._ß:ÜÓ~¶N·¥Zª_ýu;KÏ]ìÉ”FŒšyˆqãRRíÖníÖnmí˾ìÓfE[µçmãVîãÎ]~VµµÝºÝ½Œv×Ö߯íöìÍ·”™‘™Ùø¾Ï}ÿL‘7·ßϲUÑ›ß×µ/sW›ÑÚ-•]ï®?óÚl%önÿRî^¯©øœÜª¼X;jg6»Ÿçªaö}¶*®Ëöì{÷ímÕ]ŸízÛªºNÛ¤eætQPüžÞJÃ5ZýÛ +ß—™oÑÝ]u›o+Äæ[jT¡§:Ü*ÿ×»qùÝO›m7í0—ý¢çy*Ï^gÛª7-}w/m©öýkÕªý†ª|žJ­Ù]«5|½Õî·¥Fo驜›9yq·J~3tÕKOu›‹Éh«ÿmjü¸¾•·ª¥®§¯ÿýLcjÔŠ¹Æö.¾½òåâMOõýmwšÆÔˆ—²ªÙfÛZ®!ººòõbMOåúfïx¼™ž +yÍóŽ/ÓSý½z.7¦Fù®–Ç[®_»§êìßSÅ]jT¥73o«£§bkÜ¿ÜÜ_¦‹n[ÝÞ-3ÚúWj„Ko«ÖóTx|™ûš›«ï—'¯Ã¥Fž%ÛyªßCå¼Í½•º•Ú›žêÒO]jäí©¶yµÿ6·æViŠŠ«×³§r¼M=Û\]ŠKµT·x»–=U*{nÛæîBÜãf,«»ÓŽªÿ5ùç…ÇëwŒ~¶þ6±õ­Å.¨ÑÝ]šÿ]vÚë½»ïy÷ñù¦êZ©Ñ:ߨ¯âî«ôôÔÔj±ÛS¬ÜÐÐp„‡{èvl8²OeDg¤F=J~Ô‘®-*;ósv¥ÜîŒxoh‡Ô‰5#2Rmª§B(”Ñ-´Ãu«íÐW[/]|ÄÔ}Ås[mè«í¨“ëj;\v‹‹íðd ­?×Ý:»íevËì–?¯·6L\oØ–«Ÿ2ñS#s~ÊäËö|ùS£e»þïì¨]Ë£P#;åÅ­Ô ýûx¡S§v]ÆöËôï÷—ÿÒ=þµ»ºÎrû2ÃÓ¶ÙÂ¥ÿK{íãß-sçå¶Ðo¡qŸÖn.s]v·¸óš×„ o¹Y÷b{\Ýë–+.3<ê´¼>W÷åê~;¡¯ÿ]ÚK /{éòö²]ÿ·\:i®Ö[ö‡þkÕNÜì+Ýsý&÷quÂõ̼·¾ï—n&¯ì[^º½·R:¡­ÓSÅ]§¼r¡îRÝ\©g'S=^¶×·Üî­^¼KÙ—õ-̾]Ë¿´}¹­í£N»²÷ñþê=Ó^­éÛ‹}[S[¯þ™p¹!ïQ£[¸vÏx­Þ®Ï£NÕ~*úç¹Ô·­ÞÃ]Øç|Ô —ýz>Ý\ζ˜¯O·–/{=ßB¾\×¶2uªšO}9çR==êdk‹ùÖç¹-å]·ëø:oU—'®ÓkáÌ^¿Ø ¯×šZr}[®ß»ï½´“çZCÞµ‡&\m8ÊÕÆ§«mõùt±­?½eø{£¥k¨ë—ßÛ©WÞê[º§-ìêKw¯)Ô¨WŸ¬ï–!º­Ä^¹·é&"uÚ_‰¸ÚWëJ´•ˆwË)“IÙüÎï\W_ñ|íñí²Ã•‡Ëí®»•†w¸½Î×áz®»¥{‡¼r×ÞÊ]x¸S×R-Ë*ª y P#ýå‹w½’u½ãéú½µŒ¶|m9#uZ½—½°Q{ïÄË×òù-K½¼õ~·Úñ˜W÷õS'¾åu¸ÐW2.ö»[ø×¹|um™áÚ«-7\Öø«{¹#uÚÆ… ­|¤N¼Ì>²¯ÿí…y¹þ³×=žþò¿uÏÆ·þ3{ý£®5t\kw2\ÍØË {%¯~_ÇHP³3_ñtµû/dÔ[\ëgÈ»ÐoÍ—7öú¾îõžï‹{/•yé£-åç_÷輺×ûÚ½¥{Úëswñ®ŸV¯/Þ]Èú쫯å )Ôȱoy¯×[Íe ý¯m¹£îíÂGê´Œæ÷½ÐüØO¿°qqó–ùíJ×Å~ëq½ß}ïrÆvýe‹ùøléŸãâ^ü·–»QsùŸ¯æÌ¿õ§ëo×ÙʾmÃ4û^ç¼ø/ïío-_ÿr_ú¶î‘:5æÚ?7[ù¸öï?wõû>.~¤Nï‹ÓÞÖ!¿âJ3>½ÕŸŒ¾ô;—=jþÊCmÓá*ûºS_ϸëç¾|­ûëÓ¥ûŒ—xk_3×÷._¤N¹º¸ñ³—õº÷ʾԅyì¸Ô×sºÚòÅŽ{—ºØíMÙÖ:¦_òBÃôe|zþË©“y®Ë_Ç÷œ¹žû m5#uJ´ÿÏÅËÕOÝ圼;—ó¡¶q/^¤NËûkù‘—î2¶ª¯ä{TC]¸Hªmg5׿å{íø+™ÍW®ú§/^lÛUn©_·óµÿdäRa sòRB*0 亠Fþï'n1G~kFöÿ§Fkˆ¶ºzˆ{{‡Ôèö +D4lA¤.¨Q:²±ßž3R£k×îö5fd¤FŒ¼¸¸ny¿¹ªëñqÓÙV©Që¿#5úîf|§F‰ƔɳÑÿ©Ñú5f:ú±ckþ½ù§ëϼ™ûyþþº¾üNeû{GkmïNS¿5þ^¿ãÅeßæöýúÏo½Ü YÛVç^¯©qß·âëÚÃÿ¥ªhÏì~‹yùsÝaº«¥éâµÛ®mcÕ^>ÿõ¼ª‡+¹ºûÆ…¿È§ûû·Þ›ØkøÛÈ©ªÇÚoì÷¾8ÿþ±u©e2>ÎvããC³u¬j·–Ý—éùš[š'g®\Ëd·¼þóS·´5÷Wã3¾÷äkG}G<^ë{–«¯¯OÙ¿×W«é#^>gô õÒ­ý±s!ÿÚ>~«~ãzß®ùwsZ"5RÃ^§vû‡»\•Ï9»9móRGoíj¾®O•ÛÖ9¯±ÍxiÛê-ä£Z© jä§§×níyÖ§ùÝêΖ™‹—ÑÙ÷Ñóz”¹Ïo÷mªø¦ï·öóù×2m“Ùάí–qgûqÞ¿›û/÷C67Æt´Gæë¿õß[®È¬ŠÚvÆiÛ»T=MoQs17ù{é~fŸ+;º[ž+â«ýò=]æµÖŒzöê‡ÝÉïǯ¾ŠééÝ϶<5q½uïñÙÖ×{£2ßÚ=õöv|ÕM»4dì=n·Ñcj"&¢ùöÝÿ/ïÏïÕCSE\ÆÝõ_Çíå5_úÊ}—Ù×æÌ§­k-ϾÓv±o?³â­³ß)öÙz\dýÜôßï;ƵÎåÝ?ZÙ¾«“:-Þõe¿|ïÕ—ö:>^ηϗò5çº^ÛŒº¬m9Ÿ9öbÆÇ[V7Q#C]̾˜ï–{óñ/÷£N˜ë}½ß²¾k_îÖ»oiS'ï[Ìk—ý´n¶í­§N¨ëü°[W.Óû\ÏëôtülîûŠl+Ÿ~±S¦[½GZy©¦¶ææu.ßu‰T˺L¤fŽ +y(ÑP"#J4ÔÈ”×wzévªÿhí§1󚻓K4ÔÈqQ;]ÍÎÔTñ÷fKµùÝiçý{%ª¢²M‰†šy(Ñ”h˜J ¡F®¹—~j»’å!¯±-ïÅ{k1¯¨î‚2™¨‘~eZnæ»]™Uâ/]ût·ÛUÜ4Ö]š—yìm©žÚR­Yï+ L#5Ò]›ç¿22­Ë£F¶¾Û¤Mkþ5Õ²0ÏuY2RÙ‹è<Ó÷ÓÜÚ™í¿ÝñöýÌ0×>;¹ÛÝY»/û0ñOñTó6õ–ï­ý—×¹ÝvÿXÏŽÓöø Õ0 óïþŽ/÷ôO{m]m×Ño™S7ÝÏøð4ÏôÜoÿ.ÿ:ñÏ8Sí¹Û.íû0Ý_óöþØÏôr“[û=Ïÿ8ó/[› ½Ó[ÝN÷WY“­YÝùÓ®ý7ósÄn}ïú»½µ_³y±¢gsÑÓ¦˜­y»¼~ÑÓ»üß®ŒÿEvss¶•–žE|ógköÅ–žã¿Ïæ¾ôàúû·ë./³ô,ßz|Ï;OÏØÓÚŠ®ëûk=î™þú×úË=«è©6û¶bCëËcVö·ïÞëžÙ¿þù>»Ûª/§û¡³›½qæ7ÛkŸ¯'v;Þãbt[]FçÜ^OÕxº{kõâÚ=OG5sW½UMO|Å]ÉçɶͷŒœ¬©¸Î†Æþøžû¸lýŽ­ªþÖ¸‹ˆŽ‹÷xͳUùOÛ×"6²;~>ï-E\ýÄ¥‡î|¸kªÎ~}Þ®üЬfmé¹Î· û{ rò‰gP-PaZ Ê}¶%¿®±­É#-†³:åªÞ“l°@ÿ[?T¾›€jEI|„i ¾œ¨øÚÈJË:GMDÃÿffº|¦»–:à¸P _âÜ ¨^¥ð zY¼†bÎJ`©Å,áÅBöï ¶Ôæý@^ñë~&3vÀ/cïÑçŠÿþ‰;Íû@¯à 0”¸ôþÕÔ¡º>T*Óë¹y<ä5 ^õ›CîÈøtl¥öýF&ä²ÙÒ494P%jcáAˆ&É8XBƒLdÌA”–ëúz+d{#A‰‡Js; å§OIÒ>(G>ü&ªQ5ô”Í£p&GÊø „¨(˜ÖÚV.Ãv á&«Æa±Ž˜u,,Hø%ø&¶®Mð¡î6ØE>‘û‡ n§`Ùí4E~Ôh3qžÃ”$ûŽ5dÇŽ’–éÖü&'‹ rË~•ã½d¹(Ÿþ¾JôØÂ¸ô’”7k¼rû•U‹'¡‹guY¦Ý^öZH•DUGàζó²’à4V¾k:»#£šÏêœ?$0„˜½g70\jšXœx ÞÛõN»­…Iø p©lšŸCØŒDeU\@ÆûmYäâþB…5Ï¿r(¦ÜEqä À µ[®öÿUFm· Àš-¾üI&lGË÷ûÄ$,é Yç@l9fžƒÐFU2‰Ø+ÀÎ.&ÏòîªÓVcßã¥'l\ + +²{Çì¼fñ læ$ØËå@bªP“õ߯Ãá  ²ûŽjÈ6“€ky °ÝF®»7ã'ŒBt¢¨æÄ°‚™ø·Z‘íÆÎ`cTõa¼! +ˆî9¬wyÒE.Õ>ØC¯+Òñg¤IxE7ïD‡Ä~ýü+u"è é좕æƒfÎÒ­…)3§Ò¸#„fªÁ¹æ¾e,…“\ÉJS*Êr}C—mú¾é܇¬¢£¶´¦ÿÆ„ÁH‰uF†'dKg{RØCFGÜ¢³ËÇ"ýÓæ4žnù–£ª½ÙM5‡x ò% RŸ1A¯ƒ!M"»ÒRM1¢á€r$uoÆ;îžè(¼Ík¢ø77¡íÇOˆG.§> 1l˜y$öŒ¦ ¿d»b YtH^ˆÎNïh_dŲáÜH„ÔQêž„»?$q{¼@åŽ1%ÆṖD¦$ÖˆPJIRa;/Ý€“”PL‘W ùl¢”GiÓáÐíù€VáEÀzÄŽí…FÈ’1ŸW5ñË^N9ìo*‚&^tÞ†uM_³- w}Ygºµ^$ÞsE%!عhRl —¶Äx$KtWáI#…#9qV¾&¡Ép„¢ÀN9†éÊBG92öðJq\ÔÉ4Ƙ×i^_é«Â'S†"ð}úPÝœ<ü8C̬Ľ$2NˆkŒnj”¸U™† +H®aÌ>Ñ{œ3E‡zÝEæQŠÿSÜž*<g8 +˜û_’‹}Éœ’&ÙìÅÎBÐ+K]uÁÙïXe + £»À´†1ŽCÔ*Ðþà Ì8‡bÄ# ¿u«†ÐFSK>n +!Át¼ý®ñ§ù8¼ãécÉMäãMJ®Å£ð㓼gì†,ÏäOùH@ÞÉuí@ +A’²P¾…|ì#¿74’ˆ|8ùÑ"Ç£F¾µ‘Û<#ɧµÈ?ü$…"§’W‘ ^ò]Dä·˜ï!§²8Ý6ùò—ÂÉQl=y´)zÊbnZÈÕ–($r ÝÏ?yõ\äO rØÝy (ãA¾ó(÷  -åƒ)ÈM9@9yT^ì‹™`^TÖÓã þVùTúøViSÕo~W>z¿·á1°¼¢z\º,ŸÌã‡è±B-ŽÇÏßß[n掋)&ʸÚZ§j-¾cÂIÅ"Œéì/·cB+æÄòä7ë1ï½Y_‹Ž >¼,RY;˜c²>^êÌÊ1+3dÅ1 €[K8¦Ät)¬µ[àÅlùÆû•N¡.°¡~à(ðó…6ecœ8Õw³ŒÎû®/ŽL錆HCï? +Oõ³¡GÃ}Ì𶯜r(6Œ¤YZ_J”PI S% ƒ +]J/xb£âÛ2õx_¿„Ê-ˆ9û¥€"ìvY!Ø+¶).n…î´,ÕÙ›'á-ŽÀƒ;£ ÈúùU'z/í¡µ†Yª$køêìåR +ë¶YÄ‚WÀ±Nì+°ßÅ:Б!ë +¿¢ûY÷©“֭̽Þõ ×ë”më|æy±['–_i7{®KË3ástQc×=i¦;^ÇÚêuí;3¯+6Æ—_÷ÒäþRIÆe½p„e‹N~¾ÁìÛ{ ¢œ“ÒþÑ‘^|{´[£ÓÆ›±7ºïP*$rtN¿Á*‡Òa×ø_Er‘Ž ªáÈ‘®¥¶GåQФû„€£:‹õeÒñ¦« £o)|5iÑJG%CÍW:µt³ÏÝS ¹tјn¦YgÔ‰62Ý€èEýb„d´=óêV/ƒY×¢ßßvì\P/3GþÚó À{aݺ¦ÁÌõ»F_:ŒaòÌaÁHn@s–z˜z4¡¦9H©Þö½š#&P'º¼ºAÄ3Ó°Ît±ŽÏ<õu+Püº ±3 ìZÑ‘8»)Í™ÍÜÎBÝñ‹Hw\0Ý»ƒgªð¼6C‚àâ.xë "ÞŒjfèÇ3¬ ã 4çL=ÍÜåMù\¡6€Ée#~G/7•OW¹Oä $Qäk£µ½×[íe)· = c¹•>ÙÕlÌUB&IÜ ”Óm îËÔs¸5 ™½iDH¤ ¬'áîê]©t^}õ¶F¦œA–ðgiI örL8&Z.ÜÈ—†þÖS¼úò³{h•ºÎp}• É꿎O^Lr–ªÅQš&IÉ«‡tÈE‹'ßÓÁQÂI4D÷=c©ä#Á–±4ô5"¸FcÒ‚Þ¼ +ëfäÔÃКr˜ãÈK¿àƒ—‰lâ’LÿmÑ‚ÝW ÚBÕ'>œ[iˆ•7Ä&'SÂŒÒÓR%1Éb†Ë9±ÒhbŲ™_Àm„TPdyOlè:S7G¬ä[!¸úŸºÙŠIPx“Ýéë%Ïõ=,ÕDU˜óµÀ\KrkaÔèð·ùÎ.É…ì²Æ‚;’Û (µ^å{÷ñòuv¯fC¦éç{§ ~û8-S[ß”}fÛ i²Žå&ˆözâùÏJ!åµE¿qˆÞèð£.r¬ñ¿Z~j@Ö‚Vóúj½í +u)_PZÛ xׄÓuØ_ÕéYg—¾ÁUI[Û45" =SÉtÙ">ü«goÚüxÍ?WðY.Bñ†÷†þ£/Vj^F ‹ Œ fïaüÀ>šN õ’«ub`ý>üÂbÞ`#›„è«súè²ð·}®ˆXÈ °‹þaxÕ©:¿æ‚{Ã¥žA§"®¤Þ †ï•%Š&W4VS¦ˆ×‚ãÀxF7²d˜vnH†‚Ä83Û,ʳ@°q +z)k_&A„u +nбN,mšá¥îºÌuµN„eè' iZŽjv‹4‘ÓåVçr¹E®[‘Í AÖ#”(!V1:8–À¡l Û§ezìŠÊuÐ}d ¿IÔ´6¥4³?u ‡)j@vðš‚Ø®Í‰R¹ßûy}?‰ ƒÞÚdG· ²wyRk&ÝjtŸy—Èy‚ñ÷KQ´ìÓV !l¾.Ù¶šm5õ±f«±­JdÙXöÙã–&V¿5¨¸„D붸Gi…ºµÄ¥P)´Þ:˜›–PöQ>HvZD è––WÙ…­cË2WÐꛫ¬Plž$E¥uà»ncZß¹(šVÅàÀô– ÌêÙÕzqSs·g0ˆ—hV‡ÏÕw†ê× ð“ÒMµÐP eR?ÅF$Ìj“€gª¨ž5 ¦Ÿôþ0$¡…›ÕÇZÏhOöX•Ë$[nÓy4¢ ›…ÆÃ8©~í3/R(±|‰!§;˜àü æ ‡Îü窭û{ÿB&âltVŜ査ùz Ð°I˜Žî«ÉÏœOËÊv„¼.=r"œ_Ž*:HI@ÊÍzÇr÷Oh+6(:Μñ/©À¹Âñ-OJ–) (æ‰v;,=bgÎj;lrÜœÀ{n¯Õh†úÌ‘-mnfƒ¤B Qì¨5Ê»ž&¿ ¥e'Ä m˜2é[ïp|1°ÍÿK-‰. –W«TÀVR«.¸²ù|8öd£<üÆ7ï˜Ñàlï8‰¢SFïfD8¼†Še>™¦•jgö¹ÀfäÔanˆêù35òÝÕäç6Õ÷õ´¥Â3 #û<º=5|¢×] +Ñ‹K‚­gð +"A‹Ë-…‘–±ê‹gŒ&ì¿Ï(dÆfPüqµn˜g× Yè‡çw«6W0j1%ÜLF-óÆ;4}@.rºòl'úïΤæuøPb8”‚(œ¿“ +&ËøïÁòôxU-˜æÙìj2{‘ÉuIôè» v ,ÃÓta‹¤a®MÀ©ë.õļN½# æÌ·óÐ@‹s$PÅö|Q ¦ â2ÑX9«Ñ~ðñ…ñˆ±ýŒ°vK/·‘LA=ª¿SR:±¶È>RÒÄ}Ë.÷¬d„دþ—¡nÜ-ŸŠùš ·W~"ê+ۛݫM)Åõó‡loਬÄ$:ÝÅ:aXû\NÃÎübc¾a>ÐEÇ`ÿ—u[¯V¹v1›+gµhp§ D¢LZ!¢Ué„Éúˆv‹Ž%…PtßB ¯°älÕá&eX{8Ÿ£ÒuA.cßw\y‚Àµ$  +AN–¨}úÀ(KQ_‰õìO{&þŸDZÇF^¢˜*@œ{û¤Œrñ1)3mÔLÀStòôƒ\ØZ3Ä~°¥vSè…Xn×ÒNvi³Ii Éý7@Ù•$¢lDºLˆ9¨2Q^Ø{¯Ýúx9iàø§3cEi¾ü `2žV­ÜL«Ë#©%AC•5/†0—¤½ÅŒµqµµÈ× ìxŠÎžÈ€Ô9·>x´‡z;z¡Î&õ½*sñ ƒ+}wÄ^%sz¡ž'AfÈ¥ÙÈÊ"Q·y0±Ó_J?¸·}ÇÃ-ö,MÞò‡½}ßßÝN™×É¿Â?~`€ùn;ëÏâ¯Ñ ü ©ómÿ­0£U«-(IlÃYŸú*"0t‚¡:œ¯ ÈѶ䘣ÅñŠÓm7½Ï—ï' eèðwIù‹‹RbÌ䛑1ÝdnÞ¥”ÙNí<ñÁ±¹™¥ÁcwOÊŪÙ8Û‰>!ÄWŸêDþÄuËv®ŠÔÕþœLî]Tbœ/øñ5ÏŽˆ zƒpx<ƒÝcS;…RMEÏQ»!Õ’´™Kè×”©àQ9ÇüããLË{\~YƒÔoq5#$‡â(ož8å¡B2Šg:Íw^HidƳ»Ð™š¿Ț §œ;`Ô¸ùQ)óeë½cîW1_ï¬uÃDR}- èêšÇ[DZ°Vv +_ÆvqyF6ýsgÐb²D~û‚0oµE¢-´`ªbQ5.(T( ^\M8Ú¬ñ uŸYš–ÞZM¦‹ C~ÿŒï'/zט·YU ÎÒ:£Ï§Xþ•Ú_Œ§I±¬”ѼjRk“Òd·È”%׆èS,ü€‘à²BÑ@Áaqnì t•)_œÛµ—Ä;IÁëí>•ÎâC» +b@a*ÉDqgƒROOø!bæŸ/øxvDl&±J*_ruG0#»M¸Œ¦¾Q'K+vCÝý5©íZC·Ätbúëœà+âa?™PûªgÉ’ÚBœè@•\)ü–»Ç@ó]Ü©äÿˆa ¶KΪŒB¨'ÞÕ8xrØéãÉVRò›ÎÞè>zøÌ9ð´&ýÔ„H(r! M#u&¼¹tA ;Æf!æ-ÐZPœâs¨"ç?Ñ)NèÁשÞxÈ>8=Õš9`•€@;æE|ü‰4)ÈEIË8›¶ .£5kÇXt~l#üitp’¦j·UÙZXµ:üäÖç{ûšªC»èê8 + ®¥«¬1Hl:u¾\ü€­ Ú¼Š;Ït+WÑÀÏEIõ±%«öt²h#äÒ ³Q/ËNr¡Åh<öˆg‚÷ äÏxDž…SÇ`äs2‰yÝ,ö‹ö•<9ëÚÁU3Bø’®Œ‘ Õ ¢dƒ¤Œ•(ÀZ5¦U‚ÄÔRYœbѤÊHÁ³{jG„_ÐZ[…a¸9{É‘ØVÔ 9ó¯ZÎÐhMÌR~ƦÆ`?r1Ãß Àd`‰~mÙ çÒ|.Æf:À˜ªÔ8—Û>óÄ1C‰¢þ!d_ 7!‹-½ËLÃ='>w{8hîšó²ý†¹j6"šD…ÈÓ$jEÕÈØíq¢KkEqU·º±´HkÔ‹ÊÈn„˜µ®º`l{¦Âêî´èÍÅiNLšR¿›=fBÃÀ(غ…ò›ÿó¦O8Ç&}âÁ f¥ÑOE®q‡—0 ÝaFJ)çŸê" +¤9(Cˆ,Ò6÷äÍøšãPÉL‡Wú«[4¡Ã$jy1+ˆ@È“Q½Þc‘l +ù2Qì8$jTR©—óMŒ¬±ûÃѵ$QËä ÷=ÂõÊÁªÀè®èÊŒ’ðÊ‘¼~xqv4UšÚäƒU‡+ 6ðÁÑ=ð×àn`@R÷‘l~Ëÿ|ò?BÓ(yJ-¥Þ©G»ÏŽ`ÞHÆÁ+ó£T¢&”HÆ××Am«ãázŠQ@ ½Ão@%Ð_žÄ)w fŠb¢¹ÆTƒ¿K('xT‘"²ûdä‡(ç†{YÐû)™Q&‡×âFÖù%g5†sLÈBOxî +òÚæþ'i E=ÊÆ£Ù{àZn­Êë™QÚ°]µ/‰$>Êõ$ήÎFÁÀ<:iŠÉDõ ¢÷AïpFVé³paÁµ²þ ¿R¬s!Å7—@Ï9fÎŽòDuê¸-+W(`­p“âdÔ ‹Zt)ô¶É£íKph'ÆhG]zT]Q ¨þ?­•-Ù·k‡Â³Ò®E ˜ˆ¿CÍ?=@äöÁQ5‰ü©ÅÁà…[Œ£ÑëéäÕ&Ì8}­x`£aÿ€¸e&Š‚ßA ¨Coû_”,p@Ð'•t<ŠšÙy™C9mNß°gÝô™I#èB(¤78£—2„_ˆe®ž‰4+¨‘þÉÑ«[m¢SX1Z. G,Ùaš¤ÙéÇô(ß#X½+£ˆäÛ ‹îáŸâR]†w3ˆ—)½ˆ¦Uôõ¢Â{Ô°oÚãÉ ÃÌH­fÆwÒs†h„ ›Cµü=ý²9“ ©ÀêEm¨GaÌ?7·N%³L[=oÆ=†-G¶¥h§¶Ü؈ëN‰ÄI´°èV^î娴–=¢ß2•ÀèÏÜ,{›pK éTê:ÙsÝzù˜Q –!yòª/³¦KBéŽ <áþ¨ œý¥]1o‚,9à_«¹;Âyðã*ä«JÇ €Žx6²ËìF.›I3¦B¹}È 7Ê”è~äòËÇçÁºo¦ã®£1\# q EÁI.èSòMÓÝZš +ÝÑ!UÊÀ‰X MÈðjÀãž” R¯c3F"—X“¢¡Ëð:ãË‹œØ»2Ó­’ƒó9¤OÀ+œŒ/gka*†ˆ…Ô⇼‰ó`kïå;Ù…ûËTyfº(!ŒQÕ3'ˆëGƒ’G¿ÌPÑv˜2ã Q½¥hN5éíMY|© Á´¿T _]ƒÄу­þ + |–)åEd$,d3±ü„@|:l™+VÖqÊÖÈj8}÷Vt¦x•­ ‡I‚ôG…%<â—˜ôFCÙN8]×n16¥c1çÕ½°žheÞ¼ˆ.³ö2¼TSÉiÉîÇ ’“N$´@¸‡³2‹kEì›§ ()·/C™g¸S:™à¿õºl̆åSdUÝ/³V•-¡ô3ýUàjÿùëk‡‚ÖÌSSϵ"Òf}$ê|0Ñ[HM…´†2‚ûÏåÒ 4’ºŽâR +R +ZóÎ + yù ½U}J¶,¾>gñc¼+ìvž%Jßé‚!Í ÑÚŒ†cí½V ½€ÿpn[ï¾›: }ÏUz;ìDÕùÅcB%‰I%›¯Î-Ë'8?-ÿ¶_'gÞÛFV²¿üO>Ò¼ˆ÷ªŽäÜ1ÖKn°%ïä:+E@‰ÖäЋ¥&5{~#F9ÂÈ:'W4c4ó} [x^Æ Ÿñ}…€$ñ¯¼è¿<©Â=èi²5¨ND(à³ÒÜIršô3¾ïñKmå¥$f¼€íxbñß&–‘"å0 N{à0B­é&'üTÚxf6Ÿv® è™N˜ù¼ ©ré-ñ£žÆ‡Û{gè׌´ÙEθ.w7ˆ•²(²›É:ÒNëxRF +)£“÷zßèR”™Ÿs‚²­p[ñ%Ðòh=>ª2DŽ¥bC²5”ó"Ÿ‹M½?%Ð]Ä6¥Á˜£Ø—1Ƹ0t{p‘RÖú]›¸Eê.ŸU¦âwgêr)uûpÂÑ××A4eù3Q;göÊ®6qF3„ìË9bŠrªÔÀ4%¸N61ÎöWDƒëfpVØì”_É^:¿ý ß›p¥ÿd­'ÉŽÛå;=ü08_ø[®°bšOÏz°{QÈÍ|—W¯ZugEYŽDe{ñ,j VŽ¢Ð_;· àR F*mò Kv]fÕ’ûB¸Ù>ؤPX(ƒÛôŸÔó-Èì7”K¢p‹V vôr2g]—·ÌLnJÌîBÃ8>ÓWÎú+‹ ƒä›]&QæJ¶049 ç ¯e×Ñ¿" +™N©‰ŸëzªÈ䟈‚…G5ép|qB@|Ž#T´QR˜ØA#ÍõEBš„ìä\sZÚAÊ‚ºëíø^är”áµÉxÝKÌ¡}+¥+Hº¢¼À:»H÷›‡œ¶ê ’ÆýÙÆÄ™;W]»tÕç®~,€AÔöbJPÕÉâÑÒ‘ø ÔK)Û[ôèú”UhõLêXu,6•þжDãH•º)¶é<è².­×U“Ø!×'ì… ßrþ\2˜=/¬É¸È¿ÙŒ¦ñs±i=dÈç;ÄUºe"ß †RE„È>wäi7=\T—DŒkbŠ¿¸’Ó÷AœUï;ˆÈ²pŸì¶ôš¥v!§šŸùîìnÒÏabóí)0Ç<è¼É•õõìûŬ"lð¸ +œeú÷L…úäÑ‘(˜Ã‡žÉA&+ËJñ8ÔÚòˆú°‹åƒc0G0©â“3ºÿ¡!æ)סſØ'Q¡Ðtš—Ö,2C¾€—å/ +DÔþ³2®Þª$r$PÏÍ¢+"øÝ^,qðYˆEüʨGbôy:¿3¸`ýq¥êgxʛڭ+·_Û@Ä‚ñç2ÜoUcTñXið9výVÆ%ª i-f´¢4–ѹBèm*؆ĊƒBC:~gN7BûïÇÆ¬í[ aùM6}‡ZsêÉŽIÛ }­5ÖnR(slgR’`aõÿÖŠLÝÔ/%Ek þlÏhçåQKŸƒ¬0§ÞiЙ#X†ÒD^£<4|æO8žT.Ž…¨I£ŠLÕ´ô²èˆ$JzM”©€5<ËúA4–(9$ Qåò¶Ën^R­ òÔ•gÜP¾À ã•o"‰v¦þQX é°c6ÎLåpv¾ø$­ÜÞIß2ìƒg È0oF¥diÜóL +µöaå·˜CmÌägTªÆ9PIÎ1îG-A"æcg#I’O/¡Uíœë ÉÌ×Þ†õ`)½Ö:ƒ™†™°HVƒÞ¬?–)؉7‘áÄ>:BSÎ2·ªÓÎÕv`Kß3ž„Šp Œþ¦“ði,´P‚q‰´Elg>ÁPÜhud%°Èˆß‚šbÚnN ŸBe.”èÙfº:¨œžýB£¡¿ºp^`ãÒceŸx‘¨[‘â ЈJžIc<94 ‚ +ƒipqžÇp)i!’:a›¯$JTÚ=¦ÊÜ„õ¢a›S%€–©bfiô×…7E»Œ×3EœBˆJ•Ž(°#üŸDÁlâ…ÍûCœÎG”ÐI”FM4¡™³Ïo|+*–@_³‡ã‘‹ªh•DAMŒîù‘Q„Ÿ°—[rF¸-™ÉHuÑ5È )oöCoiO~Åu§|+ÅËr­å¾†¢B–%÷ø¼‡|"°©ëv_¶j(¢Féœ7˜l6è¤ý(  ˆk°DëF Àâ•S5ºö;´-ŸeÇЉ8¼\ìÆë@‡¿XYýþxx¤)¼à'š3ýóVa3~˜B¿'#´°B?#ûã’ã»Ð©HÀ®¾Vø|K~Ôª´rd͹!†Åê;8eû?ÙŒdèƒêŠ›I_v¶˜¥|öHôá…V‡bÙ\KjèmÑ0LÊ»4A„v{TÃïú7Jlëä‡L»ÝHk¾ ³’&YÔú\+k>·_æ–VI£òÂè}f_´º¬Ë¶"mB•9¨±CwQžYÁqâp` \1;¯ ·Âyøó–MBݧ}ãcU¹Jõ‹ãá5ò»Þ· ¢}¾:ú_½öV䚟qD¬ Ư¾iŸc0[‡±‰ÿ¹*|“j¢uXÕhÑÇ^°Yo xÜ%Àç.&sBÃMF)Á‡ù:PyM,†’PÁüt×~á_kqÍËË6¢ó²ž>¢šº ™µpYtkÔïŸýd×=‘E+‹ ò8ÑòŒû®Íón 4x…^³˜¦7Õ—zÔ7SÖê¨ÆHH:ˆªÎY=$Îçæ,<¾Tq’• ‚Ó‰MŠ. ˜€ŽTãÙdOêÙbƒ|Þf’n™®r[Ý÷× ˆOÎXk|oÑÖ#{È«4 cjó£aìžP+ù¡ØÇÈôqgzáäý‡TžÕnKãþÊ'ܬ%¡f@zI>É4ëLú¾€ˆ>{§ýè{ÆÓ,È:ª„¨ýÑÙéS5WXs5=Uié)+Àˆ…þŒ…D¢2²FµÑ÷Ⱦøè—žô…–Jq DšôWŠ[ùÛý{t3Ÿnr&@­[.<ö`S½ë/ÄÙ* ´`<Ý“¶ÏéJ”šôÍ3XZÙö¥L–vP²hM²6…^bŒ’e,1 Ì}cUD,§ÜÉ–¡¹A–ÁHš¤Žež¼#=S+fu™~ÚÌeÛtÝ…p~`Ò#§¯G9¾¥­5ÉÀý¤‰vSÈÌ2¬Šã,®Oñ—’œ¢¶28Bc\ì’vÒ[ZYQîoI"ÃÜ„ŠŒœÎ*#H™QE!RiöÞ.ìûn“ì J6“·W[æFɆ “l—~ \ÉÒïðÆa  ¦X~ÕŒëŠ?v: yÌÃÛÿ zÈ—îžð‡ÑÔ kN- +®Õˆ•ƒÀ!ŠGf½Çþ5Yö8S„8>‰I&aÏW´T0GOK*ÂÄ7ð¾ë9N1˜>Š„ib2årbBánq ’®•#±9¡¢dljã2¥à½rú~ö‡ŸÌ"W¼7HA3¦ìª#$¼‘ÌH¯#q˜±Awã +ooä;Û0}(Ha×>›ëøOÊSèñ”P Î/º…»=_ßS€ô-|ò½¶‡/ÕâáöJÿQÀW¯ÅjæSÒv!Ùa…ŽÁ»Ó©µ‘^i µí|+wC"ƒæÛ„p èBÛ_8²ÒLØÎ´}9*éq2Fï“Á_ýõšý[0*-H‹¶õƒ8xi~Iäj›%·ÃvÜ™ì8ò¨è–òƆN²ð¤ŒŒ¬æö ò¤–¬hþÉýϱt ~¼Â7ÝÂÚ¨t¸™–=¡K³sqlêê‡wÙv#ï+E|/ï°‡ÔÔ\UÄ.›¡à ù®UçŒ é¨£ª`ª ÆÙ¯!œ±â‘M&,•‡µï‚ã¸â“Qn$Ö.Ç÷©ñ§g4”’È=™t@ VÕ)¨o[´ck w³?dd<¶51íÎ$¥šYÙÜ×9õl¾ý·õïxÒ4: +¨(kÀÒËÚgü°išáŠpïQ@Ó„äGàدž[ : g¹ŽÝÃi‡[öÒ*_ç; +Tb!ט@þy¤Ýñ¯Yö²TeßP¶"Q§–ì‹ Dª&g h@fO¹–æ³ÕØ1 ê@^ŸoqQÀv´¹ë£À—‚IhÀ6 + hðzȹüÖ²oÊ×–k0e fþ(@hòEa( +xt°ñ;æ¾NÑ‘žÔ<ñ(0+i »(Ð àú)ebâÒàñ3t¯‹‹N:@ “fuco.¥ÌÁ(ƒ@ í¾¿B»9ŸhtL{IkS ¹—R»Ÿý×=mGlB·ê'†ùAæ)Ý)lOuצn2ÐYŽ ßëäû‹~2¶¢ìpVê·® RÓͲ"ùvJÃîŸQWÇž–¶fwñ „”!Z£ˆàXiÕÙ(ù èfEE-“¨äƒ…šËx’½Ù_|Ž”—VMr„ÊJÝähˆ5²˜‘s‘Œ/F—SUVbºeo“Â[rÄR£9ípeó<«±U[ûbyvmܾ¸Óш(‘5¥–7zH*³m&ã¡ÒÎSʲÁ]}©‚.ÀÅ앛ȵ'MásÝF>˜ÔÔ&$äêÆÌÝÍlàh,´oÁ‡K >™øh¾vá¥b^¦ã WH]@?YÁÓ +®§4^¾4ˆuÝæ–¶C€³9#†=•”?Ð…1È|rÁ_¸u‡¨- +)(j¨Hñ †PiÛðÚ 5ÌMæÀ%Þ«Uæ‘I›+¢ï +–ê «+^ªœã0@¹AÐKlô*‘+’Zrz@]Üîö ŸL†4Â{º»tƒ¯h3H7/¨C(“Y »qéh¨hU|¢Žr®Eäõ­,ø‹ºeP±¼%γºÅ£,â.?îÞoÓ–vàî2Q/èÁq©­Í#"Çꢦ@tÊú®7)a¬Ê¹NÊÄ×÷\ìº7Á—:TLÞÕ ÿˆž›²¿‹ +<+ÝqrBѯšÕéà)2¶„õP²=ð©°=ÖƒËv¦IîZ—[ùaÙX †MdS§¼TTv¶–Œ}&H¯q`G›>¿>–ÎǤpýÞ_$Õ)œKY%XéºvJä‰3ðò—e=Äe=ÌG‘²å¡Y ò•H›lŒ³öM!8„Ž(èa÷UbXU´¨G,½âãÈõQ×׉öކ®£Ö:ϬŒúظOEïöáÔý¤rH|4hšìêù_ Üå\É"Øêc§`øÝ8¾LzF„Z +¯¸ò—ˆ“}Æ#$z ؇­ë|Û“?0V'>.-ŸiØGîíŒëCtT‹XVäñÃýø:Q½îY•}Þ$ìSqÙ'«j\òšàÔ{ôÂBöÑ×GTœî žÑiy¦*âJ W b ûì Îßá$°áöÑPÏ…£XcÞ,Rï°±È>¸ë+P O•À>ü!û8ÐzFö#»DU‚)P®Ï·TaÎ9( ­XOê_ (²åcÕx£^€A¨º¨×V»‹ëäµ1[ +áÚŠ´Qû¼Í©A± Ñž6jËg^f¢‹¹•´…z”:q&ºäIš¤:SÿÆÔ.|ðÈ‚`A¿á ôø‚~~ŠùÝ@·ûÿîz©‚nØòY ô\‡+½óî¼o¿ÑîçG/ú÷@6Žûw¦gÉ÷Ñ·o À + Ü—ád—w·^ïíp4Mfc¸S:w†o' Jõ™ÃÓ•ús ÜÅøzs€ûž˜ç3”’câU<§0»&äÛ(‡µðŠd$± M¿è‚W#F祷c sžMNJëçÚD&ÞóˆÝÇ;ÈkIHnbÃeŸ}VøÝvñô噥M‰ ûFû/³.ãŸ!>ø ,k¬¿ºfMŸ³›§|ËERó×jñ˜œà†nñ2]ůKþP8¯¥Ý“°PHtçƒO“¼©.š†]ÈÖhoK‹SKbk6G7ƹÞËÄÀ!Vy5+=õ +¹cßΑu“ujÁ~ÛŠCW7‡Š ÂV)! œü7‰ÀAaâUûmA_kwà(]4¸®gàǸG#Iäð_‡›¿ÿ¥Ï¯`,§\MÎfþÍxÊ^ˆáï +#rOñ'žäOC£!FdV#ʈˆ z#Rcâ@Dœ\#RdTB‰k‰!¢îÛˆ$–BÎQ­Ôˆ´Ž="j´‘ÿœ—Ê¢Áßr7¢\/k‘(Ò²¦M +¦ÁŽ¢˜…†9#jðÈ™0"Ó0¢¶ÆÞ–ÔâÛœ®­F´ ?áxRÇûuÆQGÅ÷¢£g+G•õJGWÔñãÂÍ´ÁÏ].¢*½‚Rv(iX‘F‡JÓÌ•r½@ê¶<€BöªK¥Û4(ò\(èf3È<¬¥úßS.–*aáêçxOcxv›É'»™T“p|Úzq2&{­Ò2¤ÔÀáÎ$74IUêZ-Ù¨‡Ó×}˜;vâõOPM6…M€Ò,b§ì‚B9ê,LÍÐ[¤£ºô܇Ų(hd†/›îºLo¼‹Q»rµºÚLÕlÞ”º¤ûU¢xÈ/èQÿ¯Ý©3$A¼ÁD«ã¬…Ò¡nÔ™V„‘vJ|õæÔ²ãô\õcqà‹”f¹!»jõ!%"”[4“î+“v¶1boö‡%^6á –µïÁŸÍ³†s„¬æÅ„ÊU?z4€Ž"þŒ®‰e[fÀ1í‰ë'`#9ƶ‡”)Ѹ¡’qý !Qö ˆ÷Ïˬ²›‘5¶={(ÍøAÇB–DˆÞ½Ä·Ý£ßâ(B¼¹i­ÈhØ-*VgAØP˜­í¯ Ø*–ürâ€â”Øp +ǵ^AâB'ÄfZíô 057fydšÃ°ZNãŒýP^Çxa'ÿic€SAܸfw…fä_^²žùȯg2]~Ùûš°I‘í‹¿nük>'‹˜jszn¯6@<‘/”©N\8_ñЀz=Âú~®üLż¡dŽYÃðXWÕÛmZl£<žˆ™ê F0Ý*S«¤°´ºR·¨Qž ÷D»ªHT¯É"BªëÌ;7ß9}reÝá[œ÷ËWñˆFD·,0ŠïrêîžôUA2Ù³#Ài\}Tí(VâBhãÿ†º›Òö£.Dþ&"ÏãBÎÑ9hóY»± Ôº¼mÑã:»wuô´Ÿ‰Ä˜[Èÿm{l»µiâøÏ%ôï<×âvVt÷ ; á'y6ü–cÁ£ €G´ˆ‡N«Ç8 äÝk]ï*™cÄo°Ç”¹ÿ…]yºZÏËTL7 Pô‡¼ˆHE¸ÍA[SâEeãµ05wOçP(Ý"Ë©*VÃ:%iëþIWc¶ý +†6PÝÞrÄ„öæ EzØÂz‘S×`®^ %+ áGóØtë¯Ë”9¡ÇÈ;ÑyuþX‘½eÁ#&ûªÿç£æ)+‚´‚KFp"J¥¼ãë§B|‡šnÙ“‚´hç¤B-l]TåN—ÒE-ªR¬öÊ`í)-ÁºDbÄYïºH—s¨]¦a+Frö)2nZƒæõkÀè +.òÚQ²ö‰$M´$TΧ¬”^öi%ËÍ®re¢ý@}`°oâ‚víÕƒYeö鯽Ê1?$ˆ°4†(,^jpU!IŒÅ0gþía¬{I+« „º¨;×!©Å§Ú@FÔÞäRõÿvuÆ~5 ÇÆW½Dž3á‰Õµ©ªk›¿42}:“‰ Ðì}keªÔÎŒ4…¦º1yæ—ƒÄBd?Ìïq™­xFzÃ’ +ë¶pGiæÉ ‹Ü2p‚‹™ìÆFæf ¤®„׿ఈ·E2B>¢ç™ +òV†^ÄÃ+…!e Iœ”9 + ê°ŠlæÞNK®URˆò”T7¹ÎÄ÷Ý1^œ»Æå[|&Q‰^ç”Σ_ìN^ñíkLðu9ižm­†V"¬µáx²sÙz€é2ÔzÒ›¾Y, ’pì{Òøkqï„C„C(¤€˜œ/y«ÄíÈ`6Âî<¼C‚©öC°Bƒþ×BÚ½åó© y.ÝHßS!ë4ä¾™z•pÜ#vË8Yé é%¿ô¤ª1¸é’ÚìG4‚4…§bþjŠ|`n|k„<\˜\üȵ[Ë,vdƒ$"ªÁˆ»ANÎx5îŸ\¼ +pÁr~5ɨ;TN†Æl;â§D׉NTØè”ƒµ˜f[`=ÑE87þ`p§¸Pa5¤û¯ž¢‰8›ƒí£fí¬±rÙk¥X¡¸L/.07r}ëºÊ@GL5a¯G}6vÆ~™£v¾dD0=i*{,ôD3K•®\…8DÍZæÐO—:À^á"·TùRjàÛ¤¨²¢¤&¥Iý ¥ØSlœáu5/£hÍ·LÕËà”¶p{c€FÒºÙf(}èÅg4Q°,Ô£XFÅ D*L ‘‡>“tt3–ÂKµ­õ.¹aÍâÍ}‡°‰šäqÙ×|Â+2xL?¬ÏÊXJ„u]@@J%ˆênoªq¹´¦é7 ï-U¾3dȾ"FS6…Â4"{\7ãp–…*§HHÆNh8Ý9…#$ ×ÂIöKxÙ tœ"…A'™ÚQx®ÚZæ Õé2öÐ([Q,Ð/âö/Â]¾Ï­j~Êc1ÿ#b_ˆW:Ü¡â‹xúÿ;*ГËÊ^1ÓßêÇ”cß.¢™*î`Žz³(-Ôoö²‰}Fæ¿ÚôŒ„y@fVÝñ©ph´˜æì¦†+¯W-ÜëñOóáP”à`€tñãçÞ¶¯tó«}RŠÕ0‹w¬šÀªÃ:U^+5_‘“,ÙBmAÄþ±-„°˜´_¢JøÖzΞ‚ÎÇ-LŸ´%)j=X‘Ã|S©A”óH¦lhtþ88®‹½Vz,}2Ö÷ɧÑÞ^ä<*Ì/ßÚrÕ&9×Eäe–àœ1Ò—‰ãQDU畤ât +Èû–­ý¿õ… éäß@BHjsø•ÎÛaDo„·Ø{……ÓÅg£hú†–Ú1IVNgAd‹È=PÀ飳IC ’õŠÆ2¥ò¸NÖÅöé#ðNÕöF^­(Íý¯t¹'…ÂÜ'ä!ÛU% ­ÓAÈdËÅý_*.,b³àÞ6È͸ëI{[©™\ˆª —(LG§2–Ó¾òÈqD¦,Xž¯“ý¤;‚5é—…€*ÑÕµÿ$ÒßßXÀ˜+7ÀÑ‚–¿üÿÁ~„FÔ#OµsOîMSÆB²Í6’>;6Ý¥ÈH&Õï6A=“´}ðaTÝànsçç„:$z&ž5%_wÇñU/·ƒÊÛDã RHÀ,—($) +¥6º–ûȘ¼2FÝЂ²KÞn%¬Õ¤‡÷ ±÷¿lYp*N_ò_eÌÞ¤N8Ç]b±ÅR­ü†ßÁ»@>Íõ ü€À.F7ÁÍÈTbÝ á ?6ŒD>ãí3-nOá‚{쀻—ìïd4³ÒðÆtGÒ϶ÏÍ<éîJãñ­f,wm]Ô&•Á™§£¢éWwï=-6ÍlÞð¾Ð`¦ ýJÞè K¢t_©»•0‡mÉô N„9¼%8z‡ I3 ¥î&8»¿'Â[Mq‰êJ¶I4õÉán-»~ï±ÀÂ’ÈìÞÎЇEº; §ðÞƒI>ÇvV-O]µ-E?Îg Ôö‹I¸‡ <ÄîÖ5ónÚFèÿƒ|$‚Þ¤onk‘öØ(ÍzE¸'Ç‘(}ø‹oW#‰k=>mýâ=ž´r.e4ßF¶d£¶AžyìsiV„ÐKÛËT×ᶌϰ²®{½†~FŽÍm4…„–h;œà¬Iù½íþr>ڎ؎ÿ”7 +¹¨mëÐ&3š4˱ãþàë !MfŽÝ:‹Ž«Ùg?lùŠiùñýñ7>)Àg=ؾšcGõà· &ðîš•åÃo*:šZÕ*)mH’6x‹ÛÞ­ZOïÙ€Ëë?ÏÝÝ;¥L9¨Ñ4à¨ôC•‚Ÿ?¢ÎÕ™ìÔ!™Úi$De3S(0 †Ž´êI?³©†5Ž˜yÞá·7u¾×(¤œÆxdBì‰Qyº‚ UÝÄæÈ~+T„îÊ®%g÷^ô›¢ÍŒ^wY]£þ›µJÈdf6¡–½ÃFè-ãðt®î†u5j*÷Û«T–QE†È^;z*¿o¬fjfl¯d”F%ƒ\#Ї¥l uŠå×þÉÌj{ :;ãx˜{öqfœ‰bc£|š¬Uª+˜ªf57B6ŸÚæmÞQÊq/ÉÇd›J ¡ZÍM_ºë˜¿7ïy­hœ[¯C¥Ir”jPàåv¢Á©åþ/%c^ã”fD„ÖZ‡Ä~µk‡¼5÷X.f˜[ý6ò•¹­¾hÝüª{ +t_LÆa§3ƨe¦úØì0ª?u—š³;E¼£Â´õ1l:Lµ1T¢Fíê`µÕV[¬ŽOÝQo;ãTG§ö1ïQ| +çv”[®Ë5 ʾöÒtÁ…»¢qÇ–Ú´Ê.€`S>¶7Óøº`Á´Äw£éרXG±,UhP0([ƒÂI :ÌZht#MyXû´4"SB¾D͕ά֛N‰Ïü‘¯µ›j$'$Ô«kwzKÖy'ñT#^‰LGL'qäx2/Ý\Hí‘EZÞ°ÝËlVa ÀÎuKèNk‡.‰(´]Œªd:&1›íy†z?¢1™Êt§ŽÔÚ2F5â9ùÆZEG^ˆŠÌ@Ag<$ÒÑgn(0 ¨jŒ3sµtü²’Ë͵Ú Í{($öhmL~vvúÆ.sU7rm檪qC¾ÎNÎg  Œ¤jÊæ|ç¹^8î}u7±««ä|ûçwûb,£‰¤LÊ) +|•)ë¤#§Ïœ›´DFæê"&+²‰Ýg&b*ÝÏÊ€˜“BÇÞGX‚@WkM m46é;-޳bi€ RšHÙHŸ'~‰”zh}»¢ïjw­û„f\­ÍËðmÖsº®Z¥ªëŠ{¹™µ5¯ñö%$‰Ð|æDš—TÇ:sW¥o¦næãºnÔ‹ñ¦9Ó¤)6Ù‘ ©uÕ Í;îJb±ÒØu,Í?N|Uv+ºùve"d‹$粪ˆJC¦QóúõeyíM"qnnÈÞûÈ?Ó3ó]ñŸW,¢?WžÿpH)å$EµÏц|gvsó‡ƒä‘,»r¾¯ºÇòç£ggåÏ ¹1É”.—1Ö™-›ææRb;•î„uV?¶*DôIg{'æ{·ñÍ®cFÇÚ€ «ÅG÷>Ë8ºúP‹#2CŠÅ7JXÜ(ÒßÇ€¨‹R§cC7®Z ¨D,ú§è“ÐBZȲ°BGž'ü {s2ÞNZÖ˜::1—¥åMuC3{u39N¹ÆÖÑÚãT_—ÖŲ(ôðX’ë+–Ÿ³³Jõ,9.¼‹<ßËWŠ9sD±œqdI““˜eÉ÷Nîò¸Ù ƒ¯ô̰V¶¥ê.޼LÏ·]\]jÆ–»¸‹Cij-^ÌQÑ]Ö!»drfùUä{•-<ÛèÜâ0&}Älù‹ú¬]ÌfÜ’-$Ôÿ.ZÅdT&!où°] ÇÕ…AáPOõl!ÒÅ݉ÌFSÖQè.·xP]Xq¨ÙÙÒauÑN`ÀÀ:sZtɬÜJ×ûÜÕ•vbñÜ⫹3ž´”:{‹†*å¥Ò™_˦ΉK¾Î˜kGýÕ1`À T ‚0!á $ ,Dh@8 ‘ˆÐÀ1 àà™3ùT­ÉÈkÞÙ-©«H|e"—Ï‚ªñëJÕ÷Ñ-ÅQ³·é•‘U;$ë1sy™dhLiÌšyˆÍÉŸ¬²ÎYQþŸ÷¨1¢°Ÿ)#™x¼Ò°Ž†nwá8¡áÙy2ç!¤qWþ®ÃÞWQh×òPãÍJHDއZÌu·û±‹¤Ï –tµl¢q›©A¥\ÇT–ÕдΔ):™y“=©ñƒUij6¹8жsÝ"!ÿ¤7%v'V³±™Í]…"¼žÍ”»©R—1“Ë:N~¿¸½ã°‘)‡­™ì“²­RšÞïìš̨ÆÌT¥¼J·Ï˜÷ƒÃ­f]KfãJd¢|M-u3rbª!²TÍà‰u÷“£PæHÊá݈ØTH†ÜiÆSMŽv]ÄÖ±w°êrÊfd2ºuuv䨙ÔdÌNîÁ¡®³—4ªD|WB§^lhÒQRúÈçÌ„Fì!˘¼xÿ×Nd7ÄHhj'÷`Œƒ¦^áà³ùÏ(ÓA¾ÿ!+Í(úi#³±û8g:;=ºEN=ÒnßïÃgGeŸ‰Õ|O{»¬E'þÉíPgT4ÄÙŽbcw±Y¯qRtÿà@&•߸}8ú¼£Í¡×|†…NÊTÓQ…Ä~6eÜd:rßiË2Ó$½¸ÄÁêDsþ£ÊU«w#UçÌÝ),‘¹ú*RkÚ¢±Ï—Á)²Ë<ÃN䢳¹ænµ8©½ØdT§ºÁkïTcxpøHýÅ¡¿Ùpð蓞Œîp$}ñxe"äŒC²Ï_¢½N8­Ñö43%s…%[Ûd¢ۄ5øVËW†ôêmÝ57Îrf]å“ì?Ö̬÷Á«¿¬µ?úõ†p +(0$ X$€À‡D $LˆÁ!Á‚‰ ,L!BâA"8ÐñÀ!\>°P”ó¢HŠÛñ$,,‚$PXà@C`H€1dùT|S}-)ÛÔüòáküÊ»©°0@8œ<«˜ß–«Twbà†$D``>@ˆûqà …¯0ý%za‚„£éžÈõÈs™‘͈Ñbw“ï#¤MI³]µŒhnÚ¯ôÔï?N‘v-[K¾°c¢ñ‘kÖ*SSΘÝ6¼±¤GÖrÝ¢oâ:ÙÐwTv'ž’¾ìúš;«‰‘Eç³úðq¬ÃŽu;InH(BÃÖn¹¡”Lü9w&dÀØ„uš¡ªX½HæXD¾(×WL¶ƒoÕÜøççå¤åãõ&µtˆKD§ÿ+jµrý_œ"‘¯ÜšÓ&6K¨Ã«ßÔêȯ]ÇŠ=9 +ÝšGlmŒT¤í&šÎÚÖÔY½c>ß6ÈX“Î>:ÐÜ#Gr$9•Ææ¡ñW¬J,ôž;è­YüÎ}ðµkKDeâúÙåêwìõ"™¿ºŒçÅÜk‹ãÖ©6ÄhìgŒ‘>¥«¸52ó.•Nc™ÈODHc܃ÙåKÊïz,×ðRÓ…ôÙ´¾ð÷\«ÄGä\Ù²‹Ý‘„ÊL$ÆéEJ"µÑ?r1aëȴئªvUMÙú\ y*R뾚š~(7çÜXYDèäR®fÔ©Õ\ý¬¼ñQ…T#mÕ„V’ŸL+Æ«çXS2óéPûa݇ˆTÓ¹+ÍÚ¹|²æz­µÓ×ÊbóÛõ9¨b~ÔTI)¹×+Â5 & +V/^uP4( eVÙLªò‘ˆÎÖëܵ‘Ð  @H˜pàð"€kÀ"ÞAÑà ®¨DƒÒ  ,ñ"¼<'"C:ÉÈMB&$Šî¨43èca¤Q•¢’Ú£P01,ʢх€~H"80& ( It5Hƒ @Œ™’ HBþ(º„¡¥©Ï]Ü^cè6%6/Eú)6mZÑYéòFŠpÝÇ-%ûrœŽ(E0%Ôßæ6¾lŪšêre†6•Tq7¢ÿ^ˆ lÄã&íãbKÚtà¸;$YG7Sƒ0;þžYÔƒlbw‡]^ ‚èÊn¡šz»È@¶ÙMÙIæjåã(I¥fÒ÷ƒ÷8º?ˆÿ"W€v©JóQ¡u³µX˜$£{!c]Ú™›-’ $-iÓiŸ’ Owh2Ø ¡e7‹ôÀN†F:„2Pë{%²ÇûjBP²EŽšÐDBè>”¾="ÁŽBpwšBUb}…Ø‹²OÝÞööƒª…¨Ev! +ê Á†ûá †HŸ=„—}Žr&ÄQÄ"âýYD®Qg>Aè¦*ùÑ”ÝdW…Ä×I,"HK”H³ÏŒC FùVTt%n]´ûI‹LÔêšp^f—kF6AI X˜[LŠ3άYl‡ï`"yÆRÖâSÉ3_-þ™¥2Vˆ*Á¬_ãª#Í„—‘ qSƒÈ|‹ß"AÔ‘Eh¥;‚?aœ‘0î€v"Aå¢&Í2@‘À9ŸÌ2‚d}6½&4ë€<\ÙödÌÒÓ&RMëÓÝýB.Ø™C0g¶̹D0‚¾<.‰Ì(o¢”%â#a,i +æ½oˆfŸ¿oBH–X1æ§ÒÌcK”cÌ'gŒôáyŒMCj"q‚Œrœ +1Ê“âc¿r¢VŒ9sÞœèÐc¼;'à£:!°‚ Ä M'FnŒ× ß2~Å\vÂWeLÑN”Å'ky’ÚÊ¢sžZdi®+[]Ní…,>ü`c¼ƒó<Ì,RØcg¦Y ¥è¼’èÍE›§™²gá“?ðÐvgᨕC·Z!ܳ`,šçãg‘š§h¸3ÏOh33O-^êèá1ZxªÒ,r÷‰íÚaq8i1gÏØÑq³MZ 3 Á<](-p_ž†¦Åá€IÀ8-ò£¶è Æp‘{yïçN=G\˜£‹–‚"Ò…úêvcº˜/„Ñ/}á¤ð,R¼À‡/`ämÜ^Â'|a4|ÿb͵mŒ$ eÐÃX¾`g3´ëž|†~–mpN hV6Œw‡ŽâİT…';Šá`ïd¡1jš`é(dìÿ#Åów‹§'‹u°ðêa_zõ8 zpÂÚJ£/VŠŲ úõº„ʸôºÁÇU§A{òPSê„E¼|˜QÉž!(6±u)Kýl,6¼¹8‚²®—µN€°Dϯﵰùÿ¯[³ÑUœ‰®±˜è26åÿßíÐ6žj®DG×\H†¬IMnÛ>ŽwüùØd3¼z,”ã±ö¯«U´ž;¾¯œZ‚Žù-„d 1ž°ƒ&ÓñP¼ÿVâD¯#{_ÉÍ]&³Öý…Âô£%ýE¾Æ"}+¼À—+Œ‰eÿS —(V*TIê·ï¬ ùí ¸â¨`~À­½¤Z â·¢G: ™ã³¶°—BÆågËæX?K ÕYøbg@’³8bSÍl´36¤[Ž”öÛvFQÝž:´žã©½tç1Y¿ÍÒô9ÈéôàQ{Vãëˆ +hUÅ.€éÄázÈ›6°IáˆÕ¦â¥èM÷¹û ¯o‘¸á z½ ˆ³*nˆÁ±no¸ ¾ûâÁfmAC‰.þq6,"G $ó‚MÍjœ§ÿJyh€%µ'oaè NŽ *™x¯Ÿ‘â-ã$\Ó9K‘ÖªKž[|w³Çô¼¾Ñ.>÷±ï~¹1šË©6Ýìé… +‰=Ò.þ#&3œc³12±.7à‚†¤pZ¸2ë|—c-ÊäŸÊ!qŽ#ËR¶ŽÏÀ„Æÿ²ŸôÉct×0uJ*¥KHJš:¤DB¹O¢‰4ážéEéßJÀ£z|ö"Â>eÚ•ÚêGÂ3}ÃãYMö¦7ä¸`%ÿ¿­×9ƒÛ0ž'æÎ 1áŸõ¢LxõÇï +,9û”ƒÆóè¨5IÔfÖÿ¥CI­$é‡C‚êÑÅ!˼—¬‹ï’ý&a–žÐ'……2xz §Æp_qŽ;O¥íÁ¸ ¯P«ò +]”Aý´““ýº'\Œ*°OMe×ÐaÁ»·­BOƒ2e†ee0Y1No•‡õ\¸ó½ˆË·áj»ÄV~<,<&ô^ëGbli èûâê/ æ‘ä¦R;·GT ]¢UøA lR²úÀP÷Í8´`}®H/ñoY[**˜’còù¨y­oâ ÀŠ\*Ú÷Ñ”¡6ØÎ¦”è=ë©”{:ÐŒxp1¾e³(q£¡Ž÷J0®Šáš +‡Ãcüs²‘‰ †Ê2ÌÞ)šÙvFÌYÓ7@Ád?*‡—­*àgN½ÓÆð§k£,‰SàƒQ;î’mÓeà†Š¼À¡[ãl<kàûù&'PC¾a0ãßÐÑnµ+(KSÂÓPZøVçaC3Ÿ{¹gœz¨®ý3i×J)ÔC„¬§¡ ¥Dy\î‹í3“˜<¨:Dïb]/1éîlÒ³ÅH•*þíÝ(нN"ñ#²õ^SˆÒ9Ší0÷p#3©Hº§‡OŸ ÎMhç–ÿ-‚°\&BK»]æÍ ñ§òÌö‰û·P©ô/ Q\‚þ’Dñññ}ýùšè@÷ ’ðÈiÿà é˜×e@¤‘½åÿR:íc¤½ó‡€u¡°„Z¬ÓˆTâNc[ýR"n2«½°ê‹G:£KÇ"JD¬WÝ­¦Ü8£ã¬F–É€)‘Ê«O Ì|+^¾Ô°^ãn­rýÒ`½¿Û¨ëåAŒfÎì%¬Ás 7¼JWŽÙ«zõ\¥y€Ù§š`òŠ~Ú Öô£ 7ÀÃd¾¾âÖ€•ͦOޏAi ¸6ÃnXW%JÖ“Õ;-t—µ²ZbÔ:™¬Q6Ë[ã?ÑsY{>VÊ]û4«@–uFqÆ©¹Ds + duĥšØWC88eµ %”!«3~ëãEkÎC˜!ÂEI+øÜè:­Ä ®†¥\“XY˹–Ý ¾FÏ=Z¡¡ Z¡•~³rÜ•t^;¦õ¾åâB6ÁJ¯X–ˆV8ì=§´F€œ¼—³.ñ4¾Þø™ž!ߺp¤UÉۜÿ3¸§æ=›þøT†±Y^NÛÄû æåï›Ïƒù´˜YR´óB£^js0o¢pèó­  åÌO½eƒDa~Äà}¢#Ì÷Û{¾ãRÂ|Äë¯õµfÅoë׌?5‰ãlQ"ãaÞ€ +Hèœ0_BOÃ0ßÙUØ$u ós„4nüÒ$Ì¿4æ”3a„y*ߥ^P³/Xè ó=Òjk‘`mѼ6øHãm¸^µѨn-Jx?m˜OÿŠV†yP0ì l˜?\×Á  +­†ùy¹XhÄô¦­ÛˆaÞ¹j’.ìáÊ…™ß×B'1Ì[jË8}.=>_PöB•üd + ?Ž5a^xhb® ´A¡ ¨]P“$ÆÀÄt.» üØô{‰NôƒÖÔÆ.:b»¡G¯ìöÂö@ÀÝnsqmVÌR¾¤/ KxŽWhý™²4(—,Ü'a­,{8Zý ŽÛ’U£·ýÊÞ]‚b>Gt×¼ý<©•Eu7Š2Î%ö{œò¯Â®Ñh—)RŠŒ$!µ~ª’ÅhDs0e[•Íì¿è¶÷z¬l»mv²Ù²~Q´c€F˜-Ç + Ó‹r¾‘F§w›Ø\p-8šƒ è?ýöÜŽø$G› ÎÑx—ŒÞ7 qýçè ú0¹×¢:‹%˜n2ò s¡÷/³¹—î +“{#9GH< “ BY.Oɽ—.©"÷üÅjyF&wà¼U E&×iL7rOîG ʼ, ¹°¼ˆ]C—äjX‚„‘üJŽ¡óäœT”¤É}8ú: ÈõW.Qó“›²¶(ož\N ëëΉËà%äF/ +Á0—2c\…û$÷f`Ä:3€r-‚õ›hæ3 ÖÍ44Cnfõ²$Ü›š aë/=´—¨ /}–+—Xܨp”Ûóåš3ˆiËUhrŠ6Ë¥Ãp6Ùr}3bå^NN qåó•‹ ÷çCpª¡\Ë5GSº fWsá +_¤ê Iž-\Åòx¿8rÌ\dCT»á§ßÏS› É…“ÛHL—<¯MÔ%Ka›È-;™³kûà?ܨk'E﫨ÔÏÕ¸ÛZÂ{‡·`óÃÙùÇ?rí­íö¿îåk¶‘2J©Àµ‚H¦VrLmWÀÓ ¾@gk“t¬×eßZÛ)ow¢\v,k.…Jè| ”´6Tà:Ì-’õMª·f¢u··7òÃY»³ˆæ’$nÖ&ç wA-kgí‰ÇÉÐ;Y›6ð'îD‰Žµ_DZöÖïÊð*¬}¨yê‚’(XÛù=gMêªÎ˜²ÍŸâiíÕö’’´«mWÐÏÑ2Ÿ‘¸rÖHYÜ~ê‚H5S,FrWV{ïký®Úî·ªUû4Çìsx|ŠÕŸ¾Ëø —v™AÕÖöâ ͦSmŠÒ7<©¶ëãß}4ª}o®!Žî «ïê»ü›þÔþ +¤‡A§öˤ2›ÄBS;í¦9^93NÕú+r“i‘Új ¨qÆÇÚb2>5S‹”ºñîµê· ]RšI(D2_b°J„!Ü@ÎÿyI¢º‡ê±ûó$­ØNHùWVë&—nikIʯ‡%éQ$.“8åE$•]’* +îì’”' ÌoA”L ëü-¨h"kQ +iShülÑ@Õ-ŽFRe8Ì&¶eŒ¤æAÛHR üS¦:&-œiîºý#éÔ´­^ˆû-6Ãûv|FÒ»W‰fè’^ů£™(z.LÉ`¨gÙ°cÛ¨¢»ÄAEýÇG$Å´´ü"éTgŠ'6PË“pˆ$¼Êž‘T^ ƒå4ŠyY®p">Y (fíRN)VµÂ"ðÚÆT‡¤¤Š‰MARb2b%BFåW ©‡† þH|¾‚ÊÇ’ËGêÛŒŸ~nþH·§¾Wéå¤þ†ïW&$Ån¥l„‡’Vòö‘Z¹Òm7ȰJOi7½\Ù¾ÖÙ|4VŠÝ´óße¥Š´„­Õ€1 ¢ÐÂ?2ŽrÃéPá#-ÈħˆT {¤;³Wé/2<'Ô+´}= wôH“ˬò^n…y¢ÆØ´ùŽŠÊ$A<ÐGÚÍŽ´©Ë¶¹ËpõŸæÅú<(Eê†ÒmxÕ¾b/?Ò‰\÷V ñ$¡à£= Þ¬’a<É5ia7o:dN¦nû‘ÈK•ÎÓOîGZi—cÙEVq†ò#mËÕ ³ö7Õ€2'/ÀPÈFâàÿôÇ0}¤’Uˆ<ÉGb;FÖ™›n>’¶ôv³´£‰6Â1ój¬ÿHÓ,aª`§àº$?R®­¨£L“B‡5¿(]F©Àé#!*$K +͇íGjV½¶á.åix]€Wñ~$º™…rŸíz—Õ­Á 5~jßÒ·zçýkw¤S(Í<~ï¿-B•Gò/l/%‚í!Ï#é5(sEÁãï‘nOÇèÈ#‘Y˜^Ò –7ä=’Óua_lF¸s9”vê¹G +ÍÉWÐþUB×J_Û>”ÿ UñÃïÂõ‘¨5'Гî%:`#M$ $Ä?¨ à KAÒQÁrng`ò›®]L´&¤ ^q#­´F±C’âØëøG|’cmØ‘‘Tp€í:ˆ$ÅÜ#jiº‰$u’æó)‘y¾@óÄꊑäôSƒ-ò·’CŒx‘ÔÃ¥ÚÔ¯Ÿ&·zp%4$eˆ4bÉé'õ“ S܆$ÏÔŒê%]#62Jh’€}Ž ƒå Iš‘Ím¬k4I‹°Ùf½DeÒVnrH#"´m!‰Áh—N])E‰F‘9&…¹‘K{Hd‰îrGzë„$~´—j*!i€9 V¡ÞÕ!iæØÊBþòDô?¹~íí;K +Iªç¸ª¨›õ:$7Ó`ÀI¿«6ôiÚ3–ãür 'ìØ~„s9a$X'¿W=Ø.÷)$É.bö‡2€hÖîBÝäÁì¼! L–/ÛGV Ú‘Â’†ÏžÍI%˜!OS¸B&•}E¼OtN Nm`Ä +Il½•"ÿ I9-Y‡Al:vfå¤ÈÍ_3ŸZèŠb *%aì-œµ@–zÒoTi–.Tí€6!ieo"k¯IëÁ½<ŽW@`‘¤ Ôç1 ’´BñVˆi!Œ#IÌÞ³tƒ$ápÀËô¯–$ùÁÞ„õTÆ„,>±3%“+e®¶ÜŠd;0¿‹MàP~‹S +È#¯ôåûqaŸ ÷õýŽIÙ~%ý endstream endobj 12 0 obj <>stream +Tç“Øm2Š.•È9ì¾p1ÊÏò% +•:7@ÜÐNšŽŽ +Y¤)w™±Ï›€ý ]¼‚%_˜Žñ¥~ž\³Æ`f °$84½Wð‡"°”^¶N(†ªà—³É“T¤C +*ŽÆÒÍ/sYŽN P¿[ +bMkæÇ‰žÈ¯?ÞøpÄ*©Û@*ƒ õ£j©¶ÂdJ¨l±¥ªeŸ@}«>1­þÙé)¥B:‰U4 ak.wØ endstream endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <> endobj 40 0 obj [/View/Design] endobj 41 0 obj <>>> endobj 38 0 obj [/View/Design] endobj 39 0 obj <>>> endobj 36 0 obj [/View/Design] endobj 37 0 obj <>>> endobj 30 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <>stream +H‰dT{L[e?Ú{T(´0J{Ád¡è:f» § lcàcQ‘ILªú¥Ðò`…EgÆb&3™qT؆›É’ÄøBÍâ„92-ÁèÎø§,Qâ¦s޲ʎ绽ÉPï_ç~ç÷;çw¾sÎÇ*8Ž3VWÖVlÙ~Ûö¶ú:¿»:Ðáw¹]k¶¹]ÞŽfæÏæpÑLUÔ¨1,­6òùר¥Æ´>­Ôšþ¦QÝ• ÷T¯£Àé°ˆÕÞ:¿XÕ±£ÁÝ.ÞQ´nƒU,·¸;½N·è øwÒoS“ØæÝѰ³]ls·»Û:Ý.«X±¦¹ÎÛ´Qôú=2— gèv«3`íðYÅZwýF±««ËúßÚ­Ô[Ü¢]t¹=@…`—kKXH¸œ˜«ÚmŠmC(O_@0çU!Üþ0³Lc†=YF Õt+VñÁnÅ»òØ ‚=2… ?bšƒ£ÇoþÅÄù}%ÙÊ™lɸ¼«6ÅÊê5/cÄ­{¬ú „Ú·S19‚øAq5ÂÖ±jÄ÷+Gö¨ÍˆÝ×ç&l6Äa†c<œ#ùgbW{–Ÿí½B|ÏIñ«-:üÈ€Üs‡Ç÷ðÆWúž›‘+üuOÓñ.~øñx?âwƄҒÖx,t*å:(}1î é—u x„Ç£|{çäR‹Âþáª8PBÔ§/ð:ЖÝôèW«dù^áuÜh…œŠ">ñ@ñÌ®–)£Ø‚ކew°LƒÈztiå„Á}¥ˆ“~½¡íŠQAØåëe¼A¹²>’‚øR»M5öM)ž·ûLÊ”<$‚އMŠÜ_h>¨›<¼®€ãâ8t|kùo,A§1žgç=úMŠW€_ŽèyÝȓɼ’ô³õ%Íܹ•Ý*CÕO“]¼n–ƒ›½!ꦄ~Y¥:Ž—OS¥pª4|´s±¡‹›‘’¥Œ•¯ðá¡¡°yQ%„ƒC>S7ï }æ%•à +†M©‹üî+³e4ßõìv¿®úƒ;+©¤³ŸˆÜý™É»éjÐØ@㳪ÉL¦Êæ=fé¿ïŠeJ•«èfGŸBXM „G©/P2B(Ô?¸`£>\xî´0;dBȽõ<âÏÅ!¤œø QºïnÚçyÅÖF"²¨e/kV°=K":èÈÂËÌ2 &!ÜËZŽðx‘ì‡d+1@*1Ô@æçן6ÇÂÑ;¥äXé*ÄÙ*M²Á˜™v aÞe¿ãŸ–œ@XG˃_¨Í&Äå·€­÷ŸVz„w&H4ëÞ5–à=´dÑâdÓü>O‡½+økƒöÚÝŸLcÔñ×§'šY qJϽ–“ÚŠ~’rC‡C|Ìõª`:º5+^Ф\J–Ô)—i4’z¿æ–ÿÿÿÿmJ½/ endstream endobj 29 0 obj <> endobj 34 0 obj <>stream +H‰ìVË®7 ÝÏWpÙ -Rïmnƒ"‹ ®.»0’En¤‹þ~%Û£ñMÿ 0¬iø<<äÌé×':½ +ôæç'ÚÞ¾ÇršGúúÈæQÞiQ±Æ¢ôíóvúå9Ðç¿·¯„Cü”ÌT¬†JZƒ”š+]^6ô²±†&¡7bkÒK¦/8RÈ0.V‹Ÿ$IÕH‹”Ö±ÿcûôÓöaû +1Î?ûòíãöýµ8Ö¦J(¤1Ц¾úMƒAÁ›û° 5Dâ,9Á¹U±†­JM×èz§$%Gº ¢ Ú#¥"iª'•:eƒ½³MT)wIê;X ŠŠZwu­’VIÈYgÎB¦‚+¼#aÃƪ;‡6LÃà¸lMRË„J¯ÐÕ ”šX‡ +ì)©š—+T{-rëð¡=É.µ€Ó^q8ý²1@äš‘!Àa]j°u”ÂK°å€(9±§FqpŠgw­.qìóˆ£ Ð ^Ï4œ;D0Q&  ‡Ñ<e/£ï& ¨ŽÃåt‹hO4®ÐðÄcbó]TõªÙ+*riÿ£‚åœYGòy‡1ÉH¿3ÃähXHmÞí³cMìÐ,Wqì®Q’÷Ñ£«Ç®.lq ±ºˆ¢A±bÌhó½)Ðr'Ý- .GIšŒ‚yËÈÜ[%»¶ K^+2­‹z€'d®»êOÚ¼RI|tÔÀ¥Â°ÔýRÝRóˆk2͹luFˆÜ:Õê YEïŽ>vßiDŽ´a¥X>stream +H‰ä–MŽ7…÷} +®‡UüßfdeF9€8‹±;÷ü^Q#±¥äÁ`ZÝÕdÕããW”^~{ /_SøùÃk8~ùˆËË +ésÈVèÛ‘BÎë_xùþçñGøz¤8G )ެ¸æ¦áûçãå×ßSøüÏñ- ˆ? µÆZK Y[ì5\¾Œ94Î )Ö`¼Ñ؃¦h¸3Ä.‡)l॥؂Ô #HKx+|žc R9p(fɈ9ÈT°Ì€æÎ!š#f*äêà³éÄH™ÌlYñ‘§ÌóZcz«ñË1*g[«xŒ·‰1cF¥@êĘëSç›±î}TÁÂÄfŠT5’gšüèÌ4¨¸3èÈåèK!Ö6Cï\uÀfKEq她ÚÊô¹q©VôaEU²+§™,£ÊhfP´žÝìÔ]>¼áˆQ}„[Ê ‚€šQår`  ŽNnâð WŒÒe”4Né¼4u].´¬*Lî9·41=mùë§ãÓFŒõK©í ¹1#7häDlØÈƼƒsçæŽÍšš;3r†FvjdÇFÎÜÈŽÜÉ‘3:²³#;mVJnÀ#ë³(ü†Cá2öÀ¦û“©Ñ¿•V×Z×âý^ž_=Ì|ÎýXþ$î]ôs'£gÎb¢Yzí{/§Ó«Y±goÔ.îÞÌÖ#8h^‹ íóvüý´Ùh‰nб–¹çä ì ³1´ôD±QlP;²"åªbÎpêê À5s@‹”5½ »Ò -” 1ú_n3-Žq‡pEÍ{Pq„¤Ði_Œ¾¶˜’³´ÞIt±êgzgqÌFjÔêþ…‹±'Ð2;æò„KŠcÊ&û¡`U(§õŠÌ£ç\Jl+¦›ç(:ÙD8Uò¢µÔÏ®¨èÃJ²w~onÛ䉅…•î½[À<È`–nt×!8!T½Áç0? ³®†¡vÉæ¦ñ觟ŋӢ7ç›ï–T7u•»S—¡lø¼Ø^n,k0{¹qµF–Ë›uE±_¥@ymãìŠÿÆûtüÿÿÿÿ(cãþ endstream endobj 32 0 obj <>stream +H‰Ü–ËŽ7 E÷õZ&¨–¨÷ÖÃðÂ0Œi Ë,±ƒÀÀÎ"¿ï{©~¨º@0˜ª‹¢È«CU><¹Ãû§à^ÿòä¶7ïq9LS|4é4}Ý‚Kiþ /ß~ß~umÁž]ð=E\SîÛçíðö9¸Ïo_Œø‹®_JÎ.Åê[q§—ö—-úá$øâ”Ñ7ƒW<)l§M#ÚñRƒ¯N2ÖsÝI x+HK>;)t쳤ûädD:h¢!¦F—˜rãGöÉJ¬Éž!Y!’•"Ùc´R´B´ghAh!hH‚dAèFР+? >gz&<ò_ôÄj]WµëBN¡Å×0M]ξ|_î–æÙ„Yµ £ól…½ä‚(—§Óv÷ê~êcô»õ¯‰ñ|:Ê™r¡ŸÇ¡WW’0ç¾–¼Ï&0*õ›(u)eoOÐrÿênæcìûåwÉ]’~ìä€î¤ [KuíeÄ…È5 ÔšŠ‰Ha¤Sö±'|CzÅø‡Ýd­ ÜAÊh}]¡ÂÓÔ«ú¬J¬KǺ©|‹õ’¯,Ú•ÍÒ3wih±LpT@€<Ž}w¬ÆVÇ—gkG¢ØÍ‘'êHGX«uXq¨ åB8«l«+èüPí–c¥`›ƒ¯)7ÁM˜Š2¬P˜ (Úk¯g`îO8«H4wˆ5Ýôh™Ú?+ªì6¹çƘŒÖøµ‘.¬ çÄ=ê¬dôB5ѰP•‚ ô‚Î +É0Ê”ÞíDĵ€—Æf‡€Ã"”íìc¬K +N¼æÎ*çˆÈJ3à\Ò‡<ñ6A¦:_øµQähêÈ”dÊó¯ÂD×[¤8§F-ù.Lü±0·×Çÿ‚;ãoîøiãöxây‹û?g £X¸Ëó°_y8Ðd-¡qŽ/ÛOïžß=ÿ|üs{sœ¿+¿ÿÿÿÿØmü endstream endobj 31 0 obj <>stream +H‰ä–MŽ7…÷} +®‡UüßfdeF9€8‹±;÷ü^Q#±¥äÁ`ZÝÕdÕããW”^~{ /_SøùÃk8~ùˆËË +ésÈVèÛ‘BÎë_xùþçñGøz¤XG )æšqµ¾>^~ý=…Ïÿß‚†„? µÆZK Y[ì5\¾Œ94Î HŒ7{P$Á!v9Lù`/-Ť$ÜŽ -á­ðAzŽ%HåÀ¡˜%#æ S9À2š;‡hŽ˜©P«ƒÏ¦#Qd2³eÅGž^0Ìké­Ä/Ǩœm­âi0Þ&ÆŒ•©c®Ooƺ÷Q ›)RÕHžiò£3Ó â>|Ì #—£/…XÛ ½sAÖ š-Å•—æj+ÓçÆ¥ZЇqTÉ®œf²Œ*£™AÑ:|xv³Swùð†#Fõn(7jF•Ëý28:¹UˆÃ7\1J—QÒ8¥óÒ8Ôu¹Ð²ª0¹çÜÒÄô´å¯ŸŽO1ÖK,¥¶'däÆŒÜ ‘5²a#7òΛ;6wjvhîÌÈÙ©‘9s#;8r'GÎèÈÎŽìðÈ™Ùñ‘;?rHv‚dGHÎ É‘ìÉ£¢¢3CBA;@²$Bw‚nÝøÙð¹Ò³à‘ÿ¢G›w]³a98…2K¬ `º…Râ˜åþüþé2¯!ÌjŠ®³ ñZ*²¼ß]އWSŸ³?Ô¿ ãø ´Y)¹4®Ï¢ðkI„ËØ›îkL¦FÿVZ]k]‹÷;xy~õ0ó9÷cù“¸wÑÏŒœ9ˆ‰féµï½œFLs¬fÅž½Q?º¸{3[oŒà  y-6´ÏÛñ÷Óf£%ºe(ÄZæž'°ƒ6ÎÆ\ÐÒaÄF±]@íÈ~ˆ”«Š9À©«7×Ì-RÖô‚îJ3T´P&ÄèS|¹ÍX´8ÆvÀ5ïAÅ’Z@§Í¦km1%ÿfi½“èbÕÏôÎâ˜Ô¨Õý cO evÌå —Ç”MöCÁªPNë™GÏ!¹6”2ØVL7ÏQt²‰pªäEk©Ÿ]QÑ+†•dïüÞܶÉ +Ý{·€9xÁ,Ýè®CpB¨zƒÏa~f] Cí’ÍMãÑO?‹§EoÎ7ß +,©n(ê*w§.CÙðy±½ÜXÖ`örãj,?–7ÿêŠb¿J3þ€òÚÆÿØÿ‰÷éøÿÿÿÿªãÊ endstream endobj 28 0 obj <>stream +H‰dWË®¹ Ü߯Ð:@‹¤¨Ç6NÕ ²È™ÙŒÌäÿTu®ƒ†ïawKÅ"õå¯_Û—Ÿ¾ööÇ?}m½ñßï¿||ùËß{ûåß|ñZÙ"z ߯l¿ÿóãç?ÿ„µ_j§ÕÎß°T«ðÿá,üGû×GåPøë‡Êk¦s¬-{ÍfÛ^™íÛwÏ¿ùk´_!A ýeø5 Øàëu°Î,ù0©âh0Ð%â¨öMß½=xk÷íƒÅ§QÉû=W™ž¾[§‹ü² /É2Vuî|-ö©mÁ°Ñ"*;MEôíc +h[»xºSËJeõOXè¬%%ÏQF$•qú»¬j#ww·ÌHÏüß·³åªôc7Qã,Œ7ˆvI +Œ¾'ÙFoOoâ(ef.~¶+$?YùG·éõ$¢%‹1dpFÖ4F4æ—ºAì2F‚~œ'ºì·¼­ 2–ÀžöëyË\ +ß’ÌéÇXµVÊÉ Ô.î¸ÚÉrÐ4ˆ)^â§ÕU¼ÑV´$ž™@¼†”&@ä E.1§œbzžèÅq…pC;†x¨&„ïXê£Å>Sî‚:16¦´PaÚ=Xx*d'aâÒ¼hÛ©LŠÝâªz—½\¢Ÿ¡m›ÐJ^•ÙR?êHSÍ +bnò¼3i @ãAW©‰á˜Gðç·¸ô¶•»u™["½«W¨¤EÕ/ý +Âzõ(UÄ}¿þO,½¡÷‹†STMŽÛàr‘)i/Ô;&½û–3+Y4ÌÊÒÖ©ZÁ’A¦8À•ÁæfÆŽ~[% Åè\¿: KtÄï$$ïêðürXÕâëNåVÝתڭ!º:‘¨W€Ùܧjò2 rŸÕoY»Ÿáëü*÷¢—ÃHmGp ‹ÛO„‰Æá{´5ªXUïc…þ"Y:Î?â"úÿœJ²‰T{•Ÿ ΫiW'a18¡1±HªP™¡gT}yˆ¡Y„ÁØ=É¢ +þy²G}RˆÕû ÃhŽO á¨êYX©Š K•kûs*á¾%M­¼¢tÌÛ˜ð^3‘e[ÄÓs hk£*èt9(ôwµ@¿­§CådÄ*Ùj^pw0õ¤¯Á«F2’r¿m”ÓÁPƒ]…þ;êMM‹5 ’·ÞOÊX‰K½ÒywyyVo—$˜kBHUŸ3Ñ‚¦Óñi*‰Û®¦š£:ŠI´ÏJfqßgÓ·T7º•'²þTõ ¹•®Ë +vª@¸QÈ­˜í>©óÙ¬ˆ„ºõüdJžåÂm\ƒ÷§\Yœ·Ð+¾C±ä ÞÙxãßO94ç-åißó˜NÜOžPƒl!÷H“(y¨\5†`+£´æé­*”hí¾­öõù°Þ[ÿKL%òyÃq³+ µ.èR+º·G#‘¯vF±p+ñ¢ìaä/d¦¼êÝDz•AOEàÑ<žeï_e£äYŒâUPäÊU_£˜ 'x‹º ûêR÷Õ@Ö믓oÅ‘º˜õ~ÿV»ªzxÍWÖÇ'iŒ¥ìÔä¦i決tœŠô’箉HäÇy”÷¬Y4ü> Öê²DU<Ñ•\S‹GX«uëöQ÷2Åé©Váã^»BE¨ÔÖðÚ GŒÑ© «HêÑÄ ›ÜàñÁ^óŒQýDG]x€5|LfêaÚŸSD ¾5Õ”©0 ¶ +ÅÇj´På°šçP®±ú–Ï{P-Ò…)CYÔ§©£?–eîkzJríÝ‘$[Z‘]ŽÕ\n¡¡Ù¯%øÑ4‰º¯!ÔUo¼½²«ëè*š¨±å©5)X~§²PËI0ˆVcK][†‰ÒÕKTƒbßb÷Ó¶B„LÔèððàâ»ôZÃÛTÞµDáE„³YÄmoÔðB%n FóÕÑe4XÊv¦dApËÕ÷D±jf4Z©?¬©U3·÷ÎI•Õù-k!öGMjî^3"Çu{ÝyÞd;î Vn«ä²ê½‹º£Àc³P,Ô©YJ¢ŒBÏRj& ˜âUã‚?ÄéVQMõ/Mʾi„¢® +‚W+8M·þöÑÿýþËÇoÍ$B+LÏƒÛ +›Ù‘ý®ußIÀéèdÅej*~Š¿ÏUûú¹äábygyuÛšƒ¥ôÂO§_Î>§¡‘M¯$rÞ}²§¬Uº ÁC™‡C»íäí±åå)–N9§®OiNšæà×.˜¸ŠâKŸ³íWïšeîÁðbßÎÅ!àµ'cÕäÄ9]Sg$³‡Ç=0°ž¡Úœ}L '/þ +´hˆ +ÒÕ5{nç©ì¶|åÆ oÓØN•¼4àTy·híŽQ3w=úÔe,OÈ•¡ƒX~ +¿…ž‡éne V–ó8còÂñZ›hâe™&ô]1<+Ì‹¥ëh`ìÄÓa Ø‘rv _·ñ30#ŽÍèa"";˜búâ'ä{ u"ªT€±É>í:,‰¤±J°‘Þ(Üì†Hï\@œh•Þ ^`AW˜4Öø«/Ýü {)|ŠÔéLÐÀ¹§Åº6†`é¸tNÝ?ÂYLJ%‘ˆx!5 ‚klSî“ ™ 0|j&ø ½Ë«%g¶«&P½œ`S•Y!UÛƒlø€_~>¢•üéÀ)o1°ké^äj&ˆÝ"÷¿V×X{LsQ§5ЇU•·#éûâˆÜð„ZÄ> ­k««­¸Ô¼ F^Ï­“Ò!x<á?®{åÖÍÍY;æ9ØÎû¬PNdªë‹ ÷æ-q©Š8Ë¡%b³|%dÑ‚hð'sÔ´×Na!Gé B Dh^<‡PÇZ(…ÅÀñâøéÇÍì½^NSð±ëré8ŸÏxý+]´ìá°Pý¯…vŽ&º/¢¼PK´ŠJHoŽ`7.ÅTà…TÉV Ш$c¹“ø¹j«€bø¢Ûe»ÛLÿpL®#Tmâ¦É‚<#yÎ÷úÐaçx{Lµ,U2%‘ÔçÅá}ª©ôÉÓ+%ú6Å`KÊí‹’çÚÇg—_¹Ëµ¨Ø“®òV$ÙgéÄשJp«+}õÒÚ¾á“+«ƒç:r=ûpƲœ ížó  ÉÔ*Õý>~µ—5†>{LS—F5SWé€R’ûEï×ÓÿMsÜû(jí1ϬðZZ¡„}š¼a¬¼xF¿#˜&¶ +"j^•a*\Õî²Ø´m'D=Å話vÂî>eÅß!ŇT=çþŸañ~CG½$í¬iH,§I°‘˜®n>èîØ‰£pŸ,£9ˆúu¿Ý7‘ˆ èq¦ÙcßɼR¯ó¿š¼yºC¼:I‰:€êîjN¥µ<¼c©V¤TÌ´‡;ƒÜæœZ)¢ÇÃÓ«,˜LÖ¥ᮤva%WÃ+òìc7命½ÚÉŒ¡V(NÚÒw…¿+14]õµÎüŽÚ.ë‘p-é®ûò¹>_w—›uÃÖ4¿Èà¡·ùù¾="tž†P“ ØÆ é(µÆDï–ÏE½†BòRż×ì­Ñèt²¢>íÙ UÂlÌÐʆše†Êˆ@ÕmIjƒiY´ôì²´ãÞOúÄbltù!ëF´¡8VŸÚæÝŽ$¹õ -2º'ñ¨?·ç5‚}Û½ŠVt–+ÕìúZŒ<ÔúgXr,íŽÆÔTÆk°z…wb%‘µãPZÕNåeÎó[IþÛ`–X L}ËÒ{ô#­Òå„ I«è†L#&3²ó fafÏoìÀ¼ëÚËjy3R†±iáƒó¤À” жÓB&Äú£¢I–=Âû +ù[ul­Xq1î§q@` Ç©¿”¯m9ó¾w¦n5¿Wz ä(vË)y;¶Oˆ \¿ba-\t¸Þ^Vúþòðp9nd§K+ûHÍ´­´¶¨©çæðà´fàipáÓ@…ýQî4Ô¥qài79¥Z%‘•>4S 9utV7 —N, ÌSc‹ûPN¤](Ãt Û^ ΉÁ Ñq.¿ Ô˜<¡ Ö<‰t„0È€i.”ß2³ëÙœ–ë«[FY*e„HÃî&’:\a­Öô +IÞ“åž–cÍLÈX}Côý®>è´Ž³¥ åÌbë” Þ¢AH¾ ß+¯À{W‚„ÿÙ]z¬ÝG3m*<˜’VÙfýz@v“V@&à÷„"Ÿ $w KÇÞul´¦‘%’WÏLýgÙý¦GŽN"…¶·çxÕh€æ=% çûE€"…é—Ï%½º’ËÓÈ«^ ÖÆ”m¾é§ÊQ¬)D.u:0±Ø°ê¤Ã‚«ÐÓ­ð–™ê”8~þvZZÌ0ˆ×dC Qrj)z÷:FÃPy{L†YÅLÉð䌬(}GG{ôY¯[/u- PÁÈ@ ßZTÄÉ>]¯)_ÄRãu5®*æ5ÞAëªz­¼i9†i¥4sé¡Êõ‘Mž•UÙ31U½j§X×+²3Ë0•# £¦')/ÝJKá.eÿQh4• ®±5€Tm­æ¶ Ðæða‡B0"2¨„6Ñmd¾ØUÜËó9 +”™Ú·ßÿq©TaÐ ™}ß› +UO˜sLXÓ^L‡j1¥;(H¡ +‰¨$ +fÁqz;ÙÌéRäu#WuÛ–„2¼Å{4…BF{¤×S™ ©“E¤þ¨„.ˆ†ÇØÁʲv^ÇË|Q™Xykì«À¢Zң쬔ìyECÔ¶m+¤(§ãÐ>“Iù¨æºmK³¶ZÖú+¢%q9G@·!_oÚ½}?Qn %í¼³ëôÇ–_¦ä|‹~rºd—ä´oïÖ*.N¡ëO7s¯P×63nÒðKMp€HéÃÃa9¥ÅÕÌ€†iqtvC1+_nsñ·ù‘õ©ÐWPÔaÒ0à ¿€1Nïé&_î×ë²%†I5B½WÜ‘Ø@h>ÓØ}`ƪØÕüâä-ÊaƵ¹~øéÓíå»?º}÷Ó§rûþOZé”:N­ñïàÏïùëí_RG}ÙfuÉýÌ®Š¡w†¨Øàʯ9ÚšÞ÷-úÜ5a¡lŠ ìD{êG³¢¨8UÁÞŠ:òÝWÁ'Ó=ä²Bkâ(¶“^‚Ï *5¬r soî„eTHÕhµ¸?hÑåy ±î†»¯&OV\û­æRîË:Ë“Ï厒̈pÒGsºÏ'u—¢sÍ‘£„"‰܅u=d&Ðu=Gˆ“[L·*™ÛÔ-g£ Ôç9LÜ,ËÐÊNÝ„ÔSÏ Riž +;™f„Üúã”ðUŽF;F´P‰ ÆóüõÄÛñÍ*SÝö s¼cæxÍñ„šã›ã‚›ãœn°y æ +šfŽgÐWÔWØϸ9®À9È9ž¡s\±s\Ás<£ç¸ÂçxàçxÐqEÐq…ÐñŒ¡ã +¢ãŠ¢ãFW]AôŒ¡ „.ºè¸ è¸@è w½ãçŸ=žã¿¡'wÝ(¢ÚrÄBUK|W€‘¦f„íöXßÿw˜ç-¨¶òë¢û½‰ý߯¤ž}üé×»øþ{`Á¾Ú:#Ѳ¤ZIë\kT©êrgI½®7.qŸ·„Iâ}R[KïWÊåó£¿üzïŸ +îô׬A¨Ì)(=ìᥗºÈMŸ/Üê6¼Ìå6Z˜“<-]úZþªÚÙœry )súøÈ.3ŒFz+‰£ë»µO‹·î^’7Äññ—æÐÑUÚ%l“¨B +š…¾×ëú­ŽSR[,ªjîPW8ÝžgŒíÃéLÝɧ¶ ®+# ÄErRÚË>«ã"¼¦‚Ð1Ü:~×öf=ë«—Íà¢æNyÔG>´Fn¥M*'ôˆå…qÝøcZ$R…«ìaGÅlªa‡©R3:êOòºmëþ–qYÀ­Ù¬A÷ö+%›;„1+ •žBS*ÕÏi™Þ0>ùšZÀÛ ‰ì|aÚÅèì‘’HÏ·MtT¢"žÚCzÿÿ;1ù'æ//ß¿}S¸}÷–ÿF¾Þ~}a°¾ý +ñíß7Q~N»{—ûõFÜm,¬æKYýööÛË~üùÇŸÿøöÏ—ÞBGþÿÿÿÿ˜ÅU endstream endobj 26 0 obj [25 0 R 24 0 R 23 0 R] endobj 44 0 obj <> endobj xref +0 45 +0000000004 65535 f +0000000016 00000 n +0000000180 00000 n +0000028195 00000 n +0000000000 00000 f +0000028281 00000 n +0000000000 00000 f +0000000000 00000 f +0000031851 00000 n +0000031923 00000 n +0000032096 00000 n +0000033730 00000 n +0000099318 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000028694 00000 n +0000029068 00000 n +0000029482 00000 n +0000029856 00000 n +0000099885 00000 n +0000099956 00000 n +0000100027 00000 n +0000112008 00000 n +0000030269 00000 n +0000106439 00000 n +0000102201 00000 n +0000100446 00000 n +0000105443 00000 n +0000104377 00000 n +0000103379 00000 n +0000102314 00000 n +0000030682 00000 n +0000100330 00000 n +0000100361 00000 n +0000100214 00000 n +0000100245 00000 n +0000100098 00000 n +0000100129 00000 n +0000100718 00000 n +0000101015 00000 n +0000112047 00000 n +trailer <<0E50F4C93FDA472D9AB1425F0B18F098>]>> startxref 112236 %%EOF \ No newline at end of file diff --git a/isis/src/docsys/assets/banners/moon-cr.jpg b/isis/src/docsys/assets/img/moon-cr.jpg similarity index 100% rename from isis/src/docsys/assets/banners/moon-cr.jpg rename to isis/src/docsys/assets/img/moon-cr.jpg diff --git a/isis/src/docsys/assets/scripts/feed2js/build.php b/isis/src/docsys/assets/scripts/feed2js/build.php deleted file mode 100644 index c559556428..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/build.php +++ /dev/null @@ -1,213 +0,0 @@ -')) { - $src = preg_replace("/(\)/si", "SCRIPT DELETED", "$src"); - die("Warning! Attempt to inject javascript detected. Aborted and tracking log updated."); -} - - -// check for status of submit buttons - $generate = (isset($_GET['generate'])) ? $_GET['generate'] : ''; - if (isset($generate)) $generate = $_GET['generate']; - -// update to full descriptions for html turned on - if ($html=='a') $desc = 0; - -// build parameter string for the feed2js url - $options = ''; - if ($chan != 'n') $options .= "&chan=$chan"; - if ($num != 0) $options .= "&num=$num"; - if ($desc != 0) $options .= "&desc=$desc"; - if ($date != 'n') $options .= "&date=$date"; - if ($tz != 'feed') $options .= "&tz=$tz"; - if ($targ != 'n') $options .= "&targ=$targ"; - if ($html != 'n') $html_options = "&html=$html"; - if ($utf == 'y') $options .= '&utf=y'; - if ($rss_box_id != '') $options .= "&css=$rss_box_id"; - if ($pc == 'y') $options .= '&pc=y'; - - - -if ($generate) { - // URLs for a preview or a generated feed link - - $my_dir = 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']); - - $rss_str = "$my_dir/feed2js.php?src=" . urlencode($src) . htmlentities($options . $html_options); - - $noscript_rss_str = "$my_dir/feed2js.php?src=" . urlencode($src) . htmlentities($options . '&html=y'); - -} - -?> - - - - - Cut n' Paste JavaScript RSS Feed - - - - - - - -
-

Feed2JS Build JavaScript and Preview

-

The tool below will help you format a feed's display with the information you want to use on your web site. All you need to enter is the URL for the RSS source, and select the desired options below.

- -

First, be sure to preview the feed to verify the content and format. Once the content is displayed how you like, just use the generate javascript button to get your code. Once the content looks okay, move on to our style tool to make it pretty.

- - - - -

Get Your Code Here

-

Below is the code you need to copy and paste to your own web page to include this RSS feed. The NOSCRIPT tag provides a link to a HTML display of the feed for users who may not have JavaScript enabled.

-
-cut and paste javascript:
-
- - - - -
- -

URL Enter the web address of the RSS Feed (must be in http:// format, not feed://)
- -
-Note: Please verify the URL of your feed (make sure it presents raw RSS) and check that it is valid before using this form. -

- -
-

Show n' Tell!

-
-
- -
-
- - -

Show channel? (yes/no/title) Display information about the publisher of the feed (yes=show the title and description; title= display title only, no=do not display anything)
- /> yes /> title /> no

- -

Number of items to display. Enter the number of items to be displayed (enter 0 to show all available)
-

- -

Show/Hide item descriptions? How much? (0=no descriptions; 1=show full description text; n>1 = display first n characters of description; n=-1 do not link item title, just display item contents)
-

- -

Use HTML in item display? ("yes" = use HTML from feed and the full item descriptions will be used, ignoring any character limit set above; "no" = output is text-only formatted by CSS; "preserve paragraphs" = no HTML but convert all RETURN/linefeeds to <br> to preserve paragraph breaks)
-/> yes /> no /> preserve paragraphs only

- -

Show item posting date? (yes/no) Display the time and date for each item.
-/> yes /> no

- -

Time Zone Offset (+n/-n/'feed') Date and timer are converted to GMT time; to have display in local time, you must enter an offset from your current local time to (GMT). If your local time is 5 hours before GMT, enter -5. If your local time is 8 hours past GMT, enter +8. Fractional offsets such as +10:30 must be entered as decimal +10.5. If you prefer to just display the date is recorded in the RSS, use a value = feed
-

- -

Target links in the new window? (n="no, links open the same page", y="yes, open links in a new window", "xxxx" = open links in a frame named 'xxxx', 'popup' = use a JavaScript function popupfeed() to open in new window)
-

- -

UTF-8 Character Encoding
Required for many non-western language web pages and also may help if you see strange characters replacing quotes in your output (see help pages for more information).
- /> use UTF-8 character encoding -

- -

Podcast enclosures
For RSS 2.0 feeds with enclosures, display link to media files
- /> yes - /> no -

- -

Custom CSS Class (advanced users)
Use to create different styles for multiple feeds per page. Specify class for content as rss-box-XXXX where XXXX is the value entered below. Style sheets must be created in accordance with Feed2JS guidelines.
-

- -
-
- - - - - diff --git a/isis/src/docsys/assets/scripts/feed2js/feed2js.php b/isis/src/docsys/assets/scripts/feed2js/feed2js.php deleted file mode 100644 index 93b099a0a0..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/feed2js.php +++ /dev/null @@ -1,316 +0,0 @@ -')) { - $src = preg_replace("/(\)/si", "SCRIPT DELETED", "$src"); - die("Warning! Attempt to inject javascript detected. Aborted and tracking log updated."); -} - - -// MAGPIE SETUP ---------------------------------------------------- -// access configuration settings -require_once('feed2js_config.php'); - -// check for utf encoding type -$utf = (isset($_GET['utf'])) ? $_GET['utf'] : 'n'; - -if ($utf == 'y') { - define('MAGPIE_CACHE_DIR', MAGPIE_DIR . 'cache_utf8/'); - // chacrater encoding - define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); - -} else { - define('MAGPIE_CACHE_DIR', MAGPIE_DIR . 'cache/'); -} - -// GET VARIABLES --------------------------------------------- -// retrieve values from posted variables - -// flag to show channel info -$chan = (isset($_GET['chan'])) ? $_GET['chan'] : 'n'; - -// variable to limit number of displayed items; default = 0 (show all, 100 is a safe bet to list a big list of feeds) - -$num = (isset($_GET['num'])) ? $_GET['num'] : 0; -if ($num==0) $num = 100; - -// indicator to show item description, 0 = no; 1=all; n>1 = characters to display -// values of -1 indicate to displa item without the title as a link -// (default=0) -$desc = (isset($_GET['desc'])) ? $_GET['desc'] : 0; - -// flag to show date of posts, values: no/yes (default=no) -$date = (isset($_GET['date'])) ? $_GET['date'] : 'n'; - -// time zone offset for making local time, -// e.g. +7, =-10.5; 'feed' = print the time string in the RSS w/o conversion -$tz = (isset($_GET['tz'])) ? $_GET['tz'] : 'feed'; - - -// flag to open target window in new window; n = same window, y = new window, -// other = targeted window, 'popup' = call JavaScript function popupfeed() to display -// in new window (default is n) - -$targ = (isset($_GET['targ'])) ? $_GET['targ'] : 'n'; -if ($targ == 'n') { - $target_window = ' target="_self"'; -} elseif ($targ == 'y' ) { - $target_window = ' target="_blank"'; -} elseif ($targ == 'popup') { - $target_window = ' onClick="popupfeed(this.href);return false"'; -} else { - $target_window = ' target="' . $targ . '"'; -} - -// flag to show feed as full html output rather than JavaScript, used for alternative -// views for JavaScript-less users. -// y = display html only for non js browsers (NO LONGER USED) -// n = default (JavaScript view) -// a = display javascript output but allow HTML -// p = display text only items but convert linefeeds to BR tags - -// default setting for no conversion of linebreaks -$html = (isset($_GET['html'])) ? $_GET['html'] : 'n'; - -$br = ' '; -if ($html == 'a') { - $desc = 1; -} elseif ($html == 'p') { - $br = '
'; -} - -// optional parameter to use different class for the CSS container -$rss_box_id = (isset($_GET['css'])) ? '-' . $_GET['css'] : ''; - -// optional parameter to use different class for the CSS container -$play_podcast = (isset($_GET['pc'])) ? $_GET['pc'] : 'n'; - - -// PARSE FEED and GENERATE OUTPUT ------------------------------- -// This is where it all happens! - -$rss = @fetch_rss( $src ); - -// begin javascript output string for channel info -$str= "document.write('
');\n"; - - -// no feed found by magpie, return error statement -if (!$rss) { - $str.= "document.write('

$script_msgError: Feed failed! Causes may be (1) No data found for RSS feed $src; (2) There are no items are available for this feed; (3) The RSS feed does not validate.

Please verify that the URL $src works first in your browser and that the feed passes a validator test.

');\n"; - - -} else { - - - // Create CONNECTION CONFIRM - // create output string for local javascript variable to let - // browser know that the server has been contacted - $feedcheck_str = "feed2js_ck = true;\n\n"; - - // we have a feed, so let's process - if ($chan == 'y') { - - // output channel title and description - $str.= "document.write('

channel['link']) . '"' . $target_window . ">" . addslashes(strip_returns($rss->channel['title'])) . "
" . addslashes(strip_returns(strip_tags($rss->channel['description']))) . "

');\n"; - - } elseif ($chan == 'title') { - // output title only - $str.= "document.write('

channel['link']) . '"' . $target_window . ">" . addslashes(strip_returns($rss->channel['title'])) . "

');\n"; - - } - - // begin item listing - $str.= "document.write('
    ');\n"; - - // Walk the items and process each one - $all_items = array_slice($rss->items, 0, $num); - - foreach ( $all_items as $item ) { - - // set defaults thanks RPFK - if (!isset($item['summary'])) $item['summary'] = ''; - $more_link = ''; - - if ($item['link']) { - // link url - $my_url = addslashes($item['link']); - } elseif ($item['guid']) { - // feeds lacking item -> link - $my_url = ($item['guid']); - } - - - if ($desc < 0) { - $str.= "document.write('
  • ');\n"; - - } elseif ($item['title']) { - // format item title - $my_title = addslashes(strip_returns($item['title'])); - - // create a title attribute. thanks Seb! - $title_str = substr(addslashes(strip_returns(strip_tags((htmlspecialchars($item['summary']))))), 0, 255) . '...'; - - // write the title strng - $str.= "document.write('
  • ' . $my_title . "
    ');\n"; - - } else { - // if no title, build a link to tag on the description - $str.= "document.write('
  • ');\n"; - $more_link = " «details»"; - } - - // print out date if option indicated - - if ($date == 'y') { - - if ($tz == 'feed') { - // echo the date/time stamp reported in the feed - - if ($item['pubdate'] != '') { - // RSS 2.0 is alreayd formatted, so just use it - $pretty_date = $item['pubdate']; - } elseif ($item['published'] != "") { - // ATOM 1.0 format, remove the "T" and "Z" and the time zone offset - $pretty_date = str_replace("T", " ", $item['published']); - $pretty_date= str_replace("Z", " ", $pretty_date); - - } elseif ($item['issued'] != "") { - // ATOM 0.3 format, remove the "T" and "Z" and the time zone offset - $pretty_date = str_replace("T", " ", $item['issued']); - $pretty_date= str_replace("Z", " ", $pretty_date); - } elseif ( $item['dc']['date'] != "") { - // RSS 1.0, remove the "T" and the time zone offset - $pretty_date = str_replace("T", " ", $item['dc']['date']); - $pretty_date = substr($pretty_date, 0,-6); - } else { - - // no time/date stamp, - $pretty_date = 'n/a'; - } - - } else { - // convert to local time via conversion to GMT + offset - - // adjust local server time to GMT and then adjust time according to user - // entered offset. - - $pretty_date = date($date_format, $item['date_timestamp'] - $tz_offset + $tz * 3600); - - } - - $str.= "document.write('$pretty_date
    ');\n"; - } - - // link to podcast media if availavle - - if ($play_podcast == 'y' and is_array($item['enclosure'])) { - $str.= "document.write('
    ');\n"; - for ($i = 0; $i < count($item['enclosure']); $i++) { - - // display only if enclosure is a valid URL - //if (strpos($item['enclosure'][$i]['url'], 'http://')!=0) { - $str.= "document.write('Play " . substr(trim($item['enclosure'][$i]['url']), -3) . " ');\n"; - //} - - } - - $str.= "document.write('
    ');\n"; - - } - - - // output description of item if desired - if ($desc) { - - // Atom/encocded content support (thanks David Carter-Tod) - - if ($item['content']['encoded']) { - $my_blurb = html_entity_decode ( $item['content']['encoded'], ENT_NOQUOTES); - - - } else { - $my_blurb = $item['summary']; - } - - // strip html - if ($html != 'a') $my_blurb = strip_tags($my_blurb); - - // trim descriptions - if ($desc > 1) { - - // display specified substring numbers of chars; - // html is stripped to prevent cut off tags - $my_blurb = substr($my_blurb, 0, $desc) . '...'; - } - - - $str.= "document.write('" . addslashes(strip_returns($my_blurb, $br)) . "');\n"; - - } - - $str.= "document.write('$more_link
  • ');\n"; - } - - - $str .= "document.write('
');\n"; - -} - -// Render as JavaScript -// START OUTPUT -// headers to tell browser this is a JS file -if ($rss) header("Content-type: application/x-javascript"); - -// Spit out the results as the series of JS statements -echo $feedcheck_str . $str; - - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/feed2js_config.php b/isis/src/docsys/assets/scripts/feed2js/feed2js_config.php deleted file mode 100644 index 6e2f411556..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/feed2js_config.php +++ /dev/null @@ -1,66 +0,0 @@ - \ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/feed2js/feed2php.inc b/isis/src/docsys/assets/scripts/feed2js/feed2php.inc deleted file mode 100644 index 0b9ae69f30..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/feed2php.inc +++ /dev/null @@ -1,300 +0,0 @@ -1 = characters to display -// values of -1 indicate to display item without the title as a link -// (default=0) -if (!isset($desc)) $desc = 0; - -// flag to show date of posts, values: no/yes (default=no) -$date = (isset($date)) ? $date : 'n'; - -// time zone offset for making local time, -// e.g. +7, =-10.5; 'feed' = print the time string in the RSS w/o conversion -$tz = (isset($tz)) ? $tz : 'feed'; - -// flag to open target window in new window; n = same window, y = new window, -// other = targeted window, 'popup' = call JavaScript function popupfeed to display -// in new window -// (default is n) - -if (!isset($targ)) $targ = 'n'; - -if ($targ == 'n') { - $target_window = ' target="_self"'; -} elseif ($targ == 'y' ) { - $target_window = ' target="_blank"'; -} elseif ($targ == 'popup') { - $target_window = ' onClick="popupfeed(this.href);return false"'; -} else { - $target_window = ' target="' . $targ . '"'; -} - -// flag to show feed as full html output rather than JavaScript, used for alternative -// views for JavaScript-less users. -// y = display html only for non js browsers -// n = default (JavaScript view) -// a = display javascript output but allow HTML -// p = display text only items but convert linefeeds to BR tags - -// default setting for no conversion of linebreaks -if (!isset($html)) $html = 'n'; - -$br = ' '; -if ($html == 'a') { - $desc = 1; -} elseif ($html == 'p') { - $br = '
'; -} - -// optional parameter to use different class for the CSS container -if (isset($css)) { - $rss_box_id = '-' . $css; -} else { - $rss_box_id = ''; -} - -if (isset($pc)) { - $play_podcast = $pc; -} else { - $play_podcast = 'n'; -} - - -// PARSE FEED and GENERATE OUTPUT ------------------------------- -// This is where it all happens! - -// Fetch the data, thanks Magpie -$rss = @fetch_rss( $src ); - -// begin javascript output string for channel info -$str = "
\n"; - -// no feed found by magpie, return error statement -if (!$rss) { - // error, nothing grabbed - $str.= "

Error: Feed failed! Causes may be (1) No data found for RSS feed $src; (2) There are no items are available for this feed; (3) The RSS feed does not validate.

Please verify that the URL $src works first in your browser and that the feed passes a validator test.

\n"; -} else { - - if ($chan == 'y') { - - // output channel title and description - $str.= "

channel['link']) . "\" target=\"" . $target_window . "\">" . strip_returns($rss->channel['title']) . "
" . strip_returns($rss->channel['description']) . "

\n"; - - } elseif ($chan == 'title') { - // output title only - $str.= "

channel['link']) . "\" target=\"" . $target_window . "\">" . strip_returns($rss->channel['title']) . "

\n"; - - } - - // begin item listing - $str.= "
    \n"; - - - // Walk the items and process each one - $all_items = array_slice($rss->items, 0, $num); - - foreach ( $all_items as $item ) { - - if ($item['link']) { - // link url - $my_url = $item['link']; - } elseif ($item['guid']) { - // feeds lacking item -> link - $my_url = ($item['guid']); - } - - - if ($desc < 0) { - $str.= "
  • \n"; - - } elseif ($item['title']) { - // format item title - $my_title = strip_returns($item['title']); - - // create a title attribute. thanks Seb! - $title_str = substr(strip_returns(strip_tags($item['summary'])), 0, 255) . '...'; - - // write the item - $str.= "
  • " . $my_title . "
    \n"; - - } else { - // if no title, build a link to tag on the description - $str.= "
  • \n"; - $more_link = " «details»"; - } - - - // print out date if option indicated and feed returns a value. - // Use the new date_timestamp function in Magpie 0.71 - if ($date == 'y') { - if ($tz == 'feed') { - // echo the date/time stamp reported in the feed - - if ($item['pubdate'] != '') { - // RSS 2.0 is already formatted, so just use it - $pretty_date = 'published on ' . $item['pubdate']; - } elseif ($item['published'] != "") { - // ATOM 1.0 format, remove the "T" and "Z" and the time zone offset - $pretty_date = str_replace("T", " ", $item['published']); - $pretty_date= 'published on ' . str_replace("Z", " ", $pretty_date); - - } elseif ($item['issued'] != "") { - // ATOM 0.3 format, remove the "T" and "Z" and the time zone offset - $pretty_date = str_replace("T", " ", $item['issued']); - $pretty_date= 'published on ' . str_replace("Z", " ", $pretty_date); - } elseif ( $item['dc']['date'] != "") { - // RSS 1.0, remove the "T" and the time zone offset - $pretty_date = str_replace("T", " ", $item['dc']['date']); - $pretty_date = 'published on ' . substr($pretty_date, 0,-6); - } else { - - // no time/date stamp, just use the server time - $pretty_date = 'published date n/a'; - } - - } else { - // convert to local time via conversion to GMT + offset - - // adjust local server time to GMT and then adjust time according to user - // entered offset. - - $pretty_date = 'published on ' . date($date_format, $item['date_timestamp'] - $tz_offset + $tz * 3600); - - } - - - - $str.= "$pretty_date
    \n"; - } - - // link to podcast media if available - - if ($play_podcast == 'y' and is_array($item['enclosure'])) { - $str.= "
    Media: "; - - for ($i = 0; $i < count($item['enclosure']); $i++) { - - // display only if enclosure is a valid URL - //if (strpos($item['enclosure'][$i]['url'], 'http://')!=0) { - $str.= "Play " . substr(trim($item['enclosure'][$i]['url']), -3) . " "; - //} - - } - $str.= "
    "; - - } - - - - - // output description of item if desired - if ($desc) { - - // Atom/encoded content support (thanks David Carter-Tod) - - if ($item['content']['encoded']) { - $my_blurb = html_entity_decode ( $item['content']['encoded'], ENT_NOQUOTES); - - } else { - $my_blurb = $item['summary']; - } - - - - // strip html - if ($html != 'a') $my_blurb = strip_tags($my_blurb); - - // trim descriptions - if ($desc > 1) { - - // display specified substring numbers of chars; - // html is stripped to prevent cut off tags - $my_blurb = substr($my_blurb, 0, $desc) . '...'; - } - - $str.= strip_returns($my_blurb, $br) . "\n"; - } - - $str.= "$more_link
  • \n"; - } -} - -$str .= "
\n"; -echo $str; - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/footer b/isis/src/docsys/assets/scripts/feed2js/footer deleted file mode 100644 index 8d6f68bcc7..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/footer +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie/extlib/Snoopy.class.inc b/isis/src/docsys/assets/scripts/feed2js/magpie/extlib/Snoopy.class.inc deleted file mode 100644 index 531161059d..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie/extlib/Snoopy.class.inc +++ /dev/null @@ -1,1250 +0,0 @@ - -Copyright (c): 1999-2008 New Digital Group, all rights reserved -Version: 1.2.4 - - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -You may contact the author of Snoopy by e-mail at: -monte@ohrt.com - -The latest version of Snoopy can be obtained from: -http://snoopy.sourceforge.net/ - -*************************************************/ - -class Snoopy -{ - /**** Public variables ****/ - - /* user definable vars */ - - var $host = "www.php.net"; // host name we are connecting to - var $port = 80; // port we are connecting to - var $proxy_host = ""; // proxy host to use - var $proxy_port = ""; // proxy port to use - var $proxy_user = ""; // proxy user to use - var $proxy_pass = ""; // proxy password to use - - var $agent = "Snoopy v1.2.4"; // agent we masquerade as - var $referer = ""; // referer info to pass - var $cookies = array(); // array of cookies to pass - // $cookies["username"]="joe"; - var $rawheaders = array(); // array of raw headers to send - // $rawheaders["Content-type"]="text/html"; - - var $maxredirs = 5; // http redirection depth maximum. 0 = disallow - var $lastredirectaddr = ""; // contains address of last redirected address - var $offsiteok = true; // allows redirection off-site - var $maxframes = 0; // frame content depth maximum. 0 = disallow - var $expandlinks = true; // expand links to fully qualified URLs. - // this only applies to fetchlinks() - // submitlinks(), and submittext() - var $passcookies = true; // pass set cookies back through redirects - // NOTE: this currently does not respect - // dates, domains or paths. - - var $user = ""; // user for http authentication - var $pass = ""; // password for http authentication - - // http accept types - var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; - - var $results = ""; // where the content is put - - var $error = ""; // error messages sent here - var $response_code = ""; // response code returned from server - var $headers = array(); // headers returned from server sent here - var $maxlength = 500000; // max return data length (body) - var $read_timeout = 0; // timeout on read operations, in seconds - // supported only since PHP 4 Beta 4 - // set to 0 to disallow timeouts - var $timed_out = false; // if a read operation timed out - var $status = 0; // http request status - - var $temp_dir = "/tmp"; // temporary directory that the webserver - // has permission to write to. - // under Windows, this should be C:\temp - - var $curl_path = "/usr/local/bin/curl"; - // Snoopy will use cURL for fetching - // SSL content if a full system path to - // the cURL binary is supplied here. - // set to false if you do not have - // cURL installed. See http://curl.haxx.se - // for details on installing cURL. - // Snoopy does *not* use the cURL - // library functions built into php, - // as these functions are not stable - // as of this Snoopy release. - - /**** Private variables ****/ - - var $_maxlinelen = 4096; // max line length (headers) - - var $_httpmethod = "GET"; // default http request method - var $_httpversion = "HTTP/1.0"; // default http request version - var $_submit_method = "POST"; // default submit method - var $_submit_type = "application/x-www-form-urlencoded"; // default submit type - var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type - var $_redirectaddr = false; // will be set if page fetched is a redirect - var $_redirectdepth = 0; // increments on an http redirect - var $_frameurls = array(); // frame src urls - var $_framedepth = 0; // increments on frame depth - - var $_isproxy = false; // set if using a proxy server - var $_fp_timeout = 30; // timeout for socket connection - -/*======================================================================*\ - Function: fetch - Purpose: fetch the contents of a web page - (and possibly other protocols in the - future like ftp, nntp, gopher, etc.) - Input: $URI the location of the page to fetch - Output: $this->results the output text from the fetch -\*======================================================================*/ - - function fetch($URI) - { - - //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); - $URI_PARTS = parse_url($URI); - if (!empty($URI_PARTS["user"])) - $this->user = $URI_PARTS["user"]; - if (!empty($URI_PARTS["pass"])) - $this->pass = $URI_PARTS["pass"]; - if (empty($URI_PARTS["query"])) - $URI_PARTS["query"] = ''; - if (empty($URI_PARTS["path"])) - $URI_PARTS["path"] = ''; - - switch(strtolower($URI_PARTS["scheme"])) - { - case "http": - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_connect($fp)) - { - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httprequest($URI,$fp,$URI,$this->_httpmethod); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httprequest($path, $fp, $URI, $this->_httpmethod); - } - - $this->_disconnect($fp); - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - $this->fetch($this->_redirectaddr); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - } - else - { - return false; - } - return true; - break; - case "https": - if(!$this->curl_path) - return false; - if(function_exists("is_executable")) - if (!is_executable($this->curl_path)) - return false; - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httpsrequest($URI,$URI,$this->_httpmethod); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httpsrequest($path, $URI, $this->_httpmethod); - } - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - $this->fetch($this->_redirectaddr); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - return true; - break; - default: - // not a valid protocol - $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; - return false; - break; - } - return true; - } - -/*======================================================================*\ - Function: submit - Purpose: submit an http form - Input: $URI the location to post the data - $formvars the formvars to use. - format: $formvars["var"] = "val"; - $formfiles an array of files to submit - format: $formfiles["var"] = "/dir/filename.ext"; - Output: $this->results the text output from the post -\*======================================================================*/ - - function submit($URI, $formvars="", $formfiles="") - { - unset($postdata); - - $postdata = $this->_prepare_post_body($formvars, $formfiles); - - $URI_PARTS = parse_url($URI); - if (!empty($URI_PARTS["user"])) - $this->user = $URI_PARTS["user"]; - if (!empty($URI_PARTS["pass"])) - $this->pass = $URI_PARTS["pass"]; - if (empty($URI_PARTS["query"])) - $URI_PARTS["query"] = ''; - if (empty($URI_PARTS["path"])) - $URI_PARTS["path"] = ''; - - switch(strtolower($URI_PARTS["scheme"])) - { - case "http": - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_connect($fp)) - { - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - - $this->_disconnect($fp); - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) - $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); - - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - if( strpos( $this->_redirectaddr, "?" ) > 0 ) - $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get - else - $this->submit($this->_redirectaddr,$formvars, $formfiles); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - - } - else - { - return false; - } - return true; - break; - case "https": - if(!$this->curl_path) - return false; - if(function_exists("is_executable")) - if (!is_executable($this->curl_path)) - return false; - $this->host = $URI_PARTS["host"]; - if(!empty($URI_PARTS["port"])) - $this->port = $URI_PARTS["port"]; - if($this->_isproxy) - { - // using proxy, send entire URI - $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - else - { - $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); - // no proxy, send only the path - $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata); - } - - if($this->_redirectaddr) - { - /* url was redirected, check if we've hit the max depth */ - if($this->maxredirs > $this->_redirectdepth) - { - if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) - $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); - - // only follow redirect if it's on this site, or offsiteok is true - if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) - { - /* follow the redirect */ - $this->_redirectdepth++; - $this->lastredirectaddr=$this->_redirectaddr; - if( strpos( $this->_redirectaddr, "?" ) > 0 ) - $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get - else - $this->submit($this->_redirectaddr,$formvars, $formfiles); - } - } - } - - if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) - { - $frameurls = $this->_frameurls; - $this->_frameurls = array(); - - while(list(,$frameurl) = each($frameurls)) - { - if($this->_framedepth < $this->maxframes) - { - $this->fetch($frameurl); - $this->_framedepth++; - } - else - break; - } - } - return true; - break; - - default: - // not a valid protocol - $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; - return false; - break; - } - return true; - } - -/*======================================================================*\ - Function: fetchlinks - Purpose: fetch the links from a web page - Input: $URI where you are fetching from - Output: $this->results an array of the URLs -\*======================================================================*/ - - function fetchlinks($URI) - { - if ($this->fetch($URI)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_striplinks($this->results[$x]); - } - else - $this->results = $this->_striplinks($this->results); - - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results, $URI); - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: fetchform - Purpose: fetch the form elements from a web page - Input: $URI where you are fetching from - Output: $this->results the resulting html form -\*======================================================================*/ - - function fetchform($URI) - { - - if ($this->fetch($URI)) - { - - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_stripform($this->results[$x]); - } - else - $this->results = $this->_stripform($this->results); - - return true; - } - else - return false; - } - - -/*======================================================================*\ - Function: fetchtext - Purpose: fetch the text from a web page, stripping the links - Input: $URI where you are fetching from - Output: $this->results the text from the web page -\*======================================================================*/ - - function fetchtext($URI) - { - if($this->fetch($URI)) - { - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - $this->results[$x] = $this->_striptext($this->results[$x]); - } - else - $this->results = $this->_striptext($this->results); - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: submitlinks - Purpose: grab links from a form submission - Input: $URI where you are submitting from - Output: $this->results an array of the links from the post -\*======================================================================*/ - - function submitlinks($URI, $formvars="", $formfiles="") - { - if($this->submit($URI,$formvars, $formfiles)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - { - $this->results[$x] = $this->_striplinks($this->results[$x]); - if($this->expandlinks) - $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); - } - } - else - { - $this->results = $this->_striplinks($this->results); - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results,$URI); - } - return true; - } - else - return false; - } - -/*======================================================================*\ - Function: submittext - Purpose: grab text from a form submission - Input: $URI where you are submitting from - Output: $this->results the text from the web page -\*======================================================================*/ - - function submittext($URI, $formvars = "", $formfiles = "") - { - if($this->submit($URI,$formvars, $formfiles)) - { - if($this->lastredirectaddr) - $URI = $this->lastredirectaddr; - if(is_array($this->results)) - { - for($x=0;$xresults);$x++) - { - $this->results[$x] = $this->_striptext($this->results[$x]); - if($this->expandlinks) - $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); - } - } - else - { - $this->results = $this->_striptext($this->results); - if($this->expandlinks) - $this->results = $this->_expandlinks($this->results,$URI); - } - return true; - } - else - return false; - } - - - -/*======================================================================*\ - Function: set_submit_multipart - Purpose: Set the form submission content type to - multipart/form-data -\*======================================================================*/ - function set_submit_multipart() - { - $this->_submit_type = "multipart/form-data"; - } - - -/*======================================================================*\ - Function: set_submit_normal - Purpose: Set the form submission content type to - application/x-www-form-urlencoded -\*======================================================================*/ - function set_submit_normal() - { - $this->_submit_type = "application/x-www-form-urlencoded"; - } - - - - -/*======================================================================*\ - Private functions -\*======================================================================*/ - - -/*======================================================================*\ - Function: _striplinks - Purpose: strip the hyperlinks from an html document - Input: $document document to strip. - Output: $match an array of the links -\*======================================================================*/ - - function _striplinks($document) - { - preg_match_all("'<\s*a\s.*?href\s*=\s* # find ]+)) # if quote found, match up to next matching - # quote, otherwise match up to next space - 'isx",$document,$links); - - - // catenate the non-empty matches from the conditional subpattern - - while(list($key,$val) = each($links[2])) - { - if(!empty($val)) - $match[] = $val; - } - - while(list($key,$val) = each($links[3])) - { - if(!empty($val)) - $match[] = $val; - } - - // return the links - return $match; - } - -/*======================================================================*\ - Function: _stripform - Purpose: strip the form elements from an html document - Input: $document document to strip. - Output: $match an array of the links -\*======================================================================*/ - - function _stripform($document) - { - preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); - - // catenate the matches - $match = implode("\r\n",$elements[0]); - - // return the links - return $match; - } - - - -/*======================================================================*\ - Function: _striptext - Purpose: strip the text from an html document - Input: $document document to strip. - Output: $text the resulting text -\*======================================================================*/ - - function _striptext($document) - { - - // I didn't use preg eval (//e) since that is only available in PHP 4.0. - // so, list your entities one by one here. I included some of the - // more common ones. - - $search = array("']*?>.*?'si", // strip out javascript - "'<[\/\!]*?[^<>]*?>'si", // strip out html tags - "'([\r\n])[\s]+'", // strip out white space - "'&(quot|#34|#034|#x22);'i", // replace html entities - "'&(amp|#38|#038|#x26);'i", // added hexadecimal values - "'&(lt|#60|#060|#x3c);'i", - "'&(gt|#62|#062|#x3e);'i", - "'&(nbsp|#160|#xa0);'i", - "'&(iexcl|#161);'i", - "'&(cent|#162);'i", - "'&(pound|#163);'i", - "'&(copy|#169);'i", - "'&(reg|#174);'i", - "'&(deg|#176);'i", - "'&(#39|#039|#x27);'", - "'&(euro|#8364);'i", // europe - "'&a(uml|UML);'", // german - "'&o(uml|UML);'", - "'&u(uml|UML);'", - "'&A(uml|UML);'", - "'&O(uml|UML);'", - "'&U(uml|UML);'", - "'ß'i", - ); - $replace = array( "", - "", - "\\1", - "\"", - "&", - "<", - ">", - " ", - chr(161), - chr(162), - chr(163), - chr(169), - chr(174), - chr(176), - chr(39), - chr(128), - "ä", - "ö", - "ü", - "Ä", - "Ö", - "Ü", - "ß", - ); - - $text = preg_replace($search,$replace,$document); - - return $text; - } - -/*======================================================================*\ - Function: _expandlinks - Purpose: expand each link into a fully qualified URL - Input: $links the links to qualify - $URI the full URI to get the base from - Output: $expandedLinks the expanded links -\*======================================================================*/ - - function _expandlinks($links,$URI) - { - - preg_match("/^[^\?]+/",$URI,$match); - - $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); - $match = preg_replace("|/$|","",$match); - $match_part = parse_url($match); - $match_root = - $match_part["scheme"]."://".$match_part["host"]; - - $search = array( "|^http://".preg_quote($this->host)."|i", - "|^(\/)|i", - "|^(?!http://)(?!mailto:)|i", - "|/\./|", - "|/[^\/]+/\.\./|" - ); - - $replace = array( "", - $match_root."/", - $match."/", - "/", - "/" - ); - - $expandedLinks = preg_replace($search,$replace,$links); - - return $expandedLinks; - } - -/*======================================================================*\ - Function: _httprequest - Purpose: go get the http data from the server - Input: $url the url to fetch - $fp the current open file pointer - $URI the full URI - $body body contents to send if any (POST) - Output: -\*======================================================================*/ - - function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") - { - $cookie_headers = ''; - if($this->passcookies && $this->_redirectaddr) - $this->setcookies(); - - $URI_PARTS = parse_url($URI); - if(empty($url)) - $url = "/"; - $headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; - if(!empty($this->agent)) - $headers .= "User-Agent: ".$this->agent."\r\n"; - if(!empty($this->host) && !isset($this->rawheaders['Host'])) { - $headers .= "Host: ".$this->host; - if(!empty($this->port)) - $headers .= ":".$this->port; - $headers .= "\r\n"; - } - if(!empty($this->accept)) - $headers .= "Accept: ".$this->accept."\r\n"; - if(!empty($this->referer)) - $headers .= "Referer: ".$this->referer."\r\n"; - if(!empty($this->cookies)) - { - if(!is_array($this->cookies)) - $this->cookies = (array)$this->cookies; - - reset($this->cookies); - if ( count($this->cookies) > 0 ) { - $cookie_headers .= 'Cookie: '; - foreach ( $this->cookies as $cookieKey => $cookieVal ) { - $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; - } - $headers .= substr($cookie_headers,0,-2) . "\r\n"; - } - } - if(!empty($this->rawheaders)) - { - if(!is_array($this->rawheaders)) - $this->rawheaders = (array)$this->rawheaders; - while(list($headerKey,$headerVal) = each($this->rawheaders)) - $headers .= $headerKey.": ".$headerVal."\r\n"; - } - if(!empty($content_type)) { - $headers .= "Content-type: $content_type"; - if ($content_type == "multipart/form-data") - $headers .= "; boundary=".$this->_mime_boundary; - $headers .= "\r\n"; - } - if(!empty($body)) - $headers .= "Content-length: ".strlen($body)."\r\n"; - if(!empty($this->user) || !empty($this->pass)) - $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n"; - - //add proxy auth headers - if(!empty($this->proxy_user)) - $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n"; - - - $headers .= "\r\n"; - - // set the read timeout if needed - if ($this->read_timeout > 0) - socket_set_timeout($fp, $this->read_timeout); - $this->timed_out = false; - - fwrite($fp,$headers.$body,strlen($headers.$body)); - - $this->_redirectaddr = false; - unset($this->headers); - - while($currentHeader = fgets($fp,$this->_maxlinelen)) - { - if ($this->read_timeout > 0 && $this->_check_timeout($fp)) - { - $this->status=-100; - return false; - } - - if($currentHeader == "\r\n") - break; - - // if a header begins with Location: or URI:, set the redirect - if(preg_match("/^(Location:|URI:)/i",$currentHeader)) - { - // get URL portion of the redirect - preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches); - // look for :// in the Location header to see if hostname is included - if(!preg_match("|\:\/\/|",$matches[2])) - { - // no host in the path, so prepend - $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; - // eliminate double slash - if(!preg_match("|^/|",$matches[2])) - $this->_redirectaddr .= "/".$matches[2]; - else - $this->_redirectaddr .= $matches[2]; - } - else - $this->_redirectaddr = $matches[2]; - } - - if(preg_match("|^HTTP/|",$currentHeader)) - { - if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) - { - $this->status= $status[1]; - } - $this->response_code = $currentHeader; - } - - $this->headers[] = $currentHeader; - } - - $results = ''; - do { - $_data = fread($fp, $this->maxlength); - if (strlen($_data) == 0) { - break; - } - $results .= $_data; - } while(true); - - if ($this->read_timeout > 0 && $this->_check_timeout($fp)) - { - $this->status=-100; - return false; - } - - // check if there is a a redirect meta tag - - if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) - - { - $this->_redirectaddr = $this->_expandlinks($match[1],$URI); - } - - // have we hit our frame depth and is there frame src to fetch? - if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) - { - $this->results[] = $results; - for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); - } - // have we already fetched framed content? - elseif(is_array($this->results)) - $this->results[] = $results; - // no framed content - else - $this->results = $results; - - return true; - } - -/*======================================================================*\ - Function: _httpsrequest - Purpose: go get the https data from the server using curl - Input: $url the url to fetch - $URI the full URI - $body body contents to send if any (POST) - Output: -\*======================================================================*/ - - function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") - { - if($this->passcookies && $this->_redirectaddr) - $this->setcookies(); - - $headers = array(); - - $URI_PARTS = parse_url($URI); - if(empty($url)) - $url = "/"; - // GET ... header not needed for curl - //$headers[] = $http_method." ".$url." ".$this->_httpversion; - if(!empty($this->agent)) - $headers[] = "User-Agent: ".$this->agent; - if(!empty($this->host)) - if(!empty($this->port)) - $headers[] = "Host: ".$this->host.":".$this->port; - else - $headers[] = "Host: ".$this->host; - if(!empty($this->accept)) - $headers[] = "Accept: ".$this->accept; - if(!empty($this->referer)) - $headers[] = "Referer: ".$this->referer; - if(!empty($this->cookies)) - { - if(!is_array($this->cookies)) - $this->cookies = (array)$this->cookies; - - reset($this->cookies); - if ( count($this->cookies) > 0 ) { - $cookie_str = 'Cookie: '; - foreach ( $this->cookies as $cookieKey => $cookieVal ) { - $cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; - } - $headers[] = substr($cookie_str,0,-2); - } - } - if(!empty($this->rawheaders)) - { - if(!is_array($this->rawheaders)) - $this->rawheaders = (array)$this->rawheaders; - while(list($headerKey,$headerVal) = each($this->rawheaders)) - $headers[] = $headerKey.": ".$headerVal; - } - if(!empty($content_type)) { - if ($content_type == "multipart/form-data") - $headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; - else - $headers[] = "Content-type: $content_type"; - } - if(!empty($body)) - $headers[] = "Content-length: ".strlen($body); - if(!empty($this->user) || !empty($this->pass)) - $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); - - for($curr_header = 0; $curr_header < count($headers); $curr_header++) { - $safer_header = strtr( $headers[$curr_header], "\"", " " ); - $cmdline_params .= " -H \"".$safer_header."\""; - } - - if(!empty($body)) - $cmdline_params .= " -d \"$body\""; - - if($this->read_timeout > 0) - $cmdline_params .= " -m ".$this->read_timeout; - - $headerfile = tempnam($temp_dir, "sno"); - - exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return); - - if($return) - { - $this->error = "Error: cURL could not retrieve the document, error $return."; - return false; - } - - - $results = implode("\r\n",$results); - - $result_headers = file("$headerfile"); - - $this->_redirectaddr = false; - unset($this->headers); - - for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) - { - - // if a header begins with Location: or URI:, set the redirect - if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) - { - // get URL portion of the redirect - preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches); - // look for :// in the Location header to see if hostname is included - if(!preg_match("|\:\/\/|",$matches[2])) - { - // no host in the path, so prepend - $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; - // eliminate double slash - if(!preg_match("|^/|",$matches[2])) - $this->_redirectaddr .= "/".$matches[2]; - else - $this->_redirectaddr .= $matches[2]; - } - else - $this->_redirectaddr = $matches[2]; - } - - if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) - $this->response_code = $result_headers[$currentHeader]; - - $this->headers[] = $result_headers[$currentHeader]; - } - - // check if there is a a redirect meta tag - - if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) - { - $this->_redirectaddr = $this->_expandlinks($match[1],$URI); - } - - // have we hit our frame depth and is there frame src to fetch? - if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) - { - $this->results[] = $results; - for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); - } - // have we already fetched framed content? - elseif(is_array($this->results)) - $this->results[] = $results; - // no framed content - else - $this->results = $results; - - unlink("$headerfile"); - - return true; - } - -/*======================================================================*\ - Function: setcookies() - Purpose: set cookies for a redirection -\*======================================================================*/ - - function setcookies() - { - for($x=0; $xheaders); $x++) - { - if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match)) - $this->cookies[$match[1]] = urldecode($match[2]); - } - } - - -/*======================================================================*\ - Function: _check_timeout - Purpose: checks whether timeout has occurred - Input: $fp file pointer -\*======================================================================*/ - - function _check_timeout($fp) - { - if ($this->read_timeout > 0) { - $fp_status = socket_get_status($fp); - if ($fp_status["timed_out"]) { - $this->timed_out = true; - return true; - } - } - return false; - } - -/*======================================================================*\ - Function: _connect - Purpose: make a socket connection - Input: $fp file pointer -\*======================================================================*/ - - function _connect(&$fp) - { - if(!empty($this->proxy_host) && !empty($this->proxy_port)) - { - $this->_isproxy = true; - - $host = $this->proxy_host; - $port = $this->proxy_port; - } - else - { - $host = $this->host; - $port = $this->port; - } - - $this->status = 0; - - if($fp = fsockopen( - $host, - $port, - $errno, - $errstr, - $this->_fp_timeout - )) - { - // socket connection succeeded - - return true; - } - else - { - // socket connection failed - $this->status = $errno; - switch($errno) - { - case -3: - $this->error="socket creation failed (-3)"; - case -4: - $this->error="dns lookup failure (-4)"; - case -5: - $this->error="connection refused or timed out (-5)"; - default: - $this->error="connection failed (".$errno.")"; - } - return false; - } - } -/*======================================================================*\ - Function: _disconnect - Purpose: disconnect a socket connection - Input: $fp file pointer -\*======================================================================*/ - - function _disconnect($fp) - { - return(fclose($fp)); - } - - -/*======================================================================*\ - Function: _prepare_post_body - Purpose: Prepare post body according to encoding type - Input: $formvars - form variables - $formfiles - form upload files - Output: post body -\*======================================================================*/ - - function _prepare_post_body($formvars, $formfiles) - { - settype($formvars, "array"); - settype($formfiles, "array"); - $postdata = ''; - - if (count($formvars) == 0 && count($formfiles) == 0) - return; - - switch ($this->_submit_type) { - case "application/x-www-form-urlencoded": - reset($formvars); - while(list($key,$val) = each($formvars)) { - if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { - $postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; - } - } else - $postdata .= urlencode($key)."=".urlencode($val)."&"; - } - break; - - case "multipart/form-data": - $this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); - - reset($formvars); - while(list($key,$val) = each($formvars)) { - if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; - $postdata .= "$cur_val\r\n"; - } - } else { - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; - $postdata .= "$val\r\n"; - } - } - - reset($formfiles); - while (list($field_name, $file_names) = each($formfiles)) { - settype($file_names, "array"); - while (list(, $file_name) = each($file_names)) { - if (!is_readable($file_name)) continue; - - $fp = fopen($file_name, "r"); - $file_content = fread($fp, filesize($file_name)); - fclose($fp); - $base_name = basename($file_name); - - $postdata .= "--".$this->_mime_boundary."\r\n"; - $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; - $postdata .= "$file_content\r\n"; - } - } - $postdata .= "--".$this->_mime_boundary."--\r\n"; - break; - } - - return $postdata; - } -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_cache.inc b/isis/src/docsys/assets/scripts/feed2js/magpie/rss_cache.inc deleted file mode 100644 index f54ec3ed25..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_cache.inc +++ /dev/null @@ -1,200 +0,0 @@ - - * Version: 0.51 - * License: GPL - * - * The latest version of MagpieRSS can be obtained from: - * http://magpierss.sourceforge.net - * - * For questions, help, comments, discussion, etc., please join the - * Magpie mailing list: - * http://lists.sourceforge.net/lists/listinfo/magpierss-general - * - */ - -class RSSCache { - var $BASE_CACHE = './cache'; // where the cache files are stored - var $MAX_AGE = 3600; // when are files stale, default one hour - var $ERROR = ""; // accumulate error messages - - function RSSCache ($base='', $age='') { - if ( $base ) { - $this->BASE_CACHE = $base; - } - if ( $age ) { - $this->MAX_AGE = $age; - } - - // attempt to make the cache directory - if ( ! file_exists( $this->BASE_CACHE ) ) { - $status = @mkdir( $this->BASE_CACHE, 0755 ); - - // if make failed - if ( ! $status ) { - $this->error( - "Cache couldn't make dir '" . $this->BASE_CACHE . "'." - ); - } - } - } - -/*=======================================================================*\ - Function: set - Purpose: add an item to the cache, keyed on url - Input: url from which the rss file was fetched - Output: true on sucess -\*=======================================================================*/ - function set ($url, $rss) { - $this->ERROR = ""; - $cache_file = $this->file_name( $url ); - $fp = @fopen( $cache_file, 'w' ); - - if ( ! $fp ) { - $this->error( - "Cache unable to open file for writing: $cache_file" - ); - return 0; - } - - - $data = $this->serialize( $rss ); - fwrite( $fp, $data ); - fclose( $fp ); - - return $cache_file; - } - -/*=======================================================================*\ - Function: get - Purpose: fetch an item from the cache - Input: url from which the rss file was fetched - Output: cached object on HIT, false on MISS -\*=======================================================================*/ - function get ($url) { - $this->ERROR = ""; - $cache_file = $this->file_name( $url ); - - if ( ! file_exists( $cache_file ) ) { - $this->debug( - "Cache doesn't contain: $url (cache file: $cache_file)" - ); - return 0; - } - - $fp = @fopen($cache_file, 'r'); - if ( ! $fp ) { - $this->error( - "Failed to open cache file for reading: $cache_file" - ); - return 0; - } - - if ($filesize = filesize($cache_file) ) { - $data = fread( $fp, filesize($cache_file) ); - $rss = $this->unserialize( $data ); - - return $rss; - } - - return 0; - } - -/*=======================================================================*\ - Function: check_cache - Purpose: check a url for membership in the cache - and whether the object is older then MAX_AGE (ie. STALE) - Input: url from which the rss file was fetched - Output: cached object on HIT, false on MISS -\*=======================================================================*/ - function check_cache ( $url ) { - $this->ERROR = ""; - $filename = $this->file_name( $url ); - - if ( file_exists( $filename ) ) { - // find how long ago the file was added to the cache - // and whether that is longer then MAX_AGE - $mtime = filemtime( $filename ); - $age = time() - $mtime; - if ( $this->MAX_AGE > $age ) { - // object exists and is current - return 'HIT'; - } - else { - // object exists but is old - return 'STALE'; - } - } - else { - // object does not exist - return 'MISS'; - } - } - - function cache_age( $cache_key ) { - $filename = $this->file_name( $url ); - if ( file_exists( $filename ) ) { - $mtime = filemtime( $filename ); - $age = time() - $mtime; - return $age; - } - else { - return -1; - } - } - -/*=======================================================================*\ - Function: serialize -\*=======================================================================*/ - function serialize ( $rss ) { - return serialize( $rss ); - } - -/*=======================================================================*\ - Function: unserialize -\*=======================================================================*/ - function unserialize ( $data ) { - return unserialize( $data ); - } - -/*=======================================================================*\ - Function: file_name - Purpose: map url to location in cache - Input: url from which the rss file was fetched - Output: a file name -\*=======================================================================*/ - function file_name ($url) { - $filename = md5( $url ); - return join( DIRECTORY_SEPARATOR, array( $this->BASE_CACHE, $filename ) ); - } - -/*=======================================================================*\ - Function: error - Purpose: register error -\*=======================================================================*/ - function error ($errormsg, $lvl=E_USER_WARNING) { - // append PHP's error message if track_errors enabled - if ( isset($php_errormsg) ) { - $errormsg .= " ($php_errormsg)"; - } - $this->ERROR = $errormsg; - if ( MAGPIE_DEBUG ) { - trigger_error( $errormsg, $lvl); - } - else { - error_log( $errormsg, 0); - } - } - - function debug ($debugmsg, $lvl=E_USER_NOTICE) { - if ( MAGPIE_DEBUG ) { - $this->error("MagpieRSS [debug] $debugmsg", $lvl); - } - } - -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_fetch.inc b/isis/src/docsys/assets/scripts/feed2js/magpie/rss_fetch.inc deleted file mode 100644 index 68e2ba4eaa..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_fetch.inc +++ /dev/null @@ -1,458 +0,0 @@ - - * License: GPL - * - * The latest version of MagpieRSS can be obtained from: - * http://magpierss.sourceforge.net - * - * For questions, help, comments, discussion, etc., please join the - * Magpie mailing list: - * magpierss-general@lists.sourceforge.net - * - */ - -// Setup MAGPIE_DIR for use on hosts that don't include -// the current path in include_path. -// with thanks to rajiv and smarty -if (!defined('DIR_SEP')) { - define('DIR_SEP', DIRECTORY_SEPARATOR); -} - -if (!defined('MAGPIE_DIR')) { - define('MAGPIE_DIR', dirname(__FILE__) . DIR_SEP); -} - -require_once( MAGPIE_DIR . 'rss_parse.inc' ); -require_once( MAGPIE_DIR . 'rss_cache.inc' ); - -// for including 3rd party libraries -define('MAGPIE_EXTLIB', MAGPIE_DIR . 'extlib' . DIR_SEP); -require_once( MAGPIE_EXTLIB . 'Snoopy.class.inc'); - - -/* - * CONSTANTS - redefine these in your script to change the - * behaviour of fetch_rss() currently, most options effect the cache - * - * MAGPIE_CACHE_ON - Should Magpie cache parsed RSS objects? - * For me a built in cache was essential to creating a "PHP-like" - * feel to Magpie, see rss_cache.inc for rationale - * - * - * MAGPIE_CACHE_DIR - Where should Magpie cache parsed RSS objects? - * This should be a location that the webserver can write to. If this - * directory does not already exist Magpie will try to be smart and create - * it. This will often fail for permissions reasons. - * - * - * MAGPIE_CACHE_AGE - How long to store cached RSS objects? In seconds. - * - * - * MAGPIE_CACHE_FRESH_ONLY - If remote fetch fails, throw error - * instead of returning stale object? - * - * MAGPIE_DEBUG - Display debugging notices? - * -*/ - - -/*=======================================================================*\ - Function: fetch_rss: - Purpose: return RSS object for the give url - maintain the cache - Input: url of RSS file - Output: parsed RSS object (see rss_parse.inc) - - NOTES ON CACHEING: - If caching is on (MAGPIE_CACHE_ON) fetch_rss will first check the cache. - - NOTES ON RETRIEVING REMOTE FILES: - If conditional gets are on (MAGPIE_CONDITIONAL_GET_ON) fetch_rss will - return a cached object, and touch the cache object upon receiving a - 304. - - NOTES ON FAILED REQUESTS: - If there is an HTTP error while fetching an RSS object, the cached - version will be return, if it exists (and if MAGPIE_CACHE_FRESH_ONLY is off) -\*=======================================================================*/ - -define('MAGPIE_VERSION', '0.72'); - -$MAGPIE_ERROR = ""; - -function fetch_rss ($url) { - // initialize constants - init(); - - if ( !isset($url) ) { - error("fetch_rss called without a url"); - return false; - } - - // if cache is disabled - if ( !MAGPIE_CACHE_ON ) { - // fetch file, and parse it - $resp = _fetch_remote_file( $url ); - if ( is_success( $resp->status ) ) { - return _response_to_rss( $resp ); - } - else { - error("Failed to fetch $url and cache is off"); - return false; - } - } - // else cache is ON - else { - // Flow - // 1. check cache - // 2. if there is a hit, make sure its fresh - // 3. if cached obj fails freshness check, fetch remote - // 4. if remote fails, return stale object, or error - - $cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE ); - - if (MAGPIE_DEBUG and $cache->ERROR) { - debug($cache->ERROR, E_USER_WARNING); - } - - - $cache_status = 0; // response of check_cache - $request_headers = array(); // HTTP headers to send with fetch - $rss = 0; // parsed RSS object - $errormsg = 0; // errors, if any - - // store parsed XML by desired output encoding - // as character munging happens at parse time - $cache_key = $url . MAGPIE_OUTPUT_ENCODING; - - if (!$cache->ERROR) { - // return cache HIT, MISS, or STALE - $cache_status = $cache->check_cache( $cache_key); - } - - // if object cached, and cache is fresh, return cached obj - if ( $cache_status == 'HIT' ) { - $rss = $cache->get( $cache_key ); - if ( isset($rss) and $rss ) { - // should be cache age - $rss->from_cache = 1; - if ( MAGPIE_DEBUG > 1) { - debug("MagpieRSS: Cache HIT", E_USER_NOTICE); - } - return $rss; - } - } - - // else attempt a conditional get - - // setup headers - if ( $cache_status == 'STALE' ) { - $rss = $cache->get( $cache_key ); - if ( $rss and $rss->etag and $rss->last_modified ) { - $request_headers['If-None-Match'] = $rss->etag; - $request_headers['If-Last-Modified'] = $rss->last_modified; - } - } - - $resp = _fetch_remote_file( $url, $request_headers ); - - if (isset($resp) and $resp) { - if ($resp->status == '304' ) { - // we have the most current copy - if ( MAGPIE_DEBUG > 1) { - debug("Got 304 for $url"); - } - // reset cache on 304 (at minutillo insistent prodding) - $cache->set($cache_key, $rss); - return $rss; - } - elseif ( is_success( $resp->status ) ) { - $rss = _response_to_rss( $resp ); - if ( $rss ) { - if (MAGPIE_DEBUG > 1) { - debug("Fetch successful"); - } - // add object to cache - $cache->set( $cache_key, $rss ); - return $rss; - } - } - else { - $errormsg = "Failed to fetch $url "; - if ( $resp->status == '-100' ) { - $errormsg .= "(Request timed out after " . MAGPIE_FETCH_TIME_OUT . " seconds)"; - } - elseif ( $resp->error ) { - # compensate for Snoopy's annoying habbit to tacking - # on '\n' - $http_error = substr($resp->error, 0, -2); - $errormsg .= "(HTTP Error: $http_error)"; - } - else { - $errormsg .= "(HTTP Response: " . $resp->response_code .')'; - } - } - } - else { - $errormsg = "Unable to retrieve RSS file for unknown reasons."; - } - - // else fetch failed - - // attempt to return cached object - if ($rss) { - if ( MAGPIE_DEBUG ) { - debug("Returning STALE object for $url"); - } - return $rss; - } - - // else we totally failed - error( $errormsg ); - - return false; - - } // end if ( !MAGPIE_CACHE_ON ) { -} // end fetch_rss() - -/*=======================================================================*\ - Function: error - Purpose: set MAGPIE_ERROR, and trigger error -\*=======================================================================*/ - -function error ($errormsg, $lvl=E_USER_WARNING) { - global $MAGPIE_ERROR; - - // append PHP's error message if track_errors enabled - if ( isset($php_errormsg) ) { - $errormsg .= " ($php_errormsg)"; - } - if ( $errormsg ) { - $errormsg = "MagpieRSS: $errormsg"; - $MAGPIE_ERROR = $errormsg; - trigger_error( $errormsg, $lvl); - } -} - -function debug ($debugmsg, $lvl=E_USER_NOTICE) { - trigger_error("MagpieRSS [debug] $debugmsg", $lvl); -} - -/*=======================================================================*\ - Function: magpie_error - Purpose: accessor for the magpie error variable -\*=======================================================================*/ -function magpie_error ($errormsg="") { - global $MAGPIE_ERROR; - - if ( isset($errormsg) and $errormsg ) { - $MAGPIE_ERROR = $errormsg; - } - - return $MAGPIE_ERROR; -} - -/*=======================================================================*\ - Function: _fetch_remote_file - Purpose: retrieve an arbitrary remote file - Input: url of the remote file - headers to send along with the request (optional) - Output: an HTTP response object (see Snoopy.class.inc) -\*=======================================================================*/ -function _fetch_remote_file ($url, $headers = "" ) { - // Snoopy is an HTTP client in PHP - $client = new Snoopy(); - $client->agent = MAGPIE_USER_AGENT; - $client->read_timeout = MAGPIE_FETCH_TIME_OUT; - $client->use_gzip = MAGPIE_USE_GZIP; - if (is_array($headers) ) { - $client->rawheaders = $headers; - } - - @$client->fetch($url); - return $client; - -} - -/*=======================================================================*\ - Function: _response_to_rss - Purpose: parse an HTTP response object into an RSS object - Input: an HTTP response object (see Snoopy) - Output: parsed RSS object (see rss_parse) -\*=======================================================================*/ -function _response_to_rss ($resp) { - $rss = new MagpieRSS( $resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING ); - - // if RSS parsed successfully - if ( $rss and !$rss->ERROR) { - - // find Etag, and Last-Modified - foreach($resp->headers as $h) { - // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" - if (strpos($h, ": ")) { - list($field, $val) = explode(": ", $h, 2); - } - else { - $field = $h; - $val = ""; - } - - if ( $field == 'ETag' ) { - $rss->etag = $val; - } - - if ( $field == 'Last-Modified' ) { - $rss->last_modified = $val; - } - } - - return $rss; - } // else construct error message - else { - $errormsg = "Failed to parse RSS file."; - - if ($rss) { - $errormsg .= " (" . $rss->ERROR . ")"; - } - error($errormsg); - - return false; - } // end if ($rss and !$rss->error) -} - -/*=======================================================================*\ - Function: init - Purpose: setup constants with default values - check for user overrides -\*=======================================================================*/ -function init () { - if ( defined('MAGPIE_INITALIZED') ) { - return; - } - else { - define('MAGPIE_INITALIZED', true); - } - - if ( !defined('MAGPIE_CACHE_ON') ) { - define('MAGPIE_CACHE_ON', true); - } - - if ( !defined('MAGPIE_CACHE_DIR') ) { - define('MAGPIE_CACHE_DIR', './cache'); - } - - if ( !defined('MAGPIE_CACHE_AGE') ) { - define('MAGPIE_CACHE_AGE', 60*60); // one hour - } - - if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) { - define('MAGPIE_CACHE_FRESH_ONLY', false); - } - - if ( !defined('MAGPIE_OUTPUT_ENCODING') ) { - define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1'); - } - - if ( !defined('MAGPIE_INPUT_ENCODING') ) { - define('MAGPIE_INPUT_ENCODING', null); - } - - if ( !defined('MAGPIE_DETECT_ENCODING') ) { - define('MAGPIE_DETECT_ENCODING', true); - } - - if ( !defined('MAGPIE_DEBUG') ) { - define('MAGPIE_DEBUG', 0); - } - - if ( !defined('MAGPIE_USER_AGENT') ) { - $ua = 'MagpieRSS/'. MAGPIE_VERSION . ' (+http://magpierss.sf.net'; - - if ( MAGPIE_CACHE_ON ) { - $ua = $ua . ')'; - } - else { - $ua = $ua . '; No cache)'; - } - - define('MAGPIE_USER_AGENT', $ua); - } - - if ( !defined('MAGPIE_FETCH_TIME_OUT') ) { - define('MAGPIE_FETCH_TIME_OUT', 5); // 5 second timeout - } - - // use gzip encoding to fetch rss files if supported? - if ( !defined('MAGPIE_USE_GZIP') ) { - define('MAGPIE_USE_GZIP', true); - } -} - -// NOTE: the following code should really be in Snoopy, or at least -// somewhere other then rss_fetch! - -/*=======================================================================*\ - HTTP STATUS CODE PREDICATES - These functions attempt to classify an HTTP status code - based on RFC 2616 and RFC 2518. - - All of them take an HTTP status code as input, and return true or false - - All this code is adapted from LWP's HTTP::Status. -\*=======================================================================*/ - - -/*=======================================================================*\ - Function: is_info - Purpose: return true if Informational status code -\*=======================================================================*/ -function is_info ($sc) { - return $sc >= 100 && $sc < 200; -} - -/*=======================================================================*\ - Function: is_success - Purpose: return true if Successful status code -\*=======================================================================*/ -function is_success ($sc) { - return $sc >= 200 && $sc < 300; -} - -/*=======================================================================*\ - Function: is_redirect - Purpose: return true if Redirection status code -\*=======================================================================*/ -function is_redirect ($sc) { - return $sc >= 300 && $sc < 400; -} - -/*=======================================================================*\ - Function: is_error - Purpose: return true if Error status code -\*=======================================================================*/ -function is_error ($sc) { - return $sc >= 400 && $sc < 600; -} - -/*=======================================================================*\ - Function: is_client_error - Purpose: return true if Error status code, and its a client error -\*=======================================================================*/ -function is_client_error ($sc) { - return $sc >= 400 && $sc < 500; -} - -/*=======================================================================*\ - Function: is_client_error - Purpose: return true if Error status code, and its a server error -\*=======================================================================*/ -function is_server_error ($sc) { - return $sc >= 500 && $sc < 600; -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_parse.inc b/isis/src/docsys/assets/scripts/feed2js/magpie/rss_parse.inc deleted file mode 100644 index 4deb848c11..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_parse.inc +++ /dev/null @@ -1,613 +0,0 @@ - -* @version 0.7a (with patch for RSS enclosures at line 209) -* @license GPL -* -*/ - -define('RSS', 'RSS'); -define('ATOM', 'Atom'); - -require_once (MAGPIE_DIR . 'rss_utils.inc'); - -/** -* Hybrid parser, and object, takes RSS as a string and returns a simple object. -* -* see: rss_fetch.inc for a simpler interface with integrated caching support -* -*/ -class MagpieRSS { - var $parser; - - var $current_item = array(); // item currently being parsed - var $items = array(); // collection of parsed items - var $channel = array(); // hash of channel fields - var $textinput = array(); - var $image = array(); - var $feed_type; - var $feed_version; - var $encoding = ''; // output encoding of parsed rss - - var $_source_encoding = ''; // only set if we have to parse xml prolog - - var $ERROR = ""; - var $WARNING = ""; - - // define some constants - - var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); - var $_KNOWN_ENCODINGS = array('UTF-8', 'US-ASCII', 'ISO-8859-1'); - - // parser variables, useless if you're not a parser, treat as private - var $stack = array(); // parser stack - var $inchannel = false; - var $initem = false; - var $incontent = false; // if in Atom field - var $intextinput = false; - var $inimage = false; - var $current_namespace = false; - - - /** - * Set up XML parser, parse source, and return populated RSS object.. - * - * @param string $source string containing the RSS to be parsed - * - * NOTE: Probably a good idea to leave the encoding options alone unless - * you know what you're doing as PHP's character set support is - * a little weird. - * - * NOTE: A lot of this is unnecessary but harmless with PHP5 - * - * - * @param string $output_encoding output the parsed RSS in this character - * set defaults to ISO-8859-1 as this is PHP's - * default. - * - * NOTE: might be changed to UTF-8 in future - * versions. - * - * @param string $input_encoding the character set of the incoming RSS source. - * Leave blank and Magpie will try to figure it - * out. - * - * - * @param bool $detect_encoding if false Magpie won't attempt to detect - * source encoding. (caveat emptor) - * - */ - function MagpieRSS ($source, $output_encoding='ISO-8859-1', - $input_encoding=null, $detect_encoding=true) - { - # if PHP xml isn't compiled in, die - # - if (!function_exists('xml_parser_create')) { - $this->error( "Failed to load PHP's XML Extension. " . - "http://www.php.net/manual/en/ref.xml.php", - E_USER_ERROR ); - } - - list($parser, $source) = $this->create_parser($source, - $output_encoding, $input_encoding, $detect_encoding); - - - if (!is_resource($parser)) { - $this->error( "Failed to create an instance of PHP's XML parser. " . - "http://www.php.net/manual/en/ref.xml.php", - E_USER_ERROR ); - } - - - $this->parser = $parser; - - # pass in parser, and a reference to this object - # setup handlers - # - xml_set_object( $this->parser, $this ); - xml_set_element_handler($this->parser, - 'feed_start_element', 'feed_end_element' ); - - xml_set_character_data_handler( $this->parser, 'feed_cdata' ); - - $status = xml_parse( $this->parser, $source ); - - if (! $status ) { - $errorcode = xml_get_error_code( $this->parser ); - if ( $errorcode != XML_ERROR_NONE ) { - $xml_error = xml_error_string( $errorcode ); - $error_line = xml_get_current_line_number($this->parser); - $error_col = xml_get_current_column_number($this->parser); - $errormsg = "$xml_error at line $error_line, column $error_col"; - - $this->error( $errormsg ); - } - } - - xml_parser_free( $this->parser ); - - $this->normalize(); - } - - function feed_start_element($p, $element, &$attrs) { - $el = $element = strtolower($element); - $attrs = array_change_key_case($attrs, CASE_LOWER); - - // check for a namespace, and split if found - $ns = false; - if ( strpos( $element, ':' ) ) { - list($ns, $el) = split( ':', $element, 2); - } - if ( $ns and $ns != 'rdf' ) { - $this->current_namespace = $ns; - } - - # if feed type isn't set, then this is first element of feed - # identify feed from root element - # - if (!isset($this->feed_type) ) { - if ( $el == 'rdf' ) { - $this->feed_type = RSS; - $this->feed_version = '1.0'; - } - elseif ( $el == 'rss' ) { - $this->feed_type = RSS; - $this->feed_version = $attrs['version']; - } - elseif ( $el == 'feed' ) { - $this->feed_type = ATOM; - $this->feed_version = $attrs['version']; - $this->inchannel = true; - } - return; - } - - if ( $el == 'channel' ) - { - $this->inchannel = true; - } - elseif ($el == 'item' or $el == 'entry' ) - { - $this->initem = true; - if ( isset($attrs['rdf:about']) ) { - $this->current_item['about'] = $attrs['rdf:about']; - } - } - - // if we're in the default namespace of an RSS feed, - // record textinput or image fields - elseif ( - $this->feed_type == RSS and - $this->current_namespace == '' and - $el == 'textinput' ) - { - $this->intextinput = true; - } - - elseif ( - $this->feed_type == RSS and - $this->current_namespace == '' and - $el == 'image' ) - { - $this->inimage = true; - } - - elseif ( - $this->feed_type == RSS and - $el == 'enclosure' ) - { - $this->current_item[$el][] = $attrs; - $this->incontent = $el; - } - - # handle atom content constructs - elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) - { - // avoid clashing w/ RSS mod_content - if ($el == 'content' ) { - $el = 'atom_content'; - } - - $this->incontent = $el; - - - } - - // if inside an Atom content construct (e.g. content or summary) field treat tags as text - elseif ($this->feed_type == ATOM and $this->incontent ) - { - // if tags are inlined, then flatten - $attrs_str = join(' ', - array_map('map_attrs', - array_keys($attrs), - array_values($attrs) ) ); - - $this->append_content( "<$element $attrs_str>" ); - - array_unshift( $this->stack, $el ); - } - - // Atom support many links per containging element. - // Magpie treats link elements of type rel='alternate' - // as being equivalent to RSS's simple link element. - // - elseif ($this->feed_type == ATOM and $el == 'link' ) - { - if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) - { - $link_el = 'link'; - } - else { - $link_el = 'link_' . $attrs['rel']; - } - - $this->append($link_el, $attrs['href']); - } - // set stack[0] to current element - else { - array_unshift($this->stack, $el); - } - } - - - - function feed_cdata ($p, $text) { - if ($this->feed_type == ATOM and $this->incontent) - { - $this->append_content( $text ); - } - else { - $current_el = join('_', array_reverse($this->stack)); - $this->append($current_el, $text); - } - } - - function feed_end_element ($p, $el) { - $el = strtolower($el); - - if ( $el == 'item' or $el == 'entry' ) - { - $this->items[] = $this->current_item; - $this->current_item = array(); - $this->initem = false; - } - elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) - { - $this->intextinput = false; - } - elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) - { - $this->inimage = false; - } - elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) - { - $this->incontent = false; - } - elseif ($el == 'channel' or $el == 'feed' ) - { - $this->inchannel = false; - } - elseif ($this->feed_type == ATOM and $this->incontent ) { - // balance tags properly - // note: i don't think this is actually neccessary - if ( $this->stack[0] == $el ) - { - $this->append_content(""); - } - else { - $this->append_content("<$el />"); - } - - array_shift( $this->stack ); - } - else { - array_shift( $this->stack ); - } - - $this->current_namespace = false; - } - - function concat (&$str1, $str2="") { - if (!isset($str1) ) { - $str1=""; - } - $str1 .= $str2; - } - - - - function append_content($text) { - if ( $this->initem ) { - $this->concat( $this->current_item[ $this->incontent ], $text ); - } - elseif ( $this->inchannel ) { - $this->concat( $this->channel[ $this->incontent ], $text ); - } - } - - // smart append - field and namespace aware - function append($el, $text) { - if (!$el) { - return; - } - if ( $this->current_namespace ) - { - if ( $this->initem ) { - $this->concat( - $this->current_item[ $this->current_namespace ][ $el ], $text); - } - elseif ($this->inchannel) { - $this->concat( - $this->channel[ $this->current_namespace][ $el ], $text ); - } - elseif ($this->intextinput) { - $this->concat( - $this->textinput[ $this->current_namespace][ $el ], $text ); - } - elseif ($this->inimage) { - $this->concat( - $this->image[ $this->current_namespace ][ $el ], $text ); - } - } - else { - if ( $this->initem ) { - $this->concat( - $this->current_item[ $el ], $text); - } - elseif ($this->intextinput) { - $this->concat( - $this->textinput[ $el ], $text ); - } - elseif ($this->inimage) { - $this->concat( - $this->image[ $el ], $text ); - } - elseif ($this->inchannel) { - $this->concat( - $this->channel[ $el ], $text ); - } - - } - } - - function normalize () { - // if atom populate rss fields - if ( $this->is_atom() ) { - $this->channel['description'] = $this->channel['tagline']; - for ( $i = 0; $i < count($this->items); $i++) { - $item = $this->items[$i]; - if ( isset($item['summary']) ) - $item['description'] = $item['summary']; - if ( isset($item['atom_content'])) - $item['content']['encoded'] = $item['atom_content']; - - $atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified']; - if ( $atom_date ) { - $epoch = @parse_w3cdtf($atom_date); - if ($epoch and $epoch > 0) { - $item['date_timestamp'] = $epoch; - } - } - - $this->items[$i] = $item; - } - } - elseif ( $this->is_rss() ) { - $this->channel['tagline'] = $this->channel['description']; - for ( $i = 0; $i < count($this->items); $i++) { - $item = $this->items[$i]; - if ( isset($item['description'])) - $item['summary'] = $item['description']; - if ( isset($item['content']['encoded'] ) ) - $item['atom_content'] = $item['content']['encoded']; - - if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) { - $epoch = @parse_w3cdtf($item['dc']['date']); - if ($epoch and $epoch > 0) { - $item['date_timestamp'] = $epoch; - } - } - elseif ( isset($item['pubdate']) ) { - $epoch = @strtotime($item['pubdate']); - if ($epoch > 0) { - $item['date_timestamp'] = $epoch; - } - } - - $this->items[$i] = $item; - } - } - } - - - function is_rss () { - if ( $this->feed_type == RSS ) { - return $this->feed_version; - } - else { - return false; - } - } - - function is_atom() { - if ( $this->feed_type == ATOM ) { - return $this->feed_version; - } - else { - return false; - } - } - - /** - * return XML parser, and possibly re-encoded source - * - */ - function create_parser($source, $out_enc, $in_enc, $detect) { - if ( substr(phpversion(),0,1) == 5) { - $parser = $this->php5_create_parser($in_enc, $detect); - } - else { - list($parser, $source) = $this->php4_create_parser($source, $in_enc, $detect); - } - if ($out_enc) { - $this->encoding = $out_enc; - xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc); - } - - return array($parser, $source); - } - - /** - * Instantiate an XML parser under PHP5 - * - * PHP5 will do a fine job of detecting input encoding - * if passed an empty string as the encoding. - * - * All hail libxml2! - * - */ - function php5_create_parser($in_enc, $detect) { - // by default php5 does a fine job of detecting input encodings - if(!$detect && $in_enc) { - return xml_parser_create($in_enc); - } - else { - return xml_parser_create(''); - } - } - - /** - * Instaniate an XML parser under PHP4 - * - * Unfortunately PHP4's support for character encodings - * and especially XML and character encodings sucks. As - * long as the documents you parse only contain characters - * from the ISO-8859-1 character set (a superset of ASCII, - * and a subset of UTF-8) you're fine. However once you - * step out of that comfy little world things get mad, bad, - * and dangerous to know. - * - * The following code is based on SJM's work with FoF - * @see http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss - * - */ - function php4_create_parser($source, $in_enc, $detect) { - if ( !$detect ) { - return array(xml_parser_create($in_enc), $source); - } - - if (!$in_enc) { - if (preg_match('//m', $source, $m)) { - $in_enc = strtoupper($m[1]); - $this->source_encoding = $in_enc; - } - else { - $in_enc = 'UTF-8'; - } - } - - if ($this->known_encoding($in_enc)) { - return array(xml_parser_create($in_enc), $source); - } - - // the dectected encoding is not one of the simple encodings PHP knows - - // attempt to use the iconv extension to - // cast the XML to a known encoding - // @see http://php.net/iconv - - if (function_exists('iconv')) { - $encoded_source = iconv($in_enc,'UTF-8', $source); - if ($encoded_source) { - return array(xml_parser_create('UTF-8'), $encoded_source); - } - } - - // iconv didn't work, try mb_convert_encoding - // @see http://php.net/mbstring - if(function_exists('mb_convert_encoding')) { - $encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc ); - if ($encoded_source) { - return array(xml_parser_create('UTF-8'), $encoded_source); - } - } - - // else - $this->error("Feed is in an unsupported character encoding. ($in_enc) " . - "You may see strange artifacts, and mangled characters.", - E_USER_NOTICE); - - return array(xml_parser_create(), $source); - } - - function known_encoding($enc) { - $enc = strtoupper($enc); - if ( in_array($enc, $this->_KNOWN_ENCODINGS) ) { - return $enc; - } - else { - return false; - } - } - - function error ($errormsg, $lvl=E_USER_WARNING) { - // append PHP's error message if track_errors enabled - if ( isset($php_errormsg) ) { - $errormsg .= " ($php_errormsg)"; - } - if ( MAGPIE_DEBUG ) { - trigger_error( $errormsg, $lvl); - } - else { - error_log( $errormsg, 0); - } - - $notices = E_USER_NOTICE|E_NOTICE; - if ( $lvl&$notices ) { - $this->WARNING = $errormsg; - } else { - $this->ERROR = $errormsg; - } - } - - -} // end class RSS - -function map_attrs($k, $v) { - return "$k=\"$v\""; -} - -// patch to support medieval versions of PHP4.1.x, -// courtesy, Ryan Currie, ryan@digibliss.com - -if (!function_exists('array_change_key_case')) { - define("CASE_UPPER",1); - define("CASE_LOWER",0); - - - function array_change_key_case($array,$case=CASE_LOWER) { - if ($case=CASE_LOWER) $cmd=strtolower; - elseif ($case=CASE_UPPER) $cmd=strtoupper; - foreach($array as $key=>$value) { - $output[$cmd($key)]=$value; - } - return $output; - } - -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_utils.inc b/isis/src/docsys/assets/scripts/feed2js/magpie/rss_utils.inc deleted file mode 100644 index 2a29e72a96..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie/rss_utils.inc +++ /dev/null @@ -1,67 +0,0 @@ - - * Version: 0.51 - * License: GPL - * - * The lastest version of MagpieRSS can be obtained from: - * http://magpierss.sourceforge.net - * - * For questions, help, comments, discussion, etc., please join the - * Magpie mailing list: - * magpierss-general@lists.sourceforge.net - */ - - -/*======================================================================*\ - Function: parse_w3cdtf - Purpose: parse a W3CDTF date into unix epoch - - NOTE: http://www.w3.org/TR/NOTE-datetime -\*======================================================================*/ - -function parse_w3cdtf ( $date_str ) { - - # regex to match wc3dtf - $pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/"; - - if ( preg_match( $pat, $date_str, $match ) ) { - list( $year, $month, $day, $hours, $minutes, $seconds) = - array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]); - - # calc epoch for current date assuming GMT - $epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); - - $offset = 0; - if ( $match[10] == 'Z' ) { - # zulu time, aka GMT - } - else { - list( $tz_mod, $tz_hour, $tz_min ) = - array( $match[8], $match[9], $match[10]); - - # zero out the variables - if ( ! $tz_hour ) { $tz_hour = 0; } - if ( ! $tz_min ) { $tz_min = 0; } - - $offset_secs = (($tz_hour*60)+$tz_min)*60; - - # is timezone ahead of GMT? then subtract offset - # - if ( $tz_mod == '+' ) { - $offset_secs = $offset_secs * -1; - } - - $offset = $offset_secs; - } - $epoch = $epoch + $offset; - return $epoch; - } - else { - return -1; - } -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie_debug.php b/isis/src/docsys/assets/scripts/feed2js/magpie_debug.php deleted file mode 100644 index 3e8e0e010e..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie_debug.php +++ /dev/null @@ -1,87 +0,0 @@ -Example Output"; - echo "Channel: " . $rss->channel['title'] . "

"; - echo "

"; -} -else { - echo "Error: " . magpie_error(); -} -?> - -
- RSS URL:
- -
- -

Parsed Results (var_dump'ed)

-
-
-
- -Error:
PHP compiled without XML support (--with-xml), Magpie won't work without PHP support for XML.
\n"; - exit; - } - else { - echo "OK: Found an XML parser.
\n"; - } - - if ( ! function_exists('gzinflate') ) { - echo "Warning: PHP compiled without Zlib support (--with-zlib). No support for GZIP encoding.
\n"; - } - else { - echo "OK: Support for GZIP encoding.
\n"; - } - - if ( ! (function_exists('iconv') and function_exists('mb_convert_encoding') ) ) { - echo "Warning: No support for iconv (--with-iconv) or multi-byte strings (--enable-mbstring)." . - "No support character set munging.
\n"; - } - else { - echo "OK: Support for character munging.
\n"; - } -} - -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/magpie_simple.php b/isis/src/docsys/assets/scripts/feed2js/magpie_simple.php deleted file mode 100644 index ae84b5e174..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/magpie_simple.php +++ /dev/null @@ -1,28 +0,0 @@ -channel['title'] . "

"; - echo "

    "; - foreach ($rss->items as $item) { - $href = $item['link']; - $title = $item['title']; - echo "
  • $title
  • "; - } - echo "
"; -} -?> - -
- RSS URL:
- -
- -

-

Security Note:

-This is a simple example script. If this was a real script we probably wouldn't allow strangers to submit random URLs, and we certainly wouldn't simply echo anything passed in the URL. Additionally its a bad idea to leave this example script lying around. -

\ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/feed2js/nosource.php b/isis/src/docsys/assets/scripts/feed2js/nosource.php deleted file mode 100644 index 0e70486ecf..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/nosource.php +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - No XML Source - - - -
-

XML error

-

There is an error in the requested URL as no xml source was provided. A correct request should look like:

- - -

-<script type="text/javascript" language="Javascript"
src="feed2js.php?src=http://www.somesite.com/myfeed.xml"> -</script> -

- -

You should check your source code!

- -
- - diff --git a/isis/src/docsys/assets/scripts/feed2js/popup.js b/isis/src/docsys/assets/scripts/feed2js/popup.js deleted file mode 100644 index dd20b0c4b1..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/popup.js +++ /dev/null @@ -1,17 +0,0 @@ -function popupfeed(url) { -/* - Use this function to generate a pop up window for item links generated - by the Feed2JS service. The name of this function must exactly be - popupfeed - - and you can use the code below to specify specific window features - See http://jade.mcli.dist.maricopa.edu/feed/index.php?s=mod -*/ - - // string to specify window features - - var myfeatures = "toolbar=no,location=no,directories=no,menubar=no,scrollbars=yes,status=yes,resizable=no,width=800,height=400"; - - thefeed = window.open( url, 'feed2jspop', myfeatures); - if (window.focus) {thefeed.focus()} -} diff --git a/isis/src/docsys/assets/scripts/feed2js/preview.php b/isis/src/docsys/assets/scripts/feed2js/preview.php deleted file mode 100644 index c97123b71f..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/preview.php +++ /dev/null @@ -1,92 +0,0 @@ -')) { - $src = preg_replace("/(\)/si", "SCRIPT DELETED", "$src"); - die("Warning! Attempt to inject javascript detected. Aborted and tracking log updated."); -} - -// update to full descriptions for html turned on -if ($html=='a') $desc = 0; - -// build parameter string for the feed2js url -$options = ''; -if ($chan != 'n') $options .= "&chan=$chan"; -if ($num != 0) $options .= "&num=$num"; -if ($desc != 0) $options .= "&desc=$desc"; -if ($date != 'n') $options .= "&date=$date"; -if ($tz != 'feed') $options .= "&tz=$tz"; -if ($targ != 'n') $options .= "&targ=$targ"; -if ($html != 'n') $html_options = "&html=$html"; -if ($utf == 'y') $options .= '&utf=y'; -if ($rss_box_id != '') $options .= "&css=$rss_box_id"; -if ($pc == 'y') $options .= '&pc=y'; - - -$rss_str = "feed2js.php?src=" . urlencode($src) . $options . $html_options; - -$noscript_rss_str = "feed2js.php?src=" . urlencode($src) . $options . '&html=y'; -?> - - - - - '; - } else { - echo ''; - } - ?> - Feed Sneak Preview - - - - - - - - - -
-

Look At Your Feed

-

Below is a preview of your feed using a basic style (learn how to customize this via the Feed2JS style pages). If this looks like the correct content and display, close this window and use the Generate JavaScript button to create your own web page code.

- - - - -
-
- - -
-
- -
- - - diff --git a/isis/src/docsys/assets/scripts/feed2js/readme.pdf b/isis/src/docsys/assets/scripts/feed2js/readme.pdf deleted file mode 100644 index a1a28d31cbcb86d69511a1208c3aec1725a94070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77886 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 - - - - - Stylize Your JavaScript RSS Feed - - - - -
- -

Feed2JS: Style a Feed

-

Once you have built the code for your Feed2JS, you can see how the output of RSS content generated by Feed2JS can be customized by applying different style sheets. Each part of the feed has an identifier, allowing you to add styles to the box containing the feeds, the title, the item display, and the date posting text. A few sample styles are provided here; for more see the Feed2JS Style Center. -

- -
-

Try on a Style Sheet

-

URL Enter the web address for the RSS Feed to "stylize"; if you do not have one handy, you can use the one below from CogDogBlog.
-

- -

Style Selector
-These are but a few style varieties to sample- you are invited to modify or create your own. If you have a snazzy, prettier version, please send it our way. For a blank slate, select the "none/template" style.
- - -

- -
- -

Using a Style Sheet

-

You will need to incorporate the CSS code or linkage in your own HTML files; there are two ways you can do this:

- -
    -
  1. Insert the CSS directly into the HTML for the page that will display the feed. This methods is best for sites that only are displaying the feed on one or a few pages. Use the form below to find the style you desire, copy the CSS, and paste it somewhere into the <HEAD>...</HEAD> of your HTML file that contains the Feed2JS code, surrounded by the <style>...</style> tags shown below. -
    <style type="text/css"  media="all">
    -
    -<!--  this is where you paste the CSS provided by the form below -->
    -
    -</style>
  2. - -
  3. Link to an external style sheet. This method is best if you will be using the feeds on multiple pages, as the CSS is stored externally, and thus allows you to change the output display of many pages by editing a single file. Just copy the CSS provided by the form below, and paste it into a new text file. Save it as something called "myfeed.css". Think smart about where you decided to store this file, as other HTML pages that call it need to define a correct path to the file. Many web sites just create a top level directory named style and store all style sheet files in this directory.

    -Regardless, to connect the HTML file that contains the Feed2JS code to an external style sheet, insert this line into the <HEAD>...</HEAD> of your HTML. -
    -<link rel="stylesheet" href="style/myfeed.css" media="all">
    -
    -Remember again that the value of href= must be a correct relative path (or a full valid URL such as http://www.blah.com/style/myfeed.css) from the HTML file to the CSS file.
  4. -
- -

CSS classes

- -

This sketch represents the CSS classes created by Feed2JS.

-
    -
  • rss-box defines the bounding div for the entire display- use to define borders, fill, etc.
  • -
  • rss-title the title of the feed and link style if displayed. Use with variants of rss-title a:link, rss-title a:hover, etc for rollowver styles
  • -
  • rss-items defines the unordered list <ul>...</ul> for the feed items- use to define the padding/margins for items.
  • -
  • rss-item display of each feed item description and title, <li>...</li> as well as the channel description, if displayed.
  • -
  • rss-item a: variant for the item title and link style
  • -
  • rss-date defines the display of item posting dates
  • -
- -

For any RSS 2.0 feeds with podcast enclosures, Feed2JS will provide a Play XXX link, where "XXX" is the extension of the media file, e.g. "mp3", "m4a", etc. The styles applied are modeled after Well Styled's Inline Buttons method. -

-<div class="pod-play-box">
-<a class="pod-play" href="podcastURL"><em>Play</em><span> File</span></a>
-</div>
-
- - - -

Custom colors may be achieved by editing appropriate foreground and background colors from the base styles (emphasized below):

-
-.pod-play {
-   _width:12em;
-   margin: 0 0.2em; padding: 0.1em 0; _padding:0;
-   
-   white-space:nowrap;
-   text-decoration: none;
-   vertical-align:middle;
-   background: #fb6;
-   color: black;
-   }
-.pod-play em {
-   _width:1em; _cursor:hand;
-   font-style: normal;
-   margin:0; padding: 0.1em 0.5em;
-   background: white;
-   color: #222;  
-   }
-.pod-play span {
-   _width:1em; _cursor:hand;
-   margin:0; padding: 0.1em 0.5em 0.1em 0.3em;
-   }
-.pod-play:hover {
-   background: #666;
-   color: white;  
-   }
-.pod-play:hover em {
-   background: black;
-   color: white  
-   }
-
- - -
- -

Advanced: Two Styles in One Page

-

If you have more than one feed displayed per page, you can assign different styles to each display. You will need a solid understanding of CSS and inheritance to get this to work!.

- -

By supplying a value for CSS Custom Class in the build form you can now create different top level classes. The value passed will create a CSS class named rss-box-XXXX where XXXX is this value. This implies that you may have to define more specific classes for the other classes listed above, or use the top level rss-box-XXXX classes to say define a different background color.

- -

See two examples:

-
    -
  • Two Completely Different Styles. The second style has a value of css=spirit, so all CSS elements are defined to be a descendant of this class.
  • - -
  • Two Similar Styles. In this case, the only difference is the background color, which can be specified in the rss_box_w and rss_box_g classes.
  • -
- - -
- - - - - diff --git a/isis/src/docsys/assets/scripts/feed2js/style/.css b/isis/src/docsys/assets/scripts/feed2js/style/.css deleted file mode 100644 index 78d6e436fd..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/.css +++ /dev/null @@ -1,103 +0,0 @@ -/* begin styles for RSS Feed */ - - - -.rss_box { - - margin: 1em; - - width: 300px; - - background-color: #99CCFF; - - border: 1px solid ##5F74CC; - - - -} - -.rss_items { - - margin-top:0px; - - padding:0.5em; 0.5em; - - margin-left:0px; - - color:##0099ff; - -} - -p.rss_title {padding:0.5em;} - -.rss_title { - - text-decoration: none; - - font-family: verdana, sans-serif; - - font-size: 85%; - - background-color:#330066; - - color:#ffffff; - - font-weight:bold; - - margin: 0px; - - padding:0em; - - text-align: left; - -} - - - -.rss_item { - - font-family: verdana, arial, sans-serif; - - font-size: 0.75em; - - font-weight : normal; - - list-style:none; - - padding-bottom:1em; - -} - - - -.rss_item a { - - color:blue; - - font-size: 105%; - - font-weight:bold; - - font-family:arial, sans-serif; - - } - - - -.rss_item a:visited { - - color:#330066; - -} - - - -.rss_date { - - font-size: 85%; - - font-weight : normal; - - color: #F60; - - } \ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/feed2js/style/basic1.css b/isis/src/docsys/assets/scripts/feed2js/style/basic1.css deleted file mode 100644 index 8765b8c483..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/basic1.css +++ /dev/null @@ -1,80 +0,0 @@ -/* begin styles for RSS Feed */ - -.rss-box { - margin: 10px 5%; - padding: 4px 8px; - - background-color: #ededed; - border: 2px dashed #7485CA; -} - -.rss-title, rss-title a { - font-family: "American Typewriter", "Trebuchet MS", Trebuchet, Lucida, sans-serif; - font-size: 18px; - font-weight:bold; - margin: 5px 0; - padding: 0; - letter-spacing: 1px; -} - -.rss-items { - -} - -.rss-item { - font-family: verdana, arial, sans-serif; - font-size: 13px; - font-weight : bold; - margin: 8px 0; -} - -.rss-item a:link, .rss-item a:visited, .rss-item a:active { - text-decoration : none; - border-bottom: 1px solid #ededed; - color: #88b; - } - -.rss-item a:hover { - text-decoration : none; - color: #e0861e; - border-bottom: 1px dotted #e0861e; - } - -.rss-date { - font-size: 11px; - font-weight : normal; - color: #F60; - } - -/* buttons modeled from http://www.wellstyled.com/css-inline-buttons.html */ - -.pod-play { - _width:12em; - margin: 0 0.2em; padding: 0.1em 0; _padding:0; - - white-space:nowrap; - text-decoration: none; - vertical-align:middle; - background: #fb6; - color: black; - } -.pod-play em { - _width:1em; _cursor:hand; - font-style: normal; - margin:0; padding: 0.1em 0.5em; - background: white; - color: #222; - } -.pod-play span { - _width:1em; _cursor:hand; - margin:0; padding: 0.1em 0.5em 0.1em 0.3em; - } -.pod-play:hover { - background: #666; - color: white; - } -.pod-play:hover em { - background: black; - color: white - } - diff --git a/isis/src/docsys/assets/scripts/feed2js/style/bbc_style.css b/isis/src/docsys/assets/scripts/feed2js/style/bbc_style.css deleted file mode 100644 index 9a55b6f313..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/bbc_style.css +++ /dev/null @@ -1 +0,0 @@ -/* begin styles for RSS Feed */ .rss-box { margin: 0.5em; width: 200px; background-color: #FFFFCC; border: 7px solid #990000; } .rss-items { margin-top:0px; padding:0.5em; 0.5em; margin-left:0px; color: #FFFFFF; } p.rss-title {padding:0.5em;} .rss-title { text-decoration: none; font-family: small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; font-size: 15px; background-color:#990000; color:white; font-weight:bold; margin: 0px; padding:0em; text-align: left; } .rss-item { font-family: small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; font-size: 10px; font-weight : normal; list-style:none; padding-bottom:1em; } .rss-item a { text-decoration : none; color: #330066; font-size: 12px; font-weight:light; font-family:small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; } .rss-item a:visited { color:white; } .rss-date { font-size: 85%; font-weight : normal; color: #fff; } /* buttons modeled from http://www.wellstyled.com/css-inline-buttons.html */ .pod-play { _width:12em; margin: 0 0.2em; padding: 0.1em 0; _padding:0; white-space:nowrap; text-decoration: none; vertical-align:middle; background: #fb6; color: black; } .pod-play em { _width:1em; _cursor:hand; font-style: normal; margin:0; padding: 0.1em 0.5em; background: white; color: #222; } .pod-play span { _width:1em; _cursor:hand; margin:0; padding: 0.1em 0.5em 0.1em 0.3em; } .pod-play:hover { background: #666; color: white; } .pod-play:hover em { background: black; color: white } \ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/feed2js/style/blackbox.css b/isis/src/docsys/assets/scripts/feed2js/style/blackbox.css deleted file mode 100644 index dc56eea9fe..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/blackbox.css +++ /dev/null @@ -1 +0,0 @@ -/* begin styles for RSS Feed */ .rss-box { margin: 1em; width: 200px; background-color: #000000; border: 1px dashed #240; } .rss-items { margin-top:0px; padding:0.5em; 0.5em; margin-left:0px; color:#FFFFFF; } p.rss-title {padding:0.5em;} .rss-title { text-decoration: none; font-family: small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; font-size: 12px; background-color:#000; color:#fff; font-weight:bold; margin: 0px; padding:0em; text-align: left; } .rss-item { font-family: small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; font-size: 12px; font-weight : normal; list-style:none; padding-bottom:1em; } .rss-item a { text-decoration : none; color: white; font-size: 12px; font-weight:light; font-family:small tahoma, "Bitstream Vera Sans", "Trebuchet MS", "Lucida Grande", lucida, helvetica, sans-serif; } .rss-item a:visited { color:white; } .rss-date { font-size: 85%; font-weight : normal; color: #fff; } /* buttons modeled from http://www.wellstyled.com/css-inline-buttons.html */ .pod-play { _width:12em; margin: 0 0.2em; padding: 0.1em 0; _padding:0; white-space:nowrap; text-decoration: none; vertical-align:middle; background: #fb6; color: black; } .pod-play em { _width:1em; _cursor:hand; font-style: normal; margin:0; padding: 0.1em 0.5em; background: white; color: #222; } .pod-play span { _width:1em; _cursor:hand; margin:0; padding: 0.1em 0.5em 0.1em 0.3em; } .pod-play:hover { background: #666; color: white; } .pod-play:hover em { background: black; color: white } \ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/feed2js/style/css_classes.gif b/isis/src/docsys/assets/scripts/feed2js/style/css_classes.gif deleted file mode 100644 index 02298dd1ec136702ec732d5ef5a1df7add8075d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5838 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 diff --git a/isis/src/docsys/assets/scripts/feed2js/style/dog.css b/isis/src/docsys/assets/scripts/feed2js/style/dog.css deleted file mode 100644 index de7ac552da..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/dog.css +++ /dev/null @@ -1,86 +0,0 @@ -/* begin styles for RSS Feed */ - -.rss-box { - width: 500px; - background:#fff url(dog.jpg) bottom left no-repeat; - padding: 5px 10px 5px 120px; - border-left: 8px solid #111; - border-top: 8px solid #111; -} - -.rss-title, .rss-title a:link -{ - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 44px; - font-weight: bold; - text-decoration:none; - margin: 5px 0; - padding: 0; - text-align:right; - -} - -.rss-title a:visited, .rss-title a:active { - color: #922; -} - -rss-title a:hover { -text-decoration:underline; -} - -.rss-items { - -} - -.rss-item { - font-family: Arial, Verdana, sans-serif; - font-size: 14px; - margin-bottom: 1em -} - -.rss-item a:link, .rss-item a:visited, .rss-item a:active { - text-decoration : none; - color: #26590D; - } - -.rss-item a:hover { - text-decoration : underline; - color: #F66025; - } - -.rss-date { - font-size: 11px; - font-weight : normal; - color: #338; - } -/* buttons modeled from http://www.wellstyled.com/css-inline-buttons.html */ - -.pod-play { - _width:12em; - margin: 0 0.2em; padding: 0.1em 0; _padding:0; - - white-space:nowrap; - text-decoration: none; - vertical-align:middle; - background: #fb6; - color: black; - } -.pod-play em { - _width:1em; _cursor:hand; - font-style: normal; - margin:0; padding: 0.1em 0.5em; - background: white; - color: #222; - } -.pod-play span { - _width:1em; _cursor:hand; - margin:0; padding: 0.1em 0.5em 0.1em 0.3em; - } -.pod-play:hover { - background: #666; - color: white; - } -.pod-play:hover em { - background: black; - color: white - } diff --git a/isis/src/docsys/assets/scripts/feed2js/style/dog.jpg b/isis/src/docsys/assets/scripts/feed2js/style/dog.jpg deleted file mode 100644 index e0c5ccbc85d520eef9545799abe69fbeca1c0ed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4021 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 title -$mystyles = array( - 'basic1'=> 'Basic Blue', - 'bbc_style' => 'BBC', - 'blackbox' => 'Blackbox', - 'dog' => 'Dog\'s Eye View', - 'essc' => 'ESSC', - 'greenbars' => 'Green Bars', - 'kp' => 'KP', - 'marooned2' => 'Marooned', - 'none' => 'No Style / Blank Template', - 'nobullets' => 'No Bullets', - 'outlive' => 'OutlivE', - 'plum' => 'Plum', - 'princessthing' => 'Princess', - 'sekodeng' => 'Sekodeng', - 'zanestate' => 'Zanestate Yahoo', - ); -?> diff --git a/isis/src/docsys/assets/scripts/feed2js/style/zanestate.css b/isis/src/docsys/assets/scripts/feed2js/style/zanestate.css deleted file mode 100644 index 90c71bf2f1..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style/zanestate.css +++ /dev/null @@ -1,85 +0,0 @@ -/* begin styles for RSS Feed */ - -.rss-box { - margin: 1em; - width: 250px; - background-color: #F1F1FD; - border: 1px solid #9B72CF; - -} -.rss-items { - margin-top:0px; - padding:0.5em; 0.5em; - margin-left:0px; - color:#000000; -} -p.rss-title {padding:0.5em;} -.rss-title { - text-decoration: none; - font-family: verdana, sans-serif; - font-size: 85%; - background-color:#9B72CF; - color:#ffffff; - font-weight:bold; - margin: 0px; - padding:0em; - text-align: left; -} - -.rss-item { - font-family: verdana, arial, sans-serif; - font-size: 0.75em; - font-weight : normal; - list-style:none; - padding-bottom:1em; -} - -.rss-item a { - text-decoration : underline; - color:blue; - font-size: 105%; - font-weight:bold; - font-family:arial, sans-serif; - } - -.rss-item a:visited { - color:purple; -} - -.rss-date { - font-size: 85%; - font-weight : normal; - color: #F60; - } - -/* buttons modeled from http://www.wellstyled.com/css-inline-buttons.html */ - -.pod-play { - _width:12em; - margin: 0 0.2em; padding: 0.1em 0; _padding:0; - - white-space:nowrap; - text-decoration: none; - vertical-align:middle; - background: #fb6; - color: black; - } -.pod-play em { - _width:1em; _cursor:hand; - font-style: normal; - margin:0; padding: 0.1em 0.5em; - background: white; - color: #222; - } -.pod-play span { - _width:1em; _cursor:hand; - margin:0; padding: 0.1em 0.5em 0.1em 0.3em; - } -.pod-play:hover { - background: #666; - color: white; - } -.pod-play:hover em { - background: black; - color: white - } diff --git a/isis/src/docsys/assets/scripts/feed2js/style_preview.php b/isis/src/docsys/assets/scripts/feed2js/style_preview.php deleted file mode 100644 index 30e3f35828..0000000000 --- a/isis/src/docsys/assets/scripts/feed2js/style_preview.php +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - Styled Feed - - - \n" . stripslashes($new_css) . "\n\n"; - } else { - echo ''; - } - ?> - - - - - - - -
-

Style Preview!

- -

Here is a preview of the style sheet applied to the RSS Feed . The URL to generate this view is: -

- -
- - - - -

CSS Applied

-

Below is the CSS applied here, yours for copy and pasting pleasure. See below for a description of the classes provided and refer to the Feed2JS style selection site for more details on where to use this code.

- -

You may also use the form below to modify the CSS to experiment with your own variants.

- -
- - - -

Make changes and -or

- -
- -

CSS classes

- -

This sketch represents the CSS classes created by Feed2JS.

-
    -
  • rss-box defines the bounding div for the entire display- use to define borders, fill, etc.
  • -
  • rss-title the title of the feed and link style if displayed. Use with variants of rss-title a:link, rss-title a:hover, etc for rollover styles
  • -
  • rss-items defines the unordered list <ul>...</ul> for the feed items- use to define the padding/margins for items.
  • -
  • rss-item display of each feed item description and title, <li>...</li> as well as the channel description, if displayed.
  • -
  • rss-item a: variant for the item title and link style
  • -
  • rss-date defines the display of item posting dates
  • -
- -
- -
- - diff --git a/isis/src/docsys/assets/scripts/footer.js b/isis/src/docsys/assets/scripts/footer.js deleted file mode 100644 index 1e3e391b8c..0000000000 --- a/isis/src/docsys/assets/scripts/footer.js +++ /dev/null @@ -1,46 +0,0 @@ - // FOOTER - // FILENAME: footer.js - // - // Purpose: write standard footer - // - // Author: Deborah Lee Soltesz, USGS, 10/2001 - - - document.write("
"); - document.write(" "); - document.write(" "); - document.write(" "); - document.write("
"); - document.write(" "); - document.write(" "); - document.write(" U.S. Department of the Interior | "); - document.write(" "); - document.write(" "); - document.write(" U.S. Geological Survey "); - document.write(" "); - document.write("
"); - document.write(" "); - document.write(" "); - document.write(" "); - document.write(" ISIS | "); - document.write(" "); - document.write(" Privacy & Disclaimers | "); - document.write(" "); - document.write(" Astrogeology Research Program "); - document.write(" "); - document.write(" "); - document.write("
"); - document.write(" "); - document.write(" To contact us, please post comments and questions on the "); - document.write(" "); - document.write(" USGS Astrogeology Discussion Board "); - document.write("
") - document.write(" To report a bug, or suggest a feature go to: ISIS Github"); - document.write("
"); - document.write(" "); - document.write("
"); - document.write(" "); - document.write(" "); - document.write("
"); diff --git a/isis/src/docsys/assets/scripts/homepage.js b/isis/src/docsys/assets/scripts/homepage.js deleted file mode 100644 index 535edb4acf..0000000000 --- a/isis/src/docsys/assets/scripts/homepage.js +++ /dev/null @@ -1,65 +0,0 @@ -/*********************************** - * Script: homepage.js - * Purpose: write little HTML snippets on Isis homepage, - * avoiding XML/XSLT weirdness - * Author: Deborah Lee Soltesz - * Date: 2006-11-13 - * - ***********************************/ - -function writeAnnouncements() { - /* This code, which pulls posts from the support board, is not currently - * working. I have left it here as a reference, or in case we decide to fix it - * to work with our current version of the support board. - * - isWeb = (document.URL.lastIndexOf("isis.astrogeology.usgs.gov") > 0) || - (document.URL.lastIndexOf("isis-dev.wr.usgs.gov") > 0) || - (document.URL.lastIndexOf("blackflag") > 0) ; - if (isWeb) { - document.write ( - "
" ); - } else { - document.write ( "Visit the ISIS Support Center for the latest news and announcements.") ; - } - if (isWeb) { - document.write ( - "

" + - " " + - " More..." + - "

" ) ; - } - */ - document.write("Visit the Astro Discussion Board for the latest news and announcements."); -} - -function writeWhatsUpAtTheSupportCenter () { - /* - * Again, this code is not working with our support board. - * - isWeb = (document.URL.lastIndexOf("isis.astrogeology.usgs.gov") > 0) || - (document.URL.lastIndexOf("isis-dev.wr.usgs.gov") > 0) || - (document.URL.lastIndexOf("blackflag") > 0) ; - if (isWeb) { - document.write ( - " " + - "

What's Up at the ISIS Support Center?

" + - "
" + - "
" - ); - } - if (isWeb) { - document.write ( - "" ); - } - if (isWeb) { - document.write ( - "

" + - " " + - " More... " + - "

" + - "
" + - "
" - ); - } - */ -} diff --git a/isis/src/docsys/assets/scripts/navigationBar.js b/isis/src/docsys/assets/scripts/navigationBar.js deleted file mode 100644 index ecfe384fd1..0000000000 --- a/isis/src/docsys/assets/scripts/navigationBar.js +++ /dev/null @@ -1,272 +0,0 @@ - - // SCRIPT: Navigation Bar - // Filename: navigationBar.js - // Purpose: behavior for the horizontal navigation bar - // Author: Deborah Lee Soltesz, USGS, 10/2001 - // History: 12/2005 dls implemented writing of navbar in this script - // to allow changing the menu in one place for - // the entire site - - - - navWidth = 600 ; - navHeight = 19 ; - navSubImgName = "bsubtopics" ; - - site = "http://astrogeology.usgs.gov" ; - - // array indices - navFilenameCool = 0 ; - navFilenameHot = 1 ; - navImgName = 2 ; - navSubFilename = 3 ; - navMap = 4 ; - - imageNumChoice = 0 ; // current image highlighted - - defaultBar = 0 ; // the bar to be displayed when none is highlighted - - // customize: edit path - navBaseURL = "/assets/navigation/menubar/" ; - - // customize: name of blank submenu bars - navSubBlank = "blank_menu_bar.gif" ; - navSubBase = "starfield_menu_bar.gif" ; - - Timeout = 5000 ; - TimeoutID = 0 ; - - // customize: list images to be used in the script - navArr = new Array ( - new Array ("", "", ""), // no 0 - new Array ("solarsystem_menu_button.gif", "solarsystem_menu_button_hot.gif", "bsolarsystem", "solarsystem_menu_bar.gif" , "SolarSystemMap"), - new Array ("missions_menu_button.gif", "missions_menu_button_hot.gif", "bmissions" , "missions_menu_bar.gif" , "MissionsMap" ), - new Array ("technology_menu_button.gif", "technology_menu_button_hot.gif", "btechnology" , "technology_menu_bar.gif" , "TechnologyMap" ), - new Array ("datainfo_menu_button.gif", "datainfo_menu_button_hot.gif", "bdatainfo" , "datainfo_menu_bar.gif" , "DataAndInformationMap"), - new Array ("research_menu_button.gif", "research_menu_button_hot.gif", "bresearch" , "research_menu_bar.gif" , ""), - new Array ("hottopics_menu_button.gif", "hottopics_menu_button_hot.gif", "bhottopics" , navSubBlank , ""), - new Array ("gallery_menu_button.gif", "gallery_menu_button_hot.gif", "bgallery" , "gallery_menu_bar.gif" , ""), - new Array ("about_menu_button.gif", "about_menu_button_hot.gif", "babout" , "about_menu_bar.gif" , ""), - new Array ("search_menu_button.gif", "search_menu_button_hot.gif", "bsearch" , navSubBlank , ""), - new Array ("kidszone_menu_button.gif", "kidszone_menu_button_hot.gif", "bkids" , navSubBlank , "") - ) ; - numNavImages = navArr.length ; - - // preloading images needs to be looked into -- it seems to clear up - // some problems in Netscape4.7, but there's still a lag on changing - // images on mouseover the first time in all browsers, suggesting the - // preload may not be working? - preloadImage = new Array (numNavImages) ; - preloadImageSub = new Array (numNavImages) ; - for (loop = 1 ; loop < numNavImages ; loop++) { - preloadImage[loop] = new Image () ; - preloadImageSub[loop] = new Image () ; - preloadImage[loop].src = site + navBaseURL + navArr [loop][navFilenameHot] ; - preloadImageSub[loop].src = site + navBaseURL + navArr [loop][navSubFilename] ; - } - - // customize: list links for altering submenu image map - // Up to 12 links, array corresponds to same order above - // First element is path to subtopics - navLinkArr = new Array ( - new Array ("", "/", "/", "/", "/", "/", "/", "/", "/", "/", "/", "/", "/"), // no 0 - new Array ("/SolarSystem/", "Sun/", "Mercury/", "Venus/", "Earth/", "Mars/", "Jupiter/", "Saturn/", "Uranus/", "Neptune/", "Pluto/", "OtherObjects/", "Beyond/"), - new Array ("/Missions/", "Cassini/", "Clementine/", "Galileo/", "LunarOrbiter/", "LunarOrbiter/", "Magellan/", "Mariner/", "MarsPathfinder/", "MarsGlobalSurveyor/", "Viking/", "Voyager/", "More/"), - new Array ("/Technology/", "Software/", "Software/", "ImageProcessing/", "ImageProcessing/", "LabsAndFacilities/", "LabsAndFacilities/", "OtherTechnology/", "OtherTechnology/", "TechnicalInformationLinks/", "TechnicalInformationLinks/", "TechnicalInformationLinks/", "TechnicalInformationLinks/"), - new Array ("/DataAndInformation/", "Databases/", "Databases/", "Databases/", "Databases/", "Databases/", "Databases/", "ImagesAndMaps/", "ImagesAndMaps/", "ImagesAndMaps/", "ImagesAndMaps/", "ImagesAndMaps/", "ImagesAndMaps/"), - new Array ("/Research/", "Geology/", "Monitoring/", "Monitoring/", "RemoteSensing/", "RemoteSensing/", "IceAndPolar/", "IceAndPolar/", "InTheLab/", "OtherResearch/", "OtherResearch/", "Organizations/", "Organizations/"), - new Array ("/HotTopics/", "", "", "", "", "", "", "", "", "", "", "", ""), - new Array ("/Gallery/", "ImageGallery/", "ImageGallery/", "DesktopWallpaper/", "DesktopWallpaper/", "DesktopWallpaper/", "MoviesAndAnimations/", "MoviesAndAnimations/", "MoviesAndAnimations/", "Posters/", "Posters/", "ScreenSavers/", "ScreenSavers/"), - new Array ("/About/", "AstroHistory/", "AstroToday/", "AstroFuture/", "People/", "Teams/", "Contact/", "Contact/", "Visitors/", "Visitors/", "Careers/", "Crediting/", "Crediting/"), - new Array ("/Search/", "", "", "", "", "", "", "", "", "", "", "", ""), - new Array ("/Kids/", "", "", "", "", "", "", "", "", "", "", "", "") - ) ; - numLinks = navLinkArr.length ; - - // customize: list corresponding alt/title tags for submenu image map - navLinkAltArr = new Array ( - new Array ("", "", "", "", "", "", "", "", "", "", "", "", ""), // no 0 - new Array ("", "Sun", "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "Other Objects", "Beyond the Solar System"), - new Array ("", "Cassini", "Clementine", "Galileo", "Lunar Orbiter", "Lunar Orbiter", "Magellan", "Mariner", "Mars Pathfinder", "Mars Global Surveyor", "Viking", "Voyager", "More Missions"), - new Array ("", "Software", "Software", "Image Processing", "Image Processing", "Labs and Facilities", "Labs and Facilities", "Other Technology", "Other Technology", "Technical Information Links", "Technical Information Links", "Technical Information Links", "TechnicalInformationLinks"), - new Array ("", "", "", "", "", "Databases", "Databases", "ImagesAndMaps", "ImagesAndMaps", "", "", "", ""), - new Array ("", "Geology", "Monitoring", "Monitoring", "Remote Sensing", "Remote Sensing", "Ice and Polar", "Ice and Polar", "In the Lab", "Other Research", "Other Research", "Organizations", "Organizations"), - new Array ("", "", "", "", "", "", "", "", "", "", "", "", ""), - new Array ("", "Image Gallery", "Image Gallery", "Desktop Wallpaper", "Desktop Wallpaper", "Desktop Wallpaper", "Movies and Animations", "Movies and Animations", "Movies and Animations", "Posters", "Posters", "Screen Savers", "Screen Savers"), - new Array ("", "History", "Now", "Future", "People", "Teams", "Contact Us", "Contact Us", "Visitor Information", "Visitors Information", "Careers", "Using Our Images", "Using Our Images"), - new Array ("", "", "", "", "", "", "", "", "", "", "", "", ""), - new Array ("", "", "", "", "", "", "", "", "", "", "", "", "") - ) ; - - // 'enumed' types for referring to each topic corresponding to arrays - noBar = 0 ; - solarBar = 1 ; - missionBar = 2 ; - techBar = 3 ; - datainfoBar = 4 ; - researchBar = 5 ; - hottopicsBar = 6 ; - galleryBar = 7 ; - aboutBar = 8 ; - searchBar = 9 ; - kidsBar = 10 ; - - gonnaReheat = 0 ; // lets cool function know it's been called from the heat function - - // writes the image width - function writeNavWidth () { - document.write(navWidth) ; - } - - // writes the image height - function writeNavHeight () { - document.write(navHeight) ; - } - - // write out the path and filename to the chosen image - function writeNavPathAndFilename (imageNum) { - document.write(site + navBaseURL + navArr[imageNum][navFilename]) ; - } - - // change specified image tag named 'imgName' to chosen image - function heatNavButton (imageNum) { - gonnaReheat = 1 ; - coolAllNavButtons () ; - window.clearTimeout(TimeoutID) ; - gonnaReheat = 0 ; - setImageNum (imageNum) ; - document.images[navArr[imageNum][navImgName]].src = site + navBaseURL + navArr[imageNum][navFilenameHot] ; - document.images[navSubImgName].src = site + navBaseURL + navArr[imageNum][navSubFilename] ; - TimeoutID = window.setTimeout("coolAllNavButtons()", Timeout); - } - - - // functions for changing the image map area hrefs and titles - function setImageNum (imageNum) { - imageNumChoice = imageNum ; - } - - // set which is the default bar to highlight for the page - function setDefaultBarTo (imgNum) { - defaultBar = imgNum ; - } - - function getMapAreaHref (i) { - return site + navLinkArr[imageNumChoice][0] + navLinkArr[imageNumChoice][i] ; - } - - function getMapAreaAlt (i) { - return navLinkAltArr[imageNumChoice][i] ; - } - - - - // change specified image tag named 'imgName' to cool state - function coolNavButton (imageNum) { - document.images[navArr[imageNum][navImgName]].src = site + navBaseURL + navArr[imageNum][navFilenameCool] ; - document.images[navSubImgName].src = site + navBaseURL + navSubBase ; - } - - // change all buttons to cool state - function coolAllNavButtons () { - document.images[navSubImgName].src = site + navBaseURL + navSubBase ; - for (i = 1 ; i < numNavImages ; i++) { - document.images[navArr[i][navImgName]].src = site + navBaseURL + navArr[i][navFilenameCool] ; - } - - if (gonnaReheat != 1) { - imageNumChoice = defaultBar ; - if (imageNumChoice) { - heatNavButton (imageNumChoice) ; - } - } - } - - - function writeNavigationBar () { - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - document.write(" ") ; - - document.write(" ") ; - document.write(" ") ; - document.write(" ") ; - - document.write("
") ; - document.write(" ") ; - document.write(" \"[Solar") ; - - document.write(" ") ; - document.write(" \"[Missions]\"") ; - document.write(" ") ; - document.write(" \"[Technology]\"") ; - - document.write(" ") ; - document.write(" \"[Data") ; - document.write(" ") ; - document.write(" \"[Research]\"") ; - - document.write(" ") ; - document.write(" \"[Hot") ; - document.write(" ") ; - document.write(" \"[Gallery]\"") ; - - document.write(" ") ; - document.write(" \"[About") ; - document.write(" ") ; - document.write(" \"[Search]\"") ; - - document.write(" ") ; - document.write(" \"[Kids'
") ; - document.write(" \"
") ; - - document.write(" ") ; - - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" \"\"") ; - document.write(" ") ; - document.write(" ") ; - } - diff --git a/isis/src/docsys/assets/scripts/uswds-init.min.js.map b/isis/src/docsys/assets/scripts/uswds-init.min.js.map new file mode 100755 index 0000000000..ecb295ff5e --- /dev/null +++ b/isis/src/docsys/assets/scripts/uswds-init.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"uswds-init.min.js","sources":["uswds-init.js"],"sourcesContent":["/* eslint-disable no-var */\n(function uswdsInit() {\n \"use strict\";\n\n var loadingClass = \"usa-js-loading\";\n var fallback;\n\n document.documentElement.classList.add(loadingClass);\n function revertClass() {\n document.documentElement.classList.remove(loadingClass);\n }\n\n fallback = setTimeout(revertClass, 8000);\n\n function verifyLoaded() {\n if (window.uswdsPresent) {\n clearTimeout(fallback);\n revertClass();\n window.removeEventListener(\"load\", verifyLoaded, true);\n }\n }\n\n window.addEventListener(\"load\", verifyLoaded, true);\n})();\n"],"names":["fallback","loadingClass","revertClass","document","documentElement","classList","remove","add","setTimeout","window","addEventListener","verifyLoaded","uswdsPresent","clearTimeout","removeEventListener"],"mappings":"AACA,CAAA,WAGE,IACIA,EADAC,EAAe,iBAInB,SAASC,IACPC,SAASC,gBAAgBC,UAAUC,OAAOL,CAAY,CACxD,CAHAE,SAASC,gBAAgBC,UAAUE,IAAIN,CAAY,EAKnDD,EAAWQ,WAAWN,EAAa,GAAI,EAUvCO,OAAOC,iBAAiB,OARxB,SAASC,IACHF,OAAOG,eACTC,aAAab,CAAQ,EACrBE,EAAY,EACZO,OAAOK,oBAAoB,OAAQH,EAAc,CAAA,CAAI,EAEzD,EAE8C,CAAA,CAAI,CACnD,EAAE"} \ No newline at end of file diff --git a/isis/src/docsys/assets/scripts/uswds.min.js.map b/isis/src/docsys/assets/scripts/uswds.min.js.map new file mode 100755 index 0000000000..ca0f084504 --- /dev/null +++ b/isis/src/docsys/assets/scripts/uswds.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/element-closest/element-closest.js","node_modules/keyboardevent-key-polyfill/index.js","node_modules/object-assign/index.js","node_modules/receptor/behavior/index.js","node_modules/receptor/compose/index.js","node_modules/receptor/delegate/index.js","node_modules/receptor/delegateAll/index.js","node_modules/receptor/ignore/index.js","node_modules/receptor/index.js","node_modules/receptor/keymap/index.js","node_modules/receptor/once/index.js","node_modules/resolve-id-refs/index.js","packages/_usa-password/src/index.js","packages/usa-accordion/src/index.js","packages/usa-banner/src/index.js","packages/usa-button/src/index.js","packages/usa-character-count/src/index.js","packages/usa-combo-box/src/index.js","packages/usa-date-picker/src/index.js","packages/usa-date-range-picker/src/index.js","packages/usa-file-input/src/index.js","packages/usa-footer/src/index.js","packages/usa-header/src/index.js","packages/usa-in-page-navigation/src/index.js","packages/usa-input-mask/src/index.js","packages/usa-language-selector/src/index.js","packages/usa-modal/src/index.js","packages/usa-range/src/index.js","packages/usa-search/src/index.js","packages/usa-skipnav/src/index.js","packages/usa-table/src/index.js","packages/usa-time-picker/src/index.js","packages/usa-tooltip/src/index.js","packages/usa-validation/src/index.js","packages/uswds-core/src/js/config.js","packages/uswds-core/src/js/events.js","packages/uswds-core/src/js/index.js","packages/uswds-core/src/js/polyfills/custom-event.js","packages/uswds-core/src/js/polyfills/element-hidden.js","packages/uswds-core/src/js/polyfills/index.js","packages/uswds-core/src/js/polyfills/number-is-nan.js","packages/uswds-core/src/js/polyfills/svg4everybody.js","packages/uswds-core/src/js/start.js","packages/uswds-core/src/js/utils/active-element.js","packages/uswds-core/src/js/utils/behavior.js","packages/uswds-core/src/js/utils/debounce.js","packages/uswds-core/src/js/utils/focus-trap.js","packages/uswds-core/src/js/utils/is-in-viewport.js","packages/uswds-core/src/js/utils/is-ios-device.js","packages/uswds-core/src/js/utils/sanitizer.js","packages/uswds-core/src/js/utils/scrollbar-width.js","packages/uswds-core/src/js/utils/select-or-matches.js","packages/uswds-core/src/js/utils/select.js","packages/uswds-core/src/js/utils/toggle-field-mask.js","packages/uswds-core/src/js/utils/toggle-form-input.js","packages/uswds-core/src/js/utils/toggle.js","packages/uswds-core/src/js/utils/validate-input.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","ElementProto","window","Element","prototype","matches","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","selector","element","this","elements","document","ownerDocument","querySelectorAll","index","Boolean","closest","nodeType","parentNode","keyboardeventKeyPolyfill","polyfill","KeyboardEvent","proto","get","x","key","keys","which","keyCode","Array","isArray","shiftKey","Object","defineProperty","3","6","8","9","12","13","16","17","18","19","20","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","48","49","50","51","52","53","54","55","56","57","91","93","144","145","181","182","183","186","187","188","189","190","191","192","219","220","221","222","224","225","246","247","248","249","250","251","letter","String","fromCharCode","toLowerCase","toUpperCase","define","amd","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","propertyIsEnumerable","assign","test1","getOwnPropertyNames","test2","test3","order2","map","join","split","forEach","err","target","source","from","to","val","TypeError","s","arguments","symbols","delegate","delegateAll","DELEGATE_PATTERN","popKey","obj","value","events","props","listeners","reduce","memo","type","handler","match","options","capture","passive","listener","indexOf","_type","concat","add","addEventListener","remove","removeEventListener","functions","some","fn","event","compose","selectors","delegates","push","contains","behavior","ignore","keymap","MODIFIERS","Alt","Control","Ctrl","Shift","hasModifiers","modifier","result","_key","undefined","wrapped","currentTarget","RE_TRIM","RE_SPLIT","trim","str","replace","ids","doc","getElementById","id","querySelector","bind","el","toggleFormInput","CLICK","PREFIX","preventDefault","select","toggle","isElementInViewport","ACCORDION","BUTTON","EXPANDED","getAccordionButtons","accordion","filter","button","toggleButton","expanded","safeExpanded","multiselectable","hasAttribute","other","getAttribute","scrollIntoView","init","root","show","hide","getButtons","HEADER","EXPANDED_CLASS","BANNER_BUTTON","trigger","classList","anchorButton","keydown","a[class*=\"usa-button\"]"," ","click","debounce","CHARACTER_COUNT_CLASS","CHARACTER_COUNT","INPUT","MESSAGE","VALIDATION_MESSAGE","MESSAGE_INVALID_CLASS","STATUS_MESSAGE_CLASS","STATUS_MESSAGE_SR_ONLY_CLASS","STATUS_MESSAGE","STATUS_MESSAGE_SR_ONLY","DEFAULT_STATUS_LABEL","getCharacterCountElements","inputEl","characterCountEl","messageEl","createStatusMessages","statusMessage","createElement","srStatusMessage","defaultMessage","dataset","maxlength","setAttribute","textContent","append","getCountMessage","currentLength","maxLength","let","newMessage","difference","Math","abs","srUpdateStatus","msgEl","updateCountMessage","parseInt","currentStatusMessage","isOverLimit","validationMessage","setCustomValidity","enhanceCharacterCount","removeAttribute","characterCount","input","selectOrMatches","Sanitizer","COMBO_BOX_CLASS","COMBO_BOX_PRISTINE_CLASS","SELECT_CLASS","INPUT_CLASS","CLEAR_INPUT_BUTTON_CLASS","CLEAR_INPUT_BUTTON_WRAPPER_CLASS","INPUT_BUTTON_SEPARATOR_CLASS","TOGGLE_LIST_BUTTON_CLASS","TOGGLE_LIST_BUTTON_WRAPPER_CLASS","LIST_CLASS","LIST_OPTION_CLASS","LIST_OPTION_FOCUSED_CLASS","LIST_OPTION_SELECTED_CLASS","STATUS_CLASS","COMBO_BOX","SELECT","CLEAR_INPUT_BUTTON","TOGGLE_LIST_BUTTON","LIST","LIST_OPTION","LIST_OPTION_FOCUSED","LIST_OPTION_SELECTED","STATUS","DEFAULT_FILTER","changeElementValue","elementToChange","CustomEvent","bubbles","cancelable","detail","dispatchEvent","getComboBoxContext","selectEl","listEl","statusEl","focusedOptionEl","selectedOptionEl","toggleListBtnEl","clearInputBtnEl","isPristine","comboBoxEl","disableFiltering","disable","hidden","disabled","enhanceComboBox","_comboBoxEl","enhanced","selectId","selectLabel","listId","listIdLabel","assistiveHintID","additionalAttributes","defaultValue","placeholder","selectedOption","len","optionEl","name","attr","escapeHTML","insertAdjacentElement","insertAdjacentHTML","text","highlightOption","nextEl","skipFocus","preventScroll","optionBottom","offsetTop","offsetHeight","scrollTop","focus","generateDynamicRegExp","query","extras","escapeRegExp","find","m","$1","queryFilter","matcher","RegExp","displayList","selectedItemId","firstFoundId","listOptionBaseId","inputValue","regex","optionId","test","numOptions","optionHtml","option","classes","tabindex","ariaSelected","li","noResults","innerHTML","item","itemToFocus","hideList","selectItem","listOptionEl","resetSelection","selectValue","handleDownFromInput","nextOptionEl","handleDownFromListOption","nextSibling","handleUpFromListOption","previousSibling","listShown","comboBox","clearButtonEl","focusout","relatedTarget","Escape","Enter","ArrowDown","Down","ArrowUp","Up","Shift+Tab","mouseover","enable","activeElement","isIosDevice","DATE_PICKER_CLASS","DATE_PICKER_WRAPPER_CLASS","DATE_PICKER_INITIALIZED_CLASS","DATE_PICKER_ACTIVE_CLASS","DATE_PICKER_INTERNAL_INPUT_CLASS","DATE_PICKER_EXTERNAL_INPUT_CLASS","DATE_PICKER_BUTTON_CLASS","DATE_PICKER_CALENDAR_CLASS","DATE_PICKER_STATUS_CLASS","CALENDAR_DATE_CLASS","CALENDAR_DATE_FOCUSED_CLASS","CALENDAR_DATE_SELECTED_CLASS","CALENDAR_DATE_PREVIOUS_MONTH_CLASS","CALENDAR_DATE_CURRENT_MONTH_CLASS","CALENDAR_DATE_NEXT_MONTH_CLASS","CALENDAR_DATE_RANGE_DATE_CLASS","CALENDAR_DATE_TODAY_CLASS","CALENDAR_DATE_RANGE_DATE_START_CLASS","CALENDAR_DATE_RANGE_DATE_END_CLASS","CALENDAR_DATE_WITHIN_RANGE_CLASS","CALENDAR_PREVIOUS_YEAR_CLASS","CALENDAR_PREVIOUS_MONTH_CLASS","CALENDAR_NEXT_YEAR_CLASS","CALENDAR_NEXT_MONTH_CLASS","CALENDAR_MONTH_SELECTION_CLASS","CALENDAR_YEAR_SELECTION_CLASS","CALENDAR_MONTH_CLASS","CALENDAR_MONTH_FOCUSED_CLASS","CALENDAR_MONTH_SELECTED_CLASS","CALENDAR_YEAR_CLASS","CALENDAR_YEAR_FOCUSED_CLASS","CALENDAR_YEAR_SELECTED_CLASS","CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS","CALENDAR_NEXT_YEAR_CHUNK_CLASS","CALENDAR_DATE_PICKER_CLASS","CALENDAR_MONTH_PICKER_CLASS","CALENDAR_YEAR_PICKER_CLASS","CALENDAR_TABLE_CLASS","CALENDAR_ROW_CLASS","CALENDAR_CELL_CLASS","CALENDAR_CELL_CENTER_ITEMS_CLASS","CALENDAR_MONTH_LABEL_CLASS","CALENDAR_DAY_OF_WEEK_CLASS","DATE_PICKER","DATE_PICKER_BUTTON","DATE_PICKER_INTERNAL_INPUT","DATE_PICKER_EXTERNAL_INPUT","DATE_PICKER_CALENDAR","DATE_PICKER_STATUS","CALENDAR_DATE","CALENDAR_DATE_FOCUSED","CALENDAR_DATE_CURRENT_MONTH","CALENDAR_PREVIOUS_YEAR","CALENDAR_PREVIOUS_MONTH","CALENDAR_NEXT_YEAR","CALENDAR_NEXT_MONTH","CALENDAR_YEAR_SELECTION","CALENDAR_MONTH_SELECTION","CALENDAR_MONTH","CALENDAR_YEAR","CALENDAR_PREVIOUS_YEAR_CHUNK","CALENDAR_NEXT_YEAR_CHUNK","CALENDAR_DATE_PICKER","CALENDAR_MONTH_PICKER","CALENDAR_YEAR_PICKER","CALENDAR_MONTH_FOCUSED","CALENDAR_YEAR_FOCUSED","MONTH_LABELS","DAY_OF_WEEK_LABELS","YEAR_CHUNK","DEFAULT_EXTERNAL_DATE_FORMAT","INTERNAL_DATE_FORMAT","processFocusableSelectors","DATE_PICKER_FOCUSABLE","MONTH_PICKER_FOCUSABLE","YEAR_PICKER_FOCUSABLE","keepDateWithinMonth","dateToCheck","month","getMonth","setDate","year","date","newDate","Date","setFullYear","today","day","getDate","getFullYear","startOfMonth","lastDayOfMonth","addDays","_date","numDays","getTime","subDays","addWeeks","numWeeks","startOfWeek","dayOfWeek","getDay","addMonths","numMonths","dateMonth","setMonth","subMonths","addYears","numYears","subYears","setYear","min","dateA","dateB","max","isSameYear","isSameMonth","isSameDay","keepDateBetweenMinAndMax","minDate","maxDate","isDateWithinMinAndMax","isDatesMonthOutsideMinOrMax","isDatesYearOutsideMinOrMax","parseDateString","dateString","dateFormat","adjustDate","parsed","monthStr","dayStr","yearStr","Number","isNaN","currentYearStub","currentYear","lastDayOfTheMonth","formatDate","padZeros","slice","listToGridHtml","htmlArray","rowSize","grid","row","tr","td","createTableBody","tableBody","getDatePickerContext","datePickerEl","internalInputEl","externalInputEl","calendarEl","toggleBtnEl","firstYearChunkEl","inputDate","selectedDate","calendarDate","rangeDate","defaultDate","ariaDisable","isDateInputInvalid","checkDate","isInvalid","dateStringParts","validateDateInput","setCalendarValue","parsedDate","formattedDate","renderCalendar","_dateToDisplay","todaysDate","dateToDisplay","calendarWasHidden","focusedDate","focusedMonth","focusedYear","prevMonth","nextMonth","currentFormattedDate","firstOfMonth","prevButtonsDisabled","nextButtonsDisabled","rangeConclusionDate","rangeStartDate","rangeEndDate","withinRangeStartDate","withinRangeEndDate","monthLabel","days","dateToRender","isDisabled","isSelected","btn","datesGrid","newCalendar","cloneNode","table","style","top","tableHead","tableHeadRow","daysOfWeek","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","th","replaceChild","statuses","hideCalendar","updateCalendarIfVisible","displayMonthSelection","monthToDisplay","selectedMonth","months","monthToCheck","monthsHtml","monthsGrid","displayYearSelection","yearToDisplay","selectedYear","yearToChunk","prevYearChunkDisabled","nextYearChunkDisabled","years","yearIndex","yearsCalendarWrapper","yearsTableParent","yearsHTMLTableBody","yearsHTMLTableBodyRow","previousYearsBtn","nextYearsBtn","yearsTable","yearsGrid","yearsTableBody","yearsHTMLTableBodyDetailPrev","yearsHTMLTableBodyYearsDetail","yearsHTMLTableBodyDetailNext","handleEscapeFromCalendar","adjustCalendar","adjustDateFn","cappedDate","handleUpFromDate","subWeeks","handleDownFromDate","handleLeftFromDate","handleRightFromDate","handleHomeFromDate","handleEndFromDate","endOfWeek","handlePageDownFromDate","handlePageUpFromDate","handleShiftPageDownFromDate","handleShiftPageUpFromDate","adjustMonthSelectionScreen","adjustMonthFn","monthEl","currentDate","adjustedMonth","handleUpFromMonth","handleDownFromMonth","handleLeftFromMonth","handleRightFromMonth","handleHomeFromMonth","handleEndFromMonth","handlePageDownFromMonth","handlePageUpFromMonth","adjustYearSelectionScreen","adjustYearFn","yearEl","adjustedYear","handleUpFromYear","handleDownFromYear","handleLeftFromYear","handleRightFromYear","handleHomeFromYear","handleEndFromYear","handlePageUpFromYear","handlePageDownFromYear","tabHandler","focusable","getFocusableContext","focusableElements","lastTabIndex","firstTabStop","lastTabStop","focusIndex","isNotFound","isFirstTab","isLastTab","tabAhead","tabBack","datePickerTabEventHandler","monthPickerTabEventHandler","yearPickerTabEventHandler","datePickerEvents","calendarDateEl","_buttonEl","nextToFocus","keyup","keydownKeyCode","Left","ArrowLeft","Right","ArrowRight","Home","End","PageDown","PageUp","Shift+PageDown","Shift+PageUp","Tab","newValue","datePicker","dateEl","currentCalendarDate","hoverDate","focusMonth","focusYear","calendarWrapper","appendChild","display","required","DATE_RANGE_PICKER_CLASS","DATE_RANGE_PICKER_RANGE_START_CLASS","DATE_RANGE_PICKER_RANGE_END_CLASS","DATE_RANGE_PICKER","DATE_RANGE_PICKER_RANGE_START","DATE_RANGE_PICKER_RANGE_END","getDateRangePickerContext","rangeStartEl","rangeEndEl","dateRangePickerEl","handleRangeStartUpdate","updatedDate","handleRangeEndUpdate","dateRangePicker","input change","rangeStart","rangeEnd","DROPZONE_CLASS","DROPZONE","TARGET_CLASS","BOX_CLASS","INSTRUCTIONS_CLASS","PREVIEW_CLASS","PREVIEW_HEADING_CLASS","DISABLED_CLASS","CHOOSE_CLASS","ACCEPTED_FILE_MESSAGE_CLASS","DRAG_TEXT_CLASS","DRAG_CLASS","LOADING_CLASS","INVALID_FILE_CLASS","GENERIC_PREVIEW_CLASS_NAME","GENERIC_PREVIEW_CLASS","PDF_PREVIEW_CLASS","WORD_PREVIEW_CLASS","VIDEO_PREVIEW_CLASS","EXCEL_PREVIEW_CLASS","SR_ONLY_CLASS","SPACER_GIF","TYPE_IS_VALID","DEFAULT_ARIA_LABEL_TEXT","DEFAULT_FILE_STATUS_TEXT","getFileInputContext","dropZoneEl","replaceName","charCodeAt","toString","makeSafeForID","createUniqueID","floor","now","getItemsLabel","fileInputEl","enhanceFileInput","itemsLabel","isInputDisabled","dropTarget","fileInputParent","box","prepend","insertBefore","instructions","dragText","chooseText","navigator","userAgent","outerHTML","fileInputTarget","removeOldPreviews","filePreviews","currentPreviewHeading","currentErrorMessage","node","removeChild","updateStatusMessage","statusElement","fileNames","fileStore","setTimeout","addPreviewHeading","filePreviewsHeading","changeItemText","previewHeadingText","handleUpload","acceptedFilesAttr","acceptedFiles","errorMessage","allFilesAllowed","scannedFiles","files","dataTransfer","file","j","fileType","returnValue","pos","errormessage","stopPropagation","reader","FileReader","fileName","imageId","onloadstart","onloadend","previewImage","src","readAsDataURL","fileInput","teardown","fileInputTopElement","parentElement","className","SCOPE","toggleHtmlTag","isMobile","bigFooter","currentElement","currentElementClasses","preservedHtmlTag","tagName","newElement","menuId","random","nextElementSibling","after","resize","isOpen","innerWidth","HIDE_MAX_WIDTH","mediaQueryList","matchMedia","addListener","removeListener","FocusTrap","ScrollBarWidth","NAV","NAV_CONTAINER","NAV_PRIMARY","NAV_PRIMARY_ITEM","NAV_CONTROL","NAV_LINKS","NON_NAV_HIDDEN_ATTRIBUTE","OPENERS","CLOSE_BUTTON","CLOSERS","TOGGLES","NON_NAV_ELEMENTS","NON_NAV_HIDDEN","ACTIVE_CLASS","navigation","navActive","nonNavElements","isActive","body","isSafari","includes","SCROLLBAR_WIDTH","INITIAL_PADDING","getComputedStyle","getPropertyValue","TEMPORARY_PADDING","hideNonNavItems","headerParent","nonNavElement","showNonNavItems","toggleNav","active","safeActive","currentScrollPosition","scrollY","setProperty","focusTrap","update","closeButton","menuButton","paddingRight","closer","getBoundingClientRect","width","onMenuClose","hideActiveNavDropdown","acc","parentNavItem","navControl","trapContainer","once","CURRENT_CLASS","IN_PAGE_NAV_VALID_HEADINGS","IN_PAGE_NAV_SCROLL_OFFSET","IN_PAGE_NAV_CLASS","IN_PAGE_NAV_ANCHOR_CLASS","IN_PAGE_NAV_NAV_CLASS","IN_PAGE_NAV_LIST_CLASS","IN_PAGE_NAV_ITEM_CLASS","IN_PAGE_NAV_PRIMARY_ITEM_CLASS","IN_PAGE_NAV_LINK_CLASS","IN_PAGE_NAV_TITLE_CLASS","setActive","allLinks","isIntersecting","intersectionRatio","link","createSectionHeadingsArray","selectedContentRegion","selectedHeadingTypes","selectedHeadingTypesArray","contentRegion","headingType","sectionHeadingsArray","handleScrollToSection","inPageNavScrollOffset","scrollOffset","scroll","block","location","hash","history","pushState","createInPageNav","inPageNavEl","inPageNavTitleText","titleText","inPageNavTitleHeadingLevel","titleHeadingLevel","inPageNavRootMargin","rootMargin","inPageNavThreshold","threshold","inPageNavContentSelector","mainContentSelector","inPageNavHeadingSelector","headingElements","sectionHeadings","heading","headingStyle","inPageNav","inPageNavTitle","inPageNavList","listItem","navLinks","anchorTag","textContentOfLink","tag","topHeadingLevel","headingId","baseId","suffix","anchorTags","observeSections","IntersectionObserver","observe","inPageNavigation","elementToScrollTo","targetAnchor","hashFragment","MASKED","MASK","MASK_CONTENT","PLACEHOLDER","maskedNumber","maskedLetter","strippedValue","isCharsetPresent","isInteger","isLetter","handleValueChange","maskVal","charset","charIndex","strippedVal","isInt","isLet","matchesNumber","matchesLetter","placeholderVal","substr","theIEl","maskEl","replaceChildren","inputMask","maskedInput","shell","content","LANGUAGE_SUB","LANGUAGE_PRIMARY","LANGUAGE_PRIMARY_ITEM","LANGUAGE_CONTROL","languageSelector","languageActive","onLanguageClose","toggleLanguage","hideActiveLanguageDropdown","parentLanguageItem","MODAL_CLASSNAME","OVERLAY_CLASSNAME","WRAPPER_CLASSNAME","OPENER_ATTRIBUTE","CLOSER_ATTRIBUTE","FORCE_ACTION_ATTRIBUTE","NON_MODAL_HIDDEN_ATTRIBUTE","MODAL","INITIAL_FOCUS","NON_MODALS","HIDDEN_CLASS","modal","INITIAL_BODY_PADDING","TEMPORARY_BODY_PADDING","toggleModal","setTemporaryBodyPadding","originalOpener","clickedElement","openFocusEl","returnFocus","forceUserAction","modalId","targetModal","removeProperty","nonModal","setModalAttributes","baseComponent","modalContentWrapper","modalID","ariaLabelledBy","ariaDescribedBy","setUpModal","originalLocationPlaceHolder","modalAttributes","attributes","attribute","modalComponent","overlayDiv","modalContent","modalWindow","modalTrigger","nodeName","startsWith","RANGE","updateCallout","targetRange","prep","rangeSlider","textPreposition","unit","textUnit","callout","range","change","FORM","CONTEXT","lastButton","getForm","context","toggleSearch","form","hideSearch","search",".js-search-button","encodeURI","outline","TABLE","SORTED","ASCENDING","DESCENDING","SORT_OVERRIDE","SORT_BUTTON_CLASS","SORT_BUTTON","SORTABLE_HEADER","ANNOUNCEMENT_REGION","getCellValue","children","innerText","compareFunction","isAscending","thisRow","nextRow","value1","value2","localeCompare","language","numeric","ignorePunctuation","updateSortLabel","header","headerName","sortedAscending","headerLabel","headerButtonLabel","toggleSort","safeAscending","tbody","allRows","thisHeaderIndex","sort","otherHeader","sortedHeader","caption","liveRegion","sortAnnouncement","sortDir","sortableHeaders","firstSorted","createHeaderButton","buttonEl","TIME_PICKER","FILTER_DATASET","apQueryFilter","hourQueryFilter","minuteQueryFilter","parseTimeString","timeStr","minutes","mins","hours","transformTimePicker","timePickerEl","initialInputEl","minTime","maxTime","step","time","minute","hour24","hour12","ampm","timePicker","TOOLTIP","TOOLTIP_TRIGGER","TOOLTIP_TRIGGER_CLASS","TOOLTIP_CLASS","TOOLTIP_BODY_CLASS","SET_CLASS","VISIBLE_CLASS","ADJUST_WIDTH_CLASS","getTooltipElements","wrapper","showToolTip","tooltipBody","tooltipTrigger","position","setPositionClass","setPos","resetPositionStyles","bottom","right","left","margin","offsetMargin","propertyValue","calculateMarginOffset","marginPosition","tooltipBodyOffset","positionTop","topMargin","leftMargin","offsetWidth","positionBottom","positionRight","offsetLeft","positionLeft","findBestPosition","attempt","positions","hasVisiblePosition","tryPositions","hideToolTip","setUpAttributes","tooltipID","tooltipContent","additionalClasses","classname","tooltip","mouseover focusin","activeTooltips","activeTooltip","tooltipWrapper","setup","validate","VALIDATE_INPUT","CHECKLIST_ITEM","enhanceValidation","checklistItems","validationElement","validationContainer","statusSummaryID","statusSummaryContainer","currentStatus","itemStatus","validator","input[data-validation-element],textarea[data-validation-element]","prefix","banner","footer","password","skipnav","_params","params","evt","createEvent","initCustomEvent","elproto","HTMLElement","HIDDEN","set","embed","parent","svg","use","fragment","createDocumentFragment","viewBox","clone","importNode","g","createElementNS","namespaceURI","childNodes","firstChild","rawopts","opts","inIframe","self","requests","requestAnimationFrame","uses","getElementsByTagName","numberOfSvgUseElementsToBypass","oninterval","url","xhr","attributeName","srcSplit","shift","XMLHttpRequest","open","send","_embeds","onreadystatechange","cachedDocument","readyState","_cachedDocument","implementation","createHTMLDocument","responseText","domain","_cachedTarget","splice","uswdsPresent","uswds","components","svg4everybody","initComponents","on","default","htmlDocument","Behavior","sequence","seq","method","off","callback","delay","timer","args","clearTimeout","apply","additionalKeyBindings","tabEventHandler","Esc","keyMappings","win","docEl","documentElement","rect","innerHeight","clientHeight","clientWidth","platform","maxTouchPoints","MSStream","_entity","_entities","&","<",">","\"","'","/","getEntity","strings","createSafeHTML","_len","values","escaped","__html","info","unwrapSafeHTML","htmlObjects","markupList","outer","inner","visibility","overflow","msOverflowStyle","scrollbarWidth","selection","field","mask","resolveIdRefs","toggleFieldMask","PRESSED","SHOW_ATTR","pressed","showText","hideText","controls","CHECKED_CLASS","checkList","charAt","statusSummary","entries","validatorName","validatorPattern","validatorSelector","validatorCheckbox","checked","statusComplete","validationComplete","statusIncomplete","validationIncomplete","checkboxContent"],"mappings":"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","file":"uswds.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: [\"'\", '\"'],\n 224: 'Meta',\n 225: 'AltGraph',\n 246: 'Attn',\n 247: 'CrSel',\n 248: 'ExSel',\n 249: 'EraseEof',\n 250: 'Play',\n 251: 'ZoomOut'\n }\n };\n\n // Function keys (F1-24).\n var i;\n for (i = 1; i < 25; i++) {\n keyboardeventKeyPolyfill.keys[111 + i] = 'F' + i;\n }\n\n // Printable ASCII characters.\n var letter = '';\n for (i = 65; i < 91; i++) {\n letter = String.fromCharCode(i);\n keyboardeventKeyPolyfill.keys[i] = [letter.toLowerCase(), letter.toUpperCase()];\n }\n\n function polyfill () {\n if (!('KeyboardEvent' in window) ||\n 'key' in KeyboardEvent.prototype) {\n return false;\n }\n\n // Polyfill `key` on `KeyboardEvent`.\n var proto = {\n get: function (x) {\n var key = keyboardeventKeyPolyfill.keys[this.which || this.keyCode];\n\n if (Array.isArray(key)) {\n key = key[+this.shiftKey];\n }\n\n return key;\n }\n };\n Object.defineProperty(KeyboardEvent.prototype, 'key', proto);\n return proto;\n }\n\n if (typeof define === 'function' && define.amd) {\n define('keyboardevent-key-polyfill', keyboardeventKeyPolyfill);\n } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {\n module.exports = keyboardeventKeyPolyfill;\n } else if (window) {\n window.keyboardeventKeyPolyfill = keyboardeventKeyPolyfill;\n }\n\n})();\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","const assign = require('object-assign');\nconst delegate = require('../delegate');\nconst delegateAll = require('../delegateAll');\n\nconst DELEGATE_PATTERN = /^(.+):delegate\\((.+)\\)$/;\nconst SPACE = ' ';\n\nconst getListeners = function(type, handler) {\n var match = type.match(DELEGATE_PATTERN);\n var selector;\n if (match) {\n type = match[1];\n selector = match[2];\n }\n\n var options;\n if (typeof handler === 'object') {\n options = {\n capture: popKey(handler, 'capture'),\n passive: popKey(handler, 'passive')\n };\n }\n\n var listener = {\n selector: selector,\n delegate: (typeof handler === 'object')\n ? delegateAll(handler)\n : selector\n ? delegate(selector, handler)\n : handler,\n options: options\n };\n\n if (type.indexOf(SPACE) > -1) {\n return type.split(SPACE).map(function(_type) {\n return assign({type: _type}, listener);\n });\n } else {\n listener.type = type;\n return [listener];\n }\n};\n\nvar popKey = function(obj, key) {\n var value = obj[key];\n delete obj[key];\n return value;\n};\n\nmodule.exports = function behavior(events, props) {\n const listeners = Object.keys(events)\n .reduce(function(memo, type) {\n var listeners = getListeners(type, events[type]);\n return memo.concat(listeners);\n }, []);\n\n return assign({\n add: function addBehavior(element) {\n listeners.forEach(function(listener) {\n element.addEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n },\n remove: function removeBehavior(element) {\n listeners.forEach(function(listener) {\n element.removeEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n }\n }, props);\n};\n","module.exports = function compose(functions) {\n return function(e) {\n return functions.some(function(fn) {\n return fn.call(this, e) === false;\n }, this);\n };\n};\n","// polyfill Element.prototype.closest\nrequire('element-closest');\n\nmodule.exports = function delegate(selector, fn) {\n return function delegation(event) {\n var target = event.target.closest(selector);\n if (target) {\n return fn.call(target, event);\n }\n }\n};\n","const delegate = require('../delegate');\nconst compose = require('../compose');\n\nconst SPLAT = '*';\n\nmodule.exports = function delegateAll(selectors) {\n const keys = Object.keys(selectors)\n\n // XXX optimization: if there is only one handler and it applies to\n // all elements (the \"*\" CSS selector), then just return that\n // handler\n if (keys.length === 1 && keys[0] === SPLAT) {\n return selectors[SPLAT];\n }\n\n const delegates = keys.reduce(function(memo, selector) {\n memo.push(delegate(selector, selectors[selector]));\n return memo;\n }, []);\n return compose(delegates);\n};\n","module.exports = function ignore(element, fn) {\n return function ignorance(e) {\n if (element !== e.target && !element.contains(e.target)) {\n return fn.call(this, e);\n }\n };\n};\n","module.exports = {\n behavior: require('./behavior'),\n delegate: require('./delegate'),\n delegateAll: require('./delegateAll'),\n ignore: require('./ignore'),\n keymap: require('./keymap'),\n};\n","require('keyboardevent-key-polyfill');\n\n// these are the only relevant modifiers supported on all platforms,\n// according to MDN:\n// \nconst MODIFIERS = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Ctrl': 'ctrlKey',\n 'Shift': 'shiftKey'\n};\n\nconst MODIFIER_SEPARATOR = '+';\n\nconst getEventKey = function(event, hasModifiers) {\n var key = event.key;\n if (hasModifiers) {\n for (var modifier in MODIFIERS) {\n if (event[MODIFIERS[modifier]] === true) {\n key = [modifier, key].join(MODIFIER_SEPARATOR);\n }\n }\n }\n return key;\n};\n\nmodule.exports = function keymap(keys) {\n const hasModifiers = Object.keys(keys).some(function(key) {\n return key.indexOf(MODIFIER_SEPARATOR) > -1;\n });\n return function(event) {\n var key = getEventKey(event, hasModifiers);\n return [key, key.toLowerCase()]\n .reduce(function(result, _key) {\n if (_key in keys) {\n result = keys[key].call(this, event);\n }\n return result;\n }, undefined);\n };\n};\n\nmodule.exports.MODIFIERS = MODIFIERS;\n","module.exports = function once(listener, options) {\n var wrapped = function wrappedOnce(e) {\n e.currentTarget.removeEventListener(e.type, wrapped, options);\n return listener.call(this, e);\n };\n return wrapped;\n};\n\n","'use strict';\n\nvar RE_TRIM = /(^\\s+)|(\\s+$)/g;\nvar RE_SPLIT = /\\s+/;\n\nvar trim = String.prototype.trim\n ? function(str) { return str.trim(); }\n : function(str) { return str.replace(RE_TRIM, ''); };\n\nvar queryById = function(id) {\n return this.querySelector('[id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]');\n};\n\nmodule.exports = function resolveIds(ids, doc) {\n if (typeof ids !== 'string') {\n throw new Error('Expected a string but got ' + (typeof ids));\n }\n\n if (!doc) {\n doc = window.document;\n }\n\n var getElementById = doc.getElementById\n ? doc.getElementById.bind(doc)\n : queryById.bind(doc);\n\n ids = trim(ids).split(RE_SPLIT);\n\n // XXX we can short-circuit here because trimming and splitting a\n // string of just whitespace produces an array containing a single,\n // empty string\n if (ids.length === 1 && ids[0] === '') {\n return [];\n }\n\n return ids\n .map(function(id) {\n var el = getElementById(id);\n if (!el) {\n throw new Error('no element with id: \"' + id + '\"');\n }\n return el;\n });\n};\n","const behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst toggleFormInput = require(\"../../uswds-core/src/js/utils/toggle-form-input\");\n\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\n\nconst LINK = `.${PREFIX}-show-password`;\n\nfunction toggle(event) {\n event.preventDefault();\n toggleFormInput(this);\n}\n\nmodule.exports = behavior({\n [CLICK]: {\n [LINK]: toggle,\n },\n});\n","const select = require(\"../../uswds-core/src/js/utils/select\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst toggle = require(\"../../uswds-core/src/js/utils/toggle\");\nconst isElementInViewport = require(\"../../uswds-core/src/js/utils/is-in-viewport\");\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\n\nconst ACCORDION = `.${PREFIX}-accordion, .${PREFIX}-accordion--bordered`;\nconst BANNER_BUTTON = `.${PREFIX}-banner__button`;\nconst BUTTON = `.${PREFIX}-accordion__button[aria-controls]:not(${BANNER_BUTTON})`;\nconst EXPANDED = \"aria-expanded\";\nconst MULTISELECTABLE = \"data-allow-multiple\";\n\n/**\n * Get an Array of button elements belonging directly to the given\n * accordion element.\n * @param {HTMLElement} accordion\n * @return {array}\n */\nconst getAccordionButtons = (accordion) => {\n const buttons = select(BUTTON, accordion);\n\n return buttons.filter((button) => button.closest(ACCORDION) === accordion);\n};\n\n/**\n * Toggle a button's \"pressed\" state, optionally providing a target\n * state.\n *\n * @param {HTMLButtonElement} button\n * @param {boolean?} expanded If no state is provided, the current\n * state will be toggled (from false to true, and vice-versa).\n * @return {boolean} the resulting state\n */\nconst toggleButton = (button, expanded) => {\n const accordion = button.closest(ACCORDION);\n let safeExpanded = expanded;\n\n if (!accordion) {\n throw new Error(`${BUTTON} is missing outer ${ACCORDION}`);\n }\n\n safeExpanded = toggle(button, expanded);\n\n // XXX multiselectable is opt-in, to preserve legacy behavior\n const multiselectable = accordion.hasAttribute(MULTISELECTABLE);\n\n if (safeExpanded && !multiselectable) {\n getAccordionButtons(accordion).forEach((other) => {\n if (other !== button) {\n toggle(other, false);\n }\n });\n }\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} true\n */\nconst showButton = (button) => toggleButton(button, true);\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} false\n */\nconst hideButton = (button) => toggleButton(button, false);\n\nconst accordion = behavior(\n {\n [CLICK]: {\n [BUTTON]() {\n toggleButton(this);\n\n if (this.getAttribute(EXPANDED) === \"true\") {\n // We were just expanded, but if another accordion was also just\n // collapsed, we may no longer be in the viewport. This ensures\n // that we are still visible, so the user isn't confused.\n if (!isElementInViewport(this)) this.scrollIntoView();\n }\n },\n },\n },\n {\n init(root) {\n select(BUTTON, root).forEach((button) => {\n const expanded = button.getAttribute(EXPANDED) === \"true\";\n toggleButton(button, expanded);\n });\n },\n ACCORDION,\n BUTTON,\n show: showButton,\n hide: hideButton,\n toggle: toggleButton,\n getButtons: getAccordionButtons,\n },\n);\n\nmodule.exports = accordion;\n","const behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst select = require(\"../../uswds-core/src/js/utils/select\");\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\nconst toggle = require(\"../../uswds-core/src/js/utils/toggle\");\n\nconst HEADER = `.${PREFIX}-banner__header`;\nconst EXPANDED_CLASS = `${PREFIX}-banner__header--expanded`;\nconst BANNER_BUTTON = `${HEADER} [aria-controls]`;\n\n/**\n * Toggle Banner display and class.\n * @param {Event} event\n */\nconst toggleBanner = function toggleEl(event) {\n event.preventDefault();\n const trigger = event.target.closest(BANNER_BUTTON);\n\n toggle(trigger);\n this.closest(HEADER).classList.toggle(EXPANDED_CLASS);\n};\n\nmodule.exports = behavior(\n {\n [CLICK]: {\n [BANNER_BUTTON]: toggleBanner,\n },\n },\n {\n init(root) {\n select(BANNER_BUTTON, root).forEach((button) => {\n const expanded = button.getAttribute(EXPANDED_CLASS) === \"true\";\n toggle(button, expanded);\n });\n },\n },\n);\n","const keymap = require(\"receptor/keymap\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\n\nconst ANCHOR_BUTTON = `a[class*=\"usa-button\"]`;\n\nconst toggleButton = (event) => {\n event.preventDefault();\n event.target.click();\n};\n\nconst anchorButton = behavior({\n keydown: {\n [ANCHOR_BUTTON]: keymap({\n \" \": toggleButton,\n }),\n },\n});\n\nmodule.exports = anchorButton;\n","const select = require(\"../../uswds-core/src/js/utils/select\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst debounce = require(\"../../uswds-core/src/js/utils/debounce\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\n\nconst CHARACTER_COUNT_CLASS = `${PREFIX}-character-count`;\nconst CHARACTER_COUNT = `.${CHARACTER_COUNT_CLASS}`;\nconst INPUT = `.${PREFIX}-character-count__field`;\nconst MESSAGE = `.${PREFIX}-character-count__message`;\nconst VALIDATION_MESSAGE = \"The content is too long.\";\nconst MESSAGE_INVALID_CLASS = `${PREFIX}-character-count__status--invalid`;\nconst STATUS_MESSAGE_CLASS = `${CHARACTER_COUNT_CLASS}__status`;\nconst STATUS_MESSAGE_SR_ONLY_CLASS = `${CHARACTER_COUNT_CLASS}__sr-status`;\nconst STATUS_MESSAGE = `.${STATUS_MESSAGE_CLASS}`;\nconst STATUS_MESSAGE_SR_ONLY = `.${STATUS_MESSAGE_SR_ONLY_CLASS}`;\nconst DEFAULT_STATUS_LABEL = `characters allowed`;\n\n/**\n * Returns the root and message element for an character count input\n *\n * @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element\n * @returns {CharacterCountElements} elements The root and message element.\n */\nconst getCharacterCountElements = (inputEl) => {\n const characterCountEl = inputEl.closest(CHARACTER_COUNT);\n\n if (!characterCountEl) {\n throw new Error(`${INPUT} is missing outer ${CHARACTER_COUNT}`);\n }\n\n const messageEl = characterCountEl.querySelector(MESSAGE);\n\n if (!messageEl) {\n throw new Error(`${CHARACTER_COUNT} is missing inner ${MESSAGE}`);\n }\n\n return { characterCountEl, messageEl };\n};\n\n/**\n * Move maxlength attribute to a data attribute on usa-character-count\n *\n * @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element\n */\nconst setDataLength = (inputEl) => {\n const { characterCountEl } = getCharacterCountElements(inputEl);\n\n const maxlength = inputEl.getAttribute(\"maxlength\");\n\n if (!maxlength) return;\n\n inputEl.removeAttribute(\"maxlength\");\n characterCountEl.setAttribute(\"data-maxlength\", maxlength);\n};\n\n/**\n * Create and append status messages for visual and screen readers\n *\n * @param {HTMLDivElement} characterCountEl - Div with `.usa-character-count` class\n * @description Create two status messages for number of characters left;\n * one visual status and another for screen readers\n */\nconst createStatusMessages = (characterCountEl) => {\n const statusMessage = document.createElement(\"div\");\n const srStatusMessage = document.createElement(\"div\");\n const maxLength = characterCountEl.dataset.maxlength;\n const defaultMessage = `${maxLength} ${DEFAULT_STATUS_LABEL}`;\n\n statusMessage.classList.add(`${STATUS_MESSAGE_CLASS}`, \"usa-hint\");\n srStatusMessage.classList.add(\n `${STATUS_MESSAGE_SR_ONLY_CLASS}`,\n \"usa-sr-only\",\n );\n\n statusMessage.setAttribute(\"aria-hidden\", true);\n srStatusMessage.setAttribute(\"aria-live\", \"polite\");\n\n statusMessage.textContent = defaultMessage;\n srStatusMessage.textContent = defaultMessage;\n\n characterCountEl.append(statusMessage, srStatusMessage);\n};\n\n/**\n * Returns message with how many characters are left\n *\n * @param {number} currentLength - The number of characters used\n * @param {number} maxLength - The total number of characters allowed\n * @returns {string} A string description of how many characters are left\n */\nconst getCountMessage = (currentLength, maxLength) => {\n let newMessage = \"\";\n\n if (currentLength === 0) {\n newMessage = `${maxLength} ${DEFAULT_STATUS_LABEL}`;\n } else {\n const difference = Math.abs(maxLength - currentLength);\n const characters = `character${difference === 1 ? \"\" : \"s\"}`;\n const guidance = currentLength > maxLength ? \"over limit\" : \"left\";\n\n newMessage = `${difference} ${characters} ${guidance}`;\n }\n\n return newMessage;\n};\n\n/**\n * Updates the character count status for screen readers after a 1000ms delay.\n *\n * @param {HTMLElement} msgEl - The screen reader status message element\n * @param {string} statusMessage - A string of the current character status\n */\nconst srUpdateStatus = debounce((msgEl, statusMessage) => {\n const srStatusMessage = msgEl;\n srStatusMessage.textContent = statusMessage;\n}, 1000);\n\n/**\n * Update the character count component\n *\n * @description On input, it will update visual status, screenreader\n * status and update input validation (if over character length)\n * @param {HTMLInputElement|HTMLTextAreaElement} inputEl The character count input element\n */\nconst updateCountMessage = (inputEl) => {\n const { characterCountEl } = getCharacterCountElements(inputEl);\n const currentLength = inputEl.value.length;\n const maxLength = parseInt(\n characterCountEl.getAttribute(\"data-maxlength\"),\n 10,\n );\n const statusMessage = characterCountEl.querySelector(STATUS_MESSAGE);\n const srStatusMessage = characterCountEl.querySelector(\n STATUS_MESSAGE_SR_ONLY,\n );\n const currentStatusMessage = getCountMessage(currentLength, maxLength);\n\n if (!maxLength) return;\n\n const isOverLimit = currentLength && currentLength > maxLength;\n\n statusMessage.textContent = currentStatusMessage;\n srUpdateStatus(srStatusMessage, currentStatusMessage);\n\n if (isOverLimit && !inputEl.validationMessage) {\n inputEl.setCustomValidity(VALIDATION_MESSAGE);\n }\n\n if (!isOverLimit && inputEl.validationMessage === VALIDATION_MESSAGE) {\n inputEl.setCustomValidity(\"\");\n }\n\n statusMessage.classList.toggle(MESSAGE_INVALID_CLASS, isOverLimit);\n};\n\n/**\n * Initialize component\n *\n * @description On init this function will create elements and update any\n * attributes so it can tell the user how many characters are left.\n * @param {HTMLInputElement|HTMLTextAreaElement} inputEl the components input\n */\nconst enhanceCharacterCount = (inputEl) => {\n const { characterCountEl, messageEl } = getCharacterCountElements(inputEl);\n\n // Hide hint and remove aria-live for backwards compatibility\n messageEl.classList.add(\"usa-sr-only\");\n messageEl.removeAttribute(\"aria-live\");\n\n setDataLength(inputEl);\n createStatusMessages(characterCountEl);\n};\n\nconst characterCount = behavior(\n {\n input: {\n [INPUT]() {\n updateCountMessage(this);\n },\n },\n },\n {\n init(root) {\n select(INPUT, root).forEach((input) => enhanceCharacterCount(input));\n },\n MESSAGE_INVALID_CLASS,\n VALIDATION_MESSAGE,\n STATUS_MESSAGE_CLASS,\n STATUS_MESSAGE_SR_ONLY_CLASS,\n DEFAULT_STATUS_LABEL,\n createStatusMessages,\n getCountMessage,\n updateCountMessage,\n },\n);\n\nmodule.exports = characterCount;\n","const keymap = require(\"receptor/keymap\");\nconst selectOrMatches = require(\"../../uswds-core/src/js/utils/select-or-matches\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst Sanitizer = require(\"../../uswds-core/src/js/utils/sanitizer\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\n\nconst COMBO_BOX_CLASS = `${PREFIX}-combo-box`;\nconst COMBO_BOX_PRISTINE_CLASS = `${COMBO_BOX_CLASS}--pristine`;\nconst SELECT_CLASS = `${COMBO_BOX_CLASS}__select`;\nconst INPUT_CLASS = `${COMBO_BOX_CLASS}__input`;\nconst CLEAR_INPUT_BUTTON_CLASS = `${COMBO_BOX_CLASS}__clear-input`;\nconst CLEAR_INPUT_BUTTON_WRAPPER_CLASS = `${CLEAR_INPUT_BUTTON_CLASS}__wrapper`;\nconst INPUT_BUTTON_SEPARATOR_CLASS = `${COMBO_BOX_CLASS}__input-button-separator`;\nconst TOGGLE_LIST_BUTTON_CLASS = `${COMBO_BOX_CLASS}__toggle-list`;\nconst TOGGLE_LIST_BUTTON_WRAPPER_CLASS = `${TOGGLE_LIST_BUTTON_CLASS}__wrapper`;\nconst LIST_CLASS = `${COMBO_BOX_CLASS}__list`;\nconst LIST_OPTION_CLASS = `${COMBO_BOX_CLASS}__list-option`;\nconst LIST_OPTION_FOCUSED_CLASS = `${LIST_OPTION_CLASS}--focused`;\nconst LIST_OPTION_SELECTED_CLASS = `${LIST_OPTION_CLASS}--selected`;\nconst STATUS_CLASS = `${COMBO_BOX_CLASS}__status`;\n\nconst COMBO_BOX = `.${COMBO_BOX_CLASS}`;\nconst SELECT = `.${SELECT_CLASS}`;\nconst INPUT = `.${INPUT_CLASS}`;\nconst CLEAR_INPUT_BUTTON = `.${CLEAR_INPUT_BUTTON_CLASS}`;\nconst TOGGLE_LIST_BUTTON = `.${TOGGLE_LIST_BUTTON_CLASS}`;\nconst LIST = `.${LIST_CLASS}`;\nconst LIST_OPTION = `.${LIST_OPTION_CLASS}`;\nconst LIST_OPTION_FOCUSED = `.${LIST_OPTION_FOCUSED_CLASS}`;\nconst LIST_OPTION_SELECTED = `.${LIST_OPTION_SELECTED_CLASS}`;\nconst STATUS = `.${STATUS_CLASS}`;\n\nconst DEFAULT_FILTER = \".*{{query}}.*\";\n\nconst noop = () => {};\n\n/**\n * set the value of the element and dispatch a change event\n *\n * @param {HTMLInputElement|HTMLSelectElement} el The element to update\n * @param {string} value The new value of the element\n */\nconst changeElementValue = (el, value = \"\") => {\n const elementToChange = el;\n elementToChange.value = value;\n\n const event = new CustomEvent(\"change\", {\n bubbles: true,\n cancelable: true,\n detail: { value },\n });\n elementToChange.dispatchEvent(event);\n};\n\n/**\n * The elements within the combo box.\n * @typedef {Object} ComboBoxContext\n * @property {HTMLElement} comboBoxEl\n * @property {HTMLSelectElement} selectEl\n * @property {HTMLInputElement} inputEl\n * @property {HTMLUListElement} listEl\n * @property {HTMLDivElement} statusEl\n * @property {HTMLLIElement} focusedOptionEl\n * @property {HTMLLIElement} selectedOptionEl\n * @property {HTMLButtonElement} toggleListBtnEl\n * @property {HTMLButtonElement} clearInputBtnEl\n * @property {boolean} isPristine\n * @property {boolean} disableFiltering\n */\n\n/**\n * Get an object of elements belonging directly to the given\n * combo box component.\n *\n * @param {HTMLElement} el the element within the combo box\n * @returns {ComboBoxContext} elements\n */\nconst getComboBoxContext = (el) => {\n const comboBoxEl = el.closest(COMBO_BOX);\n\n if (!comboBoxEl) {\n throw new Error(`Element is missing outer ${COMBO_BOX}`);\n }\n\n const selectEl = comboBoxEl.querySelector(SELECT);\n const inputEl = comboBoxEl.querySelector(INPUT);\n const listEl = comboBoxEl.querySelector(LIST);\n const statusEl = comboBoxEl.querySelector(STATUS);\n const focusedOptionEl = comboBoxEl.querySelector(LIST_OPTION_FOCUSED);\n const selectedOptionEl = comboBoxEl.querySelector(LIST_OPTION_SELECTED);\n const toggleListBtnEl = comboBoxEl.querySelector(TOGGLE_LIST_BUTTON);\n const clearInputBtnEl = comboBoxEl.querySelector(CLEAR_INPUT_BUTTON);\n\n const isPristine = comboBoxEl.classList.contains(COMBO_BOX_PRISTINE_CLASS);\n const disableFiltering = comboBoxEl.dataset.disableFiltering === \"true\";\n\n return {\n comboBoxEl,\n selectEl,\n inputEl,\n listEl,\n statusEl,\n focusedOptionEl,\n selectedOptionEl,\n toggleListBtnEl,\n clearInputBtnEl,\n isPristine,\n disableFiltering,\n };\n};\n\n/**\n * Disable the combo-box component\n *\n * @param {HTMLInputElement} el An element within the combo box component\n */\nconst disable = (el) => {\n const { inputEl, toggleListBtnEl, clearInputBtnEl } = getComboBoxContext(el);\n\n clearInputBtnEl.hidden = true;\n clearInputBtnEl.disabled = true;\n toggleListBtnEl.disabled = true;\n inputEl.disabled = true;\n};\n\n/**\n * Check for aria-disabled on initialization\n *\n * @param {HTMLInputElement} el An element within the combo box component\n */\nconst ariaDisable = (el) => {\n const { inputEl, toggleListBtnEl, clearInputBtnEl } = getComboBoxContext(el);\n\n clearInputBtnEl.hidden = true;\n clearInputBtnEl.setAttribute(\"aria-disabled\", true);\n toggleListBtnEl.setAttribute(\"aria-disabled\", true);\n inputEl.setAttribute(\"aria-disabled\", true);\n};\n\n/**\n * Enable the combo-box component\n *\n * @param {HTMLInputElement} el An element within the combo box component\n */\nconst enable = (el) => {\n const { inputEl, toggleListBtnEl, clearInputBtnEl } = getComboBoxContext(el);\n\n clearInputBtnEl.hidden = false;\n clearInputBtnEl.disabled = false;\n toggleListBtnEl.disabled = false;\n inputEl.disabled = false;\n};\n\n/**\n * Enhance a select element into a combo box component.\n *\n * @param {HTMLElement} _comboBoxEl The initial element of the combo box component\n */\nconst enhanceComboBox = (_comboBoxEl) => {\n const comboBoxEl = _comboBoxEl.closest(COMBO_BOX);\n\n if (comboBoxEl.dataset.enhanced) return;\n\n const selectEl = comboBoxEl.querySelector(\"select\");\n\n if (!selectEl) {\n throw new Error(`${COMBO_BOX} is missing inner select`);\n }\n\n const selectId = selectEl.id;\n const selectLabel = document.querySelector(`label[for=\"${selectId}\"]`);\n const listId = `${selectId}--list`;\n const listIdLabel = `${selectId}-label`;\n const assistiveHintID = `${selectId}--assistiveHint`;\n const additionalAttributes = [];\n const { defaultValue } = comboBoxEl.dataset;\n const { placeholder } = comboBoxEl.dataset;\n let selectedOption;\n\n if (placeholder) {\n additionalAttributes.push({ placeholder });\n }\n\n if (defaultValue) {\n for (let i = 0, len = selectEl.options.length; i < len; i += 1) {\n const optionEl = selectEl.options[i];\n\n if (optionEl.value === defaultValue) {\n selectedOption = optionEl;\n break;\n }\n }\n }\n\n /**\n * Throw error if combobox is missing a label or label is missing\n * `for` attribute. Otherwise, set the ID to match the
    aria-labelledby\n */\n if (!selectLabel || !selectLabel.matches(`label[for=\"${selectId}\"]`)) {\n throw new Error(\n `${COMBO_BOX} for ${selectId} is either missing a label or a \"for\" attribute`,\n );\n } else {\n selectLabel.setAttribute(\"id\", listIdLabel);\n }\n\n selectLabel.setAttribute(\"id\", listIdLabel);\n selectEl.setAttribute(\"aria-hidden\", \"true\");\n selectEl.setAttribute(\"tabindex\", \"-1\");\n selectEl.classList.add(\"usa-sr-only\", SELECT_CLASS);\n selectEl.id = \"\";\n selectEl.value = \"\";\n\n [\"required\", \"aria-label\", \"aria-labelledby\"].forEach((name) => {\n if (selectEl.hasAttribute(name)) {\n const value = selectEl.getAttribute(name);\n additionalAttributes.push({ [name]: value });\n selectEl.removeAttribute(name);\n }\n });\n\n // sanitize doesn't like functions in template literals\n const input = document.createElement(\"input\");\n input.setAttribute(\"id\", selectId);\n input.setAttribute(\"aria-owns\", listId);\n input.setAttribute(\"aria-controls\", listId);\n input.setAttribute(\"aria-autocomplete\", \"list\");\n input.setAttribute(\"aria-describedby\", assistiveHintID);\n input.setAttribute(\"aria-expanded\", \"false\");\n input.setAttribute(\"autocapitalize\", \"off\");\n input.setAttribute(\"autocomplete\", \"off\");\n input.setAttribute(\"class\", INPUT_CLASS);\n input.setAttribute(\"type\", \"text\");\n input.setAttribute(\"role\", \"combobox\");\n additionalAttributes.forEach((attr) =>\n Object.keys(attr).forEach((key) => {\n const value = Sanitizer.escapeHTML`${attr[key]}`;\n input.setAttribute(key, value);\n }),\n );\n\n comboBoxEl.insertAdjacentElement(\"beforeend\", input);\n\n comboBoxEl.insertAdjacentHTML(\n \"beforeend\",\n Sanitizer.escapeHTML`\n \n \n \n  \n \n \n \n
\n
\n \n When autocomplete results are available use up and down arrows to review and enter to select.\n Touch device users, explore by touch or with swipe gestures.\n `,\n );\n\n if (selectedOption) {\n const { inputEl } = getComboBoxContext(comboBoxEl);\n changeElementValue(selectEl, selectedOption.value);\n changeElementValue(inputEl, selectedOption.text);\n comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS);\n }\n\n if (selectEl.disabled) {\n disable(comboBoxEl);\n selectEl.disabled = false;\n }\n\n if (selectEl.hasAttribute(\"aria-disabled\")) {\n ariaDisable(comboBoxEl);\n selectEl.removeAttribute(\"aria-disabled\");\n }\n\n comboBoxEl.dataset.enhanced = \"true\";\n};\n\n/**\n * Manage the focused element within the list options when\n * navigating via keyboard.\n *\n * @param {HTMLElement} el An anchor element within the combo box component\n * @param {HTMLElement} nextEl An element within the combo box component\n * @param {Object} options options\n * @param {boolean} options.skipFocus skip focus of highlighted item\n * @param {boolean} options.preventScroll should skip procedure to scroll to element\n */\nconst highlightOption = (el, nextEl, { skipFocus, preventScroll } = {}) => {\n const { inputEl, listEl, focusedOptionEl } = getComboBoxContext(el);\n\n if (focusedOptionEl) {\n focusedOptionEl.classList.remove(LIST_OPTION_FOCUSED_CLASS);\n focusedOptionEl.setAttribute(\"tabIndex\", \"-1\");\n }\n\n if (nextEl) {\n inputEl.setAttribute(\"aria-activedescendant\", nextEl.id);\n nextEl.setAttribute(\"tabIndex\", \"0\");\n nextEl.classList.add(LIST_OPTION_FOCUSED_CLASS);\n\n if (!preventScroll) {\n const optionBottom = nextEl.offsetTop + nextEl.offsetHeight;\n const currentBottom = listEl.scrollTop + listEl.offsetHeight;\n\n if (optionBottom > currentBottom) {\n listEl.scrollTop = optionBottom - listEl.offsetHeight;\n }\n\n if (nextEl.offsetTop < listEl.scrollTop) {\n listEl.scrollTop = nextEl.offsetTop;\n }\n }\n\n if (!skipFocus) {\n nextEl.focus({ preventScroll });\n }\n } else {\n inputEl.setAttribute(\"aria-activedescendant\", \"\");\n inputEl.focus();\n }\n};\n\n/**\n * Generate a dynamic regular expression based off of a replaceable and possibly filtered value.\n *\n * @param {string} el An element within the combo box component\n * @param {string} query The value to use in the regular expression\n * @param {object} extras An object of regular expressions to replace and filter the query\n */\nconst generateDynamicRegExp = (filter, query = \"\", extras = {}) => {\n const escapeRegExp = (text) =>\n text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n\n let find = filter.replace(/{{(.*?)}}/g, (m, $1) => {\n const key = $1.trim();\n const queryFilter = extras[key];\n if (key !== \"query\" && queryFilter) {\n const matcher = new RegExp(queryFilter, \"i\");\n const matches = query.match(matcher);\n\n if (matches) {\n return escapeRegExp(matches[1]);\n }\n\n return \"\";\n }\n return escapeRegExp(query);\n });\n\n find = `^(?:${find})$`;\n\n return new RegExp(find, \"i\");\n};\n\n/**\n * Display the option list of a combo box component.\n *\n * @param {HTMLElement} el An element within the combo box component\n */\nconst displayList = (el) => {\n const {\n comboBoxEl,\n selectEl,\n inputEl,\n listEl,\n statusEl,\n isPristine,\n disableFiltering,\n } = getComboBoxContext(el);\n let selectedItemId;\n let firstFoundId;\n\n const listOptionBaseId = `${listEl.id}--option-`;\n\n const inputValue = (inputEl.value || \"\").toLowerCase();\n const filter = comboBoxEl.dataset.filter || DEFAULT_FILTER;\n const regex = generateDynamicRegExp(filter, inputValue, comboBoxEl.dataset);\n\n const options = [];\n for (let i = 0, len = selectEl.options.length; i < len; i += 1) {\n const optionEl = selectEl.options[i];\n const optionId = `${listOptionBaseId}${options.length}`;\n\n if (\n optionEl.value &&\n (disableFiltering ||\n isPristine ||\n !inputValue ||\n regex.test(optionEl.text))\n ) {\n if (selectEl.value && optionEl.value === selectEl.value) {\n selectedItemId = optionId;\n }\n\n if (disableFiltering && !firstFoundId && regex.test(optionEl.text)) {\n firstFoundId = optionId;\n }\n options.push(optionEl);\n }\n }\n\n const numOptions = options.length;\n const optionHtml = options.map((option, index) => {\n const optionId = `${listOptionBaseId}${index}`;\n const classes = [LIST_OPTION_CLASS];\n let tabindex = \"-1\";\n let ariaSelected = \"false\";\n\n if (optionId === selectedItemId) {\n classes.push(LIST_OPTION_SELECTED_CLASS, LIST_OPTION_FOCUSED_CLASS);\n tabindex = \"0\";\n ariaSelected = \"true\";\n }\n\n if (!selectedItemId && index === 0) {\n classes.push(LIST_OPTION_FOCUSED_CLASS);\n tabindex = \"0\";\n }\n\n const li = document.createElement(\"li\");\n\n li.setAttribute(\"aria-setsize\", options.length);\n li.setAttribute(\"aria-posinset\", index + 1);\n li.setAttribute(\"aria-selected\", ariaSelected);\n li.setAttribute(\"id\", optionId);\n li.setAttribute(\"class\", classes.join(\" \"));\n li.setAttribute(\"tabindex\", tabindex);\n li.setAttribute(\"role\", \"option\");\n li.setAttribute(\"data-value\", option.value);\n li.textContent = option.text;\n\n return li;\n });\n\n const noResults = document.createElement(\"li\");\n noResults.setAttribute(\"class\", `${LIST_OPTION_CLASS}--no-results`);\n noResults.textContent = \"No results found\";\n\n listEl.hidden = false;\n\n if (numOptions) {\n listEl.innerHTML = \"\";\n optionHtml.forEach((item) =>\n listEl.insertAdjacentElement(\"beforeend\", item),\n );\n } else {\n listEl.innerHTML = \"\";\n listEl.insertAdjacentElement(\"beforeend\", noResults);\n }\n\n inputEl.setAttribute(\"aria-expanded\", \"true\");\n\n statusEl.textContent = numOptions\n ? `${numOptions} result${numOptions > 1 ? \"s\" : \"\"} available.`\n : \"No results.\";\n\n let itemToFocus;\n\n if (isPristine && selectedItemId) {\n itemToFocus = listEl.querySelector(`#${selectedItemId}`);\n } else if (disableFiltering && firstFoundId) {\n itemToFocus = listEl.querySelector(`#${firstFoundId}`);\n }\n\n if (itemToFocus) {\n highlightOption(listEl, itemToFocus, {\n skipFocus: true,\n });\n }\n};\n\n/**\n * Hide the option list of a combo box component.\n *\n * @param {HTMLElement} el An element within the combo box component\n */\nconst hideList = (el) => {\n const { inputEl, listEl, statusEl, focusedOptionEl } = getComboBoxContext(el);\n\n statusEl.innerHTML = \"\";\n\n inputEl.setAttribute(\"aria-expanded\", \"false\");\n inputEl.setAttribute(\"aria-activedescendant\", \"\");\n\n if (focusedOptionEl) {\n focusedOptionEl.classList.remove(LIST_OPTION_FOCUSED_CLASS);\n }\n\n listEl.scrollTop = 0;\n listEl.hidden = true;\n};\n\n/**\n * Select an option list of the combo box component.\n *\n * @param {HTMLElement} listOptionEl The list option being selected\n */\nconst selectItem = (listOptionEl) => {\n const { comboBoxEl, selectEl, inputEl } = getComboBoxContext(listOptionEl);\n\n changeElementValue(selectEl, listOptionEl.dataset.value);\n changeElementValue(inputEl, listOptionEl.textContent);\n comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS);\n hideList(comboBoxEl);\n inputEl.focus();\n};\n\n/**\n * Clear the input of the combo box\n *\n * @param {HTMLButtonElement} clearButtonEl The clear input button\n */\nconst clearInput = (clearButtonEl) => {\n const { comboBoxEl, listEl, selectEl, inputEl } =\n getComboBoxContext(clearButtonEl);\n const listShown = !listEl.hidden;\n\n if (selectEl.value) changeElementValue(selectEl);\n if (inputEl.value) changeElementValue(inputEl);\n comboBoxEl.classList.remove(COMBO_BOX_PRISTINE_CLASS);\n\n if (listShown) displayList(comboBoxEl);\n inputEl.focus();\n};\n\n/**\n * Reset the select based off of currently set select value\n *\n * @param {HTMLElement} el An element within the combo box component\n */\nconst resetSelection = (el) => {\n const { comboBoxEl, selectEl, inputEl } = getComboBoxContext(el);\n\n const selectValue = selectEl.value;\n const inputValue = (inputEl.value || \"\").toLowerCase();\n\n if (selectValue) {\n for (let i = 0, len = selectEl.options.length; i < len; i += 1) {\n const optionEl = selectEl.options[i];\n if (optionEl.value === selectValue) {\n if (inputValue !== optionEl.text) {\n changeElementValue(inputEl, optionEl.text);\n }\n comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS);\n return;\n }\n }\n }\n\n if (inputValue) {\n changeElementValue(inputEl);\n }\n};\n\n/**\n * Select an option list of the combo box component based off of\n * having a current focused list option or\n * having test that completely matches a list option.\n * Otherwise it clears the input and select.\n *\n * @param {HTMLElement} el An element within the combo box component\n */\nconst completeSelection = (el) => {\n const { comboBoxEl, selectEl, inputEl, statusEl } = getComboBoxContext(el);\n\n statusEl.textContent = \"\";\n\n const inputValue = (inputEl.value || \"\").toLowerCase();\n\n if (inputValue) {\n for (let i = 0, len = selectEl.options.length; i < len; i += 1) {\n const optionEl = selectEl.options[i];\n if (optionEl.text.toLowerCase() === inputValue) {\n changeElementValue(selectEl, optionEl.value);\n changeElementValue(inputEl, optionEl.text);\n comboBoxEl.classList.add(COMBO_BOX_PRISTINE_CLASS);\n return;\n }\n }\n }\n\n resetSelection(comboBoxEl);\n};\n\n/**\n * Handle the escape event within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleEscape = (event) => {\n const { comboBoxEl, inputEl } = getComboBoxContext(event.target);\n\n hideList(comboBoxEl);\n resetSelection(comboBoxEl);\n inputEl.focus();\n};\n\n/**\n * Handle the down event within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleDownFromInput = (event) => {\n const { comboBoxEl, listEl } = getComboBoxContext(event.target);\n\n if (listEl.hidden) {\n displayList(comboBoxEl);\n }\n\n const nextOptionEl =\n listEl.querySelector(LIST_OPTION_FOCUSED) ||\n listEl.querySelector(LIST_OPTION);\n\n if (nextOptionEl) {\n highlightOption(comboBoxEl, nextOptionEl);\n }\n\n event.preventDefault();\n};\n\n/**\n * Handle the enter event from an input element within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleEnterFromInput = (event) => {\n const { comboBoxEl, listEl } = getComboBoxContext(event.target);\n const listShown = !listEl.hidden;\n\n completeSelection(comboBoxEl);\n\n if (listShown) {\n hideList(comboBoxEl);\n }\n\n event.preventDefault();\n};\n\n/**\n * Handle the down event within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleDownFromListOption = (event) => {\n const focusedOptionEl = event.target;\n const nextOptionEl = focusedOptionEl.nextSibling;\n\n if (nextOptionEl) {\n highlightOption(focusedOptionEl, nextOptionEl);\n }\n\n event.preventDefault();\n};\n\n/**\n * Handle the space event from an list option element within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleSpaceFromListOption = (event) => {\n selectItem(event.target);\n event.preventDefault();\n};\n\n/**\n * Handle the enter event from list option within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleEnterFromListOption = (event) => {\n selectItem(event.target);\n event.preventDefault();\n};\n\n/**\n * Handle the up event from list option within the combo box component.\n *\n * @param {KeyboardEvent} event An event within the combo box component\n */\nconst handleUpFromListOption = (event) => {\n const { comboBoxEl, listEl, focusedOptionEl } = getComboBoxContext(\n event.target,\n );\n const nextOptionEl = focusedOptionEl && focusedOptionEl.previousSibling;\n const listShown = !listEl.hidden;\n\n highlightOption(comboBoxEl, nextOptionEl);\n\n if (listShown) {\n event.preventDefault();\n }\n\n if (!nextOptionEl) {\n hideList(comboBoxEl);\n }\n};\n\n/**\n * Select list option on the mouseover event.\n *\n * @param {MouseEvent} event The mouseover event\n * @param {HTMLLIElement} listOptionEl An element within the combo box component\n */\nconst handleMouseover = (listOptionEl) => {\n const isCurrentlyFocused = listOptionEl.classList.contains(\n LIST_OPTION_FOCUSED_CLASS,\n );\n\n if (isCurrentlyFocused) return;\n\n highlightOption(listOptionEl, listOptionEl, {\n preventScroll: true,\n });\n};\n\n/**\n * Toggle the list when the button is clicked\n *\n * @param {HTMLElement} el An element within the combo box component\n */\nconst toggleList = (el) => {\n const { comboBoxEl, listEl, inputEl } = getComboBoxContext(el);\n\n if (listEl.hidden) {\n displayList(comboBoxEl);\n } else {\n hideList(comboBoxEl);\n }\n\n inputEl.focus();\n};\n\n/**\n * Handle click from input\n *\n * @param {HTMLInputElement} el An element within the combo box component\n */\nconst handleClickFromInput = (el) => {\n const { comboBoxEl, listEl } = getComboBoxContext(el);\n\n if (listEl.hidden) {\n displayList(comboBoxEl);\n }\n};\n\nconst comboBox = behavior(\n {\n [CLICK]: {\n [INPUT]() {\n if (this.disabled) return;\n handleClickFromInput(this);\n },\n [TOGGLE_LIST_BUTTON]() {\n if (this.disabled) return;\n toggleList(this);\n },\n [LIST_OPTION]() {\n if (this.disabled) return;\n selectItem(this);\n },\n [CLEAR_INPUT_BUTTON]() {\n if (this.disabled) return;\n clearInput(this);\n },\n },\n focusout: {\n [COMBO_BOX](event) {\n if (!this.contains(event.relatedTarget)) {\n resetSelection(this);\n hideList(this);\n }\n },\n },\n keydown: {\n [COMBO_BOX]: keymap({\n Escape: handleEscape,\n }),\n [INPUT]: keymap({\n Enter: handleEnterFromInput,\n ArrowDown: handleDownFromInput,\n Down: handleDownFromInput,\n }),\n [LIST_OPTION]: keymap({\n ArrowUp: handleUpFromListOption,\n Up: handleUpFromListOption,\n ArrowDown: handleDownFromListOption,\n Down: handleDownFromListOption,\n Enter: handleEnterFromListOption,\n \" \": handleSpaceFromListOption,\n \"Shift+Tab\": noop,\n }),\n },\n input: {\n [INPUT]() {\n const comboBoxEl = this.closest(COMBO_BOX);\n comboBoxEl.classList.remove(COMBO_BOX_PRISTINE_CLASS);\n displayList(this);\n },\n },\n mouseover: {\n [LIST_OPTION]() {\n handleMouseover(this);\n },\n },\n },\n {\n init(root) {\n selectOrMatches(COMBO_BOX, root).forEach((comboBoxEl) => {\n enhanceComboBox(comboBoxEl);\n });\n },\n getComboBoxContext,\n enhanceComboBox,\n generateDynamicRegExp,\n disable,\n enable,\n displayList,\n hideList,\n COMBO_BOX_CLASS,\n },\n);\n\nmodule.exports = comboBox;\n","const keymap = require(\"receptor/keymap\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst select = require(\"../../uswds-core/src/js/utils/select\");\nconst selectOrMatches = require(\"../../uswds-core/src/js/utils/select-or-matches\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\nconst activeElement = require(\"../../uswds-core/src/js/utils/active-element\");\nconst isIosDevice = require(\"../../uswds-core/src/js/utils/is-ios-device\");\nconst Sanitizer = require(\"../../uswds-core/src/js/utils/sanitizer\");\n\nconst DATE_PICKER_CLASS = `${PREFIX}-date-picker`;\nconst DATE_PICKER_WRAPPER_CLASS = `${DATE_PICKER_CLASS}__wrapper`;\nconst DATE_PICKER_INITIALIZED_CLASS = `${DATE_PICKER_CLASS}--initialized`;\nconst DATE_PICKER_ACTIVE_CLASS = `${DATE_PICKER_CLASS}--active`;\nconst DATE_PICKER_INTERNAL_INPUT_CLASS = `${DATE_PICKER_CLASS}__internal-input`;\nconst DATE_PICKER_EXTERNAL_INPUT_CLASS = `${DATE_PICKER_CLASS}__external-input`;\nconst DATE_PICKER_BUTTON_CLASS = `${DATE_PICKER_CLASS}__button`;\nconst DATE_PICKER_CALENDAR_CLASS = `${DATE_PICKER_CLASS}__calendar`;\nconst DATE_PICKER_STATUS_CLASS = `${DATE_PICKER_CLASS}__status`;\nconst CALENDAR_DATE_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__date`;\n\nconst CALENDAR_DATE_FOCUSED_CLASS = `${CALENDAR_DATE_CLASS}--focused`;\nconst CALENDAR_DATE_SELECTED_CLASS = `${CALENDAR_DATE_CLASS}--selected`;\nconst CALENDAR_DATE_PREVIOUS_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--previous-month`;\nconst CALENDAR_DATE_CURRENT_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--current-month`;\nconst CALENDAR_DATE_NEXT_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--next-month`;\nconst CALENDAR_DATE_RANGE_DATE_CLASS = `${CALENDAR_DATE_CLASS}--range-date`;\nconst CALENDAR_DATE_TODAY_CLASS = `${CALENDAR_DATE_CLASS}--today`;\nconst CALENDAR_DATE_RANGE_DATE_START_CLASS = `${CALENDAR_DATE_CLASS}--range-date-start`;\nconst CALENDAR_DATE_RANGE_DATE_END_CLASS = `${CALENDAR_DATE_CLASS}--range-date-end`;\nconst CALENDAR_DATE_WITHIN_RANGE_CLASS = `${CALENDAR_DATE_CLASS}--within-range`;\nconst CALENDAR_PREVIOUS_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-year`;\nconst CALENDAR_PREVIOUS_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-month`;\nconst CALENDAR_NEXT_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-year`;\nconst CALENDAR_NEXT_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-month`;\nconst CALENDAR_MONTH_SELECTION_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-selection`;\nconst CALENDAR_YEAR_SELECTION_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year-selection`;\nconst CALENDAR_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month`;\nconst CALENDAR_MONTH_FOCUSED_CLASS = `${CALENDAR_MONTH_CLASS}--focused`;\nconst CALENDAR_MONTH_SELECTED_CLASS = `${CALENDAR_MONTH_CLASS}--selected`;\nconst CALENDAR_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year`;\nconst CALENDAR_YEAR_FOCUSED_CLASS = `${CALENDAR_YEAR_CLASS}--focused`;\nconst CALENDAR_YEAR_SELECTED_CLASS = `${CALENDAR_YEAR_CLASS}--selected`;\nconst CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-year-chunk`;\nconst CALENDAR_NEXT_YEAR_CHUNK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-year-chunk`;\nconst CALENDAR_DATE_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__date-picker`;\nconst CALENDAR_MONTH_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-picker`;\nconst CALENDAR_YEAR_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year-picker`;\nconst CALENDAR_TABLE_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__table`;\nconst CALENDAR_ROW_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__row`;\nconst CALENDAR_CELL_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__cell`;\nconst CALENDAR_CELL_CENTER_ITEMS_CLASS = `${CALENDAR_CELL_CLASS}--center-items`;\nconst CALENDAR_MONTH_LABEL_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-label`;\nconst CALENDAR_DAY_OF_WEEK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__day-of-week`;\n\nconst DATE_PICKER = `.${DATE_PICKER_CLASS}`;\nconst DATE_PICKER_BUTTON = `.${DATE_PICKER_BUTTON_CLASS}`;\nconst DATE_PICKER_INTERNAL_INPUT = `.${DATE_PICKER_INTERNAL_INPUT_CLASS}`;\nconst DATE_PICKER_EXTERNAL_INPUT = `.${DATE_PICKER_EXTERNAL_INPUT_CLASS}`;\nconst DATE_PICKER_CALENDAR = `.${DATE_PICKER_CALENDAR_CLASS}`;\nconst DATE_PICKER_STATUS = `.${DATE_PICKER_STATUS_CLASS}`;\nconst CALENDAR_DATE = `.${CALENDAR_DATE_CLASS}`;\nconst CALENDAR_DATE_FOCUSED = `.${CALENDAR_DATE_FOCUSED_CLASS}`;\nconst CALENDAR_DATE_CURRENT_MONTH = `.${CALENDAR_DATE_CURRENT_MONTH_CLASS}`;\nconst CALENDAR_PREVIOUS_YEAR = `.${CALENDAR_PREVIOUS_YEAR_CLASS}`;\nconst CALENDAR_PREVIOUS_MONTH = `.${CALENDAR_PREVIOUS_MONTH_CLASS}`;\nconst CALENDAR_NEXT_YEAR = `.${CALENDAR_NEXT_YEAR_CLASS}`;\nconst CALENDAR_NEXT_MONTH = `.${CALENDAR_NEXT_MONTH_CLASS}`;\nconst CALENDAR_YEAR_SELECTION = `.${CALENDAR_YEAR_SELECTION_CLASS}`;\nconst CALENDAR_MONTH_SELECTION = `.${CALENDAR_MONTH_SELECTION_CLASS}`;\nconst CALENDAR_MONTH = `.${CALENDAR_MONTH_CLASS}`;\nconst CALENDAR_YEAR = `.${CALENDAR_YEAR_CLASS}`;\nconst CALENDAR_PREVIOUS_YEAR_CHUNK = `.${CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS}`;\nconst CALENDAR_NEXT_YEAR_CHUNK = `.${CALENDAR_NEXT_YEAR_CHUNK_CLASS}`;\nconst CALENDAR_DATE_PICKER = `.${CALENDAR_DATE_PICKER_CLASS}`;\nconst CALENDAR_MONTH_PICKER = `.${CALENDAR_MONTH_PICKER_CLASS}`;\nconst CALENDAR_YEAR_PICKER = `.${CALENDAR_YEAR_PICKER_CLASS}`;\nconst CALENDAR_MONTH_FOCUSED = `.${CALENDAR_MONTH_FOCUSED_CLASS}`;\nconst CALENDAR_YEAR_FOCUSED = `.${CALENDAR_YEAR_FOCUSED_CLASS}`;\n\nconst VALIDATION_MESSAGE = \"Please enter a valid date\";\n\nconst MONTH_LABELS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAY_OF_WEEK_LABELS = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n];\n\nconst ENTER_KEYCODE = 13;\n\nconst YEAR_CHUNK = 12;\n\nconst DEFAULT_MIN_DATE = \"0000-01-01\";\nconst DEFAULT_EXTERNAL_DATE_FORMAT = \"MM/DD/YYYY\";\nconst INTERNAL_DATE_FORMAT = \"YYYY-MM-DD\";\n\nconst NOT_DISABLED_SELECTOR = \":not([disabled])\";\n\nconst processFocusableSelectors = (...selectors) =>\n selectors.map((query) => query + NOT_DISABLED_SELECTOR).join(\", \");\n\nconst DATE_PICKER_FOCUSABLE = processFocusableSelectors(\n CALENDAR_PREVIOUS_YEAR,\n CALENDAR_PREVIOUS_MONTH,\n CALENDAR_YEAR_SELECTION,\n CALENDAR_MONTH_SELECTION,\n CALENDAR_NEXT_YEAR,\n CALENDAR_NEXT_MONTH,\n CALENDAR_DATE_FOCUSED,\n);\n\nconst MONTH_PICKER_FOCUSABLE = processFocusableSelectors(\n CALENDAR_MONTH_FOCUSED,\n);\n\nconst YEAR_PICKER_FOCUSABLE = processFocusableSelectors(\n CALENDAR_PREVIOUS_YEAR_CHUNK,\n CALENDAR_NEXT_YEAR_CHUNK,\n CALENDAR_YEAR_FOCUSED,\n);\n\n// #region Date Manipulation Functions\n\n/**\n * Keep date within month. Month would only be over by 1 to 3 days\n *\n * @param {Date} dateToCheck the date object to check\n * @param {number} month the correct month\n * @returns {Date} the date, corrected if needed\n */\nconst keepDateWithinMonth = (dateToCheck, month) => {\n if (month !== dateToCheck.getMonth()) {\n dateToCheck.setDate(0);\n }\n\n return dateToCheck;\n};\n\n/**\n * Set date from month day year\n *\n * @param {number} year the year to set\n * @param {number} month the month to set (zero-indexed)\n * @param {number} date the date to set\n * @returns {Date} the set date\n */\nconst setDate = (year, month, date) => {\n const newDate = new Date(0);\n newDate.setFullYear(year, month, date);\n return newDate;\n};\n\n/**\n * todays date\n *\n * @returns {Date} todays date\n */\nconst today = () => {\n const newDate = new Date();\n const day = newDate.getDate();\n const month = newDate.getMonth();\n const year = newDate.getFullYear();\n return setDate(year, month, day);\n};\n\n/**\n * Set date to first day of the month\n *\n * @param {number} date the date to adjust\n * @returns {Date} the adjusted date\n */\nconst startOfMonth = (date) => {\n const newDate = new Date(0);\n newDate.setFullYear(date.getFullYear(), date.getMonth(), 1);\n return newDate;\n};\n\n/**\n * Set date to last day of the month\n *\n * @param {number} date the date to adjust\n * @returns {Date} the adjusted date\n */\nconst lastDayOfMonth = (date) => {\n const newDate = new Date(0);\n newDate.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);\n return newDate;\n};\n\n/**\n * Add days to date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numDays the difference in days\n * @returns {Date} the adjusted date\n */\nconst addDays = (_date, numDays) => {\n const newDate = new Date(_date.getTime());\n newDate.setDate(newDate.getDate() + numDays);\n return newDate;\n};\n\n/**\n * Subtract days from date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numDays the difference in days\n * @returns {Date} the adjusted date\n */\nconst subDays = (_date, numDays) => addDays(_date, -numDays);\n\n/**\n * Add weeks to date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numWeeks the difference in weeks\n * @returns {Date} the adjusted date\n */\nconst addWeeks = (_date, numWeeks) => addDays(_date, numWeeks * 7);\n\n/**\n * Subtract weeks from date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numWeeks the difference in weeks\n * @returns {Date} the adjusted date\n */\nconst subWeeks = (_date, numWeeks) => addWeeks(_date, -numWeeks);\n\n/**\n * Set date to the start of the week (Sunday)\n *\n * @param {Date} _date the date to adjust\n * @returns {Date} the adjusted date\n */\nconst startOfWeek = (_date) => {\n const dayOfWeek = _date.getDay();\n return subDays(_date, dayOfWeek);\n};\n\n/**\n * Set date to the end of the week (Saturday)\n *\n * @param {Date} _date the date to adjust\n * @param {number} numWeeks the difference in weeks\n * @returns {Date} the adjusted date\n */\nconst endOfWeek = (_date) => {\n const dayOfWeek = _date.getDay();\n return addDays(_date, 6 - dayOfWeek);\n};\n\n/**\n * Add months to date and keep date within month\n *\n * @param {Date} _date the date to adjust\n * @param {number} numMonths the difference in months\n * @returns {Date} the adjusted date\n */\nconst addMonths = (_date, numMonths) => {\n const newDate = new Date(_date.getTime());\n\n const dateMonth = (newDate.getMonth() + 12 + numMonths) % 12;\n newDate.setMonth(newDate.getMonth() + numMonths);\n keepDateWithinMonth(newDate, dateMonth);\n\n return newDate;\n};\n\n/**\n * Subtract months from date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numMonths the difference in months\n * @returns {Date} the adjusted date\n */\nconst subMonths = (_date, numMonths) => addMonths(_date, -numMonths);\n\n/**\n * Add years to date and keep date within month\n *\n * @param {Date} _date the date to adjust\n * @param {number} numYears the difference in years\n * @returns {Date} the adjusted date\n */\nconst addYears = (_date, numYears) => addMonths(_date, numYears * 12);\n\n/**\n * Subtract years from date\n *\n * @param {Date} _date the date to adjust\n * @param {number} numYears the difference in years\n * @returns {Date} the adjusted date\n */\nconst subYears = (_date, numYears) => addYears(_date, -numYears);\n\n/**\n * Set months of date\n *\n * @param {Date} _date the date to adjust\n * @param {number} month zero-indexed month to set\n * @returns {Date} the adjusted date\n */\nconst setMonth = (_date, month) => {\n const newDate = new Date(_date.getTime());\n\n newDate.setMonth(month);\n keepDateWithinMonth(newDate, month);\n\n return newDate;\n};\n\n/**\n * Set year of date\n *\n * @param {Date} _date the date to adjust\n * @param {number} year the year to set\n * @returns {Date} the adjusted date\n */\nconst setYear = (_date, year) => {\n const newDate = new Date(_date.getTime());\n\n const month = newDate.getMonth();\n newDate.setFullYear(year);\n keepDateWithinMonth(newDate, month);\n\n return newDate;\n};\n\n/**\n * Return the earliest date\n *\n * @param {Date} dateA date to compare\n * @param {Date} dateB date to compare\n * @returns {Date} the earliest date\n */\nconst min = (dateA, dateB) => {\n let newDate = dateA;\n\n if (dateB < dateA) {\n newDate = dateB;\n }\n\n return new Date(newDate.getTime());\n};\n\n/**\n * Return the latest date\n *\n * @param {Date} dateA date to compare\n * @param {Date} dateB date to compare\n * @returns {Date} the latest date\n */\nconst max = (dateA, dateB) => {\n let newDate = dateA;\n\n if (dateB > dateA) {\n newDate = dateB;\n }\n\n return new Date(newDate.getTime());\n};\n\n/**\n * Check if dates are the in the same year\n *\n * @param {Date} dateA date to compare\n * @param {Date} dateB date to compare\n * @returns {boolean} are dates in the same year\n */\nconst isSameYear = (dateA, dateB) =>\n dateA && dateB && dateA.getFullYear() === dateB.getFullYear();\n\n/**\n * Check if dates are the in the same month\n *\n * @param {Date} dateA date to compare\n * @param {Date} dateB date to compare\n * @returns {boolean} are dates in the same month\n */\nconst isSameMonth = (dateA, dateB) =>\n isSameYear(dateA, dateB) && dateA.getMonth() === dateB.getMonth();\n\n/**\n * Check if dates are the same date\n *\n * @param {Date} dateA the date to compare\n * @param {Date} dateA the date to compare\n * @returns {boolean} are dates the same date\n */\nconst isSameDay = (dateA, dateB) =>\n isSameMonth(dateA, dateB) && dateA.getDate() === dateB.getDate();\n\n/**\n * return a new date within minimum and maximum date\n *\n * @param {Date} date date to check\n * @param {Date} minDate minimum date to allow\n * @param {Date} maxDate maximum date to allow\n * @returns {Date} the date between min and max\n */\nconst keepDateBetweenMinAndMax = (date, minDate, maxDate) => {\n let newDate = date;\n\n if (date < minDate) {\n newDate = minDate;\n } else if (maxDate && date > maxDate) {\n newDate = maxDate;\n }\n\n return new Date(newDate.getTime());\n};\n\n/**\n * Check if dates is valid.\n *\n * @param {Date} date date to check\n * @param {Date} minDate minimum date to allow\n * @param {Date} maxDate maximum date to allow\n * @return {boolean} is there a day within the month within min and max dates\n */\nconst isDateWithinMinAndMax = (date, minDate, maxDate) =>\n date >= minDate && (!maxDate || date <= maxDate);\n\n/**\n * Check if dates month is invalid.\n *\n * @param {Date} date date to check\n * @param {Date} minDate minimum date to allow\n * @param {Date} maxDate maximum date to allow\n * @return {boolean} is the month outside min or max dates\n */\nconst isDatesMonthOutsideMinOrMax = (date, minDate, maxDate) =>\n lastDayOfMonth(date) < minDate || (maxDate && startOfMonth(date) > maxDate);\n\n/**\n * Check if dates year is invalid.\n *\n * @param {Date} date date to check\n * @param {Date} minDate minimum date to allow\n * @param {Date} maxDate maximum date to allow\n * @return {boolean} is the month outside min or max dates\n */\nconst isDatesYearOutsideMinOrMax = (date, minDate, maxDate) =>\n lastDayOfMonth(setMonth(date, 11)) < minDate ||\n (maxDate && startOfMonth(setMonth(date, 0)) > maxDate);\n\n/**\n * Parse a date with format M-D-YY\n *\n * @param {string} dateString the date string to parse\n * @param {string} dateFormat the format of the date string\n * @param {boolean} adjustDate should the date be adjusted\n * @returns {Date} the parsed date\n */\nconst parseDateString = (\n dateString,\n dateFormat = INTERNAL_DATE_FORMAT,\n adjustDate = false,\n) => {\n let date;\n let month;\n let day;\n let year;\n let parsed;\n\n if (dateString) {\n let monthStr;\n let dayStr;\n let yearStr;\n\n if (dateFormat === DEFAULT_EXTERNAL_DATE_FORMAT) {\n [monthStr, dayStr, yearStr] = dateString.split(\"/\");\n } else {\n [yearStr, monthStr, dayStr] = dateString.split(\"-\");\n }\n\n if (yearStr) {\n parsed = parseInt(yearStr, 10);\n if (!Number.isNaN(parsed)) {\n year = parsed;\n if (adjustDate) {\n year = Math.max(0, year);\n if (yearStr.length < 3) {\n const currentYear = today().getFullYear();\n const currentYearStub =\n currentYear - (currentYear % 10 ** yearStr.length);\n year = currentYearStub + parsed;\n }\n }\n }\n }\n\n if (monthStr) {\n parsed = parseInt(monthStr, 10);\n if (!Number.isNaN(parsed)) {\n month = parsed;\n if (adjustDate) {\n month = Math.max(1, month);\n month = Math.min(12, month);\n }\n }\n }\n\n if (month && dayStr && year != null) {\n parsed = parseInt(dayStr, 10);\n if (!Number.isNaN(parsed)) {\n day = parsed;\n if (adjustDate) {\n const lastDayOfTheMonth = setDate(year, month, 0).getDate();\n day = Math.max(1, day);\n day = Math.min(lastDayOfTheMonth, day);\n }\n }\n }\n\n if (month && day && year != null) {\n date = setDate(year, month - 1, day);\n }\n }\n\n return date;\n};\n\n/**\n * Format a date to format MM-DD-YYYY\n *\n * @param {Date} date the date to format\n * @param {string} dateFormat the format of the date string\n * @returns {string} the formatted date string\n */\nconst formatDate = (date, dateFormat = INTERNAL_DATE_FORMAT) => {\n const padZeros = (value, length) => `0000${value}`.slice(-length);\n\n const month = date.getMonth() + 1;\n const day = date.getDate();\n const year = date.getFullYear();\n\n if (dateFormat === DEFAULT_EXTERNAL_DATE_FORMAT) {\n return [padZeros(month, 2), padZeros(day, 2), padZeros(year, 4)].join(\"/\");\n }\n\n return [padZeros(year, 4), padZeros(month, 2), padZeros(day, 2)].join(\"-\");\n};\n\n// #endregion Date Manipulation Functions\n\n/**\n * Create a grid string from an array of html strings\n *\n * @param {string[]} htmlArray the array of html items\n * @param {number} rowSize the length of a row\n * @returns {string} the grid string\n */\nconst listToGridHtml = (htmlArray, rowSize) => {\n const grid = [];\n let row = [];\n\n let i = 0;\n while (i < htmlArray.length) {\n row = [];\n\n const tr = document.createElement(\"tr\");\n while (i < htmlArray.length && row.length < rowSize) {\n const td = document.createElement(\"td\");\n td.insertAdjacentElement(\"beforeend\", htmlArray[i]);\n row.push(td);\n i += 1;\n }\n\n row.forEach((element) => {\n tr.insertAdjacentElement(\"beforeend\", element);\n });\n\n grid.push(tr);\n }\n\n return grid;\n};\n\nconst createTableBody = (grid) => {\n const tableBody = document.createElement(\"tbody\");\n grid.forEach((element) => {\n tableBody.insertAdjacentElement(\"beforeend\", element);\n });\n\n return tableBody;\n};\n\n/**\n * set the value of the element and dispatch a change event\n *\n * @param {HTMLInputElement} el The element to update\n * @param {string} value The new value of the element\n */\nconst changeElementValue = (el, value = \"\") => {\n const elementToChange = el;\n elementToChange.value = value;\n\n const event = new CustomEvent(\"change\", {\n bubbles: true,\n cancelable: true,\n detail: { value },\n });\n elementToChange.dispatchEvent(event);\n};\n\n/**\n * The properties and elements within the date picker.\n * @typedef {Object} DatePickerContext\n * @property {HTMLDivElement} calendarEl\n * @property {HTMLElement} datePickerEl\n * @property {HTMLInputElement} internalInputEl\n * @property {HTMLInputElement} externalInputEl\n * @property {HTMLDivElement} statusEl\n * @property {HTMLDivElement} firstYearChunkEl\n * @property {Date} calendarDate\n * @property {Date} minDate\n * @property {Date} maxDate\n * @property {Date} selectedDate\n * @property {Date} rangeDate\n * @property {Date} defaultDate\n */\n\n/**\n * Get an object of the properties and elements belonging directly to the given\n * date picker component.\n *\n * @param {HTMLElement} el the element within the date picker\n * @returns {DatePickerContext} elements\n */\nconst getDatePickerContext = (el) => {\n const datePickerEl = el.closest(DATE_PICKER);\n\n if (!datePickerEl) {\n throw new Error(`Element is missing outer ${DATE_PICKER}`);\n }\n\n const internalInputEl = datePickerEl.querySelector(\n DATE_PICKER_INTERNAL_INPUT,\n );\n const externalInputEl = datePickerEl.querySelector(\n DATE_PICKER_EXTERNAL_INPUT,\n );\n const calendarEl = datePickerEl.querySelector(DATE_PICKER_CALENDAR);\n const toggleBtnEl = datePickerEl.querySelector(DATE_PICKER_BUTTON);\n const statusEl = datePickerEl.querySelector(DATE_PICKER_STATUS);\n const firstYearChunkEl = datePickerEl.querySelector(CALENDAR_YEAR);\n\n const inputDate = parseDateString(\n externalInputEl.value,\n DEFAULT_EXTERNAL_DATE_FORMAT,\n true,\n );\n const selectedDate = parseDateString(internalInputEl.value);\n\n const calendarDate = parseDateString(calendarEl.dataset.value);\n const minDate = parseDateString(datePickerEl.dataset.minDate);\n const maxDate = parseDateString(datePickerEl.dataset.maxDate);\n const rangeDate = parseDateString(datePickerEl.dataset.rangeDate);\n const defaultDate = parseDateString(datePickerEl.dataset.defaultDate);\n\n if (minDate && maxDate && minDate > maxDate) {\n throw new Error(\"Minimum date cannot be after maximum date\");\n }\n\n return {\n calendarDate,\n minDate,\n toggleBtnEl,\n selectedDate,\n maxDate,\n firstYearChunkEl,\n datePickerEl,\n inputDate,\n internalInputEl,\n externalInputEl,\n calendarEl,\n rangeDate,\n defaultDate,\n statusEl,\n };\n};\n\n/**\n * Disable the date picker component\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst disable = (el) => {\n const { externalInputEl, toggleBtnEl } = getDatePickerContext(el);\n\n toggleBtnEl.disabled = true;\n externalInputEl.disabled = true;\n};\n\n/**\n * Check for aria-disabled on initialization\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst ariaDisable = (el) => {\n const { externalInputEl, toggleBtnEl } = getDatePickerContext(el);\n\n toggleBtnEl.setAttribute(\"aria-disabled\", true);\n externalInputEl.setAttribute(\"aria-disabled\", true);\n};\n\n/**\n * Enable the date picker component\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst enable = (el) => {\n const { externalInputEl, toggleBtnEl } = getDatePickerContext(el);\n\n toggleBtnEl.disabled = false;\n externalInputEl.disabled = false;\n};\n\n// #region Validation\n\n/**\n * Validate the value in the input as a valid date of format M/D/YYYY\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst isDateInputInvalid = (el) => {\n const { externalInputEl, minDate, maxDate } = getDatePickerContext(el);\n\n const dateString = externalInputEl.value;\n let isInvalid = false;\n\n if (dateString) {\n isInvalid = true;\n\n const dateStringParts = dateString.split(\"/\");\n const [month, day, year] = dateStringParts.map((str) => {\n let value;\n const parsed = parseInt(str, 10);\n if (!Number.isNaN(parsed)) value = parsed;\n return value;\n });\n\n if (month && day && year != null) {\n const checkDate = setDate(year, month - 1, day);\n\n if (\n checkDate.getMonth() === month - 1 &&\n checkDate.getDate() === day &&\n checkDate.getFullYear() === year &&\n dateStringParts[2].length === 4 &&\n isDateWithinMinAndMax(checkDate, minDate, maxDate)\n ) {\n isInvalid = false;\n }\n }\n }\n\n return isInvalid;\n};\n\n/**\n * Validate the value in the input as a valid date of format M/D/YYYY\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst validateDateInput = (el) => {\n const { externalInputEl } = getDatePickerContext(el);\n const isInvalid = isDateInputInvalid(externalInputEl);\n\n if (isInvalid && !externalInputEl.validationMessage) {\n externalInputEl.setCustomValidity(VALIDATION_MESSAGE);\n }\n\n if (!isInvalid && externalInputEl.validationMessage === VALIDATION_MESSAGE) {\n externalInputEl.setCustomValidity(\"\");\n }\n};\n\n// #endregion Validation\n\n/**\n * Enable the date picker component\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst reconcileInputValues = (el) => {\n const { internalInputEl, inputDate } = getDatePickerContext(el);\n let newValue = \"\";\n\n if (inputDate && !isDateInputInvalid(el)) {\n newValue = formatDate(inputDate);\n }\n\n if (internalInputEl.value !== newValue) {\n changeElementValue(internalInputEl, newValue);\n }\n};\n\n/**\n * Select the value of the date picker inputs.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n * @param {string} dateString The date string to update in YYYY-MM-DD format\n */\nconst setCalendarValue = (el, dateString) => {\n const parsedDate = parseDateString(dateString);\n\n if (parsedDate) {\n const formattedDate = formatDate(parsedDate, DEFAULT_EXTERNAL_DATE_FORMAT);\n\n const { datePickerEl, internalInputEl, externalInputEl } =\n getDatePickerContext(el);\n\n changeElementValue(internalInputEl, dateString);\n changeElementValue(externalInputEl, formattedDate);\n\n validateDateInput(datePickerEl);\n }\n};\n\n/**\n * Enhance an input with the date picker elements\n *\n * @param {HTMLElement} el The initial wrapping element of the date picker component\n */\nconst enhanceDatePicker = (el) => {\n const datePickerEl = el.closest(DATE_PICKER);\n const { defaultValue } = datePickerEl.dataset;\n\n const internalInputEl = datePickerEl.querySelector(`input`);\n\n if (!internalInputEl) {\n throw new Error(`${DATE_PICKER} is missing inner input`);\n }\n\n if (internalInputEl.value) {\n internalInputEl.value = \"\";\n }\n\n const minDate = parseDateString(\n datePickerEl.dataset.minDate || internalInputEl.getAttribute(\"min\"),\n );\n datePickerEl.dataset.minDate = minDate\n ? formatDate(minDate)\n : DEFAULT_MIN_DATE;\n\n const maxDate = parseDateString(\n datePickerEl.dataset.maxDate || internalInputEl.getAttribute(\"max\"),\n );\n if (maxDate) {\n datePickerEl.dataset.maxDate = formatDate(maxDate);\n }\n\n const calendarWrapper = document.createElement(\"div\");\n calendarWrapper.classList.add(DATE_PICKER_WRAPPER_CLASS);\n\n const externalInputEl = internalInputEl.cloneNode();\n externalInputEl.classList.add(DATE_PICKER_EXTERNAL_INPUT_CLASS);\n externalInputEl.type = \"text\";\n\n calendarWrapper.appendChild(externalInputEl);\n calendarWrapper.insertAdjacentHTML(\n \"beforeend\",\n Sanitizer.escapeHTML`\n \n \n
`,\n );\n\n internalInputEl.setAttribute(\"aria-hidden\", \"true\");\n internalInputEl.setAttribute(\"tabindex\", \"-1\");\n internalInputEl.style.display = \"none\";\n internalInputEl.classList.add(DATE_PICKER_INTERNAL_INPUT_CLASS);\n internalInputEl.removeAttribute(\"id\");\n internalInputEl.removeAttribute(\"name\");\n internalInputEl.required = false;\n\n datePickerEl.appendChild(calendarWrapper);\n datePickerEl.classList.add(DATE_PICKER_INITIALIZED_CLASS);\n\n if (defaultValue) {\n setCalendarValue(datePickerEl, defaultValue);\n }\n\n if (internalInputEl.disabled) {\n disable(datePickerEl);\n internalInputEl.disabled = false;\n }\n\n if (internalInputEl.hasAttribute(\"aria-disabled\")) {\n ariaDisable(datePickerEl);\n internalInputEl.removeAttribute(\"aria-disabled\");\n }\n};\n\n// #region Calendar - Date Selection View\n\n/**\n * render the calendar.\n *\n * @param {HTMLElement} el An element within the date picker component\n * @param {Date} _dateToDisplay a date to render on the calendar\n * @returns {HTMLElement} a reference to the new calendar element\n */\nconst renderCalendar = (el, _dateToDisplay) => {\n const {\n datePickerEl,\n calendarEl,\n statusEl,\n selectedDate,\n maxDate,\n minDate,\n rangeDate,\n } = getDatePickerContext(el);\n const todaysDate = today();\n let dateToDisplay = _dateToDisplay || todaysDate;\n\n const calendarWasHidden = calendarEl.hidden;\n\n const focusedDate = addDays(dateToDisplay, 0);\n const focusedMonth = dateToDisplay.getMonth();\n const focusedYear = dateToDisplay.getFullYear();\n\n const prevMonth = subMonths(dateToDisplay, 1);\n const nextMonth = addMonths(dateToDisplay, 1);\n\n const currentFormattedDate = formatDate(dateToDisplay);\n\n const firstOfMonth = startOfMonth(dateToDisplay);\n const prevButtonsDisabled = isSameMonth(dateToDisplay, minDate);\n const nextButtonsDisabled = isSameMonth(dateToDisplay, maxDate);\n\n const rangeConclusionDate = selectedDate || dateToDisplay;\n const rangeStartDate = rangeDate && min(rangeConclusionDate, rangeDate);\n const rangeEndDate = rangeDate && max(rangeConclusionDate, rangeDate);\n\n const withinRangeStartDate = rangeDate && addDays(rangeStartDate, 1);\n const withinRangeEndDate = rangeDate && subDays(rangeEndDate, 1);\n\n const monthLabel = MONTH_LABELS[focusedMonth];\n\n const generateDateHtml = (dateToRender) => {\n const classes = [CALENDAR_DATE_CLASS];\n const day = dateToRender.getDate();\n const month = dateToRender.getMonth();\n const year = dateToRender.getFullYear();\n const dayOfWeek = dateToRender.getDay();\n\n const formattedDate = formatDate(dateToRender);\n\n let tabindex = \"-1\";\n\n const isDisabled = !isDateWithinMinAndMax(dateToRender, minDate, maxDate);\n const isSelected = isSameDay(dateToRender, selectedDate);\n\n if (isSameMonth(dateToRender, prevMonth)) {\n classes.push(CALENDAR_DATE_PREVIOUS_MONTH_CLASS);\n }\n\n if (isSameMonth(dateToRender, focusedDate)) {\n classes.push(CALENDAR_DATE_CURRENT_MONTH_CLASS);\n }\n\n if (isSameMonth(dateToRender, nextMonth)) {\n classes.push(CALENDAR_DATE_NEXT_MONTH_CLASS);\n }\n\n if (isSelected) {\n classes.push(CALENDAR_DATE_SELECTED_CLASS);\n }\n\n if (isSameDay(dateToRender, todaysDate)) {\n classes.push(CALENDAR_DATE_TODAY_CLASS);\n }\n\n if (rangeDate) {\n if (isSameDay(dateToRender, rangeDate)) {\n classes.push(CALENDAR_DATE_RANGE_DATE_CLASS);\n }\n\n if (isSameDay(dateToRender, rangeStartDate)) {\n classes.push(CALENDAR_DATE_RANGE_DATE_START_CLASS);\n }\n\n if (isSameDay(dateToRender, rangeEndDate)) {\n classes.push(CALENDAR_DATE_RANGE_DATE_END_CLASS);\n }\n\n if (\n isDateWithinMinAndMax(\n dateToRender,\n withinRangeStartDate,\n withinRangeEndDate,\n )\n ) {\n classes.push(CALENDAR_DATE_WITHIN_RANGE_CLASS);\n }\n }\n\n if (isSameDay(dateToRender, focusedDate)) {\n tabindex = \"0\";\n classes.push(CALENDAR_DATE_FOCUSED_CLASS);\n }\n\n const monthStr = MONTH_LABELS[month];\n const dayStr = DAY_OF_WEEK_LABELS[dayOfWeek];\n\n const btn = document.createElement(\"button\");\n btn.setAttribute(\"type\", \"button\");\n btn.setAttribute(\"tabindex\", tabindex);\n btn.setAttribute(\"class\", classes.join(\" \"));\n btn.setAttribute(\"data-day\", day);\n btn.setAttribute(\"data-month\", month + 1);\n btn.setAttribute(\"data-year\", year);\n btn.setAttribute(\"data-value\", formattedDate);\n btn.setAttribute(\n \"aria-label\",\n Sanitizer.escapeHTML`${day} ${monthStr} ${year} ${dayStr}`,\n );\n btn.setAttribute(\"aria-selected\", isSelected ? \"true\" : \"false\");\n if (isDisabled === true) {\n btn.disabled = true;\n }\n btn.textContent = day;\n\n return btn;\n };\n\n // set date to first rendered day\n dateToDisplay = startOfWeek(firstOfMonth);\n\n const days = [];\n\n while (\n days.length < 28 ||\n dateToDisplay.getMonth() === focusedMonth ||\n days.length % 7 !== 0\n ) {\n days.push(generateDateHtml(dateToDisplay));\n dateToDisplay = addDays(dateToDisplay, 1);\n }\n\n const datesGrid = listToGridHtml(days, 7);\n\n const newCalendar = calendarEl.cloneNode();\n newCalendar.dataset.value = currentFormattedDate;\n newCalendar.style.top = `${datePickerEl.offsetHeight}px`;\n newCalendar.hidden = false;\n newCalendar.innerHTML = Sanitizer.escapeHTML`\n
\n
\n
\n \n
\n
\n \n
\n
\n ${monthLabel}\n ${focusedYear}\n
\n
\n \n
\n
\n \n
\n
\n
\n `;\n\n const table = document.createElement(\"table\");\n table.setAttribute(\"class\", CALENDAR_TABLE_CLASS);\n\n const tableHead = document.createElement(\"thead\");\n table.insertAdjacentElement(\"beforeend\", tableHead);\n const tableHeadRow = document.createElement(\"tr\");\n tableHead.insertAdjacentElement(\"beforeend\", tableHeadRow);\n\n const daysOfWeek = {\n Sunday: \"S\",\n Monday: \"M\",\n Tuesday: \"T\",\n Wednesday: \"W\",\n Thursday: \"Th\",\n Friday: \"Fr\",\n Saturday: \"S\",\n };\n\n Object.keys(daysOfWeek).forEach((key) => {\n const th = document.createElement(\"th\");\n th.setAttribute(\"class\", CALENDAR_DAY_OF_WEEK_CLASS);\n th.setAttribute(\"scope\", \"col\");\n th.setAttribute(\"aria-label\", key);\n th.textContent = daysOfWeek[key];\n tableHeadRow.insertAdjacentElement(\"beforeend\", th);\n });\n\n const tableBody = createTableBody(datesGrid);\n table.insertAdjacentElement(\"beforeend\", tableBody);\n\n // Container for Years, Months, and Days\n const datePickerCalendarContainer =\n newCalendar.querySelector(CALENDAR_DATE_PICKER);\n\n datePickerCalendarContainer.insertAdjacentElement(\"beforeend\", table);\n\n calendarEl.parentNode.replaceChild(newCalendar, calendarEl);\n\n datePickerEl.classList.add(DATE_PICKER_ACTIVE_CLASS);\n\n const statuses = [];\n\n if (isSameDay(selectedDate, focusedDate)) {\n statuses.push(\"Selected date\");\n }\n\n if (calendarWasHidden) {\n statuses.push(\n \"You can navigate by day using left and right arrows\",\n \"Weeks by using up and down arrows\",\n \"Months by using page up and page down keys\",\n \"Years by using shift plus page up and shift plus page down\",\n \"Home and end keys navigate to the beginning and end of a week\",\n );\n statusEl.textContent = \"\";\n } else {\n statuses.push(`${monthLabel} ${focusedYear}`);\n }\n statusEl.textContent = statuses.join(\". \");\n\n return newCalendar;\n};\n\n/**\n * Navigate back one year and display the calendar.\n *\n * @param {HTMLButtonElement} _buttonEl An element within the date picker component\n */\nconst displayPreviousYear = (_buttonEl) => {\n if (_buttonEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(_buttonEl);\n let date = subYears(calendarDate, 1);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_YEAR);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Navigate back one month and display the calendar.\n *\n * @param {HTMLButtonElement} _buttonEl An element within the date picker component\n */\nconst displayPreviousMonth = (_buttonEl) => {\n if (_buttonEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(_buttonEl);\n let date = subMonths(calendarDate, 1);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_MONTH);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Navigate forward one month and display the calendar.\n *\n * @param {HTMLButtonElement} _buttonEl An element within the date picker component\n */\nconst displayNextMonth = (_buttonEl) => {\n if (_buttonEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(_buttonEl);\n let date = addMonths(calendarDate, 1);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_MONTH);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Navigate forward one year and display the calendar.\n *\n * @param {HTMLButtonElement} _buttonEl An element within the date picker component\n */\nconst displayNextYear = (_buttonEl) => {\n if (_buttonEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(_buttonEl);\n let date = addYears(calendarDate, 1);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_YEAR);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Hide the calendar of a date picker component.\n *\n * @param {HTMLElement} el An element within the date picker component\n */\nconst hideCalendar = (el) => {\n const { datePickerEl, calendarEl, statusEl } = getDatePickerContext(el);\n\n datePickerEl.classList.remove(DATE_PICKER_ACTIVE_CLASS);\n calendarEl.hidden = true;\n statusEl.textContent = \"\";\n};\n\n/**\n * Select a date within the date picker component.\n *\n * @param {HTMLButtonElement} calendarDateEl A date element within the date picker component\n */\nconst selectDate = (calendarDateEl) => {\n if (calendarDateEl.disabled) return;\n\n const { datePickerEl, externalInputEl } =\n getDatePickerContext(calendarDateEl);\n\n setCalendarValue(calendarDateEl, calendarDateEl.dataset.value);\n hideCalendar(datePickerEl);\n\n externalInputEl.focus();\n};\n\n/**\n * Toggle the calendar.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n */\nconst toggleCalendar = (el) => {\n if (el.disabled) return;\n const { calendarEl, inputDate, minDate, maxDate, defaultDate } =\n getDatePickerContext(el);\n\n if (calendarEl.hidden) {\n const dateToDisplay = keepDateBetweenMinAndMax(\n inputDate || defaultDate || today(),\n minDate,\n maxDate,\n );\n const newCalendar = renderCalendar(calendarEl, dateToDisplay);\n newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();\n } else {\n hideCalendar(el);\n }\n};\n\n/**\n * Update the calendar when visible.\n *\n * @param {HTMLElement} el an element within the date picker\n */\nconst updateCalendarIfVisible = (el) => {\n const { calendarEl, inputDate, minDate, maxDate } = getDatePickerContext(el);\n const calendarShown = !calendarEl.hidden;\n\n if (calendarShown && inputDate) {\n const dateToDisplay = keepDateBetweenMinAndMax(inputDate, minDate, maxDate);\n renderCalendar(calendarEl, dateToDisplay);\n }\n};\n\n// #endregion Calendar - Date Selection View\n\n// #region Calendar - Month Selection View\n/**\n * Display the month selection screen in the date picker.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n * @returns {HTMLElement} a reference to the new calendar element\n */\nconst displayMonthSelection = (el, monthToDisplay) => {\n const { calendarEl, statusEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(el);\n\n const selectedMonth = calendarDate.getMonth();\n const focusedMonth = monthToDisplay == null ? selectedMonth : monthToDisplay;\n\n const months = MONTH_LABELS.map((month, index) => {\n const monthToCheck = setMonth(calendarDate, index);\n\n const isDisabled = isDatesMonthOutsideMinOrMax(\n monthToCheck,\n minDate,\n maxDate,\n );\n\n let tabindex = \"-1\";\n\n const classes = [CALENDAR_MONTH_CLASS];\n const isSelected = index === selectedMonth;\n\n if (index === focusedMonth) {\n tabindex = \"0\";\n classes.push(CALENDAR_MONTH_FOCUSED_CLASS);\n }\n\n if (isSelected) {\n classes.push(CALENDAR_MONTH_SELECTED_CLASS);\n }\n\n const btn = document.createElement(\"button\");\n btn.setAttribute(\"type\", \"button\");\n btn.setAttribute(\"tabindex\", tabindex);\n btn.setAttribute(\"class\", classes.join(\" \"));\n btn.setAttribute(\"data-value\", index);\n btn.setAttribute(\"data-label\", month);\n btn.setAttribute(\"aria-selected\", isSelected ? \"true\" : \"false\");\n if (isDisabled === true) {\n btn.disabled = true;\n }\n btn.textContent = month;\n\n return btn;\n });\n\n const monthsHtml = document.createElement(\"div\");\n monthsHtml.setAttribute(\"tabindex\", \"-1\");\n monthsHtml.setAttribute(\"class\", CALENDAR_MONTH_PICKER_CLASS);\n\n const table = document.createElement(\"table\");\n table.setAttribute(\"class\", CALENDAR_TABLE_CLASS);\n table.setAttribute(\"role\", \"presentation\");\n\n const monthsGrid = listToGridHtml(months, 3);\n const tableBody = createTableBody(monthsGrid);\n table.insertAdjacentElement(\"beforeend\", tableBody);\n monthsHtml.insertAdjacentElement(\"beforeend\", table);\n\n const newCalendar = calendarEl.cloneNode();\n newCalendar.insertAdjacentElement(\"beforeend\", monthsHtml);\n calendarEl.parentNode.replaceChild(newCalendar, calendarEl);\n\n statusEl.textContent = \"Select a month.\";\n\n return newCalendar;\n};\n\n/**\n * Select a month in the date picker component.\n *\n * @param {HTMLButtonElement} monthEl An month element within the date picker component\n */\nconst selectMonth = (monthEl) => {\n if (monthEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(monthEl);\n const selectedMonth = parseInt(monthEl.dataset.value, 10);\n let date = setMonth(calendarDate, selectedMonth);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();\n};\n\n// #endregion Calendar - Month Selection View\n\n// #region Calendar - Year Selection View\n\n/**\n * Display the year selection screen in the date picker.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n * @param {number} yearToDisplay year to display in year selection\n * @returns {HTMLElement} a reference to the new calendar element\n */\nconst displayYearSelection = (el, yearToDisplay) => {\n const { calendarEl, statusEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(el);\n\n const selectedYear = calendarDate.getFullYear();\n const focusedYear = yearToDisplay == null ? selectedYear : yearToDisplay;\n\n let yearToChunk = focusedYear;\n yearToChunk -= yearToChunk % YEAR_CHUNK;\n yearToChunk = Math.max(0, yearToChunk);\n\n const prevYearChunkDisabled = isDatesYearOutsideMinOrMax(\n setYear(calendarDate, yearToChunk - 1),\n minDate,\n maxDate,\n );\n\n const nextYearChunkDisabled = isDatesYearOutsideMinOrMax(\n setYear(calendarDate, yearToChunk + YEAR_CHUNK),\n minDate,\n maxDate,\n );\n\n const years = [];\n let yearIndex = yearToChunk;\n while (years.length < YEAR_CHUNK) {\n const isDisabled = isDatesYearOutsideMinOrMax(\n setYear(calendarDate, yearIndex),\n minDate,\n maxDate,\n );\n\n let tabindex = \"-1\";\n\n const classes = [CALENDAR_YEAR_CLASS];\n const isSelected = yearIndex === selectedYear;\n\n if (yearIndex === focusedYear) {\n tabindex = \"0\";\n classes.push(CALENDAR_YEAR_FOCUSED_CLASS);\n }\n\n if (isSelected) {\n classes.push(CALENDAR_YEAR_SELECTED_CLASS);\n }\n\n const btn = document.createElement(\"button\");\n btn.setAttribute(\"type\", \"button\");\n btn.setAttribute(\"tabindex\", tabindex);\n btn.setAttribute(\"class\", classes.join(\" \"));\n btn.setAttribute(\"data-value\", yearIndex);\n btn.setAttribute(\"aria-selected\", isSelected ? \"true\" : \"false\");\n if (isDisabled === true) {\n btn.disabled = true;\n }\n btn.textContent = yearIndex;\n\n years.push(btn);\n yearIndex += 1;\n }\n\n const newCalendar = calendarEl.cloneNode();\n\n // create the years calendar wrapper\n const yearsCalendarWrapper = document.createElement(\"div\");\n yearsCalendarWrapper.setAttribute(\"tabindex\", \"-1\");\n yearsCalendarWrapper.setAttribute(\"class\", CALENDAR_YEAR_PICKER_CLASS);\n\n // create table parent\n const yearsTableParent = document.createElement(\"table\");\n yearsTableParent.setAttribute(\"class\", CALENDAR_TABLE_CLASS);\n\n // create table body and table row\n const yearsHTMLTableBody = document.createElement(\"tbody\");\n const yearsHTMLTableBodyRow = document.createElement(\"tr\");\n\n // create previous button\n const previousYearsBtn = document.createElement(\"button\");\n previousYearsBtn.setAttribute(\"type\", \"button\");\n previousYearsBtn.setAttribute(\"class\", CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS);\n previousYearsBtn.setAttribute(\n \"aria-label\",\n `Navigate back ${YEAR_CHUNK} years`,\n );\n if (prevYearChunkDisabled === true) {\n previousYearsBtn.disabled = true;\n }\n previousYearsBtn.innerHTML = Sanitizer.escapeHTML` `;\n\n // create next button\n const nextYearsBtn = document.createElement(\"button\");\n nextYearsBtn.setAttribute(\"type\", \"button\");\n nextYearsBtn.setAttribute(\"class\", CALENDAR_NEXT_YEAR_CHUNK_CLASS);\n nextYearsBtn.setAttribute(\n \"aria-label\",\n `Navigate forward ${YEAR_CHUNK} years`,\n );\n if (nextYearChunkDisabled === true) {\n nextYearsBtn.disabled = true;\n }\n nextYearsBtn.innerHTML = Sanitizer.escapeHTML` `;\n\n // create the actual years table\n const yearsTable = document.createElement(\"table\");\n yearsTable.setAttribute(\"class\", CALENDAR_TABLE_CLASS);\n yearsTable.setAttribute(\"role\", \"presentation\");\n\n // create the years child table\n const yearsGrid = listToGridHtml(years, 3);\n const yearsTableBody = createTableBody(yearsGrid);\n\n // append the grid to the years child table\n yearsTable.insertAdjacentElement(\"beforeend\", yearsTableBody);\n\n // create the prev button td and append the prev button\n const yearsHTMLTableBodyDetailPrev = document.createElement(\"td\");\n yearsHTMLTableBodyDetailPrev.insertAdjacentElement(\n \"beforeend\",\n previousYearsBtn,\n );\n\n // create the years td and append the years child table\n const yearsHTMLTableBodyYearsDetail = document.createElement(\"td\");\n yearsHTMLTableBodyYearsDetail.setAttribute(\"colspan\", \"3\");\n yearsHTMLTableBodyYearsDetail.insertAdjacentElement(\"beforeend\", yearsTable);\n\n // create the next button td and append the next button\n const yearsHTMLTableBodyDetailNext = document.createElement(\"td\");\n yearsHTMLTableBodyDetailNext.insertAdjacentElement(\"beforeend\", nextYearsBtn);\n\n // append the three td to the years child table row\n yearsHTMLTableBodyRow.insertAdjacentElement(\n \"beforeend\",\n yearsHTMLTableBodyDetailPrev,\n );\n yearsHTMLTableBodyRow.insertAdjacentElement(\n \"beforeend\",\n yearsHTMLTableBodyYearsDetail,\n );\n yearsHTMLTableBodyRow.insertAdjacentElement(\n \"beforeend\",\n yearsHTMLTableBodyDetailNext,\n );\n\n // append the table row to the years child table body\n yearsHTMLTableBody.insertAdjacentElement(\"beforeend\", yearsHTMLTableBodyRow);\n\n // append the years table body to the years parent table\n yearsTableParent.insertAdjacentElement(\"beforeend\", yearsHTMLTableBody);\n\n // append the parent table to the calendar wrapper\n yearsCalendarWrapper.insertAdjacentElement(\"beforeend\", yearsTableParent);\n\n // append the years calender to the new calendar\n newCalendar.insertAdjacentElement(\"beforeend\", yearsCalendarWrapper);\n\n // replace calendar\n calendarEl.parentNode.replaceChild(newCalendar, calendarEl);\n\n statusEl.textContent = Sanitizer.escapeHTML`Showing years ${yearToChunk} to ${\n yearToChunk + YEAR_CHUNK - 1\n }. Select a year.`;\n\n return newCalendar;\n};\n\n/**\n * Navigate back by years and display the year selection screen.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n */\nconst displayPreviousYearChunk = (el) => {\n if (el.disabled) return;\n\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(el);\n const yearEl = calendarEl.querySelector(CALENDAR_YEAR_FOCUSED);\n const selectedYear = parseInt(yearEl.textContent, 10);\n\n let adjustedYear = selectedYear - YEAR_CHUNK;\n adjustedYear = Math.max(0, adjustedYear);\n\n const date = setYear(calendarDate, adjustedYear);\n const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = displayYearSelection(\n calendarEl,\n cappedDate.getFullYear(),\n );\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_YEAR_CHUNK);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_YEAR_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Navigate forward by years and display the year selection screen.\n *\n * @param {HTMLButtonElement} el An element within the date picker component\n */\nconst displayNextYearChunk = (el) => {\n if (el.disabled) return;\n\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(el);\n const yearEl = calendarEl.querySelector(CALENDAR_YEAR_FOCUSED);\n const selectedYear = parseInt(yearEl.textContent, 10);\n\n let adjustedYear = selectedYear + YEAR_CHUNK;\n adjustedYear = Math.max(0, adjustedYear);\n\n const date = setYear(calendarDate, adjustedYear);\n const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = displayYearSelection(\n calendarEl,\n cappedDate.getFullYear(),\n );\n\n let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_YEAR_CHUNK);\n if (nextToFocus.disabled) {\n nextToFocus = newCalendar.querySelector(CALENDAR_YEAR_PICKER);\n }\n nextToFocus.focus();\n};\n\n/**\n * Select a year in the date picker component.\n *\n * @param {HTMLButtonElement} yearEl A year element within the date picker component\n */\nconst selectYear = (yearEl) => {\n if (yearEl.disabled) return;\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(yearEl);\n const selectedYear = parseInt(yearEl.innerHTML, 10);\n let date = setYear(calendarDate, selectedYear);\n date = keepDateBetweenMinAndMax(date, minDate, maxDate);\n const newCalendar = renderCalendar(calendarEl, date);\n newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();\n};\n\n// #endregion Calendar - Year Selection View\n\n// #region Calendar Event Handling\n\n/**\n * Hide the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleEscapeFromCalendar = (event) => {\n const { datePickerEl, externalInputEl } = getDatePickerContext(event.target);\n\n hideCalendar(datePickerEl);\n externalInputEl.focus();\n\n event.preventDefault();\n};\n\n// #endregion Calendar Event Handling\n\n// #region Calendar Date Event Handling\n\n/**\n * Adjust the date and display the calendar if needed.\n *\n * @param {function} adjustDateFn function that returns the adjusted date\n */\nconst adjustCalendar = (adjustDateFn) => (event) => {\n const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(\n event.target,\n );\n\n const date = adjustDateFn(calendarDate);\n\n const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);\n if (!isSameDay(calendarDate, cappedDate)) {\n const newCalendar = renderCalendar(calendarEl, cappedDate);\n newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();\n }\n event.preventDefault();\n};\n\n/**\n * Navigate back one week and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleUpFromDate = adjustCalendar((date) => subWeeks(date, 1));\n\n/**\n * Navigate forward one week and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleDownFromDate = adjustCalendar((date) => addWeeks(date, 1));\n\n/**\n * Navigate back one day and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleLeftFromDate = adjustCalendar((date) => subDays(date, 1));\n\n/**\n * Navigate forward one day and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleRightFromDate = adjustCalendar((date) => addDays(date, 1));\n\n/**\n * Navigate to the start of the week and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleHomeFromDate = adjustCalendar((date) => startOfWeek(date));\n\n/**\n * Navigate to the end of the week and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleEndFromDate = adjustCalendar((date) => endOfWeek(date));\n\n/**\n * Navigate forward one month and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageDownFromDate = adjustCalendar((date) => addMonths(date, 1));\n\n/**\n * Navigate back one month and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageUpFromDate = adjustCalendar((date) => subMonths(date, 1));\n\n/**\n * Navigate forward one year and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleShiftPageDownFromDate = adjustCalendar((date) => addYears(date, 1));\n\n/**\n * Navigate back one year and display the calendar.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleShiftPageUpFromDate = adjustCalendar((date) => subYears(date, 1));\n\n/**\n * display the calendar for the mouseover date.\n *\n * @param {MouseEvent} event The mouseover event\n * @param {HTMLButtonElement} dateEl A date element within the date picker component\n */\nconst handleMouseoverFromDate = (dateEl) => {\n if (dateEl.disabled) return;\n\n const calendarEl = dateEl.closest(DATE_PICKER_CALENDAR);\n\n const currentCalendarDate = calendarEl.dataset.value;\n const hoverDate = dateEl.dataset.value;\n\n if (hoverDate === currentCalendarDate) return;\n\n const dateToDisplay = parseDateString(hoverDate);\n const newCalendar = renderCalendar(calendarEl, dateToDisplay);\n newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();\n};\n\n// #endregion Calendar Date Event Handling\n\n// #region Calendar Month Event Handling\n\n/**\n * Adjust the month and display the month selection screen if needed.\n *\n * @param {function} adjustMonthFn function that returns the adjusted month\n */\nconst adjustMonthSelectionScreen = (adjustMonthFn) => (event) => {\n const monthEl = event.target;\n const selectedMonth = parseInt(monthEl.dataset.value, 10);\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(monthEl);\n const currentDate = setMonth(calendarDate, selectedMonth);\n\n let adjustedMonth = adjustMonthFn(selectedMonth);\n adjustedMonth = Math.max(0, Math.min(11, adjustedMonth));\n\n const date = setMonth(calendarDate, adjustedMonth);\n const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);\n if (!isSameMonth(currentDate, cappedDate)) {\n const newCalendar = displayMonthSelection(\n calendarEl,\n cappedDate.getMonth(),\n );\n newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();\n }\n event.preventDefault();\n};\n\n/**\n * Navigate back three months and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleUpFromMonth = adjustMonthSelectionScreen((month) => month - 3);\n\n/**\n * Navigate forward three months and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleDownFromMonth = adjustMonthSelectionScreen((month) => month + 3);\n\n/**\n * Navigate back one month and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleLeftFromMonth = adjustMonthSelectionScreen((month) => month - 1);\n\n/**\n * Navigate forward one month and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleRightFromMonth = adjustMonthSelectionScreen((month) => month + 1);\n\n/**\n * Navigate to the start of the row of months and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleHomeFromMonth = adjustMonthSelectionScreen(\n (month) => month - (month % 3),\n);\n\n/**\n * Navigate to the end of the row of months and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleEndFromMonth = adjustMonthSelectionScreen(\n (month) => month + 2 - (month % 3),\n);\n\n/**\n * Navigate to the last month (December) and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageDownFromMonth = adjustMonthSelectionScreen(() => 11);\n\n/**\n * Navigate to the first month (January) and display the month selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageUpFromMonth = adjustMonthSelectionScreen(() => 0);\n\n/**\n * update the focus on a month when the mouse moves.\n *\n * @param {MouseEvent} event The mouseover event\n * @param {HTMLButtonElement} monthEl A month element within the date picker component\n */\nconst handleMouseoverFromMonth = (monthEl) => {\n if (monthEl.disabled) return;\n if (monthEl.classList.contains(CALENDAR_MONTH_FOCUSED_CLASS)) return;\n\n const focusMonth = parseInt(monthEl.dataset.value, 10);\n\n const newCalendar = displayMonthSelection(monthEl, focusMonth);\n newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();\n};\n\n// #endregion Calendar Month Event Handling\n\n// #region Calendar Year Event Handling\n\n/**\n * Adjust the year and display the year selection screen if needed.\n *\n * @param {function} adjustYearFn function that returns the adjusted year\n */\nconst adjustYearSelectionScreen = (adjustYearFn) => (event) => {\n const yearEl = event.target;\n const selectedYear = parseInt(yearEl.dataset.value, 10);\n const { calendarEl, calendarDate, minDate, maxDate } =\n getDatePickerContext(yearEl);\n const currentDate = setYear(calendarDate, selectedYear);\n\n let adjustedYear = adjustYearFn(selectedYear);\n adjustedYear = Math.max(0, adjustedYear);\n\n const date = setYear(calendarDate, adjustedYear);\n const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);\n if (!isSameYear(currentDate, cappedDate)) {\n const newCalendar = displayYearSelection(\n calendarEl,\n cappedDate.getFullYear(),\n );\n newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();\n }\n event.preventDefault();\n};\n\n/**\n * Navigate back three years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleUpFromYear = adjustYearSelectionScreen((year) => year - 3);\n\n/**\n * Navigate forward three years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleDownFromYear = adjustYearSelectionScreen((year) => year + 3);\n\n/**\n * Navigate back one year and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleLeftFromYear = adjustYearSelectionScreen((year) => year - 1);\n\n/**\n * Navigate forward one year and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleRightFromYear = adjustYearSelectionScreen((year) => year + 1);\n\n/**\n * Navigate to the start of the row of years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleHomeFromYear = adjustYearSelectionScreen(\n (year) => year - (year % 3),\n);\n\n/**\n * Navigate to the end of the row of years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handleEndFromYear = adjustYearSelectionScreen(\n (year) => year + 2 - (year % 3),\n);\n\n/**\n * Navigate to back 12 years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageUpFromYear = adjustYearSelectionScreen(\n (year) => year - YEAR_CHUNK,\n);\n\n/**\n * Navigate forward 12 years and display the year selection screen.\n *\n * @param {KeyboardEvent} event the keydown event\n */\nconst handlePageDownFromYear = adjustYearSelectionScreen(\n (year) => year + YEAR_CHUNK,\n);\n\n/**\n * update the focus on a year when the mouse moves.\n *\n * @param {MouseEvent} event The mouseover event\n * @param {HTMLButtonElement} dateEl A year element within the date picker component\n */\nconst handleMouseoverFromYear = (yearEl) => {\n if (yearEl.disabled) return;\n if (yearEl.classList.contains(CALENDAR_YEAR_FOCUSED_CLASS)) return;\n\n const focusYear = parseInt(yearEl.dataset.value, 10);\n\n const newCalendar = displayYearSelection(yearEl, focusYear);\n newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();\n};\n\n// #endregion Calendar Year Event Handling\n\n// #region Focus Handling Event Handling\n\nconst tabHandler = (focusable) => {\n const getFocusableContext = (el) => {\n const { calendarEl } = getDatePickerContext(el);\n const focusableElements = select(focusable, calendarEl);\n\n const firstTabIndex = 0;\n const lastTabIndex = focusableElements.length - 1;\n const firstTabStop = focusableElements[firstTabIndex];\n const lastTabStop = focusableElements[lastTabIndex];\n const focusIndex = focusableElements.indexOf(activeElement());\n\n const isLastTab = focusIndex === lastTabIndex;\n const isFirstTab = focusIndex === firstTabIndex;\n const isNotFound = focusIndex === -1;\n\n return {\n focusableElements,\n isNotFound,\n firstTabStop,\n isFirstTab,\n lastTabStop,\n isLastTab,\n };\n };\n\n return {\n tabAhead(event) {\n const { firstTabStop, isLastTab, isNotFound } = getFocusableContext(\n event.target,\n );\n\n if (isLastTab || isNotFound) {\n event.preventDefault();\n firstTabStop.focus();\n }\n },\n tabBack(event) {\n const { lastTabStop, isFirstTab, isNotFound } = getFocusableContext(\n event.target,\n );\n\n if (isFirstTab || isNotFound) {\n event.preventDefault();\n lastTabStop.focus();\n }\n },\n };\n};\n\nconst datePickerTabEventHandler = tabHandler(DATE_PICKER_FOCUSABLE);\nconst monthPickerTabEventHandler = tabHandler(MONTH_PICKER_FOCUSABLE);\nconst yearPickerTabEventHandler = tabHandler(YEAR_PICKER_FOCUSABLE);\n\n// #endregion Focus Handling Event Handling\n\n// #region Date Picker Event Delegation Registration / Component\n\nconst datePickerEvents = {\n [CLICK]: {\n [DATE_PICKER_BUTTON]() {\n toggleCalendar(this);\n },\n [CALENDAR_DATE]() {\n selectDate(this);\n },\n [CALENDAR_MONTH]() {\n selectMonth(this);\n },\n [CALENDAR_YEAR]() {\n selectYear(this);\n },\n [CALENDAR_PREVIOUS_MONTH]() {\n displayPreviousMonth(this);\n },\n [CALENDAR_NEXT_MONTH]() {\n displayNextMonth(this);\n },\n [CALENDAR_PREVIOUS_YEAR]() {\n displayPreviousYear(this);\n },\n [CALENDAR_NEXT_YEAR]() {\n displayNextYear(this);\n },\n [CALENDAR_PREVIOUS_YEAR_CHUNK]() {\n displayPreviousYearChunk(this);\n },\n [CALENDAR_NEXT_YEAR_CHUNK]() {\n displayNextYearChunk(this);\n },\n [CALENDAR_MONTH_SELECTION]() {\n const newCalendar = displayMonthSelection(this);\n newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();\n },\n [CALENDAR_YEAR_SELECTION]() {\n const newCalendar = displayYearSelection(this);\n newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();\n },\n },\n keyup: {\n [DATE_PICKER_CALENDAR](event) {\n const keydown = this.dataset.keydownKeyCode;\n if (`${event.keyCode}` !== keydown) {\n event.preventDefault();\n }\n },\n },\n keydown: {\n [DATE_PICKER_EXTERNAL_INPUT](event) {\n if (event.keyCode === ENTER_KEYCODE) {\n validateDateInput(this);\n }\n },\n [CALENDAR_DATE]: keymap({\n Up: handleUpFromDate,\n ArrowUp: handleUpFromDate,\n Down: handleDownFromDate,\n ArrowDown: handleDownFromDate,\n Left: handleLeftFromDate,\n ArrowLeft: handleLeftFromDate,\n Right: handleRightFromDate,\n ArrowRight: handleRightFromDate,\n Home: handleHomeFromDate,\n End: handleEndFromDate,\n PageDown: handlePageDownFromDate,\n PageUp: handlePageUpFromDate,\n \"Shift+PageDown\": handleShiftPageDownFromDate,\n \"Shift+PageUp\": handleShiftPageUpFromDate,\n Tab: datePickerTabEventHandler.tabAhead,\n }),\n [CALENDAR_DATE_PICKER]: keymap({\n Tab: datePickerTabEventHandler.tabAhead,\n \"Shift+Tab\": datePickerTabEventHandler.tabBack,\n }),\n [CALENDAR_MONTH]: keymap({\n Up: handleUpFromMonth,\n ArrowUp: handleUpFromMonth,\n Down: handleDownFromMonth,\n ArrowDown: handleDownFromMonth,\n Left: handleLeftFromMonth,\n ArrowLeft: handleLeftFromMonth,\n Right: handleRightFromMonth,\n ArrowRight: handleRightFromMonth,\n Home: handleHomeFromMonth,\n End: handleEndFromMonth,\n PageDown: handlePageDownFromMonth,\n PageUp: handlePageUpFromMonth,\n }),\n [CALENDAR_MONTH_PICKER]: keymap({\n Tab: monthPickerTabEventHandler.tabAhead,\n \"Shift+Tab\": monthPickerTabEventHandler.tabBack,\n }),\n [CALENDAR_YEAR]: keymap({\n Up: handleUpFromYear,\n ArrowUp: handleUpFromYear,\n Down: handleDownFromYear,\n ArrowDown: handleDownFromYear,\n Left: handleLeftFromYear,\n ArrowLeft: handleLeftFromYear,\n Right: handleRightFromYear,\n ArrowRight: handleRightFromYear,\n Home: handleHomeFromYear,\n End: handleEndFromYear,\n PageDown: handlePageDownFromYear,\n PageUp: handlePageUpFromYear,\n }),\n [CALENDAR_YEAR_PICKER]: keymap({\n Tab: yearPickerTabEventHandler.tabAhead,\n \"Shift+Tab\": yearPickerTabEventHandler.tabBack,\n }),\n [DATE_PICKER_CALENDAR](event) {\n this.dataset.keydownKeyCode = event.keyCode;\n },\n [DATE_PICKER](event) {\n const keyMap = keymap({\n Escape: handleEscapeFromCalendar,\n });\n\n keyMap(event);\n },\n },\n focusout: {\n [DATE_PICKER_EXTERNAL_INPUT]() {\n validateDateInput(this);\n },\n [DATE_PICKER](event) {\n if (!this.contains(event.relatedTarget)) {\n hideCalendar(this);\n }\n },\n },\n input: {\n [DATE_PICKER_EXTERNAL_INPUT]() {\n reconcileInputValues(this);\n updateCalendarIfVisible(this);\n },\n },\n};\n\nif (!isIosDevice()) {\n datePickerEvents.mouseover = {\n [CALENDAR_DATE_CURRENT_MONTH]() {\n handleMouseoverFromDate(this);\n },\n [CALENDAR_MONTH]() {\n handleMouseoverFromMonth(this);\n },\n [CALENDAR_YEAR]() {\n handleMouseoverFromYear(this);\n },\n };\n}\n\nconst datePicker = behavior(datePickerEvents, {\n init(root) {\n selectOrMatches(DATE_PICKER, root).forEach((datePickerEl) => {\n enhanceDatePicker(datePickerEl);\n });\n },\n getDatePickerContext,\n disable,\n ariaDisable,\n enable,\n isDateInputInvalid,\n setCalendarValue,\n validateDateInput,\n renderCalendar,\n updateCalendarIfVisible,\n});\n\n// #endregion Date Picker Event Delegation Registration / Component\n\nmodule.exports = datePicker;\n","const behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst select = require(\"../../uswds-core/src/js/utils/select\");\nconst selectOrMatches = require(\"../../uswds-core/src/js/utils/select-or-matches\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\nconst {\n getDatePickerContext,\n isDateInputInvalid,\n updateCalendarIfVisible,\n} = require(\"../../usa-date-picker/src/index\");\n\nconst DATE_PICKER_CLASS = `${PREFIX}-date-picker`;\nconst DATE_RANGE_PICKER_CLASS = `${PREFIX}-date-range-picker`;\nconst DATE_RANGE_PICKER_RANGE_START_CLASS = `${DATE_RANGE_PICKER_CLASS}__range-start`;\nconst DATE_RANGE_PICKER_RANGE_END_CLASS = `${DATE_RANGE_PICKER_CLASS}__range-end`;\n\nconst DATE_PICKER = `.${DATE_PICKER_CLASS}`;\nconst DATE_RANGE_PICKER = `.${DATE_RANGE_PICKER_CLASS}`;\nconst DATE_RANGE_PICKER_RANGE_START = `.${DATE_RANGE_PICKER_RANGE_START_CLASS}`;\nconst DATE_RANGE_PICKER_RANGE_END = `.${DATE_RANGE_PICKER_RANGE_END_CLASS}`;\n\nconst DEFAULT_MIN_DATE = \"0000-01-01\";\n\n/**\n * The properties and elements within the date range picker.\n * @typedef {Object} DateRangePickerContext\n * @property {HTMLElement} dateRangePickerEl\n * @property {HTMLElement} rangeStartEl\n * @property {HTMLElement} rangeEndEl\n */\n\n/**\n * Get an object of the properties and elements belonging directly to the given\n * date picker component.\n *\n * @param {HTMLElement} el the element within the date picker\n * @returns {DateRangePickerContext} elements\n */\nconst getDateRangePickerContext = (el) => {\n const dateRangePickerEl = el.closest(DATE_RANGE_PICKER);\n\n if (!dateRangePickerEl) {\n throw new Error(`Element is missing outer ${DATE_RANGE_PICKER}`);\n }\n\n const rangeStartEl = dateRangePickerEl.querySelector(\n DATE_RANGE_PICKER_RANGE_START,\n );\n const rangeEndEl = dateRangePickerEl.querySelector(\n DATE_RANGE_PICKER_RANGE_END,\n );\n\n return {\n dateRangePickerEl,\n rangeStartEl,\n rangeEndEl,\n };\n};\n\n/**\n * handle update from range start date picker\n *\n * @param {HTMLElement} el an element within the date range picker\n */\nconst handleRangeStartUpdate = (el) => {\n const { dateRangePickerEl, rangeStartEl, rangeEndEl } =\n getDateRangePickerContext(el);\n const { internalInputEl } = getDatePickerContext(rangeStartEl);\n const updatedDate = internalInputEl.value;\n\n if (updatedDate && !isDateInputInvalid(internalInputEl)) {\n rangeEndEl.dataset.minDate = updatedDate;\n rangeEndEl.dataset.rangeDate = updatedDate;\n rangeEndEl.dataset.defaultDate = updatedDate;\n } else {\n rangeEndEl.dataset.minDate = dateRangePickerEl.dataset.minDate || \"\";\n rangeEndEl.dataset.rangeDate = \"\";\n rangeEndEl.dataset.defaultDate = \"\";\n }\n\n updateCalendarIfVisible(rangeEndEl);\n};\n\n/**\n * handle update from range start date picker\n *\n * @param {HTMLElement} el an element within the date range picker\n */\nconst handleRangeEndUpdate = (el) => {\n const { dateRangePickerEl, rangeStartEl, rangeEndEl } =\n getDateRangePickerContext(el);\n const { internalInputEl } = getDatePickerContext(rangeEndEl);\n const updatedDate = internalInputEl.value;\n\n if (updatedDate && !isDateInputInvalid(internalInputEl)) {\n rangeStartEl.dataset.maxDate = updatedDate;\n rangeStartEl.dataset.rangeDate = updatedDate;\n rangeStartEl.dataset.defaultDate = updatedDate;\n } else {\n rangeStartEl.dataset.maxDate = dateRangePickerEl.dataset.maxDate || \"\";\n rangeStartEl.dataset.rangeDate = \"\";\n rangeStartEl.dataset.defaultDate = \"\";\n }\n\n updateCalendarIfVisible(rangeStartEl);\n};\n\n/**\n * Enhance an input with the date picker elements\n *\n * @param {HTMLElement} el The initial wrapping element of the date range picker component\n */\nconst enhanceDateRangePicker = (el) => {\n const dateRangePickerEl = el.closest(DATE_RANGE_PICKER);\n\n const [rangeStart, rangeEnd] = select(DATE_PICKER, dateRangePickerEl);\n\n if (!rangeStart) {\n throw new Error(\n `${DATE_RANGE_PICKER} is missing inner two '${DATE_PICKER}' elements`,\n );\n }\n\n if (!rangeEnd) {\n throw new Error(\n `${DATE_RANGE_PICKER} is missing second '${DATE_PICKER}' element`,\n );\n }\n\n rangeStart.classList.add(DATE_RANGE_PICKER_RANGE_START_CLASS);\n rangeEnd.classList.add(DATE_RANGE_PICKER_RANGE_END_CLASS);\n\n if (!dateRangePickerEl.dataset.minDate) {\n dateRangePickerEl.dataset.minDate = DEFAULT_MIN_DATE;\n }\n\n const { minDate } = dateRangePickerEl.dataset;\n rangeStart.dataset.minDate = minDate;\n rangeEnd.dataset.minDate = minDate;\n\n const { maxDate } = dateRangePickerEl.dataset;\n if (maxDate) {\n rangeStart.dataset.maxDate = maxDate;\n rangeEnd.dataset.maxDate = maxDate;\n }\n\n handleRangeStartUpdate(dateRangePickerEl);\n handleRangeEndUpdate(dateRangePickerEl);\n};\n\nconst dateRangePicker = behavior(\n {\n \"input change\": {\n [DATE_RANGE_PICKER_RANGE_START]() {\n handleRangeStartUpdate(this);\n },\n [DATE_RANGE_PICKER_RANGE_END]() {\n handleRangeEndUpdate(this);\n },\n },\n },\n {\n init(root) {\n selectOrMatches(DATE_RANGE_PICKER, root).forEach((dateRangePickerEl) => {\n enhanceDateRangePicker(dateRangePickerEl);\n });\n },\n },\n);\n\nmodule.exports = dateRangePicker;\n","const selectOrMatches = require(\"../../uswds-core/src/js/utils/select-or-matches\");\nconst behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst Sanitizer = require(\"../../uswds-core/src/js/utils/sanitizer\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\n\nconst DROPZONE_CLASS = `${PREFIX}-file-input`;\nconst DROPZONE = `.${DROPZONE_CLASS}`;\nconst INPUT_CLASS = `${PREFIX}-file-input__input`;\nconst TARGET_CLASS = `${PREFIX}-file-input__target`;\nconst INPUT = `.${INPUT_CLASS}`;\nconst BOX_CLASS = `${PREFIX}-file-input__box`;\nconst INSTRUCTIONS_CLASS = `${PREFIX}-file-input__instructions`;\nconst PREVIEW_CLASS = `${PREFIX}-file-input__preview`;\nconst PREVIEW_HEADING_CLASS = `${PREFIX}-file-input__preview-heading`;\nconst DISABLED_CLASS = `${PREFIX}-file-input--disabled`;\nconst CHOOSE_CLASS = `${PREFIX}-file-input__choose`;\nconst ACCEPTED_FILE_MESSAGE_CLASS = `${PREFIX}-file-input__accepted-files-message`;\nconst DRAG_TEXT_CLASS = `${PREFIX}-file-input__drag-text`;\nconst DRAG_CLASS = `${PREFIX}-file-input--drag`;\nconst LOADING_CLASS = \"is-loading\";\nconst INVALID_FILE_CLASS = \"has-invalid-file\";\nconst GENERIC_PREVIEW_CLASS_NAME = `${PREFIX}-file-input__preview-image`;\nconst GENERIC_PREVIEW_CLASS = `${GENERIC_PREVIEW_CLASS_NAME}--generic`;\nconst PDF_PREVIEW_CLASS = `${GENERIC_PREVIEW_CLASS_NAME}--pdf`;\nconst WORD_PREVIEW_CLASS = `${GENERIC_PREVIEW_CLASS_NAME}--word`;\nconst VIDEO_PREVIEW_CLASS = `${GENERIC_PREVIEW_CLASS_NAME}--video`;\nconst EXCEL_PREVIEW_CLASS = `${GENERIC_PREVIEW_CLASS_NAME}--excel`;\nconst SR_ONLY_CLASS = `${PREFIX}-sr-only`;\nconst SPACER_GIF =\n \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n\nlet TYPE_IS_VALID = Boolean(true); // logic gate for change listener\nlet DEFAULT_ARIA_LABEL_TEXT = \"\";\nlet DEFAULT_FILE_STATUS_TEXT = \"\";\n\n/**\n * The properties and elements within the file input.\n * @typedef {Object} FileInputContext\n * @property {HTMLDivElement} dropZoneEl\n * @property {HTMLInputElement} inputEl\n */\n\n/**\n * Get an object of the properties and elements belonging directly to the given\n * file input component.\n *\n * @param {HTMLElement} el the element within the file input\n * @returns {FileInputContext} elements\n */\nconst getFileInputContext = (el) => {\n const dropZoneEl = el.closest(DROPZONE);\n\n if (!dropZoneEl) {\n throw new Error(`Element is missing outer ${DROPZONE}`);\n }\n\n const inputEl = dropZoneEl.querySelector(INPUT);\n\n return {\n dropZoneEl,\n inputEl,\n };\n};\n\n/**\n * Disable the file input component\n *\n * @param {HTMLElement} el An element within the file input component\n */\nconst disable = (el) => {\n const { dropZoneEl, inputEl } = getFileInputContext(el);\n\n inputEl.disabled = true;\n dropZoneEl.classList.add(DISABLED_CLASS);\n};\n\n/**\n * Set aria-disabled attribute to file input component\n *\n * @param {HTMLElement} el An element within the file input component\n */\nconst ariaDisable = (el) => {\n const { dropZoneEl } = getFileInputContext(el);\n\n dropZoneEl.classList.add(DISABLED_CLASS);\n};\n\n/**\n * Enable the file input component\n *\n * @param {HTMLElement} el An element within the file input component\n */\nconst enable = (el) => {\n const { dropZoneEl, inputEl } = getFileInputContext(el);\n\n inputEl.disabled = false;\n dropZoneEl.classList.remove(DISABLED_CLASS);\n dropZoneEl.removeAttribute(\"aria-disabled\");\n};\n\n/**\n *\n * @param {String} s special characters\n * @returns {String} replaces specified values\n */\nconst replaceName = (s) => {\n const c = s.charCodeAt(0);\n if (c === 32) return \"-\";\n if (c >= 65 && c <= 90) return `img_${s.toLowerCase()}`;\n return `__${(\"000\", c.toString(16)).slice(-4)}`;\n};\n\n/**\n * Creates an ID name for each file that strips all invalid characters.\n * @param {String} name - name of the file added to file input (searchvalue)\n * @returns {String} same characters as the name with invalid chars removed (newvalue)\n */\nconst makeSafeForID = (name) => name.replace(/[^a-z0-9]/g, replaceName);\n\n// Takes a generated safe ID and creates a unique ID.\nconst createUniqueID = (name) =>\n `${name}-${Math.floor(Date.now().toString() / 1000)}`;\n\n/**\n * Determines if the singular or plural item label should be used\n * Determination is based on the presence of the `multiple` attribute\n *\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @returns {HTMLDivElement} The singular or plural version of \"item\"\n */\nconst getItemsLabel = (fileInputEl) => {\n const acceptsMultiple = fileInputEl.hasAttribute(\"multiple\");\n const itemsLabel = acceptsMultiple ? \"files\" : \"file\";\n\n return itemsLabel;\n};\n\n/**\n * Scaffold the file input component with a parent wrapper and\n * Create a target area overlay for drag and drop functionality\n *\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @returns {HTMLDivElement} The drag and drop target area.\n */\nconst createTargetArea = (fileInputEl) => {\n const fileInputParent = document.createElement(\"div\");\n const dropTarget = document.createElement(\"div\");\n const box = document.createElement(\"div\");\n\n // Adds class names and other attributes\n fileInputEl.classList.remove(DROPZONE_CLASS);\n fileInputEl.classList.add(INPUT_CLASS);\n fileInputParent.classList.add(DROPZONE_CLASS);\n box.classList.add(BOX_CLASS);\n dropTarget.classList.add(TARGET_CLASS);\n\n // Adds child elements to the DOM\n dropTarget.prepend(box);\n fileInputEl.parentNode.insertBefore(dropTarget, fileInputEl);\n fileInputEl.parentNode.insertBefore(fileInputParent, dropTarget);\n dropTarget.appendChild(fileInputEl);\n fileInputParent.appendChild(dropTarget);\n\n return dropTarget;\n};\n\n/**\n * Build the visible element with default interaction instructions.\n *\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @returns {HTMLDivElement} The container for visible interaction instructions.\n */\nconst createVisibleInstructions = (fileInputEl) => {\n const fileInputParent = fileInputEl.closest(DROPZONE);\n const itemsLabel = getItemsLabel(fileInputEl);\n const instructions = document.createElement(\"div\");\n const dragText = `Drag ${itemsLabel} here or`;\n const chooseText = \"choose from folder\";\n\n // Create instructions text for aria-label\n DEFAULT_ARIA_LABEL_TEXT = `${dragText} ${chooseText}`;\n\n // Adds class names and other attributes\n instructions.classList.add(INSTRUCTIONS_CLASS);\n instructions.setAttribute(\"aria-hidden\", \"true\");\n\n // Add initial instructions for input usage\n fileInputEl.setAttribute(\"aria-label\", DEFAULT_ARIA_LABEL_TEXT);\n instructions.innerHTML = Sanitizer.escapeHTML`${dragText} ${chooseText}`;\n\n // Add the instructions element to the DOM\n fileInputEl.parentNode.insertBefore(instructions, fileInputEl);\n\n // IE11 and Edge do not support drop files on file inputs, so we've removed text that indicates that\n if (\n /rv:11.0/i.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent)\n ) {\n fileInputParent.querySelector(`.${DRAG_TEXT_CLASS}`).outerHTML = \"\";\n }\n\n return instructions;\n};\n\n/**\n * Build a screen reader-only message element that contains file status updates and\n * Create and set the default file status message\n *\n * @param {HTMLInputElement} fileInputEl - The input element.\n */\nconst createSROnlyStatus = (fileInputEl) => {\n const statusEl = document.createElement(\"div\");\n const itemsLabel = getItemsLabel(fileInputEl);\n const fileInputParent = fileInputEl.closest(DROPZONE);\n const fileInputTarget = fileInputEl.closest(`.${TARGET_CLASS}`);\n\n DEFAULT_FILE_STATUS_TEXT = `No ${itemsLabel} selected.`;\n\n // Adds class names and other attributes\n statusEl.classList.add(SR_ONLY_CLASS);\n statusEl.setAttribute(\"aria-live\", \"polite\");\n\n // Add initial file status message\n statusEl.textContent = DEFAULT_FILE_STATUS_TEXT;\n\n // Add the status element to the DOM\n fileInputParent.insertBefore(statusEl, fileInputTarget);\n};\n\n/**\n * Scaffold the component with all required elements\n *\n * @param {HTMLInputElement} fileInputEl - The original input element.\n */\nconst enhanceFileInput = (fileInputEl) => {\n const isInputDisabled =\n fileInputEl.hasAttribute(\"aria-disabled\") ||\n fileInputEl.hasAttribute(\"disabled\");\n const dropTarget = createTargetArea(fileInputEl);\n const instructions = createVisibleInstructions(fileInputEl);\n const { dropZoneEl } = getFileInputContext(fileInputEl);\n\n if (isInputDisabled) {\n dropZoneEl.classList.add(DISABLED_CLASS);\n } else {\n createSROnlyStatus(fileInputEl);\n }\n\n return { instructions, dropTarget };\n};\n\n/**\n * Removes image previews\n * We want to start with a clean list every time files are added to the file input\n *\n * @param {HTMLDivElement} dropTarget - The drag and drop target area.\n * @param {HTMLDivElement} instructions - The container for visible interaction instructions.\n */\nconst removeOldPreviews = (dropTarget, instructions) => {\n const filePreviews = dropTarget.querySelectorAll(`.${PREVIEW_CLASS}`);\n const currentPreviewHeading = dropTarget.querySelector(\n `.${PREVIEW_HEADING_CLASS}`,\n );\n const currentErrorMessage = dropTarget.querySelector(\n `.${ACCEPTED_FILE_MESSAGE_CLASS}`,\n );\n\n /**\n * finds the parent of the passed node and removes the child\n * @param {HTMLElement} node\n */\n const removeImages = (node) => {\n node.parentNode.removeChild(node);\n };\n\n // Remove the heading above the previews\n if (currentPreviewHeading) {\n currentPreviewHeading.outerHTML = \"\";\n }\n\n // Remove existing error messages\n if (currentErrorMessage) {\n currentErrorMessage.outerHTML = \"\";\n dropTarget.classList.remove(INVALID_FILE_CLASS);\n }\n\n // Get rid of existing previews if they exist, show instructions\n if (filePreviews !== null) {\n if (instructions) {\n instructions.removeAttribute(\"hidden\");\n }\n Array.prototype.forEach.call(filePreviews, removeImages);\n }\n};\n\n/**\n * Update the screen reader-only status message after interaction\n *\n * @param {HTMLDivElement} statusElement - The screen reader-only container for file status updates.\n * @param {Object} fileNames - The selected files found in the fileList object.\n * @param {Array} fileStore - The array of uploaded file names created from the fileNames object.\n */\nconst updateStatusMessage = (statusElement, fileNames, fileStore) => {\n const statusEl = statusElement;\n let statusMessage = DEFAULT_FILE_STATUS_TEXT;\n\n // If files added, update the status message with file name(s)\n if (fileNames.length === 1) {\n statusMessage = `You have selected the file: ${fileStore}`;\n } else if (fileNames.length > 1) {\n statusMessage = `You have selected ${\n fileNames.length\n } files: ${fileStore.join(\", \")}`;\n }\n\n // Add delay to encourage screen reader readout\n setTimeout(() => {\n statusEl.textContent = statusMessage;\n }, 1000);\n};\n\n/**\n * Show the preview heading, hide the initial instructions and\n * Update the aria-label with new instructions text\n *\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @param {Object} fileNames - The selected files found in the fileList object.\n */\nconst addPreviewHeading = (fileInputEl, fileNames) => {\n const filePreviewsHeading = document.createElement(\"div\");\n const dropTarget = fileInputEl.closest(`.${TARGET_CLASS}`);\n const instructions = dropTarget.querySelector(`.${INSTRUCTIONS_CLASS}`);\n let changeItemText = \"Change file\";\n let previewHeadingText = \"\";\n\n if (fileNames.length === 1) {\n previewHeadingText = Sanitizer.escapeHTML`Selected file ${changeItemText}`;\n } else if (fileNames.length > 1) {\n changeItemText = \"Change files\";\n previewHeadingText = Sanitizer.escapeHTML`${fileNames.length} files selected ${changeItemText}`;\n }\n\n // Hides null state content and sets preview heading\n instructions.setAttribute(\"hidden\", \"true\");\n filePreviewsHeading.classList.add(PREVIEW_HEADING_CLASS);\n filePreviewsHeading.innerHTML = previewHeadingText;\n dropTarget.insertBefore(filePreviewsHeading, instructions);\n\n // Update aria label to match the visible action text\n fileInputEl.setAttribute(\"aria-label\", changeItemText);\n};\n\n/**\n * When new files are applied to file input, this function generates previews\n * and removes old ones.\n *\n * @param {event} e\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @param {HTMLDivElement} instructions - The container for visible interaction instructions.\n * @param {HTMLDivElement} dropTarget - The drag and drop target area.\n */\n\nconst handleChange = (e, fileInputEl, instructions, dropTarget) => {\n const fileNames = e.target.files;\n const inputParent = dropTarget.closest(`.${DROPZONE_CLASS}`);\n const statusElement = inputParent.querySelector(`.${SR_ONLY_CLASS}`);\n const fileStore = [];\n\n // First, get rid of existing previews\n removeOldPreviews(dropTarget, instructions);\n\n // Then, iterate through files list and create previews\n for (let i = 0; i < fileNames.length; i += 1) {\n const reader = new FileReader();\n const fileName = fileNames[i].name;\n let imageId;\n\n // Push updated file names into the store array\n fileStore.push(fileName);\n\n // Starts with a loading image while preview is created\n reader.onloadstart = function createLoadingImage() {\n imageId = createUniqueID(makeSafeForID(fileName));\n\n instructions.insertAdjacentHTML(\n \"afterend\",\n Sanitizer.escapeHTML`
\n \"\"${fileName}\n
`,\n );\n };\n\n // Not all files will be able to generate previews. In case this happens, we provide several types \"generic previews\" based on the file extension.\n reader.onloadend = function createFilePreview() {\n const previewImage = document.getElementById(imageId);\n if (fileName.indexOf(\".pdf\") > 0) {\n previewImage.setAttribute(\n \"onerror\",\n `this.onerror=null;this.src=\"${SPACER_GIF}\"; this.classList.add(\"${PDF_PREVIEW_CLASS}\")`,\n );\n } else if (\n fileName.indexOf(\".doc\") > 0 ||\n fileName.indexOf(\".pages\") > 0\n ) {\n previewImage.setAttribute(\n \"onerror\",\n `this.onerror=null;this.src=\"${SPACER_GIF}\"; this.classList.add(\"${WORD_PREVIEW_CLASS}\")`,\n );\n } else if (\n fileName.indexOf(\".xls\") > 0 ||\n fileName.indexOf(\".numbers\") > 0\n ) {\n previewImage.setAttribute(\n \"onerror\",\n `this.onerror=null;this.src=\"${SPACER_GIF}\"; this.classList.add(\"${EXCEL_PREVIEW_CLASS}\")`,\n );\n } else if (fileName.indexOf(\".mov\") > 0 || fileName.indexOf(\".mp4\") > 0) {\n previewImage.setAttribute(\n \"onerror\",\n `this.onerror=null;this.src=\"${SPACER_GIF}\"; this.classList.add(\"${VIDEO_PREVIEW_CLASS}\")`,\n );\n } else {\n previewImage.setAttribute(\n \"onerror\",\n `this.onerror=null;this.src=\"${SPACER_GIF}\"; this.classList.add(\"${GENERIC_PREVIEW_CLASS}\")`,\n );\n }\n\n // Removes loader and displays preview\n previewImage.classList.remove(LOADING_CLASS);\n previewImage.src = reader.result;\n };\n\n if (fileNames[i]) {\n reader.readAsDataURL(fileNames[i]);\n }\n }\n\n if (fileNames.length === 0) {\n // Reset input aria-label with default message\n fileInputEl.setAttribute(\"aria-label\", DEFAULT_ARIA_LABEL_TEXT);\n } else {\n addPreviewHeading(fileInputEl, fileNames);\n }\n\n updateStatusMessage(statusElement, fileNames, fileStore);\n};\n\n/**\n * When using an Accept attribute, invalid files will be hidden from\n * file browser, but they can still be dragged to the input. This\n * function prevents them from being dragged and removes error states\n * when correct files are added.\n *\n * @param {event} e\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @param {HTMLDivElement} instructions - The container for visible interaction instructions.\n * @param {HTMLDivElement} dropTarget - The drag and drop target area.\n */\nconst preventInvalidFiles = (e, fileInputEl, instructions, dropTarget) => {\n const acceptedFilesAttr = fileInputEl.getAttribute(\"accept\");\n dropTarget.classList.remove(INVALID_FILE_CLASS);\n\n /**\n * We can probably move away from this once IE11 support stops, and replace\n * with a simple es `.includes`\n * check if element is in array\n * check if 1 or more alphabets are in string\n * if element is present return the position value and -1 otherwise\n * @param {Object} file\n * @param {String} value\n * @returns {Boolean}\n */\n const isIncluded = (file, value) => {\n let returnValue = false;\n const pos = file.indexOf(value);\n if (pos >= 0) {\n returnValue = true;\n }\n return returnValue;\n };\n\n // Runs if only specific files are accepted\n if (acceptedFilesAttr) {\n const acceptedFiles = acceptedFilesAttr.split(\",\");\n const errorMessage = document.createElement(\"div\");\n\n // If multiple files are dragged, this iterates through them and look for any files that are not accepted.\n let allFilesAllowed = true;\n const scannedFiles = e.target.files || e.dataTransfer.files;\n for (let i = 0; i < scannedFiles.length; i += 1) {\n const file = scannedFiles[i];\n if (allFilesAllowed) {\n for (let j = 0; j < acceptedFiles.length; j += 1) {\n const fileType = acceptedFiles[j];\n allFilesAllowed =\n file.name.indexOf(fileType) > 0 ||\n isIncluded(file.type, fileType.replace(/\\*/g, \"\"));\n if (allFilesAllowed) {\n TYPE_IS_VALID = true;\n break;\n }\n }\n } else break;\n }\n\n // If dragged files are not accepted, this removes them from the value of the input and creates and error state\n if (!allFilesAllowed) {\n removeOldPreviews(dropTarget, instructions);\n fileInputEl.value = \"\"; // eslint-disable-line no-param-reassign\n dropTarget.insertBefore(errorMessage, fileInputEl);\n errorMessage.textContent =\n fileInputEl.dataset.errormessage || `This is not a valid file type.`;\n errorMessage.classList.add(ACCEPTED_FILE_MESSAGE_CLASS);\n dropTarget.classList.add(INVALID_FILE_CLASS);\n TYPE_IS_VALID = false;\n e.preventDefault();\n e.stopPropagation();\n }\n }\n};\n\n/**\n * 1. passes through gate for preventing invalid files\n * 2. handles updates if file is valid\n *\n * @param {event} event\n * @param {HTMLInputElement} fileInputEl - The input element.\n * @param {HTMLDivElement} instructions - The container for visible interaction instructions.\n * @param {HTMLDivElement} dropTarget - The drag and drop target area.\n */\nconst handleUpload = (event, fileInputEl, instructions, dropTarget) => {\n preventInvalidFiles(event, fileInputEl, instructions, dropTarget);\n if (TYPE_IS_VALID === true) {\n handleChange(event, fileInputEl, instructions, dropTarget);\n }\n};\n\nconst fileInput = behavior(\n {},\n {\n init(root) {\n selectOrMatches(DROPZONE, root).forEach((fileInputEl) => {\n const { instructions, dropTarget } = enhanceFileInput(fileInputEl);\n\n dropTarget.addEventListener(\n \"dragover\",\n function handleDragOver() {\n this.classList.add(DRAG_CLASS);\n },\n false,\n );\n\n dropTarget.addEventListener(\n \"dragleave\",\n function handleDragLeave() {\n this.classList.remove(DRAG_CLASS);\n },\n false,\n );\n\n dropTarget.addEventListener(\n \"drop\",\n function handleDrop() {\n this.classList.remove(DRAG_CLASS);\n },\n false,\n );\n\n fileInputEl.addEventListener(\n \"change\",\n (e) => handleUpload(e, fileInputEl, instructions, dropTarget),\n false,\n );\n });\n },\n teardown(root) {\n selectOrMatches(INPUT, root).forEach((fileInputEl) => {\n const fileInputTopElement = fileInputEl.parentElement.parentElement;\n fileInputTopElement.parentElement.replaceChild(\n fileInputEl,\n fileInputTopElement,\n );\n // eslint-disable-next-line no-param-reassign\n fileInputEl.className = DROPZONE_CLASS;\n });\n },\n getFileInputContext,\n disable,\n ariaDisable,\n enable,\n },\n);\n\nmodule.exports = fileInput;\n","const behavior = require(\"../../uswds-core/src/js/utils/behavior\");\nconst { CLICK } = require(\"../../uswds-core/src/js/events\");\nconst { prefix: PREFIX } = require(\"../../uswds-core/src/js/config\");\n\nconst SCOPE = `.${PREFIX}-footer--big`;\nconst NAV = `${SCOPE} nav`;\nconst BUTTON = `${NAV} .${PREFIX}-footer__primary-link`;\nconst HIDE_MAX_WIDTH = 480;\n\n/**\n * Expands selected footer menu panel, while collapsing others\n */\nfunction showPanel() {\n if (window.innerWidth < HIDE_MAX_WIDTH) {\n const isOpen = this.getAttribute(\"aria-expanded\") === \"true\";\n const thisFooter = this.closest(SCOPE);\n\n // Close all other menus\n thisFooter.querySelectorAll(BUTTON).forEach((button) => {\n button.setAttribute(\"aria-expanded\", false);\n });\n\n this.setAttribute(\"aria-expanded\", !isOpen);\n }\n}\n\n/**\n * Swaps the

element for a