Merge branch 'master' of feistymeow.org:feisty_meow
authorChris Koeritz <fred@gruntose.com>
Mon, 20 May 2019 19:22:41 +0000 (15:22 -0400)
committerChris Koeritz <fred@gruntose.com>
Mon, 20 May 2019 19:22:41 +0000 (15:22 -0400)
fixing weird issues in raw_synch state

1063 files changed:
.gitignore
documentation/feisty_meow_dox.config
documentation/google_apis/google_apis_and_credentials.odt [changed mode: 0755->0644]
documentation/google_apis/google_apis_and_credentials.pdf [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.001 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.002 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.003 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.004 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.005 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.006 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.007 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.008 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.009 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.010 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.011 [changed mode: 0755->0644]
experiments/vnc/dot.vnc/xstartup.012 [changed mode: 0755->0644]
experiments/vnc/init.d/vncserver.001 [changed mode: 0755->0644]
experiments/vnc/init.d/vncserver.002 [changed mode: 0755->0644]
experiments/vnc/init.d/vncserver.003 [changed mode: 0755->0644]
experiments/vnc/init.d/vncserver.004 [changed mode: 0755->0644]
experiments/vnc/init.d/vncserver.005 [changed mode: 0755->0644]
graphiq/.settings/language.settings.xml
infobase/configuration/cron/aa_cron_defaults.crontab
infobase/configuration/cron/backup_git_account.crontab
infobase/configuration/cron/backup_maildir.crontab
infobase/configuration/cron/backup_mailman.crontab
infobase/configuration/cron/backup_mysql_databases.crontab
infobase/configuration/cron/backup_photo_albums.crontab
infobase/configuration/cron/backup_serene_system.crontab
infobase/configuration/cron/backup_trac.crontab
infobase/configuration/cron/bookmarks_builder.crontab
infobase/configuration/cron/chkrootkit.crontab
infobase/configuration/cron/doxygen.crontab
infobase/configuration/cron/emit_crontab.crontab
infobase/configuration/cron/letsencrypt_renewal.crontab
infobase/configuration/cron/mailman_attribute_fix.crontab
infobase/configuration/cron/nechung_fortune.crontab
infobase/configuration/cron/opensim_restart.crontab
infobase/configuration/cron/pack_feisty_for_web.crontab
infobase/configuration/cron/periodic_reboot.crontab [new file with mode: 0644]
infobase/configuration/cron/process_check.crontab
infobase/configuration/cron/random_sound.crontab
infobase/configuration/cron/snarf_linux_configuration.crontab
infobase/configuration/cron/synch_and_swim_downstream.crontab
infobase/configuration/cron/tell_zooty_our_ip.crontab
infobase/configuration/cron/time_synch.crontab
infobase/configuration/cron/update_apt_based_linux.crontab
infobase/configuration/cron/update_system_time.crontab [new file with mode: 0644]
infobase/configuration/cron/uptime_report.crontab
infobase/configuration/cron/web_group_perm_fix.crontab
infobase/configuration/mutt_email/dot.muttrc [new file with mode: 0644]
infobase/configuration/vim/dot.vimrc
infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt [new file with mode: 0644]
infobase/document_templates/fallout76_vendor_record.odt [new file with mode: 0644]
infobase/fortunes.dat
infobase/metaverse/viewer_list.txt [new file with mode: 0644]
kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar [new file with mode: 0644]
kona/osgi/org.feistymeow.bundle.helloOSGi/.classpath
kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore [new file with mode: 0644]
kona/osgi/org.feistymeow.bundle.helloOSGi/.settings/org.eclipse.jdt.core.prefs
kona/osgi/org.feistymeow.bundle.servicesOSGi/.classpath
kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore [new file with mode: 0644]
kona/osgi/org.feistymeow.bundle.servicesOSGi/.settings/org.eclipse.jdt.core.prefs
kona/src/org/feistymeow/algorithms/RectangleIntersector.java
kona/src/org/gffs/io/IOUtils.java
nucleus/.settings/language.settings.xml
nucleus/applications/utilities/dirtree.cpp
nucleus/library/__build_configuration.h [new file with mode: 0644]
nucleus/library/tests_configuration/test_section_manager.cpp
nucleus/tools/clam_tools/write_build_config.cpp
production/example_apps/shared_calendar/.buildpath [new file with mode: 0644]
production/example_apps/shared_calendar/.editorconfig [new file with mode: 0644]
production/example_apps/shared_calendar/.gitattributes [new file with mode: 0644]
production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md [new file with mode: 0644]
production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md [new file with mode: 0644]
production/example_apps/shared_calendar/.gitignore [new file with mode: 0644]
production/example_apps/shared_calendar/.htaccess [new file with mode: 0644]
production/example_apps/shared_calendar/.project [new file with mode: 0644]
production/example_apps/shared_calendar/.settings/.jsdtscope [new file with mode: 0644]
production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs [new file with mode: 0644]
production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml [new file with mode: 0644]
production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container [new file with mode: 0644]
production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name [new file with mode: 0644]
production/example_apps/shared_calendar/.travis.yml [new file with mode: 0644]
production/example_apps/shared_calendar/bin/cake [new file with mode: 0644]
production/example_apps/shared_calendar/bin/cake.bat [new file with mode: 0644]
production/example_apps/shared_calendar/bin/cake.php [new file with mode: 0644]
production/example_apps/shared_calendar/composer.json [new file with mode: 0644]
production/example_apps/shared_calendar/composer.lock [new file with mode: 0644]
production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock [new file with mode: 0644]
production/example_apps/shared_calendar/config/app.default.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/bootstrap.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/bootstrap_cli.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/paths.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/routes.php [new file with mode: 0644]
production/example_apps/shared_calendar/config/schema/i18n.sql [new file with mode: 0644]
production/example_apps/shared_calendar/config/schema/sessions.sql [new file with mode: 0644]
production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt [new file with mode: 0644]
production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf [new file with mode: 0644]
production/example_apps/shared_calendar/docs/readme.txt [new file with mode: 0644]
production/example_apps/shared_calendar/index.php [new file with mode: 0644]
production/example_apps/shared_calendar/phpunit.xml.dist [new file with mode: 0644]
production/example_apps/shared_calendar/plugins/empty [new file with mode: 0644]
production/example_apps/shared_calendar/scripts/launch_local_cake.sh [new file with mode: 0644]
production/example_apps/shared_calendar/scripts/launch_serene_cake.sh [new file with mode: 0644]
production/example_apps/shared_calendar/src/Application.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Console/Installer.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Controller/AppController.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Controller/AuthorizerController.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Controller/ErrorController.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Controller/PagesController.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Controller/UsersController.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Model/Behavior/empty [new file with mode: 0644]
production/example_apps/shared_calendar/src/Model/Entity/User.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Model/Table/UsersTable.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Shell/ConsoleShell.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Email/html/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Email/text/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Error/error400.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Error/error500.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/error.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Pages/home.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/add.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/callback.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/edit.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/index.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/revoke.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Template/Users/view.ctp [new file with mode: 0644]
production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/View/AjaxView.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/View/AppView.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php [new file with mode: 0644]
production/example_apps/shared_calendar/src/View/Helper/empty [new file with mode: 0644]
production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/Model/Behavior/empty [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php [new file with mode: 0644]
production/example_apps/shared_calendar/tests/TestCase/View/Helper/empty [new file with mode: 0644]
production/example_apps/shared_calendar/tests/bootstrap.php [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/.htaccess [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/css/base.css [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/css/cake.css [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/css/home.css [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/favicon.ico [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/img/cake-logo.png [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/img/cake.icon.png [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/img/cake.logo.svg [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/img/cake.power.gif [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/index.php [new file with mode: 0644]
production/example_apps/shared_calendar/webroot/js/empty [new file with mode: 0644]
production/example_apps/zippy_maps/.buildpath [new file with mode: 0644]
production/example_apps/zippy_maps/.editorconfig [new file with mode: 0644]
production/example_apps/zippy_maps/.gitattributes [new file with mode: 0644]
production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md [new file with mode: 0644]
production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md [new file with mode: 0644]
production/example_apps/zippy_maps/.gitignore [new file with mode: 0644]
production/example_apps/zippy_maps/.htaccess [new file with mode: 0644]
production/example_apps/zippy_maps/.project [new file with mode: 0644]
production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs [new file with mode: 0644]
production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml [new file with mode: 0644]
production/example_apps/zippy_maps/.travis.yml [new file with mode: 0644]
production/example_apps/zippy_maps/bin/cake [new file with mode: 0755]
production/example_apps/zippy_maps/bin/cake.bat [new file with mode: 0644]
production/example_apps/zippy_maps/bin/cake.php [new file with mode: 0644]
production/example_apps/zippy_maps/composer.json [new file with mode: 0644]
production/example_apps/zippy_maps/composer.lock [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock [new file with mode: 0644]
production/example_apps/zippy_maps/config/app.default.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/bootstrap.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/bootstrap_cli.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/config_google.default.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/paths.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/routes.php [new file with mode: 0644]
production/example_apps/zippy_maps/config/schema/i18n.sql [new file with mode: 0644]
production/example_apps/zippy_maps/config/schema/sessions.sql [new file with mode: 0644]
production/example_apps/zippy_maps/docs/google_api_info.txt [new file with mode: 0644]
production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql [new file with mode: 0644]
production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql [new file with mode: 0644]
production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip [new file with mode: 0644]
production/example_apps/zippy_maps/index.php [new file with mode: 0644]
production/example_apps/zippy_maps/phpunit.xml.dist [new file with mode: 0644]
production/example_apps/zippy_maps/readme.txt [new file with mode: 0644]
production/example_apps/zippy_maps/reference/zipcode.php [new file with mode: 0644]
production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh [new file with mode: 0644]
production/example_apps/zippy_maps/scripts/launch_local_cake.sh [new file with mode: 0644]
production/example_apps/zippy_maps/scripts/launch_serene_cake.sh [new file with mode: 0644]
production/example_apps/zippy_maps/scripts/prepare_project.sh [new file with mode: 0644]
production/example_apps/zippy_maps/src/Application.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Console/Installer.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/AppController.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/CategoriesController.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/Component/empty [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/ErrorController.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/LocationsController.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Controller/PagesController.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Behavior/empty [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Entity/Category.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Entity/Location.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Shell/ConsoleShell.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/add.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/center.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/edit.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/index.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/map.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Categories/view.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Email/html/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Email/text/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Error/error400.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Error/error500.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/error.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/add.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/distance.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/edit.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/index.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/jump.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/radius.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Locations/view.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/Template/Pages/home.ctp [new file with mode: 0644]
production/example_apps/zippy_maps/src/View/AjaxView.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/View/AppView.php [new file with mode: 0644]
production/example_apps/zippy_maps/src/View/Helper/empty [new file with mode: 0644]
production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Controller/Component/empty [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Model/Behavior/empty [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php [new file with mode: 0644]
production/example_apps/zippy_maps/tests/TestCase/View/Helper/empty [new file with mode: 0644]
production/example_apps/zippy_maps/tests/bootstrap.php [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/.htaccess [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/css/base.css [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/css/cake.css [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/css/home.css [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/favicon.ico [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/cake-logo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/cake.icon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/cake.logo.svg [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/cake.power.gif [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/2hand.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/360degrees.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/abduction.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/administration.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/aed-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/agritourism.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/airport.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/algae.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/alien.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/alligator.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/anniversary.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ant-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/anthropo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/apple.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/aquarium.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/arch.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/archery.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/army.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/artgallery.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/atm-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/atv.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/audio.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/award.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bags.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bank.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/barbecue.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/barber.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/barrier.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/baseball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/basketball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bats.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/battlefield.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/beach.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/beergarden.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bigcity.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/binoculars.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/birds-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/blast.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/boardercross.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/boat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bollie.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bomb.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bouddha.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bowling.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/boxing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bread.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/brewery1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bullfight.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bus.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/busstop.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/bustour.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cablecar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/camping-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/candy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/car.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/caraccident.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/carrental.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/carwash.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/casino-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/castle-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cathedral.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/caution.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cave-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cctv.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cemetary.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/channelchange.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/chart-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cheese.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/church-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cinema.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/circus.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/citysquare.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/citywalls.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/climbing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/clock.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/closedroad.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cloudy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/coffee.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/coins.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/comics.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/company.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/compost.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/computers.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/condominium.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/conference.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/congress.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/construction.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/contract.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/convent-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/convertible.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/corral.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/country.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/court.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cow-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/craftstore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cramschool.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cricket.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/crimescene.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cromlech.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cross-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cup.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/curling-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/customs.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cycling.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dam.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dance_class.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/database.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/daycare.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/deer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dentist.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/desert-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dinopark.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/direction_down.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/disability.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/diving.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/dolphins.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/drugstore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/duck-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/eggs.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/elephants.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/elevator.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/embassy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/entrance.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/exchequer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/exit.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/expert.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/factory.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/family.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/farm-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/farmstand.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fastfood.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/female-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ferry.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/festival.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/field.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/findajob.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/finish.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fire.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/firemen.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fireworks.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/firstaid.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fishchips.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fishing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fitness.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/flag-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/flood.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/flowers.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/folder-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/footprint.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ford-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/forest.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/forest2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fossils.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/freqchg.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/frog-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/fruits.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ft.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gay-female.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gay-male.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gifts.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/glasses.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/golfing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/grass.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/grocery.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/group-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/handball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/harbor.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hare1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hats.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/haybale.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/helicopter.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/highhills.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/highschool.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/highway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hiking.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/home-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/homecenter.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/horseriding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hotspring.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/house.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hunting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/hut.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/icecream.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/icehockey.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/iceskating.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/icy_road.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/information.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/iobridge.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jeep.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jewelry.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/jogging.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/judo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/junction.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/karate.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/karting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kayak1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kayaking.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kebab.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kingair.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kiosk.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/laboratory.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lake.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/landfill.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/landmark.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/laterne.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/laundromat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/library.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/linedown.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lingerie.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/liquor.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lock.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/love_date.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/magicshow.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mainroad.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/male-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mall.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/map.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mapicon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/marina-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/market.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/massage.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/medicine.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/megalith.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/memorial.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/military.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mine.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/missile-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/moderntower.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/monument.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/moonstar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mosquee.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/motel-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/motorbike.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mountains.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/movierental.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mural.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_art.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_science.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/museum_war.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/mushroom.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music_choral.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music_classical.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music_live.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/music_rock.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/nanny.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/newsagent.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/nordicski.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/notvisited.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/nursery.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/observatory.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/office-building.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/oil-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/outlet2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/paint.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/paintball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/palace-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/paragliding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/parasailing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/parkandride.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/party-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/patisserie.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/peace.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pens.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/perfumery.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/petanque.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pets.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/phantom.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/phones.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/photo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/photography.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pig.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pin-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pirates.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/planecrash.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/playground.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/poker.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/police.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/postal.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/powerplant.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/prayer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/presentation.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/printer-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/prison.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/publicart.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/pyramid.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/radar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/radiation.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rainy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rape.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/recycle.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/regroup.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/repair.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/resort.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/revolt.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/river-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/road.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rodent.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rowboat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sailing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sauna.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/school.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/seals.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/segway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/share.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shark-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shoes.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shooting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shore-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/shower.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sight-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sikh.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/skiing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/skijump.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/skilifting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/skis.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/skull.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sledge.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/slipway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/smallcity.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/smoking.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snail.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snakes.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sneakers.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/soccer.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/spa.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/speed_50.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/speedhump.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/speedriding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/spelunking.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/spider.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/splice.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sportscar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/square-compass.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/squash-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/stadium.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/stairs.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/star-3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/statue-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/stop.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/strike.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/summercamp.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sunny.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/supermarket.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/surfing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/swimming.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tailor.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/takeaway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/targ.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/taxi.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/taxiway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/teahouse.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/telephone.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/temple-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/templehindu.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tennis.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/terrace.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/text.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/textiles.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/theater.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/theft.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/themepark.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/therapy.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tires.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/toilets.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tollstation.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tools.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/torture.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tower.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/townhouse.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/toys.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/train.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tramway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/trash.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/treedown.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/triskelion.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/trolley.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/truck3.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tsunami.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tunnel.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/tweet.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/ufo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/underground.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/university.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/usfootball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/van.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/vespa.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/veterinary.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/video.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/videogames.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/villa.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/volleyball.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waiting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/war.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/water.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/watercraft.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waterpark.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/watertower.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waterwell.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/webcam.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wedding.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/weights.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wetlands.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/whale-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wifi.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wind-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/windturbine.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/winebar.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/winetasting.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/woodshed.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/workoffice.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/workshop.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/world.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/yoga.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/yooner.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/zoo.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/img/icons/zoom.png [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/index.php [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/js/empty [new file with mode: 0644]
production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js [new file with mode: 0644]
production/feisty_meow_config.ini
scripts/agenda/info_overload_report.sh
scripts/archival/comparator.sh [new file with mode: 0644]
scripts/archival/compare_backup_drive.sh [new file with mode: 0644]
scripts/archival/general_updater.sh
scripts/archival/localz_comparator.sh [new file with mode: 0644]
scripts/archival/raw_synch.sh [new file with mode: 0644]
scripts/archival/shared_snarfer.pl
scripts/archival/snarf_feisty_meow.pl
scripts/archival/unpack.sh
scripts/cgi/readme.txt [changed mode: 0644->0755]
scripts/clam/badness_catcher.sh [changed mode: 0755->0644]
scripts/clam/clean_subdirs.sh [changed mode: 0755->0644]
scripts/clam/cpp/buildor_gen_deps.sh [changed mode: 0755->0644]
scripts/clam/cpp/get_version.sh [changed mode: 0755->0644]
scripts/clam/cpp/ms_manifest.sh [changed mode: 0755->0644]
scripts/clam/cpp/ms_root_dir.sh [changed mode: 0755->0644]
scripts/clam/cpp/postconditions.sh [changed mode: 0755->0644]
scripts/clam/cpp/preconditions.sh [changed mode: 0755->0644]
scripts/clam/cpp/rc_name.sh [changed mode: 0755->0644]
scripts/clam/cpp/rebuild_oldies.sh [changed mode: 0755->0644]
scripts/clam/exit_make.sh [changed mode: 0755->0644]
scripts/clam/make_subdirs.sh [changed mode: 0755->0644]
scripts/clam/target_runner.sh [changed mode: 0755->0644]
scripts/core/common.alias
scripts/core/create_tempdir.sh
scripts/core/functions.sh
scripts/core/generate_aliases.pl
scripts/core/reconfigure_feisty_meow.sh
scripts/customize/dirt/scripts/redirt.sh [new file with mode: 0644]
scripts/customize/fred/fred_common.alias
scripts/customize/fred/fred_variables.sh
scripts/customize/fred/scripts/archival/compare_soapbox.sh [deleted file]
scripts/customize/fred/scripts/archival/euphrosyne_comparator.sh [deleted file]
scripts/customize/fred/scripts/archival/raw_synch.sh [deleted file]
scripts/customize/fred/scripts/games/gamesaver.sh
scripts/customize/fred/scripts/games/save_f76_pics.sh [new file with mode: 0644]
scripts/customize/fred/scripts/games/zap_witcher.sh [new file with mode: 0644]
scripts/customize/fred/scripts/refred.sh
scripts/customize/how_to_customize.txt
scripts/files/compare_dirs.sh
scripts/files/find_readonly.sh [new file with mode: 0644]
scripts/files/renlower.pl
scripts/files/spacem.sh [new file with mode: 0644]
scripts/generator/produce_feisty_meow.sh
scripts/generator/wrapdoze.sh [changed mode: 0755->0644]
scripts/marks/create_marks.sh
scripts/modem/dial_modem.sh [changed mode: 0755->0644]
scripts/modem/fix_modem_perms.sh [changed mode: 0755->0644]
scripts/modem/reinstall_dgcmodem_driver.sh [changed mode: 0755->0644]
scripts/rev_control/push_repo_downstream.sh
scripts/rev_control/version_control.sh
scripts/security/cool_permissionator.sh
scripts/security/tunnel_zooty_example.sh
scripts/site_avenger/avcoreup.sh
scripts/site_avenger/clean_mapsdemo.sh [deleted file]
scripts/site_avenger/config/default.app
scripts/site_avenger/powerup.sh
scripts/site_avenger/revamp_cakelampvm_v002.sh
scripts/site_avenger/revamp_cakelampvm_v003.sh
scripts/site_avenger/shared_site_mgr.sh
scripts/site_avenger/sitepush.sh
scripts/site_avenger/siteup.sh
scripts/site_avenger/standup.sh
scripts/site_avenger/teardown.sh
scripts/system/add_domain.sh
scripts/system/common_sysadmin.sh
scripts/system/update_system_time.sh [new file with mode: 0644]
scripts/tty/terminal_titler.sh
scripts/wine/remake_wine_links.sh
walrus/utilities/communication/remote_control_with_vnc.txt

index 60e170a5390e7c987e0e4ed9c507956758398a22..022cb9f5218e8174c4fb339b344142d269567e42 100644 (file)
@@ -3,7 +3,6 @@
 *~
 *#
 *.bak
-__build_configuration.h
 *.class
 .DS_Store
 *.log
index 4c0f610d667382a9756094a3fa9bf2b93c8e5333..1566a3506adb973edc802a98ce7be0b47dc22d1e 100644 (file)
@@ -23,7 +23,7 @@ PROJECT_NAME           = "feisty meow concerns codebase"
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = 2.108
+PROJECT_NUMBER         = 2.140
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index c65707132bef1bf5100bd3a1de9635bd548ff6a5..0fb11ecebc3e46ea2531b1859a565a6e775f504f 100644 (file)
@@ -5,7 +5,7 @@
                        <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
                        <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
                        <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-                       <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1260941817250426252" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+                       <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1260495321477850252" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
                                <language-scope id="org.eclipse.cdt.core.gcc"/>
                                <language-scope id="org.eclipse.cdt.core.g++"/>
                        </provider>
index c8ff3ebe422c2f76cdf9750b78311ab9763181c0..a6ba68498d914f3371f7be7234ffc7a9d33e7f5d 100644 (file)
@@ -62,10 +62,5 @@ FEISTY_MEOW_APEX=/opt/feistymeow.org/feisty_meow
 # below is a live example which we almost always include, so it's embedded
 # here for convenience.
 
-#[nechung fortune]
-# runs every minute and recreates a fortune for thunderbird signature.
-# a lot of the detail below is to get the feisty meow environment loaded for
-# the new_sig command.
-* * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; perl $FEISTY_MEOW_SCRIPTS/text/new_sig.pl) &>>/tmp/${CRONUSER}-cron-nechung_fortune.log
-
+##############
 
index a08e239ad088913800eba42a276f4e6bd52f0292..ae28d5626aa9bec6755c92cf6daba918eecfe335 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup git account]
 # archives the whole ~git folder with all account databases into a compressed tar file.
 34 20 * * 5 tar -czf /z/stuffing/archives/git_archive_$(date +"\%Y_\%m_\%d_\%H\%M_\%S" | tr -d '/\n/').tar.gz /home/git &>>/tmp/${CRONUSER}-cron-backup_git_account.log
 
+##############
+
index 5e9e501d10052579902be967812cde07fa2eac1a..a8af8d69c87351ee8c1d82b2fd9f13dac4bcd1b3 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup maildir]
 # backs up the maildir folder for fred bi-monthly.
 8 4 3,14 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/maildir_backup_$(date_stringer).tar.gz $HOME/Maildir) &>/tmp/${CRONUSER}-cron-backup_maildir.log
 
+##############
+
index 4eade1b1b444b8e529dab0954ede47f86988cacc..3a8b4831c157beb09d31680730e6e4640605ce06 100644 (file)
@@ -1,6 +1,10 @@
 
+##############
+
 #[backup_mailman_archives]
 # creates a monthly backup of all the mailman list server's archives.
 14 2 28 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/mailman_backup_$(hostname)_$(date_stringer).tar.gz /var/lib/mailman ) &>/tmp/${CRONUSER}-cron-mailman_backup.log
 
+##############
+
 
index 4f9c3b10ca7b86837b2bea345cc4ab7c4d305bf0..be5ffcf90e1a410013804c5bf984501bed0de918 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup mysql databases]
 # backs up all of our mysql databases on a weekly basis.
 28 4 * * 2 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; mysqldump -u root '-pPASSWORD' --all-databases | gzip > /z/stuffing/archives/database_backup_$(hostname)_$(date_stringer).sql.gz) &>>/tmp/${CRONUSER}-cron-backup_mysql_databases.log
 
+##############
+
index 8a51b931b10342a04545d9fef77170b4c8f0c736..b93e56ffa6bae10b30b71a9888c69a4eb0020e91 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup photo albums]
 # back up the pictures in coppermine gallery every month.
 34 6 4 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/photo_albums_backup_$(date_stringer).tar.gz /home/albums ; refred) &>>/tmp/${CRONUSER}-cron-backup_photo_albums.log
 
+##############
+
index 7742731dab192cfd747889760e4b498b61fc735e..e6ae20ed8305abeb80da531ef3b5092b29be22d1 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup serene system]
 # backs up config files and important parts of home directories to off-machine storage.
 14 2 * * */7 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/archival/serene_backer_upper.sh) &>>/tmp/${CRONUSER}-cron-backup_serene_system.log
 
+##############
+
index 8fcd8b24fa2c51a2dae3efd06e689a5f36ca0c94..2d4f5defb26c3fbfb06c90e8e503a95f5f2dd65c 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[backup trac]
 # backs up trac every week.
 28 7 * * 2 bash $FEISTY_MEOW_APEX/scripts/archival/backup_trac.sh /home/trac /z/stuffing/archives &>>/tmp/${CRONUSER}-cron-backup_trac.log
 
+##############
+
index 29f4fde3af41a73a323f39220f1e0c7682a0b6c9..9f54bb87d955b93cac2ba5a85416701adf061b96 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[bookmarks builder]
 # regenerate the bookmarks pages.
 24 10 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/bookmarks/create_marks.sh ) &>>/tmp/${CRONUSER}-cron-bookmarks_builder.log 
 
+##############
+
index 1087ce0020409aeb9ac3bbc2f34a11bc1ab2f092..69e3b76e9e71428b8c755d8452331449be1b58d3 100644 (file)
@@ -1,7 +1,11 @@
 
+##############
+
 #[chkrootkit]
 # this runs chkrootkit to demonstrate a bug in the vm kernel currently
 # provided by...?  hmmm: who's the vendor?
 3 * * * * (/usr/sbin/chkrootkit -q &>/var/www/rootkit_report_quiet.txt ) &>>/tmp/${CRONUSER}-cron-chkrootkit.log 
 4 * * * * (/usr/sbin/chkrootkit -x &>/var/www/rootkit_report_expert.txt ) &>>/tmp/${CRONUSER}-cron-chkrootkit.log 
 
+##############
+
index 035ee8e6b9fe8e0a552f2d17170acb61d749cd07..02770c813fe0aaf748235735343f4cfba7b46b35 100644 (file)
@@ -1,6 +1,10 @@
 
+##############
+
 #[doxygen]
 # update the feisty meow documentation once on each of tuesday, thursday and saturday.
 20 4 * * 2,4,6 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd $FEISTY_MEOW_APEX/documentation; make) &>>/tmp/${CRONUSER}-cron-doxygen.log 
 
 
+##############
+
index 152dd4b053716150918638fb7e97c570342a9094..99c15e3e45f80c3b9bdfe86a344d3d9f7a7612e7 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[emit crontab]
 # meta-operation to backup the crontab file using cron itself.
 28 */8 * * * crontab -l >$HOME/$(hostname).$CRONUSER.crontab
 
+##############
+
index 4a343de03f3ff848b6c61dd7b08612803348d66d..450f08b29cbedecb5cb7f8e51477b4003d8d3590 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[letsencrypt renewal]
 # run the letsencrypt certificate renewal process every 4 hours.
 37 */4 * * * letsencrypt renew &>>/tmp/${CRONUSER}-cron-letsencrypt_renewal.log 
 
+##############
+
index 72ea73e8bf584970b85048c41cc93bd4778c2ce2..b0048a664631859f6d6d1306760e319f5081e362 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[mailman attribute fix]
 # fix the mailman log files so that an obnoxious bug doesn't happen on the mailman web site.
 23 5 * * * chmod -R 02775 /var/lib/mailman/logs &>/dev/null 
 
+##############
+
index 8a4feee54cc5f70dfa894cfe1b8ac3a90b3e9738..c8601f1608bde7018d778fd3523d0a78b902bb60 100644 (file)
@@ -1,7 +1,11 @@
 
+##############
+
 #[nechung fortune]
 # runs every minute and recreates a fortune for thunderbird signature.
 # a lot of the detail below is to get the feisty meow environment loaded for
 # the new_sig command.
 * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; perl $FEISTY_MEOW_SCRIPTS/text/new_sig.pl) &>>/tmp/${CRONUSER}-cron-nechung_fortune.log
 
+##############
+
index e3a6411321097ffbf6ebf7fb97c7ca5aaadfbdc0..d6f56391fcf4fb27793c1d85c909776c8d961241 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[opensim restart]
 # ensure opensim is started if we can't detect it as running.
 */5 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/opensim/maybe_restart_opensim.sh) &>>/tmp/${CRONUSER}-cron-opensim_restart.log 
 
+##############
+
index 9b5130e715393f9e2bf84b006c118b567c2baa2b..1913bd24bcf89fa991a74ec3fa6ed590a41a0caa 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[pack feisty for web]
 # this packs up our source code distributions every 8 days.
 16 22 */8 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/archival/pack_feisty_meow.sh) &>>/tmp/${CRONUSER}-cron-pack_feisty_for_web.log 
 
+##############
+
diff --git a/infobase/configuration/cron/periodic_reboot.crontab b/infobase/configuration/cron/periodic_reboot.crontab
new file mode 100644 (file)
index 0000000..a8d1507
--- /dev/null
@@ -0,0 +1,11 @@
+
+##############
+
+# [periodic reboot]
+# invigorates a shaky machine that cannot run longer than a certain time period.
+# version below reboots every two days, somewhat.
+20 4 * * 0,2,4,6 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; sep; echo periodic reboot running at $(date) ; sep; sync; sleep 2; /sbin/reboot) &>>$HOME/${CRONUSER}-cron-periodic_reboot.log
+
+##############
+
+
index 39e1ed758c888d655e880f8cdcadfded262c3384..3fde27b62e798518c6d586320d4fb27c2aa86387 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[process check]
 # a crontab for periodically dumping the process state.
 * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/processes/show_hot_ones.sh) &>>/tmp/${CRONUSER}-cron-active_processes.log 
 
+##############
+
index fe1e07b5c77ea8ed4406f8823554f1e1ed5a251f..a61613b9b082c2e8bc5a6d3e3e36c6c5f253adc3 100644 (file)
@@ -1,4 +1,8 @@
 
+##############
+
 #[random sound]
 * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/multimedia/randomly_play.sh) &>>/tmp/${CRONUSER}-cron-random_sound.log
 
+##############
+
index bf7dcc3e8514bed45060124394fa7fd0b3786c37..7b61de2910075c3df358d5840f5e35987fc73770 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[snarf linux configuration]
 # do a backup of the linux configuration files once a week.
 28 7 * * 4 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd /z/stuffing/archives; perl $FEISTY_MEOW_SCRIPTS/archival/snarf_linux_config.pl) &>>/tmp/${CRONUSER}-cron-snarf_linux_configuration.log
 
+##############
+
index 222d7c6fb292c0b440ade3dc1127cc62b34901ce..196d241f21ca58cbd4bf5947bc84549f6891a9a3 100644 (file)
@@ -1,4 +1,6 @@
 
+##############
+
 #[synch and swim downstream]
 # updates local code repositories from master versions before uploading any changes to downstream
 # repositories, such as sourceforge or github.  the uploading process (which we think of as sending
@@ -6,3 +8,5 @@
 # our makefiles.  that's why the code below relies on the top-level makefile in home.
 14 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd $HOME ; bash $FEISTY_MEOW_SCRIPTS/rev_control/rgetem.sh ; make ) &>>/tmp/${CRONUSER}-cron-synch_and_swim_downstream.log
 
+##############
+
index bf625c30a1acf06ea00065434d63bc03d69af60a..931023a18de80eb6b3f0c4f534922d42cb611e90 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[tell zooty our ip]
 # firewall host only--inform serene/zooty of our home IP address to enable back-connections.
 0,14,28,42,56 * * * * (bash $FEISTY_MEOW_APEX/scripts/security/tell_zooty_our_ip.sh serene.feistymeow.org fred $CRONUSER ) &>>/tmp/${CRONUSER}-cron-tell_zooty_our_ip.log
 
+##############
+
index f59270620a163c867b71d5d42975d30dc68e1da9..7b5fd6feaeb905978f1cfa289b19740fd7f41ca2 100644 (file)
@@ -1,16 +1,18 @@
 
-#[time synch]
+##############
 
-# standard to synch to local machine.
+#[time synch]
 
-##############
+LOCAL_TIME_SERVER=greendragon
 
-# synchronize time/date with our nearest time server.
-*/4 * * * * /usr/sbin/ntpdate greendragon &>>/tmp/${CRONUSER}-cron-time_synch.log
+# standard version synchs to a local machine.  can be used on a network
+# to get time from central host.
+*/4 * * * * /usr/sbin/ntpdate $LOCAL_TIME_SERVER &>>/tmp/${CRONUSER}-cron-time_synch.log
 
 ##############
 
-# one machine on the network uses this version, to synch externally.
+# the central host machine uses this version, to synch time externally.
 0 0,4,8,12,16,20 * * * /usr/bin/rdate -s time.nist.gov &>>/tmp/${CRONUSER}-cron-time_synch.log
-#hmmm: is above still correct?
+
+##############
 
index cb6568c8e75c08a9753413d6f18a66c130053bd7..2e2ae02e2f76959deda83c40d1cf3a4e1e635adc 100644 (file)
@@ -1,7 +1,10 @@
 
+##############
 
 #[update apt based linux crontab]
 # does a daily update of an apt-based linux box at pi o'clock.
 14 3 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/system/naive_system_updater.sh) &>>/tmp/${CRONUSER}-cron-update_aptbased_linux.log
 
+##############
+
 
diff --git a/infobase/configuration/cron/update_system_time.crontab b/infobase/configuration/cron/update_system_time.crontab
new file mode 100644 (file)
index 0000000..78c646b
--- /dev/null
@@ -0,0 +1,10 @@
+
+##############
+
+#[update_system_time]
+# synchronize the time with a real ntp server.
+42 0,4,8,12,16,20 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_APEX/scripts/system/update_system_time.sh ) &>/tmp/${CRONUSER}-cron-update_system_time.log
+
+##############
+
+
index e1b31a67fc134e22820968b891f63d358cee4965..3605e64871af5ba56bad592c92e45447214c73e4 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[uptime report]
 # the script writes the current time and current uptime to the log file.
 0 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/system/write_uptime_report.sh) &>>/tmp/${CRONUSER}-cron-uptime_report.log
 
+##############
+
index a46493ef3633585a0d2a6d299dc1642327e3a05f..c3453d2f49d8ba30095cfd884e9020605117647f 100644 (file)
@@ -1,5 +1,9 @@
 
+##############
+
 #[web group perm fix]
 # fix the web directories for group access.
 0 * * * * chmod -R g+w /var/www &>/dev/null
 
+##############
+
diff --git a/infobase/configuration/mutt_email/dot.muttrc b/infobase/configuration/mutt_email/dot.muttrc
new file mode 100644 (file)
index 0000000..df54bc7
--- /dev/null
@@ -0,0 +1,10 @@
+
+set mbox_type=Maildir
+
+set folder="~/Maildir"
+set mbox="~/Maildir"
+set spoolfile="~/Maildir"
+
+
+
+
index 7e861cdf6e76aa7a6596877295a4b3ef6eee4c3b..550e546eb4235855b11d0716458e989913a6afbf 100644 (file)
@@ -8,7 +8,7 @@
 " preserve the default 50 lines for a paste to another file.  this makes all registers go up to
 " this size though, so if you save to a lot of different ones, you will use more space in your
 " viminfo file.
-set viminfo='100,<1000,s10,h
+set viminfo='100,<1000,s100,h
 
 " tells vim not to make a backup of the file before editing it; this is living dangerously.
 set nobk
diff --git a/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt b/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt
new file mode 100644 (file)
index 0000000..c95e7bc
Binary files /dev/null and b/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt differ
diff --git a/infobase/document_templates/fallout76_vendor_record.odt b/infobase/document_templates/fallout76_vendor_record.odt
new file mode 100644 (file)
index 0000000..fc747d4
Binary files /dev/null and b/infobase/document_templates/fallout76_vendor_record.odt differ
index 3a9653fc663797383313d9713230487e4d6b5099..878d403f334ab85e1b03a33807512b3cc5608ab3 100644 (file)
@@ -17813,7 +17813,7 @@ for while we exist death is not present,
 and when death is present we no longer exist.
   -- Epicurus
 ~
-Singing and danching are the voice of dharma.  -- Hakuin
+Singing and dancing are the voice of dharma.  -- Hakuin
 ~
 All great truths begin as blasphemies.  -- George Bernard Shaw
 ~
@@ -42841,8 +42841,8 @@ seeker wishing to follow her lead.  In her own words,
     As promised, she continuously appears to lead and inspire the faithful in
 dreams, visions, and real life.  As well, her human reincarnations ceaselessly
 return to the world, guiding others in whatever capacity is needed.
-  -- from "The Life and Visions of Yeshé Tsogyal", by Drimé Kunga and Yeshé
-     Tsogyal Translated by Chönyi Drolma, published by Shambhala Publications
+  -- from "The Life and Visions of Yeshe Tsogyal", by Drime Kunga and Yeshe
+     Tsogyal, translated by Chönyi Drolma, published by Shambhala Publications
 ~
     It is impossible to conceive how many beings, from beginningless time in
 samsara, have been related to us--as parents, as enemies, or as people
@@ -42959,7 +42959,7 @@ Without going anywhere, you'll arrive at the Buddha's ground.
 Without looking at anything, you'll see dharmakaya.
 Without achieving anything, your aim will be spontaneously accomplished.
   -- from "The Hundred Thousand Songs of Milarepa", By Tsangnyon Heruka,
-     Translated by Christopher Stagg, published by Shambhala Publications
+     translated by Christopher Stagg, published by Shambhala Publications
 ~
 Trying to find the pain in life is the renunciation of hinayana.  Trying to
 find the ambition in life, trying to reach higher goals, is the
@@ -43334,7 +43334,7 @@ Can, through the teachings, enhance the purifying path
 And, unburdened by avoidance or indulgence, adorn the mind!      
 
   -- Patrul Rinpoche, from "Beyond the Ordinary Mind: Dzogchen, Rimé, and the
-     Path of Perfect Wisdom", Translated by Adam Pearcey, published by
+     Path of Perfect Wisdom", translated by Adam Pearcey, published by
      Shambhala Publications
 ~
     Our endeavor is not religious, but rather a test of what we as a human
@@ -43604,7 +43604,7 @@ In truth, these are not two different things.   
 
   -- Maitreya, Jamgon Kongtrul Lodro Taye, Khenpo Tsultrim Gyamtso, and
      Asanga in "Buddha Nature: The Mahayana Uttaratantra Shastra with Commentary",
-     Translated by Rosemarie Fuchs, published by Shambhala Publications
+     translated by Rosemarie Fuchs, published by Shambhala Publications
 ~
 Like vines that wrap themselves round sandal trees,
 People who keep company with holy ones
@@ -43618,20 +43618,20 @@ So keep the company of holy beings
 And from bad teachers strive to keep your distance.
 
   -- Longchenpa, in "Finding Rest in the Nature of the Mind, The Trilogy of
-     Rest, Volume 1",  Translated by Padmakara Translation Group, published by
+     Rest, Volume 1", translated by Padmakara Translation Group, published by
      Shambhala Publications
 ~
-Thinking about the self as composed of “aggregates” (Skt.  skandha) can
+Thinking about the self as composed of "aggregates" (Skt.  skandha) can
 help us reflect on our personal identity in new ways.  Generally, we attribute
 characteristics to our personal identity, feeling that it is solid, permanent,
 and real.  But here, describing the self as being composed of aggregates can
 help us see ourselves more accurately.  The word skandha can be translated
-literally as “heap.” This definition, when applied to ourselves, can help
+literally as "heap." This definition, when applied to ourselves, can help
 us see that we do not have a cohesive, real, and solid self.  We are just a
 heap of stuff — flesh, blood, veins, nerves, bones, hair, cartilage, and so
 on.  When we sort through this heap, what are we actually?  None of the
-elements of the heap is actually “me.”  We are a mere mishmash of material
-conditions that we have identified with and labeled “I.”
+elements of the heap is actually "me."  We are a mere mishmash of material
+conditions that we have identified with and labeled "I."
   -- Anyen Rinpoche and Allison Choying Zangmo, in "Stop Biting the Tail
      You're Chasing: Using Buddhist Mind Training to Free Yourself from Painful
      Emotional Patterns" published by Shambhala Publications
@@ -43649,4 +43649,218 @@ for the ways in which your tradition has come down to you with so much care.   
   -- Elizabeth Mattis Namgyel, from "The Logic of Faith: The Buddhist Approach
      to Finding Certainty Beyond Belief and Doubt", published by Shambhala
      Publications
+~
+If we are attached to a thought, it becomes an obstacle to the development of
+our meditation or samadhi.  The remedies for reducing attachments to thoughts
+are called "pacification" and "taming the mind," which involve what to
+do when we are unwilling to let go of thoughts.  Normally we regard thoughts,
+and especially certain thoughts, as either particularly important or
+particularly pleasant and therefore worthwhile or entertaining.  However, in
+meditation, thoughts are nothing other than impediments to what we are trying
+to do.  So, when we are practicing meditation, we have to maintain the
+attitude, "This is my time to meditate and now I am not trying to think
+thoughts.  If I let myself think, I am wasting this time I have to practice."
+  -- Khenchen Thrangu, from "The Mahamudra Lineage Prayer: A Guide to
+     Practice", published by Shambhala Publications
+~
+The arrogant mind never stops searching for identity, and this identity always
+defines itself through attributes: "the beautiful one," "the smart one,"
+"the creative one," "the successful one." Sometimes we take this further by
+creating a more elaborate persona: "the rebel," "the maverick," "the suffering
+artist," "the fearless leader." We can hold onto these labels on a "good" day.
+But when we feel insecure about our attributes, or our lack thereof, we start
+to wonder how to define ourselves; we wonder who it is we really are.
+Regardless of whether we’re having a good day or a low self-esteem day, the
+point is, we haven’t found a way to relax, to be natural, unself-conscious.
+We don’t know how to take our seat in ordinariness and feel comfortable in
+our own skin.  We’re always searching for something to be.    
+  -- Dzigar Kongtrul, from "Light Comes Through: Buddhist Teachings on
+     Awakening to Our Natural Intelligence", published by Shambhala
+     Publications
+~
+VOTE DEMOCRAT 2018
+It's time for the adults to take back the wheel
+WE KNOW OUR ABCS...
+Apple pie, Baseball, Compassion, & Science
+  -- fred t. hamster
+~
+Elevate your experience and remain wide-open like the sky.
+Expand your mindfulness and remain pervasive like the earth.
+Steady your attention and remain unshakable like a mountain.
+Brighten your awareness and remain shining like a flame.
+Clear your thought-free wakefulness and remain lucid like a crystal.   
+  -- Dakpo Tashi Namgyal, "Clarifying the Natural State", from "Jewels of
+     Enlightenment: Wisdom Teachings from the Great Tibetan Masters", compiled
+     and translated by Erik Pema Kunsang, published by Shambhala Publications
+~
+Meditation, by nature, is like tasting nectar.
+
+To meditate on the meaning of what you have heard and contemplated
+pacifies all the illnesses of negative emotions.
+
+You will cross the ocean of conditioned existence and arrive at the
+far shore--the heart essence.
+
+Please meditate in the forest from now on.
+
+  -- Longchenpa, from "The Life of Longchenpa: The Omniscient Dharma King of
+     the Vast Expanse", Compiled and edited by Jampa Mackenzie Stewart, published
+     by Shambhala Publications
+~
+Compassion has no hierarchy of worthy and unworthy suffering; it makes no
+distinctions between the deserving and the undeserving.  Wherever there is
+suffering, there is a need for compassion.  Finding compassion for those who
+cause pain is an ongoing practice requiring remarkable patience and
+perseverance.  It is a difficult journey, but the path of bitterness and
+division is far more painful.  The path of compassion begins with your
+willingness to soften and stay present in all the moments when you are prone
+to recoil and flinch.  You learn to open your eyes and heart in all the places
+you have been blinded by fear or rage.  You begin to dismantle the boundaries
+that have too long divided you from others.
+  -- "All the Rage--Buddhist Wisdom on Anger and Acceptance", Edited by Andrea
+     Miller and the Editors of the Shambhala Sun, published by Shambhala
+     Publications
+~
+Each and every being in this world, including animals and all other beings of
+the six realms, wants to be happy.  Nobody wants to suffer.  Even through we
+have no wisdom or clairvoyance, we can see that everyone in this world is
+afflicted with disturbing emotions and delusion based on their karma\97not only
+we humans, but all beings in the six realms.  Even a tiny little ant is
+constantly afflicted by the five poisons, and it\92s impossible for such a being
+to generate bodhichitta, faith, devotion, or pure perception for an instant.
+It can\92t even conceive of a path to liberation or ultimate happiness.  Due to
+karma accumulated throughout beginningless lifetimes, all sentient beings
+experience various kinds of sorrow and happiness.  Yet this isn\92t just random,
+for all that we experience is the result of our past actions.
+##--#Penor Rinpoche, from "An Ocean of Blessings: Heart Teachings of Drubwang
+     Penor Rinpoche", translated by Ani Jinba Palmo, published by Shambhala
+     Publications
+~
+    Dreaming is a dynamic process.  Unlike the static images of film that we
+use as a metaphor, the images of a dream are fluid: they move, beings talk,
+sounds vibrate, sensation is vivid.  The content of dream is formed by the
+mind, but the basis of the vitality and animation of the dream is the prana.
+The literal translation of the Tibetan word for prana, lung, is "wind," but
+it is more descriptive to call it the vital wind force.
+    Prana is the foundational energy of all experience, of all life.
+  -- Tenzin Wangyal Rinpoche and edited by Mark Dahlby, from "The Tibetan
+     Yogas of Dream and Sleep", published by Shambhala Publications
+~
+Do they know this kid likes his chemistry set a little too much?
+  -- The Sopranos
+~
+The Nine Expressions of Dance
+
+The upper part of one's body should have the demeanor of a lion.
+The waist should maintain the demeanor of elegance.
+The wrists and ankles should maintain a demeanor of dexterity.
+The thigh muscles should maintain a relaxed demeanor.
+The blood should maintain a fiery red demeanor.
+The countenance should maintain a handsome demeanor.
+The movements should maintain a slow demeanor.
+The knees should maintain a supple demeanor.
+The feet and head should maintain a demeanor of happiness.
+And overall [the dancer] should maintain a demeanor
+That is both heroic and magnificent.  
+
+  -- by Konchog Lhadrepa and Charlotte Davis, from "The Art of Awakening:
+     A User's Guide to Tibetan Buddhist Art and Practice", published by
+     Shambhala Publications
+~
+Advice to Myself
+
+    Stop living a false and empty life.
+    Drop those deceptions of your own mind
+    And endless projects that you don't need!
 
+    Don't make your head spin with the burden
+    Of strings of ideas that never come true
+    And endless distracting activities--
+    They're just waves on water.
+    Just keep quiet.
+
+  -- Patrul Rinpoche, from "Enlightened Vagabond: The Life and Teachings of
+     Patrul Rinpoche", By Matthieu Ricard, Edited by Constance Wilkinson,
+     published by Shambhala Publications
+~
+Like the vast expanse of the ocean, birthplaces of other beings are vast and
+multitudinous.  Just as the yoke has only a single opening, human birth is
+small in extent and few in number.  Just as the tortoise rises up only once
+every hundred years, so it is rare to accumulate the karma that results in
+human birth.  Just as the tortoise is blind, so one's accumulated karma is
+feeble.  Just as the yoke is tossed about in every direction by the wind, so
+there are many adverse forces obstructing the coincidence of conditions needed
+for human birth.
+  -- Ngorchen Konchog Lhundrub, from "Three Visions: Fundamental Teachings of
+     the Sakya Lineage of Tibetan Buddhism", translated by Lobsang Dagpa and
+     Jay Goldberg, published by Shambhala Publications
+~
+    The actual nature of things is inconceivable and inexpressible.  Yet, for
+those fortunate individuals who seek to penetrate the profound meaning of
+dharmata, I shall offer here a few words by way of illustration.
+    What we call the essence of mind is the actual face of unconditioned pure
+awareness, recognized through receiving the guru's blessings and
+instructions.  If you wonder what this is like, it is empty in its essence,
+beyond conceptual reference; it is cognizant by nature, spontaneously present;
+and it is all-pervasive and unobstructed in its compassionate energy.  This is
+the pure awareness (rigpa) in which the three kayas are inseparable.
+  -- from "Beyond the Ordinary Mind: Dzogchen, Rime, and the Path of
+     Perfect Wisdom", translated by Adam Pearcey, published by Shambhala Publications
+~
+Being attached to your ordinary dualistic considerations is a pitfall in your
+way of living.  No matter what appears, by applying yourself without being at
+all distracted from the perspective and meditation, this unobstructed,
+powerful way of life will come about with the six senses naturally relaxed.
+Apply yourself without contradicting this.
+  -- Longchenpa, from "You Are the Eyes of the World", translated by Kennard
+     Lipman and Merrill Peterson, published by Shambhala Publications
+~
+Kyema!
+Hear me, young and faithful girl!
+I, the Lotus-Born, will preach the Dharma in the land of ogres.
+My flawless adamantine form, surpassing change,
+Is not to be compared with that of beings racked by ills.
+The country of Tibet I filled with Dharma, within the earth and on it.
+If you are strong in practice and instruction,
+No shortage of the Dharma will there be.
+  -- Yeshe Tsogyal, from "Lady of the Lotus-Born: The Life and Enlightenment
+     of Yeshe Tsogyal", by Gyalwa Changchub and Namkhai Nyingpo, translated by
+     Padmakara Translation Group, published by Shambhala Publications
+~
+Ultimately, spiritual and worldly values are totally contradictory; this is
+something we simply have to accept.  In the materialistic world, being "rich"
+means that you own plenty of property, run various businesses, and have a
+great deal of money; whereas the spiritual world defines being "rich" as
+perfect contentment.  From a spiritual point of view, we are rich when we no
+longer torture our minds with thoughts about everything we lack.   
+  -- Dzongsar Jamyang Khyentse, from "Best Foot Forward: A Pilgrim's Guide
+     to the Sacred Sites of the Buddha", published by Shambhala Publications
+~
+The cultivation of Pure Awareness does not evolve in a straight line.  It is
+not that we have a certain realization and then it is ours and we can hang on
+to it and in the next practice session begin from there and move on to the
+next higher realization.  Every time we sit down to practice, it's a brand new
+situation, a new journey.  "Back to square one," as Trungpa Rinpoche used to
+say.  Back to Suzuki Roshi's "beginner's mind."
+  -- Reginald A. Ray, from "The Practice of Pure Awareness: Somatic Meditation
+     for Awakening the Sacred", published by Shambhala Publications
+~
+When the seven consciousnesses melt
+Into the consciousness of the universal ground,
+And the universal ground is purified in the ultimate expanse,
+There occurs primordial coemergent wisdom,
+Empty, luminous, and self-arisen.
+This is what yogis must recognize.    
+  -- Longchenpa, from "Finding Rest in the Nature of the Mind: The Trilogy
+     of Rest, Volume 1", translated by Padmakara Translation Group, published
+     by Shambhala Publications
+~
+The purpose of a knife is much like the purpose of the brain, and that is to
+stop being used.  Just as the brain should do some computation and then desist
+from functioning for a while to rest and relax, so too should one stop using a
+knife as soon as the purpose for which the knife was picked up is achieved.
+If it seems like it's fun to play with a knife or if one feels that the knife
+is an extension of one's penis, then that is not a very good reason to pick up
+a knife; one should probably put the knife right back down in those degenerate
+(in the mathematical sense) cases.  #WhatILearnedFromTheBoyScouts
+  -- fred t. hamster
diff --git a/infobase/metaverse/viewer_list.txt b/infobase/metaverse/viewer_list.txt
new file mode 100644 (file)
index 0000000..209f493
--- /dev/null
@@ -0,0 +1,15 @@
+
+
+best opensim and second life viewers in my opinion are these:
+
+kokua
+http://wiki.kokuaviewer.org/wiki/Kokua/Downloads
+favorite 3d viewer for a while.
+
+phoenix firestorm
+http://www.firestormviewer.org/downloads/
+good standard 3d viewer.
+
+radegast
+https://radegast.life/downloads/
+good simple viewer as a remote control, not great for 3d interactive.
diff --git a/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar b/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar
new file mode 100644 (file)
index 0000000..475d403
Binary files /dev/null and b/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar differ
index 098194ca4b7d8f45177f94e735506ae3a26b5c94..3c38f04d90e7b9592dce14417bafd5709a92a14d 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
        <classpathentry kind="src" path="src"/>
+       <classpathentry kind="lib" path="/feisty_meow.kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar"/>
+       <classpathentry combineaccessrules="false" kind="src" path="/org.feistymeow.bundle.servicesOSGi"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore b/kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
index f42de363afaae68bbd968318f1d331877f5514fc..0c68a61dca867ceb49e79d2402935261ec3e3809 100644 (file)
@@ -1,7 +1,7 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
index 098194ca4b7d8f45177f94e735506ae3a26b5c94..d838756349c88307f1fa294fe14eef5c9b21b21f 100644 (file)
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
        <classpathentry kind="src" path="src"/>
+       <classpathentry kind="lib" path="/feisty_meow.kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
index f42de363afaae68bbd968318f1d331877f5514fc..0c68a61dca867ceb49e79d2402935261ec3e3809 100644 (file)
@@ -1,7 +1,7 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
index e177621f9e6b70e8bceb04e168c291e1deda4522..c2260dcd13f02bc3fb1d1cb7af8cde89d8ef213e 100644 (file)
@@ -5,9 +5,6 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Vector;
 
-import org.feistymeow.algorithms.RectangleIntersector.SortedElement;
-import org.feistymeow.algorithms.RectangleIntersector.SortedElementComparator;
-
 /**
  * reports if any two rectangles in a list intersect. uses screen coordinates.
  */
@@ -179,11 +176,11 @@ public class RectangleIntersector
                Vector<Rectangle> list2 = new Vector<Rectangle>(Arrays.asList(r1, r2));
                Vector<Rectangle> list3 = new Vector<Rectangle>(Arrays.asList(r1, r3, r4));
 
-               RectangleIntersector secto = new RectangleIntersector();
+//             RectangleIntersector secto = new RectangleIntersector();
 
-               Vector<Rectangle> answer1 = secto.findOverlap(list1);
-               Vector<Rectangle> answer2 = secto.findOverlap(list2);
-               Vector<Rectangle> answer3 = secto.findOverlap(list3);
+               Vector<Rectangle> answer1 = RectangleIntersector.findOverlap(list1);
+               Vector<Rectangle> answer2 = RectangleIntersector.findOverlap(list2);
+               Vector<Rectangle> answer3 = RectangleIntersector.findOverlap(list3);
 
                if (answer1 == null) {
                        System.out.println("FAILURE: test 1 did not find intersection in list");
index b71bac17daa9dfb77dec9a726b0a76b52702b451..daa9c423449bb93a586ebd51aeb05b976222fa68 100644 (file)
@@ -19,7 +19,7 @@ public class IOUtils
 
        static final private int BUFFER_SIZE = 1024 * 8;
 
-       static private final int COPY_SIZE = 1024 * 8;
+//     static private final int COPY_SIZE = 1024 * 8;
 
        static public void copy(InputStream in, OutputStream out) throws IOException
        {
index 0d6789c9ee51dd01c2b794f92408b64a00a1c6ef..71923ccf0793632307bba58fb7d23039b3eb1107 100644 (file)
@@ -5,7 +5,7 @@
                        <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
                        <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
                        <provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
-                       <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1260941817250426252" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+                       <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-618855753946002930" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
                                <language-scope id="org.eclipse.cdt.core.gcc"/>
                                <language-scope id="org.eclipse.cdt.core.g++"/>
                        </provider>
index 80156b38db24c375206c93119245bcb5d400dbfa..fe139dea8087fc339371ca4c7a21adf837c9f38d 100644 (file)
@@ -38,10 +38,20 @@ public:
   int execute();
   int print_instructions_and_exit() {
     LOG(a_sprintf("\
-%s: This utility requires a directory name on the command line.\n\
-The subdirectories under that directory will be shown.  If a second paramter\n\
-is provided, it is taken as a pattern that will be used to show the files in\n\
-those directories also.  Otherwise, just the tree of directories is shown.\n\
+%s: This utility shows the sub-directory structure for a chosen directory.\n\
+It expects a directory name to be provided on the command line.  If no\n\
+directory is provided, then the current directory is assumed.  The sub-\n\
+directories under the chosen directory will be displayed on the console in a\n\
+stylized textual tree.  If a second parameter is provided, it is taken as a\n\
+file pattern that causes matching files to be displayed.  Without a pattern,\n\
+just the directory tree is shown.\n\
+For example:\n\
+  dirtree\n\
+    => shows the directory structure of the current directory.\n\
+  dirtree udon\n\
+    => shows the structure of directory 'udon'\n\
+  dirtree soba \"*.txt\"\n\
+    => displays all text files and sub-directories of 'soba'\n\
 ", filename(application::_global_argv[0]).basename().raw().s()));
     return 23;
   }
@@ -58,20 +68,30 @@ astring hier_prefix(int depth, int kids)
 int dirtree::execute()
 {
   astring path;
-
  
-  if (application::_global_argc < 2) {
-    return print_instructions_and_exit();
-  }
-
-  path = application::_global_argv[1];
+//hmmm: we really need an abstraction to do some checking if they want --help;
+//      this comparison way of doing it is lame.
+astring helpword = astring("--help");
+
+  if (application::_global_argc <= 1) {
+    // plug in our default path if they gave us no parameters.
+       path = ".";
+       } else {
+               // they gave us some parameters.  but are they asking for help?
+               if (helpword == astring(application::_global_argv[1])) {
+                       return print_instructions_and_exit();
+               } else {
+                       // this seems like a serious path request.
+                       path = application::_global_argv[1];
+               }
+       }
 
   // check if we should show any of the files.
   bool show_files = false;
   astring pattern;
-  if (application::_global_argc >= 3)
+  if (application::_global_argc >= 3) {
     pattern = application::_global_argv[2];
+  }
   if (pattern.t()) {
     show_files = true;
   }
@@ -83,7 +103,7 @@ int dirtree::execute()
   if (!dir.good()) {
     continuable_error(class_name(), "tree construction",
         "the directory could not be read");
-    return 82;
+    return print_instructions_and_exit();
   }
 
   dir_tree_iterator *ted = dir.start(directory_tree::prefix);
@@ -99,8 +119,9 @@ int dirtree::execute()
     directory_tree::depth(*ted, depth);
     directory_tree::children(*ted, kids); 
     astring name_to_log = curr.basename().raw();
-    if (!depth)
+    if (!depth) {
       name_to_log = curr.raw();
+    }
     LOG(hier_prefix(depth, kids) + name_to_log);
     if (show_files) {
       astring names;
@@ -108,6 +129,10 @@ int dirtree::execute()
       if (names.length()) {
         astring split;
         string_manipulation::split_lines(names, split, depth * 2 + 2);
+        // strip eol chars off the string we got back, since we already add that in log.
+        while (parser_bits::is_eol(split[split.end()])) {
+               split.zap(split.end(), split.end());
+        }
         LOG(split);
       }
     }
diff --git a/nucleus/library/__build_configuration.h b/nucleus/library/__build_configuration.h
new file mode 100644 (file)
index 0000000..8365bd2
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef BUILD_SYSTEM_CONFIGURATION
+#define BUILD_SYSTEM_CONFIGURATION
+
+  // This file provides all of the code flags which were used when this build
+  // was generated.  Some of the items in the build configuration have been
+  // stripped out because they are not used.
+
+  #ifndef __build_company
+    #define __build_company "Feisty Meow Concerns"
+  #endif
+  #ifndef __build_copyright
+    #define __build_copyright "(C) 1987-$now Chris Koeritz & Others"
+  #endif
+  #ifndef __build_legal_info
+    #define __build_legal_info "This software is free to copy under the terms of the GNU GPL (or the GNU Library License if you prefer).  See http://www.gnu.org/licenses/gpl.html for more info.  We suggest peaceful purposes that help all sentient beings."
+  #endif
+  #ifndef __build_product_name
+    #define __build_product_name "feisty_meow"
+  #endif
+  #ifndef __build_web_site
+    #define __build_web_site "http://feistymeow.org"
+  #endif
+  #ifndef __build_LAX_DEPENDENCIES
+    #define __build_LAX_DEPENDENCIES "t"
+  #endif
+  #ifndef CATCH_ERRORS
+    #define CATCH_ERRORS "t"
+  #endif
+  #ifndef ERRORS_ARE_FATAL
+    #define ERRORS_ARE_FATAL "t"
+  #endif
+
+/*
+These settings were not used:
+  [version] = 
+  DEBUG = t
+  OPTIMIZE = t
+  ifneq "$(DEBUG)" "" = 
+  OPTIMIZE =  
+  endif = 
+  ifeq "$(BOOT_STRAPPING)" "" = 
+  endif = 
+  ifneq "$(OP_SYSTEM)" "WIN32" = 
+  endif = 
+  ifeq "$(BOOT_STRAPPING)" "" = 
+  endif = 
+  ifeq "$(BOOT_STRAPPING)" "" = 
+  endif = 
+*/
+
+#endif /* outer guard */
+
index c8358237a86dc2b575dec790558bacc0cad3ebfa..72acd84e95bfb810b064f9546d5aed7fbece77fc 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <application/hoople_main.h>
 #include <basis/astring.h>
+#include <basis/environment.h>
 #include <basis/guards.h>
 #include <configuration/ini_configurator.h>
 #include <configuration/section_manager.h>
@@ -55,6 +56,10 @@ public:
 int test_section_manager::execute()
 {
   FUNCDEF("execute");
+
+  // prepare the storage area for ini config.
+  environment::set("ALLUSERSPROFILE", environment::get("TEMPORARIES_PILE"));
+
   {
     astring TEST = "First Test";
     ini_configurator ini("t_section_manager_1.ini", ini_configurator::AUTO_STORE);
index 6eb06ad2ef3015e79806e98348a065e1eda09a0b..6713ed637077cd82b0a1745f55dd1bc94dcd5ca0 100644 (file)
@@ -383,17 +383,6 @@ int write_build_config::execute()
     LOG(astring("failed writing output file ") + ver_header_filename);
   }
 
-//NO, not any more  // now make a copy into the library folder, for when we release a production version.
-//  astring library_directory = repodir + "/nucleus/library";
-//  astring cfg_header_copy = library_directory + "/__build_configuration.h";
-//  astring ver_header_copy = library_directory + "/__build_version.h";
-//  if (!write_output_file(cfg_header_copy, cfg_accumulator)) {
-//    LOG(astring("skipping copy due to read-only issue on output file: ") + cfg_header_copy);
-//  }
-//  if (!write_output_file(ver_header_copy, ver_accumulator)) {
-//    LOG(astring("skipping copy due to read-only issue on output file: ") + ver_header_copy);
-//  }
-
   return 0;
 }
 
diff --git a/production/example_apps/shared_calendar/.buildpath b/production/example_apps/shared_calendar/.buildpath
new file mode 100644 (file)
index 0000000..8bcb4b5
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+       <buildpathentry kind="src" path=""/>
+       <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
+</buildpath>
diff --git a/production/example_apps/shared_calendar/.editorconfig b/production/example_apps/shared_calendar/.editorconfig
new file mode 100644 (file)
index 0000000..7061901
--- /dev/null
@@ -0,0 +1,18 @@
+; This file is for unifying the coding style for different editors and IDEs.
+; More information at http://editorconfig.org
+
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.bat]
+end_of_line = crlf
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/production/example_apps/shared_calendar/.gitattributes b/production/example_apps/shared_calendar/.gitattributes
new file mode 100644 (file)
index 0000000..5054ec0
--- /dev/null
@@ -0,0 +1,44 @@
+# Define the line ending behavior of the different file extensions
+# Set default behaviour, in case users don't have core.autocrlf set.
+* text=auto
+* text eol=lf
+
+# Explicitly declare text files we want to always be normalized and converted
+# to native line endings on checkout.
+*.php text
+*.default text
+*.ctp text
+*.sql text
+*.md text
+*.po text
+*.js text
+*.css text
+*.ini text
+*.properties text
+*.txt text
+*.xml text
+*.svg text
+*.yml text
+.htaccess text
+
+# Declare files that will always have CRLF line endings on checkout.
+*.bat eol=crlf
+
+# Declare files that will always have LF line endings on checkout.
+*.pem eol=lf
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
+*.gif binary
+*.ico binary
+*.mo binary
+*.pdf binary
+*.phar binary
+*.woff binary
+*.woff2 binary
+*.ttf binary
+*.otf binary
+*.eot binary
+*.odt binary
+
diff --git a/production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md b/production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md
new file mode 100644 (file)
index 0000000..92c77d6
--- /dev/null
@@ -0,0 +1,23 @@
+This is a (multiple allowed):
+
+* [x] bug
+* [ ] enhancement
+* [ ] feature-discussion (RFC)
+
+* CakePHP Application Skeleton Version: EXACT RELEASE VERSION OR COMMIT HASH, HERE.
+* Platform and Target: YOUR WEB-SERVER, DATABASE AND OTHER RELEVANT INFO AND HOW THE REQUEST IS BEING MADE, HERE.
+
+### What you did
+EXPLAIN WHAT YOU DID, PREFERABLY WITH CODE EXAMPLES, HERE.
+
+### What happened
+EXPLAIN WHAT IS ACTUALLY HAPPENING, HERE.
+
+### What you expected to happen
+EXPLAIN WHAT IS TO BE EXPECTED, HERE.
+
+P.S. Remember, an issue is not the place to ask questions. You can use [Stack Overflow](http://stackoverflow.com/questions/tagged/cakephp)
+for that or join the #cakephp channel on irc.freenode.net, where we will be more
+than happy to help answer your questions.
+
+Before you open an issue, please check if a similar issue already exists or has been closed before.
\ No newline at end of file
diff --git a/production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md b/production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644 (file)
index 0000000..05ca9eb
--- /dev/null
@@ -0,0 +1,10 @@
+**PLEASE NOTE:**
+
+This is only a issue tracker for issues related to the CakePHP Application Skeleton.
+For CakePHP Framework issues please use this [issue tracker](https://github.com/cakephp/cakephp/issues).
+
+Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.
+
+The best way to propose a feature is to open an issue first and discuss your ideas there before implementing them.
+
+Always follow the [contribution guidelines](https://github.com/cakephp/cakephp/blob/master/.github/CONTRIBUTING.md) guidelines when submitting a pull request. In particular, make sure existing tests still pass, and add tests for all new behavior. When fixing a bug, you may want to add a test to verify the fix.
\ No newline at end of file
diff --git a/production/example_apps/shared_calendar/.gitignore b/production/example_apps/shared_calendar/.gitignore
new file mode 100644 (file)
index 0000000..8a18ddc
--- /dev/null
@@ -0,0 +1,10 @@
+/vendor/*
+/config/app.php
+/config/*secret*
+/config/config_google.php
+/tmp/*
+/logs/*
+/vendor/
+/webroot/avmaps
+/webroot/debug_kit
+
diff --git a/production/example_apps/shared_calendar/.htaccess b/production/example_apps/shared_calendar/.htaccess
new file mode 100644 (file)
index 0000000..bc1dd9c
--- /dev/null
@@ -0,0 +1,11 @@
+# Uncomment the following to prevent the httpoxy vulnerability
+# See: https://httpoxy.org/
+#<IfModule mod_headers.c>
+#    RequestHeader unset Proxy
+#</IfModule>
+
+<IfModule mod_rewrite.c>
+    RewriteEngine on
+    RewriteRule    ^$    webroot/    [L]
+    RewriteRule    (.*) webroot/$1    [L]
+</IfModule>
diff --git a/production/example_apps/shared_calendar/.project b/production/example_apps/shared_calendar/.project
new file mode 100644 (file)
index 0000000..a71e33e
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>shared_calendar</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.wst.common.project.facet.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.wst.validation.validationbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.dltk.core.scriptbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.php.core.PHPNature</nature>
+               <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+               <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+       </natures>
+</projectDescription>
diff --git a/production/example_apps/shared_calendar/.settings/.jsdtscope b/production/example_apps/shared_calendar/.settings/.jsdtscope
new file mode 100644 (file)
index 0000000..4649ef1
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="">
+               <attributes>
+                       <attribute name="provider" value="org.eclipse.wst.jsdt.web.core.internal.project.ModuleSourcePathProvider"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+               <attributes>
+                       <attribute name="hide" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+       <classpathentry kind="output" path=""/>
+</classpath>
diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs b/production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs
new file mode 100644 (file)
index 0000000..64149f2
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+include_path=0;/shared_calendar
diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644 (file)
index 0000000..ba149d7
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="php.core.component"/>
+  <fixed facet="php.component"/>
+  <installed facet="php.core.component" version="1"/>
+  <installed facet="php.component" version="7.1"/>
+</faceted-project>
diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644 (file)
index 0000000..3bd5d0a
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644 (file)
index 0000000..05bd71b
--- /dev/null
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/production/example_apps/shared_calendar/.travis.yml b/production/example_apps/shared_calendar/.travis.yml
new file mode 100644 (file)
index 0000000..befdb98
--- /dev/null
@@ -0,0 +1,30 @@
+language: php
+
+dist: trusty
+
+sudo: false
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+
+matrix:
+  fast_finish: true
+
+  include:
+    - php: 7.0
+      env: PHPCS=1
+
+before_script:
+  - if [[ $PHPCS = 1 ]]; then composer require cakephp/cakephp-codesniffer:~2.1; fi
+  - if [[ $PHPCS != 1 ]]; then composer install; fi
+  - if [[ $PHPCS != 1 ]]; then composer require phpunit/phpunit:"^5.7|^6.0"; fi
+  - if [[ $PHPCS != 1 ]]; then composer run-script post-install-cmd --no-interaction; fi
+
+script:
+  - if [[ $PHPCS != 1 ]]; then vendor/bin/phpunit; fi
+  - if [[ $PHPCS = 1 ]]; then vendor/bin/phpcs -p --extensions=php --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests ./config ./webroot; fi
+
+notifications:
+  email: false
diff --git a/production/example_apps/shared_calendar/bin/cake b/production/example_apps/shared_calendar/bin/cake
new file mode 100644 (file)
index 0000000..6801c45
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env sh
+################################################################################
+#
+# Cake is a shell script for invoking CakePHP shell commands
+#
+# CakePHP(tm) :  Rapid Development Framework (http://cakephp.org)
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+#
+# @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+# @link          http://cakephp.org CakePHP(tm) Project
+# @since         1.2.0
+# @license       http://www.opensource.org/licenses/mit-license.php MIT License
+#
+################################################################################
+
+# Canonicalize by following every symlink of the given name recursively
+canonicalize() {
+       NAME="$1"
+       if [ -f "$NAME" ]
+       then
+               DIR=$(dirname -- "$NAME")
+               NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME")
+       fi
+       while [ -h "$NAME" ]; do
+               DIR=$(dirname -- "$NAME")
+               SYM=$(readlink "$NAME")
+               NAME=$(cd "$DIR" > /dev/null && cd $(dirname -- "$SYM") > /dev/null && pwd)/$(basename -- "$SYM")
+       done
+       echo "$NAME"
+}
+
+CONSOLE=$(dirname -- "$(canonicalize "$0")")
+APP=$(dirname "$CONSOLE")
+
+if [ $(basename $0) != 'cake' ]
+then
+    exec php "$CONSOLE"/cake.php $(basename $0) "$@"
+else
+    exec php "$CONSOLE"/cake.php "$@"
+fi
+
+exit
diff --git a/production/example_apps/shared_calendar/bin/cake.bat b/production/example_apps/shared_calendar/bin/cake.bat
new file mode 100644 (file)
index 0000000..d4512db
--- /dev/null
@@ -0,0 +1,27 @@
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: Cake is a Windows batch script for invoking CakePHP shell commands
+::
+:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+::
+:: Licensed under The MIT License
+:: Redistributions of files must retain the above copyright notice.
+::
+:: @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+:: @link          http://cakephp.org CakePHP(tm) Project
+:: @since         2.0.0
+:: @license       http://www.opensource.org/licenses/mit-license.php MIT License
+::
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+@echo off
+
+SET app=%0
+SET lib=%~dp0
+
+php "%lib%cake.php" %*
+
+echo.
+
+exit /B %ERRORLEVEL%
diff --git a/production/example_apps/shared_calendar/bin/cake.php b/production/example_apps/shared_calendar/bin/cake.php
new file mode 100644 (file)
index 0000000..5ee314c
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/php -q
+<?php
+/**
+ * Command-line code generation utility to automate programmer chores.
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         2.0.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+$minVersion = '5.6.0';
+if (file_exists('composer.json')) {
+    $composer = json_decode(file_get_contents('composer.json'));
+    if (isset($composer->require->php)) {
+        $minVersion = preg_replace('/([^0-9\.])/', '', $composer->require->php);
+    }
+}
+if (version_compare(phpversion(), $minVersion, '<')) {
+    fwrite(STDERR, sprintf("Minimum PHP version: %s. You are using: %s.\n", $minVersion, phpversion()));
+    exit(-1);
+}
+
+require dirname(__DIR__) . '/vendor/autoload.php';
+include dirname(__DIR__) . '/config/bootstrap.php';
+
+exit(Cake\Console\ShellDispatcher::run($argv));
diff --git a/production/example_apps/shared_calendar/composer.json b/production/example_apps/shared_calendar/composer.json
new file mode 100644 (file)
index 0000000..221cae1
--- /dev/null
@@ -0,0 +1,50 @@
+{
+    "name": "cakephp/app",
+    "description": "CakePHP skeleton app",
+    "homepage": "http://cakephp.org",
+    "type": "project",
+    "license": "MIT",
+    "require": {
+        "php": ">=5.6",
+        "cakephp/cakephp": "3.4.*",
+        "mobiledetect/mobiledetectlib": "2.*",
+        "cakephp/migrations": "~1.0",
+        "cakephp/plugin-installer": "~1.0",
+        "google/apiclient": "^2.0"
+    },
+    "require-dev": {
+        "psy/psysh": "@stable",
+        "cakephp/debug_kit": "~3.0",
+        "cakephp/bake": "~1.1"
+    },
+    "suggest": {
+        "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
+        "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility.",
+        "phpunit/phpunit": "Allows automated tests to be run without system-wide install.",
+        "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP."
+    },
+    "autoload": {
+        "psr-4": {
+            "App\\": "src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "App\\Test\\": "tests",
+            "Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
+        }
+    },
+    "scripts": {
+        "post-install-cmd": "App\\Console\\Installer::postInstall",
+        "post-create-project-cmd": "App\\Console\\Installer::postInstall",
+        "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump",
+        "check": [
+            "@test",
+            "@cs-check"
+        ],
+        "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests",
+        "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests",
+        "test": "phpunit --colors=always"
+    },
+    "prefer-stable": true
+}
diff --git a/production/example_apps/shared_calendar/composer.lock b/production/example_apps/shared_calendar/composer.lock
new file mode 100644 (file)
index 0000000..1cacf0d
--- /dev/null
@@ -0,0 +1,2538 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "099599d4cc2fd8367c1e6c24bb83d011",
+    "packages": [
+        {
+            "name": "aura/intl",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/auraphp/Aura.Intl.git",
+                "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926",
+                "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Aura\\Intl\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Aura.Intl Contributors",
+                    "homepage": "https://github.com/auraphp/Aura.Intl/contributors"
+                }
+            ],
+            "description": "The Aura Intl package provides internationalization tools, specifically message translation.",
+            "homepage": "https://github.com/auraphp/Aura.Intl",
+            "keywords": [
+                "g11n",
+                "globalization",
+                "i18n",
+                "internationalization",
+                "intl",
+                "l10n",
+                "localization"
+            ],
+            "time": "2017-01-20T05:00:11+00:00"
+        },
+        {
+            "name": "cakephp/cakephp",
+            "version": "3.4.11",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/cakephp.git",
+                "reference": "c90f9d2ef2376f8e4d9cca39d971053707645118"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/cakephp/zipball/c90f9d2ef2376f8e4d9cca39d971053707645118",
+                "reference": "c90f9d2ef2376f8e4d9cca39d971053707645118",
+                "shasum": ""
+            },
+            "require": {
+                "aura/intl": "^3.0.0",
+                "cakephp/chronos": "^1.0.0",
+                "ext-intl": "*",
+                "ext-mbstring": "*",
+                "php": ">=5.6.0",
+                "psr/log": "^1.0.0",
+                "zendframework/zend-diactoros": "^1.4.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.7"
+            },
+            "replace": {
+                "cakephp/cache": "self.version",
+                "cakephp/collection": "self.version",
+                "cakephp/core": "self.version",
+                "cakephp/database": "self.version",
+                "cakephp/datasource": "self.version",
+                "cakephp/event": "self.version",
+                "cakephp/filesystem": "self.version",
+                "cakephp/form": "self.version",
+                "cakephp/i18n": "self.version",
+                "cakephp/log": "self.version",
+                "cakephp/orm": "self.version",
+                "cakephp/utility": "self.version",
+                "cakephp/validation": "self.version"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "^5.7|^6.0"
+            },
+            "suggest": {
+                "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
+                "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\": "src"
+                },
+                "files": [
+                    "src/Core/functions.php",
+                    "src/Collection/functions.php",
+                    "src/I18n/functions.php",
+                    "src/Utility/bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+                }
+            ],
+            "description": "The CakePHP framework",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "conventions over configuration",
+                "dry",
+                "form",
+                "framework",
+                "mvc",
+                "orm",
+                "psr-7",
+                "rapid-development",
+                "validation"
+            ],
+            "time": "2017-07-19T01:43:53+00:00"
+        },
+        {
+            "name": "cakephp/chronos",
+            "version": "1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/chronos.git",
+                "reference": "0621b191334d8dcb56907688986dd24eb8c38234"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/chronos/zipball/0621b191334d8dcb56907688986dd24eb8c38234",
+                "reference": "0621b191334d8dcb56907688986dd24eb8c38234",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1",
+                "cakephp/cakephp-codesniffer": "~2.3",
+                "phpbench/phpbench": "@dev",
+                "phpstan/phpstan": "^0.6.4",
+                "phpunit/phpunit": "<6.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Chronos\\": "src"
+                },
+                "files": [
+                    "src/carbon_compat.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Nesbitt",
+                    "email": "brian@nesbot.com",
+                    "homepage": "http://nesbot.com"
+                },
+                {
+                    "name": "The CakePHP Team",
+                    "homepage": "http://cakephp.org"
+                }
+            ],
+            "description": "A simple API extension for DateTime.",
+            "homepage": "http://cakephp.org",
+            "keywords": [
+                "date",
+                "datetime",
+                "time"
+            ],
+            "time": "2017-04-27T01:27:49+00:00"
+        },
+        {
+            "name": "cakephp/migrations",
+            "version": "1.6.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/migrations.git",
+                "reference": "f2a5e2915f8924bd36979a1001edeef7cd455f89"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/migrations/zipball/f2a5e2915f8924bd36979a1001edeef7cd455f89",
+                "reference": "f2a5e2915f8924bd36979a1001edeef7cd455f89",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": "~3.1",
+                "php": ">=5.4",
+                "robmorgan/phinx": "0.6.5"
+            },
+            "require-dev": {
+                "cakephp/bake": "@stable",
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "cakephp/bake": "Required if you want to generate migrations."
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Migrations\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/migrations/graphs/contributors"
+                }
+            ],
+            "description": "Database Migration plugin for CakePHP 3.0 based on Phinx",
+            "homepage": "https://github.com/cakephp/migrations",
+            "keywords": [
+                "cakephp",
+                "migrations"
+            ],
+            "time": "2017-01-07T16:45:31+00:00"
+        },
+        {
+            "name": "cakephp/plugin-installer",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/plugin-installer.git",
+                "reference": "3449cb3251e3e741b123237765e278005565d8de"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/3449cb3251e3e741b123237765e278005565d8de",
+                "reference": "3449cb3251e3e741b123237765e278005565d8de",
+                "shasum": ""
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "dev-master",
+                "composer/composer": "1.0.*@dev",
+                "phpunit/phpunit": "^4.8|^5.7|^6.0"
+            },
+            "type": "composer-installer",
+            "extra": {
+                "class": "Cake\\Composer\\Installer\\PluginInstaller"
+            },
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Composer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "http://cakephp.org"
+                }
+            ],
+            "description": "A composer installer for CakePHP 3.0+ plugins.",
+            "time": "2017-03-21T13:48:47+00:00"
+        },
+        {
+            "name": "firebase/php-jwt",
+            "version": "v4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/firebase/php-jwt.git",
+                "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/firebase/php-jwt/zipball/dccf163dc8ed7ed6a00afc06c51ee5186a428d35",
+                "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Firebase\\JWT\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Neuman Vong",
+                    "email": "neuman+pear@twilio.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Anant Narayanan",
+                    "email": "anant@php.net",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
+            "homepage": "https://github.com/firebase/php-jwt",
+            "time": "2016-07-18T04:51:16+00:00"
+        },
+        {
+            "name": "google/apiclient",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/google/google-api-php-client.git",
+                "reference": "f3fadd538315d62ebd1191d89ac791468c617260"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/google/google-api-php-client/zipball/f3fadd538315d62ebd1191d89ac791468c617260",
+                "reference": "f3fadd538315d62ebd1191d89ac791468c617260",
+                "shasum": ""
+            },
+            "require": {
+                "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0",
+                "google/apiclient-services": "~0.13",
+                "google/auth": "^1.0",
+                "guzzlehttp/guzzle": "~5.3.1|~6.0",
+                "guzzlehttp/psr7": "^1.2",
+                "monolog/monolog": "^1.17",
+                "php": ">=5.4",
+                "phpseclib/phpseclib": "~0.3.10|~2.0"
+            },
+            "require-dev": {
+                "cache/filesystem-adapter": "^0.3.2",
+                "phpunit/phpunit": "~4",
+                "squizlabs/php_codesniffer": "~2.3",
+                "symfony/css-selector": "~2.1",
+                "symfony/dom-crawler": "~2.1"
+            },
+            "suggest": {
+                "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Google_": "src/"
+                },
+                "classmap": [
+                    "src/Google/Service/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "description": "Client library for Google APIs",
+            "homepage": "http://developers.google.com/api-client-library/php",
+            "keywords": [
+                "google"
+            ],
+            "time": "2017-07-10T15:34:54+00:00"
+        },
+        {
+            "name": "google/apiclient-services",
+            "version": "v0.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/google/google-api-php-client-services.git",
+                "reference": "29c32b7d90a92af279ff5b51301fef03b44da7dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/29c32b7d90a92af279ff5b51301fef03b44da7dd",
+                "reference": "29c32b7d90a92af279ff5b51301fef03b44da7dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Google_Service_": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "description": "Client library for Google APIs",
+            "homepage": "http://developers.google.com/api-client-library/php",
+            "keywords": [
+                "google"
+            ],
+            "time": "2017-07-22T00:20:26+00:00"
+        },
+        {
+            "name": "google/auth",
+            "version": "v1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/google/google-auth-library-php.git",
+                "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/db77bd2de0bcc40bf50ebe851e9eed332aeaa4df",
+                "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df",
+                "shasum": ""
+            },
+            "require": {
+                "firebase/php-jwt": "~2.0|~3.0|~4.0",
+                "guzzlehttp/guzzle": "~5.3.1|~6.0",
+                "guzzlehttp/psr7": "~1.2",
+                "php": ">=5.4",
+                "psr/cache": "^1.0",
+                "psr/http-message": "^1.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^1.11",
+                "phpunit/phpunit": "3.7.*"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ],
+                "psr-4": {
+                    "Google\\Auth\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "description": "Google Auth Library for PHP",
+            "homepage": "http://github.com/google/google-auth-library-php",
+            "keywords": [
+                "Authentication",
+                "google",
+                "oauth2"
+            ],
+            "time": "2017-06-13T18:00:07+00:00"
+        },
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "6.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
+                "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/promises": "^1.0",
+                "guzzlehttp/psr7": "^1.4",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.0 || ^5.0",
+                "psr/log": "^1.0"
+            },
+            "suggest": {
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.2-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2017-06-22T18:50:49+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-12-20T10:07:11+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
+                "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "time": "2017-03-20T17:10:46+00:00"
+        },
+        {
+            "name": "mobiledetect/mobiledetectlib",
+            "version": "2.8.25",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/serbanghita/Mobile-Detect.git",
+                "reference": "f0896b5c7274d1450023b0b376240be902c3251c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/f0896b5c7274d1450023b0b376240be902c3251c",
+                "reference": "f0896b5c7274d1450023b0b376240be902c3251c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.0.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "Mobile_Detect.php"
+                ],
+                "psr-0": {
+                    "Detection": "namespaced/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Serban Ghita",
+                    "email": "serbanghita@gmail.com",
+                    "homepage": "http://mobiledetect.net",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+            "homepage": "https://github.com/serbanghita/Mobile-Detect",
+            "keywords": [
+                "detect mobile devices",
+                "mobile",
+                "mobile detect",
+                "mobile detector",
+                "php mobile detect"
+            ],
+            "time": "2017-03-29T13:59:30+00:00"
+        },
+        {
+            "name": "monolog/monolog",
+            "version": "1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
+                "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "psr/log": "~1.0"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+                "doctrine/couchdb": "~1.0@dev",
+                "graylog2/gelf-php": "~1.0",
+                "jakub-onderka/php-parallel-lint": "0.9",
+                "php-amqplib/php-amqplib": "~2.4",
+                "php-console/php-console": "^3.1.3",
+                "phpunit/phpunit": "~4.5",
+                "phpunit/phpunit-mock-objects": "2.3.0",
+                "ruflin/elastica": ">=0.90 <3.0",
+                "sentry/sentry": "^0.13",
+                "swiftmailer/swiftmailer": "^5.3|^6.0"
+            },
+            "suggest": {
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-mongo": "Allow sending log messages to a MongoDB server",
+                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
+                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+                "php-console/php-console": "Allow sending log messages to Google Chrome",
+                "rollbar/rollbar": "Allow sending log messages to Rollbar",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+                "sentry/sentry": "Allow sending log messages to a Sentry server"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Monolog\\": "src/Monolog"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "http://github.com/Seldaek/monolog",
+            "keywords": [
+                "log",
+                "logging",
+                "psr-3"
+            ],
+            "time": "2017-06-19T01:22:40+00:00"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "2.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34a7699e6f31b1ef4035ee36444407cecf9f56aa",
+                "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phing/phing": "~2.7",
+                "phpunit/phpunit": "~4.0",
+                "sami/sami": "~2.0",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "suggest": {
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
+                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "phpseclib/bootstrap.php"
+                ],
+                "psr-4": {
+                    "phpseclib\\": "phpseclib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "time": "2017-06-05T06:31:10+00:00"
+        },
+        {
+            "name": "psr/cache",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
+            "time": "2016-08-06T20:24:11+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2016-10-10T12:19:37+00:00"
+        },
+        {
+            "name": "robmorgan/phinx",
+            "version": "v0.6.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/phinx.git",
+                "reference": "6943cb4bb78bf9d3964967a032220b7c793b97b7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/phinx/zipball/6943cb4bb78bf9d3964967a032220b7c793b97b7",
+                "reference": "6943cb4bb78bf9d3964967a032220b7c793b97b7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4",
+                "symfony/config": "~2.8|~3.0",
+                "symfony/console": "~2.8|~3.0",
+                "symfony/yaml": "~2.8|~3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.26|^5.0"
+            },
+            "bin": [
+                "bin/phinx"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Phinx\\": "src/Phinx"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Woody Gilk",
+                    "email": "woody.gilk@gmail.com",
+                    "homepage": "http://shadowhand.me",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Rob Morgan",
+                    "email": "robbym@gmail.com",
+                    "homepage": "https://robmorgan.id.au",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Richard Quadling",
+                    "email": "rquadling@gmail.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+            "homepage": "https://phinx.org",
+            "keywords": [
+                "database",
+                "database migrations",
+                "db",
+                "migrations",
+                "phinx"
+            ],
+            "time": "2016-10-27T10:16:12+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "a094618deb9a3fe1c3cf500a796e167d0495a274"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/a094618deb9a3fe1c3cf500a796e167d0495a274",
+                "reference": "a094618deb9a3fe1c3cf500a796e167d0495a274",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9",
+                "symfony/filesystem": "~2.8|~3.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3",
+                "symfony/finder": "<3.3"
+            },
+            "require-dev": {
+                "symfony/dependency-injection": "~3.3",
+                "symfony/finder": "~3.3",
+                "symfony/yaml": "~3.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-06-16T12:40:34+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/a97e45d98c59510f085fa05225a1acb74dfe0546",
+                "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9",
+                "symfony/debug": "~2.8|~3.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~3.3",
+                "symfony/dependency-injection": "~3.3",
+                "symfony/event-dispatcher": "~2.8|~3.0",
+                "symfony/filesystem": "~2.8|~3.0",
+                "symfony/http-kernel": "~2.8|~3.0",
+                "symfony/process": "~2.8|~3.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/filesystem": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-07-03T13:19:36+00:00"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/debug.git",
+                "reference": "63b85a968486d95ff9542228dc2e4247f16f9743"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/63b85a968486d95ff9542228dc2e4247f16f9743",
+                "reference": "63b85a968486d95ff9542228dc2e4247f16f9743",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9",
+                "psr/log": "~1.0"
+            },
+            "conflict": {
+                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            },
+            "require-dev": {
+                "symfony/http-kernel": "~2.8|~3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Debug\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Debug Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-07-05T13:02:37+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "427987eb4eed764c3b6e38d52a0f87989e010676"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676",
+                "reference": "427987eb4eed764c3b6e38d52a0f87989e010676",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-07-11T07:17:58+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "f29dca382a6485c3cbe6379f0c61230167681937"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937",
+                "reference": "f29dca382a6485c3cbe6379f0c61230167681937",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2017-06-09T14:24:12+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "1f93a8d19b8241617f5074a123e282575b821df8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/1f93a8d19b8241617f5074a123e282575b821df8",
+                "reference": "1f93a8d19b8241617f5074a123e282575b821df8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "require-dev": {
+                "symfony/console": "~2.8|~3.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-06-15T12:58:50+00:00"
+        },
+        {
+            "name": "zendframework/zend-diactoros",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/zend-diactoros.git",
+                "reference": "b03f285a333f51e58c95cce54109a4a9ed691436"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/b03f285a333f51e58c95cce54109a4a9ed691436",
+                "reference": "b03f285a333f51e58c95cce54109a4a9ed691436",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.4 || ^7.0",
+                "psr/http-message": "~1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "phpunit/phpunit": "^4.6 || ^5.5",
+                "zendframework/zend-coding-standard": "~1.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev",
+                    "dev-develop": "1.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Zend\\Diactoros\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "description": "PSR HTTP Message implementations",
+            "homepage": "https://github.com/zendframework/zend-diactoros",
+            "keywords": [
+                "http",
+                "psr",
+                "psr-7"
+            ],
+            "time": "2017-04-06T16:18:34+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "cakephp/bake",
+            "version": "1.3.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/bake.git",
+                "reference": "4bbb541ee27d12fe63f15cf5acf70b94553de209"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/bake/zipball/4bbb541ee27d12fe63f15cf5acf70b94553de209",
+                "reference": "4bbb541ee27d12fe63f15cf5acf70b94553de209",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": ">=3.4.0 <4.0.0",
+                "cakephp/plugin-installer": "*",
+                "php": ">=5.6.0"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "~5.7 | ~6.0"
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Bake\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/bake/graphs/contributors"
+                }
+            ],
+            "description": "Bake plugin for CakePHP 3.0",
+            "homepage": "https://github.com/cakephp/bake",
+            "keywords": [
+                "bake",
+                "cakephp"
+            ],
+            "time": "2017-07-01T15:59:12+00:00"
+        },
+        {
+            "name": "cakephp/debug_kit",
+            "version": "3.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/debug_kit.git",
+                "reference": "49208ec4aa0f5650095565f66c52a72fbe393069"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/49208ec4aa0f5650095565f66c52a72fbe393069",
+                "reference": "49208ec4aa0f5650095565f66c52a72fbe393069",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": "^3.4.0",
+                "cakephp/chronos": "^1.0.0",
+                "cakephp/plugin-installer": "^1.0.0",
+                "composer/composer": "^1.3.0",
+                "jdorn/sql-formatter": "^1.2.0",
+                "php": ">=5.6.0"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "^5.7|^6.0"
+            },
+            "suggest": {
+                "ext-sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use."
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "DebugKit\\": "src",
+                    "DebugKit\\Test\\Fixture\\": "tests\\Fixture"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Story",
+                    "homepage": "http://mark-story.com",
+                    "role": "Author"
+                },
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors"
+                }
+            ],
+            "description": "CakePHP Debug Kit",
+            "homepage": "https://github.com/cakephp/debug_kit",
+            "keywords": [
+                "cakephp",
+                "debug",
+                "kit"
+            ],
+            "time": "2017-07-20T11:18:33+00:00"
+        },
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.0.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
+                "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0"
+            },
+            "suggest": {
+                "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "time": "2017-03-06T11:59:08+00:00"
+        },
+        {
+            "name": "composer/composer",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/composer.git",
+                "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/composer/zipball/489e09ee6c3ba431fbeeef9147afdaeb6f91b647",
+                "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0",
+                "composer/semver": "^1.0",
+                "composer/spdx-licenses": "^1.0",
+                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
+                "php": "^5.3.2 || ^7.0",
+                "psr/log": "^1.0",
+                "seld/cli-prompt": "^1.0",
+                "seld/jsonlint": "^1.4",
+                "seld/phar-utils": "^1.0",
+                "symfony/console": "^2.7 || ^3.0",
+                "symfony/filesystem": "^2.7 || ^3.0",
+                "symfony/finder": "^2.7 || ^3.0",
+                "symfony/process": "^2.7 || ^3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
+            },
+            "suggest": {
+                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+                "ext-zip": "Enabling the zip extension allows you to unzip archives",
+                "ext-zlib": "Allow gzip compression of HTTP requests"
+            },
+            "bin": [
+                "bin/composer"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\": "src/Composer"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+            "homepage": "https://getcomposer.org/",
+            "keywords": [
+                "autoload",
+                "dependency",
+                "package"
+            ],
+            "time": "2017-05-17T06:17:53+00:00"
+        },
+        {
+            "name": "composer/semver",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/semver.git",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Semver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
+            "time": "2016-08-30T16:08:34+00:00"
+        },
+        {
+            "name": "composer/spdx-licenses",
+            "version": "1.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/spdx-licenses.git",
+                "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
+                "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Spdx\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "SPDX licenses list and validation library.",
+            "keywords": [
+                "license",
+                "spdx",
+                "validator"
+            ],
+            "time": "2017-04-03T19:08:52+00:00"
+        },
+        {
+            "name": "dnoegel/php-xdg-base-dir",
+            "version": "0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "@stable"
+            },
+            "type": "project",
+            "autoload": {
+                "psr-4": {
+                    "XdgBaseDir\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "implementation of xdg base directory specification for php",
+            "time": "2014-10-24T07:27:01+00:00"
+        },
+        {
+            "name": "jakub-onderka/php-console-color",
+            "version": "0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
+                "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
+                "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "jakub-onderka/php-code-style": "1.0",
+                "jakub-onderka/php-parallel-lint": "0.*",
+                "jakub-onderka/php-var-dump-check": "0.*",
+                "phpunit/phpunit": "3.7.*",
+                "squizlabs/php_codesniffer": "1.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "JakubOnderka\\PhpConsoleColor": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jakub Onderka",
+                    "email": "jakub.onderka@gmail.com",
+                    "homepage": "http://www.acci.cz"
+                }
+            ],
+            "time": "2014-04-08T15:00:19+00:00"
+        },
+        {
+            "name": "jakub-onderka/php-console-highlighter",
+            "version": "v0.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
+                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+                "shasum": ""
+            },
+            "require": {
+                "jakub-onderka/php-console-color": "~0.1",
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "jakub-onderka/php-code-style": "~1.0",
+                "jakub-onderka/php-parallel-lint": "~0.5",
+                "jakub-onderka/php-var-dump-check": "~0.1",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~1.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "JakubOnderka\\PhpConsoleHighlighter": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jakub Onderka",
+                    "email": "acci@acci.cz",
+                    "homepage": "http://www.acci.cz/"
+                }
+            ],
+            "time": "2015-04-20T18:58:01+00:00"
+        },
+        {
+            "name": "jdorn/sql-formatter",
+            "version": "v1.2.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/jdorn/sql-formatter.git",
+                "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
+                "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "lib"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jeremy Dorn",
+                    "email": "jeremy@jeremydorn.com",
+                    "homepage": "http://jeremydorn.com/"
+                }
+            ],
+            "description": "a PHP SQL highlighting library",
+            "homepage": "https://github.com/jdorn/sql-formatter/",
+            "keywords": [
+                "highlight",
+                "sql"
+            ],
+            "time": "2014-01-12T16:20:24+00:00"
+        },
+        {
+            "name": "justinrainbow/json-schema",
+            "version": "5.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/justinrainbow/json-schema.git",
+                "reference": "429be236f296ca249d61c65649cdf2652f4a5e80"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/429be236f296ca249d61c65649cdf2652f4a5e80",
+                "reference": "429be236f296ca249d61c65649cdf2652f4a5e80",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.1",
+                "json-schema/json-schema-test-suite": "1.2.0",
+                "phpdocumentor/phpdocumentor": "^2.7",
+                "phpunit/phpunit": "^4.8.22"
+            },
+            "bin": [
+                "bin/validate-json"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "JsonSchema\\": "src/JsonSchema/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bruno Prieto Reis",
+                    "email": "bruno.p.reis@gmail.com"
+                },
+                {
+                    "name": "Justin Rainbow",
+                    "email": "justin.rainbow@gmail.com"
+                },
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                },
+                {
+                    "name": "Robert Schönthal",
+                    "email": "seroscho@googlemail.com"
+                }
+            ],
+            "description": "A library to validate a json schema.",
+            "homepage": "https://github.com/justinrainbow/json-schema",
+            "keywords": [
+                "json",
+                "schema"
+            ],
+            "time": "2017-05-16T21:06:09+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v3.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "0808939f81c1347a3c8a82a5925385a08074b0f1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0808939f81c1347a3c8a82a5925385a08074b0f1",
+                "reference": "0808939f81c1347a3c8a82a5925385a08074b0f1",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0|~5.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2017-06-28T20:53:48+00:00"
+        },
+        {
+            "name": "psy/psysh",
+            "version": "v0.8.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "7ab97e5a32202585309f3ee35a0c08d2a8e588b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7ab97e5a32202585309f3ee35a0c08d2a8e588b1",
+                "reference": "7ab97e5a32202585309f3ee35a0c08d2a8e588b1",
+                "shasum": ""
+            },
+            "require": {
+                "dnoegel/php-xdg-base-dir": "0.1",
+                "jakub-onderka/php-console-highlighter": "0.3.*",
+                "nikic/php-parser": "~1.3|~2.0|~3.0",
+                "php": ">=5.3.9",
+                "symfony/console": "~2.3.10|^2.4.2|~3.0",
+                "symfony/var-dumper": "~2.7|~3.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "~1.11",
+                "hoa/console": "~3.16|~1.14",
+                "phpunit/phpunit": "~4.4|~5.0",
+                "symfony/finder": "~2.1|~3.0"
+            },
+            "suggest": {
+                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+            },
+            "bin": [
+                "bin/psysh"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-develop": "0.8.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Psy/functions.php"
+                ],
+                "psr-4": {
+                    "Psy\\": "src/Psy/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
+                }
+            ],
+            "description": "An interactive shell for modern PHP.",
+            "homepage": "http://psysh.org",
+            "keywords": [
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
+            ],
+            "time": "2017-07-22T15:14:19+00:00"
+        },
+        {
+            "name": "seld/cli-prompt",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/cli-prompt.git",
+                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
+                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Seld\\CliPrompt\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be"
+                }
+            ],
+            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
+            "keywords": [
+                "cli",
+                "console",
+                "hidden",
+                "input",
+                "prompt"
+            ],
+            "time": "2017-03-18T11:32:45+00:00"
+        },
+        {
+            "name": "seld/jsonlint",
+            "version": "1.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/jsonlint.git",
+                "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77",
+                "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5"
+            },
+            "bin": [
+                "bin/jsonlint"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "JSON Linter",
+            "keywords": [
+                "json",
+                "linter",
+                "parser",
+                "validator"
+            ],
+            "time": "2017-06-18T15:11:04+00:00"
+        },
+        {
+            "name": "seld/phar-utils",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/phar-utils.git",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Seld\\PharUtils\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be"
+                }
+            ],
+            "description": "PHAR file format utilities, for when PHP phars you up",
+            "keywords": [
+                "phra"
+            ],
+            "time": "2015-10-13T18:44:15+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4",
+                "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-06-01T21:01:25+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a",
+                "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-07-13T13:05:09+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v3.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "0f32b62d21991700250fed5109b092949007c5b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f32b62d21991700250fed5109b092949007c5b3",
+                "reference": "0f32b62d21991700250fed5109b092949007c5b3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "twig/twig": "~1.34|~2.4"
+            },
+            "suggest": {
+                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+                "ext-symfony_debug": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\VarDumper\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony mechanism for exploring and dumping PHP variables",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "time": "2017-07-10T14:18:27+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": {
+        "psy/psysh": 0
+    },
+    "prefer-stable": true,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.6"
+    },
+    "platform-dev": []
+}
diff --git a/production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php b/production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php
new file mode 100644 (file)
index 0000000..410e841
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+use Migrations\AbstractMigration;
+
+class CreateUsers extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * More information on this method is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-change-method
+     * @return void
+     */
+    public function change()
+    {
+       $this->table('users', ['id' => false, 'primary_key' => ['id']])
+            ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+            ->addColumn('name', 'string', ['length' => 128, 'null' => false])
+            ->addColumn('token', 'string', ['length' => 2048, 'null' => true])
+            ->addColumn('created', 'datetime')
+            ->addColumn('modified', 'datetime')
+            ->addIndex('name')
+            ->create();
+    }
+}
diff --git a/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock b/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock
new file mode 100644 (file)
index 0000000..4510999
Binary files /dev/null and b/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock differ
diff --git a/production/example_apps/shared_calendar/config/app.default.php b/production/example_apps/shared_calendar/config/app.default.php
new file mode 100644 (file)
index 0000000..c06599e
--- /dev/null
@@ -0,0 +1,346 @@
+<?php
+return [
+    /**
+     * Debug Level:
+     *
+     * Production Mode:
+     * false: No error messages, errors, or warnings shown.
+     *
+     * Development Mode:
+     * true: Errors and warnings shown.
+     */
+    'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),
+
+    /**
+     * Configure basic information about the application.
+     *
+     * - namespace - The namespace to find app classes under.
+     * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time.
+     * - encoding - The encoding used for HTML + database connections.
+     * - base - The base directory the app resides in. If false this
+     *   will be auto detected.
+     * - dir - Name of app directory.
+     * - webroot - The webroot directory.
+     * - wwwRoot - The file path to webroot.
+     * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to
+     *   use CakePHP pretty URLs, remove these .htaccess
+     *   files:
+     *      /.htaccess
+     *      /webroot/.htaccess
+     *   And uncomment the baseUrl key below.
+     * - fullBaseUrl - A base URL to use for absolute links.
+     * - imageBaseUrl - Web path to the public images directory under webroot.
+     * - cssBaseUrl - Web path to the public css directory under webroot.
+     * - jsBaseUrl - Web path to the public js directory under webroot.
+     * - paths - Configure paths for non class based resources. Supports the
+     *   `plugins`, `templates`, `locales` subkeys, which allow the definition of
+     *   paths for plugins, view templates and locale files respectively.
+     */
+    'App' => [
+        'namespace' => 'App',
+        'encoding' => env('APP_ENCODING', 'UTF-8'),
+        'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
+        'base' => false,
+        'dir' => 'src',
+        'webroot' => 'webroot',
+        'wwwRoot' => WWW_ROOT,
+        // 'baseUrl' => env('SCRIPT_NAME'),
+        'fullBaseUrl' => false,
+        'imageBaseUrl' => 'img/',
+        'cssBaseUrl' => 'css/',
+        'jsBaseUrl' => 'js/',
+        'paths' => [
+            'plugins' => [ROOT . DS . 'plugins' . DS],
+            'templates' => [APP . 'Template' . DS],
+            'locales' => [APP . 'Locale' . DS],
+        ],
+    ],
+
+    /**
+     * Security and encryption configuration
+     *
+     * - salt - A random string used in security hashing methods.
+     *   The salt value is also used as the encryption key.
+     *   You should treat it as extremely sensitive data.
+     */
+    'Security' => [
+        'salt' => env('SECURITY_SALT', '__SALT__'),
+    ],
+
+    /**
+     * Apply timestamps with the last modified time to static assets (js, css, images).
+     * Will append a querystring parameter containing the time the file was modified.
+     * This is useful for busting browser caches.
+     *
+     * Set to true to apply timestamps when debug is true. Set to 'force' to always
+     * enable timestamping regardless of debug value.
+     */
+    'Asset' => [
+        // 'timestamp' => true,
+    ],
+
+    /**
+     * Configure the cache adapters.
+     */
+    'Cache' => [
+        'default' => [
+            'className' => 'File',
+            'path' => CACHE,
+            'url' => env('CACHE_DEFAULT_URL', null),
+        ],
+
+        /**
+         * Configure the cache used for general framework caching.
+         * Translation cache files are stored with this configuration.
+         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
+         * If you set 'className' => 'Null' core cache will be disabled.
+         */
+        '_cake_core_' => [
+            'className' => 'File',
+            'prefix' => 'myapp_cake_core_',
+            'path' => CACHE . 'persistent/',
+            'serialize' => true,
+            'duration' => '+1 years',
+            'url' => env('CACHE_CAKECORE_URL', null),
+        ],
+
+        /**
+         * Configure the cache for model and datasource caches. This cache
+         * configuration is used to store schema descriptions, and table listings
+         * in connections.
+         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
+         */
+        '_cake_model_' => [
+            'className' => 'File',
+            'prefix' => 'myapp_cake_model_',
+            'path' => CACHE . 'models/',
+            'serialize' => true,
+            'duration' => '+1 years',
+            'url' => env('CACHE_CAKEMODEL_URL', null),
+        ],
+    ],
+
+    /**
+     * Configure the Error and Exception handlers used by your application.
+     *
+     * By default errors are displayed using Debugger, when debug is true and logged
+     * by Cake\Log\Log when debug is false.
+     *
+     * In CLI environments exceptions will be printed to stderr with a backtrace.
+     * In web environments an HTML page will be displayed for the exception.
+     * With debug true, framework errors like Missing Controller will be displayed.
+     * When debug is false, framework errors will be coerced into generic HTTP errors.
+     *
+     * Options:
+     *
+     * - `errorLevel` - int - The level of errors you are interested in capturing.
+     * - `trace` - boolean - Whether or not backtraces should be included in
+     *   logged errors/exceptions.
+     * - `log` - boolean - Whether or not you want exceptions logged.
+     * - `exceptionRenderer` - string - The class responsible for rendering
+     *   uncaught exceptions. If you choose a custom class you should place
+     *   the file for that class in src/Error. This class needs to implement a
+     *   render method.
+     * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that
+     *   extend one of the listed exceptions will also be skipped for logging.
+     *   E.g.:
+     *   `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']`
+     * - `extraFatalErrorMemory` - int - The number of megabytes to increase
+     *   the memory limit by when a fatal error is encountered. This allows
+     *   breathing room to complete logging or error handling.
+     */
+    'Error' => [
+        'errorLevel' => E_ALL,
+        'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
+        'skipLog' => [],
+        'log' => true,
+        'trace' => true,
+    ],
+
+    /**
+     * Email configuration.
+     *
+     * By defining transports separately from delivery profiles you can easily
+     * re-use transport configuration across multiple profiles.
+     *
+     * You can specify multiple configurations for production, development and
+     * testing.
+     *
+     * Each transport needs a `className`. Valid options are as follows:
+     *
+     *  Mail   - Send using PHP mail function
+     *  Smtp   - Send using SMTP
+     *  Debug  - Do not send the email, just return the result
+     *
+     * You can add custom transports (or override existing transports) by adding the
+     * appropriate file to src/Mailer/Transport. Transports should be named
+     * 'YourTransport.php', where 'Your' is the name of the transport.
+     */
+    'EmailTransport' => [
+        'default' => [
+            'className' => 'Mail',
+            // The following keys are used in SMTP transports
+            'host' => 'localhost',
+            'port' => 25,
+            'timeout' => 30,
+            'username' => 'user',
+            'password' => 'secret',
+            'client' => null,
+            'tls' => null,
+            'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
+        ],
+    ],
+
+    /**
+     * Email delivery profiles
+     *
+     * Delivery profiles allow you to predefine various properties about email
+     * messages from your application and give the settings a name. This saves
+     * duplication across your application and makes maintenance and development
+     * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email`
+     * for more information.
+     */
+    'Email' => [
+        'default' => [
+            'transport' => 'default',
+            'from' => 'you@localhost',
+            //'charset' => 'utf-8',
+            //'headerCharset' => 'utf-8',
+        ],
+    ],
+
+    /**
+     * Connection information used by the ORM to connect
+     * to your application's datastores.
+     * Do not use periods in database name - it may lead to error.
+     * See https://github.com/cakephp/cakephp/issues/6471 for details.
+     * Drivers include Mysql Postgres Sqlite Sqlserver
+     * See vendor\cakephp\cakephp\src\Database\Driver for complete list
+     */
+    'Datasources' => [
+        'default' => [
+            'className' => 'Cake\Database\Connection',
+            'driver' => 'Cake\Database\Driver\Mysql',
+            'persistent' => false,
+            'host' => 'localhost',
+            /**
+             * CakePHP will use the default DB port based on the driver selected
+             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
+             * the following line and set the port accordingly
+             */
+            //'port' => 'non_standard_port_number',
+            'username' => 'my_app',
+            'password' => 'secret',
+            'database' => 'my_app',
+            'encoding' => 'utf8',
+            'timezone' => 'UTC',
+            'flags' => [],
+            'cacheMetadata' => true,
+            'log' => false,
+
+            /**
+             * Set identifier quoting to true if you are using reserved words or
+             * special characters in your table or column names. Enabling this
+             * setting will result in queries built using the Query Builder having
+             * identifiers quoted when creating SQL. It should be noted that this
+             * decreases performance because each query needs to be traversed and
+             * manipulated before being executed.
+             */
+            'quoteIdentifiers' => false,
+
+            /**
+             * During development, if using MySQL < 5.6, uncommenting the
+             * following line could boost the speed at which schema metadata is
+             * fetched from the database. It can also be set directly with the
+             * mysql configuration directive 'innodb_stats_on_metadata = 0'
+             * which is the recommended value in production environments
+             */
+            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
+
+            'url' => env('DATABASE_URL', null),
+        ],
+
+        /**
+         * The test connection is used during the test suite.
+         */
+        'test' => [
+            'className' => 'Cake\Database\Connection',
+            'driver' => 'Cake\Database\Driver\Mysql',
+            'persistent' => false,
+            'host' => 'localhost',
+            //'port' => 'non_standard_port_number',
+            'username' => 'my_app',
+            'password' => 'secret',
+            'database' => 'test_myapp',
+            'encoding' => 'utf8',
+            'timezone' => 'UTC',
+            'cacheMetadata' => true,
+            'quoteIdentifiers' => false,
+            'log' => false,
+            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
+            'url' => env('DATABASE_TEST_URL', null),
+        ],
+    ],
+
+    /**
+     * Configures logging options
+     */
+    'Log' => [
+        'debug' => [
+            'className' => 'Cake\Log\Engine\FileLog',
+            'path' => LOGS,
+            'file' => 'debug',
+            'levels' => ['notice', 'info', 'debug'],
+            'url' => env('LOG_DEBUG_URL', null),
+        ],
+        'error' => [
+            'className' => 'Cake\Log\Engine\FileLog',
+            'path' => LOGS,
+            'file' => 'error',
+            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
+            'url' => env('LOG_ERROR_URL', null),
+        ],
+    ],
+
+    /**
+     * Session configuration.
+     *
+     * Contains an array of settings to use for session configuration. The
+     * `defaults` key is used to define a default preset to use for sessions, any
+     * settings declared here will override the settings of the default config.
+     *
+     * ## Options
+     *
+     * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'.
+     * - `cookiePath` - The url path for which session cookie is set. Maps to the
+     *   `session.cookie_path` php.ini config. Defaults to base path of app.
+     * - `timeout` - The time in minutes the session should be valid for.
+     *    Pass 0 to disable checking timeout.
+     *    Please note that php.ini's session.gc_maxlifetime must be equal to or greater
+     *    than the largest Session['timeout'] in all served websites for it to have the
+     *    desired effect.
+     * - `defaults` - The default configuration set to use as a basis for your session.
+     *    There are four built-in options: php, cake, cache, database.
+     * - `handler` - Can be used to enable a custom session handler. Expects an
+     *    array with at least the `engine` key, being the name of the Session engine
+     *    class to use for managing the session. CakePHP bundles the `CacheSession`
+     *    and `DatabaseSession` engines.
+     * - `ini` - An associative array of additional ini values to set.
+     *
+     * The built-in `defaults` options are:
+     *
+     * - 'php' - Uses settings defined in your php.ini.
+     * - 'cake' - Saves session files in CakePHP's /tmp directory.
+     * - 'database' - Uses CakePHP's database sessions.
+     * - 'cache' - Use the Cache class to save sessions.
+     *
+     * To define a custom session handler, save it at src/Network/Session/<name>.php.
+     * Make sure the class implements PHP's `SessionHandlerInterface` and set
+     * Session.handler to <name>
+     *
+     * To use database sessions, load the SQL file located at config/Schema/sessions.sql
+     */
+    'Session' => [
+        'defaults' => 'php',
+    ],
+];
diff --git a/production/example_apps/shared_calendar/config/bootstrap.php b/production/example_apps/shared_calendar/config/bootstrap.php
new file mode 100644 (file)
index 0000000..44e68fc
--- /dev/null
@@ -0,0 +1,244 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.8
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+// You can remove this if you are confident that your PHP version is sufficient.
+if (version_compare(PHP_VERSION, '5.6.0') < 0) {
+    trigger_error('Your PHP version must be equal or higher than 5.6.0 to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ *  You can remove this if you are confident you have intl installed.
+ */
+if (!extension_loaded('intl')) {
+    trigger_error('You must enable the intl extension to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ * You can remove this if you are confident you have mbstring installed.
+ */
+if (!extension_loaded('mbstring')) {
+    trigger_error('You must enable the mbstring extension to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ * Configure paths required to find CakePHP + general filepath
+ * constants
+ */
+require __DIR__ . '/paths.php';
+
+/*
+ * Bootstrap CakePHP.
+ *
+ * Does the various bits of setup that CakePHP needs to do.
+ * This includes:
+ *
+ * - Registering the CakePHP autoloader.
+ * - Setting the default application paths.
+ */
+require CORE_PATH . 'config' . DS . 'bootstrap.php';
+
+use Cake\Cache\Cache;
+use Cake\Console\ConsoleErrorHandler;
+use Cake\Core\App;
+use Cake\Core\Configure;
+use Cake\Core\Configure\Engine\PhpConfig;
+use Cake\Core\Plugin;
+use Cake\Database\Type;
+use Cake\Datasource\ConnectionManager;
+use Cake\Error\ErrorHandler;
+use Cake\Log\Log;
+use Cake\Mailer\Email;
+use Cake\Network\Request;
+use Cake\Utility\Inflector;
+use Cake\Utility\Security;
+
+/*
+ * Read configuration file and inject configuration into various
+ * CakePHP classes.
+ *
+ * By default there is only one configuration file. It is often a good
+ * idea to create multiple configuration files, and separate the configuration
+ * that changes from configuration that does not. This makes deployment simpler.
+ */
+try {
+    Configure::config('default', new PhpConfig());
+    Configure::load('app', 'default', false);
+} catch (\Exception $e) {
+    exit($e->getMessage() . "\n");
+}
+
+/*
+ * Load an environment local configuration file.
+ * You can use a file like app_local.php to provide local overrides to your
+ * shared configuration.
+ */
+//Configure::load('app_local', 'default');
+
+/*
+ * When debug = true the metadata cache should only last
+ * for a short time.
+ */
+if (Configure::read('debug')) {
+    Configure::write('Cache._cake_model_.duration', '+2 minutes');
+    Configure::write('Cache._cake_core_.duration', '+2 minutes');
+}
+
+/*
+ * Set server timezone to UTC. You can change it to another timezone of your
+ * choice but using UTC makes time calculations / conversions easier.
+ */
+date_default_timezone_set('UTC');
+
+/*
+ * Configure the mbstring extension to use the correct encoding.
+ */
+mb_internal_encoding(Configure::read('App.encoding'));
+
+/*
+ * Set the default locale. This controls how dates, number and currency is
+ * formatted and sets the default language to use for translations.
+ */
+ini_set('intl.default_locale', Configure::read('App.defaultLocale'));
+
+/*
+ * Register application error and exception handlers.
+ */
+$isCli = PHP_SAPI === 'cli';
+if ($isCli) {
+    (new ConsoleErrorHandler(Configure::read('Error')))->register();
+} else {
+    (new ErrorHandler(Configure::read('Error')))->register();
+}
+
+/*
+ * Include the CLI bootstrap overrides.
+ */
+if ($isCli) {
+    require __DIR__ . '/bootstrap_cli.php';
+}
+
+/*
+ * Set the full base URL.
+ * This URL is used as the base of all absolute links.
+ *
+ * If you define fullBaseUrl in your config file you can remove this.
+ */
+if (!Configure::read('App.fullBaseUrl')) {
+    $s = null;
+    if (env('HTTPS')) {
+        $s = 's';
+    }
+
+    $httpHost = env('HTTP_HOST');
+    if (isset($httpHost)) {
+        Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost);
+    }
+    unset($httpHost, $s);
+}
+
+Cache::setConfig(Configure::consume('Cache'));
+ConnectionManager::setConfig(Configure::consume('Datasources'));
+Email::setConfigTransport(Configure::consume('EmailTransport'));
+Email::setConfig(Configure::consume('Email'));
+Log::setConfig(Configure::consume('Log'));
+Security::salt(Configure::consume('Security.salt'));
+
+/*
+ * The default crypto extension in 3.0 is OpenSSL.
+ * If you are migrating from 2.x uncomment this code to
+ * use a more compatible Mcrypt based implementation
+ */
+//Security::engine(new \Cake\Utility\Crypto\Mcrypt());
+
+/*
+ * Setup detectors for mobile and tablet.
+ */
+Request::addDetector('mobile', function ($request) {
+    $detector = new \Detection\MobileDetect();
+
+    return $detector->isMobile();
+});
+Request::addDetector('tablet', function ($request) {
+    $detector = new \Detection\MobileDetect();
+
+    return $detector->isTablet();
+});
+
+/*
+ * Enable immutable time objects in the ORM.
+ *
+ * You can enable default locale format parsing by adding calls
+ * to `useLocaleParser()`. This enables the automatic conversion of
+ * locale specific date formats. For details see
+ * @link http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data
+ */
+Type::build('time')
+    ->useImmutable();
+Type::build('date')
+    ->useImmutable();
+Type::build('datetime')
+    ->useImmutable();
+Type::build('timestamp')
+    ->useImmutable();
+
+/*
+ * Custom Inflector rules, can be set to correctly pluralize or singularize
+ * table, model, controller names or whatever other string is passed to the
+ * inflection functions.
+ */
+//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
+//Inflector::rules('irregular', ['red' => 'redlings']);
+//Inflector::rules('uninflected', ['dontinflectme']);
+//Inflector::rules('transliteration', ['/å/' => 'aa']);
+
+/*
+ * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call
+ * Uncomment one of the lines below, as you need. make sure you read the documentation on Plugin to use more
+ * advanced ways of loading plugins
+ *
+ * Plugin::loadAll(); // Loads all plugins at once
+ * Plugin::load('Migrations'); //Loads a single plugin named Migrations
+ *
+ */
+
+/*
+ * Only try to load DebugKit in development mode
+ * Debug Kit should not be installed on a production system
+ */
+if (Configure::read('debug')) {
+    Plugin::load('DebugKit', ['bootstrap' => true]);
+}
+
+// added for cache key construction from array using table model.
+// hmmm: could go into a trait or some other reusable asset?
+function bootMultiImplode($glue, $pieces) {
+       $string = '';
+       if (is_array ( $pieces )) {
+               reset ( $pieces );
+               while ( list ( $key, $value ) = each ( $pieces ) ) {
+                       if (is_numeric ( $key )) {
+                               $string .= $glue . bootMultiImplode ( $glue, $value );
+                       } else {
+                               // add string keys to string
+                               $string .= $glue . $key . $glue . bootMultiImplode ( $glue, $value );
+                       }
+               }
+       } else {
+               
+               return $pieces;
+       }
+       
+       return trim($string, $glue);
+}
diff --git a/production/example_apps/shared_calendar/config/bootstrap_cli.php b/production/example_apps/shared_calendar/config/bootstrap_cli.php
new file mode 100644 (file)
index 0000000..f822a55
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+use Cake\Core\Configure;
+use Cake\Core\Exception\MissingPluginException;
+use Cake\Core\Plugin;
+
+/**
+ * Additional bootstrapping and configuration for CLI environments should
+ * be put here.
+ */
+
+// Set the fullBaseUrl to allow URLs to be generated in shell tasks.
+// This is useful when sending email from shells.
+//Configure::write('App.fullBaseUrl', php_uname('n'));
+
+// Set logs to different files so they don't have permission conflicts.
+Configure::write('Log.debug.file', 'cli-debug');
+Configure::write('Log.error.file', 'cli-error');
+
+try {
+    Plugin::load('Bake');
+} catch (MissingPluginException $e) {
+    // Do not halt if the plugin is missing
+}
+
+Plugin::load('Migrations');
diff --git a/production/example_apps/shared_calendar/config/paths.php b/production/example_apps/shared_calendar/config/paths.php
new file mode 100644 (file)
index 0000000..fcaba5c
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.0
+ * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+
+/**
+ * Use the DS to separate the directories in other defines
+ */
+if (!defined('DS')) {
+    define('DS', DIRECTORY_SEPARATOR);
+}
+
+/**
+ * These defines should only be edited if you have cake installed in
+ * a directory layout other than the way it is distributed.
+ * When using custom settings be sure to use the DS and do not add a trailing DS.
+ */
+
+/**
+ * The full path to the directory which holds "src", WITHOUT a trailing DS.
+ */
+define('ROOT', dirname(__DIR__));
+
+/**
+ * The actual directory name for the application directory. Normally
+ * named 'src'.
+ */
+define('APP_DIR', 'src');
+
+/**
+ * Path to the application's directory.
+ */
+define('APP', ROOT . DS . APP_DIR . DS);
+
+/**
+ * Path to the config directory.
+ */
+define('CONFIG', ROOT . DS . 'config' . DS);
+
+/**
+ * File path to the webroot directory.
+ */
+define('WWW_ROOT', ROOT . DS . 'webroot' . DS);
+
+/**
+ * Path to the tests directory.
+ */
+define('TESTS', ROOT . DS . 'tests' . DS);
+
+/**
+ * Path to the temporary files directory.
+ */
+define('TMP', ROOT . DS . 'tmp' . DS);
+
+/**
+ * Path to the logs directory.
+ */
+define('LOGS', ROOT . DS . 'logs' . DS);
+
+/**
+ * Path to the cache files directory. It can be shared between hosts in a multi-server setup.
+ */
+define('CACHE', TMP . 'cache' . DS);
+
+/**
+ * The absolute path to the "cake" directory, WITHOUT a trailing DS.
+ *
+ * CakePHP should always be installed with composer, so look there.
+ */
+define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp');
+
+/**
+ * Path to the cake directory.
+ */
+define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
+define('CAKE', CORE_PATH . 'src' . DS);
diff --git a/production/example_apps/shared_calendar/config/routes.php b/production/example_apps/shared_calendar/config/routes.php
new file mode 100644 (file)
index 0000000..f93ecf4
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Routes configuration
+ *
+ * In this file, you set up routes to your controllers and their actions.
+ * Routes are very important mechanism that allows you to freely connect
+ * different URLs to chosen controllers and their actions (functions).
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+use Cake\Core\Plugin;
+use Cake\Routing\RouteBuilder;
+use Cake\Routing\Router;
+use Cake\Routing\Route\DashedRoute;
+
+/**
+ * The default class to use for all routes
+ *
+ * The following route classes are supplied with CakePHP and are appropriate
+ * to set as the default:
+ *
+ * - Route
+ * - InflectedRoute
+ * - DashedRoute
+ *
+ * If no call is made to `Router::defaultRouteClass()`, the class used is
+ * `Route` (`Cake\Routing\Route\Route`)
+ *
+ * Note that `Route` does not do any inflections on URLs which will result in
+ * inconsistently cased URLs when used with `:plugin`, `:controller` and
+ * `:action` markers.
+ *
+ */
+Router::defaultRouteClass(DashedRoute::class);
+
+Router::scope('/', function (RouteBuilder $routes) {
+    /**
+     * Here, we are connecting '/' (base path) to a controller called 'Pages',
+     * its action called 'display', and we pass a param to select the view file
+     * to use (in this case, src/Template/Pages/home.ctp)...
+     */
+    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
+
+    
+    //CALCODE:
+    /*
+     * make a more standard re-entry point for the google oauth process.  this allows us to use
+     * the top level path for google_login in our oauth credential, rather than worrying about the
+     * specific controller that implements it.
+     */
+       $routes->connect('/google_oauth', [ 'controller'=>'authorizer', 'action' => 'google_login']);
+
+
+    /**
+     * ...and connect the rest of 'Pages' controller's URLs.
+     */
+    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
+
+    /**
+     * Connect catchall routes for all controllers.
+     *
+     * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for
+     *    `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']);`
+     *    `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);`
+     *
+     * Any route class can be used with this method, such as:
+     * - DashedRoute
+     * - InflectedRoute
+     * - Route
+     * - Or your own route class
+     *
+     * You can remove these routes once you've connected the
+     * routes you want in your application.
+     */
+    $routes->fallbacks(DashedRoute::class);
+});
+
+/**
+ * Load all plugin routes. See the Plugin documentation on
+ * how to customize the loading of plugin routes.
+ */
+Plugin::routes();
diff --git a/production/example_apps/shared_calendar/config/schema/i18n.sql b/production/example_apps/shared_calendar/config/schema/i18n.sql
new file mode 100644 (file)
index 0000000..47cf171
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+
+CREATE TABLE i18n (
+    id int NOT NULL auto_increment,
+    locale varchar(6) NOT NULL,
+    model varchar(255) NOT NULL,
+    foreign_key int(10) NOT NULL,
+    field varchar(255) NOT NULL,
+    content text,
+    PRIMARY KEY (id),
+    UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),
+    INDEX I18N_FIELD(model, foreign_key, field)
+);
diff --git a/production/example_apps/shared_calendar/config/schema/sessions.sql b/production/example_apps/shared_calendar/config/schema/sessions.sql
new file mode 100644 (file)
index 0000000..b5a5276
--- /dev/null
@@ -0,0 +1,13 @@
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+
+CREATE TABLE sessions (
+  id char(40) NOT NULL,
+  data text,
+  expires INT(11) NOT NULL,
+  PRIMARY KEY  (id)
+);
diff --git a/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt
new file mode 100644 (file)
index 0000000..77ba9a0
Binary files /dev/null and b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt differ
diff --git a/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf
new file mode 100644 (file)
index 0000000..850665e
Binary files /dev/null and b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf differ
diff --git a/production/example_apps/shared_calendar/docs/readme.txt b/production/example_apps/shared_calendar/docs/readme.txt
new file mode 100644 (file)
index 0000000..4da1fd1
--- /dev/null
@@ -0,0 +1,7 @@
+
+
+note:
+these versions are outdated and deprecated.
+
+the new document is available at:
+https://feistymeow.org/feisty_meow/documentation/google_apis/google_apis_and_credentials.pdf
diff --git a/production/example_apps/shared_calendar/index.php b/production/example_apps/shared_calendar/index.php
new file mode 100644 (file)
index 0000000..fc5e39c
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';
diff --git a/production/example_apps/shared_calendar/phpunit.xml.dist b/production/example_apps/shared_calendar/phpunit.xml.dist
new file mode 100644 (file)
index 0000000..77c784b
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+    colors="true"
+    processIsolation="false"
+    stopOnFailure="false"
+    syntaxCheck="false"
+    bootstrap="./tests/bootstrap.php"
+    >
+    <php>
+        <ini name="memory_limit" value="-1"/>
+        <ini name="apc.enable_cli" value="1"/>
+    </php>
+
+    <!-- Add any additional test suites you want to run here -->
+    <testsuites>
+        <testsuite name="App Test Suite">
+            <directory>./tests/TestCase</directory>
+        </testsuite>
+        <!-- Add plugin test suites here. -->
+    </testsuites>
+
+    <!-- Setup a listener for fixtures -->
+    <listeners>
+        <listener
+        class="\Cake\TestSuite\Fixture\FixtureInjector"
+        file="./vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php">
+            <arguments>
+                <object class="\Cake\TestSuite\Fixture\FixtureManager" />
+            </arguments>
+        </listener>
+    </listeners>
+
+    <!-- Ignore vendor tests in code coverage reports -->
+    <filter>
+        <whitelist>
+            <directory suffix=".php">./src/</directory>
+            <directory suffix=".php">./plugins/*/src/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/production/example_apps/shared_calendar/plugins/empty b/production/example_apps/shared_calendar/plugins/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/shared_calendar/scripts/launch_local_cake.sh b/production/example_apps/shared_calendar/scripts/launch_local_cake.sh
new file mode 100644 (file)
index 0000000..6769f97
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )"
+pushd $THIS_FOLDER
+
+# does this help?
+export DEBUG=true
+
+./bin/cake server -p 8766
+
+popd
+
+
diff --git a/production/example_apps/shared_calendar/scripts/launch_serene_cake.sh b/production/example_apps/shared_calendar/scripts/launch_serene_cake.sh
new file mode 100644 (file)
index 0000000..a7ca15f
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )"
+pushd $THIS_FOLDER
+
+# does this help?
+export DEBUG=true
+
+./bin/cake server -H feistymeow.com -p 12739
+
+popd
+
+
diff --git a/production/example_apps/shared_calendar/src/Application.php b/production/example_apps/shared_calendar/src/Application.php
new file mode 100644 (file)
index 0000000..9c5999b
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.3.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App;
+
+use Cake\Core\Configure;
+use Cake\Error\Middleware\ErrorHandlerMiddleware;
+use Cake\Http\BaseApplication;
+use Cake\Routing\Middleware\AssetMiddleware;
+use Cake\Routing\Middleware\RoutingMiddleware;
+
+/**
+ * Application setup class.
+ *
+ * This defines the bootstrapping logic and middleware layers you
+ * want to use in your application.
+ */
+class Application extends BaseApplication
+{
+    /**
+     * Setup the middleware your application will use.
+     *
+     * @param \Cake\Http\MiddlewareQueue $middleware The middleware queue to setup.
+     * @return \Cake\Http\MiddlewareQueue The updated middleware.
+     */
+    public function middleware($middleware)
+    {
+        $middleware
+            // Catch any exceptions in the lower layers,
+            // and make an error page/response
+            ->add(ErrorHandlerMiddleware::class)
+
+            // Handle plugin/theme assets like CakePHP normally does.
+            ->add(AssetMiddleware::class)
+
+            // Apply routing
+            ->add(RoutingMiddleware::class);
+
+        return $middleware;
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Console/Installer.php b/production/example_apps/shared_calendar/src/Console/Installer.php
new file mode 100644 (file)
index 0000000..0756096
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Console;
+
+use Cake\Utility\Security;
+use Composer\Script\Event;
+use Exception;
+
+/**
+ * Provides installation hooks for when this application is installed via
+ * composer. Customize this class to suit your needs.
+ */
+class Installer
+{
+
+    /**
+     * Does some routine installation tasks so people don't have to.
+     *
+     * @param \Composer\Script\Event $event The composer event object.
+     * @throws \Exception Exception raised by validator.
+     * @return void
+     */
+    public static function postInstall(Event $event)
+    {
+        $io = $event->getIO();
+
+        $rootDir = dirname(dirname(__DIR__));
+
+        static::createAppConfig($rootDir, $io);
+        static::createWritableDirectories($rootDir, $io);
+
+        // ask if the permissions should be changed
+        if ($io->isInteractive()) {
+            $validator = function ($arg) {
+                if (in_array($arg, ['Y', 'y', 'N', 'n'])) {
+                    return $arg;
+                }
+                throw new Exception('This is not a valid answer. Please choose Y or n.');
+            };
+            $setFolderPermissions = $io->askAndValidate(
+                '<info>Set Folder Permissions ? (Default to Y)</info> [<comment>Y,n</comment>]? ',
+                $validator,
+                10,
+                'Y'
+            );
+
+            if (in_array($setFolderPermissions, ['Y', 'y'])) {
+                static::setFolderPermissions($rootDir, $io);
+            }
+        } else {
+            static::setFolderPermissions($rootDir, $io);
+        }
+
+        static::setSecuritySalt($rootDir, $io);
+
+        if (class_exists('\Cake\Codeception\Console\Installer')) {
+            \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event);
+        }
+    }
+
+    /**
+     * Create the config/app.php file if it does not exist.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function createAppConfig($dir, $io)
+    {
+        $appConfig = $dir . '/config/app.php';
+        $defaultConfig = $dir . '/config/app.default.php';
+        if (!file_exists($appConfig)) {
+            copy($defaultConfig, $appConfig);
+            $io->write('Created `config/app.php` file');
+        }
+    }
+
+    /**
+     * Create the `logs` and `tmp` directories.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function createWritableDirectories($dir, $io)
+    {
+        $paths = [
+            'logs',
+            'tmp',
+            'tmp/cache',
+            'tmp/cache/models',
+            'tmp/cache/persistent',
+            'tmp/cache/views',
+            'tmp/sessions',
+            'tmp/tests'
+        ];
+
+        foreach ($paths as $path) {
+            $path = $dir . '/' . $path;
+            if (!file_exists($path)) {
+                mkdir($path);
+                $io->write('Created `' . $path . '` directory');
+            }
+        }
+    }
+
+    /**
+     * Set globally writable permissions on the "tmp" and "logs" directory.
+     *
+     * This is not the most secure default, but it gets people up and running quickly.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function setFolderPermissions($dir, $io)
+    {
+        // Change the permissions on a path and output the results.
+        $changePerms = function ($path, $perms, $io) {
+            // Get permission bits from stat(2) result.
+            $currentPerms = fileperms($path) & 0777;
+            if (($currentPerms & $perms) == $perms) {
+                return;
+            }
+
+            $res = chmod($path, $currentPerms | $perms);
+            if ($res) {
+                $io->write('Permissions set on ' . $path);
+            } else {
+                $io->write('Failed to set permissions on ' . $path);
+            }
+        };
+
+        $walker = function ($dir, $perms, $io) use (&$walker, $changePerms) {
+            $files = array_diff(scandir($dir), ['.', '..']);
+            foreach ($files as $file) {
+                $path = $dir . '/' . $file;
+
+                if (!is_dir($path)) {
+                    continue;
+                }
+
+                $changePerms($path, $perms, $io);
+                $walker($path, $perms, $io);
+            }
+        };
+
+        $worldWritable = bindec('0000000111');
+        $walker($dir . '/tmp', $worldWritable, $io);
+        $changePerms($dir . '/tmp', $worldWritable, $io);
+        $changePerms($dir . '/logs', $worldWritable, $io);
+    }
+
+    /**
+     * Set the security.salt value in the application's config file.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function setSecuritySalt($dir, $io)
+    {
+        $config = $dir . '/config/app.php';
+        $content = file_get_contents($config);
+
+        $newKey = hash('sha256', Security::randomBytes(64));
+        $content = str_replace('__SALT__', $newKey, $content, $count);
+
+        if ($count == 0) {
+            $io->write('No Security.salt placeholder to replace.');
+
+            return;
+        }
+
+        $result = file_put_contents($config, $content);
+        if ($result) {
+            $io->write('Updated Security.salt value in config/app.php');
+
+            return;
+        }
+        $io->write('Unable to update Security.salt value.');
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Controller/AppController.php b/production/example_apps/shared_calendar/src/Controller/AppController.php
new file mode 100644 (file)
index 0000000..c3e0757
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     0.2.9
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Controller\Controller;
+use Cake\Event\Event;
+
+/**
+ * Application Controller
+ *
+ * Add your application-wide methods in the class below, your controllers
+ * will inherit them.
+ *
+ * @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller
+ */
+class AppController extends Controller
+{
+
+    /**
+     * Initialization hook method.
+     *
+     * Use this method to add common initialization code like loading components.
+     *
+     * e.g. `$this->loadComponent('Security');`
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        parent::initialize();
+
+        $this->loadComponent('RequestHandler');
+        $this->loadComponent('Flash');
+
+        /*
+         * Enable the following components for recommended CakePHP security settings.
+         * see http://book.cakephp.org/3.0/en/controllers/components/security.html
+         */
+        //$this->loadComponent('Security');
+        //$this->loadComponent('Csrf');
+
+/* not necessarily what we want.
+//CALCODE:
+        $this->loadComponent('Auth', [
+                'loginAction' => [
+                    'controller' => 'Users',
+                    'action' => 'authorize',
+                ],
+                'authenticate'         => [
+                    'Form' => [
+                        'fields' => [
+                            'username' => 'email',
+                            'password' => 'password'
+                        ]
+                    ]
+                ],
+                'authError'            => __('You do not have permission to access this page'),
+                'authorize'            => ['Controller'],
+                'unauthorizedRedirect' => [
+                    'controller' => 'Users',
+                    'action'     => 'forbidden'
+                ],
+                'loginRedirect'        => [
+                    'controller' => 'Users',
+                    'action'     => 'show_calendar'
+                ],
+                'logoutRedirect'       => [
+                    'controller' => 'Users',
+                    'action'     => 'authorize'
+                ]
+       ]);
+
+       $this->Auth->allow(['authorize', 'googleLogin']);
+*/
+    }
+
+    /**
+     * Before render callback.
+     *
+     * @param \Cake\Event\Event $event The beforeRender event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeRender(Event $event)
+    {
+        if (!array_key_exists('_serialize', $this->viewVars) &&
+            in_array($this->response->type(), ['application/json', 'application/xml'])
+        ) {
+            $this->set('_serialize', true);
+        }
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Controller/AuthorizerController.php b/production/example_apps/shared_calendar/src/Controller/AuthorizerController.php
new file mode 100644 (file)
index 0000000..5ae4386
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace App\Controller;
+
+use App\Controller\AppController;
+use Cake\Log\Log;
+use App\Traits\GoogleOauthTrait;
+
+/**
+ * Authorizer Controller
+ * 
+ * This controller provides an entry point for authorization processes.
+ * So far this is just for Google's OAuth 2.0.
+ */
+class AuthorizerController extends AppController
+{
+       use GoogleOauthTrait;
+       
+       /*
+        * Routing note:
+        * 
+        * This controller will provide a link for /authorizer/google_login where the oauth
+        * process can come back to our application from google.  To make your client secret setup
+        * simpler, add a route at the top level like so:
+        *       $routes->connect('/google_oauth', [ 'controller'=>'authorizer', 'action' => 'google_login']);
+        */
+       
+       public function initialize()
+       {
+               parent::initialize();
+       }
+       
+       /**
+        * our callback from google oauth that is passed the oauth access token (or an error
+        * if authorization failed).
+        * before redirecting to this URL, one must use the GoogleOauth trait's
+        * setPostAuthorizationURL() and setRequestedScopes() methods to provide session
+        * parameters (since this link is invoked by google later, and they will not be
+        * providing any of this info).
+        */
+       public function googleLogin() {
+               if (session_status() == PHP_SESSION_NONE) {
+                       session_start ();
+               }
+               
+               // retrieve the scopes out of the session.
+               $scopes = $this->getRequestedScopes();
+               Log::debug('loaded scopes: ' . var_export($scopes, true));
+               
+               // use the scopes in a new google client.
+               $client = $this->createGoogleClient ( $scopes );                
+               
+               // see if we already have the 'code' available from the google side.
+               if (! isset ( $_GET ['code'] )) {
+                       // no code, so we need to jump over to google.
+                       Log::Debug ( 'creating auth url to redirect to google oauth' );
+                       $auth_url = $client->createAuthUrl ();
+                       $this->redirect ( $auth_url );
+               } else {                                                
+                       // we've got our code, so now we can try to fetch our access token.
+                       Log::Debug ( 'access token being actively acquired...' );
+                       $client->fetchAccessTokenWithAuthCode ( $_GET ['code'] );
+                       // clean out the scopes in session now that we're done with them.
+                       $this->dropRequestedScopes();
+                       
+                       // record the new token in our session.
+                       $token = $client->getAccessToken ();
+                       $this->setLastOAuthToken($token);
+                       
+                       // fabulously bad idea to show this...
+                       //Log::debug ( 'got access token: ' . var_export ( $token, true ) );                    
+                                               
+                       // go to the next point in our app where we can handle the newly stored token.
+                       $redirect =  $this->getPostAuthorizationURL();
+                       if (! $redirect) {
+                               // jump home if they registered no continuation.  this is a serious error in flow.
+                               $redirect = 'http://' . $_SERVER ['HTTP_HOST'] . '/';
+                               Log::debug('failure to find the redirection location for our app after successful oauth');
+                       }
+                       $this->redirect ( $redirect );
+               }
+       }
+       
+}
diff --git a/production/example_apps/shared_calendar/src/Controller/ErrorController.php b/production/example_apps/shared_calendar/src/Controller/ErrorController.php
new file mode 100644 (file)
index 0000000..cf0ebd5
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.3.4
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Event\Event;
+
+/**
+ * Error Handling Controller
+ *
+ * Controller used by ExceptionRenderer to render error responses.
+ */
+class ErrorController extends AppController
+{
+    /**
+     * Initialization hook method.
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        $this->loadComponent('RequestHandler');
+    }
+
+    /**
+     * beforeFilter callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeFilter(Event $event)
+    {
+    }
+
+    /**
+     * beforeRender callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeRender(Event $event)
+    {
+        parent::beforeRender($event);
+
+        $this->viewBuilder()->setTemplatePath('Error');
+    }
+
+    /**
+     * afterFilter callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function afterFilter(Event $event)
+    {
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Controller/PagesController.php b/production/example_apps/shared_calendar/src/Controller/PagesController.php
new file mode 100644 (file)
index 0000000..55792c8
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     0.2.9
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Core\Configure;
+use Cake\Network\Exception\ForbiddenException;
+use Cake\Network\Exception\NotFoundException;
+use Cake\View\Exception\MissingTemplateException;
+
+/**
+ * Static content controller
+ *
+ * This controller will render views from Template/Pages/
+ *
+ * @link http://book.cakephp.org/3.0/en/controllers/pages-controller.html
+ */
+class PagesController extends AppController
+{
+
+    /**
+     * Displays a view
+     *
+     * @param string ...$path Path segments.
+     * @return void|\Cake\Network\Response
+     * @throws \Cake\Network\Exception\ForbiddenException When a directory traversal attempt.
+     * @throws \Cake\Network\Exception\NotFoundException When the view file could not
+     *   be found or \Cake\View\Exception\MissingTemplateException in debug mode.
+     */
+    public function display(...$path)
+    {
+        $count = count($path);
+        if (!$count) {
+            return $this->redirect('/');
+        }
+        if (in_array('..', $path, true) || in_array('.', $path, true)) {
+            throw new ForbiddenException();
+        }
+        $page = $subpage = null;
+
+        if (!empty($path[0])) {
+            $page = $path[0];
+        }
+        if (!empty($path[1])) {
+            $subpage = $path[1];
+        }
+        $this->set(compact('page', 'subpage'));
+
+        try {
+            $this->render(implode('/', $path));
+        } catch (MissingTemplateException $e) {
+            if (Configure::read('debug')) {
+                throw $e;
+            }
+            throw new NotFoundException();
+        }
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Controller/UsersController.php b/production/example_apps/shared_calendar/src/Controller/UsersController.php
new file mode 100644 (file)
index 0000000..53a9127
--- /dev/null
@@ -0,0 +1,309 @@
+<?php
+
+namespace App\Controller;
+
+use App\Controller\AppController;
+use Cake\Core\Configure;
+use Cake\Cache\Cache;
+use Cake\Log\Log;
+use DateTime;
+use Google_Service_Calendar;
+use App\Traits\GoogleOauthTrait;
+use App\View\Cell\GoogleCalendarCell;
+
+/**
+ * Users Controller
+ *
+ * @property \App\Model\Table\UsersTable $Users
+ *
+ * @method \App\Model\Entity\User[] paginate($object = null, array $settings = [])
+ */
+class UsersController extends AppController 
+{
+       use GoogleOauthTrait;
+       
+       public function initialize()
+       {
+               parent::initialize();
+               
+               // configure the cache for our class.
+               
+               $prefix = 'av_'. strtolower($this->name) .'-';
+               // av_ prefix so we can delete all files generated in cache/sql/ except for .gitignore
+               
+               $locales = Configure::read('avenger.locales');          
+               if(!empty($locales)) {                  
+                       $prefix .= Configure::read('Config.language') .'-';                     
+               }
+               Log::debug('cache prefix will be: ' . $prefix);
+               
+               // configure a file cache for storing calendar data.
+               Cache::config('calendar_cache', [
+                               'className' => 'File',
+                               'prefix'     => $prefix,
+                               'duration'   => '+2 hours',                     
+               ]);             
+       }
+       
+       /**
+        * Index method
+        *
+        * @return \Cake\Http\Response|void
+        */
+       public function index() {
+               $users = $this->paginate ( $this->Users );
+               
+               $this->set ( compact ( 'users' ) );
+               $this->set ( '_serialize', [ 
+                               'users' 
+               ] );
+       }
+       
+       /**
+        * View method
+        *
+        * @param string|null $id
+        *              User id.
+        * @return \Cake\Http\Response|void
+        * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+        */
+       public function view($id = null) {
+               $user = $this->Users->get ( $id, [ 
+                               'contain' => [ ] 
+               ] );
+               
+               $this->set ( 'user', $user );
+               $this->set ( '_serialize', [ 
+                               'user' 
+               ] );
+       }
+       
+       /**
+        * prepares the google oauth process by stuffing required information into the session.
+        * we'll then redirect over to the authorizer controller to get the work done.
+        */
+       public function requestGoogleOauth($id)
+       {
+               //hmmm: if no id, bail out to error page.
+
+               Log::debug("into requestGoogleOauth...");
+               
+               if (session_status() == PHP_SESSION_NONE) {
+                       session_start ();
+               }
+               
+               // add the post-authorization redirect url for the auth controller.
+               $this->setPostAuthorizationURL('/users/callback/' . $id);
+               // set the scopes that we want to request.
+               $this->setRequestedScopes([Google_Service_Calendar::CALENDAR_READONLY]);
+               
+//             //temp
+//             $urlcheck = $_SESSION[$this->POST_AUTHORIZATION_JUMP()];
+//             Log::debug('callback url found in session: ' . var_export($urlcheck, true));
+//             $scopecheck = $_SESSION[$this->POST_AUTHORIZATION_JUMP()];
+//             Log::debug('scopes found in session: ' . var_export($scopecheck , true));
+               
+               Log::debug("before redirecting from requestGoogleOauth...");
+                               
+               // get the user to authorize us, and subsequently we'll record the access token.
+               $this->redirect ( [
+                               'controller' => 'Authorizer',
+                               'action' => 'googleLogin'
+               ] );
+       }
+       
+       /**
+        * Add method
+        *
+        * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
+        */
+       public function add() {
+               session_start ();
+               
+               $user = $this->Users->newEntity ();
+               if ($this->request->is ( 'post' )) {
+                       $user = $this->Users->patchEntity ( $user, $this->request->getData () );
+                       if ($this->Users->save ( $user )) {
+                               $this->Flash->success ( __ ( 'The user has been saved.' ) );
+                               // now get the oauth mojo working...
+                               $this->requestGoogleOauth($user->id);
+                               return;
+                       }
+                       $this->Flash->error ( __ ( 'The user could not be saved. Please, try again.' ) );
+               }
+               $this->set ( compact ( 'user' ) );
+               $this->set ( '_serialize', [ 
+                               'user' 
+               ] );
+       }
+       
+       /**
+        * a whole bunch of redirection happens when the oauth process starts, but this is our
+        * return point for this application after all that's done.  this is registered as the
+        * post authorization redirection location, and should have a valid access token available
+        * for the specified user.
+        * 
+        * @param unknown $id
+        */
+       public function callback($id) {
+               Log::debug ( 'got to the users controller callback' );
+               
+               $user = $this->Users->get ( $id );
+               
+               // retrieve the access token, which is hopefully totally valid now...
+               $token = $this->getLastOAuthToken ();
+               if ($token) {
+                       $user->token = json_encode ( $token );
+                       $this->Users->save ( $user );
+               }
+               $this->set ( 'user', $user );
+               $this->set ( '_serialize', [ 
+                               'user' 
+               ] );
+       }
+       
+       /**
+        * Edit method
+        *
+        * @param string|null $id
+        *              User id.
+        * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
+        * @throws \Cake\Network\Exception\NotFoundException When record not found.
+        */
+       public function edit($id = null) {
+               $user = $this->Users->get ( $id, [ 
+                               'contain' => [ ] 
+               ] );
+               if ($this->request->is ( [ 
+                               'patch',
+                               'post',
+                               'put' 
+               ] )) {
+                       $user = $this->Users->patchEntity ( $user, $this->request->getData () );
+                       if ($this->Users->save ( $user )) {
+                               $this->Flash->success ( __ ( 'The user has been saved.' ) );
+                               
+                               return $this->redirect ( [ 
+                                               'action' => 'index' 
+                               ] );
+                       }
+                       $this->Flash->error ( __ ( 'The user could not be saved. Please, try again.' ) );
+               }
+               $this->set ( compact ( 'user' ) );
+               $this->set ( '_serialize', [ 
+                               'user' 
+               ] );
+       }
+       
+       /**
+        * Delete method
+        *
+        * @param string|null $id
+        *              User id.
+        * @return \Cake\Http\Response|null Redirects to index.
+        * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+        */
+       public function delete($id = null) {
+               $this->request->allowMethod ( [ 
+                               'post',
+                               'delete' 
+               ] );
+               $user = $this->Users->get ( $id );
+               if ($this->Users->delete ( $user )) {
+                       $this->Flash->success ( __ ( 'The user has been deleted.' ) );
+               } else {
+                       $this->Flash->error ( __ ( 'The user could not be deleted. Please, try again.' ) );
+               }
+               
+               return $this->redirect ( [ 
+                               'action' => 'index' 
+               ] );
+       }
+       
+       /**
+        * shows the upcoming appointments on the calendar.
+        */
+       public function showCalendar($id) {
+               Log::debug ( 'into the show calendar method' );
+               
+               session_start ();
+               
+               $user = $this->Users->get ( $id );
+
+               if (! $user->token) {
+                       // apparently we need to re-acquire this for the user.
+                       // NOTE: in real app, this will be a failure and a place to send email.
+                       $this->requestGoogleOauth($id);
+                       return;
+               }
+               $accessToken = json_decode ( $user->token, true );
+               
+               $client = $this->createGoogleClient( [ 
+                               Google_Service_Calendar::CALENDAR_READONLY 
+               ] );
+               
+               $client->setAccessToken ( $accessToken );
+               
+               // make sure that the token is still valid, and if not, refresh it.
+               $newToken = $this->freshenTokenInClient($client);
+               if ($newToken) {
+                       // save the new token in the db again.
+                       $accessToken = $newToken;
+                       $user->token = json_encode ( $accessToken );
+                       $this->Users->save ( $user );
+               }
+
+               // start from beginning of today.
+               $start = new DateTime();
+               $start->setTime(0, 0);
+               
+               // see if we have a cached calendar available.
+               $cacheKey = 'cal-' . $id . '--' . $start->format('Y-m-d_H-i-s');
+               $calEvents = Cache::read($cacheKey, 'calendar_cache');
+               if ($calEvents) {
+                       Log::debug('found cached events for calendar.');
+               } else {
+                       // an unfortunate kludge below; if we delay calling the google listEvents method,
+                       // we can get an exception that requires reauthorization.  but the view cell has no
+                       // way to get to the controller to start the authorization process again, so we do
+                       // it here instead.
+                       $calEvents = GoogleCalendarCell::prepareCalendar($client, $start);
+                       Log::debug('contacted google to get events for calendar.');
+                       if (! $calEvents) {
+                               // we have lost our authorization somehow.
+                               $this->requestGoogleOauth($id);
+                               return;
+                       }
+                       Cache::write($cacheKey, $calEvents, 'calendar_cache');
+               }
+               $this->set('calEvents', $calEvents);
+               $this->set ( '_serialize', [
+                               'calEvents'
+               ] );
+       }
+       
+       /**
+        * revokes authorization granted by google for current token.
+        */
+       public function revoke($id) {
+               $user = $this->Users->get ( $id );
+               
+               $this->set ( 'user', $user );
+               $this->set ( '_serialize', [ 
+                               'user' 
+               ] );
+               
+               $token = json_decode ( $user->token, true );
+               
+               Log::debug ( 'revoking token: ' . var_export ( $token, true ) );
+
+               $this->revokeToken($token);             
+               Log::debug ( 'after revoking the access token.' );
+               
+               // update with no token.
+               $user->token = null;
+               $this->Users->save ( $user );
+       }
+       
+
+}
diff --git a/production/example_apps/shared_calendar/src/Model/Behavior/empty b/production/example_apps/shared_calendar/src/Model/Behavior/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/shared_calendar/src/Model/Entity/User.php b/production/example_apps/shared_calendar/src/Model/Entity/User.php
new file mode 100644 (file)
index 0000000..316bf70
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+namespace App\Model\Entity;
+
+use Cake\ORM\Entity;
+
+/**
+ * User Entity
+ *
+ * @property int $id
+ * @property string $name
+ * @property string $token
+ * @property \Cake\I18n\FrozenTime $created
+ * @property \Cake\I18n\FrozenTime $modified
+ */
+class User extends Entity
+{
+
+    /**
+     * Fields that can be mass assigned using newEntity() or patchEntity().
+     *
+     * Note that when '*' is set to true, this allows all unspecified fields to
+     * be mass assigned. For security purposes, it is advised to set '*' to false
+     * (or remove it), and explicitly make individual fields accessible as needed.
+     *
+     * @var array
+     */
+    protected $_accessible = [
+        '*' => true,
+        'id' => false
+    ];
+
+    /**
+     * Fields that are excluded from JSON versions of the entity.
+     *
+     * @var array
+     */
+    protected $_hidden = [
+        'token'
+    ];
+}
diff --git a/production/example_apps/shared_calendar/src/Model/Table/UsersTable.php b/production/example_apps/shared_calendar/src/Model/Table/UsersTable.php
new file mode 100644 (file)
index 0000000..8f7040d
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+namespace App\Model\Table;
+
+use Cake\ORM\Query;
+use Cake\ORM\RulesChecker;
+use Cake\ORM\Table;
+use Cake\Validation\Validator;
+
+/**
+ * Users Model
+ *
+ * @method \App\Model\Entity\User get($primaryKey, $options = [])
+ * @method \App\Model\Entity\User newEntity($data = null, array $options = [])
+ * @method \App\Model\Entity\User[] newEntities(array $data, array $options = [])
+ * @method \App\Model\Entity\User|bool save(\Cake\Datasource\EntityInterface $entity, $options = [])
+ * @method \App\Model\Entity\User patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
+ * @method \App\Model\Entity\User[] patchEntities($entities, array $data, array $options = [])
+ * @method \App\Model\Entity\User findOrCreate($search, callable $callback = null, $options = [])
+ *
+ * @mixin \Cake\ORM\Behavior\TimestampBehavior
+ */
+class UsersTable extends Table
+{
+
+    /**
+     * Initialize method
+     *
+     * @param array $config The configuration for the Table.
+     * @return void
+     */
+    public function initialize(array $config)
+    {
+        parent::initialize($config);
+
+        $this->setTable('users');
+        $this->setDisplayField('name');
+        $this->setPrimaryKey('id');
+
+        $this->addBehavior('Timestamp');
+    }
+
+    /**
+     * Default validation rules.
+     *
+     * @param \Cake\Validation\Validator $validator Validator instance.
+     * @return \Cake\Validation\Validator
+     */
+    public function validationDefault(Validator $validator)
+    {
+        $validator
+            ->integer('id')
+            ->allowEmpty('id', 'create');
+
+        $validator
+            ->requirePresence('name', 'create')
+            ->notEmpty('name');
+
+        $validator
+            ->allowEmpty('token');
+
+        return $validator;
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Shell/ConsoleShell.php b/production/example_apps/shared_calendar/src/Shell/ConsoleShell.php
new file mode 100644 (file)
index 0000000..c84bd97
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Shell;
+
+use Cake\Console\ConsoleOptionParser;
+use Cake\Console\Shell;
+use Cake\Log\Log;
+use Psy\Shell as PsyShell;
+
+/**
+ * Simple console wrapper around Psy\Shell.
+ */
+class ConsoleShell extends Shell
+{
+
+    /**
+     * Start the shell and interactive console.
+     *
+     * @return int|null
+     */
+    public function main()
+    {
+        if (!class_exists('Psy\Shell')) {
+            $this->err('<error>Unable to load Psy\Shell.</error>');
+            $this->err('');
+            $this->err('Make sure you have installed psysh as a dependency,');
+            $this->err('and that Psy\Shell is registered in your autoloader.');
+            $this->err('');
+            $this->err('If you are using composer run');
+            $this->err('');
+            $this->err('<info>$ php composer.phar require --dev psy/psysh</info>');
+            $this->err('');
+
+            return self::CODE_ERROR;
+        }
+
+        $this->out("You can exit with <info>`CTRL-C`</info> or <info>`exit`</info>");
+        $this->out('');
+
+        Log::drop('debug');
+        Log::drop('error');
+        $this->_io->setLoggers(false);
+        restore_error_handler();
+        restore_exception_handler();
+
+        $psy = new PsyShell();
+        $psy->run();
+    }
+
+    /**
+     * Display help for this console.
+     *
+     * @return \Cake\Console\ConsoleOptionParser
+     */
+    public function getOptionParser()
+    {
+        $parser = new ConsoleOptionParser('console');
+        $parser->setDescription(
+            'This shell provides a REPL that you can use to interact ' .
+            'with your application in an interactive fashion. You can use ' .
+            'it to run adhoc queries with your models, or experiment ' .
+            'and explore the features of CakePHP and your application.' .
+            "\n\n" .
+            'You will need to have psysh installed for this Shell to work.'
+        );
+
+        return $parser;
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp b/production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp
new file mode 100644 (file)
index 0000000..a7d812f
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @var \App\View\AppView $this
+ * @var \App\Model\Entity\User $user
+ */
+use Cake\Log\Log;
+?>
+<div class="users view large-9 medium-8 columns content">
+       <table class="vertical-table">
+    
+    <?php foreach ($calEvents as $day => $events): ?>
+    <tr>
+               <th scope="row"><?= __(h($day)) ?></th>
+               <td>
+                       <table>
+                       <?php foreach ( $events as $appt ) : ?>
+                          <tr>
+                                       <td><?= h($appt['info'] . ' at ' . $appt['start']); ?></td>
+                                       <!--  <td><?= h('full dump: ' . var_export($appt['event'], true)); ?> -->
+                               </tr>
+                           <?php endforeach; ?>
+                       </table>
+               </td>
+       </tr>
+    <?php endforeach; ?>
+       </table>
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp
new file mode 100644 (file)
index 0000000..736b27d
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$class = 'message';
+if (!empty($params['class'])) {
+    $class .= ' ' . $params['class'];
+}
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="<?= h($class) ?>" onclick="this.classList.add('hidden');"><?= $message ?></div>
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp
new file mode 100644 (file)
index 0000000..e7c4af1
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="message error" onclick="this.classList.add('hidden');"><?= $message ?></div>
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp
new file mode 100644 (file)
index 0000000..becd5a1
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="message success" onclick="this.classList.add('hidden')"><?= $message ?></div>
diff --git a/production/example_apps/shared_calendar/src/Template/Email/html/default.ctp b/production/example_apps/shared_calendar/src/Template/Email/html/default.ctp
new file mode 100644 (file)
index 0000000..386674a
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?php
+$content = explode("\n", $content);
+
+foreach ($content as $line):
+    echo '<p> ' . $line . "</p>\n";
+endforeach;
+?>
diff --git a/production/example_apps/shared_calendar/src/Template/Email/text/default.ctp b/production/example_apps/shared_calendar/src/Template/Email/text/default.ctp
new file mode 100644 (file)
index 0000000..704b46f
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $content ?>
diff --git a/production/example_apps/shared_calendar/src/Template/Error/error400.ctp b/production/example_apps/shared_calendar/src/Template/Error/error400.ctp
new file mode 100644 (file)
index 0000000..2aebac6
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+use Cake\Core\Configure;
+use Cake\Error\Debugger;
+
+$this->layout = 'error';
+
+if (Configure::read('debug')):
+    $this->layout = 'dev_error';
+
+    $this->assign('title', $message);
+    $this->assign('templateName', 'error400.ctp');
+
+    $this->start('file');
+?>
+<?php if (!empty($error->queryString)) : ?>
+    <p class="notice">
+        <strong>SQL Query: </strong>
+        <?= h($error->queryString) ?>
+    </p>
+<?php endif; ?>
+<?php if (!empty($error->params)) : ?>
+        <strong>SQL Query Params: </strong>
+        <?php Debugger::dump($error->params) ?>
+<?php endif; ?>
+<?= $this->element('auto_table_warning') ?>
+<?php
+    if (extension_loaded('xdebug')):
+        xdebug_print_function_stack();
+    endif;
+
+    $this->end();
+endif;
+?>
+<h2><?= h($message) ?></h2>
+<p class="error">
+    <strong><?= __d('cake', 'Error') ?>: </strong>
+    <?= __d('cake', 'The requested address {0} was not found on this server.', "<strong>'{$url}'</strong>") ?>
+</p>
diff --git a/production/example_apps/shared_calendar/src/Template/Error/error500.ctp b/production/example_apps/shared_calendar/src/Template/Error/error500.ctp
new file mode 100644 (file)
index 0000000..d8014f8
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+use Cake\Core\Configure;
+use Cake\Error\Debugger;
+
+$this->layout = 'error';
+
+if (Configure::read('debug')):
+    $this->layout = 'dev_error';
+
+    $this->assign('title', $message);
+    $this->assign('templateName', 'error500.ctp');
+
+    $this->start('file');
+?>
+<?php if (!empty($error->queryString)) : ?>
+    <p class="notice">
+        <strong>SQL Query: </strong>
+        <?= h($error->queryString) ?>
+    </p>
+<?php endif; ?>
+<?php if (!empty($error->params)) : ?>
+        <strong>SQL Query Params: </strong>
+        <?php Debugger::dump($error->params) ?>
+<?php endif; ?>
+<?php if ($error instanceof Error) : ?>
+        <strong>Error in: </strong>
+        <?= sprintf('%s, line %s', str_replace(ROOT, 'ROOT', $error->getFile()), $error->getLine()) ?>
+<?php endif; ?>
+<?php
+    echo $this->element('auto_table_warning');
+
+    if (extension_loaded('xdebug')):
+        xdebug_print_function_stack();
+    endif;
+
+    $this->end();
+endif;
+?>
+<h2><?= __d('cake', 'An Internal Error Has Occurred') ?></h2>
+<p class="error">
+    <strong><?= __d('cake', 'Error') ?>: </strong>
+    <?= h($message) ?>
+</p>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp
new file mode 100644 (file)
index 0000000..2b43970
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html>
+<head>
+    <title><?= $this->fetch('title') ?></title>
+</head>
+<body>
+    <?= $this->fetch('content') ?>
+</body>
+</html>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp
new file mode 100644 (file)
index 0000000..871dcfb
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $this->fetch('content') ?>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp b/production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp
new file mode 100644 (file)
index 0000000..871dcfb
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $this->fetch('content') ?>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/default.ctp
new file mode 100644 (file)
index 0000000..8988302
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+$cakeDescription = 'CakePHP: the rapid development php framework';
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>
+        <?= $cakeDescription ?>:
+        <?= $this->fetch('title') ?>
+    </title>
+    <?= $this->Html->meta('icon') ?>
+
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+
+    <?= $this->fetch('meta') ?>
+    <?= $this->fetch('css') ?>
+    <?= $this->fetch('script') ?>
+</head>
+<body>
+    <nav class="top-bar expanded" data-topbar role="navigation">
+        <ul class="title-area large-3 medium-4 columns">
+            <li class="name">
+                <h1><a href=""><?= $this->fetch('title') ?></a></h1>
+            </li>
+        </ul>
+        <div class="top-bar-section">
+            <ul class="right">
+                <li><a target="_blank" href="http://book.cakephp.org/3.0/">Documentation</a></li>
+                <li><a target="_blank" href="http://api.cakephp.org/3.0/">API</a></li>
+            </ul>
+        </div>
+    </nav>
+    <?= $this->Flash->render() ?>
+    <div class="container clearfix">
+        <?= $this->fetch('content') ?>
+    </div>
+    <footer>
+    </footer>
+</body>
+</html>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/error.ctp b/production/example_apps/shared_calendar/src/Template/Layout/error.ctp
new file mode 100644 (file)
index 0000000..5304ec4
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <title>
+        <?= $this->fetch('title') ?>
+    </title>
+    <?= $this->Html->meta('icon') ?>
+
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+
+    <?= $this->fetch('meta') ?>
+    <?= $this->fetch('css') ?>
+    <?= $this->fetch('script') ?>
+</head>
+<body>
+    <div id="container">
+        <div id="header">
+            <h1><?= __('Error') ?></h1>
+        </div>
+        <div id="content">
+            <?= $this->Flash->render() ?>
+
+            <?= $this->fetch('content') ?>
+        </div>
+        <div id="footer">
+            <?= $this->Html->link(__('Back'), 'javascript:history.back()') ?>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp
new file mode 100644 (file)
index 0000000..5c15a19
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+if (!isset($channel)):
+    $channel = [];
+endif;
+if (!isset($channel['title'])):
+    $channel['title'] = $this->fetch('title');
+endif;
+
+echo $this->Rss->document(
+    $this->Rss->channel(
+        [], $channel, $this->fetch('content')
+    )
+);
+?>
diff --git a/production/example_apps/shared_calendar/src/Template/Pages/home.ctp b/production/example_apps/shared_calendar/src/Template/Pages/home.ctp
new file mode 100644 (file)
index 0000000..2bb441a
--- /dev/null
@@ -0,0 +1,342 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+use Cake\Cache\Cache;
+use Cake\Core\Configure;
+use Cake\Core\Plugin;
+use Cake\Datasource\ConnectionManager;
+use Cake\Error\Debugger;
+use Cake\Network\Exception\NotFoundException;
+
+$this->layout = false;
+
+if (! Configure::read ( 'debug' )) :
+       throw new NotFoundException ( 'Please replace src/Template/Pages/home.ctp with your own version.' );
+endif;
+
+$cakeDescription = 'CakePHP: the rapid development PHP framework';
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <meta name="viewport"
+       content="width=device-width, initial-scale=1.0">
+<title>
+        <?= $cakeDescription ?>
+    </title>
+
+    <?= $this->Html->meta('icon') ?>
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+    <?= $this->Html->css('home.css') ?>
+    <link
+       href="https://fonts.googleapis.com/css?family=Raleway:500i|Roboto:300,400,700|Roboto+Mono"
+       rel="stylesheet">
+</head>
+<body class="home">
+
+
+
+       <header class="row">
+               <div class="header-image"><?= $this->Html->image('cake.logo.svg') ?></div>
+               <div class="header-title">
+                       <h1>Welcome to CakePHP <?= Configure::version() ?> Red Velvet. Build fast. Grow solid.</h1>
+               </div>
+       </header>
+
+       <div class="fredmenu">
+               <ul>
+
+                       <li>Stored Authorizations <a href="/users">OAuth Users</a>
+                       </li>
+               </ul>
+       </div>
+
+
+
+       <div class="row">
+               <div class="columns large-12">
+                       <div class="ctp-warning alert text-center">
+                               <p>Please be aware that this page will not be shown if you turn off
+                                       debug mode unless you replace src/Template/Pages/home.ctp with your
+                                       own version.</p>
+                       </div>
+                       <div id="url-rewriting-warning" class="alert url-rewriting">
+                               <ul>
+                                       <li class="bullet problem">URL rewriting is not properly configured
+                                               on your server.<br /> 1) <a target="_blank"
+                                               href="http://book.cakephp.org/3.0/en/installation.html#url-rewriting">Help
+                                                       me configure it</a><br /> 2) <a target="_blank"
+                                               href="http://book.cakephp.org/3.0/en/development/configuration.html#general-configuration">I
+                                                       don't / can't use URL rewriting</a>
+                                       </li>
+                               </ul>
+                       </div>
+        <?php Debugger::checkSecurityKeys(); ?>
+    </div>
+       </div>
+
+       <div class="row">
+               <div class="columns large-6">
+                       <h4>Environment</h4>
+                       <ul>
+        <?php if (version_compare(PHP_VERSION, '5.6.0', '>=')): ?>
+            <li class="bullet success">Your version of PHP is 5.6.0 or higher (detected <?= PHP_VERSION ?>).</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected <?= PHP_VERSION ?>).</li>
+        <?php endif; ?>
+
+        <?php if (extension_loaded('mbstring')): ?>
+            <li class="bullet success">Your version of PHP has the
+                                       mbstring extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have
+                                       the mbstring extension loaded.</li>;
+        <?php endif; ?>
+
+        <?php if (extension_loaded('openssl')): ?>
+            <li class="bullet success">Your version of PHP has the
+                                       openssl extension loaded.</li>
+        <?php elseif (extension_loaded('mcrypt')): ?>
+            <li class="bullet success">Your version of PHP has the
+                                       mcrypt extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have
+                                       the openssl or mcrypt extension loaded.</li>
+        <?php endif; ?>
+
+        <?php if (extension_loaded('intl')): ?>
+            <li class="bullet success">Your version of PHP has the intl
+                                       extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have
+                                       the intl extension loaded.</li>
+        <?php endif; ?>
+        </ul>
+               </div>
+               <div class="columns large-6">
+                       <h4>Filesystem</h4>
+                       <ul>
+        <?php if (is_writable(TMP)): ?>
+            <li class="bullet success">Your tmp directory is writable.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your tmp directory is NOT
+                                       writable.</li>
+        <?php endif; ?>
+
+        <?php if (is_writable(LOGS)): ?>
+            <li class="bullet success">Your logs directory is writable.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your logs directory is NOT
+                                       writable.</li>
+        <?php endif; ?>
+
+        <?php $settings = Cache::config('_cake_core_'); ?>
+        <?php if (!empty($settings)): ?>
+            <li class="bullet success">The <em><?= $settings['className'] ?>Engine</em>
+                                       is being used for core caching. To change the config edit
+                                       config/app.php
+                               </li>
+        <?php else: ?>
+            <li class="bullet problem">Your cache is NOT working. Please
+                                       check the settings in config/app.php</li>
+        <?php endif; ?>
+        </ul>
+               </div>
+               <hr />
+       </div>
+
+       <div class="row">
+               <div class="columns large-6">
+                       <h4>Database</h4>
+        <?php
+                                                               try {
+                                                                       $connection = ConnectionManager::get ( 'default' );
+                                                                       $connected = $connection->connect ();
+                                                               } catch ( Exception $connectionError ) {
+                                                                       $connected = false;
+                                                                       $errorMsg = $connectionError->getMessage ();
+                                                                       if (method_exists ( $connectionError, 'getAttributes' )) :
+                                                                               $attributes = $connectionError->getAttributes ();
+                                                                               if (isset ( $errorMsg ['message'] )) :
+                                                                                       $errorMsg .= '<br />' . $attributes ['message'];
+                endif;
+            endif;
+                                                                               
+                                                                       
+                                                               }
+                                                               ?>
+        <ul>
+        <?php if ($connected): ?>
+            <li class="bullet success">CakePHP is able to connect to the
+                                       database.</li>
+        <?php else: ?>
+            <li class="bullet problem">CakePHP is NOT able to connect to
+                                       the database.<br /><?= $errorMsg ?></li>
+        <?php endif; ?>
+        </ul>
+               </div>
+               <div class="columns large-6">
+                       <h4>DebugKit</h4>
+                       <ul>
+        <?php if (Plugin::loaded('DebugKit')): ?>
+            <li class="bullet success">DebugKit is loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">DebugKit is NOT loaded. You need
+                                       to either install pdo_sqlite, or define the "debug_kit" connection
+                                       name.</li>
+        <?php endif; ?>
+        </ul>
+               </div>
+               <hr />
+       </div>
+
+       <div class="row">
+               <div class="columns large-6">
+                       <h3>Editing this Page</h3>
+                       <ul>
+                               <li class="bullet cutlery">To change the content of this page, edit:
+                                       src/Template/Pages/home.ctp.</li>
+                               <li class="bullet cutlery">You can also add some CSS styles for your
+                                       pages at: webroot/css/.</li>
+                       </ul>
+               </div>
+               <div class="columns large-6">
+                       <h3>Getting Started</h3>
+                       <ul>
+                               <li class="bullet book"><a target="_blank"
+                                       href="http://book.cakephp.org/3.0/en/">CakePHP 3.0 Docs</a></li>
+                               <li class="bullet book"><a target="_blank"
+                                       href="http://book.cakephp.org/3.0/en/tutorials-and-examples/bookmarks/intro.html">The
+                                               15 min Bookmarker Tutorial</a></li>
+                               <li class="bullet book"><a target="_blank"
+                                       href="http://book.cakephp.org/3.0/en/tutorials-and-examples/blog/blog.html">The
+                                               15 min Blog Tutorial</a></li>
+                       </ul>
+                       <p>
+               
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="columns large-12 text-center">
+                       <h3 class="more">More about Cake</h3>
+                       <p>
+                               CakePHP is a rapid development framework for PHP which uses commonly
+                               known design patterns like Front Controller and MVC.<br /> Our
+                               primary goal is to provide a structured framework that enables PHP
+                               users at all levels to rapidly develop robust web applications,
+                               without any loss to flexibility.
+                       </p>
+               </div>
+               <hr />
+       </div>
+
+       <div class="row">
+               <div class="columns large-4">
+                       <i class="icon support">P</i>
+                       <h3>Help and Bug Reports</h3>
+                       <ul>
+                               <li class="bullet cutlery"><a href="irc://irc.freenode.net/cakephp">irc.freenode.net
+                                               #cakephp</a>
+                                       <ul>
+                                               <li>Live chat about CakePHP</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a
+                                       href="https://github.com/cakephp/cakephp/issues">CakePHP Issues</a>
+                                       <ul>
+                                               <li>CakePHP issues and pull requests</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://discourse.cakephp.org/">CakePHP
+                                               Forum</a>
+                                       <ul>
+                                               <li>CakePHP official discussion forum</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a
+                                       href="https://groups.google.com/group/cake-php">CakePHP Google
+                                               Group</a>
+                                       <ul>
+                                               <li>Community mailing list</li>
+                                       </ul></li>
+                       </ul>
+               </div>
+               <div class="columns large-4">
+                       <i class="icon docs">r</i>
+                       <h3>Docs and Downloads</h3>
+                       <ul>
+                               <li class="bullet cutlery"><a href="http://api.cakephp.org/3.0/">CakePHP
+                                               API</a>
+                                       <ul>
+                                               <li>Quick Reference</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://book.cakephp.org/3.0/en/">CakePHP
+                                               Documentation</a>
+                                       <ul>
+                                               <li>Your Rapid Development Cookbook</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://bakery.cakephp.org">The
+                                               Bakery</a>
+                                       <ul>
+                                               <li>Everything CakePHP</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://plugins.cakephp.org">CakePHP
+                                               plugins repo</a>
+                                       <ul>
+                                               <li>A comprehensive list of all CakePHP plugins created by the
+                                                       community</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="https://github.com/cakephp/">CakePHP
+                                               Code</a>
+                                       <ul>
+                                               <li>For the Development of CakePHP Git repository, Downloads</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a
+                                       href="https://github.com/FriendsOfCake/awesome-cakephp">CakePHP
+                                               Awesome List</a>
+                                       <ul>
+                                               <li>A curated list of amazingly awesome CakePHP plugins, resources
+                                                       and shiny things.</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://www.cakephp.org">CakePHP</a>
+                                       <ul>
+                                               <li>The Rapid Development Framework</li>
+                                       </ul></li>
+                       </ul>
+               </div>
+               <div class="columns large-4">
+                       <i class="icon training">s</i>
+                       <h3>Training and Certification</h3>
+                       <ul>
+                               <li class="bullet cutlery"><a href="http://cakefoundation.org/">Cake
+                                               Software Foundation</a>
+                                       <ul>
+                                               <li>Promoting development related to CakePHP</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a href="http://training.cakephp.org/">CakePHP
+                                               Training</a>
+                                       <ul>
+                                               <li>Learn to use the CakePHP framework</li>
+                                       </ul></li>
+                               <li class="bullet cutlery"><a
+                                       href="http://certification.cakephp.org/">CakePHP Certification</a>
+                                       <ul>
+                                               <li>Become a certified CakePHP developer</li>
+                                       </ul></li>
+                       </ul>
+               </div>
+       </div>
+
+</body>
+</html>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/add.ctp b/production/example_apps/shared_calendar/src/Template/Users/add.ctp
new file mode 100644 (file)
index 0000000..1b7e207
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="users form large-9 medium-8 columns content">
+    <?= $this->Form->create($user) ?>
+    <fieldset>
+        <legend><?= __('Add User') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+//            echo $this->Form->control('token');
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/callback.ctp b/production/example_apps/shared_calendar/src/Template/Users/callback.ctp
new file mode 100644 (file)
index 0000000..23506e4
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  * @var \App\Model\Entity\User $user
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?> </li>
+    </ul>
+</nav>
+<div class="users view large-9 medium-8 columns content">
+    <h3>
+    <?= h($user->token? 'Authorization successful for ' . $user->name 
+               : 'Failed authorization for ' . $user->name ) ?>
+    </h3>
+</div>
+
+
diff --git a/production/example_apps/shared_calendar/src/Template/Users/edit.ctp b/production/example_apps/shared_calendar/src/Template/Users/edit.ctp
new file mode 100644 (file)
index 0000000..880cde8
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Form->postLink(
+                __('Delete'),
+                ['action' => 'delete', $user->id],
+                ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]
+            )
+        ?></li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="users form large-9 medium-8 columns content">
+    <?= $this->Form->create($user) ?>
+    <fieldset>
+        <legend><?= __('Edit User') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+            echo $this->Form->control('token');
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/index.ctp b/production/example_apps/shared_calendar/src/Template/Users/index.ctp
new file mode 100644 (file)
index 0000000..953e2ad
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  * @var \App\Model\Entity\User[]|\Cake\Collection\CollectionInterface $users
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('New User'), ['action' => 'add']) ?></li>
+    </ul>
+</nav>
+<div class="users index large-9 medium-8 columns content">
+    <h3><?= __('Users') ?></h3>
+    <table cellpadding="0" cellspacing="0">
+        <thead>
+            <tr>
+                <th scope="col"><?= $this->Paginator->sort('id') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('name') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('token') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('created') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('modified') ?></th>
+                <th scope="col" class="actions"><?= __('Actions') ?></th>
+            </tr>
+        </thead>
+        <tbody>
+            <?php foreach ($users as $user): ?>
+            <tr>
+                <td><?= $this->Number->format($user->id) ?></td>
+                <td><?= h($user->name) ?></td>
+                <td><?= h($user->token) ?></td>
+                <td><?= h($user->created) ?></td>
+                <td><?= h($user->modified) ?></td>
+                <td class="actions">
+                    <?= $this->Html->link(__('Calendar'), ['action' => 'showCalendar', $user->id]) ?>
+                                       <?= $this->Html->link(__('View'), ['action' => 'view', $user->id]) ?>                     
+<!--                      <?= $this->Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> -->
+                    <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?>
+                    <?= $this->Html->link(__('Revoke'), ['action' => 'revoke', $user->id], ['confirm' => __('Are you *SURE* you want to revoke authorization # {0}?  This will totally drop that authorization, which you cannot re-add unless you are the original user that stored it.', $user->id)]) ?>
+                </td>
+            </tr>
+            <?php endforeach; ?>
+        </tbody>
+    </table>
+    <div class="paginator">
+        <ul class="pagination">
+            <?= $this->Paginator->first('<< ' . __('first')) ?>
+            <?= $this->Paginator->prev('< ' . __('previous')) ?>
+            <?= $this->Paginator->numbers() ?>
+            <?= $this->Paginator->next(__('next') . ' >') ?>
+            <?= $this->Paginator->last(__('last') . ' >>') ?>
+        </ul>
+        <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
+    </div>
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/revoke.ctp b/production/example_apps/shared_calendar/src/Template/Users/revoke.ctp
new file mode 100644 (file)
index 0000000..57d2e8a
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  * @var \App\Model\Entity\User $user
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?> </li>
+    </ul>
+</nav>
+<div class="users view large-9 medium-8 columns content">
+    <h3><?= h('Revoked authorization for ' . $user->name) ?></h3>
+
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp b/production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp
new file mode 100644 (file)
index 0000000..9a60d98
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  * @var \App\Model\Entity\User $user
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?> </li>
+    </ul>
+</nav>
+<div class="users view large-9 medium-8 columns content">
+    <h3>upcoming appointments</h3>
+
+       <?php
+               $cell = $this->cell('GoogleCalendar', [$calEvents]);
+       ?>
+       <?= $cell ?>
+    
+</div>
diff --git a/production/example_apps/shared_calendar/src/Template/Users/view.ctp b/production/example_apps/shared_calendar/src/Template/Users/view.ctp
new file mode 100644 (file)
index 0000000..cdfc708
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  * @var \App\Model\Entity\User $user
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+<!--        <li><?= $this->Html->link(__('Edit User'), ['action' => 'edit', $user->id]) ?> </li> -->
+        <li><?= $this->Form->postLink(__('Delete User'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> </li>
+        <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?> </li>
+        <li><?= $this->Html->link(__('New User'), ['action' => 'add']) ?> </li>
+    </ul>
+</nav>
+<div class="users view large-9 medium-8 columns content">
+    <h3><?= h($user->name) ?></h3>
+    <table class="vertical-table">
+        <tr>
+            <th scope="row"><?= __('Name') ?></th>
+            <td><?= h($user->name) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Token') ?></th>
+            <td><?= h($user->token) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Id') ?></th>
+            <td><?= $this->Number->format($user->id) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Created') ?></th>
+            <td><?= h($user->created) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Modified') ?></th>
+            <td><?= h($user->modified) ?></td>
+        </tr>
+    </table>
+</div>
diff --git a/production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php b/production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php
new file mode 100644 (file)
index 0000000..847a2ae
--- /dev/null
@@ -0,0 +1,230 @@
+<?php
+namespace App\Traits;
+
+use Cake\Log\Log;
+use Google_Client;
+
+/**
+ * A trait that provides google oauth authorization helper methods. 
+ */
+trait GoogleOauthTrait
+{
+    // constants used for items stored in the session.
+    public function POST_AUTHORIZATION_JUMP() { return 'postAuthJump'; }
+    public function STORED_OAUTH_TOKEN() { return 'lastOauthToken'; }
+    public function OAUTH_SCOPES_REQUESTED() { return 'oauthScopes'; }
+    
+    /**
+     * sets the next place in our app to go after authorization.  the url needs to be a link
+     * which can consume the access token after it's available (from getLastOauthToken() below).
+     */
+    public function setPostAuthorizationURL($url)
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for set post auth url');
+               session_start();
+       }
+       $_SESSION [$this->POST_AUTHORIZATION_JUMP()] = $url;
+    }
+    
+    /**
+     * retrieves any post authorization url that was registered.
+     * this destroys the item in the session also, so it is available for a single use.
+     */
+    public function getPostAuthorizationURL()
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for get post auth url');
+               session_start();
+       }
+       if (isset ( $_SESSION [$this->POST_AUTHORIZATION_JUMP()] ) && $_SESSION [$this->POST_AUTHORIZATION_JUMP()]) {
+               $url = $_SESSION [$this->POST_AUTHORIZATION_JUMP()];
+               Log::debug('loaded url for post auth as: ' . $url);
+               unset($_SESSION[$this->POST_AUTHORIZATION_JUMP()]);
+               return $url;
+       } else {
+               Log::debug('could not find post authorization url in session!');
+               
+               return null;
+       }
+    }
+
+    /**
+     * before we can request oauth authorization, we need to know the scopes that will be used
+     * by our application.  this allows them to be set in the session, where scopes should be an
+     * array of valid scope names (defined by the google oauth API).
+     */
+    public function setRequestedScopes($scopes)
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for set req scopes');
+               session_start();
+       }
+       $_SESSION [$this->OAUTH_SCOPES_REQUESTED()] = $scopes;
+    }
+    
+    /**
+     * gets the array of scopes out of the session for use by the next oauth call.
+     * this will NOT destroy the scopes; that must be done manually with dropRequestedScopes
+     * below, since we need this session item multiple times.
+     */
+    public function getRequestedScopes()
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for get req scopes');              
+               session_start();
+       }
+       if (isset ( $_SESSION [$this->OAUTH_SCOPES_REQUESTED()] ) && $_SESSION [$this->OAUTH_SCOPES_REQUESTED()]) {
+               $scopes = $_SESSION [$this->OAUTH_SCOPES_REQUESTED()];
+               return $scopes;
+       } else {
+               return null;
+       }
+    }
+    
+    /**
+     * throws the requested scopes out of the session.
+     */
+    public function dropRequestedScopes()
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for drop req scopes');
+               session_start();
+       }
+       unset($_SESSION[$this->OAUTH_SCOPES_REQUESTED()]);
+    }
+    
+    
+    /**
+     * saves the result of oauth authorization, an access token, into the session.
+     */
+    public function setLastOAuthToken($token)
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for set last oauth token');                
+               session_start();
+       }
+       $_SESSION [$this->STORED_OAUTH_TOKEN()] = $token;
+    }
+    
+    /**
+     * retrieves the last stored oauth token.  this destroys the item in the session
+     * afterwards, so you get one chance for retrieval of the token.
+     */
+    public function getLastOAuthToken()
+    {
+       if (session_status() == PHP_SESSION_NONE) {
+               Log::debug('starting session for set last oauth token');                
+               session_start();
+       }
+       if (isset ( $_SESSION [$this->STORED_OAUTH_TOKEN()] ) && $_SESSION [$this->STORED_OAUTH_TOKEN()]) {
+               $token = $_SESSION [$this->STORED_OAUTH_TOKEN()];
+               unset($_SESSION[$this->STORED_OAUTH_TOKEN()]);
+               return $token;
+       } else {
+               return null;
+       }
+    }
+    
+    /**
+     * sets up and configures the Google client object using a 'client_secret.json' file
+     * stored in the config directory.  A scope name or an array of scopes should be passed
+     * in the "scopes" parameter.  if the "redirectUri" parameter is not null, then this is set
+     * as the singular redirection URI (which is needed if the client secret has several redirect
+     * URIs listed).
+     */
+    public function createGoogleClient($scopes, $redirectUri = null) {
+       $client = new Google_Client ();
+       
+       // see https://developers.google.com/api-client-library/php/auth/web-app for info on creating the secret.
+       $client->setAuthConfig ( 'config/client_secret.json' );
+       
+       // use the redirect link if they gave us one.
+       if ($redirectUri) {
+               $client->setRedirectUri ( $redirectUri );
+       }
+       
+       // register for offline access, so we don't need user to be logged in.
+       $client->setAccessType ( "offline" );
+       // enable incremental authorization.
+       $client->setIncludeGrantedScopes ( true );
+       
+       // add the scope(s) we're interested in here.
+       $client->addScope ( $scopes );
+       
+       return $client;
+    }
+    
+    /**
+     * *deprecated* creates a google client configured by discrete parameters.
+     *
+     * note: does not free one to use just any redirect url for login; that's set at credential creation time.
+     */
+    public function createGoogleClientUsingParameters($clientId, $clientSecret, $applicationName, $redirectUri, $scopes) {
+       $client = new Google_Client ();
+       
+       // see https://developers.google.com/api-client-library/php/auth/web-app for info on creating the secret.
+       $client->setClientId ( $clientId );
+       $client->setClientSecret ( $clientSecret );
+       $client->setApplicationName ( $applicationName );
+       $client->setRedirectUri ( $redirectUri );
+       
+       // register for offline access, so we don't need user to be logged in.
+       $client->setAccessType ( "offline" );
+       // enable incremental authorization.
+       $client->setIncludeGrantedScopes ( true );
+       
+       // add the scope we're interested in here.
+       $client->addScope ( $scopes);
+       
+       return $client;
+    }
+    
+    /**
+     * checks whether the google client object's token is still valid.  if not, the token is refreshed.
+     * this will only work with tokens that were originally requested for offline access and that possess
+     * the refresh token.
+     * if the refresh was done, the newly revitalized token is returned and must be stored.
+     * if the token is already okay, then null is returned (which avoids tricky comparisons to
+     * determine if an update happened).
+     */
+    public function freshenTokenInClient($client) 
+    {
+       if (! $client->isAccessTokenExpired ()) {
+               // no refresh needed.
+               return null;
+       }
+       // currently assuming the new access token also contains the old refresh token.
+       // this has been borne out by results from google.
+       Log::debug ( 'noticed that the access token has expired!' );
+       
+       // retrieve a new access token using our refresh token.
+       $refresher = $client->getRefreshToken ();
+       $client->fetchAccessTokenWithRefreshToken ( $refresher );
+       $accessToken = $client->getAccessToken ();
+       
+       //bad! do not show this in real app.
+       //Log::debug ( 'got a new access token after refresh: ' . var_export ( $accessToken, true ) );
+       
+       // return the new and tasty token.
+       return $accessToken;
+    }
+    
+    /**
+     * throws out the specified access token, which means that the app will have to reauthorize
+     * to get another token.
+     */
+    public function revokeToken($token)
+    {
+       $client = new Google_Client ();
+       // apparently the client needs very little setup to perform this if we have the whole token?
+       $client->revokeToken ( $token );
+    }
+}
+
+/*
+ * hmmm: still need a method for doing additive authorizations, where we request new scopes and
+ * have them bundled onto our existing access token.  would need to store the token afterwards also.
+ */
+
+
diff --git a/production/example_apps/shared_calendar/src/View/AjaxView.php b/production/example_apps/shared_calendar/src/View/AjaxView.php
new file mode 100644 (file)
index 0000000..594e2d8
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.4
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\View;
+
+use Cake\Event\EventManager;
+use Cake\Network\Request;
+use Cake\Network\Response;
+
+/**
+ * A view class that is used for AJAX responses.
+ * Currently only switches the default layout and sets the response type -
+ * which just maps to text/html by default.
+ */
+class AjaxView extends AppView
+{
+
+    /**
+     * The name of the layout file to render the view inside of. The name
+     * specified is the filename of the layout in /src/Template/Layout without
+     * the .ctp extension.
+     *
+     * @var string
+     */
+    public $layout = 'ajax';
+
+    /**
+     * Initialization hook method.
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        parent::initialize();
+
+        $this->response->type('ajax');
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/View/AppView.php b/production/example_apps/shared_calendar/src/View/AppView.php
new file mode 100644 (file)
index 0000000..fd52ba6
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\View;
+
+use Cake\View\View;
+
+/**
+ * Application View
+ *
+ * Your application’s default view class
+ *
+ * @link http://book.cakephp.org/3.0/en/views.html#the-app-view
+ */
+class AppView extends View
+{
+
+    /**
+     * Initialization hook method.
+     *
+     * Use this method to add common initialization code like loading helpers.
+     *
+     * e.g. `$this->loadHelper('Html');`
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php b/production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php
new file mode 100644 (file)
index 0000000..b1ccf47
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+namespace App\View\Cell;
+
+use Cake\View\Cell;
+use Cake\Log\Log;
+use DateTime;
+use Google_Service_Calendar;
+
+
+/**
+ * GoogleCalendar cell
+ */
+class GoogleCalendarCell extends Cell
+{
+
+    /**
+     * List of valid options that can be passed into this
+     * cell's constructor.
+     *
+     * @var array
+     */
+    protected $_validCellOptions = [];
+
+    /*
+     * returns an array of calendar events based on the google client and
+     * the range between the start and end times.
+     * 
+     * if the access token has died or suffered some unfortunate accident, then
+     * null is returned and authorization must be reattempted.
+     */
+    public static function prepareCalendar($client, $startTime = null, $endTime = null)
+    {          
+       $cal = new Google_Service_Calendar ( $client );
+       Log::debug ( 'created google calendar object' );
+       
+       $calendarId = 'primary';
+       
+       if (! $startTime) {
+               // default is to start with today, but not with a time.
+               $startTime = new DateTime();
+               $startTime->setTime(0, 0);
+       }
+       
+       if (! $endTime ) {
+               $endTime = new DateTime($startTime->format('c'));
+               $endTime->modify ( "+31 day" ); // month from now (ish).
+       }
+       
+       Log::debug ( 'start: ' . $startTime->format ( 'c' )  . ' end: ' . $endTime->format('c'));
+               
+       $optParams = array (
+                       // 'maxResults' => 100,
+                       'orderBy' => 'startTime',
+                       'singleEvents' => TRUE,
+                       'timeMin' => $startTime->format('c'),
+                       'timeMax' => $endTime->format ( 'c' )
+       );
+       
+       try {
+               $results = $cal->events->listEvents ( $calendarId, $optParams );
+       } catch (\Exception $e) {
+               Log::debug('caught an exception from listing events!');
+               return null;
+       }
+       
+       Log::debug ( 'after listEvents call.' );
+       
+       // the calEvents array will be an associative array where the keys are the
+       // dates that events start.  the value stored for each key is in turn an associative array of
+       // good stuff about the event.  the good stuff includes 'info', for the appointment description,
+       // 'start' for the starting date (plus time perhaps), and 'event' for the raw google event
+       // contents.
+       $calEvents = [ ];
+       
+       if (count ( $results->getItems () ) == 0) {
+               // nothing to add to array.
+       } else {
+               foreach ( $results->getItems () as $event ) {
+                       $info = $event->getSummary ();
+                       
+                       $start = $event->start->dateTime;
+                       if (empty ( $start )) {
+                               // simple index by date.
+                               $index = $event->start->date;
+                               $start = 'All Day';  // our time mutates.
+                       } else {
+                               // make the index from just the date portion.
+                               $bits = str_split($start, strpos($start, 'T'));
+                               $index = $bits[0];
+                               
+                               // clean up the time portion for presentation.
+                               $date = new DateTime($start);
+                               $start = $date->format('H:i:s');
+                               
+                               //Log::debug('chopped time of start is: ' . $start);
+                       }
+                       
+                       $existing_entry = [];
+                       if (array_key_exists($index, $calEvents)) {
+                               $existing_entry = $calEvents[$index];
+                       }
+                       
+                       array_push ( $existing_entry, [
+                                       'info' => $info,
+                                       'start' => $start,
+                                       'event' => $event,
+                       ] );
+                       
+                       $calEvents[$index] = $existing_entry;
+               }
+       }
+       
+       return $calEvents;
+    }
+    
+    /**
+     * Default display method.
+     *
+     * needs to be passed a GoogleClient object that has already been configured with a valid
+     * access token.
+     *
+     * @return void
+     */
+    public function display($calEvents)
+    {
+       
+       $this->set ( 'calEvents', $calEvents );
+    }
+}
diff --git a/production/example_apps/shared_calendar/src/View/Helper/empty b/production/example_apps/shared_calendar/src/View/Helper/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php b/production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php
new file mode 100644 (file)
index 0000000..4fdd2c1
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+namespace App\Test\Fixture;
+
+use Cake\TestSuite\Fixture\TestFixture;
+
+/**
+ * UsersFixture
+ *
+ */
+class UsersFixture extends TestFixture
+{
+
+    /**
+     * Fields
+     *
+     * @var array
+     */
+    // @codingStandardsIgnoreStart
+    public $fields = [
+        'id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
+        'name' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
+        'token' => ['type' => 'string', 'length' => 2048, 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
+        'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        '_indexes' => [
+            'name' => ['type' => 'index', 'columns' => ['name'], 'length' => []],
+        ],
+        '_constraints' => [
+            'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
+        ],
+        '_options' => [
+            'engine' => 'InnoDB',
+            'collation' => 'utf8_general_ci'
+        ],
+    ];
+    // @codingStandardsIgnoreEnd
+
+    /**
+     * Records
+     *
+     * @var array
+     */
+    public $records = [
+        [
+            'id' => 1,
+            'name' => 'Lorem ipsum dolor sit amet',
+            'token' => 'Lorem ipsum dolor sit amet',
+            'created' => '2017-07-30 22:29:56',
+            'modified' => '2017-07-30 22:29:56'
+        ],
+    ];
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php b/production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php
new file mode 100644 (file)
index 0000000..d397fa1
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.3.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Test\TestCase;
+
+use App\Application;
+use Cake\Error\Middleware\ErrorHandlerMiddleware;
+use Cake\Http\MiddlewareQueue;
+use Cake\Routing\Middleware\AssetMiddleware;
+use Cake\Routing\Middleware\RoutingMiddleware;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * ApplicationTest class
+ */
+class ApplicationTest extends IntegrationTestCase
+{
+
+    /**
+     * testMiddleware
+     *
+     * @return void
+     */
+    public function testMiddleware()
+    {
+        $app = new Application(dirname(dirname(__DIR__)) . '/config');
+        $middleware = new MiddlewareQueue();
+
+        $middleware = $app->middleware($middleware);
+
+        $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0));
+        $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1));
+        $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2));
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php
new file mode 100644 (file)
index 0000000..93ee7e4
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\AuthorizerController;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * App\Controller\AuthorizerController Test Case
+ */
+class AuthorizerControllerTest extends IntegrationTestCase
+{
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.authorizer'
+    ];
+
+    /**
+     * Test index method
+     *
+     * @return void
+     */
+    public function testIndex()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test view method
+     *
+     * @return void
+     */
+    public function testView()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test add method
+     *
+     * @return void
+     */
+    public function testAdd()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test edit method
+     *
+     * @return void
+     */
+    public function testEdit()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test delete method
+     *
+     * @return void
+     */
+    public function testDelete()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php
new file mode 100644 (file)
index 0000000..1b478a3
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         1.2.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\PagesController;
+use Cake\Core\App;
+use Cake\Core\Configure;
+use Cake\Network\Request;
+use Cake\Network\Response;
+use Cake\TestSuite\IntegrationTestCase;
+use Cake\View\Exception\MissingTemplateException;
+
+/**
+ * PagesControllerTest class
+ */
+class PagesControllerTest extends IntegrationTestCase
+{
+    /**
+     * testMultipleGet method
+     *
+     * @return void
+     */
+    public function testMultipleGet()
+    {
+        $this->get('/');
+        $this->assertResponseOk();
+        $this->get('/');
+        $this->assertResponseOk();
+    }
+
+    /**
+     * testDisplay method
+     *
+     * @return void
+     */
+    public function testDisplay()
+    {
+        $this->get('/pages/home');
+        $this->assertResponseOk();
+        $this->assertResponseContains('CakePHP');
+        $this->assertResponseContains('<html>');
+    }
+
+    /**
+     * Test that missing template renders 404 page in production
+     *
+     * @return void
+     */
+    public function testMissingTemplate()
+    {
+        Configure::write('debug', false);
+        $this->get('/pages/not_existing');
+
+        $this->assertResponseError();
+        $this->assertResponseContains('Error');
+    }
+
+    /**
+     * Test that missing template in debug mode renders missing_template error page
+     *
+     * @return void
+     */
+    public function testMissingTemplateInDebug()
+    {
+        Configure::write('debug', true);
+        $this->get('/pages/not_existing');
+
+        $this->assertResponseFailure();
+        $this->assertResponseContains('Missing Template');
+        $this->assertResponseContains('Stacktrace');
+        $this->assertResponseContains('not_existing.ctp');
+    }
+
+    /**
+     * Test directory traversal protection
+     *
+     * @return void
+     */
+    public function testDirectoryTraversalProtection()
+    {
+        $this->get('/pages/../Layout/ajax');
+        $this->assertResponseCode(403);
+        $this->assertResponseContains('Forbidden');
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php
new file mode 100644 (file)
index 0000000..f07c119
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\UsersController;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * App\Controller\UsersController Test Case
+ */
+class UsersControllerTest extends IntegrationTestCase
+{
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.users'
+    ];
+
+    /**
+     * Test index method
+     *
+     * @return void
+     */
+    public function testIndex()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test view method
+     *
+     * @return void
+     */
+    public function testView()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test add method
+     *
+     * @return void
+     */
+    public function testAdd()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test edit method
+     *
+     * @return void
+     */
+    public function testEdit()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test delete method
+     *
+     * @return void
+     */
+    public function testDelete()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/Model/Behavior/empty b/production/example_apps/shared_calendar/tests/TestCase/Model/Behavior/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php b/production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php
new file mode 100644 (file)
index 0000000..d745692
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+namespace App\Test\TestCase\Model\Table;
+
+use App\Model\Table\UsersTable;
+use Cake\ORM\TableRegistry;
+use Cake\TestSuite\TestCase;
+
+/**
+ * App\Model\Table\UsersTable Test Case
+ */
+class UsersTableTest extends TestCase
+{
+
+    /**
+     * Test subject
+     *
+     * @var \App\Model\Table\UsersTable
+     */
+    public $Users;
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.users'
+    ];
+
+    /**
+     * setUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $config = TableRegistry::exists('Users') ? [] : ['className' => UsersTable::class];
+        $this->Users = TableRegistry::get('Users', $config);
+    }
+
+    /**
+     * tearDown method
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        unset($this->Users);
+
+        parent::tearDown();
+    }
+
+    /**
+     * Test initialize method
+     *
+     * @return void
+     */
+    public function testInitialize()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test validationDefault method
+     *
+     * @return void
+     */
+    public function testValidationDefault()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php b/production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php
new file mode 100644 (file)
index 0000000..c12e3bd
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+namespace App\Test\TestCase\View\Cell;
+
+use App\View\Cell\GoogleCalendarCell;
+use Cake\TestSuite\TestCase;
+
+/**
+ * App\View\Cell\GoogleCalendarCell Test Case
+ */
+class GoogleCalendarCellTest extends TestCase
+{
+
+    /**
+     * Request mock
+     *
+     * @var \Cake\Network\Request|\PHPUnit_Framework_MockObject_MockObject
+     */
+    public $request;
+
+    /**
+     * Response mock
+     *
+     * @var \Cake\Http\Response|\PHPUnit_Framework_MockObject_MockObject
+     */
+    public $response;
+
+    /**
+     * Test subject
+     *
+     * @var \App\View\Cell\GoogleCalendarCell
+     */
+    public $GoogleCalendar;
+
+    /**
+     * setUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $this->request = $this->getMockBuilder('Cake\Network\Request')->getMock();
+        $this->response = $this->getMockBuilder('Cake\Network\Response')->getMock();
+        $this->GoogleCalendar = new GoogleCalendarCell($this->request, $this->response);
+    }
+
+    /**
+     * tearDown method
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        unset($this->GoogleCalendar);
+
+        parent::tearDown();
+    }
+
+    /**
+     * Test display method
+     *
+     * @return void
+     */
+    public function testDisplay()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/shared_calendar/tests/TestCase/View/Helper/empty b/production/example_apps/shared_calendar/tests/TestCase/View/Helper/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/shared_calendar/tests/bootstrap.php b/production/example_apps/shared_calendar/tests/bootstrap.php
new file mode 100644 (file)
index 0000000..0ca191e
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Test runner bootstrap.
+ *
+ * Add additional configuration/setup your application needs when running
+ * unit tests in this file.
+ */
+require dirname(__DIR__) . '/vendor/autoload.php';
+
+require dirname(__DIR__) . '/config/bootstrap.php';
+
+$_SERVER['PHP_SELF'] = '/';
diff --git a/production/example_apps/shared_calendar/webroot/.htaccess b/production/example_apps/shared_calendar/webroot/.htaccess
new file mode 100644 (file)
index 0000000..f5f2d63
--- /dev/null
@@ -0,0 +1,5 @@
+<IfModule mod_rewrite.c>
+    RewriteEngine On
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteRule ^ index.php [L]
+</IfModule>
diff --git a/production/example_apps/shared_calendar/webroot/css/base.css b/production/example_apps/shared_calendar/webroot/css/base.css
new file mode 100644 (file)
index 0000000..458cd94
--- /dev/null
@@ -0,0 +1,455 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-family: sans-serif; /* 1 */
+    -ms-text-size-adjust: 100%; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+    margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+    display: inline-block; /* 1 */
+    vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+    display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+    background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+    font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+    border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+    margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+    overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, monospace;
+    font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+    color: inherit; /* 1 */
+    font: inherit; /* 2 */
+    margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+    overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+    text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+    cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+    line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+    height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+    overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+    font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+td,
+th {
+    padding: 0;
+}
+
+/**
+ * Foundation for Sites by ZURB
+ * Version 5
+ */
+
+/*
+ * Copyright (c) 2013-2014 ZURB, inc.
+* MIT License
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to deal in the Software without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to
+* permit persons to whom the Software is furnished to do so, subject to
+* the following conditions:
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+meta.foundation-version{font-family:"{{ VERSION }}"}meta.foundation-mq-small{font-family:"/only screen/";width:0}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.0625em) and (max-width:64em)/";width:40.0625em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.0625em)/";width:64.0625em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.0625em) and (max-width:90em)/";width:64.0625em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.0625em)/";width:90.0625em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.0625em) and (max-width:120em)/";width:90.0625em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.0625em)/";width:120.0625em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}html{box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}html,body{font-size:100%}body{background:#fff;color:#222;cursor:auto;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.5;margin:0;padding:0;position:relative}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{margin:0 auto;max-width:62.5rem;width:100%}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{margin:0 -0.9375rem;max-width:none;width:auto}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{margin:0;max-width:none;width:auto}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}.column+.column:last-child,.columns+.column:last-child,.column+.columns:last-child,.columns+.columns:last-child{float:right}.column+.column.end,.columns+.column.end,.column+.columns.end,.columns+.columns.end{float:left}@media only screen{.small-push-0{position:relative;left:0;right:auto}.small-pull-0{position:relative;right:0;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0 !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{float:left;margin-left:0;margin-right:0}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width: 40.0625em){.medium-push-0{position:relative;left:0;right:auto}.medium-pull-0{position:relative;right:0;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0 !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{float:left;margin-left:0;margin-right:0}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.0625em){.large-push-0{position:relative;left:0;right:auto}.large-pull-0{position:relative;right:0;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0 !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{float:left;margin-left:0;margin-right:0}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}button,.button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#008CBA;border-color:#007095;color:#fff;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#007095}button:hover,button:focus,.button:hover,.button:focus{color:#fff}button.secondary,.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#b9b9b9}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333}button.success,.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#368a55}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#fff}button.alert,.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#cf2a0e}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#fff}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#fff}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#fff}button.large,.button.large{padding:1.125rem 2.25rem 1.1875rem 2.25rem;font-size:1.25rem}button.small,.button.small{padding:0.875rem 1.75rem 0.9375rem 1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding:0.625rem 1.25rem 0.6875rem 1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding-left:0;padding-right:0;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#008CBA;border-color:#007095;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#007095}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#fff}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#008CBA}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#b9b9b9}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e7e7e7}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#43AC6A;border-color:#368a55;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#368a55}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#fff}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#43AC6A}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#f04124;border-color:#cf2a0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#cf2a0e}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#fff}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#f04124}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#fff}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#fff}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width: 40.0625em){button,.button{display:inline-block}}form{margin:0 0 1rem}form .row .row{margin:0 -0.5rem}form .row .row .column,form .row .row .columns{padding:0 0.5rem}form .row .row.collapse{margin:0}form .row .row.collapse .column,form .row .row.collapse .columns{padding:0}form .row .row.collapse input{-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}form .row input.column,form .row input.columns,form .row textarea.column,form .row textarea.columns{padding-left:0.5rem}label{color:#4d4d4d;cursor:pointer;display:block;font-size:0.875rem;font-weight:normal;line-height:1.5;margin-bottom:0}label.right{float:none !important;text-align:right}label.inline{margin:0 0 1rem 0;padding:0.5625rem 0}label small{text-transform:capitalize;color:#676767}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}.postfix.button{border-color:true}.prefix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button.radius{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.postfix.button.radius{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.prefix.button.round{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.postfix.button.round{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333;border-color:#ccc}span.postfix,label.postfix{background:#f2f2f2;color:#333;border-color:#ccc}input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#fff;border-style:solid;border-width:1px;border-color:#ccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}input[type="text"]:focus,input[type="password"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="color"]:focus,textarea:focus{background:#fafafa;border-color:#999;outline:none}input[type="text"]:disabled,input[type="password"]:disabled,input[type="date"]:disabled,input[type="datetime"]:disabled,input[type="datetime-local"]:disabled,input[type="month"]:disabled,input[type="week"]:disabled,input[type="email"]:disabled,input[type="number"]:disabled,input[type="search"]:disabled,input[type="tel"]:disabled,input[type="time"]:disabled,input[type="url"]:disabled,input[type="color"]:disabled,textarea:disabled{background-color:#ddd;cursor:default}input[type="text"][disabled],input[type="text"][readonly],fieldset[disabled] input[type="text"],input[type="password"][disabled],input[type="password"][readonly],fieldset[disabled] input[type="password"],input[type="date"][disabled],input[type="date"][readonly],fieldset[disabled] input[type="date"],input[type="datetime"][disabled],input[type="datetime"][readonly],fieldset[disabled] input[type="datetime"],input[type="datetime-local"][disabled],input[type="datetime-local"][readonly],fieldset[disabled] input[type="datetime-local"],input[type="month"][disabled],input[type="month"][readonly],fieldset[disabled] input[type="month"],input[type="week"][disabled],input[type="week"][readonly],fieldset[disabled] input[type="week"],input[type="email"][disabled],input[type="email"][readonly],fieldset[disabled] input[type="email"],input[type="number"][disabled],input[type="number"][readonly],fieldset[disabled] input[type="number"],input[type="search"][disabled],input[type="search"][readonly],fieldset[disabled] input[type="search"],input[type="tel"][disabled],input[type="tel"][readonly],fieldset[disabled] input[type="tel"],input[type="time"][disabled],input[type="time"][readonly],fieldset[disabled] input[type="time"],input[type="url"][disabled],input[type="url"][readonly],fieldset[disabled] input[type="url"],input[type="color"][disabled],input[type="color"][readonly],fieldset[disabled] input[type="color"],textarea[disabled],textarea[readonly],fieldset[disabled] textarea{background-color:#ddd;cursor:default}input[type="text"].radius,input[type="password"].radius,input[type="date"].radius,input[type="datetime"].radius,input[type="datetime-local"].radius,input[type="month"].radius,input[type="week"].radius,input[type="email"].radius,input[type="number"].radius,input[type="search"].radius,input[type="tel"].radius,input[type="time"].radius,input[type="url"].radius,input[type="color"].radius,textarea.radius{border-radius:3px}form .row .prefix-radius.row.collapse input,form .row .prefix-radius.row.collapse textarea,form .row .prefix-radius.row.collapse select,form .row .prefix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-radius.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse input,form .row .postfix-radius.row.collapse textarea,form .row .postfix-radius.row.collapse select,form .row .postfix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-round.row.collapse input,form .row .prefix-round.row.collapse textarea,form .row .prefix-round.row.collapse select,form .row .prefix-round.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}form .row .prefix-round.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse input,form .row .postfix-round.row.collapse textarea,form .row .postfix-round.row.collapse select,form .row .postfix-round.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;border-radius:0}textarea[rows]{height:auto}textarea{max-width:100%}::-webkit-input-placeholder{color:#ccc}:-moz-placeholder{color:#ccc}::-moz-placeholder{color:#ccc}:-ms-input-placeholder{color:#ccc}select{-webkit-appearance:none !important;-moz-appearance:none !important;background-color:#FAFAFA;border-radius:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#ccc;color:rgba(0,0,0,0.75);font-family:inherit;font-size:0.875rem;line-height:normal;padding:0.5rem;border-radius:0;height:2.3125rem}select::-ms-expand{display:none}select.radius{border-radius:3px}select:hover{background-color:#f3f3f3;border-color:#999}select:disabled{background-color:#ddd;cursor:default}select[multiple]{height:auto}input[type="file"],input[type="checkbox"],input[type="radio"],select{margin:0 0 1rem 0}input[type="checkbox"]+label,input[type="radio"]+label{display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}input[type="file"]{width:100%}fieldset{border:1px solid #ddd;margin:1.125rem 0;padding:1.25rem}fieldset legend{background:#fff;font-weight:bold;margin-left:-0.1875rem;margin:0;padding:0 0.1875rem}[data-abide] .error small.error,[data-abide] .error span.error,[data-abide] span.error,[data-abide] small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}[data-abide] span.error,[data-abide] small.error{display:none}span.error,small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error input,.error textarea,.error select{margin-bottom:0}.error input[type="checkbox"],.error input[type="radio"]{margin-bottom:1rem}.error label,.error label.error{color:#f04124}.error small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error>label>small{background:transparent;color:#676767;display:inline;font-size:60%;font-style:normal;margin:0;padding:0;text-transform:capitalize}.error span.error-message{display:block}input.error,textarea.error,select.error{margin-bottom:0}label.error{color:#f04124}meta.foundation-mq-topbar{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}.contain-to-grid{width:100%;background:#333}.contain-to-grid .top-bar{margin-bottom:0}.fixed{position:fixed;top:0;width:100%;z-index:99;left:0}.fixed.expanded:not(.top-bar){height:auto;max-height:100%;overflow-y:auto;width:100%}.fixed.expanded:not(.top-bar) .title-area{position:fixed;width:100%;z-index:99}.fixed.expanded:not(.top-bar) .top-bar-section{margin-top:2.8125rem;z-index:98}.top-bar{background:#333;height:2.8125rem;line-height:2.8125rem;margin-bottom:0;overflow:hidden;position:relative}.top-bar ul{list-style:none;margin-bottom:0}.top-bar .row{max-width:none}.top-bar form,.top-bar input,.top-bar select{margin-bottom:0}.top-bar input,.top-bar select{font-size:0.75rem;height:1.75rem;padding-bottom:.35rem;padding-top:.35rem}.top-bar .button,.top-bar button{font-size:0.75rem;margin-bottom:0;padding-bottom:0.4125rem;padding-top:0.4125rem}@media only screen and (max-width: 40em){.top-bar .button,.top-bar button{position:relative;top:-1px}}.top-bar .title-area{margin:0;position:relative}.top-bar .name{font-size:16px;height:2.8125rem;margin:0}.top-bar .name h1,.top-bar .name h2,.top-bar .name h3,.top-bar .name h4,.top-bar .name p,.top-bar .name span{font-size:1.0625rem;line-height:2.8125rem;margin:0}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name p a,.top-bar .name span a{color:#fff;display:block;font-weight:normal;padding:0 0.9375rem;width:75%}.top-bar .toggle-topbar{position:absolute;right:0;top:0}.top-bar .toggle-topbar a{color:#fff;display:block;font-size:0.8125rem;font-weight:bold;height:2.8125rem;line-height:2.8125rem;padding:0 0.9375rem;position:relative;text-transform:uppercase}.top-bar .toggle-topbar.menu-icon{margin-top:-16px;top:50%}.top-bar .toggle-topbar.menu-icon a{color:#fff;height:34px;line-height:33px;padding:0 2.5rem 0 0.9375rem;position:relative}.top-bar .toggle-topbar.menu-icon a span::after{content:"";display:block;height:0;position:absolute;margin-top:-8px;top:50%;right:0.9375rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:16px}.top-bar .toggle-topbar.menu-icon a span:hover:after{box-shadow:0 0 0 1px "",0 7px 0 1px "",0 14px 0 1px ""}.top-bar.expanded{background:transparent;height:auto}.top-bar.expanded .title-area{background:#333}.top-bar.expanded .toggle-topbar a{color:#888}.top-bar.expanded .toggle-topbar a span::after{box-shadow:0 0 0 1px #888,0 7px 0 1px #888,0 14px 0 1px #888}@media screen and (-webkit-min-device-pixel-ratio: 0){.top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown,.top-bar.expanded .top-bar-section .dropdown{clip:initial}.top-bar.expanded .top-bar-section .has-dropdown:not(.moved)>ul{padding:0}}.top-bar-section{left:0;position:relative;width:auto;transition:left 300ms ease-out}.top-bar-section ul{display:block;font-size:16px;height:auto;margin:0;padding:0;width:100%}.top-bar-section .divider,.top-bar-section [role="separator"]{border-top:solid 1px #1a1a1a;clear:both;height:1px;width:100%}.top-bar-section ul li{background:#333}.top-bar-section ul li>a{color:#fff;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.8125rem;font-weight:normal;padding-left:0.9375rem;padding:12px 0 12px 0.9375rem;text-transform:none;width:100%}.top-bar-section ul li>a.button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{background-color:#007095}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{color:#fff}.top-bar-section ul li>a.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{color:#333}.top-bar-section ul li>a.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{background-color:#368a55}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{color:#fff}.top-bar-section ul li>a.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{color:#fff}.top-bar-section ul li>a.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{color:#fff}.top-bar-section ul li>a.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{background-color:#61b6d9}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{color:#fff}.top-bar-section ul li>button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{background-color:#007095}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{color:#fff}.top-bar-section ul li>button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{color:#333}.top-bar-section ul li>button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{background-color:#368a55}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{color:#fff}.top-bar-section ul li>button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{color:#fff}.top-bar-section ul li>button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{color:#fff}.top-bar-section ul li>button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{background-color:#61b6d9}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{color:#fff}.top-bar-section ul li:hover:not(.has-form)>a{background-color:#555;color:#fff;background:#222}.top-bar-section ul li.active>a{background:#008CBA;color:#fff}.top-bar-section ul li.active>a:hover{background:#0078a0;color:#fff}.top-bar-section .has-form{padding:0.9375rem}.top-bar-section .has-dropdown{position:relative}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent rgba(255,255,255,0.4);border-left-style:solid;margin-right:0.9375rem;margin-top:-4.5px;position:absolute;top:50%;right:0}.top-bar-section .has-dropdown.moved{position:static}.top-bar-section .has-dropdown.moved>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important;width:100%}.top-bar-section .has-dropdown.moved>a:after{display:none}.top-bar-section .dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block;padding:0;position:absolute;top:0;z-index:99;left:100%}.top-bar-section .dropdown li{height:auto;width:100%}.top-bar-section .dropdown li a{font-weight:normal;padding:8px 0.9375rem}.top-bar-section .dropdown li a.parent-link{font-weight:normal}.top-bar-section .dropdown li.title h5,.top-bar-section .dropdown li.parent-link{margin-bottom:0;margin-top:0;font-size:1.125rem}.top-bar-section .dropdown li.title h5 a,.top-bar-section .dropdown li.parent-link a{color:#fff;display:block}.top-bar-section .dropdown li.title h5 a:hover,.top-bar-section .dropdown li.parent-link a:hover{background:none}.top-bar-section .dropdown li.has-form{padding:8px 0.9375rem}.top-bar-section .dropdown li .button,.top-bar-section .dropdown li button{top:auto}.top-bar-section .dropdown label{color:#777;font-size:0.625rem;font-weight:bold;margin-bottom:0;padding:8px 0.9375rem 2px;text-transform:uppercase}.js-generated{display:block}@media only screen and (min-width: 40.0625em){.top-bar{background:#333;overflow:visible}.top-bar:before,.top-bar:after{content:" ";display:table}.top-bar:after{clear:both}.top-bar .toggle-topbar{display:none}.top-bar .title-area{float:left}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name h5 a,.top-bar .name h6 a{width:auto}.top-bar input,.top-bar select,.top-bar .button,.top-bar button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar.expanded{background:#333}.contain-to-grid .top-bar{margin-bottom:0;margin:0 auto;max-width:62.5rem}.top-bar-section{transition:none 0 0;left:0 !important}.top-bar-section ul{display:inline;height:auto !important;width:auto}.top-bar-section ul li{float:left}.top-bar-section ul li .js-generated{display:none}.top-bar-section li.hover>a:not(.button){background-color:#555;background:#222;color:#fff}.top-bar-section li:not(.has-form) a:not(.button){background:#333;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li:not(.has-form) a:not(.button):hover{background-color:#555;background:#222}.top-bar-section li.active:not(.has-form) a:not(.button){background:#008CBA;color:#fff;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li.active:not(.has-form) a:not(.button):hover{background:#0078a0;color:#fff}.top-bar-section .has-dropdown>a{padding-right:2.1875rem !important}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:rgba(255,255,255,0.4) transparent transparent transparent;border-top-style:solid;margin-top:-2.5px;top:1.40625rem}.top-bar-section .has-dropdown.moved{position:relative}.top-bar-section .has-dropdown.moved>.dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block}.top-bar-section .has-dropdown.hover>.dropdown,.top-bar-section .has-dropdown.not-click:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown .dropdown li.has-dropdown>a:after{border:none;content:"\00bb";top:0.1875rem;right:5px}.top-bar-section .dropdown{left:0;background:transparent;min-width:100%;top:auto}.top-bar-section .dropdown li a{background:#333;color:#fff;line-height:2.8125rem;padding:12px 0.9375rem;white-space:nowrap}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button){background:#333;color:#fff}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#555;color:#fff;background:#222}.top-bar-section .dropdown li label{background:#333;white-space:nowrap}.top-bar-section .dropdown li .dropdown{left:100%;top:0}.top-bar-section>ul>.divider,.top-bar-section>ul>[role="separator"]{border-right:solid 1px #4e4e4e;border-bottom:none;border-top:none;clear:none;height:2.8125rem;width:0}.top-bar-section .has-form{background:#333;height:2.8125rem;padding:0 0.9375rem}.top-bar-section .right li .dropdown{left:auto;right:0}.top-bar-section .right li .dropdown li .dropdown{right:100%}.top-bar-section .left li .dropdown{right:auto;left:0}.top-bar-section .left li .dropdown li .dropdown{left:100%}.no-js .top-bar-section ul li:hover>a{background-color:#555;background:#222;color:#fff}.no-js .top-bar-section ul li:active>a{background:#008CBA;color:#fff}.no-js .top-bar-section .has-dropdown:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}}.breadcrumbs{border-style:solid;border-width:1px;display:block;list-style:none;margin-left:0;overflow:hidden;padding:0.5625rem 0.875rem 0.5625rem;background-color:#f4f4f4;border-color:#dcdcdc;border-radius:3px}.breadcrumbs>*{color:#008CBA;float:left;font-size:0.6875rem;line-height:0.6875rem;margin:0;text-transform:uppercase}.breadcrumbs>*:hover a,.breadcrumbs>*:focus a{text-decoration:underline}.breadcrumbs>* a{color:#008CBA}.breadcrumbs>*.current{color:#333;cursor:default}.breadcrumbs>*.current a{color:#333;cursor:default}.breadcrumbs>*.current:hover,.breadcrumbs>*.current:hover a,.breadcrumbs>*.current:focus,.breadcrumbs>*.current:focus a{text-decoration:none}.breadcrumbs>*.unavailable{color:#999}.breadcrumbs>*.unavailable a{color:#999}.breadcrumbs>*.unavailable:hover,.breadcrumbs>*.unavailable:hover a,.breadcrumbs>*.unavailable:focus,.breadcrumbs>*.unavailable a:focus{color:#999;cursor:not-allowed;text-decoration:none}.breadcrumbs>*:before{color:#aaa;content:"/";margin:0 0.75rem;position:relative;top:1px}.breadcrumbs>*:first-child:before{content:" ";margin:0}[aria-label="breadcrumbs"] [aria-hidden="true"]:after{content:"/"}.alert-box{border-style:solid;border-width:1px;display:block;font-size:0.8125rem;font-weight:normal;margin-bottom:1.25rem;padding:0.875rem 1.5rem 0.875rem 0.875rem;position:relative;transition:opacity 300ms ease-out;background-color:#008CBA;border-color:#0078a0;color:#fff}.alert-box .close{right:0.25rem;background:inherit;color:#333;font-size:1.375rem;line-height:.9;margin-top:-0.6875rem;opacity:0.3;padding:0 6px 4px;position:absolute;top:50%}.alert-box .close:hover,.alert-box .close:focus{opacity:0.5}.alert-box.radius{border-radius:3px}.alert-box.round{border-radius:1000px}.alert-box.success{background-color:#43AC6A;border-color:#3a945b;color:#fff}.alert-box.alert{background-color:#f04124;border-color:#de2d0f;color:#fff}.alert-box.secondary{background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f}.alert-box.warning{background-color:#f08a24;border-color:#de770f;color:#fff}.alert-box.info{background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f}.alert-box.alert-close{opacity:0}.inline-list{list-style:none;margin-left:-1.375rem;margin-right:0;margin:0 auto 1.0625rem auto;overflow:hidden;padding:0}.inline-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.inline-list>li>*{display:block}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group.even-2 li{display:inline-block;margin:0 -2px;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{display:inline-block;margin:0 -2px;width:33.33333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{display:inline-block;margin:0 -2px;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{display:inline-block;margin:0 -2px;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{display:inline-block;margin:0 -2px;width:16.66667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{display:inline-block;margin:0 -2px;width:14.28571%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{display:inline-block;margin:0 -2px;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-group>li{display:inline-block;margin:0 -2px}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack>li>button{width:100%}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{display:inline-block;margin:0 -2px}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{display:block;margin:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack-for-small>li>button{width:100%}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{display:inline-block;margin:0 -2px}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack>*>button{width:100%}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width: 40.0625em){.button-group.radius.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{display:block;margin:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack-for-small>*>button{width:100%}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{display:inline-block;margin:0 -2px}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack>*>button{width:100%}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width: 40.0625em){.button-group.round.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{display:block;margin:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack-for-small>*>button{width:100%}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.panel{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f2f2f2;color:#333}.panel>:first-child{margin-top:0}.panel>:last-child{margin-bottom:0}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6,.panel p,.panel li,.panel dl{color:#333}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{line-height:1;margin-bottom:0.625rem}.panel h1.subheader,.panel h2.subheader,.panel h3.subheader,.panel h4.subheader,.panel h5.subheader,.panel h6.subheader{line-height:1.4}.panel.callout{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#ecfaff;color:#333}.panel.callout>:first-child{margin-top:0}.panel.callout>:last-child{margin-bottom:0}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6,.panel.callout p,.panel.callout li,.panel.callout dl{color:#333}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6{line-height:1;margin-bottom:0.625rem}.panel.callout h1.subheader,.panel.callout h2.subheader,.panel.callout h3.subheader,.panel.callout h4.subheader,.panel.callout h5.subheader,.panel.callout h6.subheader{line-height:1.4}.panel.callout a:not(.button){color:#008CBA}.panel.callout a:not(.button):hover,.panel.callout a:not(.button):focus{color:#0078a0}.panel.radius{border-radius:3px}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent;border-style:solid;content:"";display:block;height:0;position:absolute;top:50%;width:0}.dropdown.button::after,button.dropdown::after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny::after,button.dropdown.tiny::after{border-color:#fff transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small::after,button.dropdown.small::after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small::after,button.dropdown.small::after{border-color:#fff transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large::after,button.dropdown.large::after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large::after,button.dropdown.large::after{border-color:#fff transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333 transparent transparent transparent}.th{border:solid 4px #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.2);display:inline-block;line-height:0;max-width:100%;transition:all 200ms ease-out}.th:hover,.th:focus{box-shadow:0 0 6px 1px rgba(0,140,186,0.5)}.th.radius{border-radius:3px}.pricing-table{border:solid 1px #ddd;margin-left:0;margin-bottom:1.25rem}.pricing-table *{list-style:none;line-height:1}.pricing-table .title{background-color:#333;color:#eee;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .price{background-color:#F6F6F6;color:#333;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:2rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .description{background-color:#fff;border-bottom:dotted 1px #ddd;color:#777;font-size:0.75rem;font-weight:normal;line-height:1.4;padding:0.9375rem;text-align:center}.pricing-table .bullet-item{background-color:#fff;border-bottom:dotted 1px #ddd;color:#333;font-size:0.875rem;font-weight:normal;padding:0.9375rem;text-align:center}.pricing-table .cta-button{background-color:#fff;padding:1.25rem 1.25rem 0;text-align:center}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.slideshow-wrapper{position:relative}.slideshow-wrapper ul{list-style-type:none;margin:0}.slideshow-wrapper ul li,.slideshow-wrapper ul li .orbit-caption{display:none}.slideshow-wrapper ul li:first-child{display:block}.slideshow-wrapper .orbit-container{background-color:transparent}.slideshow-wrapper .orbit-container li{display:block}.slideshow-wrapper .orbit-container li .orbit-caption{display:block}.slideshow-wrapper .orbit-container .orbit-bullets li{display:inline-block}.slideshow-wrapper .preloader{border-radius:1000px;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;border-color:#555 #fff;border:solid 3px;display:block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px}.orbit-container{background:none;overflow:hidden;position:relative;width:100%}.orbit-container .orbit-slides-container{list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.orbit-container .orbit-slides-container img{display:block;max-width:100%}.orbit-container .orbit-slides-container>*{position:absolute;top:0;width:100%;margin-left:100%}.orbit-container .orbit-slides-container>*:first-child{margin-left:0}.orbit-container .orbit-slides-container>* .orbit-caption{bottom:0;position:absolute;background-color:rgba(51,51,51,0.8);color:#fff;font-size:0.875rem;padding:0.625rem 0.875rem;width:100%}.orbit-container .orbit-slide-number{left:10px;background:transparent;color:#fff;font-size:12px;position:absolute;top:10px;z-index:10}.orbit-container .orbit-slide-number span{font-weight:700;padding:0.3125rem}.orbit-container .orbit-timer{position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10}.orbit-container .orbit-timer .orbit-progress{height:3px;background-color:rgba(255,255,255,0.3);display:block;width:0;position:relative;right:20px;top:5px}.orbit-container .orbit-timer>span{border:solid 4px #fff;border-bottom:none;border-top:none;display:none;height:14px;position:absolute;top:0;width:11px;right:0}.orbit-container .orbit-timer.paused>span{top:0;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#fff;right:-4px}.orbit-container .orbit-timer.paused>span.dark{border-left-color:#333}.orbit-container:hover .orbit-timer>span{display:block}.orbit-container .orbit-prev,.orbit-container .orbit-next{background-color:transparent;color:white;height:60px;line-height:50px;margin-top:-25px;position:absolute;text-indent:-9999px !important;top:45%;width:36px;z-index:10}.orbit-container .orbit-prev:hover,.orbit-container .orbit-next:hover{background-color:rgba(0,0,0,0.3)}.orbit-container .orbit-prev>span,.orbit-container .orbit-next>span{border:inset 10px;display:block;height:0;margin-top:-10px;position:absolute;top:50%;width:0}.orbit-container .orbit-prev{left:0}.orbit-container .orbit-prev>span{border-right-style:solid;border-color:transparent;border-right-color:#fff}.orbit-container .orbit-prev:hover>span{border-right-color:#fff}.orbit-container .orbit-next{right:0}.orbit-container .orbit-next>span{border-color:transparent;border-left-style:solid;border-left-color:#fff;left:50%;margin-left:-4px}.orbit-container .orbit-next:hover>span{border-left-color:#fff}.orbit-bullets-container{text-align:center}.orbit-bullets{display:block;float:none;margin:0 auto 30px auto;overflow:hidden;position:relative;text-align:center;top:10px}.orbit-bullets li{background:#ccc;cursor:pointer;display:inline-block;float:none;height:0.5625rem;margin-right:6px;width:0.5625rem;border-radius:1000px}.orbit-bullets li.active{background:#999}.orbit-bullets li:last-child{margin-right:0}.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:none}.touch .orbit-bullets{display:none}@media only screen and (min-width: 40.0625em){.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:inherit}.touch .orbit-bullets{display:block}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container{height:auto !important}.orbit-stack-on-small .orbit-slides-container>*{margin:0  !important;opacity:1 !important;position:relative}.orbit-stack-on-small .orbit-slide-number{display:none}.orbit-timer{display:none}.orbit-next,.orbit-prev{display:none}.orbit-bullets{display:none}}[data-magellan-expedition],[data-magellan-expedition-clone]{background:#fff;min-width:100%;padding:10px;z-index:50}[data-magellan-expedition] .sub-nav,[data-magellan-expedition-clone] .sub-nav{margin-bottom:0}[data-magellan-expedition] .sub-nav dd,[data-magellan-expedition-clone] .sub-nav dd{margin-bottom:0}[data-magellan-expedition] .sub-nav a,[data-magellan-expedition-clone] .sub-nav a{line-height:1.8em}.icon-bar{display:inline-block;font-size:0;width:100%;background:#333}.icon-bar>*{display:block;float:left;font-size:1rem;margin:0 auto;padding:1.25rem;text-align:center;width:25%}.icon-bar>* i,.icon-bar>* img{display:block;margin:0 auto}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem}.icon-bar>* i{font-size:1.875rem;vertical-align:middle}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar.label-right>* i,.icon-bar.label-right>* img{display:inline-block;margin:0 .0625rem 0 0}.icon-bar.label-right>* i+label,.icon-bar.label-right>* img+label{margin-top:0}.icon-bar.label-right>* label{display:inline-block}.icon-bar.vertical.label-right>*{text-align:left}.icon-bar.vertical,.icon-bar.small-vertical{height:100%;width:auto}.icon-bar.vertical .item,.icon-bar.small-vertical .item{float:none;margin:auto;width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.medium-vertical{height:100%;width:auto}.icon-bar.medium-vertical .item{float:none;margin:auto;width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.large-vertical{height:100%;width:auto}.icon-bar.large-vertical .item{float:none;margin:auto;width:auto}}.icon-bar>*{font-size:1rem;padding:1.25rem}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem;font-size:1rem}.icon-bar>* i{font-size:1.875rem}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar>* label{color:#fff}.icon-bar>* i{color:#fff}.icon-bar>a:hover{background:#008CBA}.icon-bar>a:hover label{color:#fff}.icon-bar>a:hover i{color:#fff}.icon-bar>a.active{background:#008CBA}.icon-bar>a.active label{color:#fff}.icon-bar>a.active i{color:#fff}.icon-bar .item.disabled{cursor:not-allowed;opacity:0.7;pointer-events:none}.icon-bar .item.disabled>*{opacity:0.7;cursor:not-allowed}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.tabs{margin-bottom:0 !important;margin-left:0}.tabs:before,.tabs:after{content:" ";display:table}.tabs:after{clear:both}.tabs dd,.tabs .tab-title{float:left;list-style:none;margin-bottom:0 !important;position:relative}.tabs dd>a,.tabs .tab-title>a{display:block;background-color:#EFEFEF;color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem 2rem}.tabs dd>a:hover,.tabs .tab-title>a:hover{background-color:#e1e1e1}.tabs dd.active a,.tabs .tab-title.active a{background-color:#fff;color:#222}.tabs.radius dd:first-child a,.tabs.radius .tab:first-child a{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.tabs.radius dd:last-child a,.tabs.radius .tab:last-child a{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.tabs.vertical dd,.tabs.vertical .tab-title{position:inherit;float:none;display:block;top:auto}.tabs-content{margin-bottom:1.5rem;width:100%}.tabs-content:before,.tabs-content:after{content:" ";display:table}.tabs-content:after{clear:both}.tabs-content>.content{display:none;float:left;padding:0.9375rem 0;width:100%}.tabs-content>.content.active{display:block;float:none}.tabs-content>.content.contained{padding:0.9375rem}.tabs-content.vertical{display:block}.tabs-content.vertical>.content{padding:0 0.9375rem}@media only screen and (min-width: 40.0625em){.tabs.vertical{float:left;margin:0;margin-bottom:1.25rem !important;max-width:20%;width:20%}.tabs-content.vertical{float:left;margin-left:-1px;max-width:80%;padding-left:1rem;width:80%}}.no-js .tabs-content>.content{display:block;float:none}ul.pagination{display:block;margin-left:-0.3125rem;min-height:1.5rem}ul.pagination li{color:#222;font-size:0.875rem;height:1.5rem;margin-left:0.3125rem}ul.pagination li a,ul.pagination li button{border-radius:3px;transition:background-color 300ms ease-out;background:none;color:#999;display:block;font-size:1em;font-weight:normal;line-height:inherit;padding:0.0625rem 0.625rem 0.0625rem}ul.pagination li:hover a,ul.pagination li a:focus,ul.pagination li:hover button,ul.pagination li button:focus{background:#e6e6e6}ul.pagination li.unavailable a,ul.pagination li.unavailable button{cursor:default;color:#999}ul.pagination li.unavailable:hover a,ul.pagination li.unavailable a:focus,ul.pagination li.unavailable:hover button,ul.pagination li.unavailable button:focus{background:transparent}ul.pagination li.current a,ul.pagination li.current button{background:#008CBA;color:#fff;cursor:default;font-weight:bold}ul.pagination li.current a:hover,ul.pagination li.current a:focus,ul.pagination li.current button:hover,ul.pagination li.current button:focus{background:#008CBA}ul.pagination li{display:block;float:left}.pagination-centered{text-align:center}.pagination-centered ul.pagination li{display:inline-block;float:none}.side-nav{display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;list-style-position:outside;list-style-type:none;margin:0;padding:0.875rem 0}.side-nav li{font-size:0.875rem;font-weight:normal;margin:0 0 0.4375rem 0}.side-nav li a:not(.button){color:#008CBA;display:block;margin:0;padding:0.4375rem 0.875rem}.side-nav li a:not(.button):hover,.side-nav li a:not(.button):focus{background:rgba(0,0,0,0.025);color:#1cc7ff}.side-nav li a:not(.button):active{color:#1cc7ff}.side-nav li.active>a:first-child:not(.button){color:#1cc7ff;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal}.side-nav li.divider{border-top:1px solid;height:0;list-style:none;padding:0;border-top-color:#e6e6e6}.side-nav li.heading{color:#008CBA;font-size:0.875rem;font-weight:bold;text-transform:uppercase}.accordion{margin-bottom:0}.accordion:before,.accordion:after{content:" ";display:table}.accordion:after{clear:both}.accordion .accordion-navigation,.accordion dd{display:block;margin-bottom:0 !important}.accordion .accordion-navigation.active>a,.accordion dd.active>a{background:#e8e8e8}.accordion .accordion-navigation>a,.accordion dd>a{background:#EFEFEF;color:#222;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem}.accordion .accordion-navigation>a:hover,.accordion dd>a:hover{background:#e3e3e3}.accordion .accordion-navigation>.content,.accordion dd>.content{display:none;padding:0.9375rem}.accordion .accordion-navigation>.content.active,.accordion dd>.content.active{background:#fff;display:block}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em) and (max-width: 64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em) and (max-width: 90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em) and (max-width: 120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em) and (max-width: 6249999.9375em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#008CBA;line-height:inherit;text-decoration:none}a:hover,a:focus{color:#0078a0}a img{border:none}p{font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:0.875rem;font-style:italic;line-height:1.35}h1,h2,h3,h4,h5,h6{color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.4;margin-bottom:0.5rem;margin-top:0.2rem;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#6f6f6f;font-size:60%;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4{font-size:1.125rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;height:0;margin:1.25rem 0 1.1875rem}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-family:inherit;font-size:1rem;line-height:1.6;list-style-position:outside;margin-bottom:1.25rem}ul{margin-left:1.1rem}ul.no-bullet{margin-left:0}ul.no-bullet li ul,ul.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ul.no-bullet{list-style:none}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #ddd}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:0.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #ddd;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width: 40.0625em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button span:after{border-color:#fff transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#fff transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;margin-left:-0.375rem;top:48%}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;margin-left:-0.375rem;top:48%}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.split.button.no-pip span:before{border-style:none}.split.button.no-pip span:after{border-style:none}.split.button.no-pip span>i{display:block;left:50%;margin-left:-0.28889em;margin-top:-0.48889em;position:absolute;top:50%}.reveal-modal-bg{background:#000;background:rgba(0,0,0,0.45);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1004;left:0}.reveal-modal{border-radius:3px;display:none;position:absolute;top:0;visibility:hidden;width:100%;z-index:1005;left:0;background-color:#fff;padding:1.875rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width: 40.0625em){.reveal-modal{left:0;margin:0 auto;max-width:62.5rem;right:0;width:80%}}@media only screen and (min-width: 40.0625em){.reveal-modal{top:6.25rem}}.reveal-modal.radius{border-radius:3px}.reveal-modal.round{border-radius:1000px}.reveal-modal.collapse{padding:0}@media only screen and (min-width: 40.0625em){.reveal-modal.tiny{left:0;margin:0 auto;max-width:62.5rem;right:0;width:30%}}@media only screen and (min-width: 40.0625em){.reveal-modal.small{left:0;margin:0 auto;max-width:62.5rem;right:0;width:40%}}@media only screen and (min-width: 40.0625em){.reveal-modal.medium{left:0;margin:0 auto;max-width:62.5rem;right:0;width:60%}}@media only screen and (min-width: 40.0625em){.reveal-modal.large{left:0;margin:0 auto;max-width:62.5rem;right:0;width:70%}}@media only screen and (min-width: 40.0625em){.reveal-modal.xlarge{left:0;margin:0 auto;max-width:62.5rem;right:0;width:95%}}.reveal-modal.full{height:100vh;height:100%;left:0;margin-left:0 !important;max-width:none !important;min-height:100vh;top:0}@media only screen and (min-width: 40.0625em){.reveal-modal.full{left:0;margin:0 auto;max-width:62.5rem;right:0;width:100%}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{color:#aaa;cursor:pointer;font-size:2.5rem;font-weight:bold;line-height:1;position:absolute;top:0.625rem;right:1.375rem}.has-tip{border-bottom:dotted 1px #ccc;color:#333;cursor:help;font-weight:bold}.has-tip:hover,.has-tip:focus{border-bottom:dotted 1px #003f54;color:#008CBA}.has-tip.tip-left,.has-tip.tip-right{float:none !important}.tooltip{background:#333;color:#fff;display:none;font-size:0.875rem;font-weight:normal;line-height:1.3;max-width:300px;padding:0.75rem;position:absolute;width:100%;z-index:1006;left:50%}.tooltip>.nub{border-color:transparent transparent #333 transparent;border:solid 5px;display:block;height:0;pointer-events:none;position:absolute;top:-10px;width:0;left:5px}.tooltip>.nub.rtl{left:auto;right:5px}.tooltip.radius{border-radius:3px}.tooltip.round{border-radius:1000px}.tooltip.round>.nub{left:2rem}.tooltip.opened{border-bottom:dotted 1px #003f54 !important;color:#008CBA !important}.tap-to-close{color:#777;display:block;font-size:0.625rem;font-weight:normal}@media only screen and (min-width: 40.0625em){.tooltip>.nub{border-color:transparent transparent #333 transparent;top:-10px}.tooltip.tip-top>.nub{border-color:#333 transparent transparent transparent;bottom:-10px;top:auto}.tooltip.tip-left,.tooltip.tip-right{float:none !important}.tooltip.tip-left>.nub{border-color:transparent transparent transparent #333;left:auto;margin-top:-5px;right:-10px;top:50%}.tooltip.tip-right>.nub{border-color:transparent #333 transparent transparent;left:-10px;margin-top:-5px;right:auto;top:50%}}.clearing-thumbs,[data-clearing]{list-style:none;margin-left:0;margin-bottom:0}.clearing-thumbs:before,.clearing-thumbs:after,[data-clearing]:before,[data-clearing]:after{content:" ";display:table}.clearing-thumbs:after,[data-clearing]:after{clear:both}.clearing-thumbs li,[data-clearing] li{float:left;margin-right:10px}.clearing-thumbs[class*="block-grid-"] li,[data-clearing][class*="block-grid-"] li{margin-right:0}.clearing-blackout{background:#333;height:100%;position:fixed;top:0;width:100%;z-index:998;left:0}.clearing-blackout .clearing-close{display:block}.clearing-container{height:100%;margin:0;overflow:hidden;position:relative;z-index:998}.clearing-touch-label{color:#aaa;font-size:.6em;left:50%;position:absolute;top:50%}.visible-img{height:95%;position:relative}.visible-img img{position:absolute;left:50%;top:50%;-webkit-transform:translateY(-50%) translateX(-50%);-moz-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);-o-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);max-height:100%;max-width:100%}.clearing-caption{background:#333;bottom:0;color:#ccc;font-size:0.875em;line-height:1.3;margin-bottom:0;padding:10px 30px 20px;position:absolute;text-align:center;width:100%;left:0}.clearing-close{color:#ccc;display:none;font-size:30px;line-height:1;padding-left:20px;padding-top:10px;z-index:999}.clearing-close:hover,.clearing-close:focus{color:#ccc}.clearing-assembled .clearing-container{height:100%}.clearing-assembled .clearing-container .carousel>ul{display:none}.clearing-feature li{display:none}.clearing-feature li.clearing-featured-img{display:block}@media only screen and (min-width: 40.0625em){.clearing-main-prev,.clearing-main-next{height:100%;position:absolute;top:0;width:40px}.clearing-main-prev>span,.clearing-main-next>span{border:solid 12px;display:block;height:0;position:absolute;top:50%;width:0}.clearing-main-prev>span:hover,.clearing-main-next>span:hover{opacity:.8}.clearing-main-prev{left:0}.clearing-main-prev>span{left:5px;border-color:transparent;border-right-color:#ccc}.clearing-main-next{right:0}.clearing-main-next>span{border-color:transparent;border-left-color:#ccc}.clearing-main-prev.disabled,.clearing-main-next.disabled{opacity:.3}.clearing-assembled .clearing-container .carousel{background:rgba(51,51,51,0.8);height:120px;margin-top:10px;text-align:center}.clearing-assembled .clearing-container .carousel>ul{display:inline-block;z-index:999;height:100%;position:relative;float:none}.clearing-assembled .clearing-container .carousel>ul li{clear:none;cursor:pointer;display:block;float:left;margin-right:0;min-height:inherit;opacity:.4;overflow:hidden;padding:0;position:relative;width:120px}.clearing-assembled .clearing-container .carousel>ul li.fix-height img{height:100%;max-width:none}.clearing-assembled .clearing-container .carousel>ul li a.th{border:none;box-shadow:none;display:block}.clearing-assembled .clearing-container .carousel>ul li img{cursor:pointer !important;width:100% !important}.clearing-assembled .clearing-container .carousel>ul li.visible{opacity:1}.clearing-assembled .clearing-container .carousel>ul li:hover{opacity:.8}.clearing-assembled .clearing-container .visible-img{background:#333;height:85%;overflow:hidden}.clearing-close{padding-left:0;padding-top:0;position:absolute;top:10px;right:20px}}.progress{background-color:#F6F6F6;border:1px solid #fff;height:1.5625rem;margin-bottom:0.625rem;padding:0.125rem}.progress .meter{background:#008CBA;display:block;height:100%}.progress.secondary .meter{background:#e7e7e7;display:block;height:100%}.progress.success .meter{background:#43AC6A;display:block;height:100%}.progress.alert .meter{background:#f04124;display:block;height:100%}.progress.radius{border-radius:3px}.progress.radius .meter{border-radius:2px}.progress.round{border-radius:1000px}.progress.round .meter{border-radius:999px}.sub-nav{display:block;margin:-0.25rem 0 1.125rem;overflow:hidden;padding-top:0.25rem;width:auto}.sub-nav dt{text-transform:uppercase}.sub-nav dt,.sub-nav dd,.sub-nav li{color:#999;float:left;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.875rem;font-weight:normal;margin-left:1rem;margin-bottom:0}.sub-nav dt a,.sub-nav dd a,.sub-nav li a{color:#999;padding:0.1875rem 1rem;text-decoration:none}.sub-nav dt a:hover,.sub-nav dd a:hover,.sub-nav li a:hover{color:#737373}.sub-nav dt.active a,.sub-nav dd.active a,.sub-nav li.active a{border-radius:3px;background:#008CBA;color:#fff;cursor:default;font-weight:normal;padding:0.1875rem 1rem}.sub-nav dt.active a:hover,.sub-nav dd.active a:hover,.sub-nav li.active a:hover{background:#0078a0}.joyride-list{display:none}.joyride-tip-guide{background:#333;color:#fff;display:none;font-family:inherit;font-weight:normal;position:absolute;top:0;width:95%;z-index:101;left:2.5%}.lt-ie9 .joyride-tip-guide{margin-left:-400px;max-width:800px;left:50%}.joyride-content-wrapper{padding:1.125rem 1.25rem 1.5rem;width:100%}.joyride-content-wrapper .button{margin-bottom:0 !important}.joyride-content-wrapper .joyride-prev-tip{margin-right:10px}.joyride-tip-guide .joyride-nub{border:10px solid #333;display:block;height:0;position:absolute;width:0;left:22px}.joyride-tip-guide .joyride-nub.top{border-color:#333;border-top-color:transparent !important;border-top-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-bottom-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{right:-20px}.joyride-tip-guide .joyride-nub.left{left:-20px}.joyride-tip-guide h1,.joyride-tip-guide h2,.joyride-tip-guide h3,.joyride-tip-guide h4,.joyride-tip-guide h5,.joyride-tip-guide h6{color:#fff;font-weight:bold;line-height:1.25;margin:0}.joyride-tip-guide p{font-size:0.875rem;line-height:1.3;margin:0 0 1.125rem 0}.joyride-timer-indicator-wrap{border:solid 1px #555;bottom:1rem;height:3px;position:absolute;width:50px;right:1.0625rem}.joyride-timer-indicator{background:#666;display:block;height:inherit;width:0}.joyride-close-tip{color:#777 !important;font-size:24px;font-weight:normal;line-height:.5 !important;position:absolute;text-decoration:none;top:10px;right:12px}.joyride-close-tip:hover,.joyride-close-tip:focus{color:#eee !important}.joyride-modal-bg{background:rgba(0,0,0,0.5);cursor:pointer;display:none;height:100%;position:fixed;top:0;width:100%;z-index:100;left:0}.joyride-expose-wrapper{background-color:#fff;border-radius:3px;box-shadow:0 0 15px #fff;position:absolute;z-index:102}.joyride-expose-cover{background:transparent;border-radius:3px;left:0;position:absolute;top:0;z-index:9999}@media only screen and (min-width: 40.0625em){.joyride-tip-guide{width:300px;left:inherit}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{border-color:#333 !important;border-right-color:transparent !important;border-bottom-color:transparent !important;border-top-color:transparent !important;left:auto;right:-20px;top:22px}.joyride-tip-guide .joyride-nub.left{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-top-color:transparent !important;left:-20px;right:auto;top:22px}}.label{display:inline-block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1;margin-bottom:auto;position:relative;text-align:center;text-decoration:none;white-space:nowrap;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008CBA;color:#fff}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#fff}.label.warning{background-color:#f08a24;color:#fff}.label.success{background-color:#43AC6A;color:#fff}.label.secondary{background-color:#e7e7e7;color:#333}.label.info{background-color:#a0d3e8;color:#333}.off-canvas-wrap{-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden}.off-canvas-wrap.move-right,.off-canvas-wrap.move-left{min-height:100%;-webkit-overflow-scrolling:touch}.inner-wrap{position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.inner-wrap:before,.inner-wrap:after{content:" ";display:table}.inner-wrap:after{clear:both}.tab-bar{-webkit-backface-visibility:hidden;background:#333;color:#fff;height:2.8125rem;line-height:2.8125rem;position:relative}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4,.tab-bar h5,.tab-bar h6{color:#fff;font-weight:bold;line-height:2.8125rem;margin:0}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4{font-size:1.125rem}.left-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-right:solid 1px #1a1a1a;left:0}.right-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-left:solid 1px #1a1a1a;right:0}.tab-bar-section{height:2.8125rem;padding:0 0.625rem;position:absolute;text-align:center;top:0}.tab-bar-section.left{text-align:left}.tab-bar-section.right{text-align:right}.tab-bar-section.left{left:0;right:2.8125rem}.tab-bar-section.right{left:2.8125rem;right:0}.tab-bar-section.middle{left:2.8125rem;right:2.8125rem}.tab-bar .menu-icon{color:#fff;display:block;height:2.8125rem;padding:0;position:relative;text-indent:2.1875rem;transform:translate3d(0, 0, 0);width:2.8125rem}.tab-bar .menu-icon span::after{content:"";display:block;height:0;position:absolute;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:1rem}.tab-bar .menu-icon span:hover:after{box-shadow:0 0 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3}.left-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.left-off-canvas-menu *{-webkit-backface-visibility:hidden}.right-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0}.right-off-canvas-menu *{-webkit-backface-visibility:hidden}ul.off-canvas-list{list-style-type:none;margin:0;padding:0}ul.off-canvas-list li label{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;display:block;font-size:0.75rem;font-weight:bold;margin:0;padding:0.3rem 0.9375rem;text-transform:uppercase}ul.off-canvas-list li a{border-bottom:1px solid #262626;color:rgba(255,255,255,0.7);display:block;padding:0.66667rem;transition:background 300ms ease}ul.off-canvas-list li a:hover{background:#242424}ul.off-canvas-list li a:active{background:#242424}.move-right>.inner-wrap{-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate(15.625rem, 0);-ms-transform:translate3d(15.625rem, 0, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0)}.move-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-left>.inner-wrap{-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate(-15.625rem, 0);-ms-transform:translate3d(-15.625rem, 0, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0)}.move-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap .left-off-canvas-menu,.offcanvas-overlap .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-left .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-right .left-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.no-csstransforms .left-off-canvas-menu{left:-15.625rem}.no-csstransforms .right-off-canvas-menu{right:-15.625rem}.no-csstransforms .move-left>.inner-wrap{right:15.625rem}.no-csstransforms .move-right>.inner-wrap{left:15.625rem}.left-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.left-submenu *{-webkit-backface-visibility:hidden}.left-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.left-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.left-submenu .back>a:before{content:"\AB";margin-right:.5rem;display:inline}.left-submenu.move-right,.left-submenu.offcanvas-overlap-right,.left-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.right-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.right-submenu *{-webkit-backface-visibility:hidden}.right-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.right-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.right-submenu .back>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-submenu.move-left,.right-submenu.offcanvas-overlap-left,.right-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before{content:"\AB";margin-right:.5rem;display:inline}.f-dropdown{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:2px;max-width:200px}.f-dropdown.open{display:block}.f-dropdown>*:first-child{margin-top:0}.f-dropdown>*:last-child{margin-bottom:0}.f-dropdown:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent #fff transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89}.f-dropdown:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent #ccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88}.f-dropdown.right:before{left:auto;right:10px}.f-dropdown.right:after{left:auto;right:9px}.f-dropdown.drop-right{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:2px;max-width:200px}.f-dropdown.drop-right.open{display:block}.f-dropdown.drop-right>*:first-child{margin-top:0}.f-dropdown.drop-right>*:last-child{margin-bottom:0}.f-dropdown.drop-right:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent #fff transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89}.f-dropdown.drop-right:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent #ccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88}.f-dropdown.drop-left{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:-2px;max-width:200px}.f-dropdown.drop-left.open{display:block}.f-dropdown.drop-left>*:first-child{margin-top:0}.f-dropdown.drop-left>*:last-child{margin-bottom:0}.f-dropdown.drop-left:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #fff;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89}.f-dropdown.drop-left:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #ccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88}.f-dropdown.drop-top{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-left:0;margin-top:-2px;max-width:200px}.f-dropdown.drop-top.open{display:block}.f-dropdown.drop-top>*:first-child{margin-top:0}.f-dropdown.drop-top>*:last-child{margin-bottom:0}.f-dropdown.drop-top:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:#fff transparent transparent transparent;border-top-style:solid;bottom:-12px;position:absolute;top:auto;left:10px;right:auto;z-index:89}.f-dropdown.drop-top:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:#ccc transparent transparent transparent;border-top-style:solid;bottom:-14px;position:absolute;top:auto;left:9px;right:auto;z-index:88}.f-dropdown li{cursor:pointer;font-size:0.875rem;line-height:1.125rem;margin:0}.f-dropdown li:hover,.f-dropdown li:focus{background:#eee}.f-dropdown li.radius{border-radius:3px}.f-dropdown li a{display:block;padding:0.5rem;color:#555}.f-dropdown.content{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;padding:1.25rem;width:100%;z-index:89;max-width:200px}.f-dropdown.content.open{display:block}.f-dropdown.content>*:first-child{margin-top:0}.f-dropdown.content>*:last-child{margin-bottom:0}.f-dropdown.tiny{max-width:200px}.f-dropdown.small{max-width:300px}.f-dropdown.medium{max-width:500px}.f-dropdown.large{max-width:800px}.f-dropdown.mega{width:100% !important;max-width:100% !important}.f-dropdown.mega.open{left:0 !important}table{background:#fff;border:solid 1px #ddd;margin-bottom:1.25rem;table-layout:auto}table caption{background:transparent;color:#222;font-size:1rem;font-weight:bold}table thead{background:#F5F5F5}table thead tr th,table thead tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tfoot{background:#F5F5F5}table tfoot tr th,table tfoot tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tr th,table tr td{color:#222;font-size:0.875rem;padding:0.5625rem 0.625rem;text-align:left}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#F9F9F9}table thead tr th,table tfoot tr th,table tfoot tr td,table tbody tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.125rem}.range-slider{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:block;height:1rem;width:100%;background:#FAFAFA}.range-slider.vertical-range{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:inline-block;height:12.5rem;width:1rem}.range-slider.vertical-range .range-slider-handle{bottom:-10.5rem;margin-left:-0.5rem;margin-top:0;position:absolute}.range-slider.vertical-range .range-slider-active-segment{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-top-left-radius:initial;bottom:0;height:auto;width:0.875rem}.range-slider.radius{background:#FAFAFA;border-radius:3px}.range-slider.radius .range-slider-handle{background:#008CBA;border-radius:3px}.range-slider.radius .range-slider-handle:hover{background:#007ba4}.range-slider.round{background:#FAFAFA;border-radius:1000px}.range-slider.round .range-slider-handle{background:#008CBA;border-radius:1000px}.range-slider.round .range-slider-handle:hover{background:#007ba4}.range-slider.disabled,.range-slider[disabled]{background:#FAFAFA;cursor:not-allowed;opacity:0.7}.range-slider.disabled .range-slider-handle,.range-slider[disabled] .range-slider-handle{background:#008CBA;cursor:default;opacity:0.7}.range-slider.disabled .range-slider-handle:hover,.range-slider[disabled] .range-slider-handle:hover{background:#007ba4}.range-slider-active-segment{background:#e5e5e5;border-bottom-left-radius:inherit;border-top-left-radius:inherit;display:inline-block;height:0.875rem;position:absolute}.range-slider-handle{border:1px solid none;cursor:pointer;display:inline-block;height:1.375rem;position:absolute;top:-0.3125rem;width:2rem;z-index:1;-ms-touch-action:manipulation;touch-action:manipulation;background:#008CBA}.range-slider-handle:hover{background:#007ba4}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;float:left;height:auto;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{list-style:none;width:100%}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{list-style:none;width:50%}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{list-style:none;width:33.33333%}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{list-style:none;width:25%}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{list-style:none;width:20%}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{list-style:none;width:16.66667%}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{list-style:none;width:14.28571%}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{list-style:none;width:12.5%}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{list-style:none;width:11.11111%}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{list-style:none;width:10%}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{list-style:none;width:9.09091%}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{list-style:none;width:8.33333%}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.0625em){.medium-block-grid-1>li{list-style:none;width:100%}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{list-style:none;width:50%}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{list-style:none;width:33.33333%}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{list-style:none;width:25%}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{list-style:none;width:20%}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{list-style:none;width:16.66667%}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{list-style:none;width:14.28571%}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{list-style:none;width:12.5%}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{list-style:none;width:11.11111%}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{list-style:none;width:10%}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{list-style:none;width:9.09091%}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{list-style:none;width:8.33333%}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.0625em){.large-block-grid-1>li{list-style:none;width:100%}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{list-style:none;width:50%}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{list-style:none;width:33.33333%}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{list-style:none;width:25%}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{list-style:none;width:20%}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{list-style:none;width:16.66667%}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{list-style:none;width:14.28571%}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{list-style:none;width:12.5%}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{list-style:none;width:11.11111%}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{list-style:none;width:10%}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{list-style:none;width:9.09091%}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{list-style:none;width:8.33333%}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.flex-video{height:0;margin-bottom:1rem;overflow:hidden;padding-bottom:67.5%;padding-top:1.5625rem;position:relative}.flex-video.widescreen{padding-bottom:56.34%}.flex-video.vimeo{padding-top:0}.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{height:100%;position:absolute;top:0;width:100%;left:0}.keystroke,kbd{background-color:#ededed;border-color:#ddd;color:#222;border-style:solid;border-width:1px;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;margin:0;padding:0.125rem 0.25rem 0;border-radius:3px}.switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{background:#ddd;color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;text-indent:100%;width:4rem;height:2rem;transition:left 0.15s ease-out}.switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.switch input+label{margin-left:0;margin-right:0}.switch label:after{background:#fff;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:translate3d(0, 0, 0);transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.switch input:checked+label{background:#008CBA}.switch input:checked+label:after{left:2.25rem}.switch label{height:2rem;width:4rem}.switch label:after{height:1.5rem;width:1.5rem}.switch input:checked+label:after{left:2.25rem}.switch label{color:transparent;background:#ddd}.switch label:after{background:#fff}.switch input:checked+label{background:#008CBA}.switch.large label{height:2.5rem;width:5rem}.switch.large label:after{height:2rem;width:2rem}.switch.large input:checked+label:after{left:2.75rem}.switch.small label{height:1.75rem;width:3.5rem}.switch.small label:after{height:1.25rem;width:1.25rem}.switch.small input:checked+label:after{left:2rem}.switch.tiny label{height:1.5rem;width:3rem}.switch.tiny label:after{height:1rem;width:1rem}.switch.tiny input:checked+label:after{left:1.75rem}.switch.radius label{border-radius:4px}.switch.radius label:after{border-radius:3px}.switch.round{border-radius:1000px}.switch.round label{border-radius:2rem}.switch.round label:after{border-radius:2rem}@media only screen{.show-for-small-only,.show-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.hide-for-small-only,.hide-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.visible-for-small-only,.visible-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.hidden-for-small-only,.hidden-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.show-for-small-only,table.show-for-small-up,table.show-for-small,table.show-for-small-down,table.hide-for-medium-only,table.hide-for-medium-up,table.hide-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.show-for-small-only,thead.show-for-small-up,thead.show-for-small,thead.show-for-small-down,thead.hide-for-medium-only,thead.hide-for-medium-up,thead.hide-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.show-for-small-only,tbody.show-for-small-up,tbody.show-for-small,tbody.show-for-small-down,tbody.hide-for-medium-only,tbody.hide-for-medium-up,tbody.hide-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.show-for-small-only,tr.show-for-small-up,tr.show-for-small,tr.show-for-small-down,tr.hide-for-medium-only,tr.hide-for-medium-up,tr.hide-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.show-for-small-only,td.show-for-small-only,th.show-for-small-up,td.show-for-small-up,th.show-for-small,td.show-for-small,th.show-for-small-down,td.show-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.hide-for-medium-up,td.hide-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 40.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.show-for-medium-only,table.show-for-medium-up,table.show-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.show-for-medium-only,thead.show-for-medium-up,thead.show-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.show-for-medium-only,tbody.show-for-medium-up,tbody.show-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.show-for-medium-only,tr.show-for-medium-up,tr.show-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.show-for-medium-only,td.show-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.show-for-medium,td.show-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 64.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.show-for-large-only,table.show-for-large-up,table.show-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.show-for-large-only,thead.show-for-large-up,thead.show-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.show-for-large-only,tbody.show-for-large-up,tbody.show-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.show-for-large-only,tr.show-for-large-up,tr.show-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.show-for-large-only,td.show-for-large-only,th.show-for-large-up,td.show-for-large-up,th.show-for-large,td.show-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 90.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.show-for-xlarge-only,table.show-for-xlarge-up,table.show-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.show-for-xlarge-only,thead.show-for-xlarge-up,thead.show-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.show-for-xlarge-only,tbody.show-for-xlarge-up,tbody.show-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.show-for-xlarge-only,tr.show-for-xlarge-up,tr.show-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.show-for-xlarge-only,td.show-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.show-for-xlarge,td.show-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 120.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.hide-for-xlarge-only,.show-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.show-for-xlarge-only,.hide-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.hidden-for-xlarge-only,.visible-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.visible-for-xlarge-only,.hidden-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.hide-for-xlarge-only,table.show-for-xlarge-up,table.hide-for-xlarge,table.hide-for-xlarge-down,table.show-for-xxlarge-only,table.show-for-xxlarge-up,table.show-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.hide-for-xlarge-only,thead.show-for-xlarge-up,thead.hide-for-xlarge,thead.hide-for-xlarge-down,thead.show-for-xxlarge-only,thead.show-for-xxlarge-up,thead.show-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.hide-for-xlarge-only,tbody.show-for-xlarge-up,tbody.hide-for-xlarge,tbody.hide-for-xlarge-down,tbody.show-for-xxlarge-only,tbody.show-for-xxlarge-up,tbody.show-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.hide-for-xlarge-only,tr.show-for-xlarge-up,tr.hide-for-xlarge,tr.hide-for-xlarge-down,tr.show-for-xxlarge-only,tr.show-for-xxlarge-up,tr.show-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.hide-for-xlarge-down,td.hide-for-xlarge-down,th.show-for-xxlarge-only,td.show-for-xxlarge-only,th.show-for-xxlarge-up,td.show-for-xxlarge-up,th.show-for-xxlarge,td.show-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.hide-for-landscape,table.show-for-portrait{display:table !important}thead.hide-for-landscape,thead.show-for-portrait{display:table-header-group !important}tbody.hide-for-landscape,tbody.show-for-portrait{display:table-row-group !important}tr.hide-for-landscape,tr.show-for-portrait{display:table-row !important}td.hide-for-landscape,td.show-for-portrait,th.hide-for-landscape,th.show-for-portrait{display:table-cell !important}@media only screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.show-for-landscape,table.hide-for-portrait{display:table !important}thead.show-for-landscape,thead.hide-for-portrait{display:table-header-group !important}tbody.show-for-landscape,tbody.hide-for-portrait{display:table-row-group !important}tr.show-for-landscape,tr.hide-for-portrait{display:table-row !important}td.show-for-landscape,td.hide-for-portrait,th.show-for-landscape,th.hide-for-portrait{display:table-cell !important}}@media only screen and (orientation: portrait){.show-for-portrait,.hide-for-landscape{display:inherit !important}.hide-for-portrait,.show-for-landscape{display:none !important}table.show-for-portrait,table.hide-for-landscape{display:table !important}thead.show-for-portrait,thead.hide-for-landscape{display:table-header-group !important}tbody.show-for-portrait,tbody.hide-for-landscape{display:table-row-group !important}tr.show-for-portrait,tr.hide-for-landscape{display:table-row !important}td.show-for-portrait,td.hide-for-landscape,th.show-for-portrait,th.hide-for-landscape{display:table-cell !important}}.show-for-touch{display:none !important}.hide-for-touch{display:inherit !important}.touch .show-for-touch{display:inherit !important}.touch .hide-for-touch{display:none !important}table.hide-for-touch{display:table !important}.touch table.show-for-touch{display:table !important}thead.hide-for-touch{display:table-header-group !important}.touch thead.show-for-touch{display:table-header-group !important}tbody.hide-for-touch{display:table-row-group !important}.touch tbody.show-for-touch{display:table-row-group !important}tr.hide-for-touch{display:table-row !important}.touch tr.show-for-touch{display:table-row !important}td.hide-for-touch{display:table-cell !important}.touch td.show-for-touch{display:table-cell !important}th.hide-for-touch{display:table-cell !important}.touch th.show-for-touch{display:table-cell !important}.show-for-sr{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus:focus,.show-on-focus:active{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.print-only{display:none !important}@media print{*{background:transparent !important;box-shadow:none !important;color:#000 !important;text-shadow:none !important}.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.hide-on-print{display:none !important}.print-only{display:block !important}.hide-for-print{display:none !important}.show-for-print{display:inherit !important}}@media print{.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}}@media not print{.show-for-print{display:none !important}}
diff --git a/production/example_apps/shared_calendar/webroot/css/cake.css b/production/example_apps/shared_calendar/webroot/css/cake.css
new file mode 100644 (file)
index 0000000..10841c8
--- /dev/null
@@ -0,0 +1,525 @@
+.disabled a,
+a.disabled {
+    pointer-events: none;
+}
+
+a:hover {
+    color: #15848F;
+}
+
+a {
+    color: #1798A5;
+}
+
+.side-nav li a:not(.button) {
+    color: #15848F;
+}
+
+.side-nav li a:not(.button):hover {
+    color: #15848F;
+}
+
+header {
+    background-color: #D33C44;
+    color: #ffffff;
+    font-size: 30px;
+    height: 84px;
+    line-height: 64px;
+    padding: 16px 0px;
+    box-shadow: 0px 1px rgba(0, 0, 0, 0.24);
+}
+
+header .header-title {
+    padding-left:80px
+}
+
+legend {
+    color:#15848F;
+}
+
+.row {
+    max-width: 80rem;
+}
+
+.actions.columns {
+    margin-top:1rem;
+    border-left: 5px solid #15848F;
+    padding-left: 15px;
+    padding: 32px 20px;
+}
+
+.actions.columns h3 {
+    color:#15848F;
+}
+
+.related table {
+    border: 0;
+    width: 100%;
+    table-layout: fixed;
+}
+
+.index table thead {
+    height: 3.5rem;
+}
+
+.header-help {
+    float: right;
+    margin-right:2rem;
+    margin-top: -80px;
+    font-size:16px;
+}
+
+.header-help span {
+    font-weight: normal;
+    text-align: center;
+    text-decoration: none;
+    line-height: 1;
+    white-space: nowrap;
+    display: inline-block;
+    padding: 0.25rem 0.5rem 0.375rem;
+    font-size: 0.8rem;
+    background-color: #0097a7;
+    color: #FFF;
+    border-radius: 1000px;
+}
+
+.header-help a {
+    color: #fff;
+}
+
+ul.pagination li a {
+    color: rgba(0, 0 ,0 , 0.54);
+}
+
+ul.pagination li.active a {
+    background-color: #DCE47E;
+    color: #FFF;
+    font-weight: bold;
+    cursor: default;
+}
+ul.pagination .disabled:hover a {
+    background: none;
+}
+
+.paginator {
+    text-align: center;
+}
+
+.paginator ul.pagination li {
+    float: none;
+    display: inline-block;
+}
+
+.paginator p {
+    text-align: right;
+    color: rgba(0, 0 ,0 , 0.54);
+}
+
+.asc:after {
+    content: " \2193";
+}
+.desc:after {
+    content: " \2191";
+}
+
+.form .error-message {
+    display: block;
+    padding: 0.375rem 0.5625rem 0.5625rem;
+    margin-top: -1px;
+    margin-bottom: 1rem;
+    font-size: 0.75rem;
+    font-weight: normal;
+    font-style: italic;
+    color: rgba(0, 0, 0, 0.54);
+}
+
+.required > label {
+    font-weight: bold;
+}
+.required > label:after {
+    content: ' *';
+    color: #C3232D;
+}
+
+select[multiple] {
+    min-height:150px;
+    background: none;
+}
+input[type=checkbox],
+input[type=radio] {
+    margin-right: 0.5em;
+}
+
+.date select,
+.time select,
+.datetime select {
+    display: inline;
+    width: auto;
+    margin-right: 10px;
+}
+
+.error label,
+.error label.error {
+    color: #C3232D;
+}
+
+.view h2 {
+    color: #6F6F6F;
+}
+
+.view .columns.strings {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+}
+
+.view .numbers {
+    background-color: #B7E3EC;
+    color: #FFF;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right: 0.7rem;
+}
+
+.view .columns.dates {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+    background-color:#DCE47E;
+    color: #fff;
+}
+
+.view .columns.booleans {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+    background-color: #8D6E65;
+    color: #fff;
+}
+
+.view .strings p {
+    border-bottom: 1px solid #eee;
+}
+.view .numbers .subheader, .view .dates .subheader {
+    color:#747474;
+}
+.view .booleans .subheader {
+    color: #E9E9E9
+}
+
+.view .texts .columns {
+    margin-top:1.2rem;
+    border-bottom: 1px solid #eee;
+}
+
+/** Notices and Errors **/
+.cake-error,
+.cake-debug,
+.notice,
+p.error,
+p.notice {
+    display: block;
+    clear: both;
+    background-repeat: repeat-x;
+    margin-bottom: 18px;
+    padding: 7px 14px;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+}
+
+.cake-debug,
+.notice,
+p.notice {
+    color: #000000;
+    background: #ffcc00;
+}
+
+.cake-error,
+p.error {
+    color: #fff;
+    background: #C3232D;
+}
+
+pre {
+    background: none repeat scroll 0% 0% #FFF;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin: 15px 0px;
+    color: rgba(0, 0 ,0 , 0.74);
+    padding:5px;
+}
+
+.cake-error .cake-stack-trace {
+    margin-top:10px;
+}
+
+.cake-stack-trace code {
+    background: inherit;
+    border:0;
+}
+
+.cake-code-dump .code-highlight {
+    display: block;
+    background-color: #FFC600;
+}
+
+.cake-error a,
+.cake-error a:hover {
+    color:#fff;
+    text-decoration: underline;
+}
+
+.checks {
+    padding:30px;
+    color: #626262;
+    background-color: #B7E3EC;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-bottom: 2em;
+}
+
+.checks h4 {
+    margin-bottom: 1.5rem;
+}
+
+.checks hr {
+    border: 0;
+    height: 0;
+    border-top: 1px solid rgba(0, 0, 0, 0.1);
+    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.checks .success,
+.checks .problem {
+    margin-left: 10px;
+}
+.checks .success:before,
+.checks .problem:before {
+    line-height: 0px;
+    font-size: 28px;
+    height: 12px;
+    width: 12px;
+    border-radius: 15px;
+    text-align: center;
+    vertical-align: middle;
+    display: inline-block;
+    position: relative;
+    left: -11px;
+}
+
+.checks .success:before {
+    content: "✓";
+    color: green;
+    margin-right: 9px;
+}
+
+.checks .problem:before {
+    content: "✘";
+    color: red;
+    margin-right: 9px;
+}
+
+.top-bar.expanded .title-area {
+    background: #01545b;
+}
+
+.top-bar.expanded, .top-bar,.top-bar-section ul li,.top-bar-section li:not(.has-form) a:not(.button) {
+    background: #116d76;
+}
+
+.top-bar-section li:not(.has-form) a:not(.button):hover {
+    background-color: #308e97;
+    background: #308e97;
+}
+
+.side-nav li.heading {
+    color: #1798A5;
+    font-size: 0.875rem;
+    font-weight: bold;
+    text-transform: uppercase;
+    padding: 0.4375rem 0.875rem;
+}
+
+#actions-sidebar {
+    background: #fafafa;
+}
+
+.index table {
+    margin-top: 0rem;
+    border: 0;
+    width: 100%;
+    table-layout: fixed;
+}
+
+table {
+    background: #fff;
+    margin-bottom: 1.25rem;
+    border: none;
+    table-layout: fixed;
+    width: 100%;
+}
+
+table thead {
+    background: none;
+}
+
+table tr {
+    border-bottom: 1px solid #ebebec;
+}
+
+table thead tr {
+    border-bottom: 1px solid #1798A5;
+}
+
+table tr th {
+    padding: 0.5625rem 0.625rem;
+    font-size: 0.875rem;
+    color: #1798A5;
+    text-align: left;
+    border-bottom: 2px solid #1798A5;
+}
+
+table tr:nth-of-type(even) {
+    background: none;
+}
+
+fieldset {
+    border: none;
+    padding: 1.25rem;
+    margin: 1.125rem 0;
+}
+
+fieldset legend {
+    border-bottom: 2px solid #1798A5;
+    width: 100%;
+    line-height: 2rem;
+}
+
+.form button[type="submit"] {
+    float: right;
+    text-transform: uppercase;
+    box-shadow: none;
+}
+
+.form button:hover, .form button:focus {
+    background: #BE840B;
+    box-shadow: none;
+}
+
+button {
+    background: #966600;
+}
+
+div.message {
+    text-align: center;
+    cursor: pointer;
+    display: block;
+    font-weight: normal;
+    padding: 0 1.5rem 0 1.5rem;
+    transition: height 300ms ease-out 0s;
+    background-color: #a0d3e8;
+    color: #626262;
+    top: 15px;
+    right: 15px;
+    z-index: 999;
+    overflow: hidden;
+    height: 50px;
+    line-height: 2.5em;
+    box-radius: 5px;
+}
+
+div.message:before {
+    line-height: 0px;
+    font-size: 20px;
+    height: 12px;
+    width: 12px;
+    border-radius: 15px;
+    text-align: center;
+    vertical-align: middle;
+    display: inline-block;
+    position: relative;
+    left: -11px;
+    background-color: #FFF;
+    padding: 12px 14px 12px 10px;
+    content: "i";
+    color: #a0d3e8;
+}
+
+div.message.error {
+    background-color: #C3232D;
+    color: #FFF;
+}
+
+div.message.error:before {
+    padding: 11px 16px 14px 7px;
+    color: #C3232D;
+    content: "x";
+}
+div.message.hidden {
+    height: 0;
+}
+
+
+.vertical-table th {
+    padding: 0.5625rem 0.625rem;
+    font-size: 0.875rem;
+    color: #1798A5;
+    border: none;
+    text-align: left;
+}
+
+.vertical-table {
+    vertical-align: middle;
+}
+
+.vertical-table td {
+    text-align: right;
+}
+
+.content {
+    padding: 2rem;
+}
+
+/* Use 'one true layout' methods to get equal height columns */
+.container {
+    overflow: hidden;
+    min-height: 92%; /* full height almost always */
+}
+
+/* Force equal height by overflowing */
+.content,
+#actions-sidebar {
+    margin-bottom: -99999px;
+    padding-bottom: 99999px;
+}
+@media(max-width: 640px) {
+    #actions-sidebar {
+        padding-bottom: 2rem;
+        margin-bottom: 0;
+    }
+}
+
+.content h3 {
+    color: #be140b;
+    padding-bottom: 0.5rem;
+    margin-bottom: 20px;
+}
+
+.content h4 {
+    color: #be140b;
+    padding-bottom: 0.5rem;
+    margin-bottom: 20px;
+    border-bottom: 2px solid #be140b;
+}
+
+.content .related h4 {
+    color: #4d8f97;
+    padding-bottom: 0.5rem;
+    margin-top: 20px;
+    margin-bottom: 10px;
+    border-bottom: 0px;
+}
+
+table td {
+    vertical-align: top;
+    word-break: break-all;
+}
diff --git a/production/example_apps/shared_calendar/webroot/css/home.css b/production/example_apps/shared_calendar/webroot/css/home.css
new file mode 100644 (file)
index 0000000..d1db778
--- /dev/null
@@ -0,0 +1,250 @@
+@font-face {
+    font-family: 'cakefont';
+    src: url('../font/cakedingbats-webfont.eot');
+    src: url('../font/cakedingbats-webfont.eot?#iefix') format('embedded-opentype'),
+    url('../font/cakedingbats-webfont.woff2') format('woff2'),
+    url('../font/cakedingbats-webfont.woff') format('woff'),
+    url('../font/cakedingbats-webfont.ttf') format('truetype'),
+    url('../font/cakedingbats-webfont.svg#cake_dingbatsregular') format('svg');
+    font-weight: normal;
+    font-style: normal;
+}
+
+.home {
+    font-family: 'Roboto', sans-serif;
+    font-size: 14px;
+    line-height: 27px;
+    color: #404041;
+}
+
+.fredmenu {
+       font-size: 28px;
+       text-align: center;
+}
+
+.fredmenu li {
+       font-size: 28px;
+}
+
+a {
+    color: #0071BC;
+    -webkit-transition: all 0.2s;
+    -moz-transition: all 0.2s;
+    -ms-transition: all 0.2s;
+    -o-transition: all 0.2s;
+    transition: all 0.2s;
+}
+
+a:hover, a:active {
+    color: #d33d44;
+    -webkit-transition: all 0.2s;
+    -moz-transition: all 0.2s;
+    -ms-transition: all 0.2s;
+    -o-transition: all 0.2s;
+    transition: all 0.2s;
+}
+
+ul, ol, dl, p {
+    font-size: 0.85rem;
+}
+
+p {
+    line-height: 2;
+}
+
+header {
+    height: auto;
+    line-height: 1em;
+    padding: 0;
+    box-shadow: none;
+}
+
+header.row {
+    margin-bottom: 30px;
+}
+
+header .header-image {
+    text-align: center;
+    padding: 64px 0;
+    background: #b060f1;
+}
+
+header .header-title {
+    padding: 0;
+    display: block;
+    background: #404041;
+    text-align: center;
+}
+
+header .header-title h1 {
+    font-family: 'Raleway', sans-serif;
+    margin: 0;
+    font-style: italic;
+    font-size: 18px;
+    font-weight: 500;
+    padding: 18px 30px;
+    color: #DEDED5;
+}
+
+header h1 {
+    color: #fff;
+}
+
+h3, h4 {
+    font-family: 'Roboto', sans-serif;
+    font-size: 27px;
+    line-height: 30px;
+    font-weight: 300;
+    -webkit-font-smoothing: antialiased;
+    margin-top: 0;
+    margin-bottom: 20px;
+}
+
+.more {
+    color: #ffffff;
+    background-color: #d33d44;
+    padding: 15px;
+    margin-top: 10px;
+}
+
+.row {
+    max-width: 1000px;
+}
+
+.alert {
+    background-color: #fff9e1;
+    font-size: 12px;
+    text-align: center;
+    display: block;
+    padding: 12px;
+    border-bottom: 2px solid #ffcf06;
+}
+
+.alert {
+    background-color: #fff9e1;
+    font-size: 12px;
+    display: block;
+    padding: 12px;
+    border-bottom: 2px solid #ffcf06;
+    margin-bottom: 30px;
+    color: #404041;
+}
+
+.alert p {
+    margin: 0;
+    font-size: 12px;
+    line-height: 1.4;
+}
+
+.alert p:before {
+    color: #ffcf06;
+    content: "\0055";
+    font-family: 'cakefont', sans-serif;
+    font-size: 21px;
+    margin-left: -0.8em;
+    width: 2.3em;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    padding: 0 10px 0 15px;
+    vertical-align: -2px;
+}
+
+.alert ul {
+    margin: 0;
+    font-size: 12px;
+}
+
+.alert.url-rewriting {
+    background-color: #F0F0F0;
+    border-color: #cccccc;
+    display: none;
+}
+
+.text-center {
+    text-align: center;
+}
+
+ul {
+    list-style-type: none;
+    margin: 0 0 30px 0;
+}
+
+li {
+    padding-left: 1.8em;
+}
+
+ul li ul, ul li ul li {
+    margin: 0;
+    padding: 0;
+}
+
+.bullet:before {
+    font-family: 'cakefont', sans-serif;
+    font-size: 18px;
+    display: inline-block;
+    margin-left: -1.3em;
+    width: 1.2em;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    vertical-align: -1px;
+}
+
+.success:before {
+    color: #88c671;
+    content: "\0056";
+}
+
+.problem:before {
+    color: #d33d44;
+    content: "\0057";
+}
+
+.cutlery:before {
+    color: #404041;
+    content: "\0059";
+}
+
+.book:before {
+    color: #404041;
+    content: "\0042";
+    width: 1.7em;
+}
+
+hr {
+    border-bottom: 1px solid #e7e7e7;
+    border-top: 0;
+    margin-bottom: 35px;
+    margin-left: 30px;
+    margin-right: 30px;
+}
+
+
+.icon {
+    color: #404041;
+    font-style: normal;
+    font-family: 'cakefont', sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+.icon.support {
+    font-size: 60px;
+}
+.icon.docs {
+    font-size: 57px;
+}
+.icon.training {
+    font-size: 39px;
+}
+
+@media (min-width: 768px) {
+    .columns {
+        padding-left: 30px;
+        padding-right: 30px;
+    }
+}
+
+@media (min-width: 992px) {
+    header.row {
+        max-width: 940px;
+    }
+}
diff --git a/production/example_apps/shared_calendar/webroot/favicon.ico b/production/example_apps/shared_calendar/webroot/favicon.ico
new file mode 100644 (file)
index 0000000..49a060f
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/favicon.ico differ
diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot
new file mode 100644 (file)
index 0000000..e8605d9
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot differ
diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg
new file mode 100644 (file)
index 0000000..d1e0c98
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="cake_dingbatsregular" horiz-adv-x="986" >
+<font-face units-per-em="1972" ascent="1479" descent="-493" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph unicode="&#xd;" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="0" />
+<glyph unicode=" " />
+<glyph unicode="A" horiz-adv-x="1653" d="M1614 22q19 -20 28.5 -44t9.5 -49q0 -26 -9.5 -49.5t-28.5 -42.5t-43 -28.5t-49 -9.5q-26 0 -50 9t-43 29l-331 332q-88 -60 -187.5 -91.5t-207.5 -31.5q-142 0 -269.5 53t-227.5 153t-153 227.5t-53 269.5t53 269.5t153 227.5t227.5 153t269.5 53q141 0 268.5 -53 t227.5 -153t153 -227.5t53 -269.5q0 -108 -31 -208t-91 -187zM391 437q63 -63 143 -96t169 -33q88 0 168 33t143 96t96 143t33 169t-33 169t-96 143t-143 96t-168 33q-89 0 -169 -33t-143 -96t-96 -143t-33 -169t33 -169t96 -143z" />
+<glyph unicode="B" horiz-adv-x="2681" d="M2621 548q8 4 17 4q25 0 37 -23q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-8 -4 -18 -4q-4 0 -12 2l-1191 381q-1 0 -3 2q-2 0 -3 1t-3 2q-4 2 -6.5 5t-5.5 6q-1 2 -13.5 23.5t-26.5 58.5t-26 87t-12 108q0 36 4.5 75t13.5 77t23.5 74t35.5 67q3 5 8 9t10 6 l1336 630q7 4 16 4q5 0 13 -2l1191 -381q11 -4 19 -14t9 -24q0 -26 -23 -37l-1336 -630q-5 -2 -9 -3t-9 -1q-4 0 -12 2l-1158 371q-7 -15 -16 -37.5t-16.5 -51t-13 -62.5t-5.5 -72q0 -40 7 -75.5t16 -64t19 -49.5t16 -32l1161 -371zM2621 724q7 3 16 3q11 0 22 -6t16 -17 q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-5 -2 -9 -3t-9 -1q-25 0 -36 24q-4 8 -4 17q0 11 6 21t17 15zM2621 899q5 2 8.5 3t8.5 1q25 0 37 -23q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-8 -4 -18 -4q-25 0 -36 23q-4 8 -4 17q0 25 23 37z" />
+<glyph unicode="C" horiz-adv-x="2511" d="M850 -103q-122 -55 -241 -55q-80 0 -155 25t-142 73t-124 119t-102 163q-4 5 -7 10.5t-5 10.5l-9 23q-33 78 -49 153t-16 146q0 81 21 154t62 136t101.5 113.5t140.5 86.5q96 43 214.5 60t254.5 17q157 0 326.5 -16.5t341.5 -36.5l211 -23q0 48 21.5 88t63.5 59l518 234 q27 13 58 13q48 0 92 -30t67 -82q18 -41 18 -82q0 -48 -22.5 -87.5t-64.5 -58.5l-518 -234q-27 -12 -57 -12q-60 0 -110 44l-121 -173q-92 -132 -185 -262t-188.5 -242.5t-194 -200t-200.5 -133.5zM182 292q8 -17 35.5 -29.5t77.5 -12.5q57 0 144 21.5t207 75.5 q88 40 183 96t194.5 122.5t201.5 140.5t204 150q-125 -26 -248 -53.5t-238.5 -58.5t-220.5 -65t-193 -74q-99 -45 -166 -88t-108 -81.5t-59 -70.5t-18 -54q0 -11 4 -19zM2410 1301q-11 23 -30.5 36.5t-40.5 13.5q-15 0 -27 -6q-19 -8 -29 -26t-10 -39q0 -9 1.5 -19t6.5 -19 q11 -23 30.5 -36.5t41.5 -13.5q14 0 26 6q19 8 29 26.5t10 39.5q0 18 -8 37zM381 932q-130 -58 -195.5 -156t-65.5 -224q0 -16 1 -31t3 -32q44 55 127 115.5t222 122.5q83 38 180 70.5t203 62t218.5 55.5t227.5 51q-130 14 -255.5 24t-241.5 10q-125 0 -232.5 -15 t-191.5 -53zM291 119q129 -146 304 -146q97 0 199 46q80 36 160 104t159 157t157.5 194t156.5 215q-94 -70 -188 -137t-186 -127.5t-180.5 -111.5t-171.5 -89q-130 -59 -226 -82t-165 -23h-19z" />
+<glyph unicode="D" horiz-adv-x="5211" d="M904 1423q60 0 145 -7t187 -20t218.5 -32t240 -43.5t252 -54.5t254.5 -65q206 -57 358 -113t259.5 -110t175 -104.5t105.5 -96.5q32 38 77 60.5t99 22.5h1935v-457h-1935q-54 0 -99 22.5t-77 60.5q-38 -46 -105.5 -96.5t-175 -104.5t-259.5 -110t-358 -113 q-126 -35 -254.5 -65t-252 -54.5t-240 -43.5t-218.5 -32t-187 -20t-145 -7q-124 0 -239.5 28.5t-216 80t-183 123.5t-141.5 160t-91.5 189t-32.5 210t32.5 210.5t91.5 189.5t141.5 160t183 123.5t215.5 80t240 28.5zM81 631q22 -15 88.5 -32t172 -31t247.5 -23t315 -9 q85 0 203.5 2t257 6t291.5 9t308 11.5t305 14.5t283 16t242.5 17.5t183.5 18.5q-74 10 -183.5 19t-242.5 17.5t-283 16.5t-305 14.5t-308 11.5t-291.5 9t-257 6t-203.5 2q-173 0 -315 -9t-247.5 -23t-172 -31t-88.5 -33zM904 801q60 0 144 -1t185.5 -3.5t217 -5.5t239 -7.5 t251 -9.5t252.5 -11q151 -8 271.5 -15t215 -13.5t165.5 -13.5t122 -13q-43 17 -108 37t-159 42t-221 46t-293 49q-123 18 -250 34t-250 29t-238.5 23.5t-217 17.5t-185 10.5t-141.5 3.5q-143 0 -273.5 -21.5t-237 -59.5t-183 -89t-110.5 -111q52 19 124 33t151.5 23t161 14 t153.5 8t128.5 3.5t85.5 0.5zM904 1348q-138 0 -263.5 -37t-229 -103.5t-180 -157.5t-116.5 -199q57 51 139.5 92t184 70.5t219 45.5t246.5 16q60 0 144.5 -3.5t186 -11t217.5 -17.5t239.5 -23.5t251.5 -29.5t254 -35q165 -24 293 -48t226 -47t168.5 -44.5t119.5 -41.5 q-64 58 -170.5 114t-241.5 107t-290 97t-316.5 85.5t-320.5 71t-301.5 53.5t-261.5 34t-198 12zM904 -85q79 0 198 12t261.5 34t301.5 53.5t320.5 71t316.5 85.5t290 97t241.5 107t170.5 114q-49 -20 -119.5 -42t-168.5 -44.5t-226 -46.5t-293 -48q-126 -19 -254 -35 t-251.5 -29.5t-239.5 -23.5t-217.5 -17.5t-186 -11t-144.5 -3.5q-129 0 -246.5 16t-219 45.5t-184 70.5t-139.5 92q40 -108 116.5 -199t180 -157.5t229 -103.5t263.5 -37zM904 263q58 0 141.5 3.5t185 10.5t217 17.5t238.5 23.5t250 29t250 34q166 25 293 48.5t221 46 t159 42.5t108 37q-51 -6 -122 -13t-165.5 -13.5t-215 -14t-271.5 -14.5q-125 -6 -252.5 -11t-251 -9.5t-239 -8t-217 -6t-185.5 -3.5t-144 -1q-29 0 -85.5 0.5t-128.5 3.5t-153.5 8.5t-161 14.5t-151.5 22.5t-124 33.5q34 -60 110.5 -111.5t183 -89t237 -59t273.5 -21.5z " />
+<glyph unicode="E" horiz-adv-x="6675" d="M6675 1423v-1566h-4861q-38 0 -71.5 46t-60.5 127.5t-45.5 193t-26.5 242.5q-79 -7 -169 -18t-184.5 -23t-190.5 -24.5t-186 -22.5t-170.5 -16t-145.5 -6q-117 0 -219.5 22.5t-179 61.5t-121 91t-44.5 111t44.5 111t121 91t179 61.5t219.5 22.5q65 0 145.5 -6t170.5 -16 t186 -22.5t190.5 -24.5t184.5 -23t169 -18q8 130 27 241t46 192t60 126.5t71 45.5h4861zM1695 472q6 -108 19.5 -196t30.5 -154.5t35 -110t34 -61.5q18 21 39.5 78t40 145t31 206t12.5 261t-12.5 261t-31 206t-40 145t-39.5 78q-16 -18 -34 -61t-34.5 -109t-30 -153.5 t-20.5 -194.5q46 -3 86 -3q7 0 13 -13t10.5 -36t7 -53.5t2.5 -64.5q0 -35 -2.5 -65.5t-7 -53t-11 -35.5t-13.5 -13q-39 0 -85 -3z" />
+<glyph unicode="F" horiz-adv-x="7626" d="M6354 644q0 42 16 79.5t44 65.5t65.5 44.5t80.5 16.5h494q-33 -44 -51.5 -96t-18.5 -110t18.5 -110t50.5 -95h-493q-43 0 -80.5 16t-65.5 43.5t-44 65t-16 80.5zM7206 644q0 42 16 79.5t44 65.5t65.5 44.5t80.5 16.5q42 0 79.5 -16.5t65.5 -44.5t44 -65.5t16 -79.5 t-16 -79.5t-44 -65.5t-65.5 -44t-79.5 -16q-43 0 -80.5 16t-65.5 43.5t-44 65t-16 80.5zM6132 639q0 -58 18.5 -110t50.5 -95h-2753q-167 0 -315 -25.5t-286 -67t-269 -94.5t-262.5 -108t-268 -108t-284.5 -94.5t-312.5 -67t-351.5 -25.5q-127 0 -258 25t-253.5 72.5 t-229.5 116.5t-186.5 157.5t-125.5 195t-46 229.5q0 122 46 228.5t125.5 195t186.5 157.5t229.5 116.5t253 72.5t258.5 25q187 0 351.5 -25.5t312.5 -67t284.5 -94.5t268 -108t262.5 -108t269 -94.5t286 -67t315 -25.5h2754q-33 -43 -51.5 -95.5t-18.5 -110.5zM1750 186 q111 39 199.5 89.5t149.5 109t93.5 124t32.5 134.5q0 76 -39 146.5t-109.5 132t-170 112t-220 86.5t-259 56t-288.5 20q-91 0 -182 -14t-176.5 -39.5t-162.5 -62.5t-139 -83q-8 -6 -12 -15t-4 -18q0 -10 4 -18q13 -23 37 -23q4 0 12 2q86 28 176 42.5t179 14.5 q136 0 263.5 -17t239 -48.5t204 -74.5t159 -95.5t103 -112.5t36.5 -124q0 -42 -15 -79t-39 -69t-53 -58.5t-57 -46.5q-16 -10 -16 -32q0 -11 4 -19q11 -22 36 -22q9 0 14 2z" />
+<glyph unicode="G" horiz-adv-x="1338" d="M361 -134q-76 33 -139.5 98t-111 149t-75.5 180t-34 192h1337q-5 -96 -33.5 -192t-76 -180t-111.5 -148.5t-140 -97.5q-28 -12 -55.5 -19.5t-62.5 -11t-80.5 -5t-109.5 -1.5t-109.5 1.5t-80 5t-62.5 10.5t-56 19zM402 205q-5 -7 -5 -15t3 -14q8 -14 25 -14h181q12 0 20 8 t8 20q0 13 -9 21l-86 131q-9 12 -24 12q-7 0 -13.5 -3t-10.5 -9zM150 591h-150q3 99 32.5 201.5t78 199.5t112.5 182t137 149t152 101t157 37t157 -37t152.5 -101t137.5 -149t112.5 -182t78 -199.5t32.5 -201.5h-643v177h-62v-177h-422v177h-62v-177zM709 966q3 -9 3 -18 q0 -21 -14 -33q-13 -13 -34 -13q-17 0 -33 9q-17 9 -27 24l-30 -31q11 -21 36 -35q26 -13 54 -13q11 0 21 2t20 5q20 8 32 19q12 12 20 29q8 19 8 38q0 21 -7 36q-6 15 -19 27q-12 11 -28 19q-18 6 -36 6q-13 0 -22 -3t-14 -8l11 61h98v47h-135l-22 -108q-1 -8 -2 -14.5 t-3 -12.5l-3 -19q-2 -5 -2 -9h45q8 11 18 16q10 6 23 6q11 0 18 -4q8 -3 14 -9t10 -14zM542 658h27v110h-27v-110zM453 658h28v110h-28v-110zM365 658h28v110h-28v-110zM277 658h27v110h-27v-110z" />
+<glyph unicode="H" horiz-adv-x="1725" d="M1497 1120q-21 0 -35.5 15t-14.5 36q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM1244 1120q-20 0 -35 15t-15 36q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM991 1120q-20 0 -35 15t-15 36 q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM1565 1391q34 0 63.5 -13t51.5 -35.5t35 -52t13 -63.5v-1405q0 -9 -6.5 -15.5t-15.5 -6.5h-229q-11 0 -19 10l-36 53q-4 8 -4 13v36h-1108v-36q0 -5 -4 -13l-36 -53q-7 -10 -19 -10h-229 q-9 0 -15.5 6.5t-6.5 15.5v1405q0 34 13 63.5t35 52t52 35.5t64 13h62v19q0 30 21 51t51 21h190q30 0 51.5 -21t21.5 -51v-19h136v19q0 30 21 51t51 21h190q30 0 51 -21t21 -51v-19h136v19q0 30 21.5 51t51.5 21h190q30 0 51 -21t21 -51v-19h63zM1497 1275q-21 0 -40 -8 t-33.5 -22.5t-22.5 -33.5t-8 -40q0 -22 8 -41t22.5 -33t33.5 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5t-33 22.5t-41 8zM1244 1275q-21 0 -40 -8t-33.5 -22.5t-22.5 -33.5t-8 -40q0 -22 8 -41t22.5 -33t33.5 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5 t-33 22.5t-41 8zM991 1275q-21 0 -40 -8t-33 -22.5t-22 -33.5t-8 -40q0 -22 8 -41t22 -33t33 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5t-33 22.5t-41 8zM218 981v-649h1293v649h-1293zM223 1254q-20 -15 -31 -37t-11 -46q0 -35 21 -63q16 -20 38 -30.5t46 -10.5 q35 0 62 20q20 16 31 38t11 46q0 33 -21 62q-15 20 -37 31t-46 11q-35 0 -63 -21zM1602 136h-1476v-33q0 -29 20 -49.5t49 -20.5h364q4 -13 15 -21.5t25 -8.5h530q14 0 25 8.5t15 21.5h364q29 0 49 20.5t20 49.5v33zM1602 186l-91 96h-1293l-92 -96h1476zM225 1118 q-8 0 -8 6q0 2 1 3l18 34q-1 4 -1 10q0 25 20 40q13 10 31 10q11 0 22 -4.5t18 -15.5q10 -13 10 -30q0 -11 -5 -22t-15 -19q-13 -10 -30 -10q-11 0 -23 5zM840 644q-22 24 -35 54.5t-15 62.5v7q0 35 13.5 67t39.5 58q1 2 5 2t6 -2l38 -39q3 -2 3 -5t-3 -6q-17 -17 -24 -35.5 t-7 -37.5q0 -22 8.5 -42t22.5 -36q24 -27 35 -56t11 -59q0 -43 -19 -83.5t-49 -72.5q-2 -3 -5 -3q-2 0 -6 2l-40 37q-2 4 -2 6q0 4 2 6q25 26 37 52.5t12 52.5q0 41 -28 70zM590 469q19 20 28 40t9 40q0 30 -20 51q-19 20 -30 47.5t-11 57.5q0 27 10.5 54t33.5 50q2 2 5 2 q4 0 6 -2l38 -39q3 -2 3 -5t-3 -6q-13 -13 -18 -26t-5 -27q0 -17 7 -32.5t16 -26.5q21 -23 30 -47t9 -49q0 -35 -15.5 -69.5t-40.5 -60.5q-2 -3 -6 -3q-3 0 -5 2l-40 37q-2 2 -2 6t1 6zM1055 469q37 38 37 79q0 31 -20 51q-19 21 -30.5 49t-11.5 58q0 27 10.5 53.5 t33.5 49.5q4 2 6 2q1 0 5 -2l39 -39q2 -4 2 -6q0 -3 -2 -5q-13 -13 -18 -26.5t-5 -27.5q0 -17 7 -32t16 -26q20 -23 29.5 -47t9.5 -49q0 -35 -16 -69.5t-41 -60.5q-2 -3 -5 -3q-2 0 -6 2l-40 37q-2 4 -2 6t2 6z" />
+<glyph unicode="I" horiz-adv-x="1993" d="M288 1103q-17 0 -28 11t-11 28t11 28.5t28 11.5q41 0 78.5 -13t68 -36t53 -54.5t34.5 -68.5q10 2 19.5 3.5t20.5 1.5q34 0 64 -13t52.5 -35t35.5 -52t13 -64t-13 -64t-35.5 -52t-52.5 -35t-64 -13t-63.5 13t-52 35t-35.5 52t-13 64q0 36 14 66.5t39 53.5q-6 28 -21 52 t-36.5 42t-48.5 28t-57 10zM613 957q-19 0 -32.5 -13.5t-13.5 -32.5q0 -20 13.5 -33t32.5 -13t32.5 13t13.5 33q0 19 -13.5 32.5t-32.5 13.5zM1979 436q13 -15 13 -31q0 -17 -13 -30l-283 -282q-12 -13 -30 -13q-19 0 -31 13l-347 347q-11 11 -13 27l-20 303v4q0 18 12 30 l7 6q-28 20 -61.5 31t-69.5 11q-20 0 -39 -3q-39 -7 -73.5 -27t-60.5 -50l-3 -3q38 -70 64 -117.5t42.5 -78.5t26 -48t13.5 -25t5 -9.5l1 -1.5q7 -14 7 -25v-579q0 -16 -11 -27.5t-28 -11.5h-1048q-16 0 -27.5 11.5t-11.5 27.5v580q0 2 0.5 3t0.5 5l2 6l1 1q0 1 0.5 1.5 t0.5 1.5l313 556q20 -6 36 -19t27 -30l-274 -487h914l-449 827l-90 -161q-29 25 -67 43l124 219q12 20 34 20q24 0 35 -21l319 -587q68 68 163 85q14 2 26.5 3.5t26.5 1.5q73 0 137 -32.5t107 -89.5l217 -15q17 -2 27 -13zM1048 91h-969v-166h969v166zM1048 424h-969v-166 h969v166zM1412 577q33 0 56.5 23.5t23.5 57.5q0 29 -18 51t-47 28q5 -14 9.5 -28t6.5 -29q0 -2 0.5 -3.5t0.5 -3.5q0 -14 -9.5 -25.5t-23.5 -14.5h-7q-15 0 -26.5 9.5t-13.5 23.5q-4 24 -13 45q-19 -24 -19 -53q0 -34 23.5 -57.5t56.5 -23.5zM1668 286q36 8 57.5 31t21.5 55 t-18 53t-59 35q-28 11 -39 18t-11 15q0 19 32 19q21 0 36 -4.5t23 -8.5q0 -1 3 -1q1 0 2 -1q2 0 3 1l3 4l12 52q0 2 -2 4q-27 12 -62 15v33q0 6 -5 6h-43q-6 0 -6 -6v-37q-35 -8 -55 -30t-20 -53q0 -20 7.5 -34t19.5 -24t27 -17t30 -12q26 -9 34.5 -17t8.5 -16t-4.5 -12 t-10.5 -6.5t-12.5 -3t-9.5 -0.5q-10 0 -21.5 3t-22 7t-18.5 7t-11 3q-1 0 -1.5 -0.5t-1.5 -0.5l-3 -3l-13 -54q0 -2 2 -4q14 -8 33 -13t40 -7v-36q0 -6 5 -6h44q5 0 5 6v40z" />
+<glyph unicode="J" horiz-adv-x="2138" d="M2082 605q22 -22 32.5 -48.5t10.5 -55.5q0 -46 -25 -83l-343 -507q-4 -8 -9.5 -14.5t-11.5 -13.5q-22 -22 -49 -32.5t-56 -10.5t-55.5 10.5t-48.5 32.5l-1013 1013q-20 21 -31.5 48.5t-11.5 56.5q0 6 0.5 12t1.5 12q6 35 27 63.5t53 44.5l16 8t41 20t55.5 27l61 30t57 28 t43.5 22q72 36 149.5 55t154.5 19l46 98q6 12 17 18.5t24 6.5q11 0 19 -4l81 -39q12 -5 18.5 -16t6.5 -24q0 -11 -4 -19l-24 -52q14 -5 27.5 -10.5t26.5 -12.5l24 49q5 12 16 18.5t24 6.5q12 0 20 -4l80 -38q12 -6 19 -17t7 -23q0 -10 -5 -20l-41 -86zM1829 331 q18 14 27 37.5t9 53.5q0 33 -10 72t-28.5 81.5t-46 87.5t-62.5 89q-41 51 -85 92t-87 69.5t-82.5 44t-72.5 15.5q-36 0 -59 -19q-18 -14 -27 -38t-9 -54q0 -33 9.5 -72t28.5 -81.5t46.5 -87t62.5 -88.5q40 -51 84 -92t87 -69.5t83 -44t73 -15.5q36 0 59 19zM750 574 l-155 -154q29 -32 44 -71t15 -81q0 -44 -16.5 -85.5t-49.5 -74.5l-149 -149q-33 -33 -74.5 -49.5t-85.5 -16.5t-85 16.5t-75 49.5l-53 52q-33 33 -49.5 74.5t-16.5 85.5t16.5 85.5t49.5 74.5l149 149q33 33 74.5 49.5t85.5 16.5q42 0 81 -14.5t71 -43.5l155 155zM134 263 q-19 -19 -28 -43t-9 -49q0 -47 30 -83l332 331q-37 31 -84 31q-25 0 -49 -9.5t-43 -28.5zM519 176q20 19 29.5 42.5t9.5 48.5q0 47 -31 84l-332 -332q36 -30 83 -30q25 0 49 9.5t43 28.5z" />
+<glyph unicode="K" horiz-adv-x="2764" d="M1385 1073q129 0 242 -49t197.5 -133t133.5 -197t49 -242q0 -86 -22.5 -165.5t-63 -148.5t-97 -126t-125.5 -97.5t-148.5 -62.5t-165.5 -22t-165.5 22t-148.5 62.5t-125.5 97.5t-97 126t-63 148.5t-22.5 165.5q0 129 49 242t133.5 197t197.5 133t242 49zM1385 -122 q79 0 152 20.5t137 58t116 90t89.5 116t58 137t20.5 152.5t-20.5 152t-58 137t-89.5 116t-116 89.5t-137 58t-152 20.5t-152 -20.5t-137 -58t-116 -89.5t-89.5 -116t-58 -137t-20.5 -152q0 -119 45 -223.5t123 -182.5t182 -123t223 -45zM718 856q8 0 13.5 -5t5.5 -13v-249 q0 -25 -14.5 -44t-36.5 -27l14 -394q0 -16 -11.5 -27.5t-27.5 -11.5t-27 11.5t-11 27.5l13 394q-22 8 -36 27t-14 44v249q0 8 5 13t13 5t13.5 -5t5.5 -13v-177h20v177q0 8 5 13t13 5t13 -5t5 -13v-177h21v177q0 8 5 13t13 5zM1079 1161q-16 0 -26.5 11t-10.5 26t10.5 25.5 t26.5 10.5l373 -13q7 21 25.5 34.5t41.5 13.5h192q7 0 12 -5t5 -12q0 -8 -5 -13t-12 -5h-123v-19h123q7 0 12 -5t5 -12q0 -8 -5 -13t-12 -5h-123v-19h123q7 0 12 -4.5t5 -12.5t-5 -13t-12 -5h-192q-23 0 -41.5 13.5t-25.5 34.5zM514 774q8 0 13 -5.5t5 -13.5v-190 q0 -25 -14 -44t-36 -27l13 -370q0 -16 -11 -27.5t-27 -11.5q-17 0 -28 11.5t-11 27.5l14 370q-22 8 -36.5 27t-14.5 44v190q0 8 5.5 13.5t13.5 5.5t13 -5.5t5 -13.5v-117h21v117q0 8 5 13.5t13 5.5t13 -5.5t5 -13.5v-117h20v117q0 8 5.5 13.5t13.5 5.5zM1212 1287 q-28 0 -55 6.5t-48.5 18.5t-34.5 27.5t-13 33.5t13 34t34.5 27.5t48.5 18.5t55 7q46 0 81.5 -17.5t47.5 -44.5l332 12q15 0 26 -10.5t11 -26.5q0 -15 -11 -25.5t-26 -10.5l-332 11q-12 -26 -47.5 -43.5t-81.5 -17.5zM2446 827q18 0 33.5 -13t27 -34t18 -48t6.5 -54 q0 -45 -17.5 -79.5t-43.5 -46.5l12 -431q0 -14 -10.5 -25t-25.5 -11q-14 0 -25 11t-11 25l13 431q-27 12 -44.5 46.5t-17.5 79.5q0 27 6.5 54t18 48t27 34t33.5 13zM2757 657q0 -44 -21.5 -77t-53.5 -44l12 -415q0 -14 -10.5 -25t-25.5 -11q-14 0 -25 11t-11 25l12 415 q-32 11 -53 44t-21 77q0 26 7.5 51t21 45t31.5 32.5t38 12.5q21 0 39 -12.5t31.5 -32.5t21 -45t7.5 -51zM2162 399l9 -275q0 -16 -11 -27.5t-27 -11.5q-17 0 -28 11.5t-11 27.5l12 344l-47 33v288q0 49 8 82.5t19.5 54.5t24.5 30.5t23 9.5t15.5 -7.5t8.5 -15.5q4 -11 4 -23 v-521zM2311 399l10 -275q0 -16 -11.5 -27.5t-27.5 -11.5t-27.5 11.5t-11.5 27.5l13 348l-32 29v196q0 49 5.5 82.5t14 54.5t19 30.5t20.5 9.5t15.5 -7.5t8.5 -15.5q4 -10 4 -22v-430zM328 898q7 -4 7 -16v-843q0 -13 -7 -16q-4 -2 -5 -2q-6 0 -9 5l-310 422q-4 5 -4 12.5 t4 12.5l310 422q5 8 14 3zM1385 973q108 0 202.5 -41t165.5 -112t112 -165.5t41 -202.5t-41 -203t-112 -165.5t-165.5 -111.5t-202.5 -41t-202.5 41t-165.5 111.5t-112 165.5t-41 203t41 202.5t112 165.5t165.5 112t202.5 41zM1796 628q13 31 -11 55q-15 15 -35 15 q-2 0 -2 -1q6 28 -14 48q-15 15 -35 15q-2 0 -3.5 -0.5t-3.5 -0.5v6q0 21 -14 35q-15 15 -36 15q-9 0 -13 -2q0 22 -15 37q-14 14 -36 14q-10 0 -15 -2q0 21 -14 35q-17 15 -36 15q-16 0 -29 -9q-2 16 -14 28q-14 15 -35 15t-36 -15t-15 -35q0 -17 11 -31l-174 -355 q6 4 13.5 6.5t15.5 1.5q8 -2 12 -5q4 8 7 11q7 6 16 8t17 2q10 0 19 -1q-2 -28 -24 -47q32 3 57 -11t37 -52q7 -23 2.5 -48.5t-14 -48t-21.5 -38.5t-20 -19q-9 -3 -28 3.5t-39.5 20t-38.5 32t-25 41.5q-12 37 1 63.5t40 41.5q-23 2 -38 17l-175 -356q-7 -15 4 -26 q9 -7 16 -7q5 0 10 3l483 236q20 -28 50 -28q24 0 42.5 19t28.5 50q15 -6 30 -6q27 0 44 17q19 19 16 52l40 19q13 -10 30 -10q21 0 36 15q14 14 14 35t-14 36q-13 12 -29 14q8 13 8 27q0 21 -15 36q-14 14 -33 14zM1274 357q-2 7 -6 11t-9 2t-6 -7.5t1 -12.5t6.5 -11 t8.5 -2q10 3 5 20zM1277 446q-8 -3 -5 -20q2 -7 6.5 -11t9.5 -2q10 4 5 20q-2 7 -6.5 11t-9.5 2zM1347 426q10 3 5 19q-2 8 -6.5 12t-8.5 2q-5 -2 -6 -7.5t1 -12.5q5 -16 15 -13zM1358 402q-10 -4 -5 -20q2 -7 6.5 -11t9.5 -2q4 1 5.5 6.5t-0.5 12.5q-5 16 -16 14zM1342 317 q10 3 5 20q-2 7 -6.5 11t-8.5 2q-5 -2 -6 -7.5t1 -12.5t6 -11t9 -2zM1335 395q-2 7 -6.5 11t-8.5 2q-5 -1 -6 -6.5t1 -13.5q2 -7 6 -11t9 -2t6 7.5t-1 12.5zM1436 563q-7 11 -12 23t-6 26q-2 10 3 21q5 10 16 13q15 3 30 -2q2 0 2.5 -0.5t2.5 -0.5q0 -3 -1 -5v-7 q-1 -5 -1 -9v-9q1 -17 4 -33t10 -32q6 -14 16 -27t24 -21q-14 2 -26 8.5t-23 14.5t-21 18.5t-18 21.5zM1569 418q0 -1 1 0.5t-1 -0.5q-18 -21 -37 -32q-20 -13 -40 -16q-16 -3 -26 3q-11 5 -13 17q-3 14 2 29q0 1 0.5 2t0.5 2q0 2 2 0h2q5 0 8 -1h16q36 0 66 13q14 6 27 16 t21 24q-1 -8 -4 -15.5t-7 -15.5q-8 -15 -18 -26zM1711 487q7 -11 12 -23t7 -26q0 -12 -4 -21t-16 -12q-8 -2 -15.5 -1t-15.5 3q-2 0 -2 1q-2 0 -2 1q1 1 1 4v8q1 4 1 8v9q-1 17 -4 33t-10 32q-6 14 -16 27t-24 20q14 -2 26.5 -8.5t23.5 -14.5q21 -16 38 -40zM1580 634 q1 2 -0.5 0.5t0.5 -0.5q16 19 38 33q10 5 20.5 9t21.5 5q7 1 14 0t12 -6q7 -6 9 -20q0 -9 -1 -14q0 -2 -0.5 -4t-0.5 -4q-1 -1 -1 -4l-1 -2q0 -1 -1 0q-9 1 -17.5 1h-16.5q-17 -1 -33 -4t-30 -11q-14 -6 -25.5 -15t-18.5 -23q2 17 11 32t20 27zM1501 607q-3 29 6 56 q3 11 9 21t14 18q8 7 16 8q9 2 19 -5q11 -8 17 -20q1 -1 1 -2t1 -2t0 -2l-1 -1q-2 -2 -3.5 -2.5t-3.5 -2.5q-6 -5 -11 -11q-25 -25 -38 -55q-6 -14 -8.5 -31t2.5 -33q-9 12 -14 30q-6 16 -6 34zM1697 595q14 -3 15 -3t-3 0.5t-9 1.5t-3 1q19 -3 35 -12q14 -7 21 -18 q6 -8 6 -15q0 -10 -8 -20q-6 -6 -10 -8q-1 -1 -7 -5q-1 0 -1.5 -0.5t-1.5 -0.5q0 -1 -1 -1q-1 -1 -2 0q-5 7 -11 12.5t-12 11.5q-25 24 -55 35q-14 5 -29.5 7t-29.5 -3q22 15 50 18q29 5 56 -1zM1646 444q1 -2 0.5 0t-0.5 0q3 -31 -6 -58q-4 -11 -9.5 -20.5t-13.5 -17.5 q-6 -6 -15 -8q-11 -2 -19 5q-6 4 -10 9.5t-8 10.5l-2 4v2l1 1q2 2 3.5 2.5t3.5 2.5q3 3 6 5.5t6 6.5q11 11 21 25t16 29t8.5 31.5t-2.5 33.5q10 -14 14.5 -30.5t5.5 -33.5zM1466 453q-11 1 -21.5 3t-21.5 7q-9 5 -18 11t-14 15q-5 12 -1 20q2 6 6 10.5t9 8.5q6 4 13 8 q2 2 2 -1q1 -1 1 -2l3 -3q1 -2 5 -6q9 -10 24 -22q23 -19 50 -27q13 -5 26.5 -6t26.5 4q-4 -4 -8.5 -6.5t-9.5 -4.5t-11 -3.5t-11 -2.5q-24 -6 -50 -3z" />
+<glyph unicode="L" horiz-adv-x="1940" d="M1837 337q42 -35 64.5 -78t25.5 -86l-64 -76q-5 -1 -9.5 -1h-9.5q-39 0 -80 15.5t-77 45.5t-57.5 66.5t-29.5 74.5q-36 -48 -83 -100.5t-102 -108.5q-62 -62 -121 -113t-109.5 -88t-89.5 -57t-60 -20q-11 0 -16 5l-67 66q6 -6 17 -6q21 0 60 20.5t89.5 58t109.5 88.5 t121 113t113.5 121t88 109.5t57 89.5t20.5 60q0 11 -5 16l66 -66q5 -5 5 -16q0 -24 -26 -73h14q38 0 78.5 -15t76.5 -45zM1813 185q34 -39 50 -86q-3 37 -20.5 74.5t-49.5 69.5q-2 2 -5.5 5t-3.5 5q-3 2 -5.5 4t-4.5 4l-12 10l-10 6q-32 23 -66.5 34t-67.5 11l-3 -4 q20 -5 39.5 -12.5t38.5 -19.5q4 -14 16.5 -30.5t32.5 -33.5q19 -17 38 -26t33 -11zM1175 683q-7 -6 -12.5 -19.5t-9.5 -28.5t-7 -30t-4 -25l-2 -3v139h138l-2 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5zM589 1267h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5 t-16.5 -8.5q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138zM865 716h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5q-7 -6 -12 -19.5t-9 -28.5t-7 -30t-4 -25l-2 -3v139zM865 991h138l-3 -2q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9 q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v138zM589 991h138l-3 -2q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v138zM347 1235q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138h138l-2 -3q-11 -2 -27 -5t-31 -7 t-27.5 -8.5t-16.5 -8.5zM865 1267h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138zM899 408q-7 -7 -12 -20t-9.5 -28.5t-7.5 -31t-5 -26.5v138h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5 t-16.5 -8.5zM623 683q-7 -6 -12 -19.5t-9 -28.5t-7 -30t-4 -25l-2 -3v139h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5zM347 959q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v136h136q-11 -2 -27 -5t-31 -7t-27.5 -9t-16.5 -9zM1140 440h138l-2 -3 q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18.5t-9.5 -26.5t-7.5 -28.5t-5.5 -26.5q0 -2 -0.5 -3t-0.5 -3v138zM1570 604q6 -6 6 -17q0 -21 -20.5 -60t-57.5 -89.5t-88.5 -109.5t-112.5 -120q-62 -62 -121 -113t-109.5 -88.5t-89.5 -58t-60 -20.5 q-11 0 -17 6l-63 63q-133 132 -233.5 233t-175 176t-126 126t-84.5 84l-89 88q-65 65 -97 146t-32 166t32 166t97 146t146 97t166 32t166 -32t146 -97l35 -40q3 38 19.5 74.5t46.5 66.5q33 33 74.5 50t85.5 17t85.5 -17t75.5 -50q24 -24 39 -52.5t22 -59.5l158 -537z M548 1358h77q-18 11 -37.5 18.5t-39.5 13.5v-32zM498 1401q-14 2 -28.5 3t-28.5 1q-44 0 -86.5 -9t-82.5 -28v-10h226v43zM272 1308v-225h226v225h-226zM222 757h-77q3 -3 10 -9t9 -11l58 -58v78zM222 1033h-173v-44h124q-11 -2 -26.5 -5t-31 -7t-28 -9t-16.5 -9 q-7 -7 -14 -26q8 -33 20 -65t31 -61h114v226zM222 1308h-40q-5 -4 -9.5 -8t-9.5 -9l-22 -24h34l-2 -3q-17 -2 -41 -8q-31 -39 -50 -82.5t-27 -90.5h167v225zM498 481h-78l78 -78v78zM498 757h-226v-128l41 -41v128h138l-2 -3q-11 -2 -27 -5t-31 -7t-27.5 -8.5t-16.5 -9.5 q-6 -6 -11 -18t-8.5 -26t-6.5 -28.5t-5 -25.5l54 -54h128v226zM498 1033h-226v-226h226v226zM773 205h-77l77 -78v78zM773 481h-225v-128l41 -41v128h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18t-9 -26.5t-6.5 -29t-4 -25.5l54 -54h127v226 zM773 757h-225v-226h225v226zM773 807v226h-225v-226h225zM773 1238q-15 5 -26 17q-8 10 -15.5 19t-15.5 17l-19 17h-149v-225h225v155zM1375 531h125q19 34 22 46l-84 86q-8 -19 -13 -43.5t-7 -39.5l-2 -3v108l-41 41v-195zM1375 364q11 14 21.5 26t19.5 24v26h21l30 41 h-92v-117zM1099 1358h66q-6 9 -12.5 17.5t-14.5 16.5q-19 19 -39 29v-63zM1099 1083h152l-48 165q-22 -7 -28 -13t-11.5 -18.5t-9.5 -27.5t-7.5 -30t-5.5 -27q0 -1 -0.5 -1.5t-0.5 -1.5v138h57l-10 35q0 1 -0.5 1.5t-0.5 1.5q0 2 -1 3h-86v-225zM1099 807h226v25l-49 157 q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9q-6 -6 -11.5 -18.5t-9.5 -27t-7.5 -29.5t-5.5 -27q0 -2 -0.5 -2.5t-0.5 -1.5v138h138l-12 42h-167v-226zM1099 757v-226h226v226h-226zM823 1083h226v225h-208q-2 -6 -3 -12.5t-2 -13.5q-1 -16 -13 -29v-170zM823 807h226v226 h-226v-226zM823 531h226v226h-226v-226zM927 -21q17 6 47.5 24.5t74.5 51.5v150h-226v-127l42 -42v128h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18t-9 -26.5t-6.5 -28.5t-5 -25l4 -3l51 -52h5zM1049 481h-226v-226h226v226zM1049 1440 q-9 2 -18.5 3t-18.5 1q-34 0 -66 -13t-58 -39q-8 -8 -14.5 -16.5t-12.5 -17.5h188v82zM1223 205h-124v-110q10 8 20 16.5t21 17.5v35h39zM1274 255l51 54v172h-226v-226h175z" />
+<glyph unicode="M" horiz-adv-x="14546" d="M8314 627h156q61 0 94.5 -26t33.5 -71t-29.5 -72t-73.5 -36q30 -10 51.5 -30.5t21.5 -55.5q0 -54 -46.5 -88.5t-127.5 -34.5h-191zM8399 255q57 0 89 22t32 60q0 32 -26.5 48t-68.5 16h-125l-39 -146h138zM8429 443q55 0 88 22t33 59q0 30 -22 45.5t-63 15.5h-116 l-38 -142h118zM8650 301q0 11 2.5 23t5.5 24l45 171h45l-47 -174q-2 -8 -3 -17t-1 -17q0 -30 18 -47t50 -17q18 0 35 7.5t32 20.5t26.5 31t17.5 40l46 173h46l-82 -306h-45l13 49q-21 -23 -46.5 -39.5t-60.5 -16.5q-45 0 -71 25.5t-26 69.5zM9081 519h46l-83 -306h-46z M9109 636h52l-13 -51h-52zM9277 644h45l-116 -431h-45zM9338 335q0 41 14.5 75.5t38.5 60t55 40t64 14.5q48 0 75 -22.5t40 -52.5l52 194h45l-115 -431h-45l13 52q-22 -25 -50 -42.5t-66 -17.5q-52 0 -86.5 36t-34.5 94zM9609 390q0 41 -26.5 68t-68.5 27q-27 0 -50.5 -11.5 t-41 -31.5t-27 -46.5t-9.5 -56.5q0 -42 24.5 -67.5t62.5 -25.5q25 0 49.5 12t44 32t31 46t11.5 54zM9987 478h-42l11 41h42l10 36q11 47 38 69t66 22q38 0 61 -13l-11 -39q-13 6 -24.5 9t-25.5 3q-21 0 -37 -14t-24 -44l-8 -29h100l-11 -41h-100l-71 -265h-46zM10116 291 q0 52 38.5 81t98.5 29q30 0 58 -5t50 -11l2 7q2 7 3 14.5t1 13.5q0 30 -20.5 46.5t-62.5 16.5q-24 0 -45 -4.5t-41 -12.5l-7 39q22 8 46.5 13t53.5 5q59 0 90 -25t31 -70q0 -10 -2 -20.5t-4 -21.5l-47 -173h-44l13 47q-22 -24 -50 -39t-65 -15q-19 0 -36.5 5.5t-31 16.5 t-21.5 27t-8 36zM10348 333l6 21q-20 6 -45.5 10t-54.5 4q-41 0 -66.5 -20t-25.5 -52q0 -25 18 -39.5t48 -14.5q19 0 38 6.5t35.5 18.5t28.5 29t18 37zM10449 260l29 29q25 -24 52 -34.5t55 -10.5q26 0 46.5 14t20.5 37q0 15 -12 27t-46 25q-42 17 -64 34.5t-22 49.5 q0 39 31 66.5t85 27.5q33 0 63 -12.5t49 -29.5l-26 -31q-19 15 -42 25t-49 10q-32 0 -49 -14.5t-17 -33.5q0 -15 12.5 -26.5t48.5 -26.5q42 -17 63 -35.5t21 -47.5q0 -43 -34 -70t-83 -27q-36 0 -71 13.5t-61 40.5zM10790 268q0 8 1 16t3 16l49 178h-43l11 41h43l25 92h44 l-24 -92h96l-11 -41h-96l-47 -176q-1 -5 -1.5 -11t-0.5 -11q0 -32 41 -32q21 0 45 10l-12 -42q-23 -9 -48 -9q-33 0 -54 15.5t-21 45.5zM10962 161q26 7 39 20t17 32h-22l17 62h54l-15 -53q-11 -39 -30.5 -56.5t-55.5 -24.5zM11321 170l29 32q24 -21 54.5 -33.5t66.5 -12.5 q29 0 50 8.5t35 23.5q14 13 23 31t16 41l8 31q-23 -23 -51 -38.5t-66 -15.5q-24 0 -46.5 7.5t-40 22t-28 36t-10.5 49.5q0 38 15 69.5t39 54.5t55 36t63 13q25 0 43 -6t31.5 -16.5t22.5 -23.5t16 -27l18 67h45l-70 -263q-10 -35 -21.5 -57t-28.5 -39q-42 -43 -118 -43 q-42 0 -81.5 14t-68.5 39zM11629 398q0 35 -24.5 61t-68.5 26q-24 0 -47 -9.5t-40.5 -26.5t-28 -40.5t-10.5 -50.5q0 -42 27 -62.5t62 -20.5q26 0 49.5 10.5t41.5 27.5t28.5 39.5t10.5 45.5zM11816 519h46l-20 -80q28 40 63.5 63.5t81.5 21.5l-13 -49h-3q-25 0 -49.5 -9 t-45.5 -27t-37.5 -44.5t-25.5 -61.5l-32 -120h-46zM11994 343q0 36 14.5 68.5t39 58t57.5 40.5t70 15q63 0 101 -38t38 -98q0 -37 -14.5 -70t-39.5 -58.5t-57.5 -40.5t-68.5 -15q-64 0 -102 39t-38 99zM12267 386q0 48 -26 73.5t-69 25.5q-27 0 -50.5 -12t-41.5 -32 t-28.5 -45t-10.5 -52q0 -47 26.5 -72t69.5 -25q25 0 48.5 11.5t41.5 31t29 44.5t11 52zM12392 519h46l16 -244l148 245h38l17 -245l147 244h48l-191 -309h-41l-17 242l-147 -242h-40zM13022 260l30 29q25 -24 52 -34.5t55 -10.5q26 0 46.5 14t20.5 37q0 15 -12.5 27 t-45.5 25q-42 17 -64 34.5t-22 49.5q0 39 30.5 66.5t84.5 27.5q35 0 64.5 -12.5t48.5 -29.5l-26 -31q-20 15 -42.5 25t-48.5 10q-32 0 -49 -14.5t-17 -33.5q0 -15 12.5 -26.5t48.5 -26.5q42 -17 63 -35.5t21 -47.5q0 -21 -9 -39t-25 -31t-37.5 -20t-46.5 -7q-35 0 -70 13.5 t-62 40.5zM13355 343q0 36 14 68.5t38.5 58t57 40.5t69.5 15q64 0 102 -38t38 -98q0 -37 -15 -70t-39.5 -58.5t-57 -40.5t-68.5 -15q-63 0 -101 39t-38 99zM13628 386q0 48 -27 73.5t-70 25.5q-26 0 -49.5 -12t-41.5 -32t-28.5 -45t-10.5 -52q0 -47 26 -72t70 -25 q25 0 49 11.5t42 31t29 44.5t11 52zM13839 644h45l-115 -431h-46zM13967 519h46l-82 -306h-46zM13996 636h52l-14 -51h-52zM14063 335q0 41 14 75.5t38 60t55 40t64 14.5q48 0 75 -22.5t40 -52.5l52 194h46l-116 -431h-45l14 52q-23 -25 -51 -42.5t-65 -17.5q-52 0 -86.5 36 t-34.5 94zM14333 390q0 41 -26 68t-68 27q-27 0 -50.5 -11.5t-41 -31.5t-27 -46.5t-9.5 -56.5q0 -42 24 -67.5t62 -25.5q25 0 49.5 12t44 32t31 46t11.5 54zM14453 275h54l-16 -62h-55zM997 481q-138 0 -265.5 11t-238 31.5t-201.5 49t-156 63t-100.5 74.5t-35.5 83v311 q0 43 35.5 83t100.5 74.5t156 62.5t201.5 48.5t238 31.5t265.5 11t265.5 -11t238 -31.5t201.5 -48.5t156 -62.5t100.5 -74.5t35.5 -83v-311q0 -56 -57 -105t-160 -90l-780 195v-312zM1777 287q103 40 160 89.5t57 104.5v-311q0 -55 -57 -104.5t-160 -89.5l-780 194v311z M0 481q0 -43 35.5 -83t100.5 -74.5t156 -62.5t201.5 -48.5t238 -31.5t265.5 -11v-311q-138 0 -265.5 11t-238 31.5t-201.5 48.5t-156 62.5t-100.5 74.5t-35.5 83v311zM2850 198q-91 0 -168.5 33t-134.5 90.5t-89 135.5t-32 167v3q0 88 31.5 165.5t88.5 135.5t136.5 92 t174.5 34q58 0 106 -9.5t87 -26t71.5 -40.5t61.5 -52l-116 -133q-48 44 -98 68.5t-113 24.5q-52 0 -96 -20t-76 -55t-50 -82t-18 -100v-2q0 -54 17.5 -101.5t49 -83t76 -56t97.5 -20.5q35 0 64.5 7t55 19.5t49.5 30.5t48 41l116 -118q-32 -34 -66.5 -61.5t-75 -46.5 t-89 -29.5t-108.5 -10.5zM3687 213v68q-33 -36 -79.5 -58t-112.5 -22q-45 0 -84.5 12.5t-69 37t-46.5 61t-17 83.5v2q0 52 18.5 90t52.5 63t81 37t103 12q48 0 84.5 -7.5t70.5 -18.5v11q0 56 -34 85.5t-102 29.5q-51 0 -91 -8.5t-84 -25.5l-45 138q52 22 109 36.5t137 14.5 q147 0 215 -72.5t68 -201.5v-367h-174zM3690 468q-23 11 -52.5 17.5t-61.5 6.5q-58 0 -91.5 -22.5t-33.5 -65.5v-2q0 -36 27 -56.5t71 -20.5q64 0 102.5 31t38.5 80v32zM4423 213l-166 258l-62 -65v-193h-180v863h180v-460l210 230h215l-241 -249l250 -384h-206zM5274 466 h-441q13 -61 53.5 -92t101.5 -31q45 0 80.5 15t72.5 50l104 -91q-45 -55 -109 -87t-151 -32q-71 0 -132 24t-105 67.5t-69 103.5t-25 133v3q0 67 23 127t64.5 105t99 71t126.5 26q79 0 137.5 -28.5t96.5 -76t56.5 -110t18.5 -129.5v-2q0 -14 -0.5 -23.5t-1.5 -22.5z M4967 714q-56 0 -91 -36.5t-45 -98.5h270q-8 60 -42.5 97.5t-91.5 37.5zM5749 461h-138v-248h-182v827h338q74 0 132.5 -21t99.5 -58.5t62.5 -90.5t21.5 -116v-2q0 -72 -26 -126.5t-71 -91t-106 -55t-131 -18.5zM5899 750q0 62 -39.5 94t-108.5 32h-140v-253h144 q69 0 106.5 35.5t37.5 89.5v2zM6736 213v332h-336v-332h-182v827h182v-327h336v327h182v-827h-182zM7436 461h-138v-248h-182v827h338q74 0 132.5 -21t99.5 -58.5t63 -90.5t22 -116v-2q0 -72 -26 -126.5t-71.5 -91t-106.5 -55t-131 -18.5zM7587 750q0 62 -39.5 94t-108.5 32 h-141v-253h144q69 0 107 35.5t38 89.5v2z" />
+<glyph unicode="N" horiz-adv-x="2633" d="M1317 977l289 -71q38 14 59 32.5t21 38.5v116q0 24 -29 45t-79 36.5t-117.5 24.5t-143.5 9q-77 0 -144 -9t-117 -24.5t-79 -36.5t-29 -45v-116q0 -24 29 -44.5t79 -36.5t117 -25t144 -9v115zM1606 790l-289 72v-115l289 -72q38 15 59 33.5t21 38.5v115q0 -20 -21 -38.5 t-59 -33.5zM948 747q0 -24 29 -44.5t79 -36.5t117 -25t144 -9v115q-77 0 -144 9t-117 25t-79 36.5t-29 44.5v-115zM1317 363l-637 212v690l637 212l637 -212v-690zM743 621l574 -192l574 192v598l-574 192l-574 -192v-598zM207 -182q-45 0 -82.5 16t-65.5 44t-43.5 65.5 t-15.5 81.5q0 43 15.5 81.5t43.5 67t66.5 45t84.5 16.5q57 0 94 -17.5t65 -44.5l-57 -65q-23 21 -47.5 33t-54.5 12q-26 0 -47 -10t-37 -27t-24.5 -40t-8.5 -48q0 -27 8.5 -50t24 -40.5t37 -27.5t47.5 -10q35 0 58.5 12.5t46.5 34.5l57 -57q-32 -34 -69.5 -53t-95.5 -19z M615 -175v33q-17 -17 -39.5 -28t-54.5 -11q-44 0 -75 24.5t-31 70.5q0 51 35 75t89 24q23 0 41 -3.5t35 -9.5v6q0 56 -66 56q-26 0 -45 -4t-40 -12l-22 66q25 11 52.5 18t66.5 7q72 0 105 -35t33 -98v-179h-84zM616 -51q-11 5 -25 8.5t-31 3.5q-28 0 -44 -11t-16 -32 q0 -19 13.5 -28.5t34.5 -9.5q30 0 49 15t19 39v15zM973 -175l-81 126l-30 -32v-94h-87v420h87v-224l103 112h104l-117 -121l121 -187h-100zM1388 -51h-215q7 -30 26.5 -45.5t48.5 -15.5q23 0 40 7.5t35 24.5l50 -45q-21 -26 -52.5 -41.5t-73.5 -15.5q-35 0 -64 11.5 t-51 32.5t-34 50.5t-12 64.5q0 33 11 62.5t31.5 51.5t48.5 35t62 13q39 0 67 -14t46.5 -37t27.5 -53t9 -63q0 -8 -0.5 -12.5t-0.5 -10.5zM1239 69q-28 0 -45 -18t-22 -48h132q-4 30 -21 48t-44 18zM1552 147v-85h192v-81h-192v-156h-89v403h307v-81h-218zM2110 -51h-215 q7 -30 27 -45.5t49 -15.5q22 0 39 7.5t35 24.5l50 -45q-21 -26 -52 -41.5t-74 -15.5q-35 0 -64 11.5t-51 32.5t-34 50.5t-12 64.5q0 33 11 62.5t31.5 51.5t48.5 35t62 13q39 0 67 -14t46.5 -37t27.5 -53t9 -63q0 -8 -0.5 -12.5t-0.5 -10.5zM1961 69q-27 0 -44.5 -18 t-22.5 -48h132q-4 30 -21 48t-44 18zM2285 -181q-33 0 -67.5 11.5t-65.5 35.5l38 57q25 -18 50 -27t47 -9q37 0 37 22q0 16 -19 22.5t-45 14.5q-16 5 -32.5 11.5t-29.5 17t-21.5 26t-8.5 38.5q0 48 32.5 73.5t80.5 25.5q29 0 59 -9.5t56 -26.5l-34 -60q-23 14 -44.5 21.5 t-38.5 7.5q-32 0 -32 -22q0 -13 15.5 -19.5t38.5 -14.5l8 -3q16 -6 32.5 -13t30 -17.5t22 -25.5t8.5 -36q0 -53 -33.5 -77t-83.5 -24zM2564 -180q-40 0 -65 19.5t-25 72.5v147h-37v74h37v79h88v-79h72v-74h-72v-132q0 -30 28 -30q24 0 43 11v-70q-27 -18 -69 -18z" />
+<glyph unicode="O" horiz-adv-x="5926" d="M1014 581q-122 0 -229 14t-186.5 39t-126 58.5t-46.5 71.5v183q0 38 46.5 71.5t126 58.5t186.5 39.5t229 14.5t229 -14.5t187 -39.5t126.5 -58.5t46.5 -71.5v-183q0 -33 -34.5 -62t-94.5 -53l-460 115v-183zM1474 466q60 23 94.5 52.5t34.5 62.5v-184q0 -32 -34.5 -61.5 t-94.5 -53.5l-460 115v184zM426 581q0 -38 46.5 -71.5t126 -58.5t186.5 -39.5t229 -14.5v-184q-122 0 -229 14.5t-186.5 39.5t-126 58.5t-46.5 71.5v184zM100 1353v-1363h1829v1363h-1829zM2029 -110h-2029v1564h2029v-1564zM2637 354q-71 0 -131.5 25.5t-104.5 70 t-69 104.5t-25 129t24.5 130t69 106.5t106.5 71.5t136 26q90 0 149 -27.5t103 -71.5l-89 -103q-38 33 -77 52.5t-88 19.5q-41 0 -74.5 -16t-58.5 -43t-38.5 -63.5t-13.5 -77.5q0 -42 13.5 -79t38 -64.5t58.5 -43.5t75 -16q56 0 93.5 20t75.5 54l90 -90q-25 -27 -51.5 -48 t-58 -35.5t-69.5 -22.5t-84 -8zM3286 364v53q-26 -28 -61.5 -45t-86.5 -17q-35 0 -65.5 10t-53.5 29t-36.5 47t-13.5 64q0 41 14.5 71t41 49.5t62.5 29t80 9.5q38 0 66 -5.5t54 -14.5v8q0 44 -26.5 67t-78.5 23q-40 0 -71 -7t-65 -19l-35 106q42 18 85 28.5t106 10.5 q114 0 166.5 -56t52.5 -156v-285h-135zM3289 563q-18 8 -40.5 13t-48.5 5q-45 0 -70.5 -17.5t-25.5 -50.5q0 -29 21 -45.5t55 -16.5q49 0 79 24.5t30 62.5v25zM3858 364l-129 201l-48 -51v-150h-139v669h139v-356l163 179h166l-186 -194l193 -298h-159zM4518 561h-342 q11 -48 41.5 -72t78.5 -24q35 0 62.5 12t56.5 38l80 -70q-35 -43 -84.5 -67t-116.5 -24q-55 0 -102 18.5t-81.5 52t-54 80t-19.5 102.5q0 54 18 101t50 82t76.5 55t98.5 20q61 0 106.5 -22t74.5 -59t43.5 -85.5t14.5 -100.5v-19t-1 -18zM4280 753q-43 0 -70.5 -28t-35.5 -76 h210q-7 47 -33 75.5t-71 28.5zM4889 364h-251v642h251q75 0 138 -24.5t108 -67t70 -101t25 -126.5t-25 -127t-70 -102.5t-108 -68.5t-138 -25zM5082 685q0 43 -14 78.5t-39.5 61t-61 40t-78.5 14.5h-110v-387h110q43 0 78.5 14t61 39.5t39.5 61t14 78.5zM5656 354 q-71 0 -131 25.5t-104 70t-69 104.5t-25 129t24.5 130t68.5 106.5t106 71.5t136 26q45 0 82 -7t67.5 -20t55.5 -31.5t48 -40.5l-90 -103q-37 33 -76.5 52.5t-87.5 19.5q-41 0 -75 -16t-58.5 -43t-38.5 -63.5t-14 -77.5q0 -42 13.5 -79t38 -64.5t58.5 -43.5t76 -16 q55 0 92.5 20t75.5 54l90 -90q-25 -27 -51.5 -48t-58 -35.5t-69.5 -22.5t-84 -8z" />
+<glyph unicode="P" horiz-adv-x="1227" d="M843 679q-12 5 -12 17q0 3 2 7l3 4v81q-40 -9 -99 -14.5t-128 -5.5t-128 5.5t-97 14.5v-81l2 -4q1 -2 1 -6q0 -13 -11 -18q-4 -2 -7 -2q-12 0 -17 11q-5 12 -8.5 16.5t-4.5 5.5q-6 0 -10 -6t-6 -14.5t-2.5 -18.5t-0.5 -17q0 -22 5.5 -41t13 -33t16 -22.5t14.5 -8.5t10 -4 q6 -6 6 -14v-104q0 -14 6 -25.5t16 -20.5l145 -114q14 -13 36 -13h38q22 0 36 13q4 4 12 4q10 0 14 -7q4 -5 4 -12q0 -10 -7 -14q-26 -21 -59 -21h-38q-34 0 -59 21l-144 115q-36 28 -36 74v89q-13 6 -25 19.5t-21 32t-14.5 41t-5.5 45.5q0 48 13.5 67.5t30.5 23.5l-6 74 v200q-38 7 -71.5 29t-53.5 58q-12 20 -17.5 42t-5.5 45q0 46 23 87.5t66 65.5q40 22 87 22q35 0 63 -11q15 33 41.5 60.5t62.5 44.5q45 21 93 21q62 0 115.5 -32.5t81.5 -92.5q0 -1 0.5 -1.5t0.5 -1.5q34 14 67 14q46 0 87 -23.5t65 -65.5q24 -41 24 -87t-23 -87.5 t-66 -65.5q-30 -16 -64 -21v-200l-5 -74q13 -3 24 -14t16 -35v-5q0 -5 -2 -10.5t-10 -6.5q-10 0 -12.5 7.5t-3.5 8.5q-3 20 -24 20q-2 -1 -5 -5.5t-8 -16.5q-5 -11 -17 -11q-3 0 -7 2zM1219 -120q0 -28 -20 -47q-22 -22 -57 -22h-869q13 96 48 148t82 76t101 28t105 4 q39 0 74 10.5t60.5 29.5t40.5 43.5t15 53.5v66q43 -15 90.5 -32.5t91 -35.5t79.5 -36t58 -34q27 -20 45 -53t29.5 -69t17.5 -70.5t9 -55.5v-4zM489 98q-42 -6 -83 -21t-75.5 -47.5t-59.5 -85t-35 -133.5h-160q-34 0 -56 22q-20 18 -20 45v6q3 21 9 55.5t17.5 70.5t29.5 69 t44 53q22 16 58.5 34t80 36t90.5 35.5t91 32.5v-66q0 -32 18.5 -59.5t50.5 -46.5zM256 1218q11 39 45 58q22 13 47 13t47.5 -13t36.5 -36q0 -1 1 -1.5t1 -1.5q2 -12 5.5 -24t9.5 -23q2 -6 6.5 -8.5t9.5 -2.5q6 0 8 2q11 5 11 16q0 2 -2 8q-7 14 -10 29.5t-3 30.5 q0 40 21 74.5t59 52.5q27 13 59 13q22 0 48 -8q56 -20 80 -72q5 -11 17 -11q3 0 7 2q11 5 11 16q0 2 -2 8q-15 32 -41 55.5t-59 36.5q-27 10 -59 10q-40 0 -77 -17q-41 -20 -66 -54.5t-33 -76.5q-38 32 -86 32q-34 0 -65 -18q-48 -26 -62 -80q-2 -9 -3.5 -17.5t-1.5 -17.5 q0 -35 18 -65q5 -10 15 -10q4 0 10 2q9 7 9 16q0 4 -3 9q-12 22 -12 49q0 12 3 24zM922 606q0 -30 -23 -43q-3 -43 -20.5 -85.5t-46.5 -77t-67.5 -56.5t-84.5 -24q-10 -19 -33 -19h-53q-16 0 -27 11t-11 27q0 17 11 28t27 11h53q13 0 22.5 -7.5t13.5 -19.5q32 3 64 20 t58 44.5t43.5 64.5t20.5 81q-7 5 -8 17.5t-1 27.5q8 4 9.5 11.5t1.5 15.5t1.5 14t9.5 6q17 0 28.5 -13.5t11.5 -33.5zM774 466q-5 -34 -29 -56.5t-61 -22.5q-24 0 -44 9.5t-31 24.5q-11 -15 -31 -24.5t-43 -9.5q-37 0 -61 22.5t-30 56.5h14q20 -25 51 -25q28 0 44 25 q10 16 28 16q16 0 28 -12q12 12 29 12q19 0 29 -16q8 -13 19.5 -19t24.5 -6q14 0 27.5 6.5t23.5 18.5h12zM940 1077q32 19 49.5 50.5t17.5 66.5q0 17 -4 33t-13 31q-14 23 -34.5 39.5t-46.5 23.5q-9 2 -17.5 3.5t-17.5 1.5q-36 0 -66 -18q-9 -5 -9 -16q0 -5 3 -9q4 -9 16 -9 q6 0 9 2q23 13 46 13q7 0 13.5 -1t13.5 -3q36 -9 58 -45q12 -23 12 -46q0 -26 -13 -48t-36 -36q-8 -5 -8 -16q0 -6 2 -9q5 -10 16 -10q3 0 9 2zM713 -143q17 0 29 12t12 29t-12 28.5t-29 11.5t-29 -11.5t-12 -28.5t12 -29t29 -12zM487 -143q17 0 29 12t12 29t-12 28.5 t-29 11.5t-28.5 -11.5t-11.5 -28.5t11.5 -29t28.5 -12z" />
+<glyph unicode="Q" horiz-adv-x="1914" d="M1516 56q8 0 14.5 -6t6.5 -15t-6.5 -15t-14.5 -6h-813q-9 0 -15 6t-6 15t6 15t15 6h813zM1516 132q8 0 14.5 -6.5t6.5 -15.5q0 -8 -6.5 -14t-14.5 -6h-813q-9 0 -15 6t-6 14q0 9 6 15.5t15 6.5h813zM1516 1056q8 0 14.5 -6t6.5 -15v-843q0 -8 -6.5 -14.5t-14.5 -6.5h-813 q-20 0 -37.5 -7.5t-30.5 -20.5t-20.5 -30.5t-7.5 -36.5q0 -40 28 -68t68 -28h813q8 0 14.5 -6t6.5 -15t-6.5 -15t-14.5 -6h-813q-29 0 -54 10.5t-43.5 29.5t-29.5 44t-11 54v278q24 -30 60 -48.5t78 -18.5h679q24 0 41.5 17.5t17.5 41.5q0 11 -4 20t-10 17q6 8 10 18t4 21 t-4 20t-10 17q6 8 10 18t4 21q0 23 -17 40q8 8 12.5 18.5t4.5 22.5v477h75zM703 324q-29 0 -54 11t-43.5 29.5t-29.5 43.5t-11 54v754q0 28 11 53.5t29.5 44t43.5 29.5t54 11h679q9 0 15 -6t6 -15v-754q0 -9 -6 -15t-15 -6h-679q-40 0 -68 -28t-28 -68q0 -20 7.5 -37 t20.5 -30t30.5 -20.5t37.5 -7.5h679q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5h-679zM1382 443q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5h-679q-9 0 -15 6.5t-6 15.5t6 15t15 6h679zM1382 519q9 0 15 -6.5t6 -14.5q0 -9 -6 -15.5t-15 -6.5h-679q-9 0 -15 6.5t-6 15.5q0 8 6 14.5t15 6.5 h679zM175 89q19 0 32 -13t13 -32v-108q-21 16 -45 16t-45 -16v108q0 19 13 32t32 13zM175 -97q19 0 32 -13t13 -32t-13 -32t-32 -13t-32 13t-13 32t13 32t32 13zM174 1478q40 0 72.5 -22t55 -56.5t34.5 -77t12 -84.5q0 -54 -9.5 -100t-24 -87t-31 -78.5t-31 -76.5t-24 -81 t-9.5 -90v-603q-21 16 -45 16t-45 -16v603q0 48 -9.5 90t-24 81t-31 76.5t-31 78.5t-24 86.5t-9.5 100.5q0 42 12 84.5t34.5 77t55 56.5t72.5 22zM174 992q25 0 47.5 18.5t39 51t26 75.5t9.5 92q0 40 -12 79t-32 66q-2 3 -7 3q-3 0 -4 -1q-5 -2 -5 -7q0 -3 1 -4 q11 -38 11 -77q0 -45 -8 -84.5t-22 -69.5t-32.5 -47.5t-39.5 -17.5q-19 0 -33 11.5t-23 23.5q-1 4 -7 4q-3 0 -4 -1q-5 -2 -5 -8q0 -2 1 -3q17 -49 43 -76.5t56 -27.5zM1866 989q-7 3 -13.5 5t-14.5 2t-14.5 -2t-13.5 -5l15 46q3 9 13 9t13 -9zM1838 869q-21 0 -39.5 -8.5 t-32.5 -22.5l31 96q5 12 16 19.5t25 7.5t25 -7.5t16 -18.5l31 -97q-14 14 -32.5 22.5t-39.5 8.5zM1838 164q30 0 51 -21t21 -50q0 -30 -21 -51.5t-51 -21.5t-51 21.5t-21 51.5q0 29 21 50t51 21zM1838 60q14 0 23 9.5t9 23.5q0 13 -9 22.5t-23 9.5t-23 -9.5t-9 -22.5 q0 -14 9 -23.5t23 -9.5zM1910 458q-19 20 -45 28v-201q26 -6 45 -27v-89q-14 14 -32 22.5t-40 8.5t-40 -8.5t-32 -22.5v593q0 30 21 51t51 21t51 -21t21 -51v-304z" />
+<glyph unicode="R" horiz-adv-x="1606" d="M185 1182h127v-37h-127v37zM185 843h127v-38h-127v38zM185 778h127v-37h-127v37zM784 670h-531v37h531v-37zM435 981v-36h-182v36h182zM1461 -16q30 0 56 -4t45.5 -11.5t30.5 -17.5t11 -21t-11 -20.5t-30.5 -17t-45.5 -11.5t-56 -4q-18 0 -40 0.5t-44.5 2t-44 4 t-39.5 7.5q-4 -44 -13.5 -72.5t-22.5 -28.5h-869q-13 0 -22.5 28.5t-13.5 72.5q-18 -5 -40 -7.5t-44.5 -4t-44.5 -2t-40 -0.5q-29 0 -55 4t-45.5 11.5t-30.5 17t-11 20.5t11 21t30.5 17.5t45.5 11.5t55 4q18 0 40 -1t44.5 -3t44.5 -5.5t40 -8.5q4 45 13.5 74.5t22.5 29.5 h869q13 0 22.5 -29.5t13.5 -74.5q18 5 39.5 8.5t44 5.5t44.5 3t40 1zM732 825q-61 54 -94 128t-33 155q0 71 24.5 136t71.5 118q57 63 131 94.5t153 31.5q68 0 133.5 -24t119.5 -72q61 -54 94 -128.5t33 -155.5q0 -108 -57 -200l240 -214q22 -20 22 -48q0 -24 -17 -44 q-19 -22 -50 -22q-26 0 -43 16l-239 214q-51 -41 -112 -61t-124 -20q-68 0 -133 23.5t-120 72.5zM782 1290q-34 -38 -51.5 -84.5t-17.5 -97.5q0 -58 23 -111t67 -92q39 -35 86 -52t96 -17q57 0 110 22.5t94 68.5q33 38 51 84t18 97q0 59 -23.5 112t-67.5 92q-39 35 -86 52 t-96 17q-57 0 -109.5 -23t-93.5 -68zM1069 245q9 0 9 -11v-38q0 -10 -9 -10h-908q-10 0 -10 10v38q0 11 10 11h908zM806 1078q-9 8 -13 18.5t-4 21.5q0 22 14 36q16 18 40 18q20 0 36 -14l93 -84l144 154q8 9 18 13t21 4q10 0 19.5 -3t17.5 -11q17 -16 17 -40 q0 -10 -3 -19.5t-11 -17.5l-180 -193q-15 -17 -40 -17q-19 0 -35 14zM310 365q35 0 63 11.5t49.5 32t37 47t25.5 56.5h-475q-10 0 -10 10v819q0 9 10 9h626q-25 -35 -42 -77h-516v-684h1068v126q20 8 39 18.5t38 22.5v-234q0 -10 -10 -10h-475q10 -30 26.5 -56.5t39 -46.5 t51.5 -32t64 -12h7h13t12.5 -0.5t6.5 -1.5l102 -70q4 -4 4 -11q-2 -7 -10 -7h-878q-9 0 -10 10q0 5 4 8l102 70q0 1 6 1.5t12.5 0.5h12.5h7zM580 981l6 -18t7 -18h-122v36h109zM564 1049l7 -37h-318v37h311zM560 1117v-9v-14t1 -14h-308v37h307zM253 911h356 q5 -11 10.5 -19.5t11.5 -17.5h-378v37z" />
+<glyph unicode="S" horiz-adv-x="1148" d="M437 704q8 -2 19.5 -13t26 -28.5t31.5 -38.5t37 -43l-16 82q-1 2 -1 7q0 13 10.5 24t26.5 11q10 0 22 -6q7 -5 14 -18.5t15 -33t17.5 -44t20.5 -50.5q-23 -23 -57 -23q-57 0 -101 21.5t-81 49.5l-29 52q-4 5 -4 15q0 13 9.5 25t28.5 12q7 0 11 -1zM1148 286v-496 l-323 177q-5 23 -8 45t-3 43q0 63 20.5 114.5t49 90.5t59.5 64t53 36zM893 322q-35 -34 -66.5 -85t-42.5 -118q-19 18 -49.5 38.5t-65.5 40t-70.5 36t-62.5 27.5q-21 8 -44.5 31t-48.5 53.5t-51 66t-52 68t-50.5 60t-46.5 42.5q-24 17 -34.5 33t-10.5 30t9 22t24 8 q30 0 56.5 -13t53.5 -32.5t55 -42.5t59.5 -42.5t68.5 -32.5t82 -13q21 0 36.5 7.5t29 21.5t26.5 33.5l29 43.5q23 35 43.5 56.5t39.5 21.5q13 0 24 -11q9 -8 12.5 -19.5t3.5 -25.5q0 -22 -6.5 -47.5t-15.5 -53.5l-4 -12q-3 -11 -3 -21q0 -18 9.5 -34.5t21.5 -35t24 -43 t17 -58.5zM367 740q-30 0 -56 12.5t-43 35.5h-71q-56 0 -106.5 22t-88.5 64q-2 4 -2 6t1 3q1 5 8 5h1006q7 0 9 -7q0 -3 -2 -7q-38 -42 -88.5 -64t-106.5 -22h-71q-17 -23 -42.5 -35.5t-55.5 -12.5h-291zM220 915q-11 0 -11 11v340q0 10 11 10h261q-11 9 -18 21.5t-7 27.5 q0 13 5.5 24.5t13.5 19.5q-4 20 -20.5 34t-38.5 14q-6 0 -10.5 4t-4.5 10t4.5 10.5t10.5 4.5q30 0 53.5 -17.5t31.5 -45.5q10 2 15 2q25 0 42.5 -17.5t17.5 -42.5q0 -15 -7 -27.5t-18 -21.5h254q10 0 10 -10v-340q0 -11 -10 -11h-585zM535 1363q-8 0 -13 -4.5t-5 -11.5 t5 -12t13 -5q7 0 11.5 5t4.5 12q0 16 -16 16zM230 1153v-114h26q2 9 12 9q9 0 11 -9h515v114h-506q0 -5 -3 -8.5t-8 -3.5t-8.5 3.5t-3.5 8.5h-35zM305 1117q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5t8.5 3.5q12 0 12 -12q0 -5 -3.5 -8.5t-8.5 -3.5zM302 1092q0 12 12 12 q5 0 8.5 -3.5t3.5 -8.5t-3.5 -8.5t-8.5 -3.5t-8.5 3.5t-3.5 8.5zM337 1054q-6 0 -6 6t6 6t6 -6t-6 -6zM389 1084q-6 0 -6 6q0 7 6 7t6 -7q0 -6 -6 -6zM410 1130q-6 0 -6 6t6 6t6 -6t-6 -6zM265 1102q-6 0 -6 6t6 6q7 0 7 -6t-7 -6zM483 1071q-6 0 -6 7q0 6 6 6t6 -6 q0 -7 -6 -7zM536 1115q-6 0 -6 6q0 7 6 7t6 -7q0 -6 -6 -6zM632 1087q-7 0 -7 6t7 6q6 0 6 -6t-6 -6zM606 1058q-6 0 -6 6t6 6t6 -6t-6 -6zM367 1115q-12 0 -12 12q0 5 3.5 8.5t8.5 3.5t8.5 -3.5t3.5 -8.5t-3.5 -8.5t-8.5 -3.5zM425 1047q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5 t8.5 3.5q12 0 12 -12q0 -5 -3.5 -8.5t-8.5 -3.5zM438 1108q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5t8.5 3.5t8.5 -3.5t3.5 -8.5q0 -12 -12 -12z" />
+<glyph unicode="T" horiz-adv-x="1627" d="M1622 136q0 -28 -5 -64.5t-18.5 -74.5t-37 -75t-60.5 -66t-88.5 -46.5t-120.5 -17.5q-63 0 -113 18t-90 49t-72 72t-59 87q-91 -25 -196 -25q-112 0 -212 30t-185 82t-152.5 123.5t-114.5 153.5t-72.5 172t-25.5 180t25.5 180t72.5 172.5t114.5 153.5t152.5 123.5 t185 82.5t212 30t212.5 -30t185.5 -82.5t152.5 -123.5t114.5 -153.5t72.5 -172.5t25.5 -180q0 -80 -20 -160.5t-58.5 -156t-93.5 -143t-124 -121.5q38 -52 80.5 -87t86.5 -35q37 0 59.5 15.5t35 34.5t17 36t4.5 19h110zM762 151q63 0 116 15q-26 48 -52.5 91.5t-58 76 t-70 52t-87.5 19.5q-13 0 -22 -1.5t-16 -3.5q-8 -3 -13 -5l-40 89q24 20 59 36q30 14 75 25.5t107 11.5q108 0 197.5 -50.5t143.5 -144.5q35 75 51.5 169t16.5 203q0 127 -22.5 234t-71.5 184.5t-126.5 121t-186.5 43.5t-186 -43.5t-126 -121t-71.5 -184.5t-22.5 -234 t22.5 -234t71.5 -184.5t126 -121t186 -43.5z" />
+<glyph unicode="U" horiz-adv-x="1432" d="M1432 -75q0 -31 -22 -53t-54 -22h-1281q-31 0 -53 22t-22 53v628q0 11 5 26l3 5q2 6 3 7l640 1068q11 17 28 27t37 10t37 -10t27 -27l637 -1061l7 -14l2 -3q6 -14 6 -29v-627zM1281 477h-1130v-156h1130v156zM811 1243q0 8 -7 12q-6 8 -16 8h-145q-8 0 -16 -8 q-4 -2 -5 -6.5t-1 -6.5l11 -303q0 -6 6.5 -10.5t15.5 -4.5h123q8 0 14.5 4.5t7.5 10.5zM801 818q0 8 -6.5 14.5t-15.5 6.5h-127q-9 0 -15 -6.5t-6 -14.5v-126q0 -9 6 -15.5t15 -6.5h127q9 0 15.5 6.5t6.5 15.5v126zM1281 1v156h-1130v-156h1130z" />
+<glyph unicode="V" horiz-adv-x="1703" d="M1658 1322q45 -80 45 -168q0 -90 -44.5 -169.5t-128.5 -127.5q-58 -33 -123 -42v-522q0 -21 -44 -40t-119.5 -33.5t-177.5 -22.5t-218 -8t-218 8t-178 22.5t-120 33.5t-44 40v524q-75 11 -139 54t-104 114q-23 40 -34 82.5t-11 85.5q0 90 44.5 169.5t128.5 127.5 q40 23 82.5 33.5t85.5 10.5q65 0 122 -22q31 65 82 118t121 86q44 21 89.5 31t91.5 10q60 0 117 -16.5t107 -47.5t91 -76.5t68 -102.5q1 -2 1 -3t1 -2q62 25 129 25q90 0 169.5 -44t127.5 -128zM1407 143v-167q0 -21 -44 -40t-119.5 -33.5t-177.5 -22.5t-218 -8t-218 8 t-178 22.5t-120 33.5t-44 40v167q0 -21 44 -40t120 -33.5t178 -22.5t218 -8t218 8t177.5 22.5t119.5 33.5t44 40z" />
+<glyph unicode="W" horiz-adv-x="2086" d="M1970 461q46 -34 75.5 -75t40.5 -82l-47 -70q-4 0 -8 -0.5t-8 -0.5q-38 0 -80.5 15.5t-84.5 45.5q-32 23 -57 51.5t-40 57.5q-39 -51 -90 -109t-112 -119q-65 -65 -127 -119t-115.5 -93t-94.5 -61t-64 -22q-12 0 -18 6l-91 91q6 -6 18 -6q23 0 64 22t94.5 61t115.5 93 t127 119t119.5 127.5t93.5 116t61 94.5t22 64q0 12 -6 18l91 -91q6 -6 6 -18q0 -19 -19 -59q32 -5 66.5 -19t67.5 -38zM1661 783q6 -6 6 -18q0 -23 -22 -64t-61 -94.5t-93.5 -116t-119.5 -127.5t-127 -119t-115.5 -93t-94.5 -61t-64 -22q-12 0 -18 6l-67 66l-748 748 q-69 69 -103 154.5t-34 175.5t34 175.5t103 154.5t154 102.5t175 33.5t175.5 -33.5t154.5 -102.5q10 -10 19.5 -20.5t18.5 -21.5q3 41 20 79t49 70q35 35 79 52.5t91 17.5q46 0 90.5 -17.5t79.5 -52.5q26 -26 41.5 -56t23.5 -62l166 -569zM956 965l208 207l-94 94l-208 -207 l-207 207l-94 -94l208 -207l-208 -208l94 -93l207 207l208 -207l94 93z" />
+<glyph unicode="X" horiz-adv-x="1497" d="M1459 1688q15 0 26.5 -11t11.5 -27v-1345q0 -16 -11.5 -27t-26.5 -11h-1212q-35 0 -66.5 -13.5t-54.5 -36.5t-36.5 -54t-13.5 -66q0 -36 13.5 -67t36.5 -54t54.5 -36.5t66.5 -13.5h1212q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-51 0 -96 19.5t-78.5 53 t-53 78.5t-19.5 96v1344q0 51 19.5 96t53 78.5t78.5 53t96 19.5h1212zM1459 61q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-16 0 -27 11t-11 27t11 27t27 11h1212zM1459 197q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-16 0 -27 11t-11 27t11 27t27 11 h1212z" />
+<glyph unicode="Y" horiz-adv-x="1797" d="M1402 933q-33 -39 -78 -59t-93 -20q-42 0 -81 15l-184 -235l534 -600q13 -15 19 -33t6 -36q0 -23 -9.5 -44.5t-28.5 -38.5q-31 -25 -70 -25q-23 0 -45 9.5t-37 29.5l-476 601l-473 -604q-17 -20 -40 -30.5t-48 -10.5q-20 0 -39 6.5t-36 20.5q-20 17 -31 41t-11 49 q0 20 7 38.5t21 34.5l537 598l-210 266q-30 -8 -60 -8q-39 0 -80.5 12t-83 34.5t-82 55.5t-76.5 76q-34 40 -61 85.5t-46 92.5t-29.5 93t-10.5 88q0 46 13 83.5t42 61.5q41 34 105 34q44 0 94 -15.5t99.5 -44t96.5 -67.5t86 -85q61 -73 92 -151.5t31 -148.5q0 -29 -9 -55.5 t-13 -49.5l210 -237l183 203q-32 55 -32 116q0 38 13 74.5t39 68.5l383 457q8 10 19.5 14.5t23.5 4.5q18 0 35 -12q19 -17 19 -42q0 -19 -13 -35l-243 -290l47 -39l243 290q15 19 41 19q22 0 36 -13q10 -8 14.5 -19t4.5 -22q0 -9 -3 -18t-10 -17l-243 -290l47 -40l243 290 q17 20 42 20q9 0 18 -3t17 -10q19 -16 19 -42q0 -20 -12 -35l-383 -457v0z" />
+<glyph unicode="Z" horiz-adv-x="1837" d="M391 1574q-14 0 -24.5 10t-10.5 24t10.5 24.5t24.5 10.5q36 0 68.5 -11.5t59.5 -31.5t47 -47.5t30 -60.5q18 5 36 5q30 0 56 -11.5t45.5 -31t31 -46t11.5 -56.5t-11.5 -56t-31 -45.5t-45.5 -31t-56 -11.5t-56.5 11.5t-46 31t-31 45.5t-11.5 56q0 32 12.5 59t33.5 47 q-5 25 -18 46t-31.5 36.5t-42.5 24.5t-50 9zM676 1445q-17 0 -29 -11.5t-12 -28.5t12 -28.5t29 -11.5t28.5 11.5t11.5 28.5t-11.5 28.5t-28.5 11.5zM1639 256q5 0 10.5 0.5t10.5 1.5l29 -341q0 -20 -16 -30q-10 -7 -22 -7q-9 0 -17 4l-236 116l-237 -116q-7 -4 -17 -4 q-13 0 -21 7q-17 9 -17 35l29 336q5 -1 11 -1.5t12 -0.5q12 0 26 3l72 17l48 -56q18 -20 42.5 -31t51.5 -11t51.5 11t41.5 31l49 56l72 -17q13 -3 27 -3zM1398 949q49 0 92 -18.5t75 -50.5t50.5 -75t18.5 -92t-18.5 -92t-50.5 -75t-75 -50.5t-92 -18.5t-92 18.5t-75 50.5 t-50.5 75t-18.5 92t18.5 92t50.5 75t75 50.5t92 18.5zM1830 610q6 -11 6 -24q0 -10 -2 -15q-6 -21 -27 -29l-110 -47l-10 -119q-2 -22 -20 -34q-12 -9 -28 -9q-7 0 -11 1l-116 26l-78 -90q-14 -16 -36 -16t-36 16l-79 90l-116 -26q-4 -1 -11 -1q-16 0 -28 9q-17 13 -19 34 l-11 119l-110 47q-20 8 -26 29q-3 7 -3 15q0 12 7 24l61 103l-61 102q-7 12 -7 24q0 8 3 16q6 19 26 29l110 46l11 119q2 22 19 35q12 9 28 9q7 0 11 -1l116 -27l79 90q14 16 36 16t36 -16l78 -90l116 27q4 1 11 1q16 0 28 -9q18 -12 20 -35l10 -119l110 -46q21 -10 27 -29 q2 -4 2 -8v-8q0 -14 -6 -24l-62 -102zM1398 414q61 0 115.5 23.5t95 64t64 95t23.5 116.5q0 61 -23.5 115.5t-64 95t-95 64t-115.5 23.5q-62 0 -116.5 -23.5t-95 -64t-64 -95t-23.5 -115.5q0 -62 23.5 -116.5t64 -95t95 -64t116.5 -23.5zM1038 374q2 -21 11 -40t24 -34 l-6 -69q-90 -27 -201.5 -41t-228.5 -14q-82 0 -162.5 7t-153 20.5t-134 34t-104.5 47.5v-138q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q137 0 240.5 16t173.5 39l-7 -89q-88 -24 -193 -36.5t-214 -12.5q-119 0 -233 14.5t-204 43t-145 71.5t-55 99v959q0 43 33 77.5 t89.5 61.5t132.5 45.5t162 29.5q6 -40 25 -74t48 -59.5t66 -40t78 -14.5t78 14.5t66 40t48 60t25 74.5q75 -9 143 -24t122.5 -36.5t93 -49t54.5 -60.5l-6 -8l-71 17q-14 3 -27 3q-40 0 -72 -23q-22 -16 -35 -39.5t-15 -49.5l-7 -72l-67 -29q-71 -14 -153.5 -22t-173.5 -8 q-95 0 -181 8.5t-158 24.5t-127 37t-88 47v-188q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q88 0 162 7.5t136 18.5l10 -17l-37 -63q-18 -29 -18 -63q0 -19 6 -37l2 -4q-63 -10 -128.5 -14.5t-132.5 -4.5q-82 0 -162.5 7t-153 20.5t-134 34t-104.5 47.5v-138 q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q129 0 228.5 14.5t169.5 35.5z" />
+<glyph unicode="a" horiz-adv-x="2931" d="M1335 191q-45 -6 -89 -22.5t-81.5 -51t-64.5 -92t-38 -144.5h-173q-36 0 -61 23q-21 19 -21 48v7q2 19 6.5 46t12.5 57h-585q11 84 42 130t72.5 67t89.5 24.5t93 3.5q34 0 64.5 9.5t53.5 26t36 39t13 47.5v57q38 -13 79.5 -28.5t80 -31t70.5 -31.5t51 -30 q14 -10 25 -24.5t20 -31.5q53 23 113 45.5t117 42.5v-71q0 -35 20 -64.5t54 -50.5zM430 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM629 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5 t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM1527 589q17 -27 48 -27q15 0 29.5 6.5t25.5 20.5h14q-6 -37 -32 -61t-66 -24q-26 0 -47.5 10t-32.5 27q-12 -17 -33.5 -27t-47.5 -10q-40 0 -66 24t-31 61h13q11 -14 25.5 -20.5t29.5 -6.5q14 0 27 6.5t21 20.5q5 9 13.5 13t17.5 4 q18 0 31 -13q13 13 31 13q20 0 30 -17zM1154 1188q-42 7 -77 30.5t-58 62.5q-25 44 -25 94t25 94.5t71 70.5q22 13 46 19t48 6q17 0 34 -3.5t34 -9.5q17 37 45.5 66.5t67.5 47.5q24 11 49.5 16.5t50.5 5.5q67 0 125.5 -36t89.5 -101q17 8 35.5 11t36.5 3q50 0 94.5 -24.5 t70.5 -71.5q13 -23 18.5 -46t5.5 -47q0 -50 -24.5 -95t-71.5 -71q-32 -18 -68 -23v-213l-6 -83q18 -5 33 -25.5t15 -73.5q0 -25 -6 -49t-15.5 -44t-22.5 -35t-27 -21v-96q0 -23 -10.5 -44.5t-28.5 -35.5l-157 -125q-28 -22 -64 -22h-45q-36 0 -64 22l-157 125 q-18 14 -28 35.5t-10 44.5v96q-14 6 -27 21t-23 35t-15.5 44t-5.5 49q0 53 14.5 73.5t32.5 25.5l-6 83v214zM1779 792q0 9 -1 19.5t-3 19.5t-6 15.5t-11 6.5q-2 -1 -5.5 -5.5t-8.5 -17.5q-5 -12 -19 -12q-5 0 -7 1q-12 7 -12 18q0 3 2 9q0 1 3 3v89q-43 -10 -106.5 -16 t-138.5 -6t-138.5 6t-105.5 16v-89l2 -3q1 -3 1 -8q0 -13 -12 -19q-2 -1 -7 -1q-13 0 -19 12q-5 13 -8.5 17.5t-5.5 5.5q-7 0 -11 -6.5t-6.5 -15.5t-3 -19.5t-0.5 -19.5q0 -17 5.5 -36.5t13 -36.5t15.5 -28.5t13 -11.5q2 0 3 1q9 0 15 -6q6 -5 6 -14v-113q0 -30 24 -49 l157 -124q17 -14 39 -14h45q21 0 40 14l156 124q24 19 24 49v113q0 9 6 14q5 5 13 5h4q4 1 12.5 9.5t16 23.5t13.5 35.5t6 44.5zM1681 1500q-10 -6 -10 -18q0 -6 2 -9q6 -10 18 -10q6 0 9 2q25 14 52 14q7 0 13.5 -1t13.5 -3q42 -11 63 -49q13 -23 13 -51q0 -27 -13 -51.5 t-39 -38.5q-10 -4 -10 -16q0 -7 3 -11q5 -10 17 -10q5 0 10 3q35 20 53.5 53t18.5 71q0 18 -4.5 36t-14.5 35q-14 25 -36 42t-50 25q-20 6 -39 6q-37 0 -70 -19zM1045 1413q-5 -20 -5 -38q0 -37 19 -71q7 -10 17 -10q5 0 10 3q10 4 10 17q0 7 -2 10q-14 25 -14 51q0 16 4 28 q5 20 17.5 36t31.5 26q25 14 51 14q27 0 51.5 -13.5t38.5 -39.5l2 -3q2 -13 6 -26t10 -26q6 -11 18 -11q4 0 8 2q12 6 12 17q0 3 -2 9q-15 31 -15 65q0 43 23 80.5t65 56.5q30 15 64 15q26 0 52 -9q29 -11 50.5 -31t35.5 -47q5 -12 18 -12q2 0 8 2q12 7 12 19q0 2 -2 8 q-17 35 -45 60t-64 38q-16 6 -32 8.5t-33 2.5q-42 0 -81 -18q-45 -21 -72.5 -59t-35.5 -83q-40 34 -93 34q-37 0 -70 -18q-26 -14 -43 -36.5t-25 -50.5zM431 315q-37 -5 -73 -18.5t-66.5 -42t-52.5 -75t-31 -117.5h-141q-29 0 -50 19q-17 17 -17 39v6q2 19 7.5 49.5t16 62.5 t26.5 61t39 46q19 14 51 30t70.5 31.5t80 31t79.5 28.5v-57q0 -29 16.5 -53t44.5 -41zM284 1128q-34 5 -63.5 24.5t-47.5 51.5q-11 18 -15.5 37.5t-4.5 39.5q0 41 20 77t58 57q18 11 37 15.5t39 4.5q30 0 56 -10q14 30 37 54t55 39q39 18 82 18q55 0 103 -29t72 -83 q28 12 59 12q41 0 76.5 -20.5t57.5 -58.5q21 -36 21 -77t-20.5 -77t-58.5 -57q-24 -14 -55 -19v-174l-5 -67q14 -4 26.5 -21t12.5 -60q0 -20 -4.5 -39.5t-12.5 -36t-18.5 -28.5t-22.5 -17v-79q0 -39 -32 -65l-128 -102q-23 -18 -52 -18h-37q-14 0 -27.5 5t-24.5 13l-128 102 q-32 26 -32 65v79q-12 5 -22.5 17t-18.5 28.5t-12.5 36t-4.5 39.5q0 43 12.5 60t27.5 21l-5 67v175zM793 805q0 14 -3 31.5t-14 18.5q-1 -1 -4 -5t-7 -14q-5 -10 -16 -10q-4 0 -6 1q-10 5 -10 15q0 3 2 7q0 1 3 3v72q-35 -8 -87 -13t-113 -5q-62 0 -113.5 5t-85.5 13v-72 q0 -1 0.5 -1.5t0.5 -1.5q2 -4 2 -7q0 -10 -10 -15q-2 -1 -6 -1q-11 0 -16 10q-5 11 -7.5 14.5t-3.5 4.5q-11 -1 -14 -18.5t-3 -31.5q0 -7 3 -21.5t8 -30t13 -27.5t19 -13q4 0 10 -4q5 -5 5 -12v-92q0 -24 19 -40l128 -101q14 -11 32 -11h37q18 0 32 11l128 101q19 16 19 40 v92q0 7 5 12q6 4 14 4q4 0 10.5 7.5t13 19.5t11 28.5t4.5 36.5zM713 1382q-8 -5 -8 -14q0 -2 2 -8q5 -8 14 -8q4 0 8 2q18 11 40 11q12 0 24 -3q34 -9 51 -39q6 -10 8.5 -20.5t2.5 -21.5q0 -23 -11 -43t-31 -31q-8 -5 -8 -14q0 -5 2 -8q5 -8 14 -8q2 0 8 2q29 17 44 44 t15 58t-15 58q-24 41 -71 55q-13 4 -30 4q-15 0 -30 -4t-29 -12zM195 1312q-4 -15 -4 -32q0 -32 15 -57q5 -8 14 -8q5 0 8 2q8 5 8 14q0 2 -2 8q-11 20 -11 42q0 11 3 22q9 34 40 51q10 6 20.5 8.5t21.5 2.5q22 0 42 -11t31 -31l2 -3q2 -11 5 -21.5t8 -20.5t15 -10q2 0 6 2 q10 5 10 14q0 2 -2 8q-12 25 -12 52q0 35 19 65.5t53 46.5q25 12 53 12q23 0 41 -7q48 -17 70 -64q2 -5 6.5 -7t9.5 -2q4 0 6 1q5 2 7 6.5t2 9.5q0 4 -1 6q-14 29 -37 49t-52 31q-26 9 -53 9q-35 0 -66 -15q-36 -17 -59 -47.5t-29 -67.5q-33 28 -75 28q-32 0 -58 -16 q-20 -11 -34.5 -29t-20.5 -41zM2931 120q0 -11 -4.5 -21t-12.5 -18q-21 -19 -50 -19h-758q8 -30 12 -57t6 -46v-7q0 -29 -21 -48q-11 -11 -27.5 -17t-33.5 -6h-940q13 103 51 159.5t89 82t109.5 30t114.5 4.5q42 0 79.5 11.5t65.5 32t44 47.5t16 58v71q56 -20 116 -42.5 t114 -45.5q8 17 19 31.5t25 24.5q20 14 52 29.5t70 32.5q-23 6 -39.5 18t-27.5 23q-12 13 -21 28q28 9 51 27q19 16 35 42.5t16 71.5q0 17 -3 38q-5 26 -6.5 48.5t-1.5 42.5q0 43 7.5 76t18 58t23 43t21.5 30v175q-34 5 -63.5 24.5t-47.5 51.5q-11 18 -15.5 37.5t-4.5 39.5 q0 41 20 77t58 57q18 11 37 15.5t39 4.5q30 0 56 -10q14 30 37.5 54t55.5 39q19 9 39 13t41 4q27 0 54 -7.5t50.5 -21.5t42 -34.5t29.5 -47.5q28 12 59 12q41 0 77 -20.5t58 -58.5q11 -18 15.5 -37t4.5 -39q0 -41 -20 -77.5t-58 -57.5q-26 -14 -56 -19v-174q9 -12 21 -30 t23 -43.5t18.5 -59t7.5 -76.5q0 -20 -1.5 -42t-6.5 -47q-2 -11 -3 -21t-1 -19q0 -44 15.5 -71t35.5 -42q22 -18 51 -26q-9 -15 -21 -28q-11 -11 -27 -23t-39 -18q38 -17 70 -32.5t52 -29.5q23 -17 39 -46t26 -61t15.5 -62.5t7.5 -49.5v-6zM1334 -69q18 0 31 12.5t13 31.5 q0 18 -13 31t-31 13q-19 0 -31.5 -13t-12.5 -31q0 -19 12.5 -31.5t31.5 -12.5zM1578 -69q18 0 31 12.5t13 31.5q0 18 -13 31t-31 13q-19 0 -32 -13t-13 -31q0 -19 13 -31.5t32 -12.5zM2196 639q3 -24 10.5 -49.5t24.5 -39.5q25 -25 53 -44q23 -17 53 -30t59 -13 q28 0 56.5 13t51.5 30q26 19 51 44q12 11 19 28t11 36t5 36.5t1 29.5v17q0 7 6 12q4 4 13 4q4 0 10.5 7.5t13 19.5t11 28.5t4.5 36.5q0 14 -3 31.5t-14 18.5q-1 -1 -3.5 -4.5t-7.5 -14.5q-5 -10 -16 -10q-4 0 -6 1q-10 5 -10 15q0 3 2 7q0 1 3 3v72q-35 -8 -87 -13t-113 -5 q-62 0 -113.5 5t-85.5 13v-72q0 -1 0.5 -1.5t0.5 -1.5q2 -4 2 -7q0 -10 -10 -15q-2 -1 -6 -1q-12 0 -15 10q-5 11 -7.5 14.5t-4.5 4.5q-11 -1 -14 -18.5t-3 -31.5q0 -7 3 -21.5t8 -30t13 -27.5t19 -13q6 0 10 -4q5 -5 5 -12v-58zM2569 1382q-8 -5 -8 -14q0 -2 2 -8 q5 -8 15 -8q3 0 7 2q18 11 41 11q12 0 24 -3q32 -9 51 -39q11 -20 11 -42q0 -23 -11 -42.5t-32 -31.5q-8 -5 -8 -14q0 -5 2 -8q5 -8 14 -8q2 0 8 2q29 17 44 44t15 58t-15 58q-24 41 -71 55q-13 4 -30 4q-15 0 -30 -4t-29 -12zM2122 1354q10 6 20.5 8.5t21.5 2.5 q22 0 42 -11t31 -31l2 -3q3 -20 13 -42q5 -10 15 -10q3 0 7 2q9 4 9 14q0 2 -2 8q-12 25 -12 52q0 35 19 65.5t53 46.5q25 12 53 12q23 0 41 -7q48 -17 70 -64q2 -5 6.5 -7t9.5 -2q4 0 6 1q10 5 10 15q0 3 -2 7q-28 59 -89 80q-26 9 -53 9q-35 0 -66 -15 q-36 -17 -58.5 -47.5t-29.5 -67.5q-33 28 -75 28q-32 0 -58 -16q-20 -11 -34.5 -29t-20.5 -41q-2 -8 -3 -15.5t-1 -15.5q0 -31 15 -58q5 -8 14 -8q6 0 8 2q8 5 8 14q0 5 -2 8q-11 20 -11 42q0 11 3 22q9 34 40 51zM2286 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5 t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM2485 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM2561 507q-15 -12 -34.5 -26t-41.5 -26t-45 -20t-44 -8q-22 0 -45 8t-45.5 19.5t-43 25.5t-35.5 26v-97 q0 -29 16 -53t45 -41q-32 -4 -62.5 -14t-58 -30.5t-50 -52t-37.5 -79.5q6 -14 10.5 -28.5t9.5 -28.5q13 77 44.5 118.5t72 61t87 22.5t90.5 3q34 0 64.5 9.5t53.5 26t36 39t13 47.5v98z" />
+<glyph unicode="b" horiz-adv-x="1424" d="M233 477v-143l411 -137l412 137v143l-412 -136zM430 1110q47 0 82 -29t44 -74q-19 -17 -30 -41t-11 -52q0 -27 10 -50t27.5 -40.5t40.5 -27.5t50 -10t50 10t40.5 27.5t27.5 40.5t10 50q0 26 -10 49.5t-27.5 41t-40.5 27.5t-50 10q-15 0 -32 -5q-9 29 -26.5 53.5t-41 42.5 t-52.5 28t-61 10q-13 0 -22 -9t-9 -22t9 -21.5t22 -8.5zM682 996q15 0 25.5 -10.5t10.5 -25.5t-10.5 -25.5t-25.5 -10.5q-14 0 -25 10.5t-11 25.5t11 25.5t25 10.5zM812 845q-20 -51 -65.5 -82.5t-103.5 -31.5q-57 0 -103 31.5t-66 81.5l-241 -80v-143l411 -137l412 137v143 zM414 1612v-181q0 -29 -19.5 -49t-48.5 -20t-49 20t-20 49v181q0 29 20 48.5t49 19.5t48.5 -19.5t19.5 -48.5zM931 1680q-29 0 -49 -19.5t-20 -48.5v-181q0 -29 20 -49t49 -20t48.5 20t19.5 49v181q0 29 -19.5 48.5t-48.5 19.5zM1161 1477h-103v-46q0 -26 -10 -49.5 t-27.5 -40.5t-40.5 -27t-49 -10t-49.5 10t-40.5 27t-27 40.5t-10 49.5v46h-331v-46q0 -26 -10 -49.5t-27.5 -40.5t-40.5 -27t-49 -10t-49.5 10t-40.5 27t-27 40.5t-10 49.5v46h-103q-24 0 -45 -9t-37 -24.5t-25 -37t-9 -45.5v-1228q0 -24 9 -45t25 -37t37 -25t45 -9h1045 q24 0 45 9t37 25t25 37t9 45v1228q0 24 -9 45.5t-25 37t-37 24.5t-45 9zM1189 133q0 -12 -8.5 -20t-19.5 -8h-1045q-11 0 -19.5 8t-8.5 20v880h398l3 5q-10 15 -25.5 24t-33.5 9q-38 0 -64 26t-26 63t26 63.5t64 26.5q69 0 127.5 -35t90.5 -95q48 -2 88 -25.5t65 -61.5h388 v-880zM1350 1361v-1228q0 -39 -15 -73.5t-40.5 -60.5t-60 -41t-73.5 -15h-1045q0 -30 21.5 -51.5t52.5 -21.5h971q54 0 102 20.5t84 56.5t56.5 84t20.5 102v1155q0 30 -21.5 51.5t-52.5 21.5z" />
+<glyph unicode="c" horiz-adv-x="1643" d="M1693 789q12 0 20.5 -8.5t8.5 -20.5q0 -11 -7 -20t-20 -9h-2l-277 10q-5 -17 -19.5 -27.5t-33.5 -10.5h-143q-13 0 -13 14t13 14h89v15h-89q-13 0 -13 14q0 13 13 13h89v16h-89q-13 0 -13 13q0 14 13 14h143q19 0 33.5 -10.5t19.5 -27.5zM359 703q-19 0 -33 10.5 t-20 27.5l-277 -10q-12 0 -20.5 8.5t-8.5 20.5q0 11 7 20t20 9h2l277 -11q6 17 20 27.5t33 10.5h143q13 0 13 -14q0 -13 -13 -13h-88v-16h87q14 0 14 -13q0 -14 -13 -14h-88v-15h87q14 0 14 -14t-14 -14h-142zM1136 956q-4 -4 -10 -4t-9 4q-4 4 -4 10t4 10l62 62l-10 11 l-63 -63q-4 -4 -10 -4t-9 4q-4 4 -4 10t4 10l62 62l-11 11l-62 -62q-5 -5 -10 -5q-6 0 -9 5q-5 3 -5 9q0 5 5 10l101 101q16 16 40 16q14 0 24 -5l188 203q10 8 21 8q10 0 20 -8q9 -9 9 -21q0 -13 -9 -20l-203 -189q6 -12 6 -25q0 -22 -17 -39zM584 1079l-11 -11l62 -62 q4 -4 4 -10t-4 -10t-10 -4t-9 4l-62 63l-11 -11l62 -62q4 -6 4 -10t-4 -10q-4 -4 -10 -4t-9 4l-101 101q-17 17 -17 39q0 13 6 25l-203 189q-8 7 -8 20t8 21t20 8q11 0 21 -8l188 -203q10 5 24 5q24 0 40 -16l101 -101q4 -6 4 -10q0 -5 -4 -9q-5 -5 -10 -5q-6 0 -9 5z M568 424q4 4 9 4q4 0 10 -4q4 -6 4 -10t-4 -10l-101 -100q-17 -17 -39 -17q-13 0 -25 6l-189 -203q-9 -9 -20 -9q-12 0 -21 9q-8 7 -8 20t8 21l204 188q-6 12 -6 25q0 23 16 39l101 101q6 4 10 4t10 -4q4 -6 4 -10q0 -5 -4 -9l-63 -63l11 -10l62 62q6 4 10 4t10 -4 q4 -6 4 -10q0 -5 -4 -9l-62 -63l10 -10zM1530 131q8 -10 8 -21q0 -12 -8 -20q-9 -9 -21 -9q-13 0 -20 9l-189 203q-10 -5 -24 -5q-11 0 -21.5 4t-18.5 12l-101 100q-4 4 -4 10t4 10q6 4 10 4t10 -4l62 -62l11 10l-63 63q-4 3 -4 9t4 10q6 4 10 4t10 -4l62 -62l11 10l-63 63 q-4 3 -4 9t4 10q6 4 10 4t10 -4l101 -101q16 -16 16 -40q0 -14 -5 -24zM904 358q13 0 13 -14v-142q0 -19 -10 -33t-27 -20l10 -277q0 -12 -8.5 -20.5t-20.5 -8.5q-11 0 -20 7t-9 20v2l10 277q-16 6 -26.5 20t-10.5 33v143q0 13 13 13q14 0 14 -13v-88h15v87q0 14 14 14 t14 -13v-88h15v87q0 14 14 14zM818 1143q-13 0 -13 14v143q0 18 10.5 32.5t26.5 20.5l-10 277q0 12 8.5 20.5t20.5 8.5q11 0 20 -7t9 -20v-2l-10 -277q17 -6 27 -20.5t10 -32.5v-143q0 -14 -13 -14q-14 0 -14 14v88h-15v-88q0 -14 -14 -14t-14 14v88h-15v-88q0 -14 -14 -14z M1071 699q3 -6 3 -10v-219q0 -15 -15 -15h-396q-6 0 -10.5 4t-4.5 11v222q0 2 2 4l118 210q16 -3 24 -18l-104 -184h347l-170 313l-35 -61q-12 10 -25 16l47 83q3 7 13 7q9 0 13 -7zM1044 548h-366v-64h366v64zM1044 674h-366v-63h366v63zM757 931q-6 0 -10.5 4t-4.5 11 q0 6 4.5 10.5t10.5 4.5q31 0 55.5 -18.5t32.5 -47.5q5 2 16 2q26 0 44 -18t18 -44t-18 -44t-44 -18t-44 18t-18 44q0 27 19 46q-5 21 -21.5 35.5t-39.5 14.5zM880 875q-8 0 -13 -5t-5 -12q0 -8 5 -13t13 -5q7 0 12 5t5 13q0 7 -5 12t-12 5z" />
+<glyph unicode="d" horiz-adv-x="1640" d="M816 59q112 0 210 8t171 21.5t115.5 31.5t42.5 39v-118q0 -21 -42.5 -39t-115.5 -31.5t-171 -21.5t-210 -8q-111 0 -209 8t-171 21.5t-115.5 31.5t-42.5 39v118q0 -21 42.5 -39t115.5 -31.5t171 -21.5t209 -8zM1597 1337q43 -76 43 -161q0 -43 -11 -84.5t-32.5 -79 t-52.5 -69t-71 -54.5q-28 -16 -58 -25.5t-60 -13.5v-599q0 -21 -42.5 -39t-115.5 -31.5t-171 -21.5t-210 -8q-111 0 -209 8t-171 21.5t-115.5 31.5t-42.5 39v599q-72 11 -134.5 52.5t-100.5 110.5q-22 38 -32.5 79t-10.5 83q0 43 11 84.5t32 78.5t52 68t71 54q38 22 79 32.5 t83 10.5q60 0 118 -22q29 63 78.5 114t117.5 83q84 39 173 39q57 0 112 -16t103.5 -46t88 -73.5t65.5 -98.5q2 -2 2 -5q60 25 125 25q43 0 84.5 -11t78.5 -32t68.5 -52t54.5 -71zM837 502h-117v-146h117v146zM1057 847q8 27 8 60q0 54 -20 94q-10 20 -22.5 36t-27.5 29 q-33 27 -71 38q-41 11 -79 11q-36 0 -69 -9t-63 -26q-14 -9 -27.5 -19.5t-24.5 -23.5q-23 -26 -36 -58l92 -64q4 8 9 14.5t11 14.5q12 16 28 28q17 13 34 20q19 8 42 8q18 0 38 -6q18 -6 32 -17q12 -11 22 -29q8 -15 8 -39q0 -30 -15 -52q-15 -23 -37 -40 q-11 -8 -22.5 -15.5t-23.5 -13.5q-11 -6 -21 -11.5t-18 -10.5q-52 -30 -69 -71q-17 -40 -17 -93h116q0 25 11 45q5 9 12.5 17t15.5 16q9 7 18.5 13.5t20.5 11.5q11 6 21 12t21 13q24 14 45 32q20 17 35 38q16 22 23 47zM1099 1405q19 9 19 31q0 7 -3 15q-28 60 -76 104 t-111 66q-57 20 -113 20q-72 0 -141 -32q-77 -36 -124.5 -101.5t-60.5 -143.5q-34 29 -75 44t-86 15q-64 0 -122 -32q-44 -25 -73.5 -63.5t-43.5 -86.5q-9 -33 -9 -66q0 -66 33 -123q5 -8 13 -12.5t17 -4.5t17 4q17 11 17 30q0 9 -5 17q-23 43 -23 89q0 24 6 47 q20 72 85 109q42 24 88 24q47 0 89 -23.5t67 -67.5l4 -6q4 -23 10.5 -45.5t17.5 -44.5q10 -20 31 -20q5 0 15 4q19 9 19 31q0 7 -3 15q-25 53 -25 111q0 74 39.5 139t111.5 99q55 26 112 26q23 0 44.5 -4t43.5 -12q50 -18 88 -52.5t61 -82.5q9 -20 31 -20q7 0 15 3z M1434 959q60 35 93 93.5t33 123.5q0 63 -33 122q-25 43 -63.5 73t-86.5 43q-33 9 -66 9q-64 0 -122 -32q-18 -11 -18 -30q0 -9 5 -17q10 -18 29 -18q9 0 17 5q40 24 89 24q12 0 24 -2t24 -5q35 -10 63 -31.5t45 -52.5q24 -42 24 -89t-23.5 -89t-67.5 -67q-17 -11 -17 -30 q0 -9 4 -17q5 -8 13 -12.5t17 -4.5q10 0 17 4z" />
+<glyph unicode="e" horiz-adv-x="3596" d="M3263 381q-15 -20 -23.5 -43.5t-8.5 -49.5t8.5 -50t23.5 -44h-225q-20 0 -37 7.5t-29.5 20t-20 29.5t-7.5 37q0 19 7.5 36t20 29.5t29.5 20t37 7.5h225zM3426 381q19 0 36 -7t29.5 -20t20 -30t7.5 -36q0 -20 -7.5 -37t-20 -29.5t-29.5 -20t-36 -7.5q-20 0 -37 7.5 t-29.5 20t-20 29.5t-7.5 37q0 19 7.5 36t20 29.5t29.5 20t37 7.5zM2875 379q-15 -20 -23.5 -43.5t-8.5 -49.5q0 -27 8.5 -50.5t23.5 -43.5h-1164q-110 0 -205 -22.5t-183 -55.5t-174 -72.5t-179 -72.5t-197 -55.5t-228 -22.5q-95 0 -192 27.5t-175.5 79t-128 124.5 t-49.5 164t49.5 164t128 124.5t175.5 79t192 27.5q124 0 228 -22.5t197 -56t179 -72.5t174 -72.5t183 -56t205 -22.5h1164zM868 61q112 38 174 98t62 128q0 57 -42.5 107t-115.5 87.5t-171.5 59t-209.5 21.5q-45 0 -90.5 -7t-88 -19.5t-80.5 -31t-68 -41.5q-8 -6 -8 -16 q0 -6 2 -9q5 -11 18 -11q4 0 6 1q43 14 87.5 20.5t88.5 6.5q101 0 191.5 -18.5t159 -50.5t108.5 -74.5t40 -90.5q0 -21 -7.5 -39t-19 -34t-26 -29t-28.5 -23q-9 -6 -9 -17q0 -3 2 -9q7 -10 18 -10q5 0 7 1zM3595 1218q0 -5 0.5 -9t0.5 -7q0 -4 -0.5 -8t-0.5 -9 q-3 -92 -34 -166.5t-86.5 -127.5t-132.5 -81.5t-171 -28.5q-57 0 -143.5 12t-189.5 33t-215 49.5t-219.5 61.5t-203 68.5t-164.5 71.5l-138 71q-15 -29 -42 -47t-62 -18h-1589q-25 0 -46.5 9.5t-37.5 25.5t-25.5 37.5t-9.5 46.5q0 24 9.5 45.5t25.5 37.5t38 25.5t46 9.5 h1589q35 0 62.5 -18t41.5 -47q35 17 69 35t69 36q69 36 164.5 72.5t202.5 69.5t219.5 61t215.5 48.5t189.5 32.5t143.5 12q94 0 171 -28.5t132.5 -81.5t86.5 -127.5t34 -166.5zM209 1137q27 0 45.5 19t18.5 46q0 26 -18.5 45t-45.5 19t-46 -19t-19 -45q0 -27 19 -46t46 -19z M3171 1533q-45 0 -119 -8.5t-164.5 -24.5t-190.5 -37.5t-195 -47t-179 -54.5t-142 -59q58 11 141 21.5t177.5 19.5t194 16.5t190.5 13t166 8.5t121 3q115 0 190.5 -13.5t123.5 -34.5q-33 94 -113 145.5t-201 51.5zM3171 870q121 0 201 51.5t113 145.5q-48 -21 -123.5 -34.5 t-190.5 -13.5q-46 0 -121 3t-166 8.5t-190.5 13t-194 16.5t-177.5 19.5t-141 21.5q58 -30 142 -59t179 -54.5t195 -47t190.5 -37.5t164.5 -24.5t119 -8.5zM3171 1108q92 0 156 9.5t104 23.5t58 30.5t18 30.5q0 13 -18 29.5t-58 30.5t-104 23.5t-156 9.5q-49 0 -127.5 -3.5 t-173.5 -10t-199.5 -15t-204 -19t-188 -22t-150.5 -23.5q62 -12 150.5 -24t188 -22.5t204 -19t199.5 -15t173.5 -10t127.5 -3.5z" />
+<glyph unicode="f" horiz-adv-x="3882" d="M849 598h172v-237h-172v-315h-263v315h-586v235l668 841h181v-839zM616 1041l-351 -443h351v443zM3882 598v-237h-172v-315h-263v315h-586v235l668 841h181v-839h172zM3476 1041l-351 -443h351v443zM2671 907q29 0 55 -11t45.5 -30.5t30.5 -45t11 -54.5t-11 -54.5 t-29.5 -44.5t-44 -30.5t-54.5 -12.5q40 -17 62.5 -52.5t22.5 -77.5q0 -29 -10 -53q-17 -42 -53 -64.5t-78 -22.5q-29 0 -53 10q-5 2 -9 4t-8 5q4 -3 7.5 -6t6.5 -7q20 -21 30.5 -47t10.5 -53t-10.5 -53t-30.5 -47q-20 -20 -46 -30.5t-53 -10.5q-56 0 -99 40q10 -24 10 -53 q0 -42 -22.5 -77.5t-63.5 -52.5q-28 -11 -54 -11q-42 0 -78 23t-53 64q-5 9 -6 18q1 -5 1 -9.5v-9.5q0 -29 -11 -55t-30 -45t-45 -30t-55 -11t-54.5 11t-44.5 29.5t-30 43.5t-12 54q-17 -40 -52.5 -62.5t-77.5 -22.5q-26 0 -53 11q-41 17 -64.5 52.5t-23.5 77.5q0 26 11 54 q2 5 4 8.5t4 8.5l-12 -15q-21 -20 -47 -30.5t-53 -10.5t-53 10.5t-46 30.5q-21 21 -31.5 47.5t-10.5 53.5q0 26 9.5 51.5t29.5 45.5q-24 -10 -51 -10q-42 0 -78 23t-53 64q-11 28 -11 54q0 42 23 78t64 53l18 6q-5 -1 -9.5 -1.5t-9.5 -0.5q-29 0 -55 11t-45 30.5t-30 45.5 t-11 55q0 28 10.5 53.5t29.5 44.5t44 30.5t54 11.5q-40 17 -62.5 53t-22.5 78q0 29 10 53q17 42 53.5 64.5t78.5 22.5q29 0 53 -10l16 -8q-8 6 -14 12q-21 20 -31 46t-10 53t10 53t31 47t47 31.5t53 10.5q55 0 98 -40q-10 24 -10 52q0 42 23 77.5t63 52.5q14 6 27.5 8.5 t27.5 2.5q42 0 77.5 -22.5t52.5 -63.5q4 -9 6 -18q-1 5 -1 9.5v9.5q0 29 11 54.5t30 45t45 30.5t55 11t54.5 -11t44.5 -29.5t30.5 -44t11.5 -53.5q17 40 53 62.5t77 22.5q26 0 53 -11q42 -17 65 -53t23 -78q0 -29 -10 -53l-9 -17l12 14q20 20 46.5 30.5t53.5 10.5t53 -10.5 t47 -30.5t31.5 -46t10.5 -53q0 -26 -10 -52t-30 -46q24 10 51 10q42 0 78 -23t53 -64q11 -28 11 -54q0 -42 -23 -78t-64 -53l-17 -6q5 1 9 1.5t9 0.5zM2678 692q17 0 33 8t29 22t20.5 32.5t7.5 39.5v9l-2 19l-18 -7q-9 -3 -17 -3q-12 0 -23.5 6.5t-22.5 6.5 q-14 5 -29.5 10.5t-33.5 5.5q-28 0 -52.5 -20.5t-33.5 -61.5l-6 1v6q0 49 30 86.5t75 49.5q-5 -1 -14 -1q-29 0 -53 15.5t-36 44.5q-12 27 -12 47q0 22 9.5 36.5t23.5 20.5q12 5 25.5 6t27.5 1q15 0 31.5 1.5t32.5 9.5q2 -8 2 -14q0 -23 -15.5 -48t-44.5 -42q2 -2 6 -3 q6 -3 15 -3t17 4q23 10 37.5 34.5t14.5 53.5q0 25 -12 48l-9 18l-14 -14q-11 -11 -26 -13t-32 -3h-4q-14 0 -30.5 -1t-33.5 -8q-22 -9 -35.5 -30.5t-13.5 -53.5v-12t2 -13l-6 -1q-2 4 -2 5q-11 25 -11 54q0 28 10.5 53.5t29.5 45.5q-17 -6 -33 -6q-18 0 -35.5 7.5 t-31.5 22.5q-18 18 -26 35.5t-8 32.5q0 22 14 36q10 10 21.5 16t24.5 11q14 6 29.5 13.5t26.5 21.5q12 -17 12 -44q0 -18 -6 -37.5t-20 -37.5h5q5 0 13.5 2t17.5 11q22 22 22 59q0 22 -9 44t-28 38l-15 13l-8 -18q-3 -5 -9.5 -12t-14 -13t-15.5 -10t-14 -4q-1 -1 -2 -1 t-3 -1q-13 -5 -25.5 -12t-23.5 -18t-17 -25.5t-6 -31.5q0 -14 4.5 -30t15.5 -32l-5 -3q-1 1 -1.5 2t-2.5 2q-20 20 -30.5 46t-10.5 53q0 39 19 71q-31 -39 -77 -39q-20 0 -37 7q-34 14 -48.5 33.5t-14.5 37.5q0 8 4 18q5 13 13.5 22.5t18.5 20.5q11 11 21.5 23.5t16.5 29.5 q16 -10 26.5 -31.5t10.5 -48.5q0 -14 -5 -34q6 0 11 4q11 5 18 21q5 10 5 27q0 15 -5 30t-14.5 28.5t-23.5 24t-31 15.5l-19 6v-20q0 -16 -9 -28.5t-23 -26.5q-11 -11 -21.5 -23t-17.5 -28q-6 -14 -6 -29q0 -22 12 -43.5t37 -38.5l-3 -5l-5 2q-41 17 -64 52t-24 77 q-12 -26 -34.5 -40t-52.5 -14q-45 0 -66.5 19t-21.5 40q0 11 3 22t8 22q0 1 0.5 1.5t0.5 1.5l2 5q5 13 10 27t5 30v7q25 -5 47 -30.5t27 -63.5q4 3 8 8q3 5 5.5 11t2.5 15q0 17 -8 33t-22 29t-32.5 20.5t-39.5 7.5h-8l-20 -2l7 -18q2 -5 3 -9t1 -9q0 -10 -3 -19.5t-8 -20.5 q0 -2 -1 -2.5t-1 -2.5q-6 -14 -11 -29.5t-5 -33.5q0 -27 20.5 -52t61.5 -33l-2 -6h-5q-49 0 -86.5 29.5t-49.5 74.5q0 -3 0.5 -6.5t0.5 -6.5q0 -30 -15.5 -54t-44.5 -36q-28 -11 -48 -11q-22 0 -36.5 9t-19.5 23q-5 12 -6 25.5t-1 27.5q0 16 -2 32.5t-10 31.5q10 2 15 2 q23 0 48 -15t42 -44l3 6q1 3 2 6.5t1 8.5q0 9 -4 17q-10 23 -35 37t-54 14q-12 0 -24.5 -2.5t-23.5 -8.5l-17 -10l13 -14q12 -12 14 -27.5t2 -33.5q0 -15 1.5 -31.5t8.5 -32.5q9 -22 30.5 -36t52.5 -14h12t13 2l1 -6l-4 -2q-28 -11 -54 -11q-28 0 -54 10.5t-46 29.5 q6 -17 6 -33q0 -38 -29 -67q-19 -18 -36.5 -26t-32.5 -8q-22 0 -36 14q-9 10 -15 21.5t-11 25.5q-6 14 -13.5 29t-21.5 26q16 12 44 12q18 0 37.5 -6t36.5 -20v2q0 1 0.5 2t0.5 3q0 5 -2.5 13t-10.5 16q-11 11 -27 16.5t-33 5.5q-22 0 -43.5 -9t-37.5 -28l-13 -15l18 -8 q15 -7 22.5 -20.5t15.5 -30.5q5 -14 12.5 -28.5t20.5 -26.5q21 -23 56 -23q14 0 30 4.5t32 15.5l3 -6l-3 -3q-20 -21 -46 -31.5t-53 -10.5q-18 0 -36 4.5t-35 14.5q39 -31 39 -75q0 -18 -8 -39q-14 -33 -33.5 -47.5t-37.5 -14.5q-9 0 -18 3q-12 5 -22 13.5t-20 18.5 q-11 11 -24 22t-30 16q11 17 33 27t49 10q18 0 33 -4q-1 6 -4 11t-8 9t-13 8q-11 5 -28 5q-15 0 -30 -5t-28 -14.5t-23.5 -23t-15.5 -30.5l-6 -19h20q17 -1 29 -10.5t25 -22.5q11 -11 23 -21t29 -17q13 -6 28 -6q21 0 43.5 12t39.5 37l5 -4q-2 -2 -2 -5q-17 -40 -52 -63 t-77 -24q25 -12 39.5 -35t14.5 -52q0 -46 -19 -67t-41 -21q-14 0 -26 4t-25 9q-1 0 -1.5 0.5t-1.5 0.5q-13 5 -26.5 9.5t-27.5 4.5h-7q4 25 29.5 47t63.5 27l-8 8q-5 3 -11 6t-15 3q-19 0 -35 -9t-28 -23.5t-19 -32.5t-7 -37l1 -29l19 7q9 3 17 3q10 0 20.5 -3t21.5 -8 q1 0 1.5 -0.5t1.5 -0.5q14 -5 30 -10.5t33 -5.5q28 0 52.5 20.5t33.5 61.5l6 -2v-4q0 -50 -29.5 -87.5t-75.5 -49.5q5 1 15 1q30 0 53.5 -15.5t35.5 -43.5q11 -28 11 -48q0 -22 -9 -37t-23 -20q-13 -5 -26 -6t-27 -1q-16 0 -32.5 -1.5t-32.5 -9.5q-1 3 -1 6.5v6.5 q0 23 15 48.5t44 42.5q-3 1 -6 3l-6 2t-8 1q-10 0 -18 -4q-23 -10 -37.5 -34.5t-14.5 -53.5q0 -26 12 -48l9 -18l14 14q12 11 28 13t34 2q15 0 31 1.5t33 8.5q21 9 35.5 30.5t14.5 52.5q0 12 -3 26h7l2 -4q11 -28 11 -54q0 -28 -10.5 -53.5t-29.5 -45.5q8 3 15.5 4t15.5 1 q18 0 35.5 -7t32.5 -21q19 -19 26.5 -36.5t7.5 -32.5q0 -22 -14 -36q-9 -10 -21 -15.5t-25 -11.5q-14 -6 -29 -13.5t-26 -21.5q-13 19 -13 45q0 18 6.5 37.5t20.5 36.5h-5q-5 0 -13.5 -2t-17.5 -11q-11 -11 -16.5 -27t-5.5 -33q0 -22 9 -43.5t28 -37.5l14 -13l9 18 q6 12 22.5 25.5t30.5 13.5q14 6 28 13.5t25 18.5q23 23 23 57q0 31 -20 61l5 4q1 -2 2 -2.5t2 -1.5q20 -20 30.5 -46t10.5 -53q0 -39 -19 -71q31 39 76 39q18 0 39 -8q33 -14 47.5 -33t14.5 -37q0 -8 -4 -18q-5 -13 -13.5 -22.5t-18.5 -20.5l-3 -3q-10 -11 -19.5 -22.5 t-14.5 -28.5q-17 11 -27 32.5t-10 48.5q0 19 4 34q-6 -1 -11 -4t-10 -8t-8 -13q-5 -13 -5 -27q0 -29 19.5 -58t54.5 -40l19 -6v20q1 17 10 29t22 25l12 16q8 8 15.5 17t11.5 20q6 13 6 28q0 21 -12 43t-37 39l3 5l5 -2q41 -17 64 -52t24 -77q12 26 34.5 40t52.5 14 q45 0 66.5 -19t21.5 -41q0 -13 -4.5 -25.5t-9.5 -25.5t-9.5 -27.5t-4.5 -29.5v-7q-25 5 -47 30.5t-27 63.5q-5 -4 -9 -9q-3 -5 -5.5 -11t-2.5 -15q0 -19 9 -35t23.5 -28t32.5 -19t37 -7l28 1l-7 19q-3 9 -3 18q0 11 4 22t9 23q5 14 10 29.5t5 32.5q0 28 -20.5 53t-60.5 33 l1 6q2 0 2.5 0.5t2.5 0.5q49 0 86.5 -30t49.5 -75q0 3 -0.5 6.5t-0.5 6.5q0 30 15.5 54t44.5 36q14 6 26 8.5t23 2.5q22 0 36 -9t19 -23q5 -13 6 -26t2 -27q0 -16 1.5 -32.5t9.5 -31.5q-10 -2 -15 -2q-23 0 -47.5 15t-41.5 44q-2 -2 -3 -6q-3 -6 -3 -16q0 -7 3 -16 q10 -23 34.5 -37t53.5 -14q25 0 49 12l17 9l-13 14q-11 12 -13.5 27.5t-2.5 33.5q0 15 -1 31.5t-8 32.5q-10 22 -31.5 36t-53.5 14h-12t-12 -2l-1 6l5 2q13 6 26.5 8.5t27.5 2.5q28 0 53.5 -10.5t45.5 -29.5q-6 16 -6 33q0 38 29 67q19 18 36.5 26t32.5 8q22 0 36 -14 q9 -10 15 -21.5t11 -25.5q7 -14 14 -29t21 -26q-17 -12 -44 -12q-18 0 -37.5 6t-36.5 20q-1 -1 -1 -2v-5q0 -5 2.5 -13t10.5 -16q11 -11 27 -16.5t33 -5.5q22 0 43.5 9t38.5 28l13 15l-19 8q-6 3 -12.5 9t-12.5 13.5t-9.5 15.5t-3.5 15q-6 14 -13.5 28t-19.5 25 q-20 23 -56 23q-14 0 -30 -4.5t-32 -15.5l-3 6l3 3q20 20 46.5 30.5t53.5 10.5q39 0 71 -19q-39 31 -39 78q0 19 7 37q14 33 33.5 47.5t37.5 14.5q9 0 18 -3q12 -5 22 -13.5t20 -18.5q11 -11 24 -22t30 -16q-11 -17 -32.5 -27t-49.5 -10q-18 0 -33 4q1 -6 5 -11q3 -5 8 -9.5 t13 -7.5q11 -5 28 -5q29 0 57 19t39 54l6 19h-19q-17 1 -29.5 10.5t-25.5 22.5q-11 11 -23 21t-29 17q-14 6 -29 6q-21 0 -42.5 -11.5t-38.5 -37.5l-5 4q0 2 2 4q17 41 51.5 64t76.5 24q-25 12 -39.5 35t-14.5 52q0 46 19 67t41 21q11 0 22 -3t22 -8q1 0 1.5 -0.5t1.5 -0.5 l11 -4q12 -5 24 -8.5t26 -3.5h7q-4 -25 -29.5 -47t-63.5 -27q3 -5 8 -9q4 -3 10.5 -5.5t15.5 -2.5zM2142 850q10 -1 18.5 -6t15.5 -11q8 -7 14 -16q-20 -18 -48 -18h-7q17 -14 27 -32t10 -40q0 -24 -13 -50q-10 -19 -29 -34t-40.5 -25.5t-42 -16t-34.5 -5.5q-11 0 -15 3 q-11 5 -22 32t-16 60q-13 -26 -27 -43t-24 -20q-2 -1 -8 -1q-16 0 -43.5 11t-55.5 30t-52 45t-33 56q-7 24 -7 47q0 37 18 63t50 43q-42 5 -68 37q9 9 20 16q9 6 20.5 11t24.5 5h6q10 -2 17 -7q2 5 4.5 8.5t5.5 6.5q11 10 25.5 13t26.5 3q5 0 9.5 -0.5t7.5 -0.5q4 -1 7 -1 q-2 -40 -34 -69q5 1 9 1h9q39 0 71 -21.5t47 -70.5q4 -11 5 -23.5t1 -25.5q26 26 61 26q14 0 32 -5q-8 11 -12.5 22.5t-4.5 24.5q0 2 0.5 4.5t0.5 4.5q10 0 21 -3q8 -2 17.5 -6t15.5 -12q5 -6 6 -13q6 3 13 3zM1809 727q9 3 9 17q0 4 -2 12t-8 14t-11 6q-1 0 -1.5 -0.5 t-1.5 -0.5q-10 -2 -10 -18q0 -4 2 -10q2 -9 7.5 -15t11.5 -6q1 0 2 0.5t2 0.5zM1833 838q7 2 9.5 7t2.5 11q0 3 -0.5 5.5t-1.5 5.5q-2 8 -8 14t-11 6q-1 0 -1.5 -0.5t-1.5 -0.5q-10 -2 -10 -17q0 -3 0.5 -5.5t1.5 -5.5q6 -20 20 -20zM1875 802q2 -8 8 -14t11 -6q1 0 1.5 0.5 t1.5 0.5q10 2 10 17q0 3 -0.5 5.5t-1.5 5.5q-3 9 -8.5 15t-11.5 6q-1 0 -1.5 -0.5t-1.5 -0.5q-9 -3 -9 -17q0 -4 2 -12zM1915 698q9 1 9 17q0 4 -2 12t-8 14t-11 6q-1 0 -1.5 -0.5t-1.5 -0.5q-9 -2 -9 -17q0 -8 2 -12q2 -8 8 -14t11 -6q1 0 1.5 0.5t1.5 0.5zM1922 857 q10 2 10 17q0 4 -2 12t-7.5 14t-11.5 6q-1 0 -2 -0.5t-2 -0.5q-9 -3 -9 -17q0 -4 2 -12t8 -14t11 -6q1 0 1.5 0.5t1.5 0.5zM1931 793q6 -20 22 -20q10 3 10 18q0 3 -0.5 5.5t-1.5 5.5q-7 20 -23 20q-5 -2 -7 -7t-2 -11q0 -3 0.5 -5.5t1.5 -5.5zM2017 716q3 6 3 12q0 8 -5 11 q-1 1 -4 1q-9 0 -15 -13q-3 -6 -3 -12q0 -7 4 -10q1 -1 4 -1q9 0 16 12zM2058 644q3 6 3 12q0 8 -5 10q-1 1 -4 1q-8 0 -15 -12q-3 -6 -3 -12q0 -7 4 -10q1 -1 4 -1q9 0 16 12zM2069 772q-3 -6 -3 -12q0 -7 5 -10q1 -1 4 -1q8 0 15 12q3 6 3 12q0 7 -4 10q-1 1 -4 1 q-9 0 -16 -12zM2074 687q1 -1 3 -1q5 0 9.5 4t6.5 9q4 8 4 13q0 6 -5 9q-1 1 -4 1q-8 0 -15 -12q-4 -10 -4 -14q0 -6 5 -9zM2118 664q3 6 3 12q0 7 -4 10q-1 1 -4 1q-10 0 -15 -12q-4 -10 -4 -14q0 -6 5 -9q1 -1 4 -1q8 0 15 13zM2145 747q-1 1 -4 1q-10 0 -15 -12 q-4 -7 -4 -13q0 -7 5 -10q1 -1 4 -1q8 0 15 13q3 6 3 12q0 7 -4 10z" />
+<glyph unicode="g" horiz-adv-x="1612" d="M732 591q9 -15 22.5 -22t28.5 -7q16 0 31.5 7.5t27.5 21.5h15q-6 -39 -34 -65t-71 -26q-27 0 -50 10.5t-36 29.5q-13 -19 -36 -29.5t-51 -10.5q-42 0 -70 26t-34 65h15q11 -14 27 -21.5t32 -7.5q15 0 28.5 7t22.5 22q12 19 33 19q20 0 33 -15q13 15 33 15q21 0 33 -19z M529 172q-45 -6 -89 -23t-81.5 -51.5t-65 -92t-38.5 -144.5h-172q-38 0 -62 24q-21 21 -21 49v6q3 23 9.5 60t19.5 76.5t32 75t48 56.5q24 18 63 37.5t86 39t98 38t98 35.5v-71q0 -35 20.5 -65t54.5 -50zM348 1169q-42 7 -77.5 31t-58.5 63q-13 23 -18.5 46.5t-5.5 47.5 q0 50 24.5 94.5t70.5 70.5q44 25 94 25q17 0 34.5 -3.5t34.5 -9.5q17 37 45.5 66.5t67.5 47.5q51 23 101 23q66 0 124 -35.5t88 -99.5l2 -3q36 14 71 14q50 0 95 -24.5t71 -71.5q25 -44 25 -94t-25 -94.5t-71 -70.5q-31 -18 -69 -23v-214l-6 -83q19 -5 33.5 -25.5 t14.5 -73.5q0 -25 -6 -49t-15.5 -44t-22.5 -35t-27 -21v-96q0 -50 -39 -80l-156 -125q-28 -22 -64 -22h-46q-36 0 -64 22l-157 125q-18 14 -28.5 35t-10.5 45v96q-14 6 -27 21t-23 35t-15.5 44t-5.5 49q0 53 15 73.5t33 25.5l-6 83v214zM973 773q0 9 -0.5 19.5t-3 19.5 t-6.5 15.5t-11 6.5q-1 -1 -4.5 -5.5t-9.5 -17.5q-5 -12 -18 -12q-2 0 -8 2q-12 5 -12 17q0 2 2 8q0 2 3 5v88q-43 -10 -106.5 -16t-138.5 -6t-138.5 6t-105.5 16v-88q0 -1 2 -5q1 -2 1 -7q0 -14 -12 -18q-6 -2 -8 -2q-13 0 -18 12q-5 13 -8.5 17.5t-5.5 5.5q-7 0 -11 -6.5 t-6.5 -15.5t-3 -19.5t-0.5 -19.5q0 -24 6 -44.5t14 -35.5t16.5 -23.5t13.5 -8.5q9 0 15 -6t6 -14v-113q0 -30 24 -49l157 -125q8 -6 18 -10t21 -4h46q11 0 21 4t18 10l156 125q24 18 24 49v113q0 7 7 14q4 6 16 6q4 0 12.5 8.5t16 23.5t13.5 35.5t6 44.5zM875 1482 q-10 -6 -10 -17q0 -6 3 -10q4 -10 17 -10q7 0 10 2q25 14 51 14q7 0 14 -1t14 -3q20 -5 36 -18t26 -31q14 -25 14 -51q0 -27 -13.5 -51.5t-39.5 -38.5q-9 -6 -9 -18q0 -7 2 -10q6 -9 17 -9q7 0 10 2q35 20 54 53.5t19 71.5q0 18 -4.5 36t-14.5 35q-14 25 -36.5 42t-50.5 25 q-20 6 -39 6q-37 0 -70 -19zM239 1395q-5 -20 -5 -38q0 -39 19 -71q4 -10 17 -10q5 0 10 3q10 5 10 17q0 5 -3 10q-13 26 -13 51q0 16 4 28q5 20 17.5 36t30.5 26q25 14 51 14q27 0 51.5 -13.5t39.5 -39.5q0 -1 2 -3q5 -28 16 -52q5 -11 18 -11q6 0 8 2q12 5 12 18q0 2 -2 8 q-15 31 -15 65q0 43 23 80.5t64 56.5q31 15 65 15q26 0 52 -9q29 -11 51 -31t35 -47q5 -12 18 -12q2 0 8 2q12 7 12 19q0 2 -2 8q-17 35 -45 60t-64 38q-32 12 -64 12q-41 0 -82 -19q-45 -21 -72.5 -59t-35.5 -83q-40 34 -93 34q-37 0 -70 -18q-52 -29 -68 -87zM1551 633 q26 0 43.5 -17.5t17.5 -42.5v-213q0 -40 -16.5 -73.5t-44.5 -55.5h21q8 0 8 -9v-353q0 -8 -8 -8h-1277q9 69 29.5 116.5t48.5 78.5t62.5 47.5t72 24t76.5 9t76 1.5q42 0 79.5 11.5t65.5 32t44 47.5t16 58v71q47 -17 98 -35.5t98 -38t86.5 -39t63.5 -37.5q21 -17 39 -42v56 q0 9 8 9h21q-28 22 -44.5 55.5t-16.5 73.5v474q0 26 17.5 43.5t42.5 17.5q26 0 43.5 -17.5t17.5 -43.5v-147q14 8 30 8q20 0 35.5 -11.5t22.5 -29.5q13 10 33 10t35.5 -11.5t22.5 -29.5q13 10 33 10zM528 -89q18 0 31 13t13 31t-13 31t-31 13q-19 0 -32 -13t-13 -31t13 -31 t32 -13zM772 -89q18 0 31 13t13 31t-13 31t-31 13q-19 0 -31.5 -13t-12.5 -31t12.5 -31t31.5 -13zM1490 603q0 13 -8.5 21.5t-21.5 8.5q-12 0 -21 -8.5t-9 -21.5h60zM1339 597q13 3 27 3h33v34q0 13 -8.5 21.5t-21.5 8.5q-12 0 -21 -8.5t-9 -21.5v-37zM1248 537q24 33 61 50 v247q0 13 -9 21.5t-22 8.5q-12 0 -21 -8.5t-9 -21.5v-297zM1498 62q16 0 27 11t11 27t-11 27t-27 11q-15 0 -26 -11t-11 -27t11 -27t26 -11zM1581 435q-14 -8 -30 -8q-27 0 -45 20q-9 -9 -20.5 -14.5t-25.5 -5.5q-27 0 -45 20q-18 -20 -46 -20q-11 0 -24 5q-6 -14 -6 -30 q0 -6 -4.5 -10.5t-10.5 -4.5q-7 0 -11 4.5t-4 10.5q0 22 8.5 41.5t22.5 34t33.5 23t41.5 8.5q27 0 48 17t26 43h-123q-24 0 -45.5 -10t-37.5 -28t-25.5 -41.5t-9.5 -50.5v-79q0 -26 9 -49.5t24 -41t35.5 -28t44.5 -10.5h108q22 0 42.5 10.5t36 28t24.5 41t9 49.5v75z M1490 510q-24 -25 -59 -30q7 -22 29 -22q13 0 21.5 8.5t8.5 21.5v22zM1397 476q-20 -5 -33 -18h5q21 0 28 18zM1581 573q0 12 -8.5 21t-21.5 9t-21.5 -9t-8.5 -21v-85q0 -13 8.5 -21.5t21.5 -8.5t21.5 8.5t8.5 21.5v85zM1149 744q-18 17 -26.5 39t-8.5 45t8.5 45t26.5 40 q5 5 11 5q5 0 12 -5q4 -4 4 -11q0 -8 -4 -12q-13 -13 -19.5 -29t-6.5 -33q0 -35 26 -61q4 -5 4 -12t-4 -11q-5 -5 -12 -5q-6 0 -11 5zM1392 753q-5 4 -5 12q0 7 5 11q21 23 21 52t-21 53q-5 4 -5 11t5 11q5 5 11 5t11 -5q31 -31 31 -75t-31 -75q-4 -4 -11 -4t-11 4z" />
+<glyph unicode="h" horiz-adv-x="1962" d="M127 1032q-10 0 -16 8q-4 4 -4 11q0 4 1 6q36 127 118.5 233.5t199 182.5t261 118.5t303.5 42.5t303.5 -42.5t261 -118.5t199.5 -182.5t119 -233.5v-4q0 -8 -4 -13q-5 -8 -15 -8h-1727zM1190 1306q-14 -16 -26.5 -33t-12.5 -33q0 -17 11.5 -28t27.5 -11q17 0 28 11t11 28 q0 16 -12.5 33t-26.5 33zM1168 1415q0 -16 11.5 -27.5t27.5 -11.5q17 0 28 11.5t11 27.5q0 17 -12.5 34t-26.5 33q-14 -16 -26.5 -33t-12.5 -34zM1302 1319q0 -17 11 -28t27 -11q17 0 28 11t11 28q0 16 -12 33t-27 33q-14 -16 -26 -33t-12 -33zM1432 1384q0 -17 11 -28 t28 -11q16 0 27.5 11t11.5 28q0 16 -12.5 33t-26.5 33q-14 -16 -26.5 -33t-12.5 -33zM1513 1220q0 -16 11 -27t28 -11q16 0 27.5 11t11.5 27q0 17 -12.5 33.5t-26.5 33.5q-14 -17 -26.5 -33.5t-12.5 -33.5zM127 178h1727v-170q0 -33 -12.5 -61.5t-33.5 -49.5t-49.5 -33.5 t-61.5 -12.5h-1413q-33 0 -61.5 12.5t-49.5 33.5t-33.5 49.5t-12.5 61.5v170zM1824 603q28 0 53.5 -11t44 -29.5t29.5 -44t11 -54.5t-11 -54.5t-29.5 -44t-44 -29.5t-53.5 -11h-1685q-29 0 -54.5 11t-44 29.5t-29.5 44t-11 54.5t11 54.5t29.5 44t44 29.5t54.5 11h907 l499 -205l155 205h124zM150 752q-17 -14 -37 -14q-28 0 -45 22q-14 17 -14 38q0 27 21 45q55 45 121 69t138 24q69 0 134.5 -23.5t122.5 -70.5q39 -32 86 -49t98 -17q100 0 182 68q55 45 121.5 68.5t137.5 23.5q72 0 138 -24t121 -69q38 -32 85 -49.5t98 -17.5q50 0 97 17.5 t86 49.5q16 13 37 13q28 0 46 -21q13 -16 13 -37q0 -28 -21 -46q-54 -45 -120.5 -69t-137.5 -24t-137.5 24t-121.5 69q-38 32 -85 49t-98 17q-50 0 -97 -17t-86 -49q-54 -45 -120.5 -69t-137.5 -24t-137 24.5t-121 69.5q-39 32 -86 48.5t-97 16.5q-51 0 -98 -17t-86 -49z " />
+<glyph unicode="i" horiz-adv-x="2130" d="M2129 964q0 -2 0.5 -3t0.5 -3v-749q0 -16 -10 -28.5t-26 -16.5l-1223 -272q-3 -1 -10 -1q-8 0 -15.5 2.5t-13.5 7.5q-17 14 -17 36v749q0 3 1 4v4q1 5 4 13.5t8 10.5l417 436q12 -36 34.5 -66t52.5 -51.5t66 -34t76 -12.5q47 0 89 17t74 46.5t52.5 69t25.5 85.5 q14 -3 28 -7t28 -9q87 -29 151.5 -64t107.5 -65t64.5 -51t23.5 -23q2 -1 2 -2t1 -2q4 -6 6 -12t2 -9zM2038 467l-1131 -251v-221l1131 251v221zM2038 901l-1131 -252v-220l1131 251v221zM1181 1502q-17 0 -29.5 12t-12.5 30q0 17 12.5 29.5t29.5 12.5q44 0 83.5 -13.5 t72.5 -38t57 -58.5t36 -74q21 6 44 6q36 0 68 -13.5t56 -37.5t37.5 -56t13.5 -68t-13.5 -68t-37.5 -56t-56 -38t-68 -14t-68 14t-56 38t-38 56t-14 68q0 38 15 71t41 57q-6 30 -22 56t-39 44.5t-51.5 29.5t-60.5 11zM1527 1345q-20 0 -34.5 -14.5t-14.5 -34.5t14.5 -34.5 t34.5 -14.5q21 0 35.5 14.5t14.5 34.5t-14.5 34.5t-35.5 14.5zM680 863l-177 175h-375q-27 0 -50 10t-40.5 27.5t-27.5 41t-10 50.5v288q0 27 10 50.5t27.5 41t40.5 27.5t50 10h706q27 0 50 -10t40.5 -27.5t27.5 -41t10 -50.5v-288q0 -27 -10 -50.5t-27.5 -41t-40.5 -27.5 t-50 -10h-154v-175z" />
+<glyph unicode="j" horiz-adv-x="1543" d="M493 390l-42 -142h825q35 0 65.5 -14t53.5 -38t36.5 -55.5t13.5 -67.5t-13.5 -67.5t-37.5 -55.5t-55.5 -37.5t-67.5 -13.5t-68 13.5t-56 37.5t-37.5 55.5t-13.5 67.5t14 69h-570q14 -33 14 -69t-13.5 -67.5t-37.5 -55.5t-55.5 -37.5t-67.5 -13.5t-68 13.5t-55.5 37.5 t-37.5 55.5t-14 67.5q0 31 10 59t28 50t42.5 38t53.5 23q21 71 33 109.5t17 56.5l7 24l-129 655l-225 46q-19 4 -30.5 19t-11.5 33q0 6 1 10q4 18 19 30t33 12q6 0 10 -1l254 -51h486q-28 23 -44.5 57t-16.5 73q0 37 14.5 69t39.5 55q-6 29 -21.5 54t-37.5 43t-49.5 28.5 t-58.5 10.5q-17 0 -29 12t-12 29t12 28.5t29 11.5q42 0 80 -13t69.5 -36.5t55 -56t35.5 -71.5q21 6 42 6q35 0 66 -13.5t54 -36.5t36.5 -54t13.5 -66q0 -39 -16.5 -73t-45.5 -57h471q12 0 22.5 -5.5t18.5 -14.5q12 -14 12 -34q0 -7 -1 -10l-136 -689q-2 -19 -17 -31t-34 -12 h-862zM963 1430q-22 0 -37 -15t-15 -37q0 -23 15 -38t37 -15t37.5 15t15.5 38q0 22 -15.5 37t-37.5 15zM410 906l46 -237h889l47 237h-982zM449 73q0 29 -20 49t-49 20t-49 -20t-20 -49t20 -49t49 -20t49 20t20 49zM1271 4q29 0 49 20t20 49t-20 49t-49 20t-49 -20t-20 -49 t20 -49t49 -20z" />
+<glyph unicode="k" horiz-adv-x="970" d="M961 680q9 -10 9 -23v-552q0 -12 -7.5 -21.5t-19.5 -12.5l-902 -200q-2 -1 -7 -1q-11 0 -21 8q-13 10 -13 26v552q0 2 1 6q1 8 8 18l359 374q10 10 23 10h13q6 0 15.5 0.5t20.5 0.5q24 0 55.5 -1.5t66.5 -5t72 -10.5t71 -19q64 -21 111.5 -46.5t79.5 -48t48 -38t17 -16.5 zM902 295l-834 -186v-163l834 186v163zM902 615l-834 -186v-163l834 186v163zM285 1580q-12 0 -20.5 8.5t-8.5 20.5q0 13 8.5 21.5t20.5 8.5q30 0 58 -9.5t51 -26.5t39.5 -40.5t25.5 -51.5q12 4 30 4q25 0 47.5 -9.5t39 -26t26 -39t9.5 -47.5q0 -26 -9.5 -48t-26 -38.5 t-39 -26t-47.5 -9.5q-26 0 -48 9.5t-38.5 26t-26 38.5t-9.5 48t10.5 49t28.5 40q-9 42 -42.5 70t-78.5 28zM526 1475q-16 0 -27 -11t-11 -27t11 -27t27 -11t27 11t11 27t-11 27t-27 11zM512 1163q14 0 14 -14v-80h46q9 0 13 -9q1 -2 1 -5q0 -6 -4 -10l-87 -87q-4 -4 -10 -4 t-10 4l-87 87q-4 4 -4 10q0 3 1 5q4 9 13 9h46v80q0 14 14 14h54z" />
+<glyph unicode="l" horiz-adv-x="1953" d="M1553 110v-6q1 -5 1 -9v-9q0 -63 -37 -103.5t-103 -48.5q-9 -1 -20.5 -1.5t-24.5 -0.5q-40 0 -93 4.5t-107.5 12.5t-105.5 19t-86 24q-14 5 -27 10t-27 10q-5 -11 -14 -19t-22 -10l-592 -73h-5q-17 0 -30 11t-15 28v5q0 17 11 30t28 15l592 73h5q25 0 37 -20l48 33 q36 25 92.5 52t116.5 50.5t114 39.5t86 20q7 1 13.5 1.5t13.5 0.5q60 0 99.5 -35t49.5 -98zM294 -69q9 1 15 7.5t6 15.5v4q0 6 -5.5 12.5t-18.5 6.5q-10 0 -17 -7t-7 -18q1 -10 7.5 -15.5t15.5 -5.5h4zM1379 214q-17 -2 -44 -8.5t-60 -16.5t-69.5 -22.5t-70.5 -26.5 t-64 -28.5t-50 -28.5q21 7 51.5 14.5t65 15t71.5 15t70.5 13.5t61.5 11t45 7t31 3t27 1q37 0 61 -8q-14 29 -40.5 45t-62.5 16q-6 0 -11.5 -0.5t-11.5 -1.5zM1409 -33q45 6 72.5 29t35.5 59q-17 -10 -44 -18.5t-70 -13.5q-21 -3 -58 -6t-80.5 -5.5t-89 -4t-84.5 -1.5 q-18 0 -33.5 0.5t-27.5 1.5q28 -11 70.5 -19t88 -13.5t90.5 -8t80 -2.5q16 0 28.5 0.5t21.5 1.5zM1399 56q33 4 56 10.5t37.5 13.5t20.5 14t6 12q-1 8 -18.5 16t-57.5 8q-11 0 -24.5 -1t-28.5 -3q-18 -2 -47.5 -7t-64.5 -12t-73.5 -15t-75 -16.5t-69 -17t-54.5 -15.5 q16 -2 36 -2h43q40 0 86.5 1.5t90 3.5t80 4.5t57.5 5.5zM273 191q-5 23 -23 38t-42 15q-16 0 -16 16t16 16q33 0 58.5 -19.5t35.5 -49.5q10 2 16 2q28 0 47 -19.5t19 -46.5t-19 -46.5t-47 -19.5q-27 0 -46.5 19.5t-19.5 46.5q0 29 21 48zM338 185q-8 0 -13 -5t-5 -13 t5 -13.5t13 -5.5t13.5 5.5t5.5 13.5t-5.5 13t-13.5 5zM1179 1058q3 -6 3 -11v-237q0 -6 -4.5 -11t-11.5 -5h-429q-7 0 -11.5 5t-4.5 11v238v2q0 1 1 1q0 2 0.5 2t0.5 2l128 228q8 -2 14.5 -7.5t11.5 -12.5l-112 -200h374l-183 339l-38 -66q-12 10 -27 18l51 89q4 9 14 9 q9 0 14 -9zM1150 895h-396v-68h396v68zM1150 1031h-396v-68h396v68zM839 1309q-16 0 -16 16t16 16q34 0 60 -19.5t36 -50.5q10 2 16 2q29 0 48.5 -19.5t19.5 -47.5t-19.5 -47.5t-48.5 -19.5q-28 0 -47.5 19.5t-19.5 47.5q0 14 6 27t16 22q-5 23 -23.5 38.5t-43.5 15.5z M972 1249q-8 0 -13.5 -5.5t-5.5 -13.5t5.5 -13t13.5 -5t13.5 5t5.5 13t-5.5 13.5t-13.5 5.5zM183 1137l207 106v-70l-134 -70l134 -69v-72l-207 107v68zM567 1281q54 0 87.5 -26.5t33.5 -77.5q0 -47 -29 -70t-70 -31l-5 -30h-51l-12 81l3 2q48 2 67 14t19 32q0 37 -45 37 q-38 0 -75 -35l-46 50q22 24 52 39t71 15zM1251 1243l208 -106v-68l-208 -107v71l135 69l-135 70v71zM558 1012q20 0 33 -13t13 -33q0 -19 -13 -32.5t-33 -13.5q-19 0 -32.5 13.5t-13.5 32.5q0 20 13.5 33t32.5 13zM1703 853l27 47q2 5 7 5t8 -5l110 -203l1.5 -3t0.5 -3 v-126q0 -8 -9 -8h-227q-8 0 -8 8v127v1q0 1 0.5 1t0.5 1l68 120q8 -1 13 -10l-59 -106h198l-97 179l-20 -34zM1840 610h-210v-36h210v36zM1840 682h-210v-36h210v36zM1667 838q0 8 8 8q18 0 32 -10t19 -27q3 1 9 1q14 0 24.5 -10.5t10.5 -24.5q0 -15 -10.5 -25.5 t-24.5 -10.5q-15 0 -25.5 10.5t-10.5 25.5q0 14 12 26q-3 12 -12.5 20t-23.5 8q-8 0 -8 9zM1746 798q-10 0 -10 -10t10 -10t10 10t-10 10zM1637 910l-63 32v21l63 33v-22l-41 -21l41 -21v-22zM1691 986q-12 0 -23 -11l-14 16q14 16 37 16q17 0 27 -8t10 -24q0 -14 -8.5 -21 t-21.5 -9l-2 -10h-15l-3 26q26 1 26 14q0 11 -13 11zM1688 897q-5 0 -9.5 4t-4.5 10t4.5 10t9.5 4q14 0 14 -14t-14 -14zM1665 517l63 -33v-20l-63 -33v22l41 21l-41 21v22zM1613 528q16 0 26 -8t10 -23t-8.5 -22t-21.5 -9l-1 -9h-16l-3 25q15 1 21 4.5t6 9.5q0 11 -14 11 q-13 0 -23 -11l-14 16q14 16 38 16zM1610 446q14 0 14 -14t-14 -14t-14 14t14 14zM1917 1098q15 0 25.5 -10.5t10.5 -25.5v-687q0 -15 -10.5 -25t-25.5 -10h-356q-15 0 -25.5 10t-10.5 25v163h-522v-17q0 -18 8 -40.5t27.5 -42.5t52 -34t80.5 -14v-50h-700v50q48 0 80 14 t51.5 34t28 42.5t8.5 40.5v17h-539q-42 0 -71 28.5t-29 70.5v892q0 42 29 70.5t71 28.5h1442q42 0 71 -28.5t29 -70.5v-431h275zM1697 1066q0 -3 3 -3h78q3 0 3 3v5q0 2 -3 2h-78q-3 0 -3 -2v-5zM851 1591q-5 0 -5 -5t5 -5t5 5t-5 5zM821 1597q-12 0 -12 -11q0 -12 12 -12 q5 0 8.5 3.5t3.5 8.5t-3.5 8t-8.5 3zM870 574q14 0 23.5 9.5t9.5 23.5q0 13 -9.5 22.5t-23.5 9.5h-98q-14 0 -23.5 -9.5t-9.5 -22.5q0 -14 9.5 -23.5t23.5 -9.5h98zM1522 675v224q-5 0 -5 4v18q0 5 8 5l-3 8q-5 0 -5 4v18q0 5 8 5v101q0 15 10.5 25.5t25.5 10.5v447h-1480 v-870h1441zM1937 1039h-395v-641h395v641z" />
+<glyph unicode="m" horiz-adv-x="2276" d="M525 188q-45 -6 -89 -22.5t-81 -51t-64 -91t-38 -143.5h-171q-36 0 -61 23q-21 21 -21 49v6q3 23 9.5 60t19 76t31.5 74t48 56q24 17 63 36.5t85.5 39t96.5 38t97 34.5v-70q0 -35 20 -64.5t55 -49.5zM1200 224q28 -21 47.5 -56t31.5 -74t18.5 -76t9.5 -60v-7 q0 -29 -21 -48q-11 -11 -27.5 -17t-33.5 -6h-932q9 68 29 115t48 77.5t62 47t71 24t75.5 9t75.5 1.5q42 0 79 11.5t64.5 31.5t43.5 47t16 58v70q47 -16 97.5 -34.5t97 -38t85.5 -39t63 -36.5zM523 -71q18 0 31 13t13 31t-13 31t-31 13t-31 -13t-13 -31t13 -31t31 -13z M765 -71q18 0 31 13t13 31t-13 31t-31 13t-31 -13t-13 -31t13 -31t31 -13zM715 582q16 -27 47 -27q15 0 29.5 7t25.5 20h13q-5 -36 -31 -60t-65 -24q-26 0 -47.5 10t-32.5 27q-12 -17 -33 -27t-47 -10q-40 0 -66 24t-31 60h14q22 -27 54 -27q14 0 26.5 6.5t21.5 20.5 q5 9 13.5 13.5t17.5 4.5q17 0 30 -13q11 13 30 13q20 0 31 -18zM345 1176q-42 7 -77 30.5t-58 62.5q-12 22 -18 46t-6 47q0 50 24.5 94t70.5 70q43 25 93 25q17 0 34 -3.5t34 -9.5q17 36 45 65.5t67 47.5q47 22 99 22q66 0 124 -35t88 -99q0 -1 0.5 -1.5t0.5 -1.5 q17 8 35.5 11t36.5 3q49 0 93 -24.5t70 -70.5q25 -43 25 -93q0 -49 -24.5 -93t-70.5 -70q-31 -18 -68 -23v-212l-6 -82q18 -5 32.5 -25.5t14.5 -72.5q0 -25 -5.5 -49t-15.5 -44t-22.5 -34.5t-26.5 -20.5v-95q0 -23 -10.5 -44.5t-28.5 -35.5l-155 -123q-28 -22 -64 -22h-45 q-35 0 -63 22l-155 123q-19 14 -29 35.5t-10 44.5v95q-14 6 -27 20.5t-23 34.5t-15.5 44t-5.5 49q0 26 4 43.5t11 29t15.5 17.5t17.5 8l-6 82v212zM965 784q0 8 -1 18.5t-3 19.5t-6 15.5t-11 6.5q-2 -1 -5.5 -5.5t-8.5 -17.5q-5 -12 -18 -12q-2 0 -8 2q-12 5 -12 18q0 2 2 8 q0 1 3 4v88q-43 -11 -105.5 -16.5t-137.5 -5.5t-137.5 5.5t-104.5 16.5v-88l2 -4q2 -6 2 -8q0 -13 -13 -18q-6 -2 -8 -2q-12 0 -17 12q-6 13 -9.5 17.5t-4.5 5.5q-7 0 -11 -6.5t-6.5 -15.5t-3 -19.5t-0.5 -18.5q0 -10 3 -28t9 -35.5t15.5 -31.5t21.5 -17q10 0 15 -5 q6 -6 6 -14v-112q0 -30 24 -49l155 -123q17 -14 39 -14h45q22 0 39 14l155 123q24 19 24 49v112q0 8 6 14q5 5 13 5h4q4 0 12 9t16 24t14 35t6 44zM867 1486q-10 -5 -10 -17q0 -6 3 -10q5 -10 17 -10q5 0 10 3q24 13 50 13q16 0 28 -4q40 -11 62 -48q13 -23 13 -51 q0 -27 -13 -51t-39 -38q-9 -6 -9 -18q0 -6 2 -9q7 -10 17 -10q5 0 10 3q35 20 53.5 53.5t18.5 70.5q0 38 -19 70q-14 25 -36 42t-50 25q-20 5 -38 5q-38 0 -70 -19zM237 1400q-2 -10 -3.5 -19t-1.5 -19q0 -37 18 -70q7 -10 17 -10q5 0 10 3q10 4 10 17q0 6 -2 9 q-14 25 -14 51q0 7 1 14t3 14q11 40 48 62q23 13 51 13q27 0 51 -13t38 -39l3 -3q2 -13 6 -26t10 -25q5 -12 17 -12q3 0 9 2q11 6 11 18q0 2 -2 8q-8 16 -11 32t-3 32q0 43 22.5 80t63.5 56q31 15 64 15q25 0 51 -9q29 -10 50.5 -30t35.5 -47q5 -12 18 -12q2 0 8 2 q11 6 11 18q0 3 -2 9q-16 34 -44 59t-63 38q-16 6 -32 8.5t-33 2.5q-42 0 -81 -18q-44 -20 -71 -57.5t-35 -82.5q-20 17 -43.5 25t-48.5 8q-37 0 -70 -18q-25 -14 -42 -36t-25 -50zM1820 1062q-8 0 -14 6t-6 15q0 8 6 14t14 6t14 -6t6 -14q0 -9 -6 -15t-14 -6zM1585 722h427 v-73h-427v73zM1585 869h427v-74h-427v74zM2092 1488q38 0 71.5 -14.5t58.5 -39.5t39.5 -59t14.5 -72v-702q0 -38 -14.5 -72t-39.5 -59t-58.5 -39.5t-71.5 -14.5h-586q-38 0 -72 14.5t-59 39.5t-39.5 59t-14.5 72v111h-176l176 177v414q0 38 14.5 72t39.5 59t59 39.5t72 14.5 h586zM1678 1202q-8 0 -13 -5t-5 -13q0 -7 5 -12t13 -5q26 0 46 -16.5t25 -41.5q-23 -21 -23 -53q0 -30 21 -51t51 -21t51 21t21 51t-21 51.5t-51 21.5q-9 0 -18 -3q-10 33 -38 54.5t-64 21.5zM2046 886q0 7 -2 11l-226 414q-4 8 -15 10q-10 0 -15 -9l-55 -97q18 -8 30 -19 l40 71l197 -364h-402l120 214q-9 17 -27 22l-138 -245q-2 -4 -2 -8v-255q0 -7 4.5 -12t12.5 -5h461q7 0 12 5t5 12v255z" />
+<glyph unicode="n" horiz-adv-x="2271" d="M392 1451q-14 0 -23.5 9.5t-9.5 23.5t9.5 23t23.5 9q34 0 64.5 -10.5t56 -29.5t44 -45t28.5 -57q18 5 34 5q28 0 53 -10.5t43.5 -29t29 -43.5t10.5 -53q0 -29 -10.5 -53.5t-29 -43.5t-43.5 -29.5t-53 -10.5t-53 10.5t-43.5 29.5t-29 43.5t-10.5 53.5t11.5 54.5t31.5 44.5 q-10 47 -47 78t-87 31zM660 1330q-15 0 -26.5 -11t-11.5 -27t11.5 -27t26.5 -11q17 0 28 11t11 27t-11 27t-28 11zM1833 1385q90 -10 169.5 -28.5t139 -45.5t94.5 -63t35 -80v-1054q0 -37 -25 -68.5t-69.5 -56.5t-105 -44t-131 -32t-148.5 -19.5t-157 -6.5t-157 6.5 t-148.5 19.5t-131 32t-105 44t-69.5 56.5t-25 68.5v44q-81 -19 -173.5 -28t-189.5 -9q-79 0 -157 6.5t-148.5 19.5t-131 32t-105 44t-69.5 56.5t-25 68.5v665q0 43 33.5 78t90.5 62t133.5 46t163.5 29q3 -39 19.5 -72.5t43 -58t61.5 -39t74 -14.5q40 0 75 14.5t61.5 40 t43 60t18.5 73.5q50 -5 97 -12.5t91 -18.5q13 37 51.5 67t96.5 53t130.5 39t153.5 25q3 -39 19.5 -72.5t43 -58.5t61.5 -39.5t74 -14.5t74 14.5t61.5 39.5t43 58.5t19.5 72.5zM999 435q-81 -18 -173.5 -27.5t-189.5 -9.5q-82 0 -162.5 7t-153 20.5t-133.5 34t-104 47.5v-159 q0 -18 36 -43t106 -47.5t173.5 -38t237.5 -15.5q114 0 204 11t159 29v191zM999 866q-76 -18 -168 -28t-195 -10q-94 0 -180 8.5t-158 24t-127 37t-88 47.5v-209q0 -18 36 -43t106 -47.5t173.5 -38t237.5 -15.5q114 0 204 11.5t159 28.5v234zM2189 273q-44 -27 -105 -47.5 t-133.5 -34t-153 -20.5t-162.5 -7t-162.5 7t-153 20.5t-134 34t-104.5 47.5v-159q0 -18 36 -43t106.5 -47.5t174 -38t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v159zM2189 661q-44 -27 -105 -47t-133.5 -34t-153 -21t-162.5 -7t-162.5 7t-153 20.5t-134 34 t-104.5 47.5v-159q0 -18 36 -43t106.5 -47.5t174 -38t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v159zM2189 1100q-33 -26 -88 -47.5t-127.5 -37.5t-158.5 -24.5t-180 -8.5q-95 0 -181 8.5t-158 24.5t-127 37.5t-88 47.5v-209q0 -18 36 -43t106.5 -47.5t174 -38 t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v209zM1408 1607q-14 0 -23.5 9.5t-9.5 23.5t9.5 23t23.5 9q34 0 65 -10.5t56 -29.5t43.5 -45t28.5 -57q15 4 34 4q28 0 53 -10.5t43.5 -29t29 -43.5t10.5 -53t-10.5 -53t-29 -43.5t-43.5 -29t-53 -10.5t-53 10.5t-43.5 29 t-29 43.5t-10.5 53q0 30 11.5 55.5t31.5 44.5q-10 47 -47 78t-87 31zM1677 1486q-16 0 -27 -11t-11 -27t11 -27t27 -11t27 11t11 27t-11 27t-27 11z" />
+<glyph unicode="o" horiz-adv-x="1397" d="M697 171q18 0 30.5 -12.5t12.5 -29.5v-103q-20 15 -43 15q-24 0 -42 -15v103q0 17 12.5 29.5t29.5 12.5zM697 -5q18 0 30.5 -12.5t12.5 -30.5q0 -17 -12.5 -30t-30.5 -13q-17 0 -29.5 13t-12.5 30q0 18 12.5 30.5t29.5 12.5zM696 1584q42 0 75 -22.5t56.5 -58.5t36 -80 t12.5 -87q0 -57 -10 -104t-25.5 -89.5t-33 -81.5t-33 -79t-25.5 -83t-10 -93v-603q-19 14 -43 14q-23 0 -42 -14v603q0 50 -10 93t-25.5 83t-33 79t-33 81.5t-25.5 89.5t-10 104q0 43 12.5 87t35.5 80t56.5 58.5t74.5 22.5zM697 1082q26 0 48.5 19.5t39.5 52.5t27 77.5 t10 95.5q0 42 -12 81.5t-33 67.5q-3 3 -8 3q-3 0 -4 -1q-5 -2 -5 -7q0 -3 1 -4q12 -38 12 -80q0 -46 -8.5 -87t-23 -72t-34 -49t-40.5 -18q-19 0 -33.5 12t-23.5 25q-3 3 -8 3q-3 0 -4 -1q-5 -2 -5 -8q0 -2 1 -3q17 -51 44.5 -79t58.5 -28zM198 1544q85 -2 134.5 -54 t49.5 -139q0 -26 -5.5 -65t-14.5 -86t-22 -98t-28 -100t-31.5 -92.5t-32.5 -74.5l-33 -62q13 -7 21.5 -19.5t8.5 -28.5v-722q0 -23 -16 -38.5t-38 -15.5q-23 0 -38.5 15.5t-15.5 38.5v722q0 16 8 28.5t21 19.5l-32 62q-16 31 -32.5 74.5t-31.5 92.5t-28 100t-22 98t-14.5 86 t-5.5 65q0 43 13 78t37 60.5t57.5 39.5t75.5 15q2 0 4 0.5t4 0.5t3.5 -0.5t3.5 -0.5zM40 1351q0 -20 4 -53.5t11 -75t17 -87t21.5 -88.5t24.5 -81.5t27 -64.5q-5 26 -9.5 64t-9 81t-7.5 88.5t-5.5 86.5t-4 75t-1.5 55q0 53 6 87.5t16 55.5q-43 -15 -66.5 -51.5t-23.5 -91.5z M220 4q0 13 -8.5 21.5t-20.5 8.5q-13 0 -21.5 -8.5t-8.5 -21.5q0 -12 8.5 -20.5t21.5 -8.5q12 0 20.5 8.5t8.5 20.5zM191 877q5 28 10.5 68.5t10 85.5t8.5 92.5t7 91t4.5 79t1.5 57.5q0 42 -4.5 71t-10.5 47.5t-13.5 26.5t-13.5 8t-13.5 -8t-14 -26.5t-11 -47.5t-4.5 -71 q0 -22 1.5 -57.5t4.5 -79t7 -91t9 -92.5t10 -85.5t11 -68.5zM237 901q13 27 26 65t25 81t21.5 88.5t16.5 87t11 75t4 53.5q0 55 -23 91.5t-66 51.5q10 -21 16 -55.5t6 -87.5q0 -21 -1.5 -55t-4 -75t-6 -86.5t-7.5 -88.5t-8.5 -81t-9.5 -64zM1372 1250q11 0 18 -7t7 -17v-942 q0 -11 -7 -18t-18 -7h-105q1 -51 6 -82t10.5 -56t10 -49.5t4.5 -62.5q0 -39 -8.5 -65.5t-20.5 -43t-25 -23.5t-22 -7t-22 7t-25 23.5t-20.5 43t-8.5 65.5q0 38 4.5 62.5t10 49.5t10.5 56t6 82h-104q-11 0 -18 7t-7 18v942q0 10 7 17t18 7h104q-2 45 -7 74t-10 52t-9.5 47.5 t-4.5 60.5q0 39 8.5 65.5t20.5 43t25 23.5t22 7t22 -7t25 -23.5t20.5 -43t8.5 -65.5q0 -36 -4 -60.5t-9.5 -47.5t-10.5 -52t-6 -74h104zM1342 1198h-36v-897h36v897z" />
+<glyph unicode="p" horiz-adv-x="1624" d="M191 1312h132v-39h-132v39zM191 961h132v-39h-132v39zM191 893h132v-38h-132v38zM811 782h-550v39h550v-39zM451 1104v-38h-190v38h190zM757 942q-63 57 -97 133t-34 161q0 72 25.5 139.5t74.5 121.5q58 66 135 98.5t158 32.5q70 0 137.5 -24t124.5 -75q63 -57 97 -133 t34 -161q0 -55 -15 -107.5t-44 -99.5l248 -221q22 -19 22 -50q0 -12 -4 -24t-13 -22q-10 -11 -22.5 -16.5t-26.5 -5.5q-12 0 -24 4t-22 13l-248 221q-54 -42 -116 -63t-128 -21q-70 0 -137.5 24t-124.5 75zM809 1423q-35 -38 -53.5 -86.5t-18.5 -100.5q0 -61 24.5 -116 t69.5 -95q41 -36 88.5 -53.5t98.5 -17.5q59 0 114.5 23.5t97.5 70.5q35 39 53 87t18 100q0 61 -24.5 116t-69.5 95q-41 36 -88.5 53.5t-98.5 17.5q-59 0 -114 -23.5t-97 -70.5zM1105 342q11 0 11 -11v-53q0 -10 -11 -10h-938q-10 0 -10 10v53q0 11 10 11h938zM835 1205 q-19 17 -19 41q0 22 15 37q17 19 41 19q20 0 37 -15l97 -87l148 159q16 18 41 18q21 0 38 -15q18 -17 18 -41q0 -22 -15 -38l-186 -199q-17 -18 -41 -18q-20 0 -37 14zM321 467q36 0 65 12t51.5 32.5t38.5 48t26 58.5h-492q-10 0 -10 11v847q0 10 10 10h648q-26 -39 -44 -80 h-534v-708h1105v131q43 17 80 42v-242q0 -11 -10 -11h-492q11 -31 28 -58.5t40 -48t53 -32.5t67 -12h7t13 -0.5t13 -1t7 -0.5l105 -73q5 -2 5 -8q0 -2 -1 -3q-2 -8 -9 -8h-910q-7 0 -9 8q-1 1 -1 3q0 6 5 8l105 73q1 0 7 0.5t13 1t13 0.5h7zM600 1104q3 -10 6.5 -19.5 t7.5 -18.5h-127v38h113zM584 1174q2 -10 3.5 -19t3.5 -19h-330v38h323zM580 1244v-8v-15t1 -15h-320v38h319zM261 1031h369q5 -10 11 -19.5t12 -19.5h-392v39zM1503 86q34 0 57 -7t37 -17.5t20.5 -21.5t6.5 -19t-6.5 -19t-20.5 -21.5t-37 -18t-57 -7.5q-31 0 -52 3.5 t-41 8.5t-45 9t-64 6v-91q0 -8 -6.5 -14.5t-14.5 -6.5h-815q-9 0 -15 6.5t-6 14.5v91q-44 -1 -71 -5t-48.5 -9t-42.5 -9t-54 -4q-34 0 -57 7t-37.5 17.5t-20.5 22t-6 19.5t6 19t20.5 21.5t37.5 17.5t57 7q33 0 54 -4t42.5 -8.5t48.5 -8.5t71 -5v90q0 9 6 15.5t15 6.5h815 q8 0 14.5 -6.5t6.5 -15.5v-90q39 1 64 5.5t45 9t41 8t52 3.5zM1256 -52h-776v-31h776v31z" />
+<glyph unicode="q" horiz-adv-x="1297" d="M637 1223q-19 0 -36 7t-29.5 19.5t-19.5 29.5t-7 36q0 20 7.5 37.5t21.5 29.5q-7 32 -32 53t-59 21q-9 0 -15.5 6.5t-6.5 15.5t6.5 15.5t15.5 6.5q46 0 82 -27t49 -69q10 3 23 3q19 0 36 -7t29.5 -19.5t19.5 -29.5t7 -36t-7 -36t-19.5 -29.5t-29.5 -19.5t-36 -7z M665 1374q-11 0 -18.5 -7.5t-7.5 -18.5t7.5 -18t18.5 -7t18.5 7t7.5 18t-7.5 18.5t-18.5 7.5zM218 1160q0 29 22.5 53t61.5 42t90.5 30.5t110.5 19.5q2 -26 13 -48.5t29 -39.5t41.5 -26.5t50.5 -9.5t50.5 10t41.5 27t29 40t12 50q63 -6 119 -18.5t98 -31t67 -43t25 -55.5 v-450q0 -28 -21 -51t-57 -41t-85 -30.5t-104 -19.5q-1 1 -1 3q-11 31 -37 48q61 6 107.5 17.5t78 24.5t47.5 26t16 23v108q-27 -17 -63.5 -29.5t-80 -22t-92 -15t-98.5 -6.5q-6 8 -14 13q-23 17 -53 17q-5 0 -10 -0.5t-10 -1.5l-46 -11l-31 35q-13 15 -30.5 23t-37.5 8 q-43 0 -69 -31l-17 -19q-29 8 -53 18t-43 22v-45q-21 -3 -37 -16q-6 -4 -10.5 -9t-9.5 -10v422zM275 973q0 -12 24.5 -29t71.5 -32.5t117 -26t161 -10.5t160.5 10.5t117 26t72 32.5t24.5 29v141q-22 -17 -59.5 -31.5t-86 -25t-106.5 -16.5t-122 -6t-122 6t-107 16.5t-86 25 t-59 31.5v-141zM1262 1639q15 0 25 -10t10 -24v-1222q0 -8 -3.5 -14.5t-6.5 -9.5l-265 -264q-5 -5 -12 -5h-310l-6 69h274v225q0 14 10.5 24.5t24.5 10.5h225v1151h-1158v-1411h150l-6 -69h-179q-14 0 -24.5 10t-10.5 24v1481q0 14 10.5 24t24.5 10h1227zM1178 349h-140 v-141zM622 144q10 0 15 1l19 -234q0 -14 -11 -20q-7 -5 -15 -5q-7 0 -11 3l-162 79l-162 -79q-6 -3 -12 -3q-8 0 -15 5q-11 9 -11 23l20 231q5 -1 15 -1h9t9 2l49 11l33 -38q26 -29 65 -29q18 0 35 7.5t29 21.5l33 38l49 -11q5 -2 9.5 -2h9.5zM457 618q33 0 62.5 -12.5 t51.5 -34.5t34.5 -51.5t12.5 -63.5q0 -33 -12.5 -62.5t-34.5 -51.5t-51.5 -34.5t-62.5 -12.5q-34 0 -63.5 12.5t-51.5 34.5t-34.5 51.5t-12.5 62.5q0 34 12.5 63.5t34.5 51.5t51.5 34.5t63.5 12.5zM755 359q-3 -13 -18 -20l-75 -32l-7 -81q-1 -15 -14 -24q-8 -6 -19 -6 q-5 0 -7 1l-80 18l-54 -62q-9 -11 -24 -11q-16 0 -25 11l-54 62l-79 -18q-3 -1 -8 -1q-10 0 -19 6q-11 9 -13 24l-8 81l-75 32q-13 6 -18 20q-2 6 -2 10q0 9 5 17l42 70l-42 71q-5 8 -5 16q0 3 2 11q2 6 6.5 11.5t11.5 7.5l75 33l8 81q2 16 13 23q10 7 20 7q2 0 3.5 -0.5 t3.5 -0.5l79 -18l54 61q9 11 24 11q14 0 25 -11l54 -61l80 18q2 0 3.5 0.5t3.5 0.5q10 0 19 -7q12 -8 14 -23l7 -81l75 -33q14 -5 18 -19q1 -3 1.5 -5.5t0.5 -5.5q0 -5 -1 -8.5t-3 -7.5l-42 -71l42 -70q2 -4 3 -7.5t1 -8.5q0 -3 -0.5 -5.5t-1.5 -5.5zM457 252q42 0 79.5 16 t65 44t43.5 65t16 79t-16 79.5t-43.5 65.5t-65 44t-79.5 16t-79.5 -16t-65.5 -44t-44 -65.5t-16 -79.5t16 -79t44 -65t65.5 -44t79.5 -16z" />
+<glyph unicode="r" horiz-adv-x="1649" d="M1274 386q8 0 13.5 -5t5.5 -13t-5.5 -13.5t-13.5 -5.5h-720q-19 0 -19 19q0 8 5.5 13t13.5 5h720zM1274 454q8 0 13.5 -5.5t5.5 -13.5t-5.5 -13.5t-13.5 -5.5h-720q-19 0 -19 19q0 8 5.5 13.5t13.5 5.5h720zM554 282q-26 0 -48 9.5t-39 26t-26.5 39t-9.5 47.5v247 q22 -27 53.5 -43.5t69.5 -16.5h601q22 0 37 15t15 37q0 20 -12 34q12 13 12 33t-12 34q12 13 12 34t-15 36q15 13 15 36v423h67q8 0 13.5 -5.5t5.5 -13.5v-746q0 -8 -5.5 -13.5t-13.5 -5.5h-720q-35 0 -60 -25t-25 -60t25 -60t60 -25h720q8 0 13.5 -5.5t5.5 -13.5t-5.5 -13 t-13.5 -5h-720zM554 624q-26 0 -48 9.5t-39 26.5t-26.5 39t-9.5 48v667q0 25 9.5 47.5t26.5 39t39 26t48 9.5h601q8 0 13.5 -5t5.5 -13v-668q0 -8 -5.5 -13.5t-13.5 -5.5h-601q-18 0 -33.5 -6.5t-27 -18t-18 -27t-6.5 -32.5q0 -35 25 -60t60 -25h601q19 0 19 -19 q0 -8 -5.5 -13.5t-13.5 -5.5h-601zM1155 729q19 0 19 -19q0 -8 -5.5 -13.5t-13.5 -5.5h-601q-8 0 -13.5 5.5t-5.5 13.5q0 19 19 19h601zM1155 796q8 0 13.5 -5t5.5 -13q0 -19 -19 -19h-601q-19 0 -19 19q0 8 5.5 13t13.5 5h601zM195 280q-17 14 -40 14t-40 -14v96 q0 17 11.5 28.5t28.5 11.5t28.5 -11.5t11.5 -28.5v-96zM115 211q0 17 11.5 28.5t28.5 11.5t28.5 -11.5t11.5 -28.5t-11.5 -28.5t-28.5 -11.5t-28.5 11.5t-11.5 28.5zM114 979q0 43 -8.5 80t-21 71.5t-27.5 68t-27.5 69.5t-21 76.5t-8.5 89.5q0 37 10.5 75t30.5 68.5t48.5 50 t64.5 19.5t64.5 -19.5t48.5 -50t30.5 -68.5t10.5 -75q0 -49 -8.5 -89.5t-21 -76.5t-27.5 -69.5t-27.5 -68t-21 -71.5t-8.5 -80v-534q-17 14 -40 14t-40 -14v534zM66 1310q0 -16 9 -32.5t22 -30t28.5 -22.5t29.5 -9q22 0 41.5 16.5t34 45t23 66.5t8.5 82q0 35 -10.5 69.5 t-28.5 58.5q-2 3 -6 3q-8 0 -8 -10q6 -17 8.5 -34.5t2.5 -34.5q0 -39 -7.5 -74.5t-20 -62.5t-29 -42.5t-34.5 -15.5q-17 0 -29 10.5t-20 21.5q-4 4 -8 4t-5 -3.5t-1 -5.5zM1584 1213q-12 6 -25 6t-25 -6l13 41q3 8 12 8t12 -8zM1623 1080q-12 12 -28.5 19.5t-35.5 7.5 t-35 -7.5t-28 -19.5l27 84q10 25 36 25q12 0 22 -6.5t15 -17.5zM1559 355q-26 0 -45 18.5t-19 45.5q0 26 19 44.5t45 18.5t45 -18.5t19 -44.5q0 -27 -19 -45.5t-45 -18.5zM1559 447q-12 0 -20 -8.5t-8 -19.5q0 -12 8 -20.5t20 -8.5t20.5 8.5t8.5 20.5q0 11 -8.5 19.5 t-20.5 8.5zM1623 486q-12 13 -28 20.5t-36 7.5q-19 0 -35.5 -7.5t-28.5 -20.5v526q0 26 19 44.5t45 18.5t45 -18.5t19 -44.5v-269q-18 18 -40 24v-177q25 -8 40 -25v-79zM1526 73q34 0 58 -7.5t38 -18t20.5 -22t6.5 -19.5t-6.5 -19t-20.5 -21.5t-38 -18t-58 -7.5 q-32 0 -53 3.5t-41.5 8t-45.5 9t-65 5.5v-91q0 -9 -6.5 -15.5t-15.5 -6.5h-829q-9 0 -15.5 6.5t-6.5 15.5v92q-45 -1 -72 -5t-49 -9t-43.5 -9t-54.5 -4q-35 0 -58.5 7.5t-37.5 18t-20.5 21.5t-6.5 19t6.5 19.5t20.5 22t37.5 18t58.5 7.5q33 0 54.5 -4t43.5 -9t49 -9t72 -5 v92q0 9 6.5 15.5t15.5 6.5h829q9 0 15.5 -6.5t6.5 -15.5v-92q40 1 65 5.5t45.5 9.5t41.5 8.5t53 3.5zM1274 -68h-789v-31h789v31z" />
+<glyph unicode="s" horiz-adv-x="3691" d="M1147 1404q58 24 121 24q84 0 157.5 -41.5t118.5 -119.5q21 -37 31 -76.5t10 -79.5q0 -83 -41 -157.5t-119 -118.5q-55 -31 -115 -39v-579q0 -20 -41 -37.5t-111.5 -31t-165.5 -21t-203 -7.5t-202.5 7.5t-165.5 21t-112 31t-41 37.5v580q-69 11 -129 50.5t-97 105.5 q-42 75 -42 157q0 83 41.5 157.5t119.5 118.5q37 21 76.5 31.5t80.5 10.5q59 0 113 -21q29 60 76.5 109.5t113.5 80.5q41 20 83 29t84 9q55 0 108.5 -15.5t100.5 -44.5t85 -71t63 -95q1 -2 1 -3t1 -2zM1063 1333q18 10 18 30q0 6 -3 14q-27 59 -73.5 101t-107.5 64 q-53 19 -109 19q-73 0 -136 -31q-75 -35 -121 -98.5t-58 -138.5q-68 57 -156 57q-30 0 -60 -7.5t-58 -23.5q-42 -24 -71 -61t-42 -84q-9 -32 -9 -64q0 -63 32 -118q9 -17 29 -17q9 0 16 4q17 9 17 29q0 9 -4 16q-23 41 -23 87q0 22 6 45q19 69 82 105q40 22 85 22t86 -22.5 t65 -64.5l4 -5q7 -45 27 -87q9 -19 30 -19q8 0 14 3q9 5 14 13t5 17q0 8 -3 14q-13 26 -18.5 53.5t-5.5 54.5q0 36 10 70.5t28.5 64.5t45.5 54.5t61 40.5q52 24 108 24q45 0 87 -15q48 -17 84.5 -50.5t58.5 -79.5q9 -19 30 -19q7 0 15 3zM1387 902q58 33 89.5 89.5 t31.5 119.5q0 62 -32 118q-23 42 -60.5 71t-84.5 42q-32 9 -64 9q-62 0 -118 -32q-8 -5 -12 -13t-4 -16q0 -9 4 -16q9 -17 29 -17q9 0 16 4q41 23 86 23q23 0 46 -6q69 -20 105 -82q22 -40 22 -85t-22.5 -86.5t-64.5 -65.5q-17 -9 -17 -29q0 -9 4 -16q5 -8 13 -12.5t16 -4.5 q7 0 17 5zM789 32q108 0 203 7.5t165.5 20.5t111.5 31t41 38v-115q0 -20 -41 -37.5t-111.5 -31t-165.5 -21t-203 -7.5t-202.5 7.5t-165.5 21t-112 31t-41 37.5v115q0 -20 41 -38t112 -31t165.5 -20.5t202.5 -7.5zM2742 35q106 0 200 7.5t164 20t110.5 30t40.5 37.5v-113 q0 -20 -40.5 -37.5t-110.5 -30t-164 -20t-200 -7.5q-107 0 -200.5 7.5t-163 20t-110 30t-40.5 37.5v113q0 -20 40.5 -37.5t110 -30t163 -20t200.5 -7.5zM3539 583v-282q16 -10 25.5 -25.5t9.5 -35.5q0 -27 -18 -47q16 -19 26.5 -46t10.5 -59q0 -18 -4 -42.5t-10.5 -50 t-15 -50t-18.5 -44t-20.5 -31.5t-20.5 -12t-21 12t-21 31.5t-18.5 44t-15 50t-10.5 49.5t-4 43q0 32 10.5 59t27.5 46q-8 9 -13.5 21t-5.5 26q0 20 9.5 35.5t25.5 25.5v260l-211 -65v-278q0 -20 -40.5 -37.5t-110.5 -30.5t-164 -20.5t-200 -7.5q-107 0 -200.5 7.5t-163 20.5 t-110 30.5t-40.5 37.5v287l-405 125v62l934 286l934 -286v-62z" />
+<glyph unicode="t" horiz-adv-x="1643" d="M1250 586q103 -18 184.5 -44.5t138 -58.5t86.5 -70t30 -79v-431q0 -13 -9 -22t-23 -9h-813q-13 0 -22 9t-9 22v413l-359 216q-15 9 -15 27v175h-408q-13 0 -22 9t-9 22v431q0 66 74.5 121.5t211.5 95.5q-1 5 -1.5 9.5t-0.5 9.5q0 26 10.5 47.5t27.5 38.5q-8 41 -40.5 68 t-76.5 27q-11 0 -19.5 8.5t-8.5 19.5q0 12 8.5 20t19.5 8q60 0 106 -34.5t64 -88.5q7 2 13.5 3t14.5 1q24 0 45.5 -9.5t37.5 -25.5t25.5 -37.5t9.5 -45.5v-5l337 -203q18 -9 18 -28v-146q92 -2 179 -8.5t169 -20.5q9 -2 17.5 -8t8.5 -18v-409zM439 1507q-14 0 -23.5 -9.5 t-9.5 -23.5t9.5 -23.5t23.5 -9.5t23.5 9.5t9.5 23.5t-9.5 23.5t-23.5 9.5zM313 1354q-43 -12 -82 -26t-70.5 -30t-54.5 -34t-34 -37h659l-230 139q-16 -24 -41.5 -38.5t-56.5 -14.5q-27 0 -50 11t-40 30zM813 491l-312 188v-102l312 -188v102zM813 734h-147l147 -89v89z M813 908h-750v-112h750v112zM813 1164h-750v-112h750v112zM957 365h660q-16 27 -55 51.5t-92.5 45.5t-117 37.5t-127.5 27.5zM876 820l250 151q-60 7 -123 11t-127 5v-47v-120zM876 645l311 188v102l-311 -188v-102zM876 389l311 188v102l-311 -188v-102zM1626 47h-750v-112 h750v112zM1626 303h-750v-113h750v113z" />
+<glyph unicode="u" horiz-adv-x="5737" d="M2650 414q-71 0 -132 26t-105 71t-69 105.5t-25 129.5t24.5 130t69 106.5t106.5 71.5t136 26q91 0 150 -27.5t104 -71.5l-90 -104q-38 34 -77.5 53.5t-87.5 19.5q-41 0 -75.5 -16t-59 -43t-38.5 -63.5t-14 -78.5t13.5 -79t38.5 -65t59.5 -44t75.5 -16q56 0 93.5 20 t75.5 55l90 -91q-25 -26 -51.5 -47.5t-58 -36.5t-69.5 -23t-84 -8zM3301 426v53q-26 -29 -62 -46t-87 -17q-35 0 -65.5 10t-53.5 29t-36.5 47.5t-13.5 64.5q0 41 14.5 71t41 49.5t62.5 29t80 9.5q38 0 66.5 -5.5t54.5 -14.5v8q0 44 -26.5 67.5t-79.5 23.5q-40 0 -71 -7.5 t-65 -19.5l-35 106q41 18 84.5 29t106.5 11q115 0 167.5 -56t52.5 -157v-285h-135zM3304 624q-18 8 -41 13.5t-48 5.5q-45 0 -71 -17.5t-26 -51.5q0 -29 21 -45t55 -16q50 0 80 24t30 62v25zM3874 426l-128 201l-49 -52v-149h-140v671h140v-358l164 180h167l-188 -195 l194 -298h-160zM4537 623h-343q10 -48 41.5 -72t78.5 -24q35 0 63 11.5t57 38.5l80 -70q-35 -43 -84.5 -68t-117.5 -25q-56 0 -103 18.5t-81 52.5t-53.5 80.5t-19.5 103.5q0 54 18 101t50 82t76.5 55.5t98.5 20.5q62 0 107.5 -22t75 -59.5t44 -86t14.5 -100.5 q0 -12 -0.5 -19.5t-1.5 -17.5zM4298 816q-44 0 -71 -28.5t-35 -76.5h210q-6 47 -32.5 76t-71.5 29zM4886 416q-73 0 -143.5 25.5t-129.5 77.5l84 101q44 -36 90.5 -57.5t101.5 -21.5q44 0 68.5 16.5t24.5 44.5q0 14 -5 25t-19.5 20.5t-39.5 18.5t-65 20q-49 12 -88.5 26.5 t-67.5 36.5t-43 54t-15 80q0 44 16.5 80t46.5 61.5t71.5 39.5t90.5 14q71 0 130.5 -21t109.5 -60l-74 -107q-43 30 -84.5 46.5t-82.5 16.5q-42 0 -62.5 -16t-20.5 -40q0 -17 6 -28.5t21.5 -21t42.5 -18t69 -19.5q49 -12 87 -28t64 -38.5t39.5 -53t13.5 -72.5 q0 -49 -17.5 -86.5t-49 -63t-75 -39t-95.5 -13.5zM5388 941v-137h307v-129h-307v-249h-141v643h490v-128h-349zM1016 836l462 -114q60 23 94 52.5t34 61.5v185q0 38 -46.5 71.5t-126.5 58.5t-187.5 39.5t-229.5 14.5t-229 -14.5t-187 -39.5t-126.5 -58.5t-46.5 -71.5v-185 q0 -38 46.5 -71.5t126.5 -58.5t187 -39.5t229 -14.5v184zM1478 538l-462 114v-184l462 -114q60 23 94 52.5t34 61.5v184q0 -32 -34 -61.5t-94 -52.5zM427 468q0 -38 46.5 -71.5t126.5 -58.5t187 -39.5t229 -14.5v184q-122 0 -229 14.5t-187 39.5t-126.5 58.5t-46.5 71.5 v-184zM1552 -128q-77 0 -148.5 7t-139 19t-132 26.5t-127.5 29.5q-64 15 -126.5 29.5t-127 26t-131.5 18t-139 6.5q-102 0 -205 -15t-213 -44l-63 -17v1586l37 10q118 32 229 47.5t221 15.5q75 0 144.5 -6.5t135.5 -17.5t129 -25t125 -28l18 -4q64 -15 126.5 -29.5 t127 -25.5t131.5 -17.5t140 -6.5q100 0 199.5 13.5t206.5 42.5l63 16v-1585l-38 -10q-116 -32 -225 -47t-218 -15zM481 135q77 0 148.5 -7t139 -19t132 -27t127.5 -30q64 -15 126.5 -29.5t126.5 -25.5t131 -17.5t140 -6.5q184 0 380 49v1378q-188 -43 -368 -43 q-77 0 -148.5 7t-139.5 18.5t-133 26t-128 29.5q-64 15 -127 29t-128 25t-132.5 17.5t-140.5 6.5q-187 0 -386 -49v-1378q194 46 380 46z" />
+<glyph unicode="v" horiz-adv-x="1697" d="M849 1588q117 0 225.5 -30.5t202.5 -85.5t171.5 -132.5t132.5 -171.5t85.5 -202.5t30.5 -225.5t-30.5 -225.5t-85.5 -203t-132.5 -172t-171.5 -132.5t-202.5 -85.5t-225.5 -30.5h-849v849q0 117 30.5 225.5t85.5 202.5t132.5 171.5t172 132.5t203 85.5t225.5 30.5z M923 162q108 0 203 41t165.5 112t111.5 165.5t41 202.5q0 112 -43 208.5t-118 168.5q-43 57 -96 98q-73 77 -171 120t-207 43q-56 0 -111 -12q-92 -20 -167.5 -67.5t-129.5 -115.5t-84 -151t-30 -173q0 -56 12 -111q11 -52 31.5 -98.5t48.5 -88.5l-64 -305l346 35 q58 -35 124 -53.5t138 -18.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#x2000;" horiz-adv-x="862" />
+<glyph unicode="&#x2001;" horiz-adv-x="1725" />
+<glyph unicode="&#x2002;" horiz-adv-x="862" />
+<glyph unicode="&#x2003;" horiz-adv-x="1725" />
+<glyph unicode="&#x2004;" horiz-adv-x="575" />
+<glyph unicode="&#x2005;" horiz-adv-x="431" />
+<glyph unicode="&#x2006;" horiz-adv-x="287" />
+<glyph unicode="&#x2007;" horiz-adv-x="287" />
+<glyph unicode="&#x2008;" horiz-adv-x="215" />
+<glyph unicode="&#x2009;" horiz-adv-x="345" />
+<glyph unicode="&#x200a;" horiz-adv-x="95" />
+<glyph unicode="&#x202f;" horiz-adv-x="345" />
+<glyph unicode="&#x205f;" horiz-adv-x="431" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0v0v0v0v0z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf
new file mode 100644 (file)
index 0000000..13d5445
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf differ
diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff
new file mode 100644 (file)
index 0000000..073baab
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff differ
diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2
new file mode 100644 (file)
index 0000000..6e71eaf
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 differ
diff --git a/production/example_apps/shared_calendar/webroot/img/cake-logo.png b/production/example_apps/shared_calendar/webroot/img/cake-logo.png
new file mode 100644 (file)
index 0000000..41939ef
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake-logo.png differ
diff --git a/production/example_apps/shared_calendar/webroot/img/cake.icon.png b/production/example_apps/shared_calendar/webroot/img/cake.icon.png
new file mode 100644 (file)
index 0000000..394fa42
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake.icon.png differ
diff --git a/production/example_apps/shared_calendar/webroot/img/cake.logo.svg b/production/example_apps/shared_calendar/webroot/img/cake.logo.svg
new file mode 100644 (file)
index 0000000..e73abb5
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+         width="225.994px" height="45.258px" viewBox="0 0 225.994 45.258" enable-background="new 0 0 225.994 45.258"
+         xml:space="preserve">
+    <g>
+        <g>
+            <path fill="#FFFFFF" d="M28.993,18.11l22.685,5.632c3.948-1.541,6.318-3.505,6.318-5.632V9.052C57.996,4.058,45.011,0,28.993,0
+                C12.979,0,0,4.058,0,9.052v9.058c0,4.995,12.979,9.05,28.993,9.05V18.11z"/>
+            <path fill="#FFFFFF" d="M51.676,32.796L28.993,27.16v9.051l22.683,5.638c3.95-1.549,6.322-3.504,6.322-5.638V27.16
+                C57.999,29.292,55.626,31.25,51.676,32.796"/>
+            <path fill="#FFFFFF" d="M0,27.16v9.052c0,4.996,12.979,9.047,28.993,9.047v-9.047C12.979,36.211,0,32.155,0,27.16"/>
+            <path fill="#FFFFFF" d="M82.884,35.384c-7.082,0-12.339-5.467-12.339-12.378V22.94c0-6.837,5.154-12.443,12.546-12.443
+                c4.536,0,7.253,1.515,9.487,3.713l-3.368,3.882c-1.857-1.685-3.749-2.715-6.156-2.715c-4.055,0-6.975,3.368-6.975,7.493v0.069
+                c0,4.124,2.849,7.562,6.975,7.562c2.751,0,4.435-1.1,6.324-2.82l3.367,3.402C90.273,33.734,87.525,35.384,82.884,35.384"/>
+            <path fill="#FFFFFF" d="M107.321,27.546c-0.894-0.416-2.064-0.688-3.334-0.688c-2.234,0-3.611,0.894-3.611,2.544v0.068
+                c0,1.406,1.171,2.231,2.852,2.231c2.441,0,4.093-1.335,4.093-3.229V27.546z M107.215,34.968v-1.99
+                c-1.269,1.408-3.021,2.337-5.568,2.337c-3.469,0-6.323-1.994-6.323-5.637v-0.069c0-4.023,3.056-5.879,7.422-5.879
+                c1.859,0,3.2,0.312,4.506,0.756v-0.311c0-2.162-1.342-3.368-3.955-3.368c-1.993,0-3.4,0.379-5.086,0.997l-1.309-3.986
+                c2.03-0.896,4.023-1.479,7.15-1.479c5.708,0,8.216,2.957,8.216,7.943v10.686H107.215z"/>
+        </g>
+        <polygon fill="#FFFFFF" points="128.629,34.968 123.816,27.443 121.994,29.368 121.994,34.968 116.772,34.968 116.772,9.876
+            121.994,9.876 121.994,23.25 128.115,16.547 134.37,16.547 127.358,23.797 134.609,34.968  "/>
+        <g>
+            <path fill="#FFFFFF" d="M144.469,20.396c-2.166,0-3.578,1.547-3.989,3.917h7.872C148.041,21.975,146.666,20.396,144.469,20.396
+                 M153.37,27.583h-12.819c0.514,2.371,2.164,3.605,4.504,3.605c1.752,0,3.022-0.552,4.465-1.89l2.994,2.647
+                c-1.723,2.132-4.195,3.438-7.529,3.438c-5.535,0-9.628-3.885-9.628-9.521v-0.07c0-5.261,3.75-9.591,9.112-9.591
+                c6.149,0,8.97,4.779,8.97,10.005v0.065C153.438,26.792,153.405,27.099,153.37,27.583"/>
+            <path fill="#FFFFFF" d="M171.551,19.329c0-2.371-1.647-3.641-4.296-3.641h-4.09v7.358h4.193c2.646,0,4.192-1.586,4.192-3.646
+                V19.329z M167.184,27.751h-4.019v7.217h-5.292v-24.06h9.83c5.738,0,9.209,3.403,9.209,8.321v0.065
+                C176.912,24.864,172.58,27.751,167.184,27.751"/>
+        </g>
+        <polygon fill="#FFFFFF" points="195.885,34.968 195.885,25.307 186.122,25.307 186.122,34.968 180.831,34.968 180.831,10.908
+            186.122,10.908 186.122,20.43 195.885,20.43 195.885,10.908 201.176,10.908 201.176,34.968     "/>
+        <g>
+            <path fill="#FFFFFF" d="M220.63,19.329c0-2.371-1.65-3.641-4.295-3.641h-4.091v7.358h4.191c2.649,0,4.194-1.586,4.194-3.646
+                V19.329z M216.268,27.751h-4.023v7.217h-5.292v-24.06h9.829c5.737,0,9.213,3.403,9.213,8.321v0.065
+                C225.994,24.864,221.662,27.751,216.268,27.751"/>
+        </g>
+    </g>
+</svg>
diff --git a/production/example_apps/shared_calendar/webroot/img/cake.power.gif b/production/example_apps/shared_calendar/webroot/img/cake.power.gif
new file mode 100644 (file)
index 0000000..8f8d570
Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake.power.gif differ
diff --git a/production/example_apps/shared_calendar/webroot/index.php b/production/example_apps/shared_calendar/webroot/index.php
new file mode 100644 (file)
index 0000000..6791f47
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * The Front Controller for handling every request
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.2.9
+ * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+// for built-in server
+if (php_sapi_name() === 'cli-server') {
+    $_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
+
+    $url = parse_url(urldecode($_SERVER['REQUEST_URI']));
+    $file = __DIR__ . $url['path'];
+    if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
+        return false;
+    }
+}
+require dirname(__DIR__) . '/vendor/autoload.php';
+
+use App\Application;
+use Cake\Http\Server;
+
+// Bind your application to the server.
+$server = new Server(new Application(dirname(__DIR__) . '/config'));
+
+// Run the request/response through the application
+// and emit the response.
+$server->emit($server->run());
diff --git a/production/example_apps/shared_calendar/webroot/js/empty b/production/example_apps/shared_calendar/webroot/js/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/.buildpath b/production/example_apps/zippy_maps/.buildpath
new file mode 100644 (file)
index 0000000..8bcb4b5
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+       <buildpathentry kind="src" path=""/>
+       <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
+</buildpath>
diff --git a/production/example_apps/zippy_maps/.editorconfig b/production/example_apps/zippy_maps/.editorconfig
new file mode 100644 (file)
index 0000000..7061901
--- /dev/null
@@ -0,0 +1,18 @@
+; This file is for unifying the coding style for different editors and IDEs.
+; More information at http://editorconfig.org
+
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.bat]
+end_of_line = crlf
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/production/example_apps/zippy_maps/.gitattributes b/production/example_apps/zippy_maps/.gitattributes
new file mode 100644 (file)
index 0000000..6dedcf5
--- /dev/null
@@ -0,0 +1,48 @@
+# Define the line ending behavior of the different file extensions
+# Set default behaviour, in case users don't have core.autocrlf set.
+* text=auto
+* text eol=lf
+
+# Explicitly declare text files we want to always be normalized and converted
+# to native line endings on checkout.
+*.php text
+*.default text
+*.ctp text
+*.sql text
+*.md text
+*.po text
+*.js text
+*.css text
+*.ini text
+*.properties text
+*.txt text
+*.xml text
+*.svg text
+*.yml text
+.htaccess text
+
+# Declare files that will always have CRLF line endings on checkout.
+*.bat eol=crlf
+
+# Declare files that will always have LF line endings on checkout.
+*.pem eol=lf
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
+*.gif binary
+*.ico binary
+*.mo binary
+*.pdf binary
+*.phar binary
+*.woff binary
+*.woff2 binary
+*.ttf binary
+*.otf binary
+*.eot binary
+*.gz binary
+
+# ahem, zip files binary too.  --fred
+*.zip binary
+
+
diff --git a/production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md b/production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md
new file mode 100644 (file)
index 0000000..92c77d6
--- /dev/null
@@ -0,0 +1,23 @@
+This is a (multiple allowed):
+
+* [x] bug
+* [ ] enhancement
+* [ ] feature-discussion (RFC)
+
+* CakePHP Application Skeleton Version: EXACT RELEASE VERSION OR COMMIT HASH, HERE.
+* Platform and Target: YOUR WEB-SERVER, DATABASE AND OTHER RELEVANT INFO AND HOW THE REQUEST IS BEING MADE, HERE.
+
+### What you did
+EXPLAIN WHAT YOU DID, PREFERABLY WITH CODE EXAMPLES, HERE.
+
+### What happened
+EXPLAIN WHAT IS ACTUALLY HAPPENING, HERE.
+
+### What you expected to happen
+EXPLAIN WHAT IS TO BE EXPECTED, HERE.
+
+P.S. Remember, an issue is not the place to ask questions. You can use [Stack Overflow](http://stackoverflow.com/questions/tagged/cakephp)
+for that or join the #cakephp channel on irc.freenode.net, where we will be more
+than happy to help answer your questions.
+
+Before you open an issue, please check if a similar issue already exists or has been closed before.
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md b/production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644 (file)
index 0000000..05ca9eb
--- /dev/null
@@ -0,0 +1,10 @@
+**PLEASE NOTE:**
+
+This is only a issue tracker for issues related to the CakePHP Application Skeleton.
+For CakePHP Framework issues please use this [issue tracker](https://github.com/cakephp/cakephp/issues).
+
+Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.
+
+The best way to propose a feature is to open an issue first and discuss your ideas there before implementing them.
+
+Always follow the [contribution guidelines](https://github.com/cakephp/cakephp/blob/master/.github/CONTRIBUTING.md) guidelines when submitting a pull request. In particular, make sure existing tests still pass, and add tests for all new behavior. When fixing a bug, you may want to add a test to verify the fix.
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/.gitignore b/production/example_apps/zippy_maps/.gitignore
new file mode 100644 (file)
index 0000000..8a18ddc
--- /dev/null
@@ -0,0 +1,10 @@
+/vendor/*
+/config/app.php
+/config/*secret*
+/config/config_google.php
+/tmp/*
+/logs/*
+/vendor/
+/webroot/avmaps
+/webroot/debug_kit
+
diff --git a/production/example_apps/zippy_maps/.htaccess b/production/example_apps/zippy_maps/.htaccess
new file mode 100644 (file)
index 0000000..bc1dd9c
--- /dev/null
@@ -0,0 +1,11 @@
+# Uncomment the following to prevent the httpoxy vulnerability
+# See: https://httpoxy.org/
+#<IfModule mod_headers.c>
+#    RequestHeader unset Proxy
+#</IfModule>
+
+<IfModule mod_rewrite.c>
+    RewriteEngine on
+    RewriteRule    ^$    webroot/    [L]
+    RewriteRule    (.*) webroot/$1    [L]
+</IfModule>
diff --git a/production/example_apps/zippy_maps/.project b/production/example_apps/zippy_maps/.project
new file mode 100644 (file)
index 0000000..7049fd5
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>zip_code_maps</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.wst.common.project.facet.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.wst.validation.validationbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.dltk.core.scriptbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.php.core.PHPNature</nature>
+               <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+       </natures>
+</projectDescription>
diff --git a/production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs b/production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs
new file mode 100644 (file)
index 0000000..7354a24
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+include_path=0;/zip_code_maps
diff --git a/production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml b/production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644 (file)
index 0000000..4743dbb
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="php.component"/>
+  <fixed facet="php.core.component"/>
+  <installed facet="php.core.component" version="1"/>
+  <installed facet="php.component" version="7.1"/>
+</faceted-project>
diff --git a/production/example_apps/zippy_maps/.travis.yml b/production/example_apps/zippy_maps/.travis.yml
new file mode 100644 (file)
index 0000000..befdb98
--- /dev/null
@@ -0,0 +1,30 @@
+language: php
+
+dist: trusty
+
+sudo: false
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+
+matrix:
+  fast_finish: true
+
+  include:
+    - php: 7.0
+      env: PHPCS=1
+
+before_script:
+  - if [[ $PHPCS = 1 ]]; then composer require cakephp/cakephp-codesniffer:~2.1; fi
+  - if [[ $PHPCS != 1 ]]; then composer install; fi
+  - if [[ $PHPCS != 1 ]]; then composer require phpunit/phpunit:"^5.7|^6.0"; fi
+  - if [[ $PHPCS != 1 ]]; then composer run-script post-install-cmd --no-interaction; fi
+
+script:
+  - if [[ $PHPCS != 1 ]]; then vendor/bin/phpunit; fi
+  - if [[ $PHPCS = 1 ]]; then vendor/bin/phpcs -p --extensions=php --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests ./config ./webroot; fi
+
+notifications:
+  email: false
diff --git a/production/example_apps/zippy_maps/bin/cake b/production/example_apps/zippy_maps/bin/cake
new file mode 100755 (executable)
index 0000000..6801c45
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env sh
+################################################################################
+#
+# Cake is a shell script for invoking CakePHP shell commands
+#
+# CakePHP(tm) :  Rapid Development Framework (http://cakephp.org)
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+#
+# @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+# @link          http://cakephp.org CakePHP(tm) Project
+# @since         1.2.0
+# @license       http://www.opensource.org/licenses/mit-license.php MIT License
+#
+################################################################################
+
+# Canonicalize by following every symlink of the given name recursively
+canonicalize() {
+       NAME="$1"
+       if [ -f "$NAME" ]
+       then
+               DIR=$(dirname -- "$NAME")
+               NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME")
+       fi
+       while [ -h "$NAME" ]; do
+               DIR=$(dirname -- "$NAME")
+               SYM=$(readlink "$NAME")
+               NAME=$(cd "$DIR" > /dev/null && cd $(dirname -- "$SYM") > /dev/null && pwd)/$(basename -- "$SYM")
+       done
+       echo "$NAME"
+}
+
+CONSOLE=$(dirname -- "$(canonicalize "$0")")
+APP=$(dirname "$CONSOLE")
+
+if [ $(basename $0) != 'cake' ]
+then
+    exec php "$CONSOLE"/cake.php $(basename $0) "$@"
+else
+    exec php "$CONSOLE"/cake.php "$@"
+fi
+
+exit
diff --git a/production/example_apps/zippy_maps/bin/cake.bat b/production/example_apps/zippy_maps/bin/cake.bat
new file mode 100644 (file)
index 0000000..d4512db
--- /dev/null
@@ -0,0 +1,27 @@
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::
+:: Cake is a Windows batch script for invoking CakePHP shell commands
+::
+:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+::
+:: Licensed under The MIT License
+:: Redistributions of files must retain the above copyright notice.
+::
+:: @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+:: @link          http://cakephp.org CakePHP(tm) Project
+:: @since         2.0.0
+:: @license       http://www.opensource.org/licenses/mit-license.php MIT License
+::
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+@echo off
+
+SET app=%0
+SET lib=%~dp0
+
+php "%lib%cake.php" %*
+
+echo.
+
+exit /B %ERRORLEVEL%
diff --git a/production/example_apps/zippy_maps/bin/cake.php b/production/example_apps/zippy_maps/bin/cake.php
new file mode 100644 (file)
index 0000000..5ee314c
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/php -q
+<?php
+/**
+ * Command-line code generation utility to automate programmer chores.
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         2.0.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+$minVersion = '5.6.0';
+if (file_exists('composer.json')) {
+    $composer = json_decode(file_get_contents('composer.json'));
+    if (isset($composer->require->php)) {
+        $minVersion = preg_replace('/([^0-9\.])/', '', $composer->require->php);
+    }
+}
+if (version_compare(phpversion(), $minVersion, '<')) {
+    fwrite(STDERR, sprintf("Minimum PHP version: %s. You are using: %s.\n", $minVersion, phpversion()));
+    exit(-1);
+}
+
+require dirname(__DIR__) . '/vendor/autoload.php';
+include dirname(__DIR__) . '/config/bootstrap.php';
+
+exit(Cake\Console\ShellDispatcher::run($argv));
diff --git a/production/example_apps/zippy_maps/composer.json b/production/example_apps/zippy_maps/composer.json
new file mode 100644 (file)
index 0000000..686227d
--- /dev/null
@@ -0,0 +1,52 @@
+{
+    "name": "cakephp/app",
+    "description": "CakePHP skeleton app",
+    "homepage": "http://cakephp.org",
+    "type": "project",
+    "license": "MIT",
+    "require": {
+        "php": ">=5.6",
+        "cakephp/cakephp": "3.5.*",
+        "mobiledetect/mobiledetectlib": "2.*",
+        "cakephp/migrations": "@stable",
+        "cakephp/plugin-installer": "*",
+        "dereuromark/cakephp-geo": "^1.1",
+       "siteavenger/avmaps" : "dev-master"
+    },
+    "require-dev": {
+        "psy/psysh": "@stable",
+        "cakephp/debug_kit": "~3.0",
+        "cakephp/bake": "~1.1"
+    },
+    "suggest": {
+        "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
+        "phpunit/phpunit": "Allows automated tests to be run without system-wide install.",
+        "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP."
+    },
+    "autoload": {
+        "psr-4": {
+            "App\\": "src",
+            "Avmaps\\": "./plugins/Avmaps/src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "App\\Test\\": "tests",
+            "Cake\\Test\\": "./vendor/cakephp/cakephp/tests",
+            "Avmaps\\Test\\": "./plugins/Avmaps/tests"
+        }
+    },
+    "scripts": {
+        "post-install-cmd": "App\\Console\\Installer::postInstall",
+        "post-create-project-cmd": "App\\Console\\Installer::postInstall",
+        "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump",
+        "check": [
+            "@test",
+            "@cs-check"
+        ],
+        "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests",
+        "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests",
+        "test": "phpunit --colors=always"
+    },
+    "prefer-stable": true
+}
diff --git a/production/example_apps/zippy_maps/composer.lock b/production/example_apps/zippy_maps/composer.lock
new file mode 100644 (file)
index 0000000..e9706f3
--- /dev/null
@@ -0,0 +1,2767 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "ad82b7437385dd5bc72c500c0a1a1793",
+    "packages": [
+        {
+            "name": "aura/intl",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/auraphp/Aura.Intl.git",
+                "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926",
+                "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Aura\\Intl\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Aura.Intl Contributors",
+                    "homepage": "https://github.com/auraphp/Aura.Intl/contributors"
+                }
+            ],
+            "description": "The Aura Intl package provides internationalization tools, specifically message translation.",
+            "homepage": "https://github.com/auraphp/Aura.Intl",
+            "keywords": [
+                "g11n",
+                "globalization",
+                "i18n",
+                "internationalization",
+                "intl",
+                "l10n",
+                "localization"
+            ],
+            "time": "2017-01-20T05:00:11+00:00"
+        },
+        {
+            "name": "cakephp/cakephp",
+            "version": "3.5.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/cakephp.git",
+                "reference": "7727f122bac708a6b5883472bb3b22aad1e68e3b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/cakephp/zipball/7727f122bac708a6b5883472bb3b22aad1e68e3b",
+                "reference": "7727f122bac708a6b5883472bb3b22aad1e68e3b",
+                "shasum": ""
+            },
+            "require": {
+                "aura/intl": "^3.0.0",
+                "cakephp/chronos": "^1.0.1",
+                "ext-intl": "*",
+                "ext-mbstring": "*",
+                "php": ">=5.6.0",
+                "psr/log": "^1.0.0",
+                "zendframework/zend-diactoros": "^1.4.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.7"
+            },
+            "replace": {
+                "cakephp/cache": "self.version",
+                "cakephp/collection": "self.version",
+                "cakephp/core": "self.version",
+                "cakephp/database": "self.version",
+                "cakephp/datasource": "self.version",
+                "cakephp/event": "self.version",
+                "cakephp/filesystem": "self.version",
+                "cakephp/form": "self.version",
+                "cakephp/i18n": "self.version",
+                "cakephp/log": "self.version",
+                "cakephp/orm": "self.version",
+                "cakephp/utility": "self.version",
+                "cakephp/validation": "self.version"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "^5.7.14|^6.0"
+            },
+            "suggest": {
+                "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
+                "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\": "src/"
+                },
+                "files": [
+                    "src/Core/functions.php",
+                    "src/Collection/functions.php",
+                    "src/I18n/functions.php",
+                    "src/Utility/bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+                }
+            ],
+            "description": "The CakePHP framework",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "conventions over configuration",
+                "dry",
+                "form",
+                "framework",
+                "mvc",
+                "orm",
+                "psr-7",
+                "rapid-development",
+                "validation"
+            ],
+            "time": "2018-05-21T01:31:33+00:00"
+        },
+        {
+            "name": "cakephp/chronos",
+            "version": "1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/chronos.git",
+                "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/chronos/zipball/30f5b26bcf76a5e53ecc274700ad1ec49dc05567",
+                "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|^7"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1",
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpbench/phpbench": "@dev",
+                "phpstan/phpstan": "^0.6.4",
+                "phpunit/phpunit": "<6.0 || ^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Chronos\\": "src/"
+                },
+                "files": [
+                    "src/carbon_compat.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Nesbitt",
+                    "email": "brian@nesbot.com",
+                    "homepage": "http://nesbot.com"
+                },
+                {
+                    "name": "The CakePHP Team",
+                    "homepage": "http://cakephp.org"
+                }
+            ],
+            "description": "A simple API extension for DateTime.",
+            "homepage": "http://cakephp.org",
+            "keywords": [
+                "date",
+                "datetime",
+                "time"
+            ],
+            "time": "2018-07-11T18:51:56+00:00"
+        },
+        {
+            "name": "cakephp/migrations",
+            "version": "1.7.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/migrations.git",
+                "reference": "a5612adfd2efa8c90d29cb3b0c969de872a99eda"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/migrations/zipball/a5612adfd2efa8c90d29cb3b0c969de872a99eda",
+                "reference": "a5612adfd2efa8c90d29cb3b0c969de872a99eda",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cache": "~3.2",
+                "cakephp/orm": "~3.2",
+                "php": ">=5.5.9",
+                "robmorgan/phinx": "0.8.1"
+            },
+            "require-dev": {
+                "cakephp/bake": "@stable",
+                "cakephp/cakephp": "~3.2",
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "~4.1"
+            },
+            "suggest": {
+                "cakephp/bake": "Required if you want to generate migrations."
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Migrations\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/migrations/graphs/contributors"
+                }
+            ],
+            "description": "Database Migration plugin for CakePHP 3.0 based on Phinx",
+            "homepage": "https://github.com/cakephp/migrations",
+            "keywords": [
+                "cakephp",
+                "migrations"
+            ],
+            "time": "2017-12-12T21:01:38+00:00"
+        },
+        {
+            "name": "cakephp/plugin-installer",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/plugin-installer.git",
+                "reference": "41373d0678490502f45adc7be88aa22d24ac1843"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/41373d0678490502f45adc7be88aa22d24ac1843",
+                "reference": "41373d0678490502f45adc7be88aa22d24ac1843",
+                "shasum": ""
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "dev-master",
+                "composer/composer": "1.0.*@dev",
+                "phpunit/phpunit": "^4.8|^5.7|^6.0"
+            },
+            "type": "composer-installer",
+            "extra": {
+                "class": "Cake\\Composer\\Installer\\PluginInstaller"
+            },
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Composer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "http://cakephp.org"
+                }
+            ],
+            "description": "A composer installer for CakePHP 3.0+ plugins.",
+            "time": "2017-12-24T21:09:29+00:00"
+        },
+        {
+            "name": "dereuromark/cakephp-geo",
+            "version": "1.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dereuromark/cakephp-geo.git",
+                "reference": "c72464a9a7ea7c634f9345bb67f48589252336b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dereuromark/cakephp-geo/zipball/c72464a9a7ea7c634f9345bb67f48589252336b3",
+                "reference": "c72464a9a7ea7c634f9345bb67f48589252336b3",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/orm": "^3.5",
+                "php": ">=5.6",
+                "willdurand/geocoder": "^3.3"
+            },
+            "require-dev": {
+                "cakephp/cakephp": "^3.5",
+                "fig-r/psr2r-sniffer": "dev-master"
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Geo\\": "src",
+                    "Geo\\Test\\Fixture\\": "tests/Fixture"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Scherer",
+                    "homepage": "http://www.dereuromark.de",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "A CakePHP plugin around geocoding tools and helpers.",
+            "homepage": "https://github.com/dereuromark/cakephp-geo",
+            "keywords": [
+                "cakephp",
+                "geocoding",
+                "helpers",
+                "maps",
+                "plugin"
+            ],
+            "time": "2018-10-10T14:34:17+00:00"
+        },
+        {
+            "name": "egeloen/http-adapter",
+            "version": "0.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/egeloen/ivory-http-adapter.git",
+                "reference": "9641f11487ec26b24c6bbcee4f267cf62f60b855"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/egeloen/ivory-http-adapter/zipball/9641f11487ec26b24c6bbcee4f267cf62f60b855",
+                "reference": "9641f11487ec26b24c6bbcee4f267cf62f60b855",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.8",
+                "zendframework/zend-diactoros": "^1.1"
+            },
+            "require-dev": {
+                "cakephp/cakephp": "^3.0.3",
+                "ext-curl": "*",
+                "guzzle/guzzle": "^3.9.4@dev",
+                "guzzlehttp/guzzle": "^4.1.4|^5.0|^6.0",
+                "kriswallsmith/buzz": "^0.13",
+                "nategood/httpful": "^0.2.17",
+                "phpunit/phpunit": "^4.0",
+                "phpunit/phpunit-mock-objects": "dev-matcher-verify as 2.3.x-dev",
+                "psr/log": "^1.0",
+                "react/dns": "^0.4.1",
+                "react/http-client": "^0.4",
+                "satooshi/php-coveralls": "^0.6",
+                "symfony/event-dispatcher": "^2.0",
+                "zendframework/zend-http": "^2.3.4",
+                "zendframework/zendframework1": ">=1.12.9,<=1.12.14|^1.12.16"
+            },
+            "suggest": {
+                "ext-curl": "Allows you to use the cURL adapter",
+                "ext-http": "Allows you to use the PECL adapter",
+                "guzzle/guzzle": "Allows you to use the Guzzle 3 adapter",
+                "guzzlehttp/guzzle": "Allows you to use the Guzzle 4 adapter",
+                "kriswallsmith/buzz": "Allows you to use the Buzz adapter",
+                "nategood/httpful": "Allows you to use the httpful adapter",
+                "psr/log": "Allows you to use the logger event subscriber",
+                "symfony/event-dispatcher": "Allows you to use the event lifecycle",
+                "symfony/stopwatch": "Allows you to use the stopwatch http adapter and event subscriber",
+                "zendframework/zend-http": "Allows you to use the Zend 2 adapter",
+                "zendframework/zendframework1": "Allows you to use the Zend 1 adapter"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Ivory\\HttpAdapter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Eric GELOEN",
+                    "email": "geloen.eric@gmail.com"
+                }
+            ],
+            "description": "Issue HTTP request for PHP 5.3+.",
+            "keywords": [
+                "http",
+                "http-adapter",
+                "http-client",
+                "psr-7"
+            ],
+            "abandoned": "php-http/httplug",
+            "time": "2015-08-12T09:35:40+00:00"
+        },
+        {
+            "name": "igorw/get-in",
+            "version": "v1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/igorw/get-in.git",
+                "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/igorw/get-in/zipball/170ded831f49abc6a6061f655aba9bdbcf7b8111",
+                "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/get_in.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                }
+            ],
+            "description": "Functions for for hash map (assoc array) traversal.",
+            "keywords": [
+                "assoc-array",
+                "hash-map"
+            ],
+            "time": "2014-12-15T23:03:51+00:00"
+        },
+        {
+            "name": "mobiledetect/mobiledetectlib",
+            "version": "2.8.33",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/serbanghita/Mobile-Detect.git",
+                "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/cd385290f9a0d609d2eddd165a1e44ec1bf12102",
+                "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.0.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.35||~5.7"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "Mobile_Detect.php"
+                ],
+                "psr-0": {
+                    "Detection": "namespaced/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Serban Ghita",
+                    "email": "serbanghita@gmail.com",
+                    "homepage": "http://mobiledetect.net",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+            "homepage": "https://github.com/serbanghita/Mobile-Detect",
+            "keywords": [
+                "detect mobile devices",
+                "mobile",
+                "mobile detect",
+                "mobile detector",
+                "php mobile detect"
+            ],
+            "time": "2018-09-01T15:05:15+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2016-10-10T12:19:37+00:00"
+        },
+        {
+            "name": "robmorgan/phinx",
+            "version": "v0.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/phinx.git",
+                "reference": "7a19de5bebc59321edd9613bc2a667e7f96224ec"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/phinx/zipball/7a19de5bebc59321edd9613bc2a667e7f96224ec",
+                "reference": "7a19de5bebc59321edd9613bc2a667e7f96224ec",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4",
+                "symfony/config": "~2.8|~3.0",
+                "symfony/console": "~2.8|~3.0",
+                "symfony/yaml": "~2.8|~3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.26|^5.0"
+            },
+            "bin": [
+                "bin/phinx"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Phinx\\": "src/Phinx"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Woody Gilk",
+                    "email": "woody.gilk@gmail.com",
+                    "homepage": "http://shadowhand.me",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Rob Morgan",
+                    "email": "robbym@gmail.com",
+                    "homepage": "https://robmorgan.id.au",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Richard Quadling",
+                    "email": "rquadling@gmail.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+            "homepage": "https://phinx.org",
+            "keywords": [
+                "database",
+                "database migrations",
+                "db",
+                "migrations",
+                "phinx"
+            ],
+            "time": "2017-06-05T13:30:19+00:00"
+        },
+        {
+            "name": "siteavenger/avmaps",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "git@github.com:kwentworth/avmaps.git",
+                "reference": "64d96e015e0e5295f569571e8beb921978f07fa4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/kwentworth/avmaps/zipball/64d96e015e0e5295f569571e8beb921978f07fa4",
+                "reference": "64d96e015e0e5295f569571e8beb921978f07fa4",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": "^3.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7|^6.0"
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Avmaps\\": "src"
+                }
+            },
+            "autoload-dev": {
+                "psr-4": {
+                    "Avmaps\\Test\\": "tests",
+                    "Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
+                }
+            },
+            "description": "Avmaps plugin for CakePHP",
+            "support": {
+                "source": "https://github.com/kwentworth/avmaps/tree/feature-fred-sg001",
+                "issues": "https://github.com/kwentworth/avmaps/issues"
+            },
+            "time": "2018-05-11T17:51:34+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v3.4.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "e5389132dc6320682de3643091121c048ff796b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/e5389132dc6320682de3643091121c048ff796b3",
+                "reference": "e5389132dc6320682de3643091121c048ff796b3",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3",
+                "symfony/finder": "<3.3"
+            },
+            "require-dev": {
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/event-dispatcher": "~3.3|~4.0",
+                "symfony/finder": "~3.3|~4.0",
+                "symfony/yaml": "~3.0|~4.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-09-08T13:15:14+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v3.4.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b",
+                "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/debug": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/process": "<3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~3.3|~4.0",
+                "symfony/dependency-injection": "~3.4|~4.0",
+                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+                "symfony/lock": "~3.4|~4.0",
+                "symfony/process": "~3.3|~4.0"
+            },
+            "suggest": {
+                "psr/log-implementation": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-02T16:33:53+00:00"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v4.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/debug.git",
+                "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/e3f76ce6198f81994e019bb2b4e533e9de1b9b90",
+                "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3",
+                "psr/log": "~1.0"
+            },
+            "conflict": {
+                "symfony/http-kernel": "<3.4"
+            },
+            "require-dev": {
+                "symfony/http-kernel": "~3.4|~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Debug\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Debug Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-02T16:36:10+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v4.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "596d12b40624055c300c8b619755b748ca5cf0b5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/596d12b40624055c300c8b619755b748ca5cf0b5",
+                "reference": "596d12b40624055c300c8b619755b748ca5cf0b5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-02T12:40:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
+                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                },
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "time": "2018-08-06T14:22:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
+                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2018-08-06T14:22:27+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v3.4.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "~3.4|~4.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-02T16:33:53+00:00"
+        },
+        {
+            "name": "willdurand/geocoder",
+            "version": "v3.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/geocoder-php/php-common.git",
+                "reference": "ccc178e2984c0af24881faa0ffe515f20e5e8c23"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/geocoder-php/php-common/zipball/ccc178e2984c0af24881faa0ffe515f20e5e8c23",
+                "reference": "ccc178e2984c0af24881faa0ffe515f20e5e8c23",
+                "shasum": ""
+            },
+            "require": {
+                "egeloen/http-adapter": "~0.8",
+                "igorw/get-in": "~1.0",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "geoip2/geoip2": "~2.0",
+                "symfony/stopwatch": "~2.5"
+            },
+            "suggest": {
+                "ext-geoip": "Enabling the geoip extension allows you to use the MaxMindProvider.",
+                "geoip/geoip": "If you are going to use the MaxMindBinaryProvider (conflict with geoip extension).",
+                "geoip2/geoip2": "If you are going to use the GeoIP2DatabaseProvider.",
+                "symfony/stopwatch": "If you want to use the TimedGeocoder"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Geocoder": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "William Durand",
+                    "email": "william.durand1@gmail.com"
+                }
+            ],
+            "description": "The almost missing Geocoder PHP 5.4 library.",
+            "homepage": "http://geocoder-php.org",
+            "keywords": [
+                "abstraction",
+                "geocoder",
+                "geocoding",
+                "geoip"
+            ],
+            "time": "2015-12-06T20:17:20+00:00"
+        },
+        {
+            "name": "zendframework/zend-diactoros",
+            "version": "1.8.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/zend-diactoros.git",
+                "reference": "20da13beba0dde8fb648be3cc19765732790f46e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e",
+                "reference": "20da13beba0dde8fb648be3cc19765732790f46e",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0",
+                "psr/http-message": "^1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "php-http/psr7-integration-tests": "dev-master",
+                "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7",
+                "zendframework/zend-coding-standard": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.8.x-dev",
+                    "dev-develop": "1.9.x-dev",
+                    "dev-release-2.0": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions/create_uploaded_file.php",
+                    "src/functions/marshal_headers_from_sapi.php",
+                    "src/functions/marshal_method_from_sapi.php",
+                    "src/functions/marshal_protocol_version_from_sapi.php",
+                    "src/functions/marshal_uri_from_sapi.php",
+                    "src/functions/normalize_server.php",
+                    "src/functions/normalize_uploaded_files.php",
+                    "src/functions/parse_cookie_header.php"
+                ],
+                "psr-4": {
+                    "Zend\\Diactoros\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "description": "PSR HTTP Message implementations",
+            "homepage": "https://github.com/zendframework/zend-diactoros",
+            "keywords": [
+                "http",
+                "psr",
+                "psr-7"
+            ],
+            "time": "2018-09-05T19:29:37+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "ajgl/breakpoint-twig-extension",
+            "version": "0.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git",
+                "reference": "360ec6351ad7e1968ee78abb31430046c2e04fc5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/360ec6351ad7e1968ee78abb31430046c2e04fc5",
+                "reference": "360ec6351ad7e1968ee78abb31430046c2e04fc5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "twig/twig": "^1.14|^2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5",
+                "symfony/framework-bundle": "^2.7|^3.2",
+                "symfony/twig-bundle": "^2.7|^3.2"
+            },
+            "suggest": {
+                "ext-xdebug": "The Xdebug extension is required for the breakpoint to work",
+                "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony",
+                "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Ajgl\\Twig\\Extension\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Antonio J. García Lagar",
+                    "email": "aj@garcialagar.es",
+                    "homepage": "http://aj.garcialagar.es",
+                    "role": "developer"
+                }
+            ],
+            "description": "Twig extension to set breakpoints",
+            "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension",
+            "keywords": [
+                "Xdebug",
+                "breakpoint",
+                "twig"
+            ],
+            "time": "2017-11-20T13:04:11+00:00"
+        },
+        {
+            "name": "aptoma/twig-markdown",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/aptoma/twig-markdown.git",
+                "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/aptoma/twig-markdown/zipball/64a9c5c7418c08faf91c4410b34bdb65fb25c23d",
+                "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d",
+                "shasum": ""
+            },
+            "require": {
+                "twig/twig": "~1.12"
+            },
+            "require-dev": {
+                "codeclimate/php-test-reporter": "dev-master",
+                "erusev/parsedown": "^1.6",
+                "knplabs/github-api": "~1.2",
+                "league/commonmark": "~0.5",
+                "michelf/php-markdown": "~1",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "~0.6"
+            },
+            "suggest": {
+                "knplabs/github-api": "Needed for using GitHub's Markdown engine provided through their API.",
+                "michelf/php-markdown": "Original Markdown engine with MarkdownExtra."
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Aptoma": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Joris Berthelot",
+                    "email": "joris@berthelot.tel"
+                },
+                {
+                    "name": "Gunnar Lium",
+                    "email": "gunnar@aptoma.com"
+                }
+            ],
+            "description": "Twig extension to work with Markdown content",
+            "keywords": [
+                "markdown",
+                "twig"
+            ],
+            "time": "2015-10-23T20:27:08+00:00"
+        },
+        {
+            "name": "asm89/twig-cache-extension",
+            "version": "1.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/asm89/twig-cache-extension.git",
+                "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/630ea7abdc3fc62ba6786c02590a1560e449cf55",
+                "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2",
+                "twig/twig": "^1.0|^2.0"
+            },
+            "require-dev": {
+                "doctrine/cache": "~1.0"
+            },
+            "suggest": {
+                "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Alexander",
+                    "email": "iam.asm89@gmail.com"
+                }
+            ],
+            "description": "Cache fragments of templates directly within Twig.",
+            "homepage": "https://github.com/asm89/twig-cache-extension",
+            "keywords": [
+                "cache",
+                "extension",
+                "twig"
+            ],
+            "time": "2017-01-10T22:04:15+00:00"
+        },
+        {
+            "name": "cakephp/bake",
+            "version": "1.6.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/bake.git",
+                "reference": "0ca2165ac770f8e3c7b278f3f022df14d7b0913a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/bake/zipball/0ca2165ac770f8e3c7b278f3f022df14d7b0913a",
+                "reference": "0ca2165ac770f8e3c7b278f3f022df14d7b0913a",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": "^3.5.10",
+                "cakephp/plugin-installer": "^1.0",
+                "php": ">=5.6.0",
+                "wyrihaximus/twig-view": "^4.2.1"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "^5.7 | ^6.0"
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "Bake\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/bake/graphs/contributors"
+                }
+            ],
+            "description": "Bake plugin for CakePHP 3",
+            "homepage": "https://github.com/cakephp/bake",
+            "keywords": [
+                "bake",
+                "cakephp"
+            ],
+            "time": "2018-03-10T01:47:21+00:00"
+        },
+        {
+            "name": "cakephp/debug_kit",
+            "version": "3.14.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/debug_kit.git",
+                "reference": "b5e11f386b9ff28694950f68ef3e0456c242051b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/b5e11f386b9ff28694950f68ef3e0456c242051b",
+                "reference": "b5e11f386b9ff28694950f68ef3e0456c242051b",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/cakephp": "^3.4.0",
+                "cakephp/chronos": "^1.0.0",
+                "cakephp/plugin-installer": "^1.0.0",
+                "composer/composer": "^1.3.0",
+                "jdorn/sql-formatter": "^1.2.0",
+                "php": ">=5.6.0"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^3.0",
+                "phpunit/phpunit": "^5.7|^6.0"
+            },
+            "suggest": {
+                "ext-sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use."
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "DebugKit\\": "src",
+                    "DebugKit\\Test\\Fixture\\": "tests\\Fixture"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Story",
+                    "homepage": "http://mark-story.com",
+                    "role": "Author"
+                },
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors"
+                }
+            ],
+            "description": "CakePHP Debug Kit",
+            "homepage": "https://github.com/cakephp/debug_kit",
+            "keywords": [
+                "cakephp",
+                "debug",
+                "kit"
+            ],
+            "time": "2018-03-08T18:21:10+00:00"
+        },
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/46afded9720f40b9dc63542af4e3e43a1177acb0",
+                "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "time": "2018-08-08T08:57:40+00:00"
+        },
+        {
+            "name": "composer/composer",
+            "version": "1.7.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/composer.git",
+                "reference": "576aab9b5abb2ed11a1c52353a759363216a4ad2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/composer/zipball/576aab9b5abb2ed11a1c52353a759363216a4ad2",
+                "reference": "576aab9b5abb2ed11a1c52353a759363216a4ad2",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0",
+                "composer/semver": "^1.0",
+                "composer/spdx-licenses": "^1.2",
+                "composer/xdebug-handler": "^1.1",
+                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
+                "php": "^5.3.2 || ^7.0",
+                "psr/log": "^1.0",
+                "seld/jsonlint": "^1.4",
+                "seld/phar-utils": "^1.0",
+                "symfony/console": "^2.7 || ^3.0 || ^4.0",
+                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
+                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
+                "symfony/process": "^2.7 || ^3.0 || ^4.0"
+            },
+            "conflict": {
+                "symfony/console": "2.8.38"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7",
+                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
+            },
+            "suggest": {
+                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+                "ext-zip": "Enabling the zip extension allows you to unzip archives",
+                "ext-zlib": "Allow gzip compression of HTTP requests"
+            },
+            "bin": [
+                "bin/composer"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.7-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\": "src/Composer"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+            "homepage": "https://getcomposer.org/",
+            "keywords": [
+                "autoload",
+                "dependency",
+                "package"
+            ],
+            "time": "2018-08-16T14:57:12+00:00"
+        },
+        {
+            "name": "composer/semver",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/semver.git",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Semver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
+            "time": "2016-08-30T16:08:34+00:00"
+        },
+        {
+            "name": "composer/spdx-licenses",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/spdx-licenses.git",
+                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Spdx\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "SPDX licenses list and validation library.",
+            "keywords": [
+                "license",
+                "spdx",
+                "validator"
+            ],
+            "time": "2018-04-30T10:33:04+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/b8e9745fb9b06ea6664d8872c4505fb16df4611c",
+                "reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0",
+                "psr/log": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "time": "2018-08-31T19:07:57+00:00"
+        },
+        {
+            "name": "dnoegel/php-xdg-base-dir",
+            "version": "0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "@stable"
+            },
+            "type": "project",
+            "autoload": {
+                "psr-4": {
+                    "XdgBaseDir\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "implementation of xdg base directory specification for php",
+            "time": "2014-10-24T07:27:01+00:00"
+        },
+        {
+            "name": "jakub-onderka/php-console-color",
+            "version": "v0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
+                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
+                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "jakub-onderka/php-code-style": "1.0",
+                "jakub-onderka/php-parallel-lint": "1.0",
+                "jakub-onderka/php-var-dump-check": "0.*",
+                "phpunit/phpunit": "~4.3",
+                "squizlabs/php_codesniffer": "1.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "JakubOnderka\\PhpConsoleColor\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jakub Onderka",
+                    "email": "jakub.onderka@gmail.com"
+                }
+            ],
+            "time": "2018-09-29T17:23:10+00:00"
+        },
+        {
+            "name": "jakub-onderka/php-console-highlighter",
+            "version": "v0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
+                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
+                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "jakub-onderka/php-console-color": "~0.2",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "jakub-onderka/php-code-style": "~1.0",
+                "jakub-onderka/php-parallel-lint": "~1.0",
+                "jakub-onderka/php-var-dump-check": "~0.1",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~1.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jakub Onderka",
+                    "email": "acci@acci.cz",
+                    "homepage": "http://www.acci.cz/"
+                }
+            ],
+            "description": "Highlight PHP code in terminal",
+            "time": "2018-09-29T18:48:56+00:00"
+        },
+        {
+            "name": "jasny/twig-extensions",
+            "version": "v1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/jasny/twig-extensions.git",
+                "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/30bdf3a3903c021544f36332c9d5d4d563527da4",
+                "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.0 | >=5.6.0",
+                "twig/twig": "^2.0 | ^1.12"
+            },
+            "require-dev": {
+                "ext-intl": "*",
+                "ext-pcre": "*",
+                "jasny/php-code-quality": "^2.1",
+                "phpunit/phpunit": "^5.0"
+            },
+            "suggest": {
+                "ext-intl": "Required for the use of the LocalDate Twig extension",
+                "ext-pcre": "Required for the use of the PCRE Twig extension"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Jasny\\Twig\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Arnold Daniels",
+                    "email": "arnold@jasny.net",
+                    "homepage": "http://www.jasny.net"
+                }
+            ],
+            "description": "A set of useful Twig filters",
+            "homepage": "http://github.com/jasny/twig-extensions#README",
+            "keywords": [
+                "PCRE",
+                "array",
+                "date",
+                "datetime",
+                "preg",
+                "regex",
+                "templating",
+                "text",
+                "time"
+            ],
+            "time": "2017-09-13T07:38:01+00:00"
+        },
+        {
+            "name": "jdorn/sql-formatter",
+            "version": "v1.2.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/jdorn/sql-formatter.git",
+                "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
+                "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "lib"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jeremy Dorn",
+                    "email": "jeremy@jeremydorn.com",
+                    "homepage": "http://jeremydorn.com/"
+                }
+            ],
+            "description": "a PHP SQL highlighting library",
+            "homepage": "https://github.com/jdorn/sql-formatter/",
+            "keywords": [
+                "highlight",
+                "sql"
+            ],
+            "time": "2014-01-12T16:20:24+00:00"
+        },
+        {
+            "name": "justinrainbow/json-schema",
+            "version": "5.2.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/justinrainbow/json-schema.git",
+                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
+                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.1",
+                "json-schema/json-schema-test-suite": "1.2.0",
+                "phpunit/phpunit": "^4.8.35"
+            },
+            "bin": [
+                "bin/validate-json"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "JsonSchema\\": "src/JsonSchema/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bruno Prieto Reis",
+                    "email": "bruno.p.reis@gmail.com"
+                },
+                {
+                    "name": "Justin Rainbow",
+                    "email": "justin.rainbow@gmail.com"
+                },
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                },
+                {
+                    "name": "Robert Schönthal",
+                    "email": "seroscho@googlemail.com"
+                }
+            ],
+            "description": "A library to validate a json schema.",
+            "homepage": "https://github.com/justinrainbow/json-schema",
+            "keywords": [
+                "json",
+                "schema"
+            ],
+            "time": "2018-02-14T22:26:30+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v4.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0",
+                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.5 || ^7.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2018-10-10T09:24:14+00:00"
+        },
+        {
+            "name": "psy/psysh",
+            "version": "v0.9.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+                "shasum": ""
+            },
+            "require": {
+                "dnoegel/php-xdg-base-dir": "0.1",
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
+                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
+                "php": ">=5.4.0",
+                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
+                "symfony/var-dumper": "~2.7|~3.0|~4.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2",
+                "hoa/console": "~2.15|~3.16",
+                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+            },
+            "suggest": {
+                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+            },
+            "bin": [
+                "bin/psysh"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-develop": "0.9.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Psy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
+                }
+            ],
+            "description": "An interactive shell for modern PHP.",
+            "homepage": "http://psysh.org",
+            "keywords": [
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
+            ],
+            "time": "2018-10-13T15:16:03+00:00"
+        },
+        {
+            "name": "seld/jsonlint",
+            "version": "1.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/jsonlint.git",
+                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
+                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "bin": [
+                "bin/jsonlint"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "JSON Linter",
+            "keywords": [
+                "json",
+                "linter",
+                "parser",
+                "validator"
+            ],
+            "time": "2018-01-24T12:46:19+00:00"
+        },
+        {
+            "name": "seld/phar-utils",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/phar-utils.git",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Seld\\PharUtils\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be"
+                }
+            ],
+            "description": "PHAR file format utilities, for when PHP phars you up",
+            "keywords": [
+                "phra"
+            ],
+            "time": "2015-10-13T18:44:15+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v4.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06",
+                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-03T08:47:56+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/95c50420b0baed23852452a7f0c7b527303ed5ae",
+                "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2018-08-06T14:22:27+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v4.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/ee33c0322a8fee0855afcc11fff81e6b1011b529",
+                "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-10-02T12:40:59+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v4.1.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "60319b45653580b0cdacca499344577d87732f16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16",
+                "reference": "60319b45653580b0cdacca499344577d87732f16",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php72": "~1.5"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "symfony/process": "~3.4|~4.0",
+                "twig/twig": "~1.34|~2.4"
+            },
+            "suggest": {
+                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+                "ext-intl": "To show region name in time zone dump",
+                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+            },
+            "bin": [
+                "Resources/bin/var-dump-server"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\VarDumper\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony mechanism for exploring and dumping PHP variables",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "time": "2018-10-02T16:36:10+00:00"
+        },
+        {
+            "name": "twig/twig",
+            "version": "v1.35.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/twigphp/Twig.git",
+                "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e081e98378a1e78c29cc9eba4aefa5d78a05d2a",
+                "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "require-dev": {
+                "psr/container": "^1.0",
+                "symfony/debug": "^2.7",
+                "symfony/phpunit-bridge": "^3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.35-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Twig_": "lib/"
+                },
+                "psr-4": {
+                    "Twig\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                },
+                {
+                    "name": "Twig Team",
+                    "homepage": "https://twig.symfony.com/contributors",
+                    "role": "Contributors"
+                }
+            ],
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "https://twig.symfony.com",
+            "keywords": [
+                "templating"
+            ],
+            "time": "2018-07-13T07:12:17+00:00"
+        },
+        {
+            "name": "umpirsky/twig-php-function",
+            "version": "v0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/umpirsky/twig-php-function.git",
+                "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/umpirsky/twig-php-function/zipball/53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc",
+                "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "twig/twig": "~1.12"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "~2.0",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Umpirsky\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Saša Stamenković",
+                    "email": "umpirsky@gmail.com"
+                }
+            ],
+            "description": "Call (almost) any PHP function from your Twig templates.",
+            "time": "2016-03-12T16:36:32+00:00"
+        },
+        {
+            "name": "wyrihaximus/twig-view",
+            "version": "4.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/WyriHaximus/TwigView.git",
+                "reference": "ec2771e6a1fe799f9b16eff19da424cd04d593b7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/WyriHaximus/TwigView/zipball/ec2771e6a1fe799f9b16eff19da424cd04d593b7",
+                "reference": "ec2771e6a1fe799f9b16eff19da424cd04d593b7",
+                "shasum": ""
+            },
+            "require": {
+                "ajgl/breakpoint-twig-extension": "^0.3.0",
+                "aptoma/twig-markdown": "^2.0",
+                "asm89/twig-cache-extension": "^1.0",
+                "cakephp/cakephp": "^3.5",
+                "jasny/twig-extensions": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "twig/twig": "^1.27",
+                "umpirsky/twig-php-function": "0.1"
+            },
+            "require-dev": {
+                "cakephp/bake": "^1.5",
+                "cakephp/debug_kit": "^3.0",
+                "phake/phake": "^1.0.4",
+                "phpunit/phpunit": "^5.7.14",
+                "squizlabs/php_codesniffer": "^1.5.6",
+                "wyrihaximus/phpunit-class-reflection-helpers": "dev-master"
+            },
+            "type": "cakephp-plugin",
+            "autoload": {
+                "psr-4": {
+                    "WyriHaximus\\TwigView\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "ceesjank@gmail.com",
+                    "homepage": "http://wyrihaximus.net/"
+                }
+            ],
+            "description": "Twig powered View for CakePHP3",
+            "keywords": [
+                "cakephp",
+                "cakephp3",
+                "twig",
+                "view"
+            ],
+            "time": "2018-07-03T15:46:29+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": {
+        "cakephp/migrations": 0,
+        "siteavenger/avmaps": 20,
+        "psy/psysh": 0
+    },
+    "prefer-stable": true,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.6"
+    },
+    "platform-dev": []
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php b/production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php
new file mode 100644 (file)
index 0000000..29b4833
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class CreateLocationsTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change()
+    {
+       $this->table('locations', ['id' => false, 'primary_key' => ['id']])
+            ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+            ->addColumn('name', 'string', ['length' => 255, 'null' => false])
+            ->addColumn('location', 'string', ['length' => 1024, 'null' => false])
+            ->addColumn('latlong', 'string', ['length' => 255, 'null' => true])
+            ->addColumn('created', 'datetime')
+            ->addColumn('modified', 'datetime')
+            ->addIndex('name', ['unique' => true])
+            ->addIndex('location')
+            ->create();
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php
new file mode 100644 (file)
index 0000000..95610e8
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class CreateCategoriesTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change()
+    {
+       $this->table('categories', ['id' => false, 'primary_key' => ['id']])
+            ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+            ->addColumn('name', 'string', ['length' => 255, 'null' => false])
+            ->addColumn('parent', 'integer', ['signed' => false, 'null' => true])
+            ->addColumn('created', 'datetime')
+            ->addColumn('modified', 'datetime')
+            ->addIndex('name', ['unique' => true])
+            ->create();
+    }
+}
+
+
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php
new file mode 100644 (file)
index 0000000..c9fb4c5
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class CreateLocationCategoriesTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change()
+    {
+       $this->table('locations_categories', ['id' => false, 'primary_key' => ['id']])
+       ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+       ->addColumn('location_id', 'integer', ['signed' => false])
+       ->addColumn('category_id', 'integer', ['signed' => false])
+       ->addColumn('created', 'datetime')
+       ->addColumn('modified', 'datetime')
+       ->addForeignKey('location_id', 'locations', 'id')
+       //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION')
+       ->addForeignKey('category_id', 'categories', 'id')
+       ->create();
+       
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php
new file mode 100644 (file)
index 0000000..92fbd7c
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class DropLocationCategoriesTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+#    public function change()
+#    {
+#    }
+
+    public function up()
+       {
+       $this->table('locations_categories')
+               ->drop();
+       }
+
+    public function down()
+       {
+       $this->table('locations_categories', ['id' => false, 'primary_key' => ['id']])
+               ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+               ->addColumn('location_id', 'integer', ['signed' => false])
+               ->addColumn('category_id', 'integer', ['signed' => false])
+               ->addColumn('created', 'datetime')
+               ->addColumn('modified', 'datetime')
+               ->addForeignKey('location_id', 'locations', 'id')
+               //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION')
+               ->addForeignKey('category_id', 'categories', 'id')
+               ->create();
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php b/production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php
new file mode 100644 (file)
index 0000000..b718f35
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class CreateCategoriesLocationsTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change()
+    {
+       $this->table('categories_locations', ['id' => false, 'primary_key' => ['id']])
+       ->addColumn('id', 'integer', ['identity' => true, 'signed' => false])
+       ->addColumn('location_id', 'integer', ['signed' => false])
+       ->addColumn('category_id', 'integer', ['signed' => false])
+       ->addColumn('created', 'datetime')
+       ->addColumn('modified', 'datetime')
+       ->addForeignKey('location_id', 'locations', 'id')
+       //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION')
+       ->addForeignKey('category_id', 'categories', 'id')
+       ->create();
+       
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php b/production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php
new file mode 100644 (file)
index 0000000..dfb6867
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+use Phinx\Migration\AbstractMigration;
+
+class AddImageToCategories extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+     *
+     * The following commands can be used in this method and Phinx will
+     * automatically reverse them when rolling back:
+     *
+     *    createTable
+     *    renameTable
+     *    addColumn
+     *    renameColumn
+     *    addIndex
+     *    addForeignKey
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change()
+    {
+       $this->table('categories')
+               ->addColumn('image', 'string', ['length' => 1024, 'null' => true])
+               ->update();
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php b/production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php
new file mode 100644 (file)
index 0000000..5c9f014
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+use Phinx\Migration\AbstractMigration;
+class DropParentFromCategories extends AbstractMigration {
+       /**
+        * Change Method.
+        *
+        * Write your reversible migrations using this method.
+        *
+        * More information on writing migrations is available here:
+        * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
+        *
+        * The following commands can be used in this method and Phinx will
+        * automatically reverse them when rolling back:
+        *
+        * createTable
+        * renameTable
+        * addColumn
+        * renameColumn
+        * addIndex
+        * addForeignKey
+        *
+        * Remember to call "create()" or "update()" and NOT "save()" when working
+        * with the Table class.
+        */
+       // public function change()
+       // {
+       // }
+       
+       public function up() {
+               $this->table ( 'categories' )->removeColumn ( 'parent' )->update ();
+       }
+       
+       public function down() {
+               $this->table ( 'categories' )->addColumn ( 'parent', 'integer', [ 
+                               'signed' => false 
+               ] )->update ();
+       }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php b/production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php
new file mode 100644 (file)
index 0000000..71c9b42
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+use Migrations\AbstractMigration;
+
+class AddLatLongColumnsToLocationsTable extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * More information on this method is available here:
+     * http://docs.phinx.org/en/latest/migrations.html#the-change-method
+     * @return void
+     */
+    public function change()
+    {
+        $table = $this->table('locations');
+        
+               $table->addColumn('lat', 'float', ['null' => true]);
+               $table->addColumn('lng', 'float', ['null' => true]);
+        
+        $table->update();
+        
+        
+    }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php b/production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php
new file mode 100644 (file)
index 0000000..d62aad2
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+use Migrations\AbstractMigration;
+use Cake\Log\Log;
+use Cake\ORM\TableRegistry;
+
+/**
+ * this is an unusual migration since we want it to turn old data in latlong column into
+ * new data in two columns, lat and long.
+ */
+class TransmogrifyLatLongDataInLocations extends AbstractMigration {
+       /**
+        * Change Method.
+        *
+        * More information on this method is available here:
+        * http://docs.phinx.org/en/latest/migrations.html#the-change-method
+        *
+        * @return void
+        */
+       // public function change()
+       // {
+       // }
+       
+       /**
+        * handle migrating the single column into two.
+        * new columns must already exist.
+        * old latlong column could be blank if we're doing a new db, so we have to handle that.
+        */
+       public function up() {
+               $locations = TableRegistry::get ( 'Locations' );
+               
+               $query = $locations->find ();
+               
+               // iterate across table on latlong.
+               foreach ( $query as $locat ) {
+                       Log::write ( 'debug', 'id=' . var_export ( $locat->id, true ) . ' L&L=' . var_export ( $locat->latlong, true ) );
+                       // do nothing if the field is empty.
+                       if ($locat->latlong) {
+                               // break out the two pieces.
+                               $latlongExploded = explode ( ',', $locat->latlong );
+                               Log::write ( 'debug', 'broke into lat=' . $latlongExploded [0] . ' lng=' . $latlongExploded [1] );
+                               
+                               // now update the row where we got this info with same lat and long values in two columns.
+                               $loc_update = $locations->get ( $locat->id );
+                               $loc_update->lat = floatval ( $latlongExploded [0] );
+                               $loc_update->lng = floatval ( $latlongExploded [1] );
+                               $locations->save ( $loc_update );
+                       }
+               }
+       }
+       
+       /**
+        * performs the reverse case of migrating the two columns back into one.
+        * if we don't do this, we can't slide up and down the migration and rollback scale properly while keeping our lat and long data.
+        */
+       public function down() {
+               $locations = TableRegistry::get ( 'Locations' );
+               
+               $query = $locations->find ();
+               
+               // iterate across table on lat and long values.
+               foreach ( $query as $locat ) {
+                       Log::write ( 'debug', 'id=' . var_export ( $locat->id, true ) . ' lat=' . var_export ( $locat->lat, true )
+                                       .' lng=' . var_export ( $locat->lng, true ));
+                       // do nothing if the fields are empty.
+                       if ($locat->lat && $locat->lng) {
+                               // combine the two pieces.
+                               $latlong = '' . $locat->lat . ',' . $locat->lng;                                
+                               Log::write ( 'debug', 'combo is=' . $latlong);
+                               
+                               // now update the row where we got these values to reproduce the single column.
+                               $loc_update = $locations->get ( $locat->id );
+                               $loc_update->latlong = $latlong;
+                               $locations->save ( $loc_update );
+                       }
+               }
+       }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php b/production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php
new file mode 100644 (file)
index 0000000..1939f5f
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+use Migrations\AbstractMigration;
+class DropLatlongFromLocationsTable extends AbstractMigration {
+       
+       /**
+        * going forward, we have two columns (lat and lng) for the geo coords.  so we're getting rid
+        * of the latlong combined column.
+        */
+       public function up() {
+               $this->table ( 'locations' )->removeColumn ( 'latlong' )->update ();
+       }
+       /**
+        * but for preservation of former realities, we re-add the latlong column if we're going backwards.
+        * this supports our code for transmogrifying the coordinates between two column format and one
+        * column fomat.
+        */
+       public function down() {
+               $this->table ( 'locations' )->addColumn ( 'latlong', 'string', [ 
+                               'length' => 255,
+                               'null' => true 
+               ] )->update ();
+       }
+}
diff --git a/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock b/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock
new file mode 100644 (file)
index 0000000..45d2389
Binary files /dev/null and b/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock differ
diff --git a/production/example_apps/zippy_maps/config/app.default.php b/production/example_apps/zippy_maps/config/app.default.php
new file mode 100644 (file)
index 0000000..c06599e
--- /dev/null
@@ -0,0 +1,346 @@
+<?php
+return [
+    /**
+     * Debug Level:
+     *
+     * Production Mode:
+     * false: No error messages, errors, or warnings shown.
+     *
+     * Development Mode:
+     * true: Errors and warnings shown.
+     */
+    'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),
+
+    /**
+     * Configure basic information about the application.
+     *
+     * - namespace - The namespace to find app classes under.
+     * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time.
+     * - encoding - The encoding used for HTML + database connections.
+     * - base - The base directory the app resides in. If false this
+     *   will be auto detected.
+     * - dir - Name of app directory.
+     * - webroot - The webroot directory.
+     * - wwwRoot - The file path to webroot.
+     * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to
+     *   use CakePHP pretty URLs, remove these .htaccess
+     *   files:
+     *      /.htaccess
+     *      /webroot/.htaccess
+     *   And uncomment the baseUrl key below.
+     * - fullBaseUrl - A base URL to use for absolute links.
+     * - imageBaseUrl - Web path to the public images directory under webroot.
+     * - cssBaseUrl - Web path to the public css directory under webroot.
+     * - jsBaseUrl - Web path to the public js directory under webroot.
+     * - paths - Configure paths for non class based resources. Supports the
+     *   `plugins`, `templates`, `locales` subkeys, which allow the definition of
+     *   paths for plugins, view templates and locale files respectively.
+     */
+    'App' => [
+        'namespace' => 'App',
+        'encoding' => env('APP_ENCODING', 'UTF-8'),
+        'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
+        'base' => false,
+        'dir' => 'src',
+        'webroot' => 'webroot',
+        'wwwRoot' => WWW_ROOT,
+        // 'baseUrl' => env('SCRIPT_NAME'),
+        'fullBaseUrl' => false,
+        'imageBaseUrl' => 'img/',
+        'cssBaseUrl' => 'css/',
+        'jsBaseUrl' => 'js/',
+        'paths' => [
+            'plugins' => [ROOT . DS . 'plugins' . DS],
+            'templates' => [APP . 'Template' . DS],
+            'locales' => [APP . 'Locale' . DS],
+        ],
+    ],
+
+    /**
+     * Security and encryption configuration
+     *
+     * - salt - A random string used in security hashing methods.
+     *   The salt value is also used as the encryption key.
+     *   You should treat it as extremely sensitive data.
+     */
+    'Security' => [
+        'salt' => env('SECURITY_SALT', '__SALT__'),
+    ],
+
+    /**
+     * Apply timestamps with the last modified time to static assets (js, css, images).
+     * Will append a querystring parameter containing the time the file was modified.
+     * This is useful for busting browser caches.
+     *
+     * Set to true to apply timestamps when debug is true. Set to 'force' to always
+     * enable timestamping regardless of debug value.
+     */
+    'Asset' => [
+        // 'timestamp' => true,
+    ],
+
+    /**
+     * Configure the cache adapters.
+     */
+    'Cache' => [
+        'default' => [
+            'className' => 'File',
+            'path' => CACHE,
+            'url' => env('CACHE_DEFAULT_URL', null),
+        ],
+
+        /**
+         * Configure the cache used for general framework caching.
+         * Translation cache files are stored with this configuration.
+         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
+         * If you set 'className' => 'Null' core cache will be disabled.
+         */
+        '_cake_core_' => [
+            'className' => 'File',
+            'prefix' => 'myapp_cake_core_',
+            'path' => CACHE . 'persistent/',
+            'serialize' => true,
+            'duration' => '+1 years',
+            'url' => env('CACHE_CAKECORE_URL', null),
+        ],
+
+        /**
+         * Configure the cache for model and datasource caches. This cache
+         * configuration is used to store schema descriptions, and table listings
+         * in connections.
+         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
+         */
+        '_cake_model_' => [
+            'className' => 'File',
+            'prefix' => 'myapp_cake_model_',
+            'path' => CACHE . 'models/',
+            'serialize' => true,
+            'duration' => '+1 years',
+            'url' => env('CACHE_CAKEMODEL_URL', null),
+        ],
+    ],
+
+    /**
+     * Configure the Error and Exception handlers used by your application.
+     *
+     * By default errors are displayed using Debugger, when debug is true and logged
+     * by Cake\Log\Log when debug is false.
+     *
+     * In CLI environments exceptions will be printed to stderr with a backtrace.
+     * In web environments an HTML page will be displayed for the exception.
+     * With debug true, framework errors like Missing Controller will be displayed.
+     * When debug is false, framework errors will be coerced into generic HTTP errors.
+     *
+     * Options:
+     *
+     * - `errorLevel` - int - The level of errors you are interested in capturing.
+     * - `trace` - boolean - Whether or not backtraces should be included in
+     *   logged errors/exceptions.
+     * - `log` - boolean - Whether or not you want exceptions logged.
+     * - `exceptionRenderer` - string - The class responsible for rendering
+     *   uncaught exceptions. If you choose a custom class you should place
+     *   the file for that class in src/Error. This class needs to implement a
+     *   render method.
+     * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that
+     *   extend one of the listed exceptions will also be skipped for logging.
+     *   E.g.:
+     *   `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']`
+     * - `extraFatalErrorMemory` - int - The number of megabytes to increase
+     *   the memory limit by when a fatal error is encountered. This allows
+     *   breathing room to complete logging or error handling.
+     */
+    'Error' => [
+        'errorLevel' => E_ALL,
+        'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
+        'skipLog' => [],
+        'log' => true,
+        'trace' => true,
+    ],
+
+    /**
+     * Email configuration.
+     *
+     * By defining transports separately from delivery profiles you can easily
+     * re-use transport configuration across multiple profiles.
+     *
+     * You can specify multiple configurations for production, development and
+     * testing.
+     *
+     * Each transport needs a `className`. Valid options are as follows:
+     *
+     *  Mail   - Send using PHP mail function
+     *  Smtp   - Send using SMTP
+     *  Debug  - Do not send the email, just return the result
+     *
+     * You can add custom transports (or override existing transports) by adding the
+     * appropriate file to src/Mailer/Transport. Transports should be named
+     * 'YourTransport.php', where 'Your' is the name of the transport.
+     */
+    'EmailTransport' => [
+        'default' => [
+            'className' => 'Mail',
+            // The following keys are used in SMTP transports
+            'host' => 'localhost',
+            'port' => 25,
+            'timeout' => 30,
+            'username' => 'user',
+            'password' => 'secret',
+            'client' => null,
+            'tls' => null,
+            'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
+        ],
+    ],
+
+    /**
+     * Email delivery profiles
+     *
+     * Delivery profiles allow you to predefine various properties about email
+     * messages from your application and give the settings a name. This saves
+     * duplication across your application and makes maintenance and development
+     * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email`
+     * for more information.
+     */
+    'Email' => [
+        'default' => [
+            'transport' => 'default',
+            'from' => 'you@localhost',
+            //'charset' => 'utf-8',
+            //'headerCharset' => 'utf-8',
+        ],
+    ],
+
+    /**
+     * Connection information used by the ORM to connect
+     * to your application's datastores.
+     * Do not use periods in database name - it may lead to error.
+     * See https://github.com/cakephp/cakephp/issues/6471 for details.
+     * Drivers include Mysql Postgres Sqlite Sqlserver
+     * See vendor\cakephp\cakephp\src\Database\Driver for complete list
+     */
+    'Datasources' => [
+        'default' => [
+            'className' => 'Cake\Database\Connection',
+            'driver' => 'Cake\Database\Driver\Mysql',
+            'persistent' => false,
+            'host' => 'localhost',
+            /**
+             * CakePHP will use the default DB port based on the driver selected
+             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
+             * the following line and set the port accordingly
+             */
+            //'port' => 'non_standard_port_number',
+            'username' => 'my_app',
+            'password' => 'secret',
+            'database' => 'my_app',
+            'encoding' => 'utf8',
+            'timezone' => 'UTC',
+            'flags' => [],
+            'cacheMetadata' => true,
+            'log' => false,
+
+            /**
+             * Set identifier quoting to true if you are using reserved words or
+             * special characters in your table or column names. Enabling this
+             * setting will result in queries built using the Query Builder having
+             * identifiers quoted when creating SQL. It should be noted that this
+             * decreases performance because each query needs to be traversed and
+             * manipulated before being executed.
+             */
+            'quoteIdentifiers' => false,
+
+            /**
+             * During development, if using MySQL < 5.6, uncommenting the
+             * following line could boost the speed at which schema metadata is
+             * fetched from the database. It can also be set directly with the
+             * mysql configuration directive 'innodb_stats_on_metadata = 0'
+             * which is the recommended value in production environments
+             */
+            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
+
+            'url' => env('DATABASE_URL', null),
+        ],
+
+        /**
+         * The test connection is used during the test suite.
+         */
+        'test' => [
+            'className' => 'Cake\Database\Connection',
+            'driver' => 'Cake\Database\Driver\Mysql',
+            'persistent' => false,
+            'host' => 'localhost',
+            //'port' => 'non_standard_port_number',
+            'username' => 'my_app',
+            'password' => 'secret',
+            'database' => 'test_myapp',
+            'encoding' => 'utf8',
+            'timezone' => 'UTC',
+            'cacheMetadata' => true,
+            'quoteIdentifiers' => false,
+            'log' => false,
+            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
+            'url' => env('DATABASE_TEST_URL', null),
+        ],
+    ],
+
+    /**
+     * Configures logging options
+     */
+    'Log' => [
+        'debug' => [
+            'className' => 'Cake\Log\Engine\FileLog',
+            'path' => LOGS,
+            'file' => 'debug',
+            'levels' => ['notice', 'info', 'debug'],
+            'url' => env('LOG_DEBUG_URL', null),
+        ],
+        'error' => [
+            'className' => 'Cake\Log\Engine\FileLog',
+            'path' => LOGS,
+            'file' => 'error',
+            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
+            'url' => env('LOG_ERROR_URL', null),
+        ],
+    ],
+
+    /**
+     * Session configuration.
+     *
+     * Contains an array of settings to use for session configuration. The
+     * `defaults` key is used to define a default preset to use for sessions, any
+     * settings declared here will override the settings of the default config.
+     *
+     * ## Options
+     *
+     * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'.
+     * - `cookiePath` - The url path for which session cookie is set. Maps to the
+     *   `session.cookie_path` php.ini config. Defaults to base path of app.
+     * - `timeout` - The time in minutes the session should be valid for.
+     *    Pass 0 to disable checking timeout.
+     *    Please note that php.ini's session.gc_maxlifetime must be equal to or greater
+     *    than the largest Session['timeout'] in all served websites for it to have the
+     *    desired effect.
+     * - `defaults` - The default configuration set to use as a basis for your session.
+     *    There are four built-in options: php, cake, cache, database.
+     * - `handler` - Can be used to enable a custom session handler. Expects an
+     *    array with at least the `engine` key, being the name of the Session engine
+     *    class to use for managing the session. CakePHP bundles the `CacheSession`
+     *    and `DatabaseSession` engines.
+     * - `ini` - An associative array of additional ini values to set.
+     *
+     * The built-in `defaults` options are:
+     *
+     * - 'php' - Uses settings defined in your php.ini.
+     * - 'cake' - Saves session files in CakePHP's /tmp directory.
+     * - 'database' - Uses CakePHP's database sessions.
+     * - 'cache' - Use the Cache class to save sessions.
+     *
+     * To define a custom session handler, save it at src/Network/Session/<name>.php.
+     * Make sure the class implements PHP's `SessionHandlerInterface` and set
+     * Session.handler to <name>
+     *
+     * To use database sessions, load the SQL file located at config/Schema/sessions.sql
+     */
+    'Session' => [
+        'defaults' => 'php',
+    ],
+];
diff --git a/production/example_apps/zippy_maps/config/bootstrap.php b/production/example_apps/zippy_maps/config/bootstrap.php
new file mode 100644 (file)
index 0000000..1ce9edb
--- /dev/null
@@ -0,0 +1,242 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.8
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+// You can remove this if you are confident that your PHP version is sufficient.
+if (version_compare(PHP_VERSION, '5.6.0') < 0) {
+    trigger_error('Your PHP version must be equal or higher than 5.6.0 to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ *  You can remove this if you are confident you have intl installed.
+ */
+if (!extension_loaded('intl')) {
+    trigger_error('You must enable the intl extension to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ * You can remove this if you are confident you have mbstring installed.
+ */
+if (!extension_loaded('mbstring')) {
+    trigger_error('You must enable the mbstring extension to use CakePHP.', E_USER_ERROR);
+}
+
+/*
+ * Configure paths required to find CakePHP + general filepath
+ * constants
+ */
+require __DIR__ . '/paths.php';
+
+/*
+ * Bootstrap CakePHP.
+ *
+ * Does the various bits of setup that CakePHP needs to do.
+ * This includes:
+ *
+ * - Registering the CakePHP autoloader.
+ * - Setting the default application paths.
+ */
+require CORE_PATH . 'config' . DS . 'bootstrap.php';
+
+use Cake\Cache\Cache;
+use Cake\Console\ConsoleErrorHandler;
+use Cake\Core\App;
+use Cake\Core\Configure;
+use Cake\Core\Configure\Engine\PhpConfig;
+use Cake\Core\Plugin;
+use Cake\Database\Type;
+use Cake\Datasource\ConnectionManager;
+use Cake\Error\ErrorHandler;
+use Cake\Log\Log;
+use Cake\Mailer\Email;
+use Cake\Network\Request;
+use Cake\Utility\Inflector;
+use Cake\Utility\Security;
+
+/*
+ * Read configuration file and inject configuration into various
+ * CakePHP classes.
+ *
+ * By default there is only one configuration file. It is often a good
+ * idea to create multiple configuration files, and separate the configuration
+ * that changes from configuration that does not. This makes deployment simpler.
+ */
+try {
+    Configure::config('default', new PhpConfig());
+    Configure::load('app', 'default', false);
+
+    // load our google maps api config file.
+    Configure::load('config_google', 'default');
+
+} catch (\Exception $e) {
+    exit($e->getMessage() . "\n");
+}
+
+/*
+ * Load an environment local configuration file.
+ * You can use a file like app_local.php to provide local overrides to your
+ * shared configuration.
+ */
+//Configure::load('app_local', 'default');
+
+/*
+ * When debug = true the metadata cache should only last
+ * for a short time.
+ */
+if (Configure::read('debug')) {
+    Configure::write('Cache._cake_model_.duration', '+2 minutes');
+    Configure::write('Cache._cake_core_.duration', '+2 minutes');
+}
+
+/*
+ * Set server timezone to UTC. You can change it to another timezone of your
+ * choice but using UTC makes time calculations / conversions easier.
+ */
+date_default_timezone_set('UTC');
+
+/*
+ * Configure the mbstring extension to use the correct encoding.
+ */
+mb_internal_encoding(Configure::read('App.encoding'));
+
+/*
+ * Set the default locale. This controls how dates, number and currency is
+ * formatted and sets the default language to use for translations.
+ */
+ini_set('intl.default_locale', Configure::read('App.defaultLocale'));
+
+/*
+ * Register application error and exception handlers.
+ */
+$isCli = PHP_SAPI === 'cli';
+if ($isCli) {
+    (new ConsoleErrorHandler(Configure::read('Error')))->register();
+} else {
+    (new ErrorHandler(Configure::read('Error')))->register();
+}
+
+/*
+ * Include the CLI bootstrap overrides.
+ */
+if ($isCli) {
+    require __DIR__ . '/bootstrap_cli.php';
+}
+
+/*
+ * Set the full base URL.
+ * This URL is used as the base of all absolute links.
+ *
+ * If you define fullBaseUrl in your config file you can remove this.
+ */
+if (!Configure::read('App.fullBaseUrl')) {
+    $s = null;
+    if (env('HTTPS')) {
+        $s = 's';
+    }
+
+    $httpHost = env('HTTP_HOST');
+    if (isset($httpHost)) {
+        Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost);
+    }
+    unset($httpHost, $s);
+}
+
+Cache::setConfig(Configure::consume('Cache'));
+ConnectionManager::setConfig(Configure::consume('Datasources'));
+Email::setConfigTransport(Configure::consume('EmailTransport'));
+Email::setConfig(Configure::consume('Email'));
+Log::setConfig(Configure::consume('Log'));
+Security::salt(Configure::consume('Security.salt'));
+
+/*
+ * The default crypto extension in 3.0 is OpenSSL.
+ * If you are migrating from 2.x uncomment this code to
+ * use a more compatible Mcrypt based implementation
+ */
+//Security::engine(new \Cake\Utility\Crypto\Mcrypt());
+
+/*
+ * Setup detectors for mobile and tablet.
+ */
+Request::addDetector('mobile', function ($request) {
+    $detector = new \Detection\MobileDetect();
+
+    return $detector->isMobile();
+});
+Request::addDetector('tablet', function ($request) {
+    $detector = new \Detection\MobileDetect();
+
+    return $detector->isTablet();
+});
+
+/*
+ * Enable immutable time objects in the ORM.
+ *
+ * You can enable default locale format parsing by adding calls
+ * to `useLocaleParser()`. This enables the automatic conversion of
+ * locale specific date formats. For details see
+ * @link http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data
+ */
+Type::build('time')
+    ->useImmutable();
+Type::build('date')
+    ->useImmutable();
+Type::build('datetime')
+    ->useImmutable();
+Type::build('timestamp')
+    ->useImmutable();
+       
+       /*
+ * Custom Inflector rules, can be set to correctly pluralize or singularize
+ * table, model, controller names or whatever other string is passed to the
+ * inflection functions.
+ */
+       // Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
+       // Inflector::rules('irregular', ['red' => 'redlings']);
+       // Inflector::rules('uninflected', ['dontinflectme']);
+       // Inflector::rules('transliteration', ['/å/' => 'aa']);
+       
+/*
+ * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call
+ * Uncomment one of the lines below, as you need. make sure you read the documentation on Plugin to use more
+ * advanced ways of loading plugins
+ *
+ * Plugin::loadAll(); // Loads all plugins at once
+ * Plugin::load('Migrations'); //Loads a single plugin named Migrations
+ *
+ */
+       
+/*
+ * Only try to load DebugKit in development mode
+ * Debug Kit should not be installed on a production system
+ */
+if (Configure::read ( 'debug' )) {
+       Plugin::load ( 'DebugKit', [ 
+                       'bootstrap' => true 
+       ] );
+}
+
+Plugin::load ( 'Migrations' );
+
+// hoist up the geocoder and maps support, matey.
+Plugin::load ( 'Geo', [ 
+               'bootstrap' => true 
+] );
+
+Plugin::load ( 'DebugKit' );
+
+
+Plugin::load('Avmaps', ['bootstrap' => false, 'routes' => true]);
+
+
diff --git a/production/example_apps/zippy_maps/config/bootstrap_cli.php b/production/example_apps/zippy_maps/config/bootstrap_cli.php
new file mode 100644 (file)
index 0000000..f822a55
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+use Cake\Core\Configure;
+use Cake\Core\Exception\MissingPluginException;
+use Cake\Core\Plugin;
+
+/**
+ * Additional bootstrapping and configuration for CLI environments should
+ * be put here.
+ */
+
+// Set the fullBaseUrl to allow URLs to be generated in shell tasks.
+// This is useful when sending email from shells.
+//Configure::write('App.fullBaseUrl', php_uname('n'));
+
+// Set logs to different files so they don't have permission conflicts.
+Configure::write('Log.debug.file', 'cli-debug');
+Configure::write('Log.error.file', 'cli-error');
+
+try {
+    Plugin::load('Bake');
+} catch (MissingPluginException $e) {
+    // Do not halt if the plugin is missing
+}
+
+Plugin::load('Migrations');
diff --git a/production/example_apps/zippy_maps/config/config_google.default.php b/production/example_apps/zippy_maps/config/config_google.default.php
new file mode 100644 (file)
index 0000000..979b340
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/*
+ * this is a special config file for google maps api config items.
+ * the big one here is the API key, which needs to be configured per site.
+ * see google's API key documentation for more details, e.g.:
+ *    https://developers.google.com/maps/documentation/javascript/get-api-key
+ */
+return [
+'GoogleMap' => [
+               'key' => 'your-api-key-here',
+       ],
+];
+
+
+?>
+
diff --git a/production/example_apps/zippy_maps/config/paths.php b/production/example_apps/zippy_maps/config/paths.php
new file mode 100644 (file)
index 0000000..fcaba5c
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.0
+ * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+
+/**
+ * Use the DS to separate the directories in other defines
+ */
+if (!defined('DS')) {
+    define('DS', DIRECTORY_SEPARATOR);
+}
+
+/**
+ * These defines should only be edited if you have cake installed in
+ * a directory layout other than the way it is distributed.
+ * When using custom settings be sure to use the DS and do not add a trailing DS.
+ */
+
+/**
+ * The full path to the directory which holds "src", WITHOUT a trailing DS.
+ */
+define('ROOT', dirname(__DIR__));
+
+/**
+ * The actual directory name for the application directory. Normally
+ * named 'src'.
+ */
+define('APP_DIR', 'src');
+
+/**
+ * Path to the application's directory.
+ */
+define('APP', ROOT . DS . APP_DIR . DS);
+
+/**
+ * Path to the config directory.
+ */
+define('CONFIG', ROOT . DS . 'config' . DS);
+
+/**
+ * File path to the webroot directory.
+ */
+define('WWW_ROOT', ROOT . DS . 'webroot' . DS);
+
+/**
+ * Path to the tests directory.
+ */
+define('TESTS', ROOT . DS . 'tests' . DS);
+
+/**
+ * Path to the temporary files directory.
+ */
+define('TMP', ROOT . DS . 'tmp' . DS);
+
+/**
+ * Path to the logs directory.
+ */
+define('LOGS', ROOT . DS . 'logs' . DS);
+
+/**
+ * Path to the cache files directory. It can be shared between hosts in a multi-server setup.
+ */
+define('CACHE', TMP . 'cache' . DS);
+
+/**
+ * The absolute path to the "cake" directory, WITHOUT a trailing DS.
+ *
+ * CakePHP should always be installed with composer, so look there.
+ */
+define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp');
+
+/**
+ * Path to the cake directory.
+ */
+define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
+define('CAKE', CORE_PATH . 'src' . DS);
diff --git a/production/example_apps/zippy_maps/config/routes.php b/production/example_apps/zippy_maps/config/routes.php
new file mode 100644 (file)
index 0000000..ef1923b
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Routes configuration
+ *
+ * In this file, you set up routes to your controllers and their actions.
+ * Routes are very important mechanism that allows you to freely connect
+ * different URLs to chosen controllers and their actions (functions).
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+use Cake\Core\Plugin;
+use Cake\Routing\RouteBuilder;
+use Cake\Routing\Router;
+use Cake\Routing\Route\DashedRoute;
+
+/**
+ * The default class to use for all routes
+ *
+ * The following route classes are supplied with CakePHP and are appropriate
+ * to set as the default:
+ *
+ * - Route
+ * - InflectedRoute
+ * - DashedRoute
+ *
+ * If no call is made to `Router::defaultRouteClass()`, the class used is
+ * `Route` (`Cake\Routing\Route\Route`)
+ *
+ * Note that `Route` does not do any inflections on URLs which will result in
+ * inconsistently cased URLs when used with `:plugin`, `:controller` and
+ * `:action` markers.
+ *
+ */
+Router::defaultRouteClass(DashedRoute::class);
+
+// enable json and xml extensions in routes.
+Router::extensions(['json', 'xml']);
+
+Router::scope('/', function (RouteBuilder $routes) {
+    /**
+     * Here, we are connecting '/' (base path) to a controller called 'Pages',
+     * its action called 'display', and we pass a param to select the view file
+     * to use (in this case, src/Template/Pages/home.ctp)...
+     */
+    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
+
+    /**
+     * ...and connect the rest of 'Pages' controller's URLs.
+     */
+    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
+    
+    // enable the categories controller to function as an API.    
+       $routes->resources('Categories',
+               [ 'actions' => ['create' => 'lookupajax'] ]);
+       // enable the locations controller to function as an API.
+       $routes->resources('Locations',
+                       [ 'actions' => ['create' => 'lookupajax'] ]);
+       
+    
+    /**
+     * Connect catchall routes for all controllers.
+     *
+     * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for
+     *    `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']);`
+     *    `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);`
+     *
+     * Any route class can be used with this method, such as:
+     * - DashedRoute
+     * - InflectedRoute
+     * - Route
+     * - Or your own route class
+     *
+     * You can remove these routes once you've connected the
+     * routes you want in your application.
+     */
+    $routes->fallbacks(DashedRoute::class);
+});
+
+/**
+ * Load all plugin routes.  See the Plugin documentation on
+ * how to customize the loading of plugin routes.
+ */
+Plugin::routes();
diff --git a/production/example_apps/zippy_maps/config/schema/i18n.sql b/production/example_apps/zippy_maps/config/schema/i18n.sql
new file mode 100644 (file)
index 0000000..47cf171
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+
+CREATE TABLE i18n (
+    id int NOT NULL auto_increment,
+    locale varchar(6) NOT NULL,
+    model varchar(255) NOT NULL,
+    foreign_key int(10) NOT NULL,
+    field varchar(255) NOT NULL,
+    content text,
+    PRIMARY KEY (id),
+    UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),
+    INDEX I18N_FIELD(model, foreign_key, field)
+);
diff --git a/production/example_apps/zippy_maps/config/schema/sessions.sql b/production/example_apps/zippy_maps/config/schema/sessions.sql
new file mode 100644 (file)
index 0000000..b5a5276
--- /dev/null
@@ -0,0 +1,13 @@
+# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+#
+# Licensed under The MIT License
+# For full copyright and license information, please see the LICENSE.txt
+# Redistributions of files must retain the above copyright notice.
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+
+CREATE TABLE sessions (
+  id char(40) NOT NULL,
+  data text,
+  expires INT(11) NOT NULL,
+  PRIMARY KEY  (id)
+);
diff --git a/production/example_apps/zippy_maps/docs/google_api_info.txt b/production/example_apps/zippy_maps/docs/google_api_info.txt
new file mode 100644 (file)
index 0000000..2cb4e90
--- /dev/null
@@ -0,0 +1,9 @@
+
+
+get an api key for your project:
+(link)
+
+add the features required on that api key:
+(links)
+including distance matrix, geocoder, javascript api, 
+
diff --git a/production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql b/production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql
new file mode 100644 (file)
index 0000000..e4cad48
--- /dev/null
@@ -0,0 +1,18 @@
+show databases;
+#create database zipcodes;
+use zipcodes;
+
+describe categories;
+
+select * from categories where image is null;
+
+describe locations;
+
+select * from locations where id > 3000;
+
+# useful floating point compare technique.
+select * from locations where abs(lat - '18.17') <= 1e-6;
+
+select * from locations where id = 607;
+
+select * from locations ;
diff --git a/production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql b/production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql
new file mode 100644 (file)
index 0000000..03c5692
--- /dev/null
@@ -0,0 +1,40 @@
+# note: this code was appropriate before migration AddLatLongColumnsToLocationsTable happened in july 2017.
+# if one wanted to take a kake zip style db to the map demo db, there would be a few changes (such as getting rid of the
+# combining of lat and long into a single field).
+
+# a bunch of helper bits.  real important code is at the end.
+use zipcodes;
+select database();
+show tables;
+select * from kake_zip_code;
+select lat, lon, locationtext, country from kake_zip_code ;
+select location, concat(lat, ',', lon), concat(locationtext, ' ', zip_code, ', ', country) from kake_zip_code where lat != 0 and lon != 0 limit 500;
+describe locations;
+describe categories;
+describe categories_locations;
+
+# testing select with concats.
+select location, concat(locationtext, ' ', zip_code), concat(lat, ',', lon) from kake_zip_code where lat != 0 and lon != 0 limit 500;
+
+select * from kake_zip_code limit 500;
+select * from locations;
+select * from categories;
+select * from categories_locations;
+delete from locations where id != 0;
+ALTER TABLE locations AUTO_INCREMENT = 1;
+delete from categories where id != 0;
+ALTER TABLE categories AUTO_INCREMENT = 1;
+delete from categories_locations where id != 0;
+ALTER TABLE categories_locations AUTO_INCREMENT = 1;
+
+select * from locations where location like '%, AK %';
+
+# these are the important actions...
+
+# the real business gets done by these inserts.
+insert into locations (id, name, location, latlong, created, modified) select null, concat(location, '-', zip_code), concat(locationtext, ' ', zip_code), concat(lat, ',', lon), now(), now() from kake_zip_code where lat != 0 and lon != 0 limit 500000;
+insert ignore into categories (id, name, created, modified, image) select null, concat(country, '-', state_prefix), now(), now(), null from kake_zip_code where lat != 0 and lon != 0 limit 500000;
+# big one, getting the categories done automatically...
+insert ignore into categories_locations (id, location_id, category_id, created, modified) 
+ select null, locations.id as location_id, categories.id as category_id, now(), now() from locations inner join categories where locations.name like concat('%', categories.name, '%') limit 500000;
diff --git a/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip b/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip
new file mode 100644 (file)
index 0000000..8cfd215
Binary files /dev/null and b/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip differ
diff --git a/production/example_apps/zippy_maps/index.php b/production/example_apps/zippy_maps/index.php
new file mode 100644 (file)
index 0000000..fc5e39c
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';
diff --git a/production/example_apps/zippy_maps/phpunit.xml.dist b/production/example_apps/zippy_maps/phpunit.xml.dist
new file mode 100644 (file)
index 0000000..77c784b
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+    colors="true"
+    processIsolation="false"
+    stopOnFailure="false"
+    syntaxCheck="false"
+    bootstrap="./tests/bootstrap.php"
+    >
+    <php>
+        <ini name="memory_limit" value="-1"/>
+        <ini name="apc.enable_cli" value="1"/>
+    </php>
+
+    <!-- Add any additional test suites you want to run here -->
+    <testsuites>
+        <testsuite name="App Test Suite">
+            <directory>./tests/TestCase</directory>
+        </testsuite>
+        <!-- Add plugin test suites here. -->
+    </testsuites>
+
+    <!-- Setup a listener for fixtures -->
+    <listeners>
+        <listener
+        class="\Cake\TestSuite\Fixture\FixtureInjector"
+        file="./vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php">
+            <arguments>
+                <object class="\Cake\TestSuite\Fixture\FixtureManager" />
+            </arguments>
+        </listener>
+    </listeners>
+
+    <!-- Ignore vendor tests in code coverage reports -->
+    <filter>
+        <whitelist>
+            <directory suffix=".php">./src/</directory>
+            <directory suffix=".php">./plugins/*/src/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/production/example_apps/zippy_maps/readme.txt b/production/example_apps/zippy_maps/readme.txt
new file mode 100644 (file)
index 0000000..6231a9e
--- /dev/null
@@ -0,0 +1,42 @@
+
+steps to bringing up this maps demo site...
+
+* need to configure a database in app.php.  see default version: config/app.default.php 
+
+* need an api key from google to have separate hit quotas on mapping API.
+  * refer to: https://developers.google.com/maps/documentation/distance-matrix/get-api-key
+  * see default version: config/config_google.default.php
+  * example of using api key:
+    * https://maps.googleapis.com/maps/api/distancematrix/json?origins=Seattle&destinations=San+Francisco&key=YOUR_API_KEY
+
+* need to install the cake geo code.
+  * more details at: https://github.com/dereuromark/cakephp-geo/blob/master/docs/Install.md
+
+* need to have jquery available and loaded someplace.  i got a recent minified version of it and stored it in webroot/js and then added this to default.ctp before the fetch('script') call:
+  <script src="/js/jquery-3.2.1.min.js"></script>
+
+* need to load the marker clusterer code for map marker clustering to work.  see ClusterMapHelper.php for more info.
+
+* a bunch of icons for map markers can be found here: https://code.google.com/archive/p/google-maps-icons/downloads
+
+* need to make links for the plugins:
+  from: https://book.cakephp.org/3.0/en/deployment.html#symlink-assets
+  run: bin/cake plugin assets symlink
+
+---
+
+assorted reference notes:
+
+mysql and php using javascript api with maps:
+https://developers.google.com/maps/documentation/javascript/mysql-to-maps
+
+how to show things in a form with checkboxes:
+https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data
+
+tagList above is computed this way:
+https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs
+
+events that can be hooked are listed here:
+https://developers.google.com/maps/documentation/javascript/reference
+
+
diff --git a/production/example_apps/zippy_maps/reference/zipcode.php b/production/example_apps/zippy_maps/reference/zipcode.php
new file mode 100644 (file)
index 0000000..1bfe72f
--- /dev/null
@@ -0,0 +1,829 @@
+<?php
+ /*******************************************************************************
+ *                ZIP Code and Distance Claculation Class
+ *******************************************************************************
+ *      Author:     Micah Carrick
+ *      Email:      email@micahcarrick.com
+ *      Website:    http://www.micahcarrick.com
+ *
+ *      File:       zipcode.class.php
+ *      Version:    1.2.0
+ *      Copyright:  (c) 2005 - Micah Carrick 
+ *                  You are free to use, distribute, and modify this software 
+ *                  under the terms of the GNU General Public License.  See the
+ *                  included license.txt file.
+ *
+ *******************************************************************************
+ *  VERION HISTORY:
+ *      v1.2.0 [Oct 22, 2006] - Using a completely new database based on user
+                                contributions which resolves many data bugs.
+                              - Added sorting to get_zips_in_range()
+                              - Added ability to include/exclude the base zip
+                                from get_zips_in_range()
+                              
+ *      v1.1.0 [Apr 30, 2005] - Added Jeff Bearer's code to make it MUCH faster!
+ *      v1.0.1 [Apr 22, 2005] - Fixed a typo :)
+ *      v1.0.0 [Apr 12, 2005] - Initial Version
+ *
+ *******************************************************************************
+ *  DESCRIPTION:
+ *    A PHP Class and MySQL table to find the distance between zip codes and 
+ *    find all zip codes within a given mileage or kilometer range.
+ *      
+ *******************************************************************************
+ *
+ * Note:  The following 2 database definitions are needed to import zipcode data from
+ * the new style P.O. data which is a great departure.
+ * One will either have to dynamically specify the data source or
+ * create zipcode_import.php and zipcode_new.php models containing below information
+ * 
+ *
+ *class ZipcodeNew extends AppModel {
+   var $name = 'ZipcodeNew';
+   var $useTable = 'zip_code_new';
+   var $primaryKey = 'id';
+   var $useDbConfig = 'avengerShared';
+}
+
+class ZipcodeImport extends AppModel {
+   var $name = 'ZipcodeImport';
+   var $useTable = 'free_zipcode_database';
+   var $primaryKey = 'RecordNumber';
+   var $useDbConfig = 'avengerShared';
+
+}
+
+ *
+ *
+ *
+ *
+*/
+
+// constants for setting the $units data member
+define('_UNIT_MILES', 'm');
+define('_UNIT_KILOMETERS', 'k');
+
+// constants for passing $sort to get_zips_in_range()
+define('_ZIPS_SORT_BY_DISTANCE_ASC', 1);
+define('_ZIPS_SORT_BY_DISTANCE_DESC', 2);
+define('_ZIPS_SORT_BY_ZIP_ASC', 3);
+define('_ZIPS_SORT_BY_ZIP_DESC', 4);
+
+// constant for miles to kilometers conversion
+define('_M2KM_FACTOR', 1.609344);
+
+
+class Zipcode extends AppModel {
+   var $name = 'Zipcode';
+   var $useTable = 'zip_code';
+   var $primaryKey = 'zip_code';
+   var $useDbConfig = 'avengerShared';
+   var $zipInRangeData = array();
+   var $zipPageConditions = array();
+
+   
+       function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null) {
+               //$conditions[] ="1 = 1 GROUP BY week, away_team_id, home_team_id";
+               //$recursive = -1;
+               //$fields = array('week', 'away_team_id', 'home_team_id');
+               $this->get_zips_in_range($this->zipPageConditions['zip'], $this->zipPageConditions['range'], $this->zipPageConditions['sort']);
+               $page_data = array();
+               //loop through page data
+               
+               
+               return $this->zipInRangeData;
+       }
+       
+       function paginateCount($conditions = null, $recursive = 0) {
+               return count($this->zipInRangeData);
+       }
+       
+   
+   
+   /*
+    * TAKEN FROM MICCAH CODE
+    */
+   
+       var $last_error = "";            // last error message set by this class
+   var $units = _UNIT_MILES;        // miles or kilometers
+   var $decimals = 2;               // decimal places for returned distance
+   
+   function get_distance($zip1, $zip2) {
+
+      // returns the distance between to zip codes.  If there is an error, the 
+      // function will return false and set the $last_error variable.
+      
+      if ($zip1 == $zip2)
+       return 0; // same zip code means 0 miles between. :)
+   
+   
+      // get details from database about each zip and exit if there is an error
+      
+      $details1 = $this->get_zip_point($zip1);
+      $details2 = $this->get_zip_point($zip2);
+      if ($details1 == false) {
+         $this->last_error = "No details found for zip code: $zip1";
+         return false;
+      }
+      if ($details2 == false) {
+         $this->last_error = "No details found for zip code: $zip2";
+         return false;
+      }     
+
+
+      // calculate the distance between the two points based on the lattitude
+      // and longitude pulled out of the database.
+      
+      $miles = $this->calculate_mileage($details1['lat'], $details2['lat'], $details1['lon'], $details2['lon']);
+      
+      
+      if ($this->units == _UNIT_KILOMETERS) return round($miles * _M2KM_FACTOR, $this->decimals);
+      else return round($miles, $this->decimals);       // must be miles
+      
+   }   
+
+   
+       /**
+        * 
+        * Lookups up a zip code and returns single array or multi-array based on sending multiple zip codes in array or just a string
+        * @param $zip
+        */
+       function lookup($zip, $options = array()) {
+               $default_options = 
+                       array(
+                               'bare' => false,        //set to true to strip outer Zipcode dimension
+                       );
+               $options = am($default_options, $options);
+               
+               if(is_array($zip)) {
+                       // find all
+                       $data = $this->find('all', array('conditions'=>array('Zipcode.zip_code'=>$zip), 'recursive' => -1));
+               } else {
+                       // find first
+                       $data = $this->find('first', array('conditions'=>array('Zipcode.zip_code'=>$zip), 'recursive' => -1));
+               }
+               
+               if($options['bare']) {
+                       $data = $data['Zipcode'];
+               }
+               return $data;
+       }
+   
+   /**
+    * 
+    * This returns all zip codes (even if one sent)
+    * @param $zip
+    */
+   function get_zip_details($zip) {
+         if (!$data = $this->find('all',array('conditions'=>array('zip_code'=>$zip)))){ 
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+
+   function get_details_by_city($cityname) {
+
+         if (!$data = $this->find('all', array('conditions'=>array('city LIKE'=>$cityname),'recursive'=>-1))) {
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+
+   function get_details_by_lat_lon($geolocation) {
+         if (!$data = $this->find('all', array('conditions'=>array('lat'=>$geolocation['latitude'],'lon'=>$geolocation['longitude']),'recursive'=>-1))) {
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+   function get_details_by_location($locationtext) {
+       
+         if (!$data = $this->find('all', array('conditions'=>array('locationtext LIKE'=>$locationtext),'recursive'=>-1))) { 
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+   
+  function get_details_by_county($county, $state_id){
+               if (!$data = $this->find('all', array('conditions'=>array('county LIKE'=>$county, 'state_prefix LIKE'=>$state_id),'recursive'=>-1))) { 
+                return false;
+           } else {
+                return $data;       
+           }
+    
+   }
+
+   
+   function get_locations_by_state($stateprefix) {
+      if (!$data = $this->find('all', array('conditions'=>array('state_prefix LIKE'=>$stateprefix),'recursive'=>-1,'order'=>array('zip_code'=>'asc')))){
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+
+   function get_locations_by_county($county) {
+  
+      if (!$data = $this->find('all', array('conditions'=>array('county LIKE'=>$county),'recursive'=>-1))){
+
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+
+   function get_counties_by_state($stateprefix) {
+  
+      if (!$data = $this->find('all', array('fields'=>array('DISTINCT county'),'conditions'=>array('state_prefix LIKE'=>$stateprefix),'recursive'=>-1,'order'=>array('county'=>'asc')))){
+         return false;
+      } else {
+         return $data;       
+      }
+   }
+
+   function get_zip_point($zip) {
+
+      // This function pulls just the lattitude and longitude from the
+      // database for a given zip code.
+      //$sql = "SELECT lat, lon from {$this->tablePrefix}zip_code WHERE zip_code='$zip'";
+      //$r = mysql_query($sql);
+
+      if (!$data = $this->find(array('zip_code'=>$zip), array('lat', 'lon'))) {
+         //$this->last_error = mysql_error();
+         return false;
+      } else {
+         //$row = mysql_fetch_array($r);
+         //mysql_free_result($r);
+         //var_dump($data['Zipcode']);
+         //return $row;
+         return $data['Zipcode'];       
+      }      
+   }
+
+   
+   function calculate_mileage($lat1, $lat2, $lon1, $lon2) {
+      // used internally, this function actually performs that calculation to
+      // determine the mileage between 2 points defined by lattitude and
+      // longitude coordinates.  This calculation is based on the code found
+      // at http://www.cryptnet.net/fsp/zipdy/
+       
+      // Convert lattitude/longitude (degrees) to radians for calculations
+      $lat1 = deg2rad($lat1);
+      $lon1 = deg2rad($lon1);
+      $lat2 = deg2rad($lat2);
+      $lon2 = deg2rad($lon2);
+      
+      // Find the deltas
+      $delta_lat = $lat2 - $lat1;
+      $delta_lon = $lon2 - $lon1;
+       
+      // Find the Great Circle distance 
+      $temp = pow(sin($delta_lat/2.0),2) + cos($lat1) * cos($lat2) * pow(sin($delta_lon/2.0),2);
+      $distance = 3956 * 2 * atan2(sqrt($temp),sqrt(1-$temp));
+
+      return $distance;
+   }
+   
+   function get_zips_in_range($zip, $range, $sort=1, $include_base = true, $options = array()) {
+               $default_options = array('datasource' => null, 'conditions' => array());
+               $options = Set::merge($default_options, $options);
+               
+      //echo 'kevin';
+      // returns an array of the zip codes within $range of $zip. Returns
+      // an array with keys as zip codes and values as the distance from 
+      // the zipcode defined in $zip.
+               //var_dump($zip,$range);
+      
+         if(is_array($zip)) {
+               //passing an array with zip code detail(s) known, don't need to lookup
+               if(isset($zip['latitude'])) {
+                       $zip['lat'] = $zip['latitude'];
+                       unset($zip['latitude']);
+               }
+               if(isset($zip['longitude'])) {
+                       $zip['lon'] = $zip['longitude'];
+                       unset($zip['longitude']);
+               }
+               $details = $zip;
+         } else {
+       $details = $this->get_zip_point($zip);  // base zip details
+         }
+
+      if ($details == false) return false;
+      
+      // This portion of the routine  calculates the minimum and maximum lat and
+      // long within a given range.  This portion of the code was written
+      // by Jeff Bearer (http://www.jeffbearer.com). This significanly decreases
+      // the time it takes to execute a query.  My demo took 3.2 seconds in 
+      // v1.0.0 and now executes in 0.4 seconds!  Greate job Jeff!
+      
+      // Find Max - Min Lat / Long for Radius and zero point and query
+      // only zips in that range.
+      
+     
+      $lat_range = $range/69.172;
+      $lon_range = abs($range/(cos($details['lat']) * 69.172));
+      $min_lat = number_format($details['lat'] - $lat_range, "4", ".", "");
+      $max_lat = number_format($details['lat'] + $lat_range, "4", ".", "");
+      $min_lon = number_format($details['lon'] - $lon_range, "4", ".", "");
+      $max_lon = number_format($details['lon'] + $lon_range, "4", ".", "");
+
+      $return = array();    // declared here for scope
+
+     /* $sql = "SELECT zip_code, lat, lon FROM zip_code ";
+      if (!$include_base) $sql .= "WHERE zip_code <> '$zip' AND ";
+      else $sql .= "WHERE "; 
+      $sql .= "lat BETWEEN '$min_lat' AND '$max_lat' 
+               AND lon BETWEEN '$min_lon' AND '$max_lon'"; */
+      
+      $conditions = array();
+      if($range === 'all') {
+               // don't want to have a range
+               // $conditions = array()
+      } else {
+             if(!$include_base) {
+               $conditions['zip_code'] = "<> $zip";
+             } else {
+               $conditions['lat BETWEEN ? AND ?'] = array($min_lat, $max_lat);
+               $conditions['lon BETWEEN ? AND ?'] = array($min_lon, $max_lon);
+             }
+      } 
+      
+      if($options['conditions']) {
+       $conditions = Set::merge($options['conditions'], $conditions);
+      }
+      
+      if($options['datasource']) {
+       $datasource =& ClassRegistry::init($options['datasource'], 'model');
+       $data = $datasource->find('all', array('conditions' =>$conditions, 'recursive' => -1));
+       
+       list($pluginName, $modelName) = pluginSplit($options['datasource']);
+       
+      } else {
+       $data = $this->find('all', array('conditions' =>$conditions));
+       $pluginName = null;
+       $modelName = 'Zipcode';
+      }
+      
+      if (!$data) {    // sql error
+               //var_dump($data);
+         //$this->last_error = mysql_error();
+         return false;
+         
+      } else {
+         //return;
+         /*while ($row = mysql_fetch_row($r)) {
+   
+            // loop through all 40 some thousand zip codes and determine whether
+            // or not it's within the specified range.
+            
+            $dist = $this->calculate_mileage($details[0],$row[1],$details[1],$row[2]);
+            if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR;
+            if ($dist <= $range) {
+               $return[str_pad($row[0], 5, "0", STR_PAD_LEFT)] = round($dist, $this->decimals);
+            }
+         }
+         mysql_free_result($r);*/
+       $zip1VarName = 'zip_code';
+       $zip1 = null;
+       if(isset($details['zip'])) {
+               $zip1 = $details['zip'];
+               $zip1VarName = 'zip';
+       } else if (isset($details['zipcode'])) {
+               $zip1 = $details['zipcode'];
+               $zip1VarName = 'zipcode';
+       } else if (isset($details['zip_code'])) {
+               $zip1 = $details['zip_code'];
+               $zip1VarName = 'zip_code';
+       }
+       
+       $zip2VarName = 'zip_code';
+       
+       $dataByZip = array();
+       foreach($data as $row) {
+               if(isset($row[$modelName]['lat']) and isset($row[$modelName]['lon'])) {
+                       $dist = $this->calculate_mileage($details['lat'],$row[$modelName]['lat'],$details['lon'],$row[$modelName]['lon']);
+               } else {
+                       $zip2 = null;
+                       if(isset($row[$modelName]['zip'])) {
+                               $zip2 = $row[$modelName]['zip'];
+                               $zip2VarName = 'zip';
+                       } else if (isset($row[$modelName]['zipcode'])) {
+                               $zip2 = $row[$modelName]['zipcode'];
+                               $zip2VarName = 'zipcode';
+                       } else if (isset($row[$modelName]['zip_code'])) {
+                               $zip2 = $row[$modelName]['zip_code'];
+                               $zip2VarName = 'zip_code';
+                       }
+                       
+                       $dist = $this->get_distance($zip1, $zip2);
+               }
+               
+            if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR;
+            if ($range === 'all' or $dist <= $range) {
+               $return[str_pad($row[$modelName][$zip2VarName], 5, "0", STR_PAD_LEFT)] = round($dist, $this->decimals);
+               $dataByZip[str_pad($row[$modelName][$zip2VarName], 5, "0", STR_PAD_LEFT)] = $row;
+            }
+       }
+      }
+      
+      // sort array
+      switch($sort)
+      {
+         case _ZIPS_SORT_BY_DISTANCE_ASC:
+            asort($return);
+            break;
+            
+         case _ZIPS_SORT_BY_DISTANCE_DESC:
+            arsort($return);
+            break;
+            
+         case _ZIPS_SORT_BY_ZIP_ASC:
+            ksort($return);
+            break;
+            
+         case _ZIPS_SORT_BY_ZIP_DESC:
+            krsort($return);
+            break; 
+      }
+      
+      $this->zipInRangeData = $return;
+      
+      if($options['datasource']) {
+       //merge database results back into return (with distance calculated)
+       $newReturn = array();
+       foreach($return as $zip => $distance) {
+               if(isset($dataByZip[$zip])) {
+                       $tmp = $dataByZip[$zip];
+                       $tmp['distance'] = $distance;
+                       $newReturn[] = $tmp;
+                       
+               }
+             }
+             $return = $newReturn;
+      }
+      
+      if (empty($return)) return false;
+      return $return;
+   }
+   
+   function get_detailed_zips_in_range($zip, $range, $sort=1, $include_base = true) {
+       // returns an array of the zip codes within $range of $zip with their details
+       //var_dump($zip,$range);
+   
+       $details = $this->get_zip_point($zip);  // base zip details
+
+       if ($details == false) return false;
+   
+       // This portion of the routine  calculates the minimum and maximum lat and
+       // long within a given range.  This portion of the code was written
+       // by Jeff Bearer (http://www.jeffbearer.com). This significanly decreases
+       // the time it takes to execute a query.  My demo took 3.2 seconds in
+       // v1.0.0 and now executes in 0.4 seconds!  Greate job Jeff!
+   
+       // Find Max - Min Lat / Long for Radius and zero point and query
+       // only zips in that range.
+       $lat_range = $range/69.172;
+       $lon_range = abs($range/(cos($details['lat']) * 69.172));
+       $min_lat = number_format($details['lat'] - $lat_range, "4", ".", "");
+       $max_lat = number_format($details['lat'] + $lat_range, "4", ".", "");
+       $min_lon = number_format($details['lon'] - $lon_range, "4", ".", "");
+       $max_lon = number_format($details['lon'] + $lon_range, "4", ".", "");
+   
+       $return = array();    // declared here for scope
+   
+       $conditions = array();
+       $conditions['z_primary'] = 'PRIMARY';
+       if(!$include_base) {
+               $conditions['zip_code'] = "<> $zip";
+       } else {
+               $conditions['lat BETWEEN ? AND ?'] = array($min_lat, $max_lat);
+               $conditions['lon BETWEEN ? AND ?'] = array($min_lon, $max_lon);
+       }
+   
+       if (!$data = $this->find('all', array('conditions' =>$conditions))) {    // sql error
+
+               return false;
+                
+       } else {
+               foreach($data as $row) {
+
+                       $dist = $this->calculate_mileage($details['lat'],$row['Zipcode']['lat'],$details['lon'],$row['Zipcode']['lon']);
+                       //$return['locationdetails'] = $this->find('all',array('conditions'=>array('zip_code'=>$zip)));
+                       if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR;
+                       if ($dist <= $range) {
+                               $row['Zipcode']['distance'] = round($dist, $this->decimals);
+                               $return[] = $row;
+                       }
+               }
+       }
+
+       // sort array
+       function dist_sort($a,$b) {
+               //var_dump($a['Zipcode']['distance']);
+               if($a['Zipcode']['distance'] > $b['Zipcode']['distance'])
+                       return 1;//here,if you return -1,return 1 below,the result will be descending
+               if($a['Zipcode']['distance'] < $b['Zipcode']['distance'])
+                       return -1;
+               if($a['Zipcode']['distance'] == $b['Zipcode']['distance'])
+                       return 0;
+       }
+       switch ($sort) {
+               case '_ZIPS_SORT_BY_DISTANCE_ASC':
+                       //asort($return);
+                       //var_dump('test');
+                       uasort($return, 'dist_sort');
+                       
+                       break;
+   
+               case '_ZIPS_SORT_BY_DISTANCE_DESC':
+                       arsort($return);
+                       break;
+       }
+   
+       $this->zipInRangeData = $return;
+       //var_dump($return);
+       if (empty($return)) return false;
+       return $return;
+   }
+   
+
+       /**
+       * Returns a flat array (e.g. 04072,03801, etc.) for SQL IN statements
+    *
+    * @return array
+    */
+       function getZipsInRangeFlat() {
+               return array_keys($this->zipInRangeData);
+       }
+   
+   
+   function zipRangeOrderCase($zips = array(), $column_name = 'zip') {
+   
+               /*Order by (CASE City
+                WHEN 'Paris'   THEN 1
+                               WHEN 'Chicago'  THEN 2
+                               WHEN 'Boston'   THEN 3
+                               WHEN 'New York' THEN 4
+                               WHEN 'Berkeley' THEN 5
+                               WHEN 'Dallas'   THEN 6
+                               ELSE 100 END) ASC */
+               $order_by = '';
+               $zip_count = count($zips);
+               for($x=0; $x < $zip_count; $x++) {
+                       $order_by .= " WHEN {$zips[$x]} THEN ". ($x + 1);
+               }
+          
+               if(!empty($order_by)) {
+                       $order_by = "(CASE $column_name". $order_by ." ELSE 100 END) ASC";
+                       return $order_by;
+               } else {
+                       return false;
+               }
+   
+   }   
+       
+       /**
+        * 
+        * Takes a string [from a form]
+        * @param $search string
+        * @param $options array
+        * return false if no zip found; or text if a single zip code or an array if multiple zip codes
+        */
+       function findZipFromText($search, $options = array()) {
+               App::import('Sanitize');
+               
+               $default_options = 
+                       array(
+                       'distance' => 0,
+                       'stateList' => array(), //supply list of states, array('SN' => 'State Name');, to use instead of full geography helper list... will increase performance if you supply a small list
+                       'defaultState' => Configure::read('avorders.avengerDefaultState'), //array('ME'),       //an array of state abbreviations to use by default when a state isn't found
+                       'firstMatch' => true,   //will return first zip code that matches if distance is 0 (otherwise, returns all zipcodes)
+                       'primary'       => true,        // set to false to return all zip codes, not just primary zip codes
+                       );
+               $options = am($default_options, $options);
+               
+               if(is_numeric($search)) {
+                       //assume it's a zip code
+                       $zip = trim($search);
+                       $zip = substr($zip, 0, 5);      //make sure it's only 5 numbers
+                       
+               } else {
+                       // searching by a string
+                       // 1. clean/sanitize data
+                       // 2a. see if preg_match finds a zip code in user-entered text, if so use it
+                       // 2b. otherwise, explode on spaces, b/c each word needs can be matched, then find unique zip codes
+                       // 3. create conditions, add in distance condition and zips in range if specified
+                       // 4. append to join conditions
+                       
+                       $location_array = array();
+                       $location = Sanitize::paranoid($search, array(' ', ',', '.'));
+                       $location = trim($location);
+                       
+                       if(preg_match("/([0-9]{5})(-[0-9]{4})?/i", $location, $match)) {
+                               //zip code entered with text, use it
+                               $zip = $match[0];
+                       } else {
+                               App::import('Helper', 'Geography');
+                               $geography = new GeographyHelper();
+                               
+                               $terms = array();
+                               $stateFound = false;
+                               
+                               // zip code not in text, so try to find zipcode using city, state if known
+                               // check to see if there is a comma, if so explode on that: portsmouth, new hampshire
+                               if(strpos($location, ',') !== false) {
+                                       $location_array = explode(',', $location);
+                               } else {
+                                       //look for state names (not abbreviations) contained within search term
+                                       $stateAbbr = $geography->isAState($location, array('search' => true, 'list' => $options['stateList'])); // looking to see if a state is buried in this query 
+                                       if($stateAbbr) {
+                                               // state found, set to state_prefix and remove from search terms (for down-the-line processing)
+                                               $stateFound = true;
+                                               $terms['Zipcode.state_prefix'] = $stateAbbr['state'];
+                                               $location = str_ireplace($stateAbbr['term'], '', $location);
+                                               $location = trim($location);
+                                       }
+                                       
+                                       // explode remaining search terms on spaces
+                                       $location_array = explode(' ', $location);
+                               }
+                                       
+                               $cityTerms = array();
+                               foreach($location_array as $term) {
+                                       
+                                       if(!$stateFound) {
+                                               $stateAbbr = $geography->isAState($term);
+                                               if($stateAbbr) {
+                                                       //we know this is a state, and the 2 letter abbreviation
+                                                       $terms['Zipcode.state_prefix'] = $stateAbbr;
+                                                       $stateFound = true;
+                                               } else {
+                                                       //not a state, must be a city, eliminated everything else
+                                                       $cityTerm = $term .'%';
+                                                       if(!empty($cityTerms)) {
+                                                               $cityTerm = '%'. $cityTerm;     // if it's not the first word, need to allow double-sided wild card
+                                                       }
+                                                       $cityTerms[] = $cityTerm;
+                                               }
+                                       } else {
+                                               //state already found, these terms must be a city
+                                                $cityTerm = $term .'%';
+                                                       if(!empty($cityTerms)) {
+                                                               $cityTerm = '%'. $cityTerm;     // if it's not the first word, need to allow double-sided wild card
+                                                       }
+                                                       $cityTerms[] = $cityTerm;
+                                       }
+                               }
+                               
+                               if(!empty($cityTerms)) {
+                                       if(count($cityTerms) == 1) {
+                                               $terms['Zipcode.city LIKE'] = bootArrayFirstValue($cityTerms);
+                                       } else {
+                                               $terms['AND'] = array();
+                                               foreach($cityTerms as $term) {
+                                                       $terms['AND'][] = array('Zipcode.city LIKE' => $term);
+                                               }
+                                       }
+                               }
+                               
+                               //default state to ME, b/c this is originally for MyMaineTherapist
+                               if(!isset($terms['Zipcode.state_prefix'])) {
+                                       $terms['Zipcode.state_prefix'] = $options['defaultState'];
+                               }
+                               
+                               // see if we are checking for primary-only zip codes
+                               if($options['primary']) {
+                                       $terms['Zipcode.z_primary'] = 'PRIMARY';
+                               }
+                               
+                               $zips = $this->find('all', array('conditions' => $terms, 'fields' => 'Zipcode.city, Zipcode.state_prefix, Zipcode.zip_code, Zipcode.z_primary', 'group' => 'zip_code', 'recursive' => -1));
+                               if($zips) {
+                                       if($options['firstMatch'] or !empty($options['distance'])) {
+                                               // only want the first zip code (if distance is specified, firstMatch is implied) 
+                                               $zip = bootArrayFirstValue($zips);
+                                               $zip = isset($zip['Zipcode']['zip_code']) ? $zip['Zipcode']['zip_code'] : false;
+                                       } else {
+                                               // for multiple zip codes, you should show a list of available zip codes and allow user to pick zip code in calling function
+                                               $zip = Set::extract('/Zipcode/zip_code', $zips);
+                                       }
+                               }
+                       }
+               }
+               
+               //      ADD IN DISTANCE-BASED SEARCHING
+               if(!empty($options['distance']) and isset($zip) and $zip) {
+                       
+                       if($options['distance'] == 'all') {
+                               $distance = 'all';
+                       } else {
+                               $distance = (int) $options['distance'];
+                               $distance = ($distance > 100) ? 100 : $distance;        //cap it at 100, that's a lot of zipcodes
+                       }
+                                
+                       $zipsInRange = $this->get_zips_in_range($zip, $distance);
+                       if($zipsInRange) {
+                               $zip = array_keys($zipsInRange);
+                       }
+               } 
+               
+               
+               
+               if(!isset($zip) or !$zip) {
+                       // basically, turning zipcode off, so no results will be found... 
+                       return false;
+               }
+
+               return $zip;
+               
+       }
+       
+       
+       /**
+        * Performs a Web Service call to FreeGeoIP.net to get IP Whois Information
+        * @param string $ipaddress
+        * @return array $location zip, lat, long, etc. of ip address
+        */
+       function fetchFreeGeoIpLocation($ipaddress) {
+               //http://freegeoip.net/{format}/{ip_or_hostname}
+               // create curl resource
+               $location = array();
+               
+               
+               $ipurl = 'http://freegeoip.net/json/'.$ipaddress;
+               
+               $ch = curl_init();
+               // set url
+               curl_setopt( $ch, CURLOPT_TIMEOUT_MS, 1500 ); 
+               curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT_MS, 1500 ); 
+               
+               curl_setopt($ch, CURLOPT_URL, $ipurl);
+               //return the transfer as a string
+               curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+               // $output contains the output string
+               $output = curl_exec($ch);
+               // close curl resource to free up system resources
+               curl_close($ch);
+           if(is_string($output) and !empty($output)){
+            $location = json_decode($output, true);
+           
+            if(!isset($location['zipcode']) or empty($location['zipcode'])){
+                //need to find zip code based on geocoded lat/long
+                if(isset($location['latitude']) and !empty($location['latitude']) and isset($location['longitude']) and !empty($location['longitude'])) {
+                    $zipcode = $this->get_zips_in_range($location, 10);    //no zip code supplied, grab the one that is closest within 10 miles
+                    if(is_array($zipcode) and !empty($zipcode)){
+                       $location['zipcode'] = bootArrayFirstValue(array_keys($zipcode));
+                    }else{
+                       $location['zipcode'] = '10001';
+                    }
+                }
+            }
+            
+            if(is_array($location) and !empty($location)) {
+                   // change to match format from ZipCode table column names
+                   $location['zip_code'] = $location['zipcode'];
+                   unset($location['zipcode']);
+                   
+                   $location['lat'] = $location['latitude'];
+                   unset($location['latitude']);
+                   
+                   $location['lon'] = $location['longitude'];
+                   unset($location['longitude']);
+                   
+                   $location['state_prefix'] = $location['region_code'];
+                   unset($location['region_code']);
+                   
+                   $location['country'] = $location['country_code'];
+                   unset($location['country_code']);
+                   
+                   $location['locationtext'] = $location['city'].', '.$location['state_prefix'];
+            }
+            
+        } else {
+            $location = false;
+        }
+               
+               
+               return $location;
+               
+       }
+       
+       function getClosestLocation($location, $options = array()) {
+               $default_options = array('range' => 50);
+               $options = Set::merge($default_options, $options);
+       
+               if($this->hasField('active')) {
+                       $params['conditions'] = array('AvordersStore.active'=>1);
+               }
+               return bootArrayFirstValue($this->get_zips_in_range($location, $options['range'], 1, true, null));
+       }
+    
+}
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh b/production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh
new file mode 100644 (file)
index 0000000..e2c8755
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# some code i wrote to add to revamp that turned out to be unsuitable.
+# but it corrects a problem in cakelampvm v002 release that i find annoying,
+# so here it is as its own file.
+
+# clean out some old files that were not checked in in mapsdemo.
+echo Doing some git repository maintenance in fred account.
+#
+# change over to fred folder
+pushd /home/fred
+exit_on_error "changing dir to fred's home; what have you done with fred?"
+
+pushd apps/mapsdemo/avenger5
+exit_on_error "changing dir to mapsdemo app"
+
+rpuffer . &>/dev/null
+if [ $? -ne 0 ]; then
+  # it seems our old files are still conflicting this.
+  if [ -f config/config_google.php ]; then
+    \rm -f config/config_google.php
+    exit_on_error "removing old config for google"
+  fi
+  if [ -f config/app.php ]; then
+    \rm -f config/app.php
+    exit_on_error "removing old config for app"
+  fi
+
+  git reset --hard HEAD
+  exit_on_error "resetting git's hard head"
+
+  rpuffer .
+#hmmm: use output saver thing when that exists.
+  exit_on_error "puffing out mapsdemo app after inadequate corrective action was taken"
+fi
+
+popd
+
+popd
+#...coolness, if we got to here.
+
+
diff --git a/production/example_apps/zippy_maps/scripts/launch_local_cake.sh b/production/example_apps/zippy_maps/scripts/launch_local_cake.sh
new file mode 100644 (file)
index 0000000..09e2cb5
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )"
+pushd $THIS_FOLDER/..
+
+# does this help?
+export DEBUG=true
+
+./bin/cake server -p 8765
+
+popd
+
+
diff --git a/production/example_apps/zippy_maps/scripts/launch_serene_cake.sh b/production/example_apps/zippy_maps/scripts/launch_serene_cake.sh
new file mode 100644 (file)
index 0000000..c5c79a8
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )"
+pushd $THIS_FOLDER/..
+
+# does this help?
+export DEBUG=true
+
+./bin/cake server -H 192.241.191.154 -p 12738
+
+popd
+
+
diff --git a/production/example_apps/zippy_maps/scripts/prepare_project.sh b/production/example_apps/zippy_maps/scripts/prepare_project.sh
new file mode 100644 (file)
index 0000000..dfaf24a
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+#hmmm: test this and make sure it's still right.
+#hmmm: also test that it's inclusive of all the necessary steps for success.
+
+#hmmm: aha, this is definitely missing the necessary link creations still.
+
+
+# bails if any step fails.
+function check_result() {
+  if [ $? -ne 0 ]; then
+    echo -e "failed on: $*"
+    error_sound
+    exit 1
+  fi
+}
+
+THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )"
+pushd $THIS_FOLDER/..
+
+echo running composer update process...
+composer update
+check_result "updating project with composer"
+
+echo -e "\n\nHave the two config files app.php and config_google.php been configured yet AND has the database for the app been added to mysql? (y/N)"
+read line
+
+if [ $line != 'y' -a $line != 'Y' -a $line != 'yes' -a $line != 'YES' ]; then
+  echo "Please configure the two config files using their default versions as templates (see the config directory for app.default.php and config_google.default.php)"
+  exit 1
+fi
+
+echo running migration code to build the database...
+./bin/cake migrations migrate
+check_result "running the database migrations"
+
+echo making asset symlinks
+./bin/cake plugin assets symlink
+check_result "symlinking web assets"
+
+
+
diff --git a/production/example_apps/zippy_maps/src/Application.php b/production/example_apps/zippy_maps/src/Application.php
new file mode 100644 (file)
index 0000000..9c5999b
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.3.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App;
+
+use Cake\Core\Configure;
+use Cake\Error\Middleware\ErrorHandlerMiddleware;
+use Cake\Http\BaseApplication;
+use Cake\Routing\Middleware\AssetMiddleware;
+use Cake\Routing\Middleware\RoutingMiddleware;
+
+/**
+ * Application setup class.
+ *
+ * This defines the bootstrapping logic and middleware layers you
+ * want to use in your application.
+ */
+class Application extends BaseApplication
+{
+    /**
+     * Setup the middleware your application will use.
+     *
+     * @param \Cake\Http\MiddlewareQueue $middleware The middleware queue to setup.
+     * @return \Cake\Http\MiddlewareQueue The updated middleware.
+     */
+    public function middleware($middleware)
+    {
+        $middleware
+            // Catch any exceptions in the lower layers,
+            // and make an error page/response
+            ->add(ErrorHandlerMiddleware::class)
+
+            // Handle plugin/theme assets like CakePHP normally does.
+            ->add(AssetMiddleware::class)
+
+            // Apply routing
+            ->add(RoutingMiddleware::class);
+
+        return $middleware;
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Console/Installer.php b/production/example_apps/zippy_maps/src/Console/Installer.php
new file mode 100644 (file)
index 0000000..0756096
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Console;
+
+use Cake\Utility\Security;
+use Composer\Script\Event;
+use Exception;
+
+/**
+ * Provides installation hooks for when this application is installed via
+ * composer. Customize this class to suit your needs.
+ */
+class Installer
+{
+
+    /**
+     * Does some routine installation tasks so people don't have to.
+     *
+     * @param \Composer\Script\Event $event The composer event object.
+     * @throws \Exception Exception raised by validator.
+     * @return void
+     */
+    public static function postInstall(Event $event)
+    {
+        $io = $event->getIO();
+
+        $rootDir = dirname(dirname(__DIR__));
+
+        static::createAppConfig($rootDir, $io);
+        static::createWritableDirectories($rootDir, $io);
+
+        // ask if the permissions should be changed
+        if ($io->isInteractive()) {
+            $validator = function ($arg) {
+                if (in_array($arg, ['Y', 'y', 'N', 'n'])) {
+                    return $arg;
+                }
+                throw new Exception('This is not a valid answer. Please choose Y or n.');
+            };
+            $setFolderPermissions = $io->askAndValidate(
+                '<info>Set Folder Permissions ? (Default to Y)</info> [<comment>Y,n</comment>]? ',
+                $validator,
+                10,
+                'Y'
+            );
+
+            if (in_array($setFolderPermissions, ['Y', 'y'])) {
+                static::setFolderPermissions($rootDir, $io);
+            }
+        } else {
+            static::setFolderPermissions($rootDir, $io);
+        }
+
+        static::setSecuritySalt($rootDir, $io);
+
+        if (class_exists('\Cake\Codeception\Console\Installer')) {
+            \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event);
+        }
+    }
+
+    /**
+     * Create the config/app.php file if it does not exist.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function createAppConfig($dir, $io)
+    {
+        $appConfig = $dir . '/config/app.php';
+        $defaultConfig = $dir . '/config/app.default.php';
+        if (!file_exists($appConfig)) {
+            copy($defaultConfig, $appConfig);
+            $io->write('Created `config/app.php` file');
+        }
+    }
+
+    /**
+     * Create the `logs` and `tmp` directories.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function createWritableDirectories($dir, $io)
+    {
+        $paths = [
+            'logs',
+            'tmp',
+            'tmp/cache',
+            'tmp/cache/models',
+            'tmp/cache/persistent',
+            'tmp/cache/views',
+            'tmp/sessions',
+            'tmp/tests'
+        ];
+
+        foreach ($paths as $path) {
+            $path = $dir . '/' . $path;
+            if (!file_exists($path)) {
+                mkdir($path);
+                $io->write('Created `' . $path . '` directory');
+            }
+        }
+    }
+
+    /**
+     * Set globally writable permissions on the "tmp" and "logs" directory.
+     *
+     * This is not the most secure default, but it gets people up and running quickly.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function setFolderPermissions($dir, $io)
+    {
+        // Change the permissions on a path and output the results.
+        $changePerms = function ($path, $perms, $io) {
+            // Get permission bits from stat(2) result.
+            $currentPerms = fileperms($path) & 0777;
+            if (($currentPerms & $perms) == $perms) {
+                return;
+            }
+
+            $res = chmod($path, $currentPerms | $perms);
+            if ($res) {
+                $io->write('Permissions set on ' . $path);
+            } else {
+                $io->write('Failed to set permissions on ' . $path);
+            }
+        };
+
+        $walker = function ($dir, $perms, $io) use (&$walker, $changePerms) {
+            $files = array_diff(scandir($dir), ['.', '..']);
+            foreach ($files as $file) {
+                $path = $dir . '/' . $file;
+
+                if (!is_dir($path)) {
+                    continue;
+                }
+
+                $changePerms($path, $perms, $io);
+                $walker($path, $perms, $io);
+            }
+        };
+
+        $worldWritable = bindec('0000000111');
+        $walker($dir . '/tmp', $worldWritable, $io);
+        $changePerms($dir . '/tmp', $worldWritable, $io);
+        $changePerms($dir . '/logs', $worldWritable, $io);
+    }
+
+    /**
+     * Set the security.salt value in the application's config file.
+     *
+     * @param string $dir The application's root directory.
+     * @param \Composer\IO\IOInterface $io IO interface to write to console.
+     * @return void
+     */
+    public static function setSecuritySalt($dir, $io)
+    {
+        $config = $dir . '/config/app.php';
+        $content = file_get_contents($config);
+
+        $newKey = hash('sha256', Security::randomBytes(64));
+        $content = str_replace('__SALT__', $newKey, $content, $count);
+
+        if ($count == 0) {
+            $io->write('No Security.salt placeholder to replace.');
+
+            return;
+        }
+
+        $result = file_put_contents($config, $content);
+        if ($result) {
+            $io->write('Updated Security.salt value in config/app.php');
+
+            return;
+        }
+        $io->write('Unable to update Security.salt value.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Controller/AppController.php b/production/example_apps/zippy_maps/src/Controller/AppController.php
new file mode 100644 (file)
index 0000000..7483724
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     0.2.9
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Controller\Controller;
+use Cake\Event\Event;
+
+/**
+ * Application Controller
+ *
+ * Add your application-wide methods in the class below, your controllers
+ * will inherit them.
+ *
+ * @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller
+ */
+class AppController extends Controller
+{      
+    /**
+     * Initialization hook method.
+     *
+     * Use this method to add common initialization code like loading components.
+     *
+     * e.g. `$this->loadComponent('Security');`
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        parent::initialize();
+
+        $this->loadComponent('RequestHandler');
+        $this->loadComponent('Flash');
+
+        /*
+         * Enable the following components for recommended CakePHP security settings.
+         * see http://book.cakephp.org/3.0/en/controllers/components/security.html
+         */
+        //$this->loadComponent('Security');
+        //$this->loadComponent('Csrf');
+    }
+
+    /**
+     * Before render callback.
+     *
+     * @param \Cake\Event\Event $event The beforeRender event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeRender(Event $event)
+    {
+        if (!array_key_exists('_serialize', $this->viewVars) &&
+            in_array($this->response->type(), ['application/json', 'application/xml'])
+        ) {
+            $this->set('_serialize', true);
+        }
+    }
+    
+    
+    
+}
diff --git a/production/example_apps/zippy_maps/src/Controller/CategoriesController.php b/production/example_apps/zippy_maps/src/Controller/CategoriesController.php
new file mode 100644 (file)
index 0000000..eeacbad
--- /dev/null
@@ -0,0 +1,423 @@
+<?php
+namespace App\Controller;
+
+use App\Controller\AppController;
+use Avmaps\Controller\Component\SimpleMapsComponent;
+use Cake\Log\Log;
+
+/**
+ * Categories Controller
+ *
+ * @property \App\Model\Table\CategoriesTable $Categories
+ */
+class CategoriesController extends AppController
+{      
+       // keeps track of the API key to be used for our google queries, if one is known.
+       private $api_key = null;
+       
+       public function initialize()
+       {
+               parent::initialize();
+               
+               // load up the request handler to make processing easier on ajax requests.
+               $this->loadComponent('RequestHandler');         
+               
+               // configure the request handler to deal with json encoding.
+               $this->RequestHandler->config('inputTypeMap.json', ['json_decode', true]);              
+                               
+               $this->api_key = SimpleMapsComponent::getGoogleAPIKey();
+               
+               // allow simple access to location db.
+               $this->loadModel ( 'Locations' );
+               
+       }
+       
+
+
+    /**
+     * Index method
+     *
+     * @return \Cake\Network\Response|null
+     */
+    public function index()
+    {
+        $categories = $this->paginate($this->Categories);
+
+        $this->set(compact('categories'));
+        $this->set('_serialize', ['categories']);
+    }
+
+    /**
+     * View method
+     *
+     * @param string|null $id Category id.
+     * @return \Cake\Network\Response|null
+     * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+     */
+    public function view($id = null)
+    {
+        $category = $this->Categories->get($id, [
+                       'contain' => ['Locations']
+        ]);
+
+        $this->set('category', $category);
+        $this->set('_serialize', ['category']);
+        
+        // query all the locations belonging to this category but only retrieve part of the info.
+       $locationBits = $this->Categories->CategoriesLocations->find('list', [
+                       'conditions' => [ 'category_id' => $id ],
+                       'contain' => ['Locations'],
+                       'valueField' => function ($row) {
+                               return $row->location->get('lat')
+                                . ',' . $row->location->get('lng')
+                               . ' ' . $row->location->get('location');
+                       }
+       ]);
+       $this->set('locationBits', $locationBits);
+    }
+    
+    /**
+     * queries the locations to display on a map given an "id" to lookup in categories table.
+     */
+    public function map($id = null)
+    {
+       $category = $this->Categories->get($id, [
+                       'contain' => ['Locations']
+       ]);
+       
+       $locationsFound = $this->Categories->getLocationsInCategory($id);
+       $this->set('locationsInCategory', $locationsFound);     
+
+       // grab the flags in requests.
+       $parms = $this->request->getQueryParams();
+       
+       // we will cluster by default, but they can also pass the clustering flag with 0 or 1.
+       $clustering = (array_key_exists('clustering', $parms) && ($parms['clustering'] == '1'))
+               || !array_key_exists('clustering', $parms);
+       //Log::Debug('clustering is: ' . var_export($clustering, true));
+       
+       // set up the selected items in our config chooser.
+       $selectedList = [];     
+       if ($clustering) {
+               array_push($selectedList, 'clustering');
+       }
+       $this->set('selectedList', $selectedList);
+               
+       // pass the pre-loading function in for the map element.
+       $this->set('dbProcessor', $this);
+       $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInCategory, $category );');      
+       
+       if ($this->request->is(['post', 'put'])) {
+                       //, 'patch'])) {
+               $postData = $this->request->getData('view_options')['_ids'];
+               
+               $new_clustering = is_array($postData) && in_array('clustering', $postData);
+               
+               if ($clustering != $new_clustering) {
+                       $this->redirect(['action' => 'map', 
+                                       '0' => $id,
+                                       '?' => [
+                                                       'clustering' => $new_clustering,
+                                       ]
+                       ]);
+               }
+       }
+       
+       $this->set('category', $category);
+               
+//             $this->set('_serialize', ['category']);
+    }
+    
+    /**
+     * processes a location row by extracting the important information into an array.
+     * separates the db structure from the pieces needed for google maps.
+     */
+    public function processRow(& $location_row)
+    {
+       return [
+               'lat' => $location_row ['location'] ['lat'],
+               'lng' => $location_row ['location'] ['lng'],
+               'title' => $location_row ['location'] ['name'],
+               // kludge below adds extra space on content, since someone is not left justifying these.
+               'content' => h ( $location_row ['location'] ['location'] ) . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
+                       ];
+    }
+    
+    public function extractCategoryImage(& $category)
+    {
+       return $category->image;
+    }
+    
+    
+    /**
+     * attempts to jump to the center of the category, given a particular interpretation of the
+     * category.  if possible we will decide that the category is a state name, and then attempt
+     * to jump to the center of that state.
+     * will also show markers in the category.
+     */
+    public function center($id = null)
+    {
+       $category = $this->Categories->get($id, [
+                       'contain' => ['Locations']
+       ]);
+       
+       // grab the flags in requests.
+       $parms = $this->request->getQueryParams();
+       
+       // we will cluster by default, but they can also pass the clustering flag with 0 or 1.
+       $clustering = (array_key_exists('clustering', $parms) && ($parms['clustering'] == '1'))
+               || !array_key_exists('clustering', $parms);
+       //Log::Debug('clustering is: ' . var_export($clustering, true));
+       
+       // set up the selected items in our config chooser.
+       $selectedList = [];
+       if ($clustering) {
+               array_push($selectedList, 'clustering');
+       }
+       $this->set('selectedList', $selectedList);
+       
+       $state = null;
+       // interpret the category name as a state if possible.
+       if (substr($category->name, 0, 3) == 'US-') {
+               // bingo, we have a US prefix on the string, so decide what state they mean.
+               $state = substr($category->name, 3, 2);
+               
+       }
+       // perform the lookup to get the readable name.  otherwise a state like indiana (IN) will
+       // not get geocoded properly.  probably others as well.
+       $state = SimpleMapsComponent::lookupStateFromAbbreviation($state);
+       
+       $this->set('state', $state);
+       
+       Log::debug('state was found as: ' . $state);
+
+       if ($state !== null) {
+                       $centeredPoint = SimpleMapsComponent::geocode($state . " USA", [
+                               'key' => $this->api_key
+                       ]);
+                       $mapCenter = [ 'lat' => $centeredPoint[0], 'lng' => $centeredPoint[1] ] ;
+                       $this->set('mapCenter', $mapCenter);
+                       Log::Debug('computed a map center of: ' . var_export($mapCenter, true));
+       }   
+       
+       
+       // thoughts on algorithm: is the center of the state according to google what we want to rely on?
+       // we could at least start there, record the lat/longs and then edit them later as we decide.           
+
+       $radius = null;
+       $lat = null;
+       $long = null;
+       if ($mapCenter) {
+               $radius = 40; // miles from center to show markers.
+               $lat = $mapCenter['lat'];
+               $long = $mapCenter['lng'];
+       }       
+       
+       Log::Debug('given lat=' . $lat . ' long='.  $long . ' radius=' . $radius);
+       
+       Log::Debug('loading locations in category within radius');
+       
+       // compute the lat/long bounding box for our search.
+       $bounds = SimpleMapsComponent::calculateLatLongBoundingBox ( $lat, $long, $radius );
+       
+       if (! $bounds) {
+               Log::Debug("failed to calculate the bounding box!");
+       } else {
+               Log::Debug("bounding box: " . var_export($bounds, true));
+       }
+       
+       // query all the locations belonging to this category within the box.
+       $locationsInCategory = $this->Categories->getLocationsInCategoryInBox($id,
+                       $bounds [0], $bounds [1], $bounds [2], $bounds [3] );
+       
+       $this->set('locationsInCategory', $locationsInCategory);
+       
+       $this->set('dbProcessor', $this);       
+       $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInCategory, $category );');
+       
+       if ($this->request->is(['post', 'put'])) {
+               //, 'patch'])) {
+               $postData = $this->request->getData('view_options')['_ids'];
+               
+               $new_clustering = is_array($postData) && in_array('clustering', $postData);
+               
+               if ($clustering != $new_clustering) {
+                       $this->redirect(['action' => 'map',
+                                       '0' => $id,
+                                       '?' => [
+                                                       'clustering' => $new_clustering,
+                                       ]
+                       ]);
+               }
+       }
+       
+       $this->set('category', $category);
+//             $this->set('_serialize', ['category','selectedList']);
+    }
+    
+    /**
+     * Add method
+     *
+     * @return \Cake\Network\Response|null Redirects on successful add, renders view otherwise.
+     */
+    public function add()
+    {
+        $category = $this->Categories->newEntity();
+        if ($this->request->is('post')) {
+            $category = $this->Categories->patchEntity($category, $this->request->getData());
+            if ($this->Categories->save($category)) {
+                $this->Flash->success(__('The category has been saved.'));
+
+                return $this->redirect(['action' => 'index']);
+            }
+            $this->Flash->error(__('The category could not be saved. Please, try again.'));
+        }
+        $this->set(compact('category'));
+        $this->set('_serialize', ['category']);
+    }
+
+    /**
+     * Edit method
+     *
+     * @param string|null $id Category id.
+     * @return \Cake\Network\Response|null Redirects on successful edit, renders view otherwise.
+     * @throws \Cake\Network\Exception\NotFoundException When record not found.
+     */
+    public function edit($id = null)
+    {
+        $category = $this->Categories->get($id, [
+            'contain' => []
+        ]);
+        if ($this->request->is(['patch', 'post', 'put'])) {
+            $category = $this->Categories->patchEntity($category, $this->request->getData());
+            if ($this->Categories->save($category)) {
+                $this->Flash->success(__('The category has been saved.'));
+
+                return $this->redirect(['action' => 'index']);
+            }
+            $this->Flash->error(__('The category could not be saved. Please, try again.'));
+        }
+        $this->set(compact('category'));
+        $this->set('_serialize', ['category']);
+    }
+
+    /**
+     * Delete method
+     *
+     * @param string|null $id Category id.
+     * @return \Cake\Network\Response|null Redirects to index.
+     * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+     */
+    public function delete($id = null)
+    {
+        $this->request->allowMethod(['post', 'delete']);
+        $category = $this->Categories->get($id);
+        if ($this->Categories->delete($category)) {
+            $this->Flash->success(__('The category has been deleted.'));
+        } else {
+            $this->Flash->error(__('The category could not be deleted. Please, try again.'));
+        }
+
+        return $this->redirect(['action' => 'index']);
+    }
+    
+    /**
+     * provides ajax friendly responses.  expects to be passed 'category' in post data.
+     * requires bounding box for lookup be passed as 'sw_lat', 'sw_lng', 'ne_lat', 'ne_lng'. 
+     */
+    public function lookupajax()
+    {
+       $reqData = $this->request->getData();
+       
+       Log::Debug('got to lookup with data: ' . var_export($reqData, true));
+
+       // check that this is a post method, since we don't support anything else.
+       if (! $this->request->is(['post'])) {
+               die('this is a post method');
+       }
+
+       if (array_key_exists('action', $reqData)) {
+               $action = $reqData['action'];
+               
+               if (strcasecmp($action, 'lookupBox') == 0) {
+                       $this->findLocationsInCategoryWithinBounds($reqData);
+               } else if (strcasecmp($action, 'getInfo') == 0) {
+                       $this->getInfoOnLocation($reqData);
+               } else {
+                       die('lookupajax call was given unknown action: ' . $action);                            
+               }
+               
+       } else {
+               die('lookupajax call has no action specified');
+       }
+    }
+    
+    public function findLocationsInCategoryWithinBounds($reqData)
+    {  
+       if (array_key_exists('category', $reqData)) {
+               $id = $reqData['category'];
+       } else {
+               // throw an exception here?
+               $message = 'failed to find category id in request data';
+               Log::Debug($message);
+               die($message);
+       }
+       
+       $category = $this->Categories->get($id, [
+                       'contain' => ['Locations']
+       ]);
+       $this->set('category', $category);
+       
+       if (array_key_exists('sw_lat', $reqData)) {
+               $sw_lat = $reqData['sw_lat'];
+       }
+       if (array_key_exists('sw_lng', $reqData)) {
+               $sw_lng = $reqData['sw_lng'];
+       }
+       if (array_key_exists('ne_lat', $reqData)) {
+               $ne_lat = $reqData['ne_lat'];
+       }
+       if (array_key_exists('ne_lng', $reqData)) {
+               $ne_lng = $reqData['ne_lng'];
+       }
+       
+       //temp!  fails over to using whole range.
+       if ($sw_lat === null) { $sw_lat = -90; }
+       if ($sw_lng === null) { $sw_lng = -180; }
+       if ($ne_lat === null) { $ne_lat = 90; }
+       if ($ne_lng === null) { $ne_lng = 180; }
+
+       $start = null;
+       if (array_key_exists('start', $reqData)) {
+               $start = $reqData['start'];
+       }
+       $end = null;
+       if (array_key_exists('end', $reqData)) {
+               $end = $reqData['end'];
+       }
+       
+       // lookup the locations inside that box and store for view.
+       $locationsToSerialize = $this->Categories->getChewedLocationsInCategoryInBox($id, $sw_lat, $sw_lng, $ne_lat, $ne_lng, $start, $end);            
+       //Log::debug('before encoding, php array looks like: ' . var_export($locationsToSerialize, true));      
+       Log::Debug("returning json now...");    
+       $encoded = json_encode($locationsToSerialize);
+       //      Log::debug('encoded json is: ' . var_export($encoded, true));
+       die($encoded);          
+    }
+    
+    public function getInfoOnLocation($reqData)
+    {
+       if (array_key_exists('id', $reqData)) {
+               $id = $reqData['id'];
+       } else {
+               // throw an exception here?
+               $message = 'failed to find location id in request data';
+               Log::Debug($message);
+               die($message);
+       }
+       
+       $location = $this->Locations->get($id, [
+       ]);
+       return die(json_encode($location));
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Controller/Component/empty b/production/example_apps/zippy_maps/src/Controller/Component/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/src/Controller/ErrorController.php b/production/example_apps/zippy_maps/src/Controller/ErrorController.php
new file mode 100644 (file)
index 0000000..cf0ebd5
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.3.4
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Event\Event;
+
+/**
+ * Error Handling Controller
+ *
+ * Controller used by ExceptionRenderer to render error responses.
+ */
+class ErrorController extends AppController
+{
+    /**
+     * Initialization hook method.
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        $this->loadComponent('RequestHandler');
+    }
+
+    /**
+     * beforeFilter callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeFilter(Event $event)
+    {
+    }
+
+    /**
+     * beforeRender callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function beforeRender(Event $event)
+    {
+        parent::beforeRender($event);
+
+        $this->viewBuilder()->setTemplatePath('Error');
+    }
+
+    /**
+     * afterFilter callback.
+     *
+     * @param \Cake\Event\Event $event Event.
+     * @return \Cake\Network\Response|null|void
+     */
+    public function afterFilter(Event $event)
+    {
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Controller/LocationsController.php b/production/example_apps/zippy_maps/src/Controller/LocationsController.php
new file mode 100644 (file)
index 0000000..4068be3
--- /dev/null
@@ -0,0 +1,530 @@
+<?php
+
+namespace App\Controller;
+
+use App\Controller\AppController;
+use Avmaps\Controller\Component\SimpleMapsComponent;
+use Cake\Log\Log;
+
+/**
+ * Locations Controller
+ *
+ * @property \App\Model\Table\LocationsTable $Locations
+ */
+class LocationsController extends AppController {
+       
+       // keeps track of the API key to be used for our google queries, if one is known.
+       private $api_key = null;
+       
+       /**
+        * initializer method.
+        */
+       public function initialize() {
+               parent::initialize ();
+               
+               $this->loadComponent ( 'Avmaps.SimpleMaps' );
+               $this->loadModel ( 'Categories' );
+               
+               $this->api_key = SimpleMapsComponent::getGoogleAPIKey ();
+       }
+       
+       /**
+        * Index method
+        *
+        * @return \Cake\Network\Response|null
+        */
+       public function index() {
+               $locations = $this->paginate ( $this->Locations, [ 
+                               'contain' => 'Categories' 
+               ] );
+               $this->set ( compact ( 'locations' ) );
+               $this->set ( '_serialize', [ 
+                               'locations' 
+               ] );
+       }
+       
+       /**
+        * sets two variables for the view: 'categoriesList' with *all* the category names that exist and
+        * 'selectedList' with the categories associated with the location 'id'.
+        *
+        * @param int $id               
+        */
+       public function loadAssociatedCategories($id) {
+               // find all of the categories available.
+               $this->set ( 'categoriesList', $this->Categories->getAllCategories());
+                               
+               // turn the chosen categories into a list of category ids for the multi-select.
+               $selectedCategories = $this->Locations->getSelectedCategories($id);
+               $selectedList = array_keys ( $selectedCategories->toArray () );
+               $this->set ( 'selectedList', $selectedList );
+       }
+       
+       /**
+        * calculates the set of locations within a certain range from a starting point and returns the
+        * full set.
+        */
+       public function loadLocationsInRange($lat, $long, $radius) {
+               Log::debug ( 'into ranged locations calculator' );
+               
+               // compute the lat/long bounding box for our search.
+               $bounds = SimpleMapsComponent::calculateLatLongBoundingBox ( $lat, $long, $radius );
+               
+               if (! $bounds) {
+                       Log::debug ( "failed to calculate the bounding box!" );
+               } else {
+                       Log::debug ( "bounding box: " . var_export ( $bounds, true ) );
+               }
+               
+               // use the boundaries to restrict the lookup so we aren't crushed.
+               // order: min_lat, min_long, max_lat, max_long.
+               $locationsInRange = $this->Locations->getLocationsInBox($bounds [0], $bounds [1], $bounds [2], $bounds [3]);
+               
+               // heavy!
+               // Log::debug('got a list of locations: ' + var_export($locationsInRange->toArray(), true));
+               
+               $this->set ( 'locationsInRange', $locationsInRange );
+       }
+       
+       /**
+        * View method
+        *
+        * @param string|null $id
+        *              Location id.
+        * @return \Cake\Network\Response|null
+        * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+        */
+       public function view($id = null) {
+               $location = $this->Locations->get ( $id, [ 
+                               'contain' => [ 
+                                               'Categories' 
+                               ] 
+               ] );
+               
+               $this->loadAssociatedCategories ( $id );
+               
+               $this->set ( 'api_key', $this->api_key );
+               
+               $this->set ( 'location', $location );
+               $this->set ( '_serialize', [ 
+                               'location' 
+               ] );
+       }
+       
+       /**
+        * Add method
+        *
+        * @return \Cake\Network\Response|null Redirects on successful add, renders view otherwise.
+        */
+       public function add() {
+               $location = $this->Locations->newEntity ();
+               
+               $categoriesList = $this->Categories->find ( 'list', [ 
+                               'keyField' => 'id',
+                               'valueField' => 'name' 
+               ] );
+               $this->set ( 'categoriesList', $categoriesList );
+               
+               if ($this->request->is ( 'post' )) {
+                       $location = $this->Locations->patchEntity ( $location, $this->request->getData () );
+                       
+                       Log::debug ("patching with " .  var_export($location, true) );
+                       
+                       $location = $this->SimpleMaps->fillInGeoPosition ( $location, [ 
+                                       'key' => $this->api_key 
+                       ] );
+                       
+                       if ($location !== false && $this->Locations->save ( $location )) {
+                               $this->Flash->success ( __ ( 'The location has been saved.' ) );
+                               
+                               return $this->redirect ( [ 
+                                               'action' => 'index' 
+                               ] );
+                       }
+                       $this->Flash->error ( __ ( 'The location could not be saved. Please, try again.' ) );
+               }
+               
+               $this->set ( compact ( 'location' ) );
+               $this->set ( '_serialize', [ 
+                               'location' 
+               ] );
+       }
+       
+       /**
+        * Edit method
+        *
+        * @param string|null $id
+        *              Location id.
+        * @return \Cake\Network\Response|null Redirects on successful edit, renders view otherwise.
+        * @throws \Cake\Network\Exception\NotFoundException When record not found.
+        */
+       public function edit($id = null) {
+               $location = $this->Locations->get ( $id, [ 
+                               'contain' => [ 
+                                               'Categories' 
+                               ] 
+               ] );
+               
+               $this->loadAssociatedCategories ( $id );
+               
+               if ($this->request->is ( [ 
+                               'patch',
+                               'post',
+                               'put' 
+               ] )) {
+                       $location = $this->Locations->patchEntity ( $location, $this->request->getData () );
+                       
+                       $new_location = $this->SimpleMaps->fillInGeoPosition ( $location, [ 
+                                       'key' => $this->api_key 
+                       ] );
+                       if ($new_location === false) {
+                               $this->Flash->error ( __ ( 'The location could not be geocoded. Please, try again.' ) );
+                       } else {
+                               $location = $new_location;
+                               if ($this->Locations->save ( $location )) {
+                                       $this->Flash->success ( __ ( 'The location has been saved.' ) );
+                                       return $this->redirect ( [ 
+                                                       'action' => 'index' 
+                                       ] );
+                               }
+                               $this->Flash->error ( __ ( 'The location could not be saved. Please, try again.' ) );
+                       }
+               }
+               $this->set ( compact ( 'location' ) );
+               $this->set ( '_serialize', [ 
+                               'location' 
+               ] );
+       }
+       
+       /**
+        * Delete method
+        *
+        * @param string|null $id
+        *              Location id.
+        * @return \Cake\Network\Response|null Redirects to index.
+        * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
+        */
+       public function delete($id = null) {
+               $this->request->allowMethod ( [ 
+                               'post',
+                               'delete' 
+               ] );
+               $location = $this->Locations->get ( $id );
+               if ($this->Locations->delete ( $location )) {
+                       $this->Flash->success ( __ ( 'The location has been deleted.' ) );
+               } else {
+                       $this->Flash->error ( __ ( 'The location could not be deleted. Please, try again.' ) );
+               }
+               
+               return $this->redirect ( [ 
+                               'action' => 'index' 
+               ] );
+       }
+       
+       
+       // global locations list, loaded once per object creation.
+       private $locationsListGlobal = null;
+       
+       /**
+        * generates a random list of locations with a limited number of items.
+        */
+       public function grabLocationsList() 
+       {
+               if ($this->locationsListGlobal)
+                       return $this->locationsListGlobal;
+               
+               /*
+                * load up a list of randomly chosen locations for the selection lists. we will keep this
+                * around if possible, rather than reloading per page view.
+                */
+               $this->locationsListGlobal = $this->Locations->find ( 'list', [ 
+                               'keyField' => 'id',
+                               'valueField' => 'name' 
+               ] )->limit ( 1000 )->order ( 'rand()' )->toArray ();
+               
+               // $Log::debug('got a result array: ' . var_export($this->locationsListGlobal, true));
+               
+               return $this->locationsListGlobal;
+       }
+       
+       /**
+        * adds an item to the location list to ensure a user will not see their previous choice disappear.
+        */
+       public function addLocationToHeldList($id, $entry) {
+               $this->locationsListGlobal [$id1] = $entry;
+       }
+       
+       
+       /**
+        * calculate the distance between two locations in the db.
+        * will allow picking if one or both
+        * location ids are missing.
+        */
+       public function distance($id1 = null, $id2 = null) {
+               // pretty kludgy approach here; don't yet know how to make the form refresh
+               // without reloading it, but reloading it clears the selections. so we're redirecting
+               // the form to itself but with the id parameters filled in.
+               
+               // process the parameters, if any were provided.
+               $this->set ( 'fromId', $id1 );
+               $this->set ( 'toId', $id2 );
+               
+               // load the actual location info if they specified the ids already.
+               if ($id1 !== null) {
+                       $this->set ( 'fromAddress', $this->Locations->get ( $id1 ) ['location'] );
+                       $fromGeoCoord = $this->Locations->get ( $id1 ) ['lat'] . ',' . $this->Locations->get ( $id1 ) ['lng'];
+                       // ensure it's in our global list also, or it won't get selected.
+                       $this->addLocationToHeldList($id1, $this->Locations->get ( $id1 ) ['name']);
+               } else {
+                       $this->set ( 'fromAddress', null );
+               }
+               if ($id2 !== null) {
+                       $this->set ( 'toAddress', $this->Locations->get ( $id2 ) ['location'] );
+                       $toGeoCoord = $this->Locations->get ( $id2 ) ['lat'] . ',' . $this->Locations->get ( $id2 ) ['lng'];
+                       ;
+                       // add to our global list for selection.
+                       $this->addLocationToHeldList($id2, $this->Locations->get ( $id2 ) ['name']);
+               } else {
+                       $this->set ( 'toAddress', null );
+               }
+               
+               if ($id1 === null || $id2 === null) {
+                       // set default value for distance.
+                       $distance = 'unknown';
+               } else {
+                       // calculate distance between locations.
+                       $distance = $this->SimpleMaps->calculateDrivingDistance ( $fromGeoCoord, $toGeoCoord, [ 
+                                       'key' => $this->api_key 
+                       ] );
+                       // $this->Flash->log ( 'distance calculated is ' . $distance );
+                       if ($distance === false) {
+                               // failed to calculate this, so we let the user know.
+                               $distance = "Unable to calculate a route using Google Maps Distance Matrix";
+                       }
+               }
+               // store in distance calculated variable.
+               $this->set ( 'distanceCalculated', $distance );
+               
+               // load up the selection lists for from and to addresses.
+               $this->set ( 'locationsFrom', $this->grabLocationsList());
+               $this->set ( 'locationsTo', $this->grabLocationsList() );
+               
+               if ($this->request->is ( 'post' )) {
+                       $datapack = $this->request->getData ();
+                       
+                       $fromId = $datapack ['from'] ['_ids'];
+                       $this->Flash->log ( h ( 'from id is ' . $fromId ) );
+                       $toId = $datapack ['to'] ['_ids'];
+                       $this->Flash->log ( h ( 'to id is ' . $toId ) );
+                       
+                       $fromGeoCoord = $this->Locations->get ( $fromId ) ['lat'] . ',' . $this->Locations->get ( $fromId ) ['lng'];
+                       
+                       $this->Flash->log ( 'from coord is ' . $fromGeoCoord );
+                       $toGeoCoord = $this->Locations->get ( $toId ) ['lat'] . ',' . $this->Locations->get ( $toId ) ['lng'];
+                       ;
+                       $this->Flash->log ( 'to coord is ' . $toGeoCoord );
+                       
+                       // how to make the form show the same data but with updated distance?
+                       // currently kludged...
+                       return $this->redirect ( [ 
+                                       'action' => 'distance',
+                                       $fromId,
+                                       $toId 
+                       ] );
+               }
+       }
+       
+       /**
+        * finds all the locations within a given radius (in miles) from the location with 'id'.
+        */
+       public function radius($id = null, $radius = 20) {
+               Log::debug ( 'into the radius method in controller...' );
+               
+               $this->set ( 'id', $id );
+               if ($id != null) {
+                       $this->set ( 'fromAddress', $this->Locations->get ( $id ) ['location'] );
+                       $fromLat = $this->Locations->get ( $id ) ['lat'];
+                       $this->set ( 'fromLat', $fromLat );
+                       $fromLong = $this->Locations->get ( $id ) ['lng'];
+                       $this->set ( 'fromLong', $fromLong );
+               }
+               
+               if ($this->request->is ( 'post' )) {
+                       
+                       $datapack = $this->request->getData ();
+                       
+                       // look for approximate array index.
+                       Log::debug ( 'got datapack: ' . var_export ( $datapack, true ) );
+                       foreach ( $datapack as $key => $value ) {
+                               if ("radius" == substr ( $key, 0, 6 )) {
+                                       $radius = $value;
+                               }
+                       }
+               }
+               
+               $this->set ( 'radius', $radius );
+               
+               $this->set('dbProcessor', $this);
+               $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInRange, null, $radius, $fromLat . \',\'. $fromLong);');
+               
+               $this->loadLocationsInRange ( $fromLat, $fromLong, $radius );
+       }
+       
+//hmmm: the below should be listed in an interface.
+       /**
+        * processes a location row by extracting the important information into an array.
+        * separates the db structure from the pieces needed for google maps.
+        */
+       public function processRow(& $location_row)
+       {               
+               return [
+                               'lat' => $location_row  ['lat'],
+                               'lng' => $location_row ['lng'],
+                               'title' => $location_row ['name'],
+                               // kludge below adds extra space on content, since someone is not left justifying these.
+                               'content' => h ( $location_row ['location'] ) . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
+               ];
+       }
+       
+       public function extractCategoryImage(& $category)
+       {
+               return $category->image;
+       }
+       
+       
+       /**
+        * jumps to a particular location as the center of the map and shows locations nearby.
+        */
+       public function jump($id) {
+               Log::debug ( 'into the jump method in locations controller...' );
+               
+               $this->set ( 'id', $id );
+               if ($id != null) {
+                       $fromLat = $this->Locations->get ( $id ) ['lat'];
+                       $this->set ( 'fromLat', $fromLat );
+                       $fromLong = $this->Locations->get ( $id ) ['lng'];
+                       $this->set ( 'fromLong', $fromLong );
+               }
+               
+               $locationsInRange = $this->Locations->find ( 'all', [ 
+                               'conditions' => [ 
+                                               'id' => $id 
+                               ] 
+               ] );
+               
+               // we were handed a list of locations that match our query, so we can now add them as markers.
+               $this->set('dbProcessor', $this);               
+               $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInRange, null, 1000, $fromLat . \',\'. $fromLong);');
+               
+               
+               // heavy!
+               // Log::debug('got a list of locations: ' + var_export($locationsInRange->toArray(), true));
+               
+               $this->set ( 'locationsInRange', $locationsInRange );
+       }
+       
+       /**
+        * provides restful api for looking up locations within two lat/long boundaries.
+        */
+       public function lookupajax() {
+               Log::debug ( 'into lookupajax method in locations controller...' );
+               
+               $reqData = $this->request->getData ();
+               
+               Log::Debug ( 'got to locations lookup with data: ' . var_export ( $reqData, true ) );
+               
+               // check that this is a post method, since we don't support anything else.
+               if (! $this->request->is ( [ 
+                               'post' 
+               ] )) {
+                       die ( 'this is a post method' );
+               }
+               
+               
+               if (array_key_exists('action', $reqData)) {
+                       $action = $reqData['action'];
+                       
+                       if (strcasecmp($action, 'lookupBox') == 0) {
+                               $this->findLocationsWithinBounds($reqData);
+                       } else if (strcasecmp($action, 'getInfo') == 0) {
+                               $this->getInfoOnLocation($reqData);
+                       } else {
+                               die('lookupajax call was given unknown action: ' . $action);
+                       }
+                       
+               } else {
+                       die('lookupajax call has no action specified');
+               }
+       }
+       
+       public function findLocationsWithinBounds($reqData)
+       {               
+               if (array_key_exists ( 'sw_lat', $reqData )) {
+                       $sw_lat = $reqData ['sw_lat'];
+               }
+               if (array_key_exists ( 'sw_lng', $reqData )) {
+                       $sw_lng = $reqData ['sw_lng'];
+               }
+               if (array_key_exists ( 'ne_lat', $reqData )) {
+                       $ne_lat = $reqData ['ne_lat'];
+               }
+               if (array_key_exists ( 'ne_lng', $reqData )) {
+                       $ne_lng = $reqData ['ne_lng'];
+               }
+
+               if (array_key_exists ( 'radius', $reqData )) {
+                       $radius = $reqData ['radius'];
+               }
+               
+               $start = null;
+               if (array_key_exists('start', $reqData)) {
+                       $start = $reqData['start']; 
+               }
+               $end = null;
+               if (array_key_exists('end', $reqData)) {
+                       $end = $reqData['end'];
+               }
+               
+               // temp! fails over to using whole range.
+               if ($sw_lat === null) {
+                       $sw_lat = - 90;
+               }
+               if ($sw_lng === null) {
+                       $sw_lng = - 180;
+               }
+               if ($ne_lat === null) {
+                       $ne_lat = 90;
+               }
+               if ($ne_lng === null) {
+                       $ne_lng = 180;
+               }
+               
+               // lookup the locations inside that box and store for view.
+               $locationsToSerialize = $this->Locations->getChewedLocationsInBox($sw_lat, $sw_lng, $ne_lat, $ne_lng, $start, $end);
+               Log::debug('db found ' . sizeof($locationsToSerialize) . ' rows for query (' . $start . '-' . $end . ')');
+
+               // simple implementation here since cakephp v3.4 was doing weird stuff instead of returning object we chose to serialize.
+               // ajax method would consistently return the name of the variable and 'undefined' as the only value, rather than properly
+               // serializing.
+               $encoded = json_encode ( $locationsToSerialize );
+               // Log::debug('encoded json is: ' . var_export($encoded, true));
+               
+               die ( $encoded );
+       }
+       
+       public function getInfoOnLocation($reqData)
+       {
+               if (array_key_exists('id', $reqData)) {
+                       $id = $reqData['id'];
+               } else {
+                       // throw an exception here?
+                       $message = 'failed to find location id in request data';
+                       Log::Debug($message);
+                       die($message);
+               }
+               
+               $location = $this->Locations->get($id, [
+               ]);
+               return die(json_encode($location));
+       }
+       
+}
diff --git a/production/example_apps/zippy_maps/src/Controller/PagesController.php b/production/example_apps/zippy_maps/src/Controller/PagesController.php
new file mode 100644 (file)
index 0000000..55792c8
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     0.2.9
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Controller;
+
+use Cake\Core\Configure;
+use Cake\Network\Exception\ForbiddenException;
+use Cake\Network\Exception\NotFoundException;
+use Cake\View\Exception\MissingTemplateException;
+
+/**
+ * Static content controller
+ *
+ * This controller will render views from Template/Pages/
+ *
+ * @link http://book.cakephp.org/3.0/en/controllers/pages-controller.html
+ */
+class PagesController extends AppController
+{
+
+    /**
+     * Displays a view
+     *
+     * @param string ...$path Path segments.
+     * @return void|\Cake\Network\Response
+     * @throws \Cake\Network\Exception\ForbiddenException When a directory traversal attempt.
+     * @throws \Cake\Network\Exception\NotFoundException When the view file could not
+     *   be found or \Cake\View\Exception\MissingTemplateException in debug mode.
+     */
+    public function display(...$path)
+    {
+        $count = count($path);
+        if (!$count) {
+            return $this->redirect('/');
+        }
+        if (in_array('..', $path, true) || in_array('.', $path, true)) {
+            throw new ForbiddenException();
+        }
+        $page = $subpage = null;
+
+        if (!empty($path[0])) {
+            $page = $path[0];
+        }
+        if (!empty($path[1])) {
+            $subpage = $path[1];
+        }
+        $this->set(compact('page', 'subpage'));
+
+        try {
+            $this->render(implode('/', $path));
+        } catch (MissingTemplateException $e) {
+            if (Configure::read('debug')) {
+                throw $e;
+            }
+            throw new NotFoundException();
+        }
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Behavior/empty b/production/example_apps/zippy_maps/src/Model/Behavior/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php b/production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php
new file mode 100644 (file)
index 0000000..f21e91d
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+namespace App\Model\Entity;
+
+use Cake\ORM\Entity;
+
+/**
+ * CategoriesLocation Entity
+ *
+ * @property int $id
+ * @property int $location_id
+ * @property int $category_id
+ * @property \Cake\I18n\Time $created
+ * @property \Cake\I18n\Time $modified
+ *
+ * @property \App\Model\Entity\Location $location
+ * @property \App\Model\Entity\Category $category
+ */
+class CategoriesLocation extends Entity
+{
+
+    /**
+     * Fields that can be mass assigned using newEntity() or patchEntity().
+     *
+     * Note that when '*' is set to true, this allows all unspecified fields to
+     * be mass assigned. For security purposes, it is advised to set '*' to false
+     * (or remove it), and explicitly make individual fields accessible as needed.
+     *
+     * @var array
+     */
+    protected $_accessible = [
+        '*' => true,
+        'id' => false
+    ];
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Entity/Category.php b/production/example_apps/zippy_maps/src/Model/Entity/Category.php
new file mode 100644 (file)
index 0000000..a2d97ec
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+namespace App\Model\Entity;
+
+use Cake\ORM\Entity;
+
+/**
+ * Category Entity
+ *
+ * @property int $id
+ * @property string $name
+ * @property int $parent
+ * @property \Cake\I18n\Time $created
+ * @property \Cake\I18n\Time $modified
+ */
+class Category extends Entity
+{
+
+    /**
+     * Fields that can be mass assigned using newEntity() or patchEntity().
+     *
+     * Note that when '*' is set to true, this allows all unspecified fields to
+     * be mass assigned. For security purposes, it is advised to set '*' to false
+     * (or remove it), and explicitly make individual fields accessible as needed.
+     *
+     * @var array
+     */
+    protected $_accessible = [
+        '*' => true,
+        'id' => false
+    ];
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Entity/Location.php b/production/example_apps/zippy_maps/src/Model/Entity/Location.php
new file mode 100644 (file)
index 0000000..83d5bbb
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+namespace App\Model\Entity;
+
+use Cake\ORM\Entity;
+
+/**
+ * Location Entity
+ *
+ * @property int $id
+ * @property string $name
+ * @property string $location
+ * @property float $lat
+ * @property float $lng
+ * @property \Cake\I18n\Time $created
+ * @property \Cake\I18n\Time $modified
+ */
+class Location extends Entity
+{
+
+    /**
+     * Fields that can be mass assigned using newEntity() or patchEntity().
+     *
+     * Note that when '*' is set to true, this allows all unspecified fields to
+     * be mass assigned. For security purposes, it is advised to set '*' to false
+     * (or remove it), and explicitly make individual fields accessible as needed.
+     *
+     * @var array
+     */
+    protected $_accessible = [
+        '*' => true,
+        'id' => false
+    ];
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php b/production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php
new file mode 100644 (file)
index 0000000..f47763c
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace App\Model\Table;
+
+use Cake\ORM\Query;
+use Cake\ORM\RulesChecker;
+use Cake\ORM\Table;
+use Cake\Validation\Validator;
+
+/**
+ * CategoriesLocations Model
+ *
+ * @property \Cake\ORM\Association\BelongsTo $Locations
+ * @property \Cake\ORM\Association\BelongsTo $Categories
+ *
+ * @method \App\Model\Entity\CategoriesLocation get($primaryKey, $options = [])
+ * @method \App\Model\Entity\CategoriesLocation newEntity($data = null, array $options = [])
+ * @method \App\Model\Entity\CategoriesLocation[] newEntities(array $data, array $options = [])
+ * @method \App\Model\Entity\CategoriesLocation|bool save(\Cake\Datasource\EntityInterface $entity, $options = [])
+ * @method \App\Model\Entity\CategoriesLocation patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
+ * @method \App\Model\Entity\CategoriesLocation[] patchEntities($entities, array $data, array $options = [])
+ * @method \App\Model\Entity\CategoriesLocation findOrCreate($search, callable $callback = null, $options = [])
+ *
+ * @mixin \Cake\ORM\Behavior\TimestampBehavior
+ */
+class CategoriesLocationsTable extends Table
+{
+
+    /**
+     * Initialize method
+     *
+     * @param array $config The configuration for the Table.
+     * @return void
+     */
+    public function initialize(array $config)
+    {
+        parent::initialize($config);
+
+        $this->setTable('categories_locations');
+        $this->setDisplayField('id');
+        $this->setPrimaryKey('id');
+
+        $this->addBehavior('Timestamp');
+
+        $this->belongsTo('Locations', [
+            'foreignKey' => 'location_id',
+            'joinType' => 'INNER'
+        ]);
+        $this->belongsTo('Categories', [
+            'foreignKey' => 'category_id',
+            'joinType' => 'INNER'
+        ]);
+    }
+
+    /**
+     * Default validation rules.
+     *
+     * @param \Cake\Validation\Validator $validator Validator instance.
+     * @return \Cake\Validation\Validator
+     */
+    public function validationDefault(Validator $validator)
+    {
+        $validator
+            ->integer('id')
+            ->allowEmpty('id', 'create');
+
+        return $validator;
+    }
+
+    /**
+     * Returns a rules checker object that will be used for validating
+     * application integrity.
+     *
+     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
+     * @return \Cake\ORM\RulesChecker
+     */
+    public function buildRules(RulesChecker $rules)
+    {
+        $rules->add($rules->existsIn(['location_id'], 'Locations'));
+        $rules->add($rules->existsIn(['category_id'], 'Categories'));
+
+        return $rules;
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php b/production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php
new file mode 100644 (file)
index 0000000..4d6af56
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+namespace App\Model\Table;
+
+use Cake\Log\Log;
+use Cake\ORM\Query;
+use Cake\ORM\RulesChecker;
+use Cake\ORM\Table;
+use Cake\Validation\Validator;
+
+/**
+ * Categories Model
+ *
+ * @method \App\Model\Entity\Category get($primaryKey, $options = [])
+ * @method \App\Model\Entity\Category newEntity($data = null, array $options = [])
+ * @method \App\Model\Entity\Category[] newEntities(array $data, array $options = [])
+ * @method \App\Model\Entity\Category|bool save(\Cake\Datasource\EntityInterface $entity, $options = [])
+ * @method \App\Model\Entity\Category patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
+ * @method \App\Model\Entity\Category[] patchEntities($entities, array $data, array $options = [])
+ * @method \App\Model\Entity\Category findOrCreate($search, callable $callback = null, $options = [])
+ *
+ * @mixin \Cake\ORM\Behavior\TimestampBehavior
+ */
+class CategoriesTable extends Table
+{
+
+    /**
+     * Initialize method
+     *
+     * @param array $config The configuration for the Table.
+     * @return void
+     */
+    public function initialize(array $config)
+    {
+        parent::initialize($config);
+
+        $this->setTable('categories');
+        $this->setDisplayField('name');
+        $this->setPrimaryKey('id');
+
+        $this->addBehavior('Timestamp');
+        
+        $this->belongsToMany('Locations',
+                       [
+                                       'targetForeignKey' => 'location_id',
+                                       'foreignKey' => 'category_id',
+                                       'joinTable' => 'categories_locations',
+                                       'through' => 'CategoriesLocations',
+                       ]);
+        
+    }
+
+    /**
+     * Default validation rules.
+     *
+     * @param \Cake\Validation\Validator $validator Validator instance.
+     * @return \Cake\Validation\Validator
+     */
+    public function validationDefault(Validator $validator)
+    {
+        $validator
+            ->integer('id')
+            ->allowEmpty('id', 'create');
+
+        $validator
+            ->requirePresence('name', 'create')
+            ->notEmpty('name')
+            ->add('name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
+
+        $validator
+            ->integer('parent')
+            ->allowEmpty('parent');
+
+        return $validator;
+    }
+
+    /**
+     * Returns a rules checker object that will be used for validating
+     * application integrity.
+     *
+     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
+     * @return \Cake\ORM\RulesChecker
+     */
+    public function buildRules(RulesChecker $rules)
+    {
+        $rules->add($rules->isUnique(['name']));
+
+        return $rules;
+    }
+    
+    /**
+     * returns a query that will find all the categories as a list.
+     */
+    public function getAllCategories() {
+       // find the full list of categories to show the user.
+       $categoriesList = $this->find ( 'list', [
+                       'keyField' => 'id',
+                       'valueField' => 'name',
+                       'order' => [
+                                       'name' => 'asc'
+                       ]
+       ] );
+               return $categoriesList;
+    }
+    
+    /**
+     * returns a query that will locate all of the locations in the specified category with 'id'.
+     */
+    public function getLocationsInCategory($id)
+    {
+       // query all the locations belonging to this category.
+       $locationsInCategory = $this->CategoriesLocations->find('all', [
+                       'conditions' => [ 'category_id' => $id ],
+                       'contain' => ['Locations']
+       ]);
+       return $locationsInCategory;
+    }
+    
+    /**
+     * returns a query that finds all locations in the category that fit within the southwest and northeast
+     * corners specified.
+     */
+    public function getLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null)
+    {
+       // query all the locations belonging to this category.
+       $locationsInCategory = $this->CategoriesLocations->find('all', [
+                       'conditions' => [ 'category_id' => $id ],
+                       'contain' => ['Locations', 'Categories']
+       ]);
+       
+       Log::Debug('bounds=' . $sw_lat . ', '.  $sw_long . ' to ' . $ne_lat . ', ' . $ne_long);
+       
+       $bounds = [ $sw_lat , $sw_long , $ne_lat , $ne_long ];
+       
+       if (! $bounds) {
+               Log::Debug("failed to calculate the bounding box!");
+       } else {
+               Log::Debug("bounding box: " . var_export($bounds, true));
+       }
+       
+       // use the boundaries to restrict the lookup.
+       // order: min_lat, min_long, max_lat, max_long.
+       $locationsInCategory = $locationsInCategory->where (
+                       function ($exp) use ($bounds) {
+                               return $exp->gte ( 'lat', $bounds [0] )->gte ( 'lng', $bounds [1] )->lte ( 'lat', $bounds [2] )->lte ( 'lng', $bounds [3] );
+                       }
+                       );
+       
+       if (($start !== null) && ($end !== null)) {
+               Log::debug('start of range = ' . $start . ' and end = ' . $end);
+               $locationsInCategory= $locationsInCategory->order(['lat desc', 'lng desc']);
+               $chunk = $end - $start + 1;
+               $locationsInCategory= $locationsInCategory->limit($chunk);
+               $page = 1 + (int)($start / $chunk);
+               $locationsInCategory= $locationsInCategory->page($page);
+               Log::debug('page = ' . $page . ' and chunk = ' . $chunk);
+       }       
+       
+       return $locationsInCategory;
+    }
+    
+    public function getChewedLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null)
+    {
+       $locationsInCategory = $this->getLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start, $end);
+       
+       $locationsToSerialize = [];
+       
+       // make an array with the useful parts of the location data.
+       foreach ($locationsInCategory as $location) {                   
+               $lat_and_long = $location->location->lat. ',' . $location->location->lng;
+               if (array_key_exists ( $lat_and_long, $locationsToSerialize)) {
+                       continue;  // already got it.
+               }
+               
+//Log::debug('got an icon value of: ' . $location->category->image);                   
+               
+               // we don't include lat and lng below since they are encoded as array key.
+               $locationsToSerialize[$lat_and_long] = ['name' => $location->location->name,
+                               'loc' => $location->location->location,
+                               'icon' => $location->category->image,
+                               'id' => $location->location_id,
+               ];              
+       }
+       
+       return $locationsToSerialize;
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php b/production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php
new file mode 100644 (file)
index 0000000..57d43f7
--- /dev/null
@@ -0,0 +1,191 @@
+<?php
+namespace App\Model\Table;
+
+use Cake\Log\Log;
+use Cake\ORM\Query;
+use Cake\ORM\RulesChecker;
+use Cake\ORM\Table;
+use Cake\Validation\Validator;
+
+/**
+ * Locations Model
+ *
+ * @method \App\Model\Entity\Location get($primaryKey, $options = [])
+ * @method \App\Model\Entity\Location newEntity($data = null, array $options = [])
+ * @method \App\Model\Entity\Location[] newEntities(array $data, array $options = [])
+ * @method \App\Model\Entity\Location|bool save(\Cake\Datasource\EntityInterface $entity, $options = [])
+ * @method \App\Model\Entity\Location patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
+ * @method \App\Model\Entity\Location[] patchEntities($entities, array $data, array $options = [])
+ * @method \App\Model\Entity\Location findOrCreate($search, callable $callback = null, $options = [])
+ *
+ * @mixin \Cake\ORM\Behavior\TimestampBehavior
+ */
+class LocationsTable extends Table
+{
+
+    /**
+     * Initialize method
+     *
+     * @param array $config The configuration for the Table.
+     * @return void
+     */
+    public function initialize(array $config)
+    {
+        parent::initialize($config);
+
+        $this->setTable('locations');
+        $this->setDisplayField('name');
+        $this->setPrimaryKey('id');
+
+        $this->addBehavior('Timestamp');
+        
+        $this->belongsToMany('Categories',
+                       [
+                                       'targetForeignKey' => 'category_id',
+                                       'foreignKey' => 'location_id',
+                                       'joinTable' => 'categories_locations',
+                                       'through' => 'CategoriesLocations',
+                       ]);
+        
+        
+    }
+
+    /**
+     * Default validation rules.
+     *
+     * @param \Cake\Validation\Validator $validator Validator instance.
+     * @return \Cake\Validation\Validator
+     */
+    public function validationDefault(Validator $validator)
+    {
+        $validator
+            ->integer('id')
+            ->allowEmpty('id', 'create');
+
+        $validator
+            ->requirePresence('name', 'create')
+            ->notEmpty('name')
+            ->add('name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
+
+        $validator->requirePresence ( 'location', 'create' )->notEmpty ( 'location' );
+               
+               $validator
+            ->allowEmpty('lat');
+        $validator
+            ->allowEmpty('lng');
+            
+        return $validator;
+    }
+
+    /**
+     * Returns a rules checker object that will be used for validating
+     * application integrity.
+     *
+     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
+     * @return \Cake\ORM\RulesChecker
+     */
+    public function buildRules(RulesChecker $rules)
+    {
+        $rules->add($rules->isUnique(['name']));
+
+        return $rules;
+    }
+    
+    
+    /**
+     * returns a query that will find the category records associated with a location 'id'
+     * as a list.
+     */
+    public function getSelectedCategories($id)
+    {
+       // find the categories that are chosen for this item, if any.
+       $selectedCategories = $this->CategoriesLocations->find ( 'list', [
+                       'keyField' => 'category_id',
+                       'valueField' => 'location_id',
+                       'conditions' => [
+                                       'location_id' => $id
+                       ],
+                       'contain' => [
+                                       'Categories'
+                       ]
+       ] );            
+       return $selectedCategories;
+    }
+       
+       /**
+        * returns a query that will find all of the locations within the bounding box.
+        */
+       public function getLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) {
+               $locationsInRange = $this->find ( 'all', [ 
+                       'contain' => ['Categories'],
+               ] );
+               
+               Log::Debug ( 'bounds=' . $sw_lat . ', ' . $sw_long . ' to ' . $ne_lat . ', ' . $ne_long );
+               
+               $bounds = [ 
+                               $sw_lat,
+                               $sw_long,
+                               $ne_lat,
+                               $ne_long 
+               ];
+               
+               if (! $bounds) {
+                       Log::Debug ( "failed to calculate the bounding box!" );
+               } else {
+                       Log::Debug ( "bounding box: " . var_export ( $bounds, true ) );
+               }
+               
+               // use the boundaries to restrict the lookup so we aren't crushed.
+               // order: min_lat, min_long, max_lat, max_long.
+               $locationsInRange = $locationsInRange->where ( function ($exp) use ($bounds) {
+                       return $exp->gte ( 'lat', $bounds [0] )->gte ( 'lng', $bounds [1] )->lte ( 'lat', $bounds [2] )->lte ( 'lng', $bounds [3] );
+               } );
+               
+               if (($start !== null) && ($end !== null)) {
+                       Log::debug('start of range = ' . $start . ' and end = ' . $end);
+                       $locationsInRange = $locationsInRange->order(['lat desc', 'lng desc']);
+                       $chunk = $end - $start + 1;
+                       $locationsInRange = $locationsInRange->limit($chunk);
+                       $page = 1 + (int)($start / $chunk);
+                       $locationsInRange = $locationsInRange->page($page);
+                       Log::debug('page = ' . $page . ' and chunk = ' . $chunk);
+               }
+               
+               return $locationsInRange;
+       }
+       
+       /**
+        * retrieves all of the locations within the bounding box as a list of partial location data.
+        */
+       public function getChewedLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) {
+               $locationsInRange = $this->getLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start, $end);
+               
+               // track locations we've already added and do not add ones at exactly the same lat/long.
+               // if we did add these, google maps screws up in representing them.
+               $locationsToSerialize = [ ];
+               
+               foreach ( $locationsInRange as $location ) {
+                       $lat_and_long = $location->lat . ',' . $location->lng;
+                       if (array_key_exists ( $lat_and_long, $locationsToSerialize )) {
+                               continue; // already got it.
+                       }
+
+// Log::debug('dumping location row: ' . var_export($location, true));
+                       
+                       // we don't include lat and lng below since they are encoded as array key.
+                       $locationsToSerialize [$lat_and_long] = [ 
+                                       'name' => $location->name,
+                                       'loc' => $location->location,
+                                       'id' => $location->id 
+                       ];
+                       
+                       // only try to add the image if the location actually has a category membership (at least one).
+                       if ($location->categories) {
+                               $locationsToSerialize [$lat_and_long]['icon'] = $location->categories[0]->image;
+                       }                                               
+               }
+               
+       return $locationsToSerialize;
+    }
+    
+}
diff --git a/production/example_apps/zippy_maps/src/Shell/ConsoleShell.php b/production/example_apps/zippy_maps/src/Shell/ConsoleShell.php
new file mode 100644 (file)
index 0000000..c84bd97
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Shell;
+
+use Cake\Console\ConsoleOptionParser;
+use Cake\Console\Shell;
+use Cake\Log\Log;
+use Psy\Shell as PsyShell;
+
+/**
+ * Simple console wrapper around Psy\Shell.
+ */
+class ConsoleShell extends Shell
+{
+
+    /**
+     * Start the shell and interactive console.
+     *
+     * @return int|null
+     */
+    public function main()
+    {
+        if (!class_exists('Psy\Shell')) {
+            $this->err('<error>Unable to load Psy\Shell.</error>');
+            $this->err('');
+            $this->err('Make sure you have installed psysh as a dependency,');
+            $this->err('and that Psy\Shell is registered in your autoloader.');
+            $this->err('');
+            $this->err('If you are using composer run');
+            $this->err('');
+            $this->err('<info>$ php composer.phar require --dev psy/psysh</info>');
+            $this->err('');
+
+            return self::CODE_ERROR;
+        }
+
+        $this->out("You can exit with <info>`CTRL-C`</info> or <info>`exit`</info>");
+        $this->out('');
+
+        Log::drop('debug');
+        Log::drop('error');
+        $this->_io->setLoggers(false);
+        restore_error_handler();
+        restore_exception_handler();
+
+        $psy = new PsyShell();
+        $psy->run();
+    }
+
+    /**
+     * Display help for this console.
+     *
+     * @return \Cake\Console\ConsoleOptionParser
+     */
+    public function getOptionParser()
+    {
+        $parser = new ConsoleOptionParser('console');
+        $parser->setDescription(
+            'This shell provides a REPL that you can use to interact ' .
+            'with your application in an interactive fashion. You can use ' .
+            'it to run adhoc queries with your models, or experiment ' .
+            'and explore the features of CakePHP and your application.' .
+            "\n\n" .
+            'You will need to have psysh installed for this Shell to work.'
+        );
+
+        return $parser;
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/add.ctp b/production/example_apps/zippy_maps/src/Template/Categories/add.ctp
new file mode 100644 (file)
index 0000000..3aaada7
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+
+use Cake\Log\Log;
+Log::debug('[got into add template]');
+
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Categories'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="categories form large-9 medium-8 columns content">
+    <?= $this->Form->create($category) ?>
+    <fieldset>
+        <legend><?= __('Add Category') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+            echo $this->Form->control('image');
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/center.ctp b/production/example_apps/zippy_maps/src/Template/Categories/center.ctp
new file mode 100644 (file)
index 0000000..ede0b27
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/**
+ * @var \App\View\AppView $this
+ */
+
+use Cake\Log\Log;
+Log::debug('[got into center template]');
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+       <ul class="side-nav">
+               <li class="heading"><?= __('Actions') ?></li>
+               <li><?= $this->Html->link(__('View Category'), ['action' => 'view', $category->id]) ?></li>
+               <li><?= $this->Html->link(__('Edit Category'), ['action' => 'edit', $category->id]) ?> </li>
+               <li><?= $this->Form->postLink(__('Delete Category'), ['action' => 'delete', $category->id], ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]) ?> </li>
+               <li><?= $this->Html->link(__('List Categories'), ['action' => 'index']) ?> </li>
+               <li><?= $this->Html->link(__('New Category'), ['action' => 'add']) ?> </li>
+       </ul>
+</nav>
+<div class="categories view large-9 medium-8 columns content">
+       <h3><?= h($category->name) ?></h3>
+       <table class="vertical-table">
+               <tr>
+                       <th scope="row"><?= __('Name') ?></th>
+                       <td><?= h($category->name) ?></td>
+               </tr>
+               <tr>
+                       <th scope="row"><?= __('Map of this Category\'s Locations') ?></th>
+                       <td>
+<?php
+       // dynamic map preparation below.
+       
+       // see if clustering is turned on.
+       $clustering = in_array ( 'clustering', $selectedList );
+       
+       //$this->log("state is: " . $state);
+       
+       // kludgey attempt to focus a little better, based on state size.  
+       $small_state = false;
+       $medium_state = false;
+       // is the state small?
+       $small_state = ($state == 'DE' || $state == 'RI' || $state == 'NH');
+//     $this->log('small_state=' . var_export($small_state, true));
+       // if not small, we assume medium until told otherwise.
+       if (! $small_state) $medium_state = true;
+//     $this->log('medium_state=' . var_export($medium_state, true));  
+       // if certain known fat states, then not medium sized.
+       if ($state == 'TX' || $state == 'CA' || $state == 'AK') $medium_state = false;  
+       $zoomFactor = $small_state? 8 : ( $medium_state? 7 : 5 );
+       $this->log('zooming at ' . $zoomFactor);        
+       //question: how to pick a more useful zoom factor?  maybe record in db a starting zoom factor per state?
+       
+       // list options we want to override or add for the map.
+       $map_options = [ 
+                       // automatically encompass markers and auto-center if they haven't told us where to start.
+                       'autoCenter' => ($mapCenter === null)? true : false,
+                       'clustering' => $clustering,
+                       'zoom' => $zoomFactor,
+       ];
+
+       // start at a specified center if one is given.
+       if ($mapCenter) {
+               $map_options = array_merge($map_options, $mapCenter);
+       }
+       
+       //$this->log('new options set: ' . var_export($map_options, true));
+       
+       
+       // provide the element with all the info it needs to set up the map.
+       $element_options =
+       [
+               'map_options' => $map_options,
+               'map_colors' => 'avmaps/js/sg2_map_colors.js',
+               'the_map' => $this->GoogleMap,
+               // no options to pass to ajax so far...
+               'ajax_options' => '{
+               }',
+               'default_options' => '{
+                       json_provider: "/categories.json",
+                       iconColor: "' . $this->MapDisplay->defaultIconColor() . '",
+               }',
+       ];
+       
+       echo $this->element('Avmaps.google_map', $element_options);
+       
+       /*
+       // create the basic map framework using google maps api.
+       $this->MapDisplay->setupMap ( $map_options, $this->GoogleMap );
+       
+       // plug in our chosen color scheme for land, roads, etc.
+       $this->MapDisplay->applyColors ( 'avmaps/js/sg2_map_colors.js' );
+       
+       // after the intial configuration items are done, we can emit the map code.
+       // we can still add markers after this point, and do so below.
+       $this->MapDisplay->emitMap ( false );
+       
+       // we were handed a list of locations that match our query, so we can now add them as markers.
+       $this->MapDisplay->addMarkersInCategory ( $locationsInCategory, $category );
+       
+       // set up our event handler for this view.
+//     $this->MapDisplay->injectJSFile('avmaps/js/event_trappers.js');
+       
+       // now we think we are ready to go. let's get the map displayed.
+       $this->MapDisplay->finallyDisplayMap ();
+       */
+       
+       // end of dynamic map preparation.
+?>
+                       </td>
+               </tr>
+
+               <tr>
+                       <th scope="row"><?= __('View Options') ?></th>
+                       <td>
+            <?= $this->Form->create($category) ?>
+                       <?php
+                       echo $this->Form->control ( 'view_options._ids', [ 
+                                       'type' => 'select',
+                                       'multiple' => true,
+                                       'val' => $selectedList,
+                                       'options' => [ 
+                                                       'clustering' => 'clustering' 
+                                       ] 
+                       ] );
+                       ?>
+         
+          <?= $this->Form->button(__('Modify View')) ?>
+                <?= $this->Form->end() ?>
+         
+            </td>
+               </tr>
+
+       </table>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/edit.ctp b/production/example_apps/zippy_maps/src/Template/Categories/edit.ctp
new file mode 100644 (file)
index 0000000..9161c95
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+
+use Cake\Log\Log;
+Log::debug('[got into edit template]');
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Form->postLink(
+                __('Delete'),
+                ['action' => 'delete', $category->id],
+                ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]
+            )
+        ?></li>
+        <li><?= $this->Html->link(__('List Categories'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="categories form large-9 medium-8 columns content">
+    <?= $this->Form->create($category) ?>
+    <fieldset>
+        <legend><?= __('Edit Category') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+            echo $this->Form->control('image');
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/index.ctp b/production/example_apps/zippy_maps/src/Template/Categories/index.ctp
new file mode 100644 (file)
index 0000000..1a0381b
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+
+use Cake\Log\Log;
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('New Category'), ['action' => 'add']) ?></li>
+    </ul>
+</nav>
+<div class="categories index large-9 medium-8 columns content">
+    <h3><?= __('Categories') ?></h3>
+    <table cellpadding="0" cellspacing="0">
+        <thead>
+            <tr>
+                <th scope="col"><?= $this->Paginator->sort('id') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('name') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('image') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('created') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('modified') ?></th>
+                <th scope="col" class="actions"><?= __('Actions') ?></th>
+            </tr>
+        </thead>
+        <tbody>
+            <?php foreach ($categories as $category): ?>
+            <tr>
+                <td><?= $this->Number->format($category->id) ?></td>
+                <td><?= h($category->name) ?></td>
+                <td><?= h($category->image) ?></td>
+                <td><?= h($category->created) ?></td>
+                <td><?= h($category->modified) ?></td>
+                <td class="actions">
+                    <?= $this->Html->link(__('Map'), ['action' => 'map', $category->id]) ?>
+                    <?= $this->Html->link(__('Center'), ['action' => 'center', $category->id]) ?>
+                    <?= $this->Html->link(__('View'), ['action' => 'view', $category->id]) ?>
+                    <?= $this->Html->link(__('Edit'), ['action' => 'edit', $category->id]) ?>
+                    <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $category->id], ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]) ?>
+                </td>
+            </tr>
+            <?php endforeach; ?>
+        </tbody>
+    </table>
+    <div class="paginator">
+        <ul class="pagination">
+            <?= $this->Paginator->first('<< ' . __('first')) ?>
+            <?= $this->Paginator->prev('< ' . __('previous')) ?>
+            <?= $this->Paginator->numbers() ?>
+            <?= $this->Paginator->next(__('next') . ' >') ?>
+            <?= $this->Paginator->last(__('last') . ' >>') ?>
+        </ul>
+        <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
+    </div>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/map.ctp b/production/example_apps/zippy_maps/src/Template/Categories/map.ctp
new file mode 100644 (file)
index 0000000..03a3cc5
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+/**
+ * @var \App\View\AppView $this
+ */
+
+use Cake\Log\Log;
+Log::debug('[got into map template]');
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+       <ul class="side-nav">
+               <li class="heading"><?= __('Actions') ?></li>
+               <li><?= $this->Html->link(__('View Category'), ['action' => 'view', $category->id]) ?></li>
+               <li><?= $this->Html->link(__('Edit Category'), ['action' => 'edit', $category->id]) ?> </li>
+               <li><?= $this->Form->postLink(__('Delete Category'), ['action' => 'delete', $category->id], ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]) ?> </li>
+               <li><?= $this->Html->link(__('List Categories'), ['action' => 'index']) ?> </li>
+               <li><?= $this->Html->link(__('New Category'), ['action' => 'add']) ?> </li>
+       </ul>
+</nav>
+<div class="categories view large-9 medium-8 columns content">
+       <h3><?= h($category->name) ?></h3>
+       <table class="vertical-table">
+               <tr>
+                       <th scope="row"><?= __('Name') ?></th>
+                       <td><?= h($category->name) ?></td>
+               </tr>
+               <tr>
+                       <th scope="row"><?= __('Map of this Category\'s Locations') ?></th>
+                       <td>
+<?php
+
+       // dynamic map preparation below.
+       
+       // see if clustering is turned on.
+       $clustering = in_array ( 'clustering', $selectedList );
+       
+       // list options we want to override or add for the map.
+       $map_options = [ 
+               'autoCenter' => true, // automatically encompass markers.
+               'clustering' => $clustering,
+       ];
+
+       // provide the element with all the info it needs to set up the map.
+       $element_options = [
+               'map_options' => $map_options,
+               'map_colors' => 'avmaps/js/sg2_map_colors.js',
+               'the_map' => $this->GoogleMap,
+               // we want to include the category ID when making ajax calls.
+               'ajax_options' => '{ category: "' . $category->id . '"}',
+               'default_options' => '{
+                       iconColor: "' . $this->MapDisplay->defaultIconColor() . '",
+                       json_provider: "/categories.json",
+               }',
+       ];
+       
+       echo $this->element('Avmaps.google_map', $element_options);
+       
+       // end of dynamic map preparation.
+       
+?>
+                       </td>
+               </tr>
+
+               <tr>
+                       <th scope="row"><?= __('View Options') ?></th>
+                       <td>
+            <?= $this->Form->create($category) ?>
+                       <?php
+                       echo $this->Form->control ( 'view_options._ids', [ 
+                                       'type' => 'select',
+                                       'multiple' => true,
+                                       'val' => $selectedList,
+                                       'options' => [ 
+                                                       'clustering' => 'clustering' 
+                                       ] 
+                       ] );
+                       ?>
+         
+          <?= $this->Form->button(__('Modify View')) ?>
+                <?= $this->Form->end() ?>
+         
+            </td>
+               </tr>
+
+       </table>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/view.ctp b/production/example_apps/zippy_maps/src/Template/Categories/view.ctp
new file mode 100644 (file)
index 0000000..8eec91d
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+use Cake\Log\Log;
+Log::debug('[got into view template]');
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('Map Category'), ['action' => 'map', $category->id]) ?> </li>
+        <li><?= $this->Html->link(__('Edit Category'), ['action' => 'edit', $category->id]) ?> </li>
+        <li><?= $this->Form->postLink(__('Delete Category'), ['action' => 'delete', $category->id], ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]) ?> </li>
+        <li><?= $this->Html->link(__('List Categories'), ['action' => 'index']) ?> </li>
+        <li><?= $this->Html->link(__('New Category'), ['action' => 'add']) ?> </li>
+    </ul>
+</nav>
+<div class="categories view large-9 medium-8 columns content">
+    <h3><?= h($category->name) ?></h3>
+    <table class="vertical-table">
+        <tr>
+            <th scope="row"><?= __('Name') ?></th>
+            <td><?= h($category->name) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Id') ?></th>
+            <td><?= $this->Number->format($category->id) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Image') ?></th>
+            <td><?= h($category->image) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Created') ?></th>
+            <td><?= h($category->created) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Modified') ?></th>
+            <td><?= h($category->modified) ?></td>
+        </tr>
+        <tr>
+               <th scope="row"><?= __('Locations') ?></th>
+               <td>
+               <?php
+                 echo $this->Form->control('locations._ids', [
+               'type' => 'select',
+                   'multiple' => true,
+                               'disabled' => true,
+                'options' => $locationBits,
+                       ]);
+          ?>
+               </td>
+        </tr>
+        
+    </table>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp
new file mode 100644 (file)
index 0000000..736b27d
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$class = 'message';
+if (!empty($params['class'])) {
+    $class .= ' ' . $params['class'];
+}
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="<?= h($class) ?>" onclick="this.classList.add('hidden');"><?= $message ?></div>
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp
new file mode 100644 (file)
index 0000000..e7c4af1
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="message error" onclick="this.classList.add('hidden');"><?= $message ?></div>
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp
new file mode 100644 (file)
index 0000000..becd5a1
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+if (!isset($params['escape']) || $params['escape'] !== false) {
+    $message = h($message);
+}
+?>
+<div class="message success" onclick="this.classList.add('hidden')"><?= $message ?></div>
diff --git a/production/example_apps/zippy_maps/src/Template/Email/html/default.ctp b/production/example_apps/zippy_maps/src/Template/Email/html/default.ctp
new file mode 100644 (file)
index 0000000..386674a
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?php
+$content = explode("\n", $content);
+
+foreach ($content as $line):
+    echo '<p> ' . $line . "</p>\n";
+endforeach;
+?>
diff --git a/production/example_apps/zippy_maps/src/Template/Email/text/default.ctp b/production/example_apps/zippy_maps/src/Template/Email/text/default.ctp
new file mode 100644 (file)
index 0000000..704b46f
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $content ?>
diff --git a/production/example_apps/zippy_maps/src/Template/Error/error400.ctp b/production/example_apps/zippy_maps/src/Template/Error/error400.ctp
new file mode 100644 (file)
index 0000000..2aebac6
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+use Cake\Core\Configure;
+use Cake\Error\Debugger;
+
+$this->layout = 'error';
+
+if (Configure::read('debug')):
+    $this->layout = 'dev_error';
+
+    $this->assign('title', $message);
+    $this->assign('templateName', 'error400.ctp');
+
+    $this->start('file');
+?>
+<?php if (!empty($error->queryString)) : ?>
+    <p class="notice">
+        <strong>SQL Query: </strong>
+        <?= h($error->queryString) ?>
+    </p>
+<?php endif; ?>
+<?php if (!empty($error->params)) : ?>
+        <strong>SQL Query Params: </strong>
+        <?php Debugger::dump($error->params) ?>
+<?php endif; ?>
+<?= $this->element('auto_table_warning') ?>
+<?php
+    if (extension_loaded('xdebug')):
+        xdebug_print_function_stack();
+    endif;
+
+    $this->end();
+endif;
+?>
+<h2><?= h($message) ?></h2>
+<p class="error">
+    <strong><?= __d('cake', 'Error') ?>: </strong>
+    <?= __d('cake', 'The requested address {0} was not found on this server.', "<strong>'{$url}'</strong>") ?>
+</p>
diff --git a/production/example_apps/zippy_maps/src/Template/Error/error500.ctp b/production/example_apps/zippy_maps/src/Template/Error/error500.ctp
new file mode 100644 (file)
index 0000000..d8014f8
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+use Cake\Core\Configure;
+use Cake\Error\Debugger;
+
+$this->layout = 'error';
+
+if (Configure::read('debug')):
+    $this->layout = 'dev_error';
+
+    $this->assign('title', $message);
+    $this->assign('templateName', 'error500.ctp');
+
+    $this->start('file');
+?>
+<?php if (!empty($error->queryString)) : ?>
+    <p class="notice">
+        <strong>SQL Query: </strong>
+        <?= h($error->queryString) ?>
+    </p>
+<?php endif; ?>
+<?php if (!empty($error->params)) : ?>
+        <strong>SQL Query Params: </strong>
+        <?php Debugger::dump($error->params) ?>
+<?php endif; ?>
+<?php if ($error instanceof Error) : ?>
+        <strong>Error in: </strong>
+        <?= sprintf('%s, line %s', str_replace(ROOT, 'ROOT', $error->getFile()), $error->getLine()) ?>
+<?php endif; ?>
+<?php
+    echo $this->element('auto_table_warning');
+
+    if (extension_loaded('xdebug')):
+        xdebug_print_function_stack();
+    endif;
+
+    $this->end();
+endif;
+?>
+<h2><?= __d('cake', 'An Internal Error Has Occurred') ?></h2>
+<p class="error">
+    <strong><?= __d('cake', 'Error') ?>: </strong>
+    <?= h($message) ?>
+</p>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp
new file mode 100644 (file)
index 0000000..2b43970
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html>
+<head>
+    <title><?= $this->fetch('title') ?></title>
+</head>
+<body>
+    <?= $this->fetch('content') ?>
+</body>
+</html>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp
new file mode 100644 (file)
index 0000000..871dcfb
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $this->fetch('content') ?>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp b/production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp
new file mode 100644 (file)
index 0000000..871dcfb
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<?= $this->fetch('content') ?>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/default.ctp
new file mode 100644 (file)
index 0000000..24a4dd0
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+$pageDescription = 'Maps Demonstrater for the Giant Surfing'
+
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>
+        <?= $pageDescription ?>:
+        <?= $this->fetch('title') ?>
+    </title>
+    <?= $this->Html->meta('icon') ?>
+
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+
+    <?= $this->fetch('meta') ?>
+    <?= $this->fetch('css') ?>
+               
+       <!-- added by fred for google maps api to work. -->
+       <script src="/js/jquery-3.2.1.min.js"></script>
+       
+       <!-- added by fred for loading the google marker clustering script. -->
+       <script src="/avmaps/js/markerclusterer.js"/></script>
+    
+    <?= $this->fetch('script') ?>
+    
+</head>
+<body>
+    <nav class="top-bar expanded" data-topbar role="navigation">
+        <ul class="title-area large-3 medium-4 columns">
+            <li class="name">
+                <h1><a href=""><?= $this->fetch('title') ?></a></h1>
+            </li>
+        </ul>
+        <div class="top-bar-section">
+            <ul class="right">
+                <li><a target="_blank" href="http://book.cakephp.org/3.0/">Documentation</a></li>
+                <li><a target="_blank" href="http://api.cakephp.org/3.0/">API</a></li>
+            </ul>
+        </div>
+    </nav>
+    <?= $this->Flash->render() ?>
+    <div class="container clearfix">
+        <?= $this->fetch('content') ?>
+    </div>
+    <footer>
+    </footer>
+</body>
+</html>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/error.ctp b/production/example_apps/zippy_maps/src/Template/Layout/error.ctp
new file mode 100644 (file)
index 0000000..5304ec4
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <title>
+        <?= $this->fetch('title') ?>
+    </title>
+    <?= $this->Html->meta('icon') ?>
+
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+
+    <?= $this->fetch('meta') ?>
+    <?= $this->fetch('css') ?>
+    <?= $this->fetch('script') ?>
+</head>
+<body>
+    <div id="container">
+        <div id="header">
+            <h1><?= __('Error') ?></h1>
+        </div>
+        <div id="content">
+            <?= $this->Flash->render() ?>
+
+            <?= $this->fetch('content') ?>
+        </div>
+        <div id="footer">
+            <?= $this->Html->link(__('Back'), 'javascript:history.back()') ?>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp
new file mode 100644 (file)
index 0000000..5c15a19
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+if (!isset($channel)):
+    $channel = [];
+endif;
+if (!isset($channel['title'])):
+    $channel['title'] = $this->fetch('title');
+endif;
+
+echo $this->Rss->document(
+    $this->Rss->channel(
+        [], $channel, $this->fetch('content')
+    )
+);
+?>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/add.ctp b/production/example_apps/zippy_maps/src/Template/Locations/add.ctp
new file mode 100644 (file)
index 0000000..e50d32c
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="locations form large-9 medium-8 columns content">
+    <?= $this->Form->create($location) ?>
+    <fieldset>
+        <legend><?= __('Add Location') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+            echo $this->Form->control('location');
+
+                       echo $this->Form->control('categories._ids', [
+               'type' => 'select',
+                   'multiple' => true,
+               'options' => $categoriesList,
+                       ]);            
+            
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/distance.ctp b/production/example_apps/zippy_maps/src/Template/Locations/distance.ctp
new file mode 100644 (file)
index 0000000..76f7b12
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="locations form large-9 medium-8 columns content">
+    <?= $this->Form->create('DistanceCalculator') ?>
+    <fieldset>
+        <legend><?= __('Calculate Distance') ?></legend>
+        <?php
+                       echo $this->Form->control('from._ids', [
+               'type' => 'select',
+               'options' => $locationsFrom,
+               'value' => $fromId,
+                       ]);
+                       
+                       if ($fromAddress !== null) {
+                               echo $this->Form->control('from-address', [
+                                       'type' => 'textarea',
+                                       'rows' => 1,
+                                       'default' => $fromAddress,
+                                       'disabled' => 'disabled'
+                               ]);                             
+                       }
+            
+                       echo $this->Form->control('to._ids', [
+               'type' => 'select',
+               'options' => $locationsTo,
+               'value' => $toId,
+                       ]);
+
+                       if ($toAddress !== null) {
+                               echo $this->Form->control('to-address', [
+                                       'type' => 'textarea',
+                                       'rows' => 1,
+                                       'default' => $toAddress,
+                                       'disabled' => 'disabled'
+                               ]);                             
+                       }
+                       
+                       echo $this->Form->control('distance', [
+                               'type' => 'textarea',
+                               'rows' => 1,
+                               'default' => $distanceCalculated,
+                               'disabled' => 'disabled'
+                       ]);
+                                   
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Calculate')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/edit.ctp b/production/example_apps/zippy_maps/src/Template/Locations/edit.ctp
new file mode 100644 (file)
index 0000000..2a1e258
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Form->postLink(
+                __('Delete'),
+                ['action' => 'delete', $location->id],
+                ['confirm' => __('Are you sure you want to delete # {0}?', $location->id)]
+            )
+        ?></li>
+        <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?></li>
+    </ul>
+</nav>
+<div class="locations form large-9 medium-8 columns content">
+    <?= $this->Form->create($location) ?>
+    <fieldset>
+        <legend><?= __('Edit Location') ?></legend>
+        <?php
+            echo $this->Form->control('name');
+            echo $this->Form->control('location');
+            
+        echo $this->Form->control('categories._ids', [
+               'type' => 'select',
+                   'multiple' => true,
+                   'val' => $selectedList,
+               'options' => $categoriesList,
+                       ]);
+          
+        ?>
+    </fieldset>
+    <?= $this->Form->button(__('Submit')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/index.ctp b/production/example_apps/zippy_maps/src/Template/Locations/index.ctp
new file mode 100644 (file)
index 0000000..ac96733
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('New Location'), ['action' => 'add']) ?></li>
+        <li><?= $this->Html->link(__('Calculate Distance'), ['action' => 'distance']) ?></li>
+    </ul>
+</nav>
+<div class="locations index large-9 medium-8 columns content">
+    <h3><?= __('Locations') ?></h3>
+    <table cellpadding="0" cellspacing="0">
+        <thead>
+            <tr>
+                <th scope="col"><?= $this->Paginator->sort('id') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('name') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('location') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('lat') ?></th>
+                <th scope="col"><?= $this->Paginator->sort('lng') ?></th>
+                <th scope="col" class="actions"><?= __('Actions') ?></th>
+            </tr>
+        </thead>
+        <tbody>
+            <?php foreach ($locations as $location): ?>
+            <tr>
+                <td><?= $this->Number->format($location->id) ?></td>
+                <td><?= h($location->name) ?></td>
+                <td><?= h($location->location) ?></td>
+                <td><?= h($location->lat) ?></td>
+                <td><?= h($location->lng) ?></td>
+                <td class="actions">
+                    <?= $this->Html->link(__('Jump'), ['action' => 'jump', $location->id]) ?>
+                    <?= $this->Html->link(__('Radius'), ['action' => 'radius', $location->id]) ?>
+                    <?= $this->Html->link(__('View'), ['action' => 'view', $location->id]) ?>
+                    <?= $this->Html->link(__('Edit'), ['action' => 'edit', $location->id]) ?>
+                    <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $location->id], ['confirm' => __('Are you sure you want to delete # {0}?', $location->id)]) ?>
+                </td>
+            </tr>
+            <?php endforeach; ?>
+        </tbody>
+    </table>
+    <div class="paginator">
+        <ul class="pagination">
+            <?= $this->Paginator->first('<< ' . __('first')) ?>
+            <?= $this->Paginator->prev('< ' . __('previous')) ?>
+            <?= $this->Paginator->numbers() ?>
+            <?= $this->Paginator->next(__('next') . ' >') ?>
+            <?= $this->Paginator->last(__('last') . ' >>') ?>
+        </ul>
+        <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
+    </div>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/jump.ctp b/production/example_apps/zippy_maps/src/Template/Locations/jump.ctp
new file mode 100644 (file)
index 0000000..a4631bd
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @var \App\View\AppView $this
+ */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+       <ul class="side-nav">
+               <li class="heading"><?= __('Actions') ?></li>
+               <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?></li>
+       </ul>
+</nav>
+<div class="locations form large-9 medium-8 columns content">
+    <?= $this->Form->create('Jump') ?>
+    <fieldset>
+               <legend><?= __('Jump to Location') ?></legend>
+        <?php
+                       if ($id === null) {
+                               echo h ( 'Sorry, we did not find a location specified as starting point.' );                            
+                       } else {
+                               // location id is good to go, so let's show the map.
+                               
+                               // list the options we want to override or add for the map.
+                               $map_options = 
+                               [
+                                       //off now for sure: 'autoCenter' => true, // automatically encompass markers.
+                                       'clustering' => true,  // cluster the markers.
+                                       'zoom' => 12,  // zoom in pretty far but not as a microscope.
+                                       'lat' => $fromLat,
+                                       'lng' => $fromLong,
+                               ];
+                               
+                               // provide the element with all the info it needs to set up the map.
+                               $element_options = 
+                               [
+                                       'map_options' => $map_options,
+                                       'map_colors' => 'avmaps/js/sg2_map_colors.js',
+                                       'the_map' => $this->GoogleMap,
+                                       // no options to pass to ajax so far...
+                                       'ajax_options' => '{
+                                       }',
+                                       'default_options' => '{
+                                               iconColor: "' . $this->MapDisplay->defaultIconColor() . '",
+                                               json_provider: "/locations.json",
+                                       }',
+                               ];
+                               
+                               echo $this->element('Avmaps.google_map', $element_options);                             
+                       }
+               ?>
+    </fieldset>
+
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/radius.ctp b/production/example_apps/zippy_maps/src/Template/Locations/radius.ctp
new file mode 100644 (file)
index 0000000..11b483e
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @var \App\View\AppView $this
+ */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+       <ul class="side-nav">
+               <li class="heading"><?= __('Actions') ?></li>
+               <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?></li>
+       </ul>
+</nav>
+<div class="locations form large-9 medium-8 columns content">
+    <?= $this->Form->create('RadiusFinder') ?>
+    <fieldset>
+               <legend><?= __('Find Locations Within Radius') ?></legend>
+        <?php
+                       if ($id === null) {
+                               echo h ( 'Sorry, we did not find a location specified as starting point.' );                            
+                       } else {
+                               echo $this->Form->control ( 'from-address', [ 
+                                               'type' => 'textarea',
+                                               'rows' => 1,
+                                               'default' => $fromAddress,
+                                               'disabled' => 'disabled' 
+                               ] );
+                               
+                               echo $this->Form->control ( 'radius (in miles)' , ['default' => $radius]);
+                                                               
+                               // list options we want to override or add for the map.
+                               $map_options = [
+                                       'autoCenter' => true, // automatically encompass markers.
+                                       'clustering' => true,  // cluster the markers.
+                               ];
+                               
+                               // provide the element with all the info it needs to set up the map.
+                               $element_options =
+                               [
+                                       'map_options' => $map_options,
+                                       'map_colors' => 'avmaps/js/sg2_map_colors.js',
+                                       'the_map' => $this->GoogleMap,
+                                       // no options to pass to ajax so far...
+                                       'ajax_options' => '{
+                                       }',
+                                       // not passing json provider, since we are doing a special radius thing here.  so no updates.
+                                       'default_options' => '{
+                                               iconColor: "' . $this->MapDisplay->defaultIconColor() . '",
+                                       }',
+                               ];
+                                                               
+                               echo $this->element('Avmaps.google_map', $element_options);
+                       }
+               ?>
+    </fieldset>
+    <?= $this->Form->button(__('Calculate')) ?>
+    <?= $this->Form->end() ?>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/view.ctp b/production/example_apps/zippy_maps/src/Template/Locations/view.ctp
new file mode 100644 (file)
index 0000000..855df52
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+use Avmaps\Controller\Component\SimpleMapsComponent;
+
+/**
+  * @var \App\View\AppView $this
+  */
+?>
+<nav class="large-3 medium-4 columns" id="actions-sidebar">
+    <ul class="side-nav">
+        <li class="heading"><?= __('Actions') ?></li>
+        <li><?= $this->Html->link(__('Edit Location'), ['action' => 'edit', $location->id]) ?> </li>
+        <li><?= $this->Form->postLink(__('Delete Location'), ['action' => 'delete', $location->id], ['confirm' => __('Are you sure you want to delete # {0}?', $location->id)]) ?> </li>
+        <li><?= $this->Html->link(__('List Locations'), ['action' => 'index']) ?> </li>
+        <li><?= $this->Html->link(__('New Location'), ['action' => 'add']) ?> </li>
+    </ul>
+</nav>
+<div class="locations view large-9 medium-8 columns content">
+    <h3><?= h($location->name) ?></h3>
+    <table class="vertical-table">
+        <tr>
+            <th scope="row"><?= __('Name') ?></th>
+            <td><?= h($location->name) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Location') ?></th>
+            <td><?= h($location->location) ?></td>
+            <td>
+                               <?php
+
+        //beginning of static map junk...
+        $addresses = [
+                       [ 'address' => $location->lat
+                       . ',' . $location->lng 
+                       ],
+        ];
+                
+        $marker_options = [
+                       'color' => $this->MapDisplay->defaultIconColor(),
+                       'shadow' => 'false'
+        ];
+        
+        $markers = $this->GoogleMap->staticMarkers($addresses, $marker_options);
+        
+        $map_options = [
+                       'center' => $location->lat
+                       . ',' . $location->lng,
+                       'markers' => $markers,
+                       'zoom' => 8,
+        ];
+        
+        $map = $this->GoogleMap->staticMap($map_options);
+        
+        echo $map;
+        
+        $this->GoogleMap->finalize();
+        
+        //end static map junk.
+                       ?>
+            
+            </td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Lat&Long') ?></th>
+            <td><?= h($location->lat . ',' . $location->lng) ?></td>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Zip Code (RGC)') ?></th>
+            <td>
+            <?php
+            $results = SimpleMapsComponent::reverseGeocode($location->lat, $location->lng, [
+               'key' => $api_key
+            ]);
+            if ($results) {
+                               echo h($results[0]);
+            } else {
+               echo h('failed to reverse geocode');
+            }
+
+            ?>
+        </tr>
+        <tr>
+            <th scope="row"><?= __('Address (RGC)') ?></th>
+            <td><?= h($results[1]) ?></td>
+        </tr>
+        <tr>
+        <th scope="row"><?= __('Categories') ?></th>
+        <td>
+        <?= $this->Form->control('categories._ids', [
+               'type' => 'select',
+                   'multiple' => true,
+                   'val' => $selectedList,
+               'options' => $categoriesList,
+                       ]);
+                       ?>
+               </td>
+    </table>
+</div>
diff --git a/production/example_apps/zippy_maps/src/Template/Pages/home.ctp b/production/example_apps/zippy_maps/src/Template/Pages/home.ctp
new file mode 100644 (file)
index 0000000..b495ee8
--- /dev/null
@@ -0,0 +1,290 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.10.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+use Cake\Cache\Cache;
+use Cake\Core\Configure;
+use Cake\Core\Plugin;
+use Cake\Datasource\ConnectionManager;
+use Cake\Error\Debugger;
+use Cake\Network\Exception\NotFoundException;
+
+$this->layout = false;
+
+if (!Configure::read('debug')):
+    throw new NotFoundException('Please replace src/Template/Pages/home.ctp with your own version.');
+endif;
+
+$cakeDescription = 'Maps Demo - showing what we can do to google maps';
+?>
+<!DOCTYPE html>
+<html>
+<head>
+    <?= $this->Html->charset() ?>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>
+        <?= $cakeDescription ?>
+    </title>
+
+    <?= $this->Html->meta('icon') ?>
+    <?= $this->Html->css('base.css') ?>
+    <?= $this->Html->css('cake.css') ?>
+    <?= $this->Html->css('home.css') ?>
+    <link href="https://fonts.googleapis.com/css?family=Raleway:500i|Roboto:300,400,700|Roboto+Mono" rel="stylesheet">
+</head>
+<body class="home">
+
+       <header class="row">
+               <div class="header-image"><?= $this->Html->image('/img/charlottesville_minimap.png') ?></div>
+               <div class="header-title">
+                       <h1>Maps are not the territory.</h1>
+               </div>
+       </header>
+
+       <div class="fredmenu">
+               <ul>
+                       <li>Locations Manager: <a target="_blank" href="/locations">Map
+                                       Locations</a>
+                       </li>
+                       <li>Categories Manager: <a target="_blank" href="/categories">Map
+                                       Categories</a>
+                       </li>
+               </ul>
+       </div>
+
+       <div class="row">
+    <div class="columns large-12">
+    <div class="header-title">
+            <h3>Based on CakePHP <?= Configure::version() ?> Red Velvet.</h3>
+    </div>
+        <div class="ctp-warning alert text-center">
+            <p>Please be aware that this page will not be shown if you turn off debug mode unless you replace src/Template/Pages/home.ctp with your own version.</p>
+        </div>
+        <div id="url-rewriting-warning" class="alert url-rewriting">
+            <ul>
+                <li class="bullet problem">
+                    URL rewriting is not properly configured on your server.<br />
+                    1) <a target="_blank" href="http://book.cakephp.org/3.0/en/installation.html#url-rewriting">Help me configure it</a><br />
+                    2) <a target="_blank" href="http://book.cakephp.org/3.0/en/development/configuration.html#general-configuration">I don't / can't use URL rewriting</a>
+                </li>
+            </ul>
+        </div>
+        <?php Debugger::checkSecurityKeys(); ?>
+    </div>
+</div>
+
+<div class="row">
+    <div class="columns large-6">
+        <h4>Environment</h4>
+        <ul>
+        <?php if (version_compare(PHP_VERSION, '5.6.0', '>=')): ?>
+            <li class="bullet success">Your version of PHP is 5.6.0 or higher (detected <?= PHP_VERSION ?>).</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected <?= PHP_VERSION ?>).</li>
+        <?php endif; ?>
+
+        <?php if (extension_loaded('mbstring')): ?>
+            <li class="bullet success">Your version of PHP has the mbstring extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have the mbstring extension loaded.</li>;
+        <?php endif; ?>
+
+        <?php if (extension_loaded('openssl')): ?>
+            <li class="bullet success">Your version of PHP has the openssl extension loaded.</li>
+        <?php elseif (extension_loaded('mcrypt')): ?>
+            <li class="bullet success">Your version of PHP has the mcrypt extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have the openssl or mcrypt extension loaded.</li>
+        <?php endif; ?>
+
+        <?php if (extension_loaded('intl')): ?>
+            <li class="bullet success">Your version of PHP has the intl extension loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your version of PHP does NOT have the intl extension loaded.</li>
+        <?php endif; ?>
+        </ul>
+    </div>
+    <div class="columns large-6">
+        <h4>Filesystem</h4>
+        <ul>
+        <?php if (is_writable(TMP)): ?>
+            <li class="bullet success">Your tmp directory is writable.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your tmp directory is NOT writable.</li>
+        <?php endif; ?>
+
+        <?php if (is_writable(LOGS)): ?>
+            <li class="bullet success">Your logs directory is writable.</li>
+        <?php else: ?>
+            <li class="bullet problem">Your logs directory is NOT writable.</li>
+        <?php endif; ?>
+
+        <?php $settings = Cache::config('_cake_core_'); ?>
+        <?php if (!empty($settings)): ?>
+            <li class="bullet success">The <em><?= $settings['className'] ?>Engine</em> is being used for core caching. To change the config edit config/app.php</li>
+        <?php else: ?>
+            <li class="bullet problem">Your cache is NOT working. Please check the settings in config/app.php</li>
+        <?php endif; ?>
+        </ul>
+    </div>
+    <hr />
+</div>
+
+<div class="row">
+    <div class="columns large-6">
+        <h4>Database</h4>
+        <?php
+        try {
+            $connection = ConnectionManager::get('default');
+            $connected = $connection->connect();
+        } catch (Exception $connectionError) {
+            $connected = false;
+            $errorMsg = $connectionError->getMessage();
+            if (method_exists($connectionError, 'getAttributes')):
+                $attributes = $connectionError->getAttributes();
+                if (isset($errorMsg['message'])):
+                    $errorMsg .= '<br />' . $attributes['message'];
+                endif;
+            endif;
+        }
+        ?>
+        <ul>
+        <?php if ($connected): ?>
+            <li class="bullet success">CakePHP is able to connect to the database.</li>
+        <?php else: ?>
+            <li class="bullet problem">CakePHP is NOT able to connect to the database.<br /><?= $errorMsg ?></li>
+        <?php endif; ?>
+        </ul>
+    </div>
+    <div class="columns large-6">
+        <h4>DebugKit</h4>
+        <ul>
+        <?php if (Plugin::loaded('DebugKit')): ?>
+            <li class="bullet success">DebugKit is loaded.</li>
+        <?php else: ?>
+            <li class="bullet problem">DebugKit is NOT loaded. You need to either install pdo_sqlite, or define the "debug_kit" connection name.</li>
+        <?php endif; ?>
+        </ul>
+    </div>
+    <hr />
+</div>
+
+<div class="row">
+    <div class="columns large-6">
+        <h3>Editing this Page</h3>
+        <ul>
+            <li class="bullet cutlery">To change the content of this page, edit: src/Template/Pages/home.ctp.</li>
+            <li class="bullet cutlery">You can also add some CSS styles for your pages at: webroot/css/.</li>
+        </ul>
+    </div>
+    <div class="columns large-6">
+        <h3>Getting Started</h3>
+        <ul>
+            <li class="bullet book"><a target="_blank" href="http://book.cakephp.org/3.0/en/">CakePHP 3.0 Docs</a></li>
+            <li class="bullet book"><a target="_blank" href="http://book.cakephp.org/3.0/en/tutorials-and-examples/bookmarks/intro.html">The 15 min Bookmarker Tutorial</a></li>
+            <li class="bullet book"><a target="_blank" href="http://book.cakephp.org/3.0/en/tutorials-and-examples/blog/blog.html">The 15 min Blog Tutorial</a></li>
+        </ul>
+        <p>
+    </div>
+</div>
+
+<div class="row">
+    <div class="columns large-12 text-center">
+        <h3 class="more">More about Cake</h3>
+        <p>
+            CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Front Controller and MVC.<br />
+            Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.
+        </p>
+    </div>
+    <hr/>
+</div>
+
+<div class="row">
+    <div class="columns large-4">
+        <i class="icon support">P</i>
+        <h3>Help and Bug Reports</h3>
+        <ul>
+            <li class="bullet cutlery">
+                <a href="irc://irc.freenode.net/cakephp">irc.freenode.net #cakephp</a>
+                <ul><li>Live chat about CakePHP</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="https://github.com/cakephp/cakephp/issues">CakePHP Issues</a>
+                <ul><li>CakePHP issues and pull requests</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://discourse.cakephp.org/">CakePHP Forum</a>
+                <ul><li>CakePHP official discussion forum</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="https://groups.google.com/group/cake-php">CakePHP Google Group</a>
+                <ul><li>Community mailing list</li></ul>
+            </li>
+        </ul>
+    </div>
+    <div class="columns large-4">
+        <i class="icon docs">r</i>
+        <h3>Docs and Downloads</h3>
+        <ul>
+            <li class="bullet cutlery">
+                <a href="http://api.cakephp.org/3.0/">CakePHP API</a>
+                <ul><li>Quick Reference</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://book.cakephp.org/3.0/en/">CakePHP Documentation</a>
+                <ul><li>Your Rapid Development Cookbook</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://bakery.cakephp.org">The Bakery</a>
+                <ul><li>Everything CakePHP</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://plugins.cakephp.org">CakePHP plugins repo</a>
+                <ul><li>A comprehensive list of all CakePHP plugins created by the community</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="https://github.com/cakephp/">CakePHP Code</a>
+                <ul><li>For the Development of CakePHP Git repository, Downloads</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="https://github.com/FriendsOfCake/awesome-cakephp">CakePHP Awesome List</a>
+                <ul><li>A curated list of amazingly awesome CakePHP plugins, resources and shiny things.</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://www.cakephp.org">CakePHP</a>
+                <ul><li>The Rapid Development Framework</li></ul>
+            </li>
+        </ul>
+    </div>
+    <div class="columns large-4">
+        <i class="icon training">s</i>
+        <h3>Training and Certification</h3>
+        <ul>
+            <li class="bullet cutlery">
+                <a href="http://cakefoundation.org/">Cake Software Foundation</a>
+                <ul><li>Promoting development related to CakePHP</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://training.cakephp.org/">CakePHP Training</a>
+                <ul><li>Learn to use the CakePHP framework</li></ul>
+            </li>
+            <li class="bullet cutlery">
+                <a href="http://certification.cakephp.org/">CakePHP Certification</a>
+                <ul><li>Become a certified CakePHP developer</li></ul>
+            </li>
+        </ul>
+    </div>
+</div>
+
+</body>
+</html>
diff --git a/production/example_apps/zippy_maps/src/View/AjaxView.php b/production/example_apps/zippy_maps/src/View/AjaxView.php
new file mode 100644 (file)
index 0000000..594e2d8
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.0.4
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\View;
+
+use Cake\Event\EventManager;
+use Cake\Network\Request;
+use Cake\Network\Response;
+
+/**
+ * A view class that is used for AJAX responses.
+ * Currently only switches the default layout and sets the response type -
+ * which just maps to text/html by default.
+ */
+class AjaxView extends AppView
+{
+
+    /**
+     * The name of the layout file to render the view inside of. The name
+     * specified is the filename of the layout in /src/Template/Layout without
+     * the .ctp extension.
+     *
+     * @var string
+     */
+    public $layout = 'ajax';
+
+    /**
+     * Initialization hook method.
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+        parent::initialize();
+
+        $this->response->type('ajax');
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/View/AppView.php b/production/example_apps/zippy_maps/src/View/AppView.php
new file mode 100644 (file)
index 0000000..afbb42e
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link      http://cakephp.org CakePHP(tm) Project
+ * @since     3.0.0
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\View;
+
+use Cake\View\View;
+
+/**
+ * Application View
+ *
+ * Your application’s default view class
+ *
+ * @link http://book.cakephp.org/3.0/en/views.html#the-app-view
+ */
+class AppView extends View
+{
+
+    /**
+     * Initialization hook method.
+     *
+     * Use this method to add common initialization code like loading helpers.
+     *
+     * e.g. `$this->loadHelper('Html');`
+     *
+     * @return void
+     */
+    public function initialize()
+    {
+       // code added to load mapping view helper.
+       $config = [
+                       'autoScript' => true,
+                       'className' => 'Avmaps.ClusteringMap'
+       ];
+       $this->loadHelper('Geo.GoogleMap', $config);
+       
+       $this->loadHelper('Avmaps.MapDisplay');
+    }
+}
diff --git a/production/example_apps/zippy_maps/src/View/Helper/empty b/production/example_apps/zippy_maps/src/View/Helper/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php b/production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php
new file mode 100644 (file)
index 0000000..7502179
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+namespace App\Test\Fixture;
+
+use Cake\TestSuite\Fixture\TestFixture;
+
+/**
+ * CategoriesFixture
+ *
+ */
+class CategoriesFixture extends TestFixture
+{
+
+    /**
+     * Fields
+     *
+     * @var array
+     */
+    // @codingStandardsIgnoreStart
+    public $fields = [
+        'id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
+        'name' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
+        'parent' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
+        'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        '_constraints' => [
+            'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
+            'name' => ['type' => 'unique', 'columns' => ['name'], 'length' => []],
+        ],
+        '_options' => [
+            'engine' => 'InnoDB',
+            'collation' => 'utf8_general_ci'
+        ],
+    ];
+    // @codingStandardsIgnoreEnd
+
+    /**
+     * Records
+     *
+     * @var array
+     */
+    public $records = [
+        [
+            'id' => 1,
+            'name' => 'Lorem ipsum dolor sit amet',
+            'parent' => 1,
+            'created' => '2017-04-26 14:08:10',
+            'modified' => '2017-04-26 14:08:10'
+        ],
+    ];
+}
diff --git a/production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php b/production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php
new file mode 100644 (file)
index 0000000..6c515f2
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+namespace App\Test\Fixture;
+
+use Cake\TestSuite\Fixture\TestFixture;
+
+/**
+ * CategoriesLocationsFixture
+ *
+ */
+class CategoriesLocationsFixture extends TestFixture
+{
+
+    /**
+     * Fields
+     *
+     * @var array
+     */
+    // @codingStandardsIgnoreStart
+    public $fields = [
+        'id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
+        'location_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
+        'category_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
+        'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        '_indexes' => [
+            'location_id' => ['type' => 'index', 'columns' => ['location_id'], 'length' => []],
+            'category_id' => ['type' => 'index', 'columns' => ['category_id'], 'length' => []],
+        ],
+        '_constraints' => [
+            'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
+            'categories_locations_ibfk_1' => ['type' => 'foreign', 'columns' => ['location_id'], 'references' => ['locations', 'id'], 'update' => 'restrict', 'delete' => 'restrict', 'length' => []],
+            'categories_locations_ibfk_2' => ['type' => 'foreign', 'columns' => ['category_id'], 'references' => ['categories', 'id'], 'update' => 'restrict', 'delete' => 'restrict', 'length' => []],
+        ],
+        '_options' => [
+            'engine' => 'InnoDB',
+            'collation' => 'utf8_general_ci'
+        ],
+    ];
+    // @codingStandardsIgnoreEnd
+
+    /**
+     * Records
+     *
+     * @var array
+     */
+    public $records = [
+        [
+            'id' => 1,
+            'location_id' => 1,
+            'category_id' => 1,
+            'created' => '2017-05-01 18:36:01',
+            'modified' => '2017-05-01 18:36:01'
+        ],
+    ];
+}
diff --git a/production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php b/production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php
new file mode 100644 (file)
index 0000000..fe44867
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+namespace App\Test\Fixture;
+
+use Cake\TestSuite\Fixture\TestFixture;
+
+/**
+ * LocationsFixture
+ *
+ */
+class LocationsFixture extends TestFixture
+{
+
+    /**
+     * Fields
+     *
+     * @var array
+     */
+    // @codingStandardsIgnoreStart
+    public $fields = [
+        'id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
+        'name' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
+        'location' => ['type' => 'string', 'length' => 1024, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
+        'lat' => ['type' => 'float', 'null' => true, 'default' => null, ],
+       'lng' => ['type' => 'float', 'null' => true, 'default' => null, ],              
+        'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
+        '_indexes' => [
+            'location' => ['type' => 'index', 'columns' => ['location'], 'length' => []],
+        ],
+        '_constraints' => [
+            'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
+            'name' => ['type' => 'unique', 'columns' => ['name'], 'length' => []],
+        ],
+        '_options' => [
+            'engine' => 'InnoDB',
+            'collation' => 'utf8_general_ci'
+        ],
+    ];
+    // @codingStandardsIgnoreEnd
+
+    /**
+     * Records
+     *
+     * @var array
+     */
+    public $records = [
+        [
+            'id' => 1,
+            'name' => 'Lorem ipsum dolor sit amet',
+            'location' => 'Lorem ipsum dolor sit amet',
+            'lat' => 30.8,
+               'lng' => -12.6,
+               'created' => '2017-04-21 14:54:02',
+            'modified' => '2017-04-21 14:54:02'
+        ],
+    ];
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php b/production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php
new file mode 100644 (file)
index 0000000..d397fa1
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.3.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Test\TestCase;
+
+use App\Application;
+use Cake\Error\Middleware\ErrorHandlerMiddleware;
+use Cake\Http\MiddlewareQueue;
+use Cake\Routing\Middleware\AssetMiddleware;
+use Cake\Routing\Middleware\RoutingMiddleware;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * ApplicationTest class
+ */
+class ApplicationTest extends IntegrationTestCase
+{
+
+    /**
+     * testMiddleware
+     *
+     * @return void
+     */
+    public function testMiddleware()
+    {
+        $app = new Application(dirname(dirname(__DIR__)) . '/config');
+        $middleware = new MiddlewareQueue();
+
+        $middleware = $app->middleware($middleware);
+
+        $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0));
+        $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1));
+        $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2));
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php
new file mode 100644 (file)
index 0000000..f0884e4
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\CategoriesController;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * App\Controller\CategoriesController Test Case
+ */
+class CategoriesControllerTest extends IntegrationTestCase
+{
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.categories'
+    ];
+
+    /**
+     * Test index method
+     *
+     * @return void
+     */
+    public function testIndex()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test view method
+     *
+     * @return void
+     */
+    public function testView()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test add method
+     *
+     * @return void
+     */
+    public function testAdd()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test edit method
+     *
+     * @return void
+     */
+    public function testEdit()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test delete method
+     *
+     * @return void
+     */
+    public function testDelete()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/Component/empty b/production/example_apps/zippy_maps/tests/TestCase/Controller/Component/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php
new file mode 100644 (file)
index 0000000..014f2fa
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\LocationsController;
+use Cake\TestSuite\IntegrationTestCase;
+
+/**
+ * App\Controller\LocationsController Test Case
+ */
+class LocationsControllerTest extends IntegrationTestCase
+{
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.locations'
+    ];
+
+    /**
+     * Test index method
+     *
+     * @return void
+     */
+    public function testIndex()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test view method
+     *
+     * @return void
+     */
+    public function testView()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test add method
+     *
+     * @return void
+     */
+    public function testAdd()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test edit method
+     *
+     * @return void
+     */
+    public function testEdit()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test delete method
+     *
+     * @return void
+     */
+    public function testDelete()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php
new file mode 100644 (file)
index 0000000..1b478a3
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         1.2.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace App\Test\TestCase\Controller;
+
+use App\Controller\PagesController;
+use Cake\Core\App;
+use Cake\Core\Configure;
+use Cake\Network\Request;
+use Cake\Network\Response;
+use Cake\TestSuite\IntegrationTestCase;
+use Cake\View\Exception\MissingTemplateException;
+
+/**
+ * PagesControllerTest class
+ */
+class PagesControllerTest extends IntegrationTestCase
+{
+    /**
+     * testMultipleGet method
+     *
+     * @return void
+     */
+    public function testMultipleGet()
+    {
+        $this->get('/');
+        $this->assertResponseOk();
+        $this->get('/');
+        $this->assertResponseOk();
+    }
+
+    /**
+     * testDisplay method
+     *
+     * @return void
+     */
+    public function testDisplay()
+    {
+        $this->get('/pages/home');
+        $this->assertResponseOk();
+        $this->assertResponseContains('CakePHP');
+        $this->assertResponseContains('<html>');
+    }
+
+    /**
+     * Test that missing template renders 404 page in production
+     *
+     * @return void
+     */
+    public function testMissingTemplate()
+    {
+        Configure::write('debug', false);
+        $this->get('/pages/not_existing');
+
+        $this->assertResponseError();
+        $this->assertResponseContains('Error');
+    }
+
+    /**
+     * Test that missing template in debug mode renders missing_template error page
+     *
+     * @return void
+     */
+    public function testMissingTemplateInDebug()
+    {
+        Configure::write('debug', true);
+        $this->get('/pages/not_existing');
+
+        $this->assertResponseFailure();
+        $this->assertResponseContains('Missing Template');
+        $this->assertResponseContains('Stacktrace');
+        $this->assertResponseContains('not_existing.ctp');
+    }
+
+    /**
+     * Test directory traversal protection
+     *
+     * @return void
+     */
+    public function testDirectoryTraversalProtection()
+    {
+        $this->get('/pages/../Layout/ajax');
+        $this->assertResponseCode(403);
+        $this->assertResponseContains('Forbidden');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Behavior/empty b/production/example_apps/zippy_maps/tests/TestCase/Model/Behavior/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php
new file mode 100644 (file)
index 0000000..1a45795
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+namespace App\Test\TestCase\Model\Table;
+
+use App\Model\Table\CategoriesLocationsTable;
+use Cake\ORM\TableRegistry;
+use Cake\TestSuite\TestCase;
+
+/**
+ * App\Model\Table\CategoriesLocationsTable Test Case
+ */
+class CategoriesLocationsTableTest extends TestCase
+{
+
+    /**
+     * Test subject
+     *
+     * @var \App\Model\Table\CategoriesLocationsTable
+     */
+    public $CategoriesLocations;
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.categories_locations',
+        'app.locations',
+        'app.categories'
+    ];
+
+    /**
+     * setUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $config = TableRegistry::exists('CategoriesLocations') ? [] : ['className' => 'App\Model\Table\CategoriesLocationsTable'];
+        $this->CategoriesLocations = TableRegistry::get('CategoriesLocations', $config);
+    }
+
+    /**
+     * tearDown method
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        unset($this->CategoriesLocations);
+
+        parent::tearDown();
+    }
+
+    /**
+     * Test initialize method
+     *
+     * @return void
+     */
+    public function testInitialize()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test validationDefault method
+     *
+     * @return void
+     */
+    public function testValidationDefault()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test buildRules method
+     *
+     * @return void
+     */
+    public function testBuildRules()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php
new file mode 100644 (file)
index 0000000..a618e67
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace App\Test\TestCase\Model\Table;
+
+use App\Model\Table\CategoriesTable;
+use Cake\ORM\TableRegistry;
+use Cake\TestSuite\TestCase;
+
+/**
+ * App\Model\Table\CategoriesTable Test Case
+ */
+class CategoriesTableTest extends TestCase
+{
+
+    /**
+     * Test subject
+     *
+     * @var \App\Model\Table\CategoriesTable
+     */
+    public $Categories;
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.categories'
+    ];
+
+    /**
+     * setUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $config = TableRegistry::exists('Categories') ? [] : ['className' => 'App\Model\Table\CategoriesTable'];
+        $this->Categories = TableRegistry::get('Categories', $config);
+    }
+
+    /**
+     * tearDown method
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        unset($this->Categories);
+
+        parent::tearDown();
+    }
+
+    /**
+     * Test initialize method
+     *
+     * @return void
+     */
+    public function testInitialize()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test validationDefault method
+     *
+     * @return void
+     */
+    public function testValidationDefault()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test buildRules method
+     *
+     * @return void
+     */
+    public function testBuildRules()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php
new file mode 100644 (file)
index 0000000..5966971
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace App\Test\TestCase\Model\Table;
+
+use App\Model\Table\LocationsTable;
+use Cake\ORM\TableRegistry;
+use Cake\TestSuite\TestCase;
+
+/**
+ * App\Model\Table\LocationsTable Test Case
+ */
+class LocationsTableTest extends TestCase
+{
+
+    /**
+     * Test subject
+     *
+     * @var \App\Model\Table\LocationsTable
+     */
+    public $Locations;
+
+    /**
+     * Fixtures
+     *
+     * @var array
+     */
+    public $fixtures = [
+        'app.locations'
+    ];
+
+    /**
+     * setUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $config = TableRegistry::exists('Locations') ? [] : ['className' => 'App\Model\Table\LocationsTable'];
+        $this->Locations = TableRegistry::get('Locations', $config);
+    }
+
+    /**
+     * tearDown method
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        unset($this->Locations);
+
+        parent::tearDown();
+    }
+
+    /**
+     * Test initialize method
+     *
+     * @return void
+     */
+    public function testInitialize()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test validationDefault method
+     *
+     * @return void
+     */
+    public function testValidationDefault()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+
+    /**
+     * Test buildRules method
+     *
+     * @return void
+     */
+    public function testBuildRules()
+    {
+        $this->markTestIncomplete('Not implemented yet.');
+    }
+}
diff --git a/production/example_apps/zippy_maps/tests/TestCase/View/Helper/empty b/production/example_apps/zippy_maps/tests/TestCase/View/Helper/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/tests/bootstrap.php b/production/example_apps/zippy_maps/tests/bootstrap.php
new file mode 100644 (file)
index 0000000..0ca191e
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Test runner bootstrap.
+ *
+ * Add additional configuration/setup your application needs when running
+ * unit tests in this file.
+ */
+require dirname(__DIR__) . '/vendor/autoload.php';
+
+require dirname(__DIR__) . '/config/bootstrap.php';
+
+$_SERVER['PHP_SELF'] = '/';
diff --git a/production/example_apps/zippy_maps/webroot/.htaccess b/production/example_apps/zippy_maps/webroot/.htaccess
new file mode 100644 (file)
index 0000000..f5f2d63
--- /dev/null
@@ -0,0 +1,5 @@
+<IfModule mod_rewrite.c>
+    RewriteEngine On
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteRule ^ index.php [L]
+</IfModule>
diff --git a/production/example_apps/zippy_maps/webroot/css/base.css b/production/example_apps/zippy_maps/webroot/css/base.css
new file mode 100644 (file)
index 0000000..f8bd4f6
--- /dev/null
@@ -0,0 +1,450 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-family: sans-serif; /* 1 */
+    -ms-text-size-adjust: 100%; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+    margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+    display: inline-block; /* 1 */
+    vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+    display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+    background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+    font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+    border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+    margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+    overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, monospace;
+    font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+    color: inherit; /* 1 */
+    font: inherit; /* 2 */
+    margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+    overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+    text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+    cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+    line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+    height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+    overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+    font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+td,
+th {
+    padding: 0;
+}
+
+/*
+ * Copyright (c) 2013-2014 ZURB, inc.
+* MIT License
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to deal in the Software without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to
+* permit persons to whom the Software is furnished to do so, subject to
+* the following conditions:
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+meta.foundation-version{font-family:"{{ VERSION }}"}meta.foundation-mq-small{font-family:"/only screen/";width:0}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.0625em) and (max-width:64em)/";width:40.0625em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.0625em)/";width:64.0625em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.0625em) and (max-width:90em)/";width:64.0625em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.0625em)/";width:90.0625em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.0625em) and (max-width:120em)/";width:90.0625em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.0625em)/";width:120.0625em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}html{box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}html,body{font-size:100%}body{background:#fff;color:#222;cursor:auto;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.5;margin:0;padding:0;position:relative}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{margin:0 auto;max-width:62.5rem;width:100%}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{margin:0 -0.9375rem;max-width:none;width:auto}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{margin:0;max-width:none;width:auto}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}.column+.column:last-child,.columns+.column:last-child,.column+.columns:last-child,.columns+.columns:last-child{float:right}.column+.column.end,.columns+.column.end,.column+.columns.end,.columns+.columns.end{float:left}@media only screen{.small-push-0{position:relative;left:0;right:auto}.small-pull-0{position:relative;right:0;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0 !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{float:left;margin-left:0;margin-right:0}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width: 40.0625em){.medium-push-0{position:relative;left:0;right:auto}.medium-pull-0{position:relative;right:0;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0 !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{float:left;margin-left:0;margin-right:0}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.0625em){.large-push-0{position:relative;left:0;right:auto}.large-pull-0{position:relative;right:0;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0 !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{float:left;margin-left:0;margin-right:0}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}button,.button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#008CBA;border-color:#007095;color:#fff;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#007095}button:hover,button:focus,.button:hover,.button:focus{color:#fff}button.secondary,.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#b9b9b9}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333}button.success,.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#368a55}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#fff}button.alert,.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#cf2a0e}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#fff}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#fff}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#fff}button.large,.button.large{padding:1.125rem 2.25rem 1.1875rem 2.25rem;font-size:1.25rem}button.small,.button.small{padding:0.875rem 1.75rem 0.9375rem 1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding:0.625rem 1.25rem 0.6875rem 1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding-left:0;padding-right:0;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#008CBA;border-color:#007095;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#007095}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#fff}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#008CBA}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#b9b9b9}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e7e7e7}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#43AC6A;border-color:#368a55;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#368a55}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#fff}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#43AC6A}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#f04124;border-color:#cf2a0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#cf2a0e}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#fff}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#f04124}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#fff}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#fff}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width: 40.0625em){button,.button{display:inline-block}}form{margin:0 0 1rem}form .row .row{margin:0 -0.5rem}form .row .row .column,form .row .row .columns{padding:0 0.5rem}form .row .row.collapse{margin:0}form .row .row.collapse .column,form .row .row.collapse .columns{padding:0}form .row .row.collapse input{-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}form .row input.column,form .row input.columns,form .row textarea.column,form .row textarea.columns{padding-left:0.5rem}label{color:#4d4d4d;cursor:pointer;display:block;font-size:0.875rem;font-weight:normal;line-height:1.5;margin-bottom:0}label.right{float:none !important;text-align:right}label.inline{margin:0 0 1rem 0;padding:0.5625rem 0}label small{text-transform:capitalize;color:#676767}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}.postfix.button{border-color:true}.prefix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button.radius{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.postfix.button.radius{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.prefix.button.round{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.postfix.button.round{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333;border-color:#ccc}span.postfix,label.postfix{background:#f2f2f2;color:#333;border-color:#ccc}input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#fff;border-style:solid;border-width:1px;border-color:#ccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}input[type="text"]:focus,input[type="password"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="color"]:focus,textarea:focus{background:#fafafa;border-color:#999;outline:none}input[type="text"]:disabled,input[type="password"]:disabled,input[type="date"]:disabled,input[type="datetime"]:disabled,input[type="datetime-local"]:disabled,input[type="month"]:disabled,input[type="week"]:disabled,input[type="email"]:disabled,input[type="number"]:disabled,input[type="search"]:disabled,input[type="tel"]:disabled,input[type="time"]:disabled,input[type="url"]:disabled,input[type="color"]:disabled,textarea:disabled{background-color:#ddd;cursor:default}input[type="text"][disabled],input[type="text"][readonly],fieldset[disabled] input[type="text"],input[type="password"][disabled],input[type="password"][readonly],fieldset[disabled] input[type="password"],input[type="date"][disabled],input[type="date"][readonly],fieldset[disabled] input[type="date"],input[type="datetime"][disabled],input[type="datetime"][readonly],fieldset[disabled] input[type="datetime"],input[type="datetime-local"][disabled],input[type="datetime-local"][readonly],fieldset[disabled] input[type="datetime-local"],input[type="month"][disabled],input[type="month"][readonly],fieldset[disabled] input[type="month"],input[type="week"][disabled],input[type="week"][readonly],fieldset[disabled] input[type="week"],input[type="email"][disabled],input[type="email"][readonly],fieldset[disabled] input[type="email"],input[type="number"][disabled],input[type="number"][readonly],fieldset[disabled] input[type="number"],input[type="search"][disabled],input[type="search"][readonly],fieldset[disabled] input[type="search"],input[type="tel"][disabled],input[type="tel"][readonly],fieldset[disabled] input[type="tel"],input[type="time"][disabled],input[type="time"][readonly],fieldset[disabled] input[type="time"],input[type="url"][disabled],input[type="url"][readonly],fieldset[disabled] input[type="url"],input[type="color"][disabled],input[type="color"][readonly],fieldset[disabled] input[type="color"],textarea[disabled],textarea[readonly],fieldset[disabled] textarea{background-color:#ddd;cursor:default}input[type="text"].radius,input[type="password"].radius,input[type="date"].radius,input[type="datetime"].radius,input[type="datetime-local"].radius,input[type="month"].radius,input[type="week"].radius,input[type="email"].radius,input[type="number"].radius,input[type="search"].radius,input[type="tel"].radius,input[type="time"].radius,input[type="url"].radius,input[type="color"].radius,textarea.radius{border-radius:3px}form .row .prefix-radius.row.collapse input,form .row .prefix-radius.row.collapse textarea,form .row .prefix-radius.row.collapse select,form .row .prefix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-radius.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse input,form .row .postfix-radius.row.collapse textarea,form .row .postfix-radius.row.collapse select,form .row .postfix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-round.row.collapse input,form .row .prefix-round.row.collapse textarea,form .row .prefix-round.row.collapse select,form .row .prefix-round.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}form .row .prefix-round.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse input,form .row .postfix-round.row.collapse textarea,form .row .postfix-round.row.collapse select,form .row .postfix-round.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;border-radius:0}textarea[rows]{height:auto}textarea{max-width:100%}::-webkit-input-placeholder{color:#ccc}:-moz-placeholder{color:#ccc}::-moz-placeholder{color:#ccc}:-ms-input-placeholder{color:#ccc}select{-webkit-appearance:none !important;-moz-appearance:none !important;background-color:#FAFAFA;border-radius:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#ccc;color:rgba(0,0,0,0.75);font-family:inherit;font-size:0.875rem;line-height:normal;padding:0.5rem;border-radius:0;height:2.3125rem}select::-ms-expand{display:none}select.radius{border-radius:3px}select:hover{background-color:#f3f3f3;border-color:#999}select:disabled{background-color:#ddd;cursor:default}select[multiple]{height:auto}input[type="file"],input[type="checkbox"],input[type="radio"],select{margin:0 0 1rem 0}input[type="checkbox"]+label,input[type="radio"]+label{display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}input[type="file"]{width:100%}fieldset{border:1px solid #ddd;margin:1.125rem 0;padding:1.25rem}fieldset legend{background:#fff;font-weight:bold;margin-left:-0.1875rem;margin:0;padding:0 0.1875rem}[data-abide] .error small.error,[data-abide] .error span.error,[data-abide] span.error,[data-abide] small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}[data-abide] span.error,[data-abide] small.error{display:none}span.error,small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error input,.error textarea,.error select{margin-bottom:0}.error input[type="checkbox"],.error input[type="radio"]{margin-bottom:1rem}.error label,.error label.error{color:#f04124}.error small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error>label>small{background:transparent;color:#676767;display:inline;font-size:60%;font-style:normal;margin:0;padding:0;text-transform:capitalize}.error span.error-message{display:block}input.error,textarea.error,select.error{margin-bottom:0}label.error{color:#f04124}meta.foundation-mq-topbar{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}.contain-to-grid{width:100%;background:#333}.contain-to-grid .top-bar{margin-bottom:0}.fixed{position:fixed;top:0;width:100%;z-index:99;left:0}.fixed.expanded:not(.top-bar){height:auto;max-height:100%;overflow-y:auto;width:100%}.fixed.expanded:not(.top-bar) .title-area{position:fixed;width:100%;z-index:99}.fixed.expanded:not(.top-bar) .top-bar-section{margin-top:2.8125rem;z-index:98}.top-bar{background:#333;height:2.8125rem;line-height:2.8125rem;margin-bottom:0;overflow:hidden;position:relative}.top-bar ul{list-style:none;margin-bottom:0}.top-bar .row{max-width:none}.top-bar form,.top-bar input,.top-bar select{margin-bottom:0}.top-bar input,.top-bar select{font-size:0.75rem;height:1.75rem;padding-bottom:.35rem;padding-top:.35rem}.top-bar .button,.top-bar button{font-size:0.75rem;margin-bottom:0;padding-bottom:0.4125rem;padding-top:0.4125rem}@media only screen and (max-width: 40em){.top-bar .button,.top-bar button{position:relative;top:-1px}}.top-bar .title-area{margin:0;position:relative}.top-bar .name{font-size:16px;height:2.8125rem;margin:0}.top-bar .name h1,.top-bar .name h2,.top-bar .name h3,.top-bar .name h4,.top-bar .name p,.top-bar .name span{font-size:1.0625rem;line-height:2.8125rem;margin:0}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name p a,.top-bar .name span a{color:#fff;display:block;font-weight:normal;padding:0 0.9375rem;width:75%}.top-bar .toggle-topbar{position:absolute;right:0;top:0}.top-bar .toggle-topbar a{color:#fff;display:block;font-size:0.8125rem;font-weight:bold;height:2.8125rem;line-height:2.8125rem;padding:0 0.9375rem;position:relative;text-transform:uppercase}.top-bar .toggle-topbar.menu-icon{margin-top:-16px;top:50%}.top-bar .toggle-topbar.menu-icon a{color:#fff;height:34px;line-height:33px;padding:0 2.5rem 0 0.9375rem;position:relative}.top-bar .toggle-topbar.menu-icon a span::after{content:"";display:block;height:0;position:absolute;margin-top:-8px;top:50%;right:0.9375rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:16px}.top-bar .toggle-topbar.menu-icon a span:hover:after{box-shadow:0 0 0 1px "",0 7px 0 1px "",0 14px 0 1px ""}.top-bar.expanded{background:transparent;height:auto}.top-bar.expanded .title-area{background:#333}.top-bar.expanded .toggle-topbar a{color:#888}.top-bar.expanded .toggle-topbar a span::after{box-shadow:0 0 0 1px #888,0 7px 0 1px #888,0 14px 0 1px #888}@media screen and (-webkit-min-device-pixel-ratio: 0){.top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown,.top-bar.expanded .top-bar-section .dropdown{clip:initial}.top-bar.expanded .top-bar-section .has-dropdown:not(.moved)>ul{padding:0}}.top-bar-section{left:0;position:relative;width:auto;transition:left 300ms ease-out}.top-bar-section ul{display:block;font-size:16px;height:auto;margin:0;padding:0;width:100%}.top-bar-section .divider,.top-bar-section [role="separator"]{border-top:solid 1px #1a1a1a;clear:both;height:1px;width:100%}.top-bar-section ul li{background:#333}.top-bar-section ul li>a{color:#fff;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.8125rem;font-weight:normal;padding-left:0.9375rem;padding:12px 0 12px 0.9375rem;text-transform:none;width:100%}.top-bar-section ul li>a.button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{background-color:#007095}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{color:#fff}.top-bar-section ul li>a.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{color:#333}.top-bar-section ul li>a.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{background-color:#368a55}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{color:#fff}.top-bar-section ul li>a.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{color:#fff}.top-bar-section ul li>a.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{color:#fff}.top-bar-section ul li>a.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{background-color:#61b6d9}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{color:#fff}.top-bar-section ul li>button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{background-color:#007095}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{color:#fff}.top-bar-section ul li>button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{color:#333}.top-bar-section ul li>button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{background-color:#368a55}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{color:#fff}.top-bar-section ul li>button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{color:#fff}.top-bar-section ul li>button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{color:#fff}.top-bar-section ul li>button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{background-color:#61b6d9}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{color:#fff}.top-bar-section ul li:hover:not(.has-form)>a{background-color:#555;color:#fff;background:#222}.top-bar-section ul li.active>a{background:#008CBA;color:#fff}.top-bar-section ul li.active>a:hover{background:#0078a0;color:#fff}.top-bar-section .has-form{padding:0.9375rem}.top-bar-section .has-dropdown{position:relative}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent rgba(255,255,255,0.4);border-left-style:solid;margin-right:0.9375rem;margin-top:-4.5px;position:absolute;top:50%;right:0}.top-bar-section .has-dropdown.moved{position:static}.top-bar-section .has-dropdown.moved>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important;width:100%}.top-bar-section .has-dropdown.moved>a:after{display:none}.top-bar-section .dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block;padding:0;position:absolute;top:0;z-index:99;left:100%}.top-bar-section .dropdown li{height:auto;width:100%}.top-bar-section .dropdown li a{font-weight:normal;padding:8px 0.9375rem}.top-bar-section .dropdown li a.parent-link{font-weight:normal}.top-bar-section .dropdown li.title h5,.top-bar-section .dropdown li.parent-link{margin-bottom:0;margin-top:0;font-size:1.125rem}.top-bar-section .dropdown li.title h5 a,.top-bar-section .dropdown li.parent-link a{color:#fff;display:block}.top-bar-section .dropdown li.title h5 a:hover,.top-bar-section .dropdown li.parent-link a:hover{background:none}.top-bar-section .dropdown li.has-form{padding:8px 0.9375rem}.top-bar-section .dropdown li .button,.top-bar-section .dropdown li button{top:auto}.top-bar-section .dropdown label{color:#777;font-size:0.625rem;font-weight:bold;margin-bottom:0;padding:8px 0.9375rem 2px;text-transform:uppercase}.js-generated{display:block}@media only screen and (min-width: 40.0625em){.top-bar{background:#333;overflow:visible}.top-bar:before,.top-bar:after{content:" ";display:table}.top-bar:after{clear:both}.top-bar .toggle-topbar{display:none}.top-bar .title-area{float:left}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name h5 a,.top-bar .name h6 a{width:auto}.top-bar input,.top-bar select,.top-bar .button,.top-bar button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar.expanded{background:#333}.contain-to-grid .top-bar{margin-bottom:0;margin:0 auto;max-width:62.5rem}.top-bar-section{transition:none 0 0;left:0 !important}.top-bar-section ul{display:inline;height:auto !important;width:auto}.top-bar-section ul li{float:left}.top-bar-section ul li .js-generated{display:none}.top-bar-section li.hover>a:not(.button){background-color:#555;background:#222;color:#fff}.top-bar-section li:not(.has-form) a:not(.button){background:#333;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li:not(.has-form) a:not(.button):hover{background-color:#555;background:#222}.top-bar-section li.active:not(.has-form) a:not(.button){background:#008CBA;color:#fff;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li.active:not(.has-form) a:not(.button):hover{background:#0078a0;color:#fff}.top-bar-section .has-dropdown>a{padding-right:2.1875rem !important}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:rgba(255,255,255,0.4) transparent transparent transparent;border-top-style:solid;margin-top:-2.5px;top:1.40625rem}.top-bar-section .has-dropdown.moved{position:relative}.top-bar-section .has-dropdown.moved>.dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block}.top-bar-section .has-dropdown.hover>.dropdown,.top-bar-section .has-dropdown.not-click:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown .dropdown li.has-dropdown>a:after{border:none;content:"\00bb";top:0.1875rem;right:5px}.top-bar-section .dropdown{left:0;background:transparent;min-width:100%;top:auto}.top-bar-section .dropdown li a{background:#333;color:#fff;line-height:2.8125rem;padding:12px 0.9375rem;white-space:nowrap}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button){background:#333;color:#fff}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#555;color:#fff;background:#222}.top-bar-section .dropdown li label{background:#333;white-space:nowrap}.top-bar-section .dropdown li .dropdown{left:100%;top:0}.top-bar-section>ul>.divider,.top-bar-section>ul>[role="separator"]{border-right:solid 1px #4e4e4e;border-bottom:none;border-top:none;clear:none;height:2.8125rem;width:0}.top-bar-section .has-form{background:#333;height:2.8125rem;padding:0 0.9375rem}.top-bar-section .right li .dropdown{left:auto;right:0}.top-bar-section .right li .dropdown li .dropdown{right:100%}.top-bar-section .left li .dropdown{right:auto;left:0}.top-bar-section .left li .dropdown li .dropdown{left:100%}.no-js .top-bar-section ul li:hover>a{background-color:#555;background:#222;color:#fff}.no-js .top-bar-section ul li:active>a{background:#008CBA;color:#fff}.no-js .top-bar-section .has-dropdown:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}}.breadcrumbs{border-style:solid;border-width:1px;display:block;list-style:none;margin-left:0;overflow:hidden;padding:0.5625rem 0.875rem 0.5625rem;background-color:#f4f4f4;border-color:#dcdcdc;border-radius:3px}.breadcrumbs>*{color:#008CBA;float:left;font-size:0.6875rem;line-height:0.6875rem;margin:0;text-transform:uppercase}.breadcrumbs>*:hover a,.breadcrumbs>*:focus a{text-decoration:underline}.breadcrumbs>* a{color:#008CBA}.breadcrumbs>*.current{color:#333;cursor:default}.breadcrumbs>*.current a{color:#333;cursor:default}.breadcrumbs>*.current:hover,.breadcrumbs>*.current:hover a,.breadcrumbs>*.current:focus,.breadcrumbs>*.current:focus a{text-decoration:none}.breadcrumbs>*.unavailable{color:#999}.breadcrumbs>*.unavailable a{color:#999}.breadcrumbs>*.unavailable:hover,.breadcrumbs>*.unavailable:hover a,.breadcrumbs>*.unavailable:focus,.breadcrumbs>*.unavailable a:focus{color:#999;cursor:not-allowed;text-decoration:none}.breadcrumbs>*:before{color:#aaa;content:"/";margin:0 0.75rem;position:relative;top:1px}.breadcrumbs>*:first-child:before{content:" ";margin:0}[aria-label="breadcrumbs"] [aria-hidden="true"]:after{content:"/"}.alert-box{border-style:solid;border-width:1px;display:block;font-size:0.8125rem;font-weight:normal;margin-bottom:1.25rem;padding:0.875rem 1.5rem 0.875rem 0.875rem;position:relative;transition:opacity 300ms ease-out;background-color:#008CBA;border-color:#0078a0;color:#fff}.alert-box .close{right:0.25rem;background:inherit;color:#333;font-size:1.375rem;line-height:.9;margin-top:-0.6875rem;opacity:0.3;padding:0 6px 4px;position:absolute;top:50%}.alert-box .close:hover,.alert-box .close:focus{opacity:0.5}.alert-box.radius{border-radius:3px}.alert-box.round{border-radius:1000px}.alert-box.success{background-color:#43AC6A;border-color:#3a945b;color:#fff}.alert-box.alert{background-color:#f04124;border-color:#de2d0f;color:#fff}.alert-box.secondary{background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f}.alert-box.warning{background-color:#f08a24;border-color:#de770f;color:#fff}.alert-box.info{background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f}.alert-box.alert-close{opacity:0}.inline-list{list-style:none;margin-left:-1.375rem;margin-right:0;margin:0 auto 1.0625rem auto;overflow:hidden;padding:0}.inline-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.inline-list>li>*{display:block}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group.even-2 li{display:inline-block;margin:0 -2px;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{display:inline-block;margin:0 -2px;width:33.33333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{display:inline-block;margin:0 -2px;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{display:inline-block;margin:0 -2px;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{display:inline-block;margin:0 -2px;width:16.66667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{display:inline-block;margin:0 -2px;width:14.28571%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{display:inline-block;margin:0 -2px;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-group>li{display:inline-block;margin:0 -2px}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack>li>button{width:100%}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{display:inline-block;margin:0 -2px}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{display:block;margin:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack-for-small>li>button{width:100%}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{display:inline-block;margin:0 -2px}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack>*>button{width:100%}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width: 40.0625em){.button-group.radius.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{display:block;margin:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack-for-small>*>button{width:100%}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{display:inline-block;margin:0 -2px}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack>*>button{width:100%}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width: 40.0625em){.button-group.round.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{display:block;margin:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack-for-small>*>button{width:100%}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.panel{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f2f2f2;color:#333}.panel>:first-child{margin-top:0}.panel>:last-child{margin-bottom:0}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6,.panel p,.panel li,.panel dl{color:#333}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{line-height:1;margin-bottom:0.625rem}.panel h1.subheader,.panel h2.subheader,.panel h3.subheader,.panel h4.subheader,.panel h5.subheader,.panel h6.subheader{line-height:1.4}.panel.callout{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#ecfaff;color:#333}.panel.callout>:first-child{margin-top:0}.panel.callout>:last-child{margin-bottom:0}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6,.panel.callout p,.panel.callout li,.panel.callout dl{color:#333}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6{line-height:1;margin-bottom:0.625rem}.panel.callout h1.subheader,.panel.callout h2.subheader,.panel.callout h3.subheader,.panel.callout h4.subheader,.panel.callout h5.subheader,.panel.callout h6.subheader{line-height:1.4}.panel.callout a:not(.button){color:#008CBA}.panel.callout a:not(.button):hover,.panel.callout a:not(.button):focus{color:#0078a0}.panel.radius{border-radius:3px}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent;border-style:solid;content:"";display:block;height:0;position:absolute;top:50%;width:0}.dropdown.button::after,button.dropdown::after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny::after,button.dropdown.tiny::after{border-color:#fff transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small::after,button.dropdown.small::after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small::after,button.dropdown.small::after{border-color:#fff transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large::after,button.dropdown.large::after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large::after,button.dropdown.large::after{border-color:#fff transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333 transparent transparent transparent}.th{border:solid 4px #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.2);display:inline-block;line-height:0;max-width:100%;transition:all 200ms ease-out}.th:hover,.th:focus{box-shadow:0 0 6px 1px rgba(0,140,186,0.5)}.th.radius{border-radius:3px}.pricing-table{border:solid 1px #ddd;margin-left:0;margin-bottom:1.25rem}.pricing-table *{list-style:none;line-height:1}.pricing-table .title{background-color:#333;color:#eee;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .price{background-color:#F6F6F6;color:#333;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:2rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .description{background-color:#fff;border-bottom:dotted 1px #ddd;color:#777;font-size:0.75rem;font-weight:normal;line-height:1.4;padding:0.9375rem;text-align:center}.pricing-table .bullet-item{background-color:#fff;border-bottom:dotted 1px #ddd;color:#333;font-size:0.875rem;font-weight:normal;padding:0.9375rem;text-align:center}.pricing-table .cta-button{background-color:#fff;padding:1.25rem 1.25rem 0;text-align:center}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.slideshow-wrapper{position:relative}.slideshow-wrapper ul{list-style-type:none;margin:0}.slideshow-wrapper ul li,.slideshow-wrapper ul li .orbit-caption{display:none}.slideshow-wrapper ul li:first-child{display:block}.slideshow-wrapper .orbit-container{background-color:transparent}.slideshow-wrapper .orbit-container li{display:block}.slideshow-wrapper .orbit-container li .orbit-caption{display:block}.slideshow-wrapper .orbit-container .orbit-bullets li{display:inline-block}.slideshow-wrapper .preloader{border-radius:1000px;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;border-color:#555 #fff;border:solid 3px;display:block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px}.orbit-container{background:none;overflow:hidden;position:relative;width:100%}.orbit-container .orbit-slides-container{list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.orbit-container .orbit-slides-container img{display:block;max-width:100%}.orbit-container .orbit-slides-container>*{position:absolute;top:0;width:100%;margin-left:100%}.orbit-container .orbit-slides-container>*:first-child{margin-left:0}.orbit-container .orbit-slides-container>* .orbit-caption{bottom:0;position:absolute;background-color:rgba(51,51,51,0.8);color:#fff;font-size:0.875rem;padding:0.625rem 0.875rem;width:100%}.orbit-container .orbit-slide-number{left:10px;background:transparent;color:#fff;font-size:12px;position:absolute;top:10px;z-index:10}.orbit-container .orbit-slide-number span{font-weight:700;padding:0.3125rem}.orbit-container .orbit-timer{position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10}.orbit-container .orbit-timer .orbit-progress{height:3px;background-color:rgba(255,255,255,0.3);display:block;width:0;position:relative;right:20px;top:5px}.orbit-container .orbit-timer>span{border:solid 4px #fff;border-bottom:none;border-top:none;display:none;height:14px;position:absolute;top:0;width:11px;right:0}.orbit-container .orbit-timer.paused>span{top:0;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#fff;right:-4px}.orbit-container .orbit-timer.paused>span.dark{border-left-color:#333}.orbit-container:hover .orbit-timer>span{display:block}.orbit-container .orbit-prev,.orbit-container .orbit-next{background-color:transparent;color:white;height:60px;line-height:50px;margin-top:-25px;position:absolute;text-indent:-9999px !important;top:45%;width:36px;z-index:10}.orbit-container .orbit-prev:hover,.orbit-container .orbit-next:hover{background-color:rgba(0,0,0,0.3)}.orbit-container .orbit-prev>span,.orbit-container .orbit-next>span{border:inset 10px;display:block;height:0;margin-top:-10px;position:absolute;top:50%;width:0}.orbit-container .orbit-prev{left:0}.orbit-container .orbit-prev>span{border-right-style:solid;border-color:transparent;border-right-color:#fff}.orbit-container .orbit-prev:hover>span{border-right-color:#fff}.orbit-container .orbit-next{right:0}.orbit-container .orbit-next>span{border-color:transparent;border-left-style:solid;border-left-color:#fff;left:50%;margin-left:-4px}.orbit-container .orbit-next:hover>span{border-left-color:#fff}.orbit-bullets-container{text-align:center}.orbit-bullets{display:block;float:none;margin:0 auto 30px auto;overflow:hidden;position:relative;text-align:center;top:10px}.orbit-bullets li{background:#ccc;cursor:pointer;display:inline-block;float:none;height:0.5625rem;margin-right:6px;width:0.5625rem;border-radius:1000px}.orbit-bullets li.active{background:#999}.orbit-bullets li:last-child{margin-right:0}.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:none}.touch .orbit-bullets{display:none}@media only screen and (min-width: 40.0625em){.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:inherit}.touch .orbit-bullets{display:block}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container{height:auto !important}.orbit-stack-on-small .orbit-slides-container>*{margin:0  !important;opacity:1 !important;position:relative}.orbit-stack-on-small .orbit-slide-number{display:none}.orbit-timer{display:none}.orbit-next,.orbit-prev{display:none}.orbit-bullets{display:none}}[data-magellan-expedition],[data-magellan-expedition-clone]{background:#fff;min-width:100%;padding:10px;z-index:50}[data-magellan-expedition] .sub-nav,[data-magellan-expedition-clone] .sub-nav{margin-bottom:0}[data-magellan-expedition] .sub-nav dd,[data-magellan-expedition-clone] .sub-nav dd{margin-bottom:0}[data-magellan-expedition] .sub-nav a,[data-magellan-expedition-clone] .sub-nav a{line-height:1.8em}.icon-bar{display:inline-block;font-size:0;width:100%;background:#333}.icon-bar>*{display:block;float:left;font-size:1rem;margin:0 auto;padding:1.25rem;text-align:center;width:25%}.icon-bar>* i,.icon-bar>* img{display:block;margin:0 auto}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem}.icon-bar>* i{font-size:1.875rem;vertical-align:middle}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar.label-right>* i,.icon-bar.label-right>* img{display:inline-block;margin:0 .0625rem 0 0}.icon-bar.label-right>* i+label,.icon-bar.label-right>* img+label{margin-top:0}.icon-bar.label-right>* label{display:inline-block}.icon-bar.vertical.label-right>*{text-align:left}.icon-bar.vertical,.icon-bar.small-vertical{height:100%;width:auto}.icon-bar.vertical .item,.icon-bar.small-vertical .item{float:none;margin:auto;width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.medium-vertical{height:100%;width:auto}.icon-bar.medium-vertical .item{float:none;margin:auto;width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.large-vertical{height:100%;width:auto}.icon-bar.large-vertical .item{float:none;margin:auto;width:auto}}.icon-bar>*{font-size:1rem;padding:1.25rem}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem;font-size:1rem}.icon-bar>* i{font-size:1.875rem}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar>* label{color:#fff}.icon-bar>* i{color:#fff}.icon-bar>a:hover{background:#008CBA}.icon-bar>a:hover label{color:#fff}.icon-bar>a:hover i{color:#fff}.icon-bar>a.active{background:#008CBA}.icon-bar>a.active label{color:#fff}.icon-bar>a.active i{color:#fff}.icon-bar .item.disabled{cursor:not-allowed;opacity:0.7;pointer-events:none}.icon-bar .item.disabled>*{opacity:0.7;cursor:not-allowed}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.tabs{margin-bottom:0 !important;margin-left:0}.tabs:before,.tabs:after{content:" ";display:table}.tabs:after{clear:both}.tabs dd,.tabs .tab-title{float:left;list-style:none;margin-bottom:0 !important;position:relative}.tabs dd>a,.tabs .tab-title>a{display:block;background-color:#EFEFEF;color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem 2rem}.tabs dd>a:hover,.tabs .tab-title>a:hover{background-color:#e1e1e1}.tabs dd.active a,.tabs .tab-title.active a{background-color:#fff;color:#222}.tabs.radius dd:first-child a,.tabs.radius .tab:first-child a{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.tabs.radius dd:last-child a,.tabs.radius .tab:last-child a{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.tabs.vertical dd,.tabs.vertical .tab-title{position:inherit;float:none;display:block;top:auto}.tabs-content{margin-bottom:1.5rem;width:100%}.tabs-content:before,.tabs-content:after{content:" ";display:table}.tabs-content:after{clear:both}.tabs-content>.content{display:none;float:left;padding:0.9375rem 0;width:100%}.tabs-content>.content.active{display:block;float:none}.tabs-content>.content.contained{padding:0.9375rem}.tabs-content.vertical{display:block}.tabs-content.vertical>.content{padding:0 0.9375rem}@media only screen and (min-width: 40.0625em){.tabs.vertical{float:left;margin:0;margin-bottom:1.25rem !important;max-width:20%;width:20%}.tabs-content.vertical{float:left;margin-left:-1px;max-width:80%;padding-left:1rem;width:80%}}.no-js .tabs-content>.content{display:block;float:none}ul.pagination{display:block;margin-left:-0.3125rem;min-height:1.5rem}ul.pagination li{color:#222;font-size:0.875rem;height:1.5rem;margin-left:0.3125rem}ul.pagination li a,ul.pagination li button{border-radius:3px;transition:background-color 300ms ease-out;background:none;color:#999;display:block;font-size:1em;font-weight:normal;line-height:inherit;padding:0.0625rem 0.625rem 0.0625rem}ul.pagination li:hover a,ul.pagination li a:focus,ul.pagination li:hover button,ul.pagination li button:focus{background:#e6e6e6}ul.pagination li.unavailable a,ul.pagination li.unavailable button{cursor:default;color:#999}ul.pagination li.unavailable:hover a,ul.pagination li.unavailable a:focus,ul.pagination li.unavailable:hover button,ul.pagination li.unavailable button:focus{background:transparent}ul.pagination li.current a,ul.pagination li.current button{background:#008CBA;color:#fff;cursor:default;font-weight:bold}ul.pagination li.current a:hover,ul.pagination li.current a:focus,ul.pagination li.current button:hover,ul.pagination li.current button:focus{background:#008CBA}ul.pagination li{display:block;float:left}.pagination-centered{text-align:center}.pagination-centered ul.pagination li{display:inline-block;float:none}.side-nav{display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;list-style-position:outside;list-style-type:none;margin:0;padding:0.875rem 0}.side-nav li{font-size:0.875rem;font-weight:normal;margin:0 0 0.4375rem 0}.side-nav li a:not(.button){color:#008CBA;display:block;margin:0;padding:0.4375rem 0.875rem}.side-nav li a:not(.button):hover,.side-nav li a:not(.button):focus{background:rgba(0,0,0,0.025);color:#1cc7ff}.side-nav li a:not(.button):active{color:#1cc7ff}.side-nav li.active>a:first-child:not(.button){color:#1cc7ff;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal}.side-nav li.divider{border-top:1px solid;height:0;list-style:none;padding:0;border-top-color:#e6e6e6}.side-nav li.heading{color:#008CBA;font-size:0.875rem;font-weight:bold;text-transform:uppercase}.accordion{margin-bottom:0}.accordion:before,.accordion:after{content:" ";display:table}.accordion:after{clear:both}.accordion .accordion-navigation,.accordion dd{display:block;margin-bottom:0 !important}.accordion .accordion-navigation.active>a,.accordion dd.active>a{background:#e8e8e8}.accordion .accordion-navigation>a,.accordion dd>a{background:#EFEFEF;color:#222;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem}.accordion .accordion-navigation>a:hover,.accordion dd>a:hover{background:#e3e3e3}.accordion .accordion-navigation>.content,.accordion dd>.content{display:none;padding:0.9375rem}.accordion .accordion-navigation>.content.active,.accordion dd>.content.active{background:#fff;display:block}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em) and (max-width: 64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em) and (max-width: 90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em) and (max-width: 120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em) and (max-width: 6249999.9375em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#008CBA;line-height:inherit;text-decoration:none}a:hover,a:focus{color:#0078a0}a img{border:none}p{font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:0.875rem;font-style:italic;line-height:1.35}h1,h2,h3,h4,h5,h6{color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.4;margin-bottom:0.5rem;margin-top:0.2rem;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#6f6f6f;font-size:60%;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4{font-size:1.125rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;height:0;margin:1.25rem 0 1.1875rem}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-family:inherit;font-size:1rem;line-height:1.6;list-style-position:outside;margin-bottom:1.25rem}ul{margin-left:1.1rem}ul.no-bullet{margin-left:0}ul.no-bullet li ul,ul.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ul.no-bullet{list-style:none}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #ddd}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:0.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #ddd;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width: 40.0625em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button span:after{border-color:#fff transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#fff transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;margin-left:-0.375rem;top:48%}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;margin-left:-0.375rem;top:48%}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.split.button.no-pip span:before{border-style:none}.split.button.no-pip span:after{border-style:none}.split.button.no-pip span>i{display:block;left:50%;margin-left:-0.28889em;margin-top:-0.48889em;position:absolute;top:50%}.reveal-modal-bg{background:#000;background:rgba(0,0,0,0.45);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1004;left:0}.reveal-modal{border-radius:3px;display:none;position:absolute;top:0;visibility:hidden;width:100%;z-index:1005;left:0;background-color:#fff;padding:1.875rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width: 40.0625em){.reveal-modal{left:0;margin:0 auto;max-width:62.5rem;right:0;width:80%}}@media only screen and (min-width: 40.0625em){.reveal-modal{top:6.25rem}}.reveal-modal.radius{border-radius:3px}.reveal-modal.round{border-radius:1000px}.reveal-modal.collapse{padding:0}@media only screen and (min-width: 40.0625em){.reveal-modal.tiny{left:0;margin:0 auto;max-width:62.5rem;right:0;width:30%}}@media only screen and (min-width: 40.0625em){.reveal-modal.small{left:0;margin:0 auto;max-width:62.5rem;right:0;width:40%}}@media only screen and (min-width: 40.0625em){.reveal-modal.medium{left:0;margin:0 auto;max-width:62.5rem;right:0;width:60%}}@media only screen and (min-width: 40.0625em){.reveal-modal.large{left:0;margin:0 auto;max-width:62.5rem;right:0;width:70%}}@media only screen and (min-width: 40.0625em){.reveal-modal.xlarge{left:0;margin:0 auto;max-width:62.5rem;right:0;width:95%}}.reveal-modal.full{height:100vh;height:100%;left:0;margin-left:0 !important;max-width:none !important;min-height:100vh;top:0}@media only screen and (min-width: 40.0625em){.reveal-modal.full{left:0;margin:0 auto;max-width:62.5rem;right:0;width:100%}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{color:#aaa;cursor:pointer;font-size:2.5rem;font-weight:bold;line-height:1;position:absolute;top:0.625rem;right:1.375rem}.has-tip{border-bottom:dotted 1px #ccc;color:#333;cursor:help;font-weight:bold}.has-tip:hover,.has-tip:focus{border-bottom:dotted 1px #003f54;color:#008CBA}.has-tip.tip-left,.has-tip.tip-right{float:none !important}.tooltip{background:#333;color:#fff;display:none;font-size:0.875rem;font-weight:normal;line-height:1.3;max-width:300px;padding:0.75rem;position:absolute;width:100%;z-index:1006;left:50%}.tooltip>.nub{border-color:transparent transparent #333 transparent;border:solid 5px;display:block;height:0;pointer-events:none;position:absolute;top:-10px;width:0;left:5px}.tooltip>.nub.rtl{left:auto;right:5px}.tooltip.radius{border-radius:3px}.tooltip.round{border-radius:1000px}.tooltip.round>.nub{left:2rem}.tooltip.opened{border-bottom:dotted 1px #003f54 !important;color:#008CBA !important}.tap-to-close{color:#777;display:block;font-size:0.625rem;font-weight:normal}@media only screen and (min-width: 40.0625em){.tooltip>.nub{border-color:transparent transparent #333 transparent;top:-10px}.tooltip.tip-top>.nub{border-color:#333 transparent transparent transparent;bottom:-10px;top:auto}.tooltip.tip-left,.tooltip.tip-right{float:none !important}.tooltip.tip-left>.nub{border-color:transparent transparent transparent #333;left:auto;margin-top:-5px;right:-10px;top:50%}.tooltip.tip-right>.nub{border-color:transparent #333 transparent transparent;left:-10px;margin-top:-5px;right:auto;top:50%}}.clearing-thumbs,[data-clearing]{list-style:none;margin-left:0;margin-bottom:0}.clearing-thumbs:before,.clearing-thumbs:after,[data-clearing]:before,[data-clearing]:after{content:" ";display:table}.clearing-thumbs:after,[data-clearing]:after{clear:both}.clearing-thumbs li,[data-clearing] li{float:left;margin-right:10px}.clearing-thumbs[class*="block-grid-"] li,[data-clearing][class*="block-grid-"] li{margin-right:0}.clearing-blackout{background:#333;height:100%;position:fixed;top:0;width:100%;z-index:998;left:0}.clearing-blackout .clearing-close{display:block}.clearing-container{height:100%;margin:0;overflow:hidden;position:relative;z-index:998}.clearing-touch-label{color:#aaa;font-size:.6em;left:50%;position:absolute;top:50%}.visible-img{height:95%;position:relative}.visible-img img{position:absolute;left:50%;top:50%;-webkit-transform:translateY(-50%) translateX(-50%);-moz-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);-o-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);max-height:100%;max-width:100%}.clearing-caption{background:#333;bottom:0;color:#ccc;font-size:0.875em;line-height:1.3;margin-bottom:0;padding:10px 30px 20px;position:absolute;text-align:center;width:100%;left:0}.clearing-close{color:#ccc;display:none;font-size:30px;line-height:1;padding-left:20px;padding-top:10px;z-index:999}.clearing-close:hover,.clearing-close:focus{color:#ccc}.clearing-assembled .clearing-container{height:100%}.clearing-assembled .clearing-container .carousel>ul{display:none}.clearing-feature li{display:none}.clearing-feature li.clearing-featured-img{display:block}@media only screen and (min-width: 40.0625em){.clearing-main-prev,.clearing-main-next{height:100%;position:absolute;top:0;width:40px}.clearing-main-prev>span,.clearing-main-next>span{border:solid 12px;display:block;height:0;position:absolute;top:50%;width:0}.clearing-main-prev>span:hover,.clearing-main-next>span:hover{opacity:.8}.clearing-main-prev{left:0}.clearing-main-prev>span{left:5px;border-color:transparent;border-right-color:#ccc}.clearing-main-next{right:0}.clearing-main-next>span{border-color:transparent;border-left-color:#ccc}.clearing-main-prev.disabled,.clearing-main-next.disabled{opacity:.3}.clearing-assembled .clearing-container .carousel{background:rgba(51,51,51,0.8);height:120px;margin-top:10px;text-align:center}.clearing-assembled .clearing-container .carousel>ul{display:inline-block;z-index:999;height:100%;position:relative;float:none}.clearing-assembled .clearing-container .carousel>ul li{clear:none;cursor:pointer;display:block;float:left;margin-right:0;min-height:inherit;opacity:.4;overflow:hidden;padding:0;position:relative;width:120px}.clearing-assembled .clearing-container .carousel>ul li.fix-height img{height:100%;max-width:none}.clearing-assembled .clearing-container .carousel>ul li a.th{border:none;box-shadow:none;display:block}.clearing-assembled .clearing-container .carousel>ul li img{cursor:pointer !important;width:100% !important}.clearing-assembled .clearing-container .carousel>ul li.visible{opacity:1}.clearing-assembled .clearing-container .carousel>ul li:hover{opacity:.8}.clearing-assembled .clearing-container .visible-img{background:#333;height:85%;overflow:hidden}.clearing-close{padding-left:0;padding-top:0;position:absolute;top:10px;right:20px}}.progress{background-color:#F6F6F6;border:1px solid #fff;height:1.5625rem;margin-bottom:0.625rem;padding:0.125rem}.progress .meter{background:#008CBA;display:block;height:100%}.progress.secondary .meter{background:#e7e7e7;display:block;height:100%}.progress.success .meter{background:#43AC6A;display:block;height:100%}.progress.alert .meter{background:#f04124;display:block;height:100%}.progress.radius{border-radius:3px}.progress.radius .meter{border-radius:2px}.progress.round{border-radius:1000px}.progress.round .meter{border-radius:999px}.sub-nav{display:block;margin:-0.25rem 0 1.125rem;overflow:hidden;padding-top:0.25rem;width:auto}.sub-nav dt{text-transform:uppercase}.sub-nav dt,.sub-nav dd,.sub-nav li{color:#999;float:left;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.875rem;font-weight:normal;margin-left:1rem;margin-bottom:0}.sub-nav dt a,.sub-nav dd a,.sub-nav li a{color:#999;padding:0.1875rem 1rem;text-decoration:none}.sub-nav dt a:hover,.sub-nav dd a:hover,.sub-nav li a:hover{color:#737373}.sub-nav dt.active a,.sub-nav dd.active a,.sub-nav li.active a{border-radius:3px;background:#008CBA;color:#fff;cursor:default;font-weight:normal;padding:0.1875rem 1rem}.sub-nav dt.active a:hover,.sub-nav dd.active a:hover,.sub-nav li.active a:hover{background:#0078a0}.joyride-list{display:none}.joyride-tip-guide{background:#333;color:#fff;display:none;font-family:inherit;font-weight:normal;position:absolute;top:0;width:95%;z-index:101;left:2.5%}.lt-ie9 .joyride-tip-guide{margin-left:-400px;max-width:800px;left:50%}.joyride-content-wrapper{padding:1.125rem 1.25rem 1.5rem;width:100%}.joyride-content-wrapper .button{margin-bottom:0 !important}.joyride-content-wrapper .joyride-prev-tip{margin-right:10px}.joyride-tip-guide .joyride-nub{border:10px solid #333;display:block;height:0;position:absolute;width:0;left:22px}.joyride-tip-guide .joyride-nub.top{border-color:#333;border-top-color:transparent !important;border-top-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-bottom-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{right:-20px}.joyride-tip-guide .joyride-nub.left{left:-20px}.joyride-tip-guide h1,.joyride-tip-guide h2,.joyride-tip-guide h3,.joyride-tip-guide h4,.joyride-tip-guide h5,.joyride-tip-guide h6{color:#fff;font-weight:bold;line-height:1.25;margin:0}.joyride-tip-guide p{font-size:0.875rem;line-height:1.3;margin:0 0 1.125rem 0}.joyride-timer-indicator-wrap{border:solid 1px #555;bottom:1rem;height:3px;position:absolute;width:50px;right:1.0625rem}.joyride-timer-indicator{background:#666;display:block;height:inherit;width:0}.joyride-close-tip{color:#777 !important;font-size:24px;font-weight:normal;line-height:.5 !important;position:absolute;text-decoration:none;top:10px;right:12px}.joyride-close-tip:hover,.joyride-close-tip:focus{color:#eee !important}.joyride-modal-bg{background:rgba(0,0,0,0.5);cursor:pointer;display:none;height:100%;position:fixed;top:0;width:100%;z-index:100;left:0}.joyride-expose-wrapper{background-color:#fff;border-radius:3px;box-shadow:0 0 15px #fff;position:absolute;z-index:102}.joyride-expose-cover{background:transparent;border-radius:3px;left:0;position:absolute;top:0;z-index:9999}@media only screen and (min-width: 40.0625em){.joyride-tip-guide{width:300px;left:inherit}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{border-color:#333 !important;border-right-color:transparent !important;border-bottom-color:transparent !important;border-top-color:transparent !important;left:auto;right:-20px;top:22px}.joyride-tip-guide .joyride-nub.left{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-top-color:transparent !important;left:-20px;right:auto;top:22px}}.label{display:inline-block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1;margin-bottom:auto;position:relative;text-align:center;text-decoration:none;white-space:nowrap;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008CBA;color:#fff}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#fff}.label.warning{background-color:#f08a24;color:#fff}.label.success{background-color:#43AC6A;color:#fff}.label.secondary{background-color:#e7e7e7;color:#333}.label.info{background-color:#a0d3e8;color:#333}.off-canvas-wrap{-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden}.off-canvas-wrap.move-right,.off-canvas-wrap.move-left{min-height:100%;-webkit-overflow-scrolling:touch}.inner-wrap{position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.inner-wrap:before,.inner-wrap:after{content:" ";display:table}.inner-wrap:after{clear:both}.tab-bar{-webkit-backface-visibility:hidden;background:#333;color:#fff;height:2.8125rem;line-height:2.8125rem;position:relative}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4,.tab-bar h5,.tab-bar h6{color:#fff;font-weight:bold;line-height:2.8125rem;margin:0}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4{font-size:1.125rem}.left-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-right:solid 1px #1a1a1a;left:0}.right-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-left:solid 1px #1a1a1a;right:0}.tab-bar-section{height:2.8125rem;padding:0 0.625rem;position:absolute;text-align:center;top:0}.tab-bar-section.left{text-align:left}.tab-bar-section.right{text-align:right}.tab-bar-section.left{left:0;right:2.8125rem}.tab-bar-section.right{left:2.8125rem;right:0}.tab-bar-section.middle{left:2.8125rem;right:2.8125rem}.tab-bar .menu-icon{color:#fff;display:block;height:2.8125rem;padding:0;position:relative;text-indent:2.1875rem;transform:translate3d(0, 0, 0);width:2.8125rem}.tab-bar .menu-icon span::after{content:"";display:block;height:0;position:absolute;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:1rem}.tab-bar .menu-icon span:hover:after{box-shadow:0 0 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3}.left-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.left-off-canvas-menu *{-webkit-backface-visibility:hidden}.right-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0}.right-off-canvas-menu *{-webkit-backface-visibility:hidden}ul.off-canvas-list{list-style-type:none;margin:0;padding:0}ul.off-canvas-list li label{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;display:block;font-size:0.75rem;font-weight:bold;margin:0;padding:0.3rem 0.9375rem;text-transform:uppercase}ul.off-canvas-list li a{border-bottom:1px solid #262626;color:rgba(255,255,255,0.7);display:block;padding:0.66667rem;transition:background 300ms ease}ul.off-canvas-list li a:hover{background:#242424}ul.off-canvas-list li a:active{background:#242424}.move-right>.inner-wrap{-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate(15.625rem, 0);-ms-transform:translate3d(15.625rem, 0, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0)}.move-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-left>.inner-wrap{-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate(-15.625rem, 0);-ms-transform:translate3d(-15.625rem, 0, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0)}.move-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap .left-off-canvas-menu,.offcanvas-overlap .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-left .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-right .left-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.no-csstransforms .left-off-canvas-menu{left:-15.625rem}.no-csstransforms .right-off-canvas-menu{right:-15.625rem}.no-csstransforms .move-left>.inner-wrap{right:15.625rem}.no-csstransforms .move-right>.inner-wrap{left:15.625rem}.left-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.left-submenu *{-webkit-backface-visibility:hidden}.left-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.left-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.left-submenu .back>a:before{content:"\AB";margin-right:.5rem;display:inline}.left-submenu.move-right,.left-submenu.offcanvas-overlap-right,.left-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.right-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.right-submenu *{-webkit-backface-visibility:hidden}.right-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.right-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.right-submenu .back>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-submenu.move-left,.right-submenu.offcanvas-overlap-left,.right-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before{content:"\AB";margin-right:.5rem;display:inline}.f-dropdown{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:2px;max-width:200px}.f-dropdown.open{display:block}.f-dropdown>*:first-child{margin-top:0}.f-dropdown>*:last-child{margin-bottom:0}.f-dropdown:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent #fff transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89}.f-dropdown:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent #ccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88}.f-dropdown.right:before{left:auto;right:10px}.f-dropdown.right:after{left:auto;right:9px}.f-dropdown.drop-right{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:2px;max-width:200px}.f-dropdown.drop-right.open{display:block}.f-dropdown.drop-right>*:first-child{margin-top:0}.f-dropdown.drop-right>*:last-child{margin-bottom:0}.f-dropdown.drop-right:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent #fff transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89}.f-dropdown.drop-right:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent #ccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88}.f-dropdown.drop-left{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:-2px;max-width:200px}.f-dropdown.drop-left.open{display:block}.f-dropdown.drop-left>*:first-child{margin-top:0}.f-dropdown.drop-left>*:last-child{margin-bottom:0}.f-dropdown.drop-left:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #fff;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89}.f-dropdown.drop-left:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #ccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88}.f-dropdown.drop-top{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-left:0;margin-top:-2px;max-width:200px}.f-dropdown.drop-top.open{display:block}.f-dropdown.drop-top>*:first-child{margin-top:0}.f-dropdown.drop-top>*:last-child{margin-bottom:0}.f-dropdown.drop-top:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:#fff transparent transparent transparent;border-top-style:solid;bottom:-12px;position:absolute;top:auto;left:10px;right:auto;z-index:89}.f-dropdown.drop-top:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:#ccc transparent transparent transparent;border-top-style:solid;bottom:-14px;position:absolute;top:auto;left:9px;right:auto;z-index:88}.f-dropdown li{cursor:pointer;font-size:0.875rem;line-height:1.125rem;margin:0}.f-dropdown li:hover,.f-dropdown li:focus{background:#eee}.f-dropdown li.radius{border-radius:3px}.f-dropdown li a{display:block;padding:0.5rem;color:#555}.f-dropdown.content{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;padding:1.25rem;width:100%;z-index:89;max-width:200px}.f-dropdown.content.open{display:block}.f-dropdown.content>*:first-child{margin-top:0}.f-dropdown.content>*:last-child{margin-bottom:0}.f-dropdown.tiny{max-width:200px}.f-dropdown.small{max-width:300px}.f-dropdown.medium{max-width:500px}.f-dropdown.large{max-width:800px}.f-dropdown.mega{width:100% !important;max-width:100% !important}.f-dropdown.mega.open{left:0 !important}table{background:#fff;border:solid 1px #ddd;margin-bottom:1.25rem;table-layout:auto}table caption{background:transparent;color:#222;font-size:1rem;font-weight:bold}table thead{background:#F5F5F5}table thead tr th,table thead tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tfoot{background:#F5F5F5}table tfoot tr th,table tfoot tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tr th,table tr td{color:#222;font-size:0.875rem;padding:0.5625rem 0.625rem;text-align:left}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#F9F9F9}table thead tr th,table tfoot tr th,table tfoot tr td,table tbody tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.125rem}.range-slider{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:block;height:1rem;width:100%;background:#FAFAFA}.range-slider.vertical-range{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:inline-block;height:12.5rem;width:1rem}.range-slider.vertical-range .range-slider-handle{bottom:-10.5rem;margin-left:-0.5rem;margin-top:0;position:absolute}.range-slider.vertical-range .range-slider-active-segment{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-top-left-radius:initial;bottom:0;height:auto;width:0.875rem}.range-slider.radius{background:#FAFAFA;border-radius:3px}.range-slider.radius .range-slider-handle{background:#008CBA;border-radius:3px}.range-slider.radius .range-slider-handle:hover{background:#007ba4}.range-slider.round{background:#FAFAFA;border-radius:1000px}.range-slider.round .range-slider-handle{background:#008CBA;border-radius:1000px}.range-slider.round .range-slider-handle:hover{background:#007ba4}.range-slider.disabled,.range-slider[disabled]{background:#FAFAFA;cursor:not-allowed;opacity:0.7}.range-slider.disabled .range-slider-handle,.range-slider[disabled] .range-slider-handle{background:#008CBA;cursor:default;opacity:0.7}.range-slider.disabled .range-slider-handle:hover,.range-slider[disabled] .range-slider-handle:hover{background:#007ba4}.range-slider-active-segment{background:#e5e5e5;border-bottom-left-radius:inherit;border-top-left-radius:inherit;display:inline-block;height:0.875rem;position:absolute}.range-slider-handle{border:1px solid none;cursor:pointer;display:inline-block;height:1.375rem;position:absolute;top:-0.3125rem;width:2rem;z-index:1;-ms-touch-action:manipulation;touch-action:manipulation;background:#008CBA}.range-slider-handle:hover{background:#007ba4}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;float:left;height:auto;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{list-style:none;width:100%}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{list-style:none;width:50%}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{list-style:none;width:33.33333%}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{list-style:none;width:25%}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{list-style:none;width:20%}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{list-style:none;width:16.66667%}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{list-style:none;width:14.28571%}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{list-style:none;width:12.5%}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{list-style:none;width:11.11111%}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{list-style:none;width:10%}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{list-style:none;width:9.09091%}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{list-style:none;width:8.33333%}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.0625em){.medium-block-grid-1>li{list-style:none;width:100%}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{list-style:none;width:50%}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{list-style:none;width:33.33333%}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{list-style:none;width:25%}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{list-style:none;width:20%}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{list-style:none;width:16.66667%}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{list-style:none;width:14.28571%}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{list-style:none;width:12.5%}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{list-style:none;width:11.11111%}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{list-style:none;width:10%}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{list-style:none;width:9.09091%}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{list-style:none;width:8.33333%}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.0625em){.large-block-grid-1>li{list-style:none;width:100%}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{list-style:none;width:50%}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{list-style:none;width:33.33333%}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{list-style:none;width:25%}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{list-style:none;width:20%}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{list-style:none;width:16.66667%}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{list-style:none;width:14.28571%}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{list-style:none;width:12.5%}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{list-style:none;width:11.11111%}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{list-style:none;width:10%}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{list-style:none;width:9.09091%}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{list-style:none;width:8.33333%}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.flex-video{height:0;margin-bottom:1rem;overflow:hidden;padding-bottom:67.5%;padding-top:1.5625rem;position:relative}.flex-video.widescreen{padding-bottom:56.34%}.flex-video.vimeo{padding-top:0}.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{height:100%;position:absolute;top:0;width:100%;left:0}.keystroke,kbd{background-color:#ededed;border-color:#ddd;color:#222;border-style:solid;border-width:1px;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;margin:0;padding:0.125rem 0.25rem 0;border-radius:3px}.switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{background:#ddd;color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;text-indent:100%;width:4rem;height:2rem;transition:left 0.15s ease-out}.switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.switch input+label{margin-left:0;margin-right:0}.switch label:after{background:#fff;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:translate3d(0, 0, 0);transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.switch input:checked+label{background:#008CBA}.switch input:checked+label:after{left:2.25rem}.switch label{height:2rem;width:4rem}.switch label:after{height:1.5rem;width:1.5rem}.switch input:checked+label:after{left:2.25rem}.switch label{color:transparent;background:#ddd}.switch label:after{background:#fff}.switch input:checked+label{background:#008CBA}.switch.large label{height:2.5rem;width:5rem}.switch.large label:after{height:2rem;width:2rem}.switch.large input:checked+label:after{left:2.75rem}.switch.small label{height:1.75rem;width:3.5rem}.switch.small label:after{height:1.25rem;width:1.25rem}.switch.small input:checked+label:after{left:2rem}.switch.tiny label{height:1.5rem;width:3rem}.switch.tiny label:after{height:1rem;width:1rem}.switch.tiny input:checked+label:after{left:1.75rem}.switch.radius label{border-radius:4px}.switch.radius label:after{border-radius:3px}.switch.round{border-radius:1000px}.switch.round label{border-radius:2rem}.switch.round label:after{border-radius:2rem}@media only screen{.show-for-small-only,.show-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.hide-for-small-only,.hide-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.visible-for-small-only,.visible-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.hidden-for-small-only,.hidden-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.show-for-small-only,table.show-for-small-up,table.show-for-small,table.show-for-small-down,table.hide-for-medium-only,table.hide-for-medium-up,table.hide-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.show-for-small-only,thead.show-for-small-up,thead.show-for-small,thead.show-for-small-down,thead.hide-for-medium-only,thead.hide-for-medium-up,thead.hide-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.show-for-small-only,tbody.show-for-small-up,tbody.show-for-small,tbody.show-for-small-down,tbody.hide-for-medium-only,tbody.hide-for-medium-up,tbody.hide-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.show-for-small-only,tr.show-for-small-up,tr.show-for-small,tr.show-for-small-down,tr.hide-for-medium-only,tr.hide-for-medium-up,tr.hide-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.show-for-small-only,td.show-for-small-only,th.show-for-small-up,td.show-for-small-up,th.show-for-small,td.show-for-small,th.show-for-small-down,td.show-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.hide-for-medium-up,td.hide-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 40.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.show-for-medium-only,table.show-for-medium-up,table.show-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.show-for-medium-only,thead.show-for-medium-up,thead.show-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.show-for-medium-only,tbody.show-for-medium-up,tbody.show-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.show-for-medium-only,tr.show-for-medium-up,tr.show-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.show-for-medium-only,td.show-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.show-for-medium,td.show-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 64.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.show-for-large-only,table.show-for-large-up,table.show-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.show-for-large-only,thead.show-for-large-up,thead.show-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.show-for-large-only,tbody.show-for-large-up,tbody.show-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.show-for-large-only,tr.show-for-large-up,tr.show-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.show-for-large-only,td.show-for-large-only,th.show-for-large-up,td.show-for-large-up,th.show-for-large,td.show-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 90.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.show-for-xlarge-only,table.show-for-xlarge-up,table.show-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.show-for-xlarge-only,thead.show-for-xlarge-up,thead.show-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.show-for-xlarge-only,tbody.show-for-xlarge-up,tbody.show-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.show-for-xlarge-only,tr.show-for-xlarge-up,tr.show-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.show-for-xlarge-only,td.show-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.show-for-xlarge,td.show-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 120.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.hide-for-xlarge-only,.show-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.show-for-xlarge-only,.hide-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.hidden-for-xlarge-only,.visible-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.visible-for-xlarge-only,.hidden-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.hide-for-xlarge-only,table.show-for-xlarge-up,table.hide-for-xlarge,table.hide-for-xlarge-down,table.show-for-xxlarge-only,table.show-for-xxlarge-up,table.show-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.hide-for-xlarge-only,thead.show-for-xlarge-up,thead.hide-for-xlarge,thead.hide-for-xlarge-down,thead.show-for-xxlarge-only,thead.show-for-xxlarge-up,thead.show-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.hide-for-xlarge-only,tbody.show-for-xlarge-up,tbody.hide-for-xlarge,tbody.hide-for-xlarge-down,tbody.show-for-xxlarge-only,tbody.show-for-xxlarge-up,tbody.show-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.hide-for-xlarge-only,tr.show-for-xlarge-up,tr.hide-for-xlarge,tr.hide-for-xlarge-down,tr.show-for-xxlarge-only,tr.show-for-xxlarge-up,tr.show-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.hide-for-xlarge-down,td.hide-for-xlarge-down,th.show-for-xxlarge-only,td.show-for-xxlarge-only,th.show-for-xxlarge-up,td.show-for-xxlarge-up,th.show-for-xxlarge,td.show-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.hide-for-landscape,table.show-for-portrait{display:table !important}thead.hide-for-landscape,thead.show-for-portrait{display:table-header-group !important}tbody.hide-for-landscape,tbody.show-for-portrait{display:table-row-group !important}tr.hide-for-landscape,tr.show-for-portrait{display:table-row !important}td.hide-for-landscape,td.show-for-portrait,th.hide-for-landscape,th.show-for-portrait{display:table-cell !important}@media only screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.show-for-landscape,table.hide-for-portrait{display:table !important}thead.show-for-landscape,thead.hide-for-portrait{display:table-header-group !important}tbody.show-for-landscape,tbody.hide-for-portrait{display:table-row-group !important}tr.show-for-landscape,tr.hide-for-portrait{display:table-row !important}td.show-for-landscape,td.hide-for-portrait,th.show-for-landscape,th.hide-for-portrait{display:table-cell !important}}@media only screen and (orientation: portrait){.show-for-portrait,.hide-for-landscape{display:inherit !important}.hide-for-portrait,.show-for-landscape{display:none !important}table.show-for-portrait,table.hide-for-landscape{display:table !important}thead.show-for-portrait,thead.hide-for-landscape{display:table-header-group !important}tbody.show-for-portrait,tbody.hide-for-landscape{display:table-row-group !important}tr.show-for-portrait,tr.hide-for-landscape{display:table-row !important}td.show-for-portrait,td.hide-for-landscape,th.show-for-portrait,th.hide-for-landscape{display:table-cell !important}}.show-for-touch{display:none !important}.hide-for-touch{display:inherit !important}.touch .show-for-touch{display:inherit !important}.touch .hide-for-touch{display:none !important}table.hide-for-touch{display:table !important}.touch table.show-for-touch{display:table !important}thead.hide-for-touch{display:table-header-group !important}.touch thead.show-for-touch{display:table-header-group !important}tbody.hide-for-touch{display:table-row-group !important}.touch tbody.show-for-touch{display:table-row-group !important}tr.hide-for-touch{display:table-row !important}.touch tr.show-for-touch{display:table-row !important}td.hide-for-touch{display:table-cell !important}.touch td.show-for-touch{display:table-cell !important}th.hide-for-touch{display:table-cell !important}.touch th.show-for-touch{display:table-cell !important}.show-for-sr{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus:focus,.show-on-focus:active{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.print-only{display:none !important}@media print{*{background:transparent !important;box-shadow:none !important;color:#000 !important;text-shadow:none !important}.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.hide-on-print{display:none !important}.print-only{display:block !important}.hide-for-print{display:none !important}.show-for-print{display:inherit !important}}@media print{.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}}@media not print{.show-for-print{display:none !important}}
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/webroot/css/cake.css b/production/example_apps/zippy_maps/webroot/css/cake.css
new file mode 100644 (file)
index 0000000..10841c8
--- /dev/null
@@ -0,0 +1,525 @@
+.disabled a,
+a.disabled {
+    pointer-events: none;
+}
+
+a:hover {
+    color: #15848F;
+}
+
+a {
+    color: #1798A5;
+}
+
+.side-nav li a:not(.button) {
+    color: #15848F;
+}
+
+.side-nav li a:not(.button):hover {
+    color: #15848F;
+}
+
+header {
+    background-color: #D33C44;
+    color: #ffffff;
+    font-size: 30px;
+    height: 84px;
+    line-height: 64px;
+    padding: 16px 0px;
+    box-shadow: 0px 1px rgba(0, 0, 0, 0.24);
+}
+
+header .header-title {
+    padding-left:80px
+}
+
+legend {
+    color:#15848F;
+}
+
+.row {
+    max-width: 80rem;
+}
+
+.actions.columns {
+    margin-top:1rem;
+    border-left: 5px solid #15848F;
+    padding-left: 15px;
+    padding: 32px 20px;
+}
+
+.actions.columns h3 {
+    color:#15848F;
+}
+
+.related table {
+    border: 0;
+    width: 100%;
+    table-layout: fixed;
+}
+
+.index table thead {
+    height: 3.5rem;
+}
+
+.header-help {
+    float: right;
+    margin-right:2rem;
+    margin-top: -80px;
+    font-size:16px;
+}
+
+.header-help span {
+    font-weight: normal;
+    text-align: center;
+    text-decoration: none;
+    line-height: 1;
+    white-space: nowrap;
+    display: inline-block;
+    padding: 0.25rem 0.5rem 0.375rem;
+    font-size: 0.8rem;
+    background-color: #0097a7;
+    color: #FFF;
+    border-radius: 1000px;
+}
+
+.header-help a {
+    color: #fff;
+}
+
+ul.pagination li a {
+    color: rgba(0, 0 ,0 , 0.54);
+}
+
+ul.pagination li.active a {
+    background-color: #DCE47E;
+    color: #FFF;
+    font-weight: bold;
+    cursor: default;
+}
+ul.pagination .disabled:hover a {
+    background: none;
+}
+
+.paginator {
+    text-align: center;
+}
+
+.paginator ul.pagination li {
+    float: none;
+    display: inline-block;
+}
+
+.paginator p {
+    text-align: right;
+    color: rgba(0, 0 ,0 , 0.54);
+}
+
+.asc:after {
+    content: " \2193";
+}
+.desc:after {
+    content: " \2191";
+}
+
+.form .error-message {
+    display: block;
+    padding: 0.375rem 0.5625rem 0.5625rem;
+    margin-top: -1px;
+    margin-bottom: 1rem;
+    font-size: 0.75rem;
+    font-weight: normal;
+    font-style: italic;
+    color: rgba(0, 0, 0, 0.54);
+}
+
+.required > label {
+    font-weight: bold;
+}
+.required > label:after {
+    content: ' *';
+    color: #C3232D;
+}
+
+select[multiple] {
+    min-height:150px;
+    background: none;
+}
+input[type=checkbox],
+input[type=radio] {
+    margin-right: 0.5em;
+}
+
+.date select,
+.time select,
+.datetime select {
+    display: inline;
+    width: auto;
+    margin-right: 10px;
+}
+
+.error label,
+.error label.error {
+    color: #C3232D;
+}
+
+.view h2 {
+    color: #6F6F6F;
+}
+
+.view .columns.strings {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+}
+
+.view .numbers {
+    background-color: #B7E3EC;
+    color: #FFF;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right: 0.7rem;
+}
+
+.view .columns.dates {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+    background-color:#DCE47E;
+    color: #fff;
+}
+
+.view .columns.booleans {
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-right:0.7rem;
+    background-color: #8D6E65;
+    color: #fff;
+}
+
+.view .strings p {
+    border-bottom: 1px solid #eee;
+}
+.view .numbers .subheader, .view .dates .subheader {
+    color:#747474;
+}
+.view .booleans .subheader {
+    color: #E9E9E9
+}
+
+.view .texts .columns {
+    margin-top:1.2rem;
+    border-bottom: 1px solid #eee;
+}
+
+/** Notices and Errors **/
+.cake-error,
+.cake-debug,
+.notice,
+p.error,
+p.notice {
+    display: block;
+    clear: both;
+    background-repeat: repeat-x;
+    margin-bottom: 18px;
+    padding: 7px 14px;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+}
+
+.cake-debug,
+.notice,
+p.notice {
+    color: #000000;
+    background: #ffcc00;
+}
+
+.cake-error,
+p.error {
+    color: #fff;
+    background: #C3232D;
+}
+
+pre {
+    background: none repeat scroll 0% 0% #FFF;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin: 15px 0px;
+    color: rgba(0, 0 ,0 , 0.74);
+    padding:5px;
+}
+
+.cake-error .cake-stack-trace {
+    margin-top:10px;
+}
+
+.cake-stack-trace code {
+    background: inherit;
+    border:0;
+}
+
+.cake-code-dump .code-highlight {
+    display: block;
+    background-color: #FFC600;
+}
+
+.cake-error a,
+.cake-error a:hover {
+    color:#fff;
+    text-decoration: underline;
+}
+
+.checks {
+    padding:30px;
+    color: #626262;
+    background-color: #B7E3EC;
+    border-radius: 3px;
+    box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24);
+    margin-bottom: 2em;
+}
+
+.checks h4 {
+    margin-bottom: 1.5rem;
+}
+
+.checks hr {
+    border: 0;
+    height: 0;
+    border-top: 1px solid rgba(0, 0, 0, 0.1);
+    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.checks .success,
+.checks .problem {
+    margin-left: 10px;
+}
+.checks .success:before,
+.checks .problem:before {
+    line-height: 0px;
+    font-size: 28px;
+    height: 12px;
+    width: 12px;
+    border-radius: 15px;
+    text-align: center;
+    vertical-align: middle;
+    display: inline-block;
+    position: relative;
+    left: -11px;
+}
+
+.checks .success:before {
+    content: "✓";
+    color: green;
+    margin-right: 9px;
+}
+
+.checks .problem:before {
+    content: "✘";
+    color: red;
+    margin-right: 9px;
+}
+
+.top-bar.expanded .title-area {
+    background: #01545b;
+}
+
+.top-bar.expanded, .top-bar,.top-bar-section ul li,.top-bar-section li:not(.has-form) a:not(.button) {
+    background: #116d76;
+}
+
+.top-bar-section li:not(.has-form) a:not(.button):hover {
+    background-color: #308e97;
+    background: #308e97;
+}
+
+.side-nav li.heading {
+    color: #1798A5;
+    font-size: 0.875rem;
+    font-weight: bold;
+    text-transform: uppercase;
+    padding: 0.4375rem 0.875rem;
+}
+
+#actions-sidebar {
+    background: #fafafa;
+}
+
+.index table {
+    margin-top: 0rem;
+    border: 0;
+    width: 100%;
+    table-layout: fixed;
+}
+
+table {
+    background: #fff;
+    margin-bottom: 1.25rem;
+    border: none;
+    table-layout: fixed;
+    width: 100%;
+}
+
+table thead {
+    background: none;
+}
+
+table tr {
+    border-bottom: 1px solid #ebebec;
+}
+
+table thead tr {
+    border-bottom: 1px solid #1798A5;
+}
+
+table tr th {
+    padding: 0.5625rem 0.625rem;
+    font-size: 0.875rem;
+    color: #1798A5;
+    text-align: left;
+    border-bottom: 2px solid #1798A5;
+}
+
+table tr:nth-of-type(even) {
+    background: none;
+}
+
+fieldset {
+    border: none;
+    padding: 1.25rem;
+    margin: 1.125rem 0;
+}
+
+fieldset legend {
+    border-bottom: 2px solid #1798A5;
+    width: 100%;
+    line-height: 2rem;
+}
+
+.form button[type="submit"] {
+    float: right;
+    text-transform: uppercase;
+    box-shadow: none;
+}
+
+.form button:hover, .form button:focus {
+    background: #BE840B;
+    box-shadow: none;
+}
+
+button {
+    background: #966600;
+}
+
+div.message {
+    text-align: center;
+    cursor: pointer;
+    display: block;
+    font-weight: normal;
+    padding: 0 1.5rem 0 1.5rem;
+    transition: height 300ms ease-out 0s;
+    background-color: #a0d3e8;
+    color: #626262;
+    top: 15px;
+    right: 15px;
+    z-index: 999;
+    overflow: hidden;
+    height: 50px;
+    line-height: 2.5em;
+    box-radius: 5px;
+}
+
+div.message:before {
+    line-height: 0px;
+    font-size: 20px;
+    height: 12px;
+    width: 12px;
+    border-radius: 15px;
+    text-align: center;
+    vertical-align: middle;
+    display: inline-block;
+    position: relative;
+    left: -11px;
+    background-color: #FFF;
+    padding: 12px 14px 12px 10px;
+    content: "i";
+    color: #a0d3e8;
+}
+
+div.message.error {
+    background-color: #C3232D;
+    color: #FFF;
+}
+
+div.message.error:before {
+    padding: 11px 16px 14px 7px;
+    color: #C3232D;
+    content: "x";
+}
+div.message.hidden {
+    height: 0;
+}
+
+
+.vertical-table th {
+    padding: 0.5625rem 0.625rem;
+    font-size: 0.875rem;
+    color: #1798A5;
+    border: none;
+    text-align: left;
+}
+
+.vertical-table {
+    vertical-align: middle;
+}
+
+.vertical-table td {
+    text-align: right;
+}
+
+.content {
+    padding: 2rem;
+}
+
+/* Use 'one true layout' methods to get equal height columns */
+.container {
+    overflow: hidden;
+    min-height: 92%; /* full height almost always */
+}
+
+/* Force equal height by overflowing */
+.content,
+#actions-sidebar {
+    margin-bottom: -99999px;
+    padding-bottom: 99999px;
+}
+@media(max-width: 640px) {
+    #actions-sidebar {
+        padding-bottom: 2rem;
+        margin-bottom: 0;
+    }
+}
+
+.content h3 {
+    color: #be140b;
+    padding-bottom: 0.5rem;
+    margin-bottom: 20px;
+}
+
+.content h4 {
+    color: #be140b;
+    padding-bottom: 0.5rem;
+    margin-bottom: 20px;
+    border-bottom: 2px solid #be140b;
+}
+
+.content .related h4 {
+    color: #4d8f97;
+    padding-bottom: 0.5rem;
+    margin-top: 20px;
+    margin-bottom: 10px;
+    border-bottom: 0px;
+}
+
+table td {
+    vertical-align: top;
+    word-break: break-all;
+}
diff --git a/production/example_apps/zippy_maps/webroot/css/home.css b/production/example_apps/zippy_maps/webroot/css/home.css
new file mode 100644 (file)
index 0000000..d1db778
--- /dev/null
@@ -0,0 +1,250 @@
+@font-face {
+    font-family: 'cakefont';
+    src: url('../font/cakedingbats-webfont.eot');
+    src: url('../font/cakedingbats-webfont.eot?#iefix') format('embedded-opentype'),
+    url('../font/cakedingbats-webfont.woff2') format('woff2'),
+    url('../font/cakedingbats-webfont.woff') format('woff'),
+    url('../font/cakedingbats-webfont.ttf') format('truetype'),
+    url('../font/cakedingbats-webfont.svg#cake_dingbatsregular') format('svg');
+    font-weight: normal;
+    font-style: normal;
+}
+
+.home {
+    font-family: 'Roboto', sans-serif;
+    font-size: 14px;
+    line-height: 27px;
+    color: #404041;
+}
+
+.fredmenu {
+       font-size: 28px;
+       text-align: center;
+}
+
+.fredmenu li {
+       font-size: 28px;
+}
+
+a {
+    color: #0071BC;
+    -webkit-transition: all 0.2s;
+    -moz-transition: all 0.2s;
+    -ms-transition: all 0.2s;
+    -o-transition: all 0.2s;
+    transition: all 0.2s;
+}
+
+a:hover, a:active {
+    color: #d33d44;
+    -webkit-transition: all 0.2s;
+    -moz-transition: all 0.2s;
+    -ms-transition: all 0.2s;
+    -o-transition: all 0.2s;
+    transition: all 0.2s;
+}
+
+ul, ol, dl, p {
+    font-size: 0.85rem;
+}
+
+p {
+    line-height: 2;
+}
+
+header {
+    height: auto;
+    line-height: 1em;
+    padding: 0;
+    box-shadow: none;
+}
+
+header.row {
+    margin-bottom: 30px;
+}
+
+header .header-image {
+    text-align: center;
+    padding: 64px 0;
+    background: #b060f1;
+}
+
+header .header-title {
+    padding: 0;
+    display: block;
+    background: #404041;
+    text-align: center;
+}
+
+header .header-title h1 {
+    font-family: 'Raleway', sans-serif;
+    margin: 0;
+    font-style: italic;
+    font-size: 18px;
+    font-weight: 500;
+    padding: 18px 30px;
+    color: #DEDED5;
+}
+
+header h1 {
+    color: #fff;
+}
+
+h3, h4 {
+    font-family: 'Roboto', sans-serif;
+    font-size: 27px;
+    line-height: 30px;
+    font-weight: 300;
+    -webkit-font-smoothing: antialiased;
+    margin-top: 0;
+    margin-bottom: 20px;
+}
+
+.more {
+    color: #ffffff;
+    background-color: #d33d44;
+    padding: 15px;
+    margin-top: 10px;
+}
+
+.row {
+    max-width: 1000px;
+}
+
+.alert {
+    background-color: #fff9e1;
+    font-size: 12px;
+    text-align: center;
+    display: block;
+    padding: 12px;
+    border-bottom: 2px solid #ffcf06;
+}
+
+.alert {
+    background-color: #fff9e1;
+    font-size: 12px;
+    display: block;
+    padding: 12px;
+    border-bottom: 2px solid #ffcf06;
+    margin-bottom: 30px;
+    color: #404041;
+}
+
+.alert p {
+    margin: 0;
+    font-size: 12px;
+    line-height: 1.4;
+}
+
+.alert p:before {
+    color: #ffcf06;
+    content: "\0055";
+    font-family: 'cakefont', sans-serif;
+    font-size: 21px;
+    margin-left: -0.8em;
+    width: 2.3em;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    padding: 0 10px 0 15px;
+    vertical-align: -2px;
+}
+
+.alert ul {
+    margin: 0;
+    font-size: 12px;
+}
+
+.alert.url-rewriting {
+    background-color: #F0F0F0;
+    border-color: #cccccc;
+    display: none;
+}
+
+.text-center {
+    text-align: center;
+}
+
+ul {
+    list-style-type: none;
+    margin: 0 0 30px 0;
+}
+
+li {
+    padding-left: 1.8em;
+}
+
+ul li ul, ul li ul li {
+    margin: 0;
+    padding: 0;
+}
+
+.bullet:before {
+    font-family: 'cakefont', sans-serif;
+    font-size: 18px;
+    display: inline-block;
+    margin-left: -1.3em;
+    width: 1.2em;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    vertical-align: -1px;
+}
+
+.success:before {
+    color: #88c671;
+    content: "\0056";
+}
+
+.problem:before {
+    color: #d33d44;
+    content: "\0057";
+}
+
+.cutlery:before {
+    color: #404041;
+    content: "\0059";
+}
+
+.book:before {
+    color: #404041;
+    content: "\0042";
+    width: 1.7em;
+}
+
+hr {
+    border-bottom: 1px solid #e7e7e7;
+    border-top: 0;
+    margin-bottom: 35px;
+    margin-left: 30px;
+    margin-right: 30px;
+}
+
+
+.icon {
+    color: #404041;
+    font-style: normal;
+    font-family: 'cakefont', sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+.icon.support {
+    font-size: 60px;
+}
+.icon.docs {
+    font-size: 57px;
+}
+.icon.training {
+    font-size: 39px;
+}
+
+@media (min-width: 768px) {
+    .columns {
+        padding-left: 30px;
+        padding-right: 30px;
+    }
+}
+
+@media (min-width: 992px) {
+    header.row {
+        max-width: 940px;
+    }
+}
diff --git a/production/example_apps/zippy_maps/webroot/favicon.ico b/production/example_apps/zippy_maps/webroot/favicon.ico
new file mode 100644 (file)
index 0000000..49a060f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/favicon.ico differ
diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot
new file mode 100644 (file)
index 0000000..e8605d9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot differ
diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg
new file mode 100644 (file)
index 0000000..d1e0c98
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="cake_dingbatsregular" horiz-adv-x="986" >
+<font-face units-per-em="1972" ascent="1479" descent="-493" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph unicode="&#xd;" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="0" />
+<glyph unicode=" " />
+<glyph unicode="A" horiz-adv-x="1653" d="M1614 22q19 -20 28.5 -44t9.5 -49q0 -26 -9.5 -49.5t-28.5 -42.5t-43 -28.5t-49 -9.5q-26 0 -50 9t-43 29l-331 332q-88 -60 -187.5 -91.5t-207.5 -31.5q-142 0 -269.5 53t-227.5 153t-153 227.5t-53 269.5t53 269.5t153 227.5t227.5 153t269.5 53q141 0 268.5 -53 t227.5 -153t153 -227.5t53 -269.5q0 -108 -31 -208t-91 -187zM391 437q63 -63 143 -96t169 -33q88 0 168 33t143 96t96 143t33 169t-33 169t-96 143t-143 96t-168 33q-89 0 -169 -33t-143 -96t-96 -143t-33 -169t33 -169t96 -143z" />
+<glyph unicode="B" horiz-adv-x="2681" d="M2621 548q8 4 17 4q25 0 37 -23q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-8 -4 -18 -4q-4 0 -12 2l-1191 381q-1 0 -3 2q-2 0 -3 1t-3 2q-4 2 -6.5 5t-5.5 6q-1 2 -13.5 23.5t-26.5 58.5t-26 87t-12 108q0 36 4.5 75t13.5 77t23.5 74t35.5 67q3 5 8 9t10 6 l1336 630q7 4 16 4q5 0 13 -2l1191 -381q11 -4 19 -14t9 -24q0 -26 -23 -37l-1336 -630q-5 -2 -9 -3t-9 -1q-4 0 -12 2l-1158 371q-7 -15 -16 -37.5t-16.5 -51t-13 -62.5t-5.5 -72q0 -40 7 -75.5t16 -64t19 -49.5t16 -32l1161 -371zM2621 724q7 3 16 3q11 0 22 -6t16 -17 q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-5 -2 -9 -3t-9 -1q-25 0 -36 24q-4 8 -4 17q0 11 6 21t17 15zM2621 899q5 2 8.5 3t8.5 1q25 0 37 -23q4 -8 4 -17q0 -11 -6 -21.5t-17 -15.5l-1336 -630q-8 -4 -18 -4q-25 0 -36 23q-4 8 -4 17q0 25 23 37z" />
+<glyph unicode="C" horiz-adv-x="2511" d="M850 -103q-122 -55 -241 -55q-80 0 -155 25t-142 73t-124 119t-102 163q-4 5 -7 10.5t-5 10.5l-9 23q-33 78 -49 153t-16 146q0 81 21 154t62 136t101.5 113.5t140.5 86.5q96 43 214.5 60t254.5 17q157 0 326.5 -16.5t341.5 -36.5l211 -23q0 48 21.5 88t63.5 59l518 234 q27 13 58 13q48 0 92 -30t67 -82q18 -41 18 -82q0 -48 -22.5 -87.5t-64.5 -58.5l-518 -234q-27 -12 -57 -12q-60 0 -110 44l-121 -173q-92 -132 -185 -262t-188.5 -242.5t-194 -200t-200.5 -133.5zM182 292q8 -17 35.5 -29.5t77.5 -12.5q57 0 144 21.5t207 75.5 q88 40 183 96t194.5 122.5t201.5 140.5t204 150q-125 -26 -248 -53.5t-238.5 -58.5t-220.5 -65t-193 -74q-99 -45 -166 -88t-108 -81.5t-59 -70.5t-18 -54q0 -11 4 -19zM2410 1301q-11 23 -30.5 36.5t-40.5 13.5q-15 0 -27 -6q-19 -8 -29 -26t-10 -39q0 -9 1.5 -19t6.5 -19 q11 -23 30.5 -36.5t41.5 -13.5q14 0 26 6q19 8 29 26.5t10 39.5q0 18 -8 37zM381 932q-130 -58 -195.5 -156t-65.5 -224q0 -16 1 -31t3 -32q44 55 127 115.5t222 122.5q83 38 180 70.5t203 62t218.5 55.5t227.5 51q-130 14 -255.5 24t-241.5 10q-125 0 -232.5 -15 t-191.5 -53zM291 119q129 -146 304 -146q97 0 199 46q80 36 160 104t159 157t157.5 194t156.5 215q-94 -70 -188 -137t-186 -127.5t-180.5 -111.5t-171.5 -89q-130 -59 -226 -82t-165 -23h-19z" />
+<glyph unicode="D" horiz-adv-x="5211" d="M904 1423q60 0 145 -7t187 -20t218.5 -32t240 -43.5t252 -54.5t254.5 -65q206 -57 358 -113t259.5 -110t175 -104.5t105.5 -96.5q32 38 77 60.5t99 22.5h1935v-457h-1935q-54 0 -99 22.5t-77 60.5q-38 -46 -105.5 -96.5t-175 -104.5t-259.5 -110t-358 -113 q-126 -35 -254.5 -65t-252 -54.5t-240 -43.5t-218.5 -32t-187 -20t-145 -7q-124 0 -239.5 28.5t-216 80t-183 123.5t-141.5 160t-91.5 189t-32.5 210t32.5 210.5t91.5 189.5t141.5 160t183 123.5t215.5 80t240 28.5zM81 631q22 -15 88.5 -32t172 -31t247.5 -23t315 -9 q85 0 203.5 2t257 6t291.5 9t308 11.5t305 14.5t283 16t242.5 17.5t183.5 18.5q-74 10 -183.5 19t-242.5 17.5t-283 16.5t-305 14.5t-308 11.5t-291.5 9t-257 6t-203.5 2q-173 0 -315 -9t-247.5 -23t-172 -31t-88.5 -33zM904 801q60 0 144 -1t185.5 -3.5t217 -5.5t239 -7.5 t251 -9.5t252.5 -11q151 -8 271.5 -15t215 -13.5t165.5 -13.5t122 -13q-43 17 -108 37t-159 42t-221 46t-293 49q-123 18 -250 34t-250 29t-238.5 23.5t-217 17.5t-185 10.5t-141.5 3.5q-143 0 -273.5 -21.5t-237 -59.5t-183 -89t-110.5 -111q52 19 124 33t151.5 23t161 14 t153.5 8t128.5 3.5t85.5 0.5zM904 1348q-138 0 -263.5 -37t-229 -103.5t-180 -157.5t-116.5 -199q57 51 139.5 92t184 70.5t219 45.5t246.5 16q60 0 144.5 -3.5t186 -11t217.5 -17.5t239.5 -23.5t251.5 -29.5t254 -35q165 -24 293 -48t226 -47t168.5 -44.5t119.5 -41.5 q-64 58 -170.5 114t-241.5 107t-290 97t-316.5 85.5t-320.5 71t-301.5 53.5t-261.5 34t-198 12zM904 -85q79 0 198 12t261.5 34t301.5 53.5t320.5 71t316.5 85.5t290 97t241.5 107t170.5 114q-49 -20 -119.5 -42t-168.5 -44.5t-226 -46.5t-293 -48q-126 -19 -254 -35 t-251.5 -29.5t-239.5 -23.5t-217.5 -17.5t-186 -11t-144.5 -3.5q-129 0 -246.5 16t-219 45.5t-184 70.5t-139.5 92q40 -108 116.5 -199t180 -157.5t229 -103.5t263.5 -37zM904 263q58 0 141.5 3.5t185 10.5t217 17.5t238.5 23.5t250 29t250 34q166 25 293 48.5t221 46 t159 42.5t108 37q-51 -6 -122 -13t-165.5 -13.5t-215 -14t-271.5 -14.5q-125 -6 -252.5 -11t-251 -9.5t-239 -8t-217 -6t-185.5 -3.5t-144 -1q-29 0 -85.5 0.5t-128.5 3.5t-153.5 8.5t-161 14.5t-151.5 22.5t-124 33.5q34 -60 110.5 -111.5t183 -89t237 -59t273.5 -21.5z " />
+<glyph unicode="E" horiz-adv-x="6675" d="M6675 1423v-1566h-4861q-38 0 -71.5 46t-60.5 127.5t-45.5 193t-26.5 242.5q-79 -7 -169 -18t-184.5 -23t-190.5 -24.5t-186 -22.5t-170.5 -16t-145.5 -6q-117 0 -219.5 22.5t-179 61.5t-121 91t-44.5 111t44.5 111t121 91t179 61.5t219.5 22.5q65 0 145.5 -6t170.5 -16 t186 -22.5t190.5 -24.5t184.5 -23t169 -18q8 130 27 241t46 192t60 126.5t71 45.5h4861zM1695 472q6 -108 19.5 -196t30.5 -154.5t35 -110t34 -61.5q18 21 39.5 78t40 145t31 206t12.5 261t-12.5 261t-31 206t-40 145t-39.5 78q-16 -18 -34 -61t-34.5 -109t-30 -153.5 t-20.5 -194.5q46 -3 86 -3q7 0 13 -13t10.5 -36t7 -53.5t2.5 -64.5q0 -35 -2.5 -65.5t-7 -53t-11 -35.5t-13.5 -13q-39 0 -85 -3z" />
+<glyph unicode="F" horiz-adv-x="7626" d="M6354 644q0 42 16 79.5t44 65.5t65.5 44.5t80.5 16.5h494q-33 -44 -51.5 -96t-18.5 -110t18.5 -110t50.5 -95h-493q-43 0 -80.5 16t-65.5 43.5t-44 65t-16 80.5zM7206 644q0 42 16 79.5t44 65.5t65.5 44.5t80.5 16.5q42 0 79.5 -16.5t65.5 -44.5t44 -65.5t16 -79.5 t-16 -79.5t-44 -65.5t-65.5 -44t-79.5 -16q-43 0 -80.5 16t-65.5 43.5t-44 65t-16 80.5zM6132 639q0 -58 18.5 -110t50.5 -95h-2753q-167 0 -315 -25.5t-286 -67t-269 -94.5t-262.5 -108t-268 -108t-284.5 -94.5t-312.5 -67t-351.5 -25.5q-127 0 -258 25t-253.5 72.5 t-229.5 116.5t-186.5 157.5t-125.5 195t-46 229.5q0 122 46 228.5t125.5 195t186.5 157.5t229.5 116.5t253 72.5t258.5 25q187 0 351.5 -25.5t312.5 -67t284.5 -94.5t268 -108t262.5 -108t269 -94.5t286 -67t315 -25.5h2754q-33 -43 -51.5 -95.5t-18.5 -110.5zM1750 186 q111 39 199.5 89.5t149.5 109t93.5 124t32.5 134.5q0 76 -39 146.5t-109.5 132t-170 112t-220 86.5t-259 56t-288.5 20q-91 0 -182 -14t-176.5 -39.5t-162.5 -62.5t-139 -83q-8 -6 -12 -15t-4 -18q0 -10 4 -18q13 -23 37 -23q4 0 12 2q86 28 176 42.5t179 14.5 q136 0 263.5 -17t239 -48.5t204 -74.5t159 -95.5t103 -112.5t36.5 -124q0 -42 -15 -79t-39 -69t-53 -58.5t-57 -46.5q-16 -10 -16 -32q0 -11 4 -19q11 -22 36 -22q9 0 14 2z" />
+<glyph unicode="G" horiz-adv-x="1338" d="M361 -134q-76 33 -139.5 98t-111 149t-75.5 180t-34 192h1337q-5 -96 -33.5 -192t-76 -180t-111.5 -148.5t-140 -97.5q-28 -12 -55.5 -19.5t-62.5 -11t-80.5 -5t-109.5 -1.5t-109.5 1.5t-80 5t-62.5 10.5t-56 19zM402 205q-5 -7 -5 -15t3 -14q8 -14 25 -14h181q12 0 20 8 t8 20q0 13 -9 21l-86 131q-9 12 -24 12q-7 0 -13.5 -3t-10.5 -9zM150 591h-150q3 99 32.5 201.5t78 199.5t112.5 182t137 149t152 101t157 37t157 -37t152.5 -101t137.5 -149t112.5 -182t78 -199.5t32.5 -201.5h-643v177h-62v-177h-422v177h-62v-177zM709 966q3 -9 3 -18 q0 -21 -14 -33q-13 -13 -34 -13q-17 0 -33 9q-17 9 -27 24l-30 -31q11 -21 36 -35q26 -13 54 -13q11 0 21 2t20 5q20 8 32 19q12 12 20 29q8 19 8 38q0 21 -7 36q-6 15 -19 27q-12 11 -28 19q-18 6 -36 6q-13 0 -22 -3t-14 -8l11 61h98v47h-135l-22 -108q-1 -8 -2 -14.5 t-3 -12.5l-3 -19q-2 -5 -2 -9h45q8 11 18 16q10 6 23 6q11 0 18 -4q8 -3 14 -9t10 -14zM542 658h27v110h-27v-110zM453 658h28v110h-28v-110zM365 658h28v110h-28v-110zM277 658h27v110h-27v-110z" />
+<glyph unicode="H" horiz-adv-x="1725" d="M1497 1120q-21 0 -35.5 15t-14.5 36q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM1244 1120q-20 0 -35 15t-15 36q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM991 1120q-20 0 -35 15t-15 36 q0 32 28 45l16 35q2 4 6 4t6 -4l17 -35q28 -13 28 -45q0 -21 -14.5 -36t-36.5 -15zM1565 1391q34 0 63.5 -13t51.5 -35.5t35 -52t13 -63.5v-1405q0 -9 -6.5 -15.5t-15.5 -6.5h-229q-11 0 -19 10l-36 53q-4 8 -4 13v36h-1108v-36q0 -5 -4 -13l-36 -53q-7 -10 -19 -10h-229 q-9 0 -15.5 6.5t-6.5 15.5v1405q0 34 13 63.5t35 52t52 35.5t64 13h62v19q0 30 21 51t51 21h190q30 0 51.5 -21t21.5 -51v-19h136v19q0 30 21 51t51 21h190q30 0 51 -21t21 -51v-19h136v19q0 30 21.5 51t51.5 21h190q30 0 51 -21t21 -51v-19h63zM1497 1275q-21 0 -40 -8 t-33.5 -22.5t-22.5 -33.5t-8 -40q0 -22 8 -41t22.5 -33t33.5 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5t-33 22.5t-41 8zM1244 1275q-21 0 -40 -8t-33.5 -22.5t-22.5 -33.5t-8 -40q0 -22 8 -41t22.5 -33t33.5 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5 t-33 22.5t-41 8zM991 1275q-21 0 -40 -8t-33 -22.5t-22 -33.5t-8 -40q0 -22 8 -41t22 -33t33 -22t40 -8q44 0 74 30t30 74q0 21 -8 40t-22 33.5t-33 22.5t-41 8zM218 981v-649h1293v649h-1293zM223 1254q-20 -15 -31 -37t-11 -46q0 -35 21 -63q16 -20 38 -30.5t46 -10.5 q35 0 62 20q20 16 31 38t11 46q0 33 -21 62q-15 20 -37 31t-46 11q-35 0 -63 -21zM1602 136h-1476v-33q0 -29 20 -49.5t49 -20.5h364q4 -13 15 -21.5t25 -8.5h530q14 0 25 8.5t15 21.5h364q29 0 49 20.5t20 49.5v33zM1602 186l-91 96h-1293l-92 -96h1476zM225 1118 q-8 0 -8 6q0 2 1 3l18 34q-1 4 -1 10q0 25 20 40q13 10 31 10q11 0 22 -4.5t18 -15.5q10 -13 10 -30q0 -11 -5 -22t-15 -19q-13 -10 -30 -10q-11 0 -23 5zM840 644q-22 24 -35 54.5t-15 62.5v7q0 35 13.5 67t39.5 58q1 2 5 2t6 -2l38 -39q3 -2 3 -5t-3 -6q-17 -17 -24 -35.5 t-7 -37.5q0 -22 8.5 -42t22.5 -36q24 -27 35 -56t11 -59q0 -43 -19 -83.5t-49 -72.5q-2 -3 -5 -3q-2 0 -6 2l-40 37q-2 4 -2 6q0 4 2 6q25 26 37 52.5t12 52.5q0 41 -28 70zM590 469q19 20 28 40t9 40q0 30 -20 51q-19 20 -30 47.5t-11 57.5q0 27 10.5 54t33.5 50q2 2 5 2 q4 0 6 -2l38 -39q3 -2 3 -5t-3 -6q-13 -13 -18 -26t-5 -27q0 -17 7 -32.5t16 -26.5q21 -23 30 -47t9 -49q0 -35 -15.5 -69.5t-40.5 -60.5q-2 -3 -6 -3q-3 0 -5 2l-40 37q-2 2 -2 6t1 6zM1055 469q37 38 37 79q0 31 -20 51q-19 21 -30.5 49t-11.5 58q0 27 10.5 53.5 t33.5 49.5q4 2 6 2q1 0 5 -2l39 -39q2 -4 2 -6q0 -3 -2 -5q-13 -13 -18 -26.5t-5 -27.5q0 -17 7 -32t16 -26q20 -23 29.5 -47t9.5 -49q0 -35 -16 -69.5t-41 -60.5q-2 -3 -5 -3q-2 0 -6 2l-40 37q-2 4 -2 6t2 6z" />
+<glyph unicode="I" horiz-adv-x="1993" d="M288 1103q-17 0 -28 11t-11 28t11 28.5t28 11.5q41 0 78.5 -13t68 -36t53 -54.5t34.5 -68.5q10 2 19.5 3.5t20.5 1.5q34 0 64 -13t52.5 -35t35.5 -52t13 -64t-13 -64t-35.5 -52t-52.5 -35t-64 -13t-63.5 13t-52 35t-35.5 52t-13 64q0 36 14 66.5t39 53.5q-6 28 -21 52 t-36.5 42t-48.5 28t-57 10zM613 957q-19 0 -32.5 -13.5t-13.5 -32.5q0 -20 13.5 -33t32.5 -13t32.5 13t13.5 33q0 19 -13.5 32.5t-32.5 13.5zM1979 436q13 -15 13 -31q0 -17 -13 -30l-283 -282q-12 -13 -30 -13q-19 0 -31 13l-347 347q-11 11 -13 27l-20 303v4q0 18 12 30 l7 6q-28 20 -61.5 31t-69.5 11q-20 0 -39 -3q-39 -7 -73.5 -27t-60.5 -50l-3 -3q38 -70 64 -117.5t42.5 -78.5t26 -48t13.5 -25t5 -9.5l1 -1.5q7 -14 7 -25v-579q0 -16 -11 -27.5t-28 -11.5h-1048q-16 0 -27.5 11.5t-11.5 27.5v580q0 2 0.5 3t0.5 5l2 6l1 1q0 1 0.5 1.5 t0.5 1.5l313 556q20 -6 36 -19t27 -30l-274 -487h914l-449 827l-90 -161q-29 25 -67 43l124 219q12 20 34 20q24 0 35 -21l319 -587q68 68 163 85q14 2 26.5 3.5t26.5 1.5q73 0 137 -32.5t107 -89.5l217 -15q17 -2 27 -13zM1048 91h-969v-166h969v166zM1048 424h-969v-166 h969v166zM1412 577q33 0 56.5 23.5t23.5 57.5q0 29 -18 51t-47 28q5 -14 9.5 -28t6.5 -29q0 -2 0.5 -3.5t0.5 -3.5q0 -14 -9.5 -25.5t-23.5 -14.5h-7q-15 0 -26.5 9.5t-13.5 23.5q-4 24 -13 45q-19 -24 -19 -53q0 -34 23.5 -57.5t56.5 -23.5zM1668 286q36 8 57.5 31t21.5 55 t-18 53t-59 35q-28 11 -39 18t-11 15q0 19 32 19q21 0 36 -4.5t23 -8.5q0 -1 3 -1q1 0 2 -1q2 0 3 1l3 4l12 52q0 2 -2 4q-27 12 -62 15v33q0 6 -5 6h-43q-6 0 -6 -6v-37q-35 -8 -55 -30t-20 -53q0 -20 7.5 -34t19.5 -24t27 -17t30 -12q26 -9 34.5 -17t8.5 -16t-4.5 -12 t-10.5 -6.5t-12.5 -3t-9.5 -0.5q-10 0 -21.5 3t-22 7t-18.5 7t-11 3q-1 0 -1.5 -0.5t-1.5 -0.5l-3 -3l-13 -54q0 -2 2 -4q14 -8 33 -13t40 -7v-36q0 -6 5 -6h44q5 0 5 6v40z" />
+<glyph unicode="J" horiz-adv-x="2138" d="M2082 605q22 -22 32.5 -48.5t10.5 -55.5q0 -46 -25 -83l-343 -507q-4 -8 -9.5 -14.5t-11.5 -13.5q-22 -22 -49 -32.5t-56 -10.5t-55.5 10.5t-48.5 32.5l-1013 1013q-20 21 -31.5 48.5t-11.5 56.5q0 6 0.5 12t1.5 12q6 35 27 63.5t53 44.5l16 8t41 20t55.5 27l61 30t57 28 t43.5 22q72 36 149.5 55t154.5 19l46 98q6 12 17 18.5t24 6.5q11 0 19 -4l81 -39q12 -5 18.5 -16t6.5 -24q0 -11 -4 -19l-24 -52q14 -5 27.5 -10.5t26.5 -12.5l24 49q5 12 16 18.5t24 6.5q12 0 20 -4l80 -38q12 -6 19 -17t7 -23q0 -10 -5 -20l-41 -86zM1829 331 q18 14 27 37.5t9 53.5q0 33 -10 72t-28.5 81.5t-46 87.5t-62.5 89q-41 51 -85 92t-87 69.5t-82.5 44t-72.5 15.5q-36 0 -59 -19q-18 -14 -27 -38t-9 -54q0 -33 9.5 -72t28.5 -81.5t46.5 -87t62.5 -88.5q40 -51 84 -92t87 -69.5t83 -44t73 -15.5q36 0 59 19zM750 574 l-155 -154q29 -32 44 -71t15 -81q0 -44 -16.5 -85.5t-49.5 -74.5l-149 -149q-33 -33 -74.5 -49.5t-85.5 -16.5t-85 16.5t-75 49.5l-53 52q-33 33 -49.5 74.5t-16.5 85.5t16.5 85.5t49.5 74.5l149 149q33 33 74.5 49.5t85.5 16.5q42 0 81 -14.5t71 -43.5l155 155zM134 263 q-19 -19 -28 -43t-9 -49q0 -47 30 -83l332 331q-37 31 -84 31q-25 0 -49 -9.5t-43 -28.5zM519 176q20 19 29.5 42.5t9.5 48.5q0 47 -31 84l-332 -332q36 -30 83 -30q25 0 49 9.5t43 28.5z" />
+<glyph unicode="K" horiz-adv-x="2764" d="M1385 1073q129 0 242 -49t197.5 -133t133.5 -197t49 -242q0 -86 -22.5 -165.5t-63 -148.5t-97 -126t-125.5 -97.5t-148.5 -62.5t-165.5 -22t-165.5 22t-148.5 62.5t-125.5 97.5t-97 126t-63 148.5t-22.5 165.5q0 129 49 242t133.5 197t197.5 133t242 49zM1385 -122 q79 0 152 20.5t137 58t116 90t89.5 116t58 137t20.5 152.5t-20.5 152t-58 137t-89.5 116t-116 89.5t-137 58t-152 20.5t-152 -20.5t-137 -58t-116 -89.5t-89.5 -116t-58 -137t-20.5 -152q0 -119 45 -223.5t123 -182.5t182 -123t223 -45zM718 856q8 0 13.5 -5t5.5 -13v-249 q0 -25 -14.5 -44t-36.5 -27l14 -394q0 -16 -11.5 -27.5t-27.5 -11.5t-27 11.5t-11 27.5l13 394q-22 8 -36 27t-14 44v249q0 8 5 13t13 5t13.5 -5t5.5 -13v-177h20v177q0 8 5 13t13 5t13 -5t5 -13v-177h21v177q0 8 5 13t13 5zM1079 1161q-16 0 -26.5 11t-10.5 26t10.5 25.5 t26.5 10.5l373 -13q7 21 25.5 34.5t41.5 13.5h192q7 0 12 -5t5 -12q0 -8 -5 -13t-12 -5h-123v-19h123q7 0 12 -5t5 -12q0 -8 -5 -13t-12 -5h-123v-19h123q7 0 12 -4.5t5 -12.5t-5 -13t-12 -5h-192q-23 0 -41.5 13.5t-25.5 34.5zM514 774q8 0 13 -5.5t5 -13.5v-190 q0 -25 -14 -44t-36 -27l13 -370q0 -16 -11 -27.5t-27 -11.5q-17 0 -28 11.5t-11 27.5l14 370q-22 8 -36.5 27t-14.5 44v190q0 8 5.5 13.5t13.5 5.5t13 -5.5t5 -13.5v-117h21v117q0 8 5 13.5t13 5.5t13 -5.5t5 -13.5v-117h20v117q0 8 5.5 13.5t13.5 5.5zM1212 1287 q-28 0 -55 6.5t-48.5 18.5t-34.5 27.5t-13 33.5t13 34t34.5 27.5t48.5 18.5t55 7q46 0 81.5 -17.5t47.5 -44.5l332 12q15 0 26 -10.5t11 -26.5q0 -15 -11 -25.5t-26 -10.5l-332 11q-12 -26 -47.5 -43.5t-81.5 -17.5zM2446 827q18 0 33.5 -13t27 -34t18 -48t6.5 -54 q0 -45 -17.5 -79.5t-43.5 -46.5l12 -431q0 -14 -10.5 -25t-25.5 -11q-14 0 -25 11t-11 25l13 431q-27 12 -44.5 46.5t-17.5 79.5q0 27 6.5 54t18 48t27 34t33.5 13zM2757 657q0 -44 -21.5 -77t-53.5 -44l12 -415q0 -14 -10.5 -25t-25.5 -11q-14 0 -25 11t-11 25l12 415 q-32 11 -53 44t-21 77q0 26 7.5 51t21 45t31.5 32.5t38 12.5q21 0 39 -12.5t31.5 -32.5t21 -45t7.5 -51zM2162 399l9 -275q0 -16 -11 -27.5t-27 -11.5q-17 0 -28 11.5t-11 27.5l12 344l-47 33v288q0 49 8 82.5t19.5 54.5t24.5 30.5t23 9.5t15.5 -7.5t8.5 -15.5q4 -11 4 -23 v-521zM2311 399l10 -275q0 -16 -11.5 -27.5t-27.5 -11.5t-27.5 11.5t-11.5 27.5l13 348l-32 29v196q0 49 5.5 82.5t14 54.5t19 30.5t20.5 9.5t15.5 -7.5t8.5 -15.5q4 -10 4 -22v-430zM328 898q7 -4 7 -16v-843q0 -13 -7 -16q-4 -2 -5 -2q-6 0 -9 5l-310 422q-4 5 -4 12.5 t4 12.5l310 422q5 8 14 3zM1385 973q108 0 202.5 -41t165.5 -112t112 -165.5t41 -202.5t-41 -203t-112 -165.5t-165.5 -111.5t-202.5 -41t-202.5 41t-165.5 111.5t-112 165.5t-41 203t41 202.5t112 165.5t165.5 112t202.5 41zM1796 628q13 31 -11 55q-15 15 -35 15 q-2 0 -2 -1q6 28 -14 48q-15 15 -35 15q-2 0 -3.5 -0.5t-3.5 -0.5v6q0 21 -14 35q-15 15 -36 15q-9 0 -13 -2q0 22 -15 37q-14 14 -36 14q-10 0 -15 -2q0 21 -14 35q-17 15 -36 15q-16 0 -29 -9q-2 16 -14 28q-14 15 -35 15t-36 -15t-15 -35q0 -17 11 -31l-174 -355 q6 4 13.5 6.5t15.5 1.5q8 -2 12 -5q4 8 7 11q7 6 16 8t17 2q10 0 19 -1q-2 -28 -24 -47q32 3 57 -11t37 -52q7 -23 2.5 -48.5t-14 -48t-21.5 -38.5t-20 -19q-9 -3 -28 3.5t-39.5 20t-38.5 32t-25 41.5q-12 37 1 63.5t40 41.5q-23 2 -38 17l-175 -356q-7 -15 4 -26 q9 -7 16 -7q5 0 10 3l483 236q20 -28 50 -28q24 0 42.5 19t28.5 50q15 -6 30 -6q27 0 44 17q19 19 16 52l40 19q13 -10 30 -10q21 0 36 15q14 14 14 35t-14 36q-13 12 -29 14q8 13 8 27q0 21 -15 36q-14 14 -33 14zM1274 357q-2 7 -6 11t-9 2t-6 -7.5t1 -12.5t6.5 -11 t8.5 -2q10 3 5 20zM1277 446q-8 -3 -5 -20q2 -7 6.5 -11t9.5 -2q10 4 5 20q-2 7 -6.5 11t-9.5 2zM1347 426q10 3 5 19q-2 8 -6.5 12t-8.5 2q-5 -2 -6 -7.5t1 -12.5q5 -16 15 -13zM1358 402q-10 -4 -5 -20q2 -7 6.5 -11t9.5 -2q4 1 5.5 6.5t-0.5 12.5q-5 16 -16 14zM1342 317 q10 3 5 20q-2 7 -6.5 11t-8.5 2q-5 -2 -6 -7.5t1 -12.5t6 -11t9 -2zM1335 395q-2 7 -6.5 11t-8.5 2q-5 -1 -6 -6.5t1 -13.5q2 -7 6 -11t9 -2t6 7.5t-1 12.5zM1436 563q-7 11 -12 23t-6 26q-2 10 3 21q5 10 16 13q15 3 30 -2q2 0 2.5 -0.5t2.5 -0.5q0 -3 -1 -5v-7 q-1 -5 -1 -9v-9q1 -17 4 -33t10 -32q6 -14 16 -27t24 -21q-14 2 -26 8.5t-23 14.5t-21 18.5t-18 21.5zM1569 418q0 -1 1 0.5t-1 -0.5q-18 -21 -37 -32q-20 -13 -40 -16q-16 -3 -26 3q-11 5 -13 17q-3 14 2 29q0 1 0.5 2t0.5 2q0 2 2 0h2q5 0 8 -1h16q36 0 66 13q14 6 27 16 t21 24q-1 -8 -4 -15.5t-7 -15.5q-8 -15 -18 -26zM1711 487q7 -11 12 -23t7 -26q0 -12 -4 -21t-16 -12q-8 -2 -15.5 -1t-15.5 3q-2 0 -2 1q-2 0 -2 1q1 1 1 4v8q1 4 1 8v9q-1 17 -4 33t-10 32q-6 14 -16 27t-24 20q14 -2 26.5 -8.5t23.5 -14.5q21 -16 38 -40zM1580 634 q1 2 -0.5 0.5t0.5 -0.5q16 19 38 33q10 5 20.5 9t21.5 5q7 1 14 0t12 -6q7 -6 9 -20q0 -9 -1 -14q0 -2 -0.5 -4t-0.5 -4q-1 -1 -1 -4l-1 -2q0 -1 -1 0q-9 1 -17.5 1h-16.5q-17 -1 -33 -4t-30 -11q-14 -6 -25.5 -15t-18.5 -23q2 17 11 32t20 27zM1501 607q-3 29 6 56 q3 11 9 21t14 18q8 7 16 8q9 2 19 -5q11 -8 17 -20q1 -1 1 -2t1 -2t0 -2l-1 -1q-2 -2 -3.5 -2.5t-3.5 -2.5q-6 -5 -11 -11q-25 -25 -38 -55q-6 -14 -8.5 -31t2.5 -33q-9 12 -14 30q-6 16 -6 34zM1697 595q14 -3 15 -3t-3 0.5t-9 1.5t-3 1q19 -3 35 -12q14 -7 21 -18 q6 -8 6 -15q0 -10 -8 -20q-6 -6 -10 -8q-1 -1 -7 -5q-1 0 -1.5 -0.5t-1.5 -0.5q0 -1 -1 -1q-1 -1 -2 0q-5 7 -11 12.5t-12 11.5q-25 24 -55 35q-14 5 -29.5 7t-29.5 -3q22 15 50 18q29 5 56 -1zM1646 444q1 -2 0.5 0t-0.5 0q3 -31 -6 -58q-4 -11 -9.5 -20.5t-13.5 -17.5 q-6 -6 -15 -8q-11 -2 -19 5q-6 4 -10 9.5t-8 10.5l-2 4v2l1 1q2 2 3.5 2.5t3.5 2.5q3 3 6 5.5t6 6.5q11 11 21 25t16 29t8.5 31.5t-2.5 33.5q10 -14 14.5 -30.5t5.5 -33.5zM1466 453q-11 1 -21.5 3t-21.5 7q-9 5 -18 11t-14 15q-5 12 -1 20q2 6 6 10.5t9 8.5q6 4 13 8 q2 2 2 -1q1 -1 1 -2l3 -3q1 -2 5 -6q9 -10 24 -22q23 -19 50 -27q13 -5 26.5 -6t26.5 4q-4 -4 -8.5 -6.5t-9.5 -4.5t-11 -3.5t-11 -2.5q-24 -6 -50 -3z" />
+<glyph unicode="L" horiz-adv-x="1940" d="M1837 337q42 -35 64.5 -78t25.5 -86l-64 -76q-5 -1 -9.5 -1h-9.5q-39 0 -80 15.5t-77 45.5t-57.5 66.5t-29.5 74.5q-36 -48 -83 -100.5t-102 -108.5q-62 -62 -121 -113t-109.5 -88t-89.5 -57t-60 -20q-11 0 -16 5l-67 66q6 -6 17 -6q21 0 60 20.5t89.5 58t109.5 88.5 t121 113t113.5 121t88 109.5t57 89.5t20.5 60q0 11 -5 16l66 -66q5 -5 5 -16q0 -24 -26 -73h14q38 0 78.5 -15t76.5 -45zM1813 185q34 -39 50 -86q-3 37 -20.5 74.5t-49.5 69.5q-2 2 -5.5 5t-3.5 5q-3 2 -5.5 4t-4.5 4l-12 10l-10 6q-32 23 -66.5 34t-67.5 11l-3 -4 q20 -5 39.5 -12.5t38.5 -19.5q4 -14 16.5 -30.5t32.5 -33.5q19 -17 38 -26t33 -11zM1175 683q-7 -6 -12.5 -19.5t-9.5 -28.5t-7 -30t-4 -25l-2 -3v139h138l-2 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5zM589 1267h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5 t-16.5 -8.5q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138zM865 716h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5q-7 -6 -12 -19.5t-9 -28.5t-7 -30t-4 -25l-2 -3v139zM865 991h138l-3 -2q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9 q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v138zM589 991h138l-3 -2q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v138zM347 1235q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138h138l-2 -3q-11 -2 -27 -5t-31 -7 t-27.5 -8.5t-16.5 -8.5zM865 1267h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11 -17.5t-9 -25.5t-7 -28.5t-5 -26.5l-2 -8v138zM899 408q-7 -7 -12 -20t-9.5 -28.5t-7.5 -31t-5 -26.5v138h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5 t-16.5 -8.5zM623 683q-7 -6 -12 -19.5t-9 -28.5t-7 -30t-4 -25l-2 -3v139h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -9.5zM347 959q-6 -6 -11 -17t-9 -25t-7 -28.5t-5 -26.5l-2 -9v136h136q-11 -2 -27 -5t-31 -7t-27.5 -9t-16.5 -9zM1140 440h138l-2 -3 q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18.5t-9.5 -26.5t-7.5 -28.5t-5.5 -26.5q0 -2 -0.5 -3t-0.5 -3v138zM1570 604q6 -6 6 -17q0 -21 -20.5 -60t-57.5 -89.5t-88.5 -109.5t-112.5 -120q-62 -62 -121 -113t-109.5 -88.5t-89.5 -58t-60 -20.5 q-11 0 -17 6l-63 63q-133 132 -233.5 233t-175 176t-126 126t-84.5 84l-89 88q-65 65 -97 146t-32 166t32 166t97 146t146 97t166 32t166 -32t146 -97l35 -40q3 38 19.5 74.5t46.5 66.5q33 33 74.5 50t85.5 17t85.5 -17t75.5 -50q24 -24 39 -52.5t22 -59.5l158 -537z M548 1358h77q-18 11 -37.5 18.5t-39.5 13.5v-32zM498 1401q-14 2 -28.5 3t-28.5 1q-44 0 -86.5 -9t-82.5 -28v-10h226v43zM272 1308v-225h226v225h-226zM222 757h-77q3 -3 10 -9t9 -11l58 -58v78zM222 1033h-173v-44h124q-11 -2 -26.5 -5t-31 -7t-28 -9t-16.5 -9 q-7 -7 -14 -26q8 -33 20 -65t31 -61h114v226zM222 1308h-40q-5 -4 -9.5 -8t-9.5 -9l-22 -24h34l-2 -3q-17 -2 -41 -8q-31 -39 -50 -82.5t-27 -90.5h167v225zM498 481h-78l78 -78v78zM498 757h-226v-128l41 -41v128h138l-2 -3q-11 -2 -27 -5t-31 -7t-27.5 -8.5t-16.5 -9.5 q-6 -6 -11 -18t-8.5 -26t-6.5 -28.5t-5 -25.5l54 -54h128v226zM498 1033h-226v-226h226v226zM773 205h-77l77 -78v78zM773 481h-225v-128l41 -41v128h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18t-9 -26.5t-6.5 -29t-4 -25.5l54 -54h127v226 zM773 757h-225v-226h225v226zM773 807v226h-225v-226h225zM773 1238q-15 5 -26 17q-8 10 -15.5 19t-15.5 17l-19 17h-149v-225h225v155zM1375 531h125q19 34 22 46l-84 86q-8 -19 -13 -43.5t-7 -39.5l-2 -3v108l-41 41v-195zM1375 364q11 14 21.5 26t19.5 24v26h21l30 41 h-92v-117zM1099 1358h66q-6 9 -12.5 17.5t-14.5 16.5q-19 19 -39 29v-63zM1099 1083h152l-48 165q-22 -7 -28 -13t-11.5 -18.5t-9.5 -27.5t-7.5 -30t-5.5 -27q0 -1 -0.5 -1.5t-0.5 -1.5v138h57l-10 35q0 1 -0.5 1.5t-0.5 1.5q0 2 -1 3h-86v-225zM1099 807h226v25l-49 157 q-11 -2 -26.5 -5t-30.5 -7t-27.5 -9t-16.5 -9q-6 -6 -11.5 -18.5t-9.5 -27t-7.5 -29.5t-5.5 -27q0 -2 -0.5 -2.5t-0.5 -1.5v138h138l-12 42h-167v-226zM1099 757v-226h226v226h-226zM823 1083h226v225h-208q-2 -6 -3 -12.5t-2 -13.5q-1 -16 -13 -29v-170zM823 807h226v226 h-226v-226zM823 531h226v226h-226v-226zM927 -21q17 6 47.5 24.5t74.5 51.5v150h-226v-127l42 -42v128h138l-3 -3q-11 -2 -26.5 -5t-30.5 -7t-27.5 -8.5t-16.5 -8.5q-6 -6 -11.5 -18t-9 -26.5t-6.5 -28.5t-5 -25l4 -3l51 -52h5zM1049 481h-226v-226h226v226zM1049 1440 q-9 2 -18.5 3t-18.5 1q-34 0 -66 -13t-58 -39q-8 -8 -14.5 -16.5t-12.5 -17.5h188v82zM1223 205h-124v-110q10 8 20 16.5t21 17.5v35h39zM1274 255l51 54v172h-226v-226h175z" />
+<glyph unicode="M" horiz-adv-x="14546" d="M8314 627h156q61 0 94.5 -26t33.5 -71t-29.5 -72t-73.5 -36q30 -10 51.5 -30.5t21.5 -55.5q0 -54 -46.5 -88.5t-127.5 -34.5h-191zM8399 255q57 0 89 22t32 60q0 32 -26.5 48t-68.5 16h-125l-39 -146h138zM8429 443q55 0 88 22t33 59q0 30 -22 45.5t-63 15.5h-116 l-38 -142h118zM8650 301q0 11 2.5 23t5.5 24l45 171h45l-47 -174q-2 -8 -3 -17t-1 -17q0 -30 18 -47t50 -17q18 0 35 7.5t32 20.5t26.5 31t17.5 40l46 173h46l-82 -306h-45l13 49q-21 -23 -46.5 -39.5t-60.5 -16.5q-45 0 -71 25.5t-26 69.5zM9081 519h46l-83 -306h-46z M9109 636h52l-13 -51h-52zM9277 644h45l-116 -431h-45zM9338 335q0 41 14.5 75.5t38.5 60t55 40t64 14.5q48 0 75 -22.5t40 -52.5l52 194h45l-115 -431h-45l13 52q-22 -25 -50 -42.5t-66 -17.5q-52 0 -86.5 36t-34.5 94zM9609 390q0 41 -26.5 68t-68.5 27q-27 0 -50.5 -11.5 t-41 -31.5t-27 -46.5t-9.5 -56.5q0 -42 24.5 -67.5t62.5 -25.5q25 0 49.5 12t44 32t31 46t11.5 54zM9987 478h-42l11 41h42l10 36q11 47 38 69t66 22q38 0 61 -13l-11 -39q-13 6 -24.5 9t-25.5 3q-21 0 -37 -14t-24 -44l-8 -29h100l-11 -41h-100l-71 -265h-46zM10116 291 q0 52 38.5 81t98.5 29q30 0 58 -5t50 -11l2 7q2 7 3 14.5t1 13.5q0 30 -20.5 46.5t-62.5 16.5q-24 0 -45 -4.5t-41 -12.5l-7 39q22 8 46.5 13t53.5 5q59 0 90 -25t31 -70q0 -10 -2 -20.5t-4 -21.5l-47 -173h-44l13 47q-22 -24 -50 -39t-65 -15q-19 0 -36.5 5.5t-31 16.5 t-21.5 27t-8 36zM10348 333l6 21q-20 6 -45.5 10t-54.5 4q-41 0 -66.5 -20t-25.5 -52q0 -25 18 -39.5t48 -14.5q19 0 38 6.5t35.5 18.5t28.5 29t18 37zM10449 260l29 29q25 -24 52 -34.5t55 -10.5q26 0 46.5 14t20.5 37q0 15 -12 27t-46 25q-42 17 -64 34.5t-22 49.5 q0 39 31 66.5t85 27.5q33 0 63 -12.5t49 -29.5l-26 -31q-19 15 -42 25t-49 10q-32 0 -49 -14.5t-17 -33.5q0 -15 12.5 -26.5t48.5 -26.5q42 -17 63 -35.5t21 -47.5q0 -43 -34 -70t-83 -27q-36 0 -71 13.5t-61 40.5zM10790 268q0 8 1 16t3 16l49 178h-43l11 41h43l25 92h44 l-24 -92h96l-11 -41h-96l-47 -176q-1 -5 -1.5 -11t-0.5 -11q0 -32 41 -32q21 0 45 10l-12 -42q-23 -9 -48 -9q-33 0 -54 15.5t-21 45.5zM10962 161q26 7 39 20t17 32h-22l17 62h54l-15 -53q-11 -39 -30.5 -56.5t-55.5 -24.5zM11321 170l29 32q24 -21 54.5 -33.5t66.5 -12.5 q29 0 50 8.5t35 23.5q14 13 23 31t16 41l8 31q-23 -23 -51 -38.5t-66 -15.5q-24 0 -46.5 7.5t-40 22t-28 36t-10.5 49.5q0 38 15 69.5t39 54.5t55 36t63 13q25 0 43 -6t31.5 -16.5t22.5 -23.5t16 -27l18 67h45l-70 -263q-10 -35 -21.5 -57t-28.5 -39q-42 -43 -118 -43 q-42 0 -81.5 14t-68.5 39zM11629 398q0 35 -24.5 61t-68.5 26q-24 0 -47 -9.5t-40.5 -26.5t-28 -40.5t-10.5 -50.5q0 -42 27 -62.5t62 -20.5q26 0 49.5 10.5t41.5 27.5t28.5 39.5t10.5 45.5zM11816 519h46l-20 -80q28 40 63.5 63.5t81.5 21.5l-13 -49h-3q-25 0 -49.5 -9 t-45.5 -27t-37.5 -44.5t-25.5 -61.5l-32 -120h-46zM11994 343q0 36 14.5 68.5t39 58t57.5 40.5t70 15q63 0 101 -38t38 -98q0 -37 -14.5 -70t-39.5 -58.5t-57.5 -40.5t-68.5 -15q-64 0 -102 39t-38 99zM12267 386q0 48 -26 73.5t-69 25.5q-27 0 -50.5 -12t-41.5 -32 t-28.5 -45t-10.5 -52q0 -47 26.5 -72t69.5 -25q25 0 48.5 11.5t41.5 31t29 44.5t11 52zM12392 519h46l16 -244l148 245h38l17 -245l147 244h48l-191 -309h-41l-17 242l-147 -242h-40zM13022 260l30 29q25 -24 52 -34.5t55 -10.5q26 0 46.5 14t20.5 37q0 15 -12.5 27 t-45.5 25q-42 17 -64 34.5t-22 49.5q0 39 30.5 66.5t84.5 27.5q35 0 64.5 -12.5t48.5 -29.5l-26 -31q-20 15 -42.5 25t-48.5 10q-32 0 -49 -14.5t-17 -33.5q0 -15 12.5 -26.5t48.5 -26.5q42 -17 63 -35.5t21 -47.5q0 -21 -9 -39t-25 -31t-37.5 -20t-46.5 -7q-35 0 -70 13.5 t-62 40.5zM13355 343q0 36 14 68.5t38.5 58t57 40.5t69.5 15q64 0 102 -38t38 -98q0 -37 -15 -70t-39.5 -58.5t-57 -40.5t-68.5 -15q-63 0 -101 39t-38 99zM13628 386q0 48 -27 73.5t-70 25.5q-26 0 -49.5 -12t-41.5 -32t-28.5 -45t-10.5 -52q0 -47 26 -72t70 -25 q25 0 49 11.5t42 31t29 44.5t11 52zM13839 644h45l-115 -431h-46zM13967 519h46l-82 -306h-46zM13996 636h52l-14 -51h-52zM14063 335q0 41 14 75.5t38 60t55 40t64 14.5q48 0 75 -22.5t40 -52.5l52 194h46l-116 -431h-45l14 52q-23 -25 -51 -42.5t-65 -17.5q-52 0 -86.5 36 t-34.5 94zM14333 390q0 41 -26 68t-68 27q-27 0 -50.5 -11.5t-41 -31.5t-27 -46.5t-9.5 -56.5q0 -42 24 -67.5t62 -25.5q25 0 49.5 12t44 32t31 46t11.5 54zM14453 275h54l-16 -62h-55zM997 481q-138 0 -265.5 11t-238 31.5t-201.5 49t-156 63t-100.5 74.5t-35.5 83v311 q0 43 35.5 83t100.5 74.5t156 62.5t201.5 48.5t238 31.5t265.5 11t265.5 -11t238 -31.5t201.5 -48.5t156 -62.5t100.5 -74.5t35.5 -83v-311q0 -56 -57 -105t-160 -90l-780 195v-312zM1777 287q103 40 160 89.5t57 104.5v-311q0 -55 -57 -104.5t-160 -89.5l-780 194v311z M0 481q0 -43 35.5 -83t100.5 -74.5t156 -62.5t201.5 -48.5t238 -31.5t265.5 -11v-311q-138 0 -265.5 11t-238 31.5t-201.5 48.5t-156 62.5t-100.5 74.5t-35.5 83v311zM2850 198q-91 0 -168.5 33t-134.5 90.5t-89 135.5t-32 167v3q0 88 31.5 165.5t88.5 135.5t136.5 92 t174.5 34q58 0 106 -9.5t87 -26t71.5 -40.5t61.5 -52l-116 -133q-48 44 -98 68.5t-113 24.5q-52 0 -96 -20t-76 -55t-50 -82t-18 -100v-2q0 -54 17.5 -101.5t49 -83t76 -56t97.5 -20.5q35 0 64.5 7t55 19.5t49.5 30.5t48 41l116 -118q-32 -34 -66.5 -61.5t-75 -46.5 t-89 -29.5t-108.5 -10.5zM3687 213v68q-33 -36 -79.5 -58t-112.5 -22q-45 0 -84.5 12.5t-69 37t-46.5 61t-17 83.5v2q0 52 18.5 90t52.5 63t81 37t103 12q48 0 84.5 -7.5t70.5 -18.5v11q0 56 -34 85.5t-102 29.5q-51 0 -91 -8.5t-84 -25.5l-45 138q52 22 109 36.5t137 14.5 q147 0 215 -72.5t68 -201.5v-367h-174zM3690 468q-23 11 -52.5 17.5t-61.5 6.5q-58 0 -91.5 -22.5t-33.5 -65.5v-2q0 -36 27 -56.5t71 -20.5q64 0 102.5 31t38.5 80v32zM4423 213l-166 258l-62 -65v-193h-180v863h180v-460l210 230h215l-241 -249l250 -384h-206zM5274 466 h-441q13 -61 53.5 -92t101.5 -31q45 0 80.5 15t72.5 50l104 -91q-45 -55 -109 -87t-151 -32q-71 0 -132 24t-105 67.5t-69 103.5t-25 133v3q0 67 23 127t64.5 105t99 71t126.5 26q79 0 137.5 -28.5t96.5 -76t56.5 -110t18.5 -129.5v-2q0 -14 -0.5 -23.5t-1.5 -22.5z M4967 714q-56 0 -91 -36.5t-45 -98.5h270q-8 60 -42.5 97.5t-91.5 37.5zM5749 461h-138v-248h-182v827h338q74 0 132.5 -21t99.5 -58.5t62.5 -90.5t21.5 -116v-2q0 -72 -26 -126.5t-71 -91t-106 -55t-131 -18.5zM5899 750q0 62 -39.5 94t-108.5 32h-140v-253h144 q69 0 106.5 35.5t37.5 89.5v2zM6736 213v332h-336v-332h-182v827h182v-327h336v327h182v-827h-182zM7436 461h-138v-248h-182v827h338q74 0 132.5 -21t99.5 -58.5t63 -90.5t22 -116v-2q0 -72 -26 -126.5t-71.5 -91t-106.5 -55t-131 -18.5zM7587 750q0 62 -39.5 94t-108.5 32 h-141v-253h144q69 0 107 35.5t38 89.5v2z" />
+<glyph unicode="N" horiz-adv-x="2633" d="M1317 977l289 -71q38 14 59 32.5t21 38.5v116q0 24 -29 45t-79 36.5t-117.5 24.5t-143.5 9q-77 0 -144 -9t-117 -24.5t-79 -36.5t-29 -45v-116q0 -24 29 -44.5t79 -36.5t117 -25t144 -9v115zM1606 790l-289 72v-115l289 -72q38 15 59 33.5t21 38.5v115q0 -20 -21 -38.5 t-59 -33.5zM948 747q0 -24 29 -44.5t79 -36.5t117 -25t144 -9v115q-77 0 -144 9t-117 25t-79 36.5t-29 44.5v-115zM1317 363l-637 212v690l637 212l637 -212v-690zM743 621l574 -192l574 192v598l-574 192l-574 -192v-598zM207 -182q-45 0 -82.5 16t-65.5 44t-43.5 65.5 t-15.5 81.5q0 43 15.5 81.5t43.5 67t66.5 45t84.5 16.5q57 0 94 -17.5t65 -44.5l-57 -65q-23 21 -47.5 33t-54.5 12q-26 0 -47 -10t-37 -27t-24.5 -40t-8.5 -48q0 -27 8.5 -50t24 -40.5t37 -27.5t47.5 -10q35 0 58.5 12.5t46.5 34.5l57 -57q-32 -34 -69.5 -53t-95.5 -19z M615 -175v33q-17 -17 -39.5 -28t-54.5 -11q-44 0 -75 24.5t-31 70.5q0 51 35 75t89 24q23 0 41 -3.5t35 -9.5v6q0 56 -66 56q-26 0 -45 -4t-40 -12l-22 66q25 11 52.5 18t66.5 7q72 0 105 -35t33 -98v-179h-84zM616 -51q-11 5 -25 8.5t-31 3.5q-28 0 -44 -11t-16 -32 q0 -19 13.5 -28.5t34.5 -9.5q30 0 49 15t19 39v15zM973 -175l-81 126l-30 -32v-94h-87v420h87v-224l103 112h104l-117 -121l121 -187h-100zM1388 -51h-215q7 -30 26.5 -45.5t48.5 -15.5q23 0 40 7.5t35 24.5l50 -45q-21 -26 -52.5 -41.5t-73.5 -15.5q-35 0 -64 11.5 t-51 32.5t-34 50.5t-12 64.5q0 33 11 62.5t31.5 51.5t48.5 35t62 13q39 0 67 -14t46.5 -37t27.5 -53t9 -63q0 -8 -0.5 -12.5t-0.5 -10.5zM1239 69q-28 0 -45 -18t-22 -48h132q-4 30 -21 48t-44 18zM1552 147v-85h192v-81h-192v-156h-89v403h307v-81h-218zM2110 -51h-215 q7 -30 27 -45.5t49 -15.5q22 0 39 7.5t35 24.5l50 -45q-21 -26 -52 -41.5t-74 -15.5q-35 0 -64 11.5t-51 32.5t-34 50.5t-12 64.5q0 33 11 62.5t31.5 51.5t48.5 35t62 13q39 0 67 -14t46.5 -37t27.5 -53t9 -63q0 -8 -0.5 -12.5t-0.5 -10.5zM1961 69q-27 0 -44.5 -18 t-22.5 -48h132q-4 30 -21 48t-44 18zM2285 -181q-33 0 -67.5 11.5t-65.5 35.5l38 57q25 -18 50 -27t47 -9q37 0 37 22q0 16 -19 22.5t-45 14.5q-16 5 -32.5 11.5t-29.5 17t-21.5 26t-8.5 38.5q0 48 32.5 73.5t80.5 25.5q29 0 59 -9.5t56 -26.5l-34 -60q-23 14 -44.5 21.5 t-38.5 7.5q-32 0 -32 -22q0 -13 15.5 -19.5t38.5 -14.5l8 -3q16 -6 32.5 -13t30 -17.5t22 -25.5t8.5 -36q0 -53 -33.5 -77t-83.5 -24zM2564 -180q-40 0 -65 19.5t-25 72.5v147h-37v74h37v79h88v-79h72v-74h-72v-132q0 -30 28 -30q24 0 43 11v-70q-27 -18 -69 -18z" />
+<glyph unicode="O" horiz-adv-x="5926" d="M1014 581q-122 0 -229 14t-186.5 39t-126 58.5t-46.5 71.5v183q0 38 46.5 71.5t126 58.5t186.5 39.5t229 14.5t229 -14.5t187 -39.5t126.5 -58.5t46.5 -71.5v-183q0 -33 -34.5 -62t-94.5 -53l-460 115v-183zM1474 466q60 23 94.5 52.5t34.5 62.5v-184q0 -32 -34.5 -61.5 t-94.5 -53.5l-460 115v184zM426 581q0 -38 46.5 -71.5t126 -58.5t186.5 -39.5t229 -14.5v-184q-122 0 -229 14.5t-186.5 39.5t-126 58.5t-46.5 71.5v184zM100 1353v-1363h1829v1363h-1829zM2029 -110h-2029v1564h2029v-1564zM2637 354q-71 0 -131.5 25.5t-104.5 70 t-69 104.5t-25 129t24.5 130t69 106.5t106.5 71.5t136 26q90 0 149 -27.5t103 -71.5l-89 -103q-38 33 -77 52.5t-88 19.5q-41 0 -74.5 -16t-58.5 -43t-38.5 -63.5t-13.5 -77.5q0 -42 13.5 -79t38 -64.5t58.5 -43.5t75 -16q56 0 93.5 20t75.5 54l90 -90q-25 -27 -51.5 -48 t-58 -35.5t-69.5 -22.5t-84 -8zM3286 364v53q-26 -28 -61.5 -45t-86.5 -17q-35 0 -65.5 10t-53.5 29t-36.5 47t-13.5 64q0 41 14.5 71t41 49.5t62.5 29t80 9.5q38 0 66 -5.5t54 -14.5v8q0 44 -26.5 67t-78.5 23q-40 0 -71 -7t-65 -19l-35 106q42 18 85 28.5t106 10.5 q114 0 166.5 -56t52.5 -156v-285h-135zM3289 563q-18 8 -40.5 13t-48.5 5q-45 0 -70.5 -17.5t-25.5 -50.5q0 -29 21 -45.5t55 -16.5q49 0 79 24.5t30 62.5v25zM3858 364l-129 201l-48 -51v-150h-139v669h139v-356l163 179h166l-186 -194l193 -298h-159zM4518 561h-342 q11 -48 41.5 -72t78.5 -24q35 0 62.5 12t56.5 38l80 -70q-35 -43 -84.5 -67t-116.5 -24q-55 0 -102 18.5t-81.5 52t-54 80t-19.5 102.5q0 54 18 101t50 82t76.5 55t98.5 20q61 0 106.5 -22t74.5 -59t43.5 -85.5t14.5 -100.5v-19t-1 -18zM4280 753q-43 0 -70.5 -28t-35.5 -76 h210q-7 47 -33 75.5t-71 28.5zM4889 364h-251v642h251q75 0 138 -24.5t108 -67t70 -101t25 -126.5t-25 -127t-70 -102.5t-108 -68.5t-138 -25zM5082 685q0 43 -14 78.5t-39.5 61t-61 40t-78.5 14.5h-110v-387h110q43 0 78.5 14t61 39.5t39.5 61t14 78.5zM5656 354 q-71 0 -131 25.5t-104 70t-69 104.5t-25 129t24.5 130t68.5 106.5t106 71.5t136 26q45 0 82 -7t67.5 -20t55.5 -31.5t48 -40.5l-90 -103q-37 33 -76.5 52.5t-87.5 19.5q-41 0 -75 -16t-58.5 -43t-38.5 -63.5t-14 -77.5q0 -42 13.5 -79t38 -64.5t58.5 -43.5t76 -16 q55 0 92.5 20t75.5 54l90 -90q-25 -27 -51.5 -48t-58 -35.5t-69.5 -22.5t-84 -8z" />
+<glyph unicode="P" horiz-adv-x="1227" d="M843 679q-12 5 -12 17q0 3 2 7l3 4v81q-40 -9 -99 -14.5t-128 -5.5t-128 5.5t-97 14.5v-81l2 -4q1 -2 1 -6q0 -13 -11 -18q-4 -2 -7 -2q-12 0 -17 11q-5 12 -8.5 16.5t-4.5 5.5q-6 0 -10 -6t-6 -14.5t-2.5 -18.5t-0.5 -17q0 -22 5.5 -41t13 -33t16 -22.5t14.5 -8.5t10 -4 q6 -6 6 -14v-104q0 -14 6 -25.5t16 -20.5l145 -114q14 -13 36 -13h38q22 0 36 13q4 4 12 4q10 0 14 -7q4 -5 4 -12q0 -10 -7 -14q-26 -21 -59 -21h-38q-34 0 -59 21l-144 115q-36 28 -36 74v89q-13 6 -25 19.5t-21 32t-14.5 41t-5.5 45.5q0 48 13.5 67.5t30.5 23.5l-6 74 v200q-38 7 -71.5 29t-53.5 58q-12 20 -17.5 42t-5.5 45q0 46 23 87.5t66 65.5q40 22 87 22q35 0 63 -11q15 33 41.5 60.5t62.5 44.5q45 21 93 21q62 0 115.5 -32.5t81.5 -92.5q0 -1 0.5 -1.5t0.5 -1.5q34 14 67 14q46 0 87 -23.5t65 -65.5q24 -41 24 -87t-23 -87.5 t-66 -65.5q-30 -16 -64 -21v-200l-5 -74q13 -3 24 -14t16 -35v-5q0 -5 -2 -10.5t-10 -6.5q-10 0 -12.5 7.5t-3.5 8.5q-3 20 -24 20q-2 -1 -5 -5.5t-8 -16.5q-5 -11 -17 -11q-3 0 -7 2zM1219 -120q0 -28 -20 -47q-22 -22 -57 -22h-869q13 96 48 148t82 76t101 28t105 4 q39 0 74 10.5t60.5 29.5t40.5 43.5t15 53.5v66q43 -15 90.5 -32.5t91 -35.5t79.5 -36t58 -34q27 -20 45 -53t29.5 -69t17.5 -70.5t9 -55.5v-4zM489 98q-42 -6 -83 -21t-75.5 -47.5t-59.5 -85t-35 -133.5h-160q-34 0 -56 22q-20 18 -20 45v6q3 21 9 55.5t17.5 70.5t29.5 69 t44 53q22 16 58.5 34t80 36t90.5 35.5t91 32.5v-66q0 -32 18.5 -59.5t50.5 -46.5zM256 1218q11 39 45 58q22 13 47 13t47.5 -13t36.5 -36q0 -1 1 -1.5t1 -1.5q2 -12 5.5 -24t9.5 -23q2 -6 6.5 -8.5t9.5 -2.5q6 0 8 2q11 5 11 16q0 2 -2 8q-7 14 -10 29.5t-3 30.5 q0 40 21 74.5t59 52.5q27 13 59 13q22 0 48 -8q56 -20 80 -72q5 -11 17 -11q3 0 7 2q11 5 11 16q0 2 -2 8q-15 32 -41 55.5t-59 36.5q-27 10 -59 10q-40 0 -77 -17q-41 -20 -66 -54.5t-33 -76.5q-38 32 -86 32q-34 0 -65 -18q-48 -26 -62 -80q-2 -9 -3.5 -17.5t-1.5 -17.5 q0 -35 18 -65q5 -10 15 -10q4 0 10 2q9 7 9 16q0 4 -3 9q-12 22 -12 49q0 12 3 24zM922 606q0 -30 -23 -43q-3 -43 -20.5 -85.5t-46.5 -77t-67.5 -56.5t-84.5 -24q-10 -19 -33 -19h-53q-16 0 -27 11t-11 27q0 17 11 28t27 11h53q13 0 22.5 -7.5t13.5 -19.5q32 3 64 20 t58 44.5t43.5 64.5t20.5 81q-7 5 -8 17.5t-1 27.5q8 4 9.5 11.5t1.5 15.5t1.5 14t9.5 6q17 0 28.5 -13.5t11.5 -33.5zM774 466q-5 -34 -29 -56.5t-61 -22.5q-24 0 -44 9.5t-31 24.5q-11 -15 -31 -24.5t-43 -9.5q-37 0 -61 22.5t-30 56.5h14q20 -25 51 -25q28 0 44 25 q10 16 28 16q16 0 28 -12q12 12 29 12q19 0 29 -16q8 -13 19.5 -19t24.5 -6q14 0 27.5 6.5t23.5 18.5h12zM940 1077q32 19 49.5 50.5t17.5 66.5q0 17 -4 33t-13 31q-14 23 -34.5 39.5t-46.5 23.5q-9 2 -17.5 3.5t-17.5 1.5q-36 0 -66 -18q-9 -5 -9 -16q0 -5 3 -9q4 -9 16 -9 q6 0 9 2q23 13 46 13q7 0 13.5 -1t13.5 -3q36 -9 58 -45q12 -23 12 -46q0 -26 -13 -48t-36 -36q-8 -5 -8 -16q0 -6 2 -9q5 -10 16 -10q3 0 9 2zM713 -143q17 0 29 12t12 29t-12 28.5t-29 11.5t-29 -11.5t-12 -28.5t12 -29t29 -12zM487 -143q17 0 29 12t12 29t-12 28.5 t-29 11.5t-28.5 -11.5t-11.5 -28.5t11.5 -29t28.5 -12z" />
+<glyph unicode="Q" horiz-adv-x="1914" d="M1516 56q8 0 14.5 -6t6.5 -15t-6.5 -15t-14.5 -6h-813q-9 0 -15 6t-6 15t6 15t15 6h813zM1516 132q8 0 14.5 -6.5t6.5 -15.5q0 -8 -6.5 -14t-14.5 -6h-813q-9 0 -15 6t-6 14q0 9 6 15.5t15 6.5h813zM1516 1056q8 0 14.5 -6t6.5 -15v-843q0 -8 -6.5 -14.5t-14.5 -6.5h-813 q-20 0 -37.5 -7.5t-30.5 -20.5t-20.5 -30.5t-7.5 -36.5q0 -40 28 -68t68 -28h813q8 0 14.5 -6t6.5 -15t-6.5 -15t-14.5 -6h-813q-29 0 -54 10.5t-43.5 29.5t-29.5 44t-11 54v278q24 -30 60 -48.5t78 -18.5h679q24 0 41.5 17.5t17.5 41.5q0 11 -4 20t-10 17q6 8 10 18t4 21 t-4 20t-10 17q6 8 10 18t4 21q0 23 -17 40q8 8 12.5 18.5t4.5 22.5v477h75zM703 324q-29 0 -54 11t-43.5 29.5t-29.5 43.5t-11 54v754q0 28 11 53.5t29.5 44t43.5 29.5t54 11h679q9 0 15 -6t6 -15v-754q0 -9 -6 -15t-15 -6h-679q-40 0 -68 -28t-28 -68q0 -20 7.5 -37 t20.5 -30t30.5 -20.5t37.5 -7.5h679q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5h-679zM1382 443q9 0 15 -6t6 -15t-6 -15.5t-15 -6.5h-679q-9 0 -15 6.5t-6 15.5t6 15t15 6h679zM1382 519q9 0 15 -6.5t6 -14.5q0 -9 -6 -15.5t-15 -6.5h-679q-9 0 -15 6.5t-6 15.5q0 8 6 14.5t15 6.5 h679zM175 89q19 0 32 -13t13 -32v-108q-21 16 -45 16t-45 -16v108q0 19 13 32t32 13zM175 -97q19 0 32 -13t13 -32t-13 -32t-32 -13t-32 13t-13 32t13 32t32 13zM174 1478q40 0 72.5 -22t55 -56.5t34.5 -77t12 -84.5q0 -54 -9.5 -100t-24 -87t-31 -78.5t-31 -76.5t-24 -81 t-9.5 -90v-603q-21 16 -45 16t-45 -16v603q0 48 -9.5 90t-24 81t-31 76.5t-31 78.5t-24 86.5t-9.5 100.5q0 42 12 84.5t34.5 77t55 56.5t72.5 22zM174 992q25 0 47.5 18.5t39 51t26 75.5t9.5 92q0 40 -12 79t-32 66q-2 3 -7 3q-3 0 -4 -1q-5 -2 -5 -7q0 -3 1 -4 q11 -38 11 -77q0 -45 -8 -84.5t-22 -69.5t-32.5 -47.5t-39.5 -17.5q-19 0 -33 11.5t-23 23.5q-1 4 -7 4q-3 0 -4 -1q-5 -2 -5 -8q0 -2 1 -3q17 -49 43 -76.5t56 -27.5zM1866 989q-7 3 -13.5 5t-14.5 2t-14.5 -2t-13.5 -5l15 46q3 9 13 9t13 -9zM1838 869q-21 0 -39.5 -8.5 t-32.5 -22.5l31 96q5 12 16 19.5t25 7.5t25 -7.5t16 -18.5l31 -97q-14 14 -32.5 22.5t-39.5 8.5zM1838 164q30 0 51 -21t21 -50q0 -30 -21 -51.5t-51 -21.5t-51 21.5t-21 51.5q0 29 21 50t51 21zM1838 60q14 0 23 9.5t9 23.5q0 13 -9 22.5t-23 9.5t-23 -9.5t-9 -22.5 q0 -14 9 -23.5t23 -9.5zM1910 458q-19 20 -45 28v-201q26 -6 45 -27v-89q-14 14 -32 22.5t-40 8.5t-40 -8.5t-32 -22.5v593q0 30 21 51t51 21t51 -21t21 -51v-304z" />
+<glyph unicode="R" horiz-adv-x="1606" d="M185 1182h127v-37h-127v37zM185 843h127v-38h-127v38zM185 778h127v-37h-127v37zM784 670h-531v37h531v-37zM435 981v-36h-182v36h182zM1461 -16q30 0 56 -4t45.5 -11.5t30.5 -17.5t11 -21t-11 -20.5t-30.5 -17t-45.5 -11.5t-56 -4q-18 0 -40 0.5t-44.5 2t-44 4 t-39.5 7.5q-4 -44 -13.5 -72.5t-22.5 -28.5h-869q-13 0 -22.5 28.5t-13.5 72.5q-18 -5 -40 -7.5t-44.5 -4t-44.5 -2t-40 -0.5q-29 0 -55 4t-45.5 11.5t-30.5 17t-11 20.5t11 21t30.5 17.5t45.5 11.5t55 4q18 0 40 -1t44.5 -3t44.5 -5.5t40 -8.5q4 45 13.5 74.5t22.5 29.5 h869q13 0 22.5 -29.5t13.5 -74.5q18 5 39.5 8.5t44 5.5t44.5 3t40 1zM732 825q-61 54 -94 128t-33 155q0 71 24.5 136t71.5 118q57 63 131 94.5t153 31.5q68 0 133.5 -24t119.5 -72q61 -54 94 -128.5t33 -155.5q0 -108 -57 -200l240 -214q22 -20 22 -48q0 -24 -17 -44 q-19 -22 -50 -22q-26 0 -43 16l-239 214q-51 -41 -112 -61t-124 -20q-68 0 -133 23.5t-120 72.5zM782 1290q-34 -38 -51.5 -84.5t-17.5 -97.5q0 -58 23 -111t67 -92q39 -35 86 -52t96 -17q57 0 110 22.5t94 68.5q33 38 51 84t18 97q0 59 -23.5 112t-67.5 92q-39 35 -86 52 t-96 17q-57 0 -109.5 -23t-93.5 -68zM1069 245q9 0 9 -11v-38q0 -10 -9 -10h-908q-10 0 -10 10v38q0 11 10 11h908zM806 1078q-9 8 -13 18.5t-4 21.5q0 22 14 36q16 18 40 18q20 0 36 -14l93 -84l144 154q8 9 18 13t21 4q10 0 19.5 -3t17.5 -11q17 -16 17 -40 q0 -10 -3 -19.5t-11 -17.5l-180 -193q-15 -17 -40 -17q-19 0 -35 14zM310 365q35 0 63 11.5t49.5 32t37 47t25.5 56.5h-475q-10 0 -10 10v819q0 9 10 9h626q-25 -35 -42 -77h-516v-684h1068v126q20 8 39 18.5t38 22.5v-234q0 -10 -10 -10h-475q10 -30 26.5 -56.5t39 -46.5 t51.5 -32t64 -12h7h13t12.5 -0.5t6.5 -1.5l102 -70q4 -4 4 -11q-2 -7 -10 -7h-878q-9 0 -10 10q0 5 4 8l102 70q0 1 6 1.5t12.5 0.5h12.5h7zM580 981l6 -18t7 -18h-122v36h109zM564 1049l7 -37h-318v37h311zM560 1117v-9v-14t1 -14h-308v37h307zM253 911h356 q5 -11 10.5 -19.5t11.5 -17.5h-378v37z" />
+<glyph unicode="S" horiz-adv-x="1148" d="M437 704q8 -2 19.5 -13t26 -28.5t31.5 -38.5t37 -43l-16 82q-1 2 -1 7q0 13 10.5 24t26.5 11q10 0 22 -6q7 -5 14 -18.5t15 -33t17.5 -44t20.5 -50.5q-23 -23 -57 -23q-57 0 -101 21.5t-81 49.5l-29 52q-4 5 -4 15q0 13 9.5 25t28.5 12q7 0 11 -1zM1148 286v-496 l-323 177q-5 23 -8 45t-3 43q0 63 20.5 114.5t49 90.5t59.5 64t53 36zM893 322q-35 -34 -66.5 -85t-42.5 -118q-19 18 -49.5 38.5t-65.5 40t-70.5 36t-62.5 27.5q-21 8 -44.5 31t-48.5 53.5t-51 66t-52 68t-50.5 60t-46.5 42.5q-24 17 -34.5 33t-10.5 30t9 22t24 8 q30 0 56.5 -13t53.5 -32.5t55 -42.5t59.5 -42.5t68.5 -32.5t82 -13q21 0 36.5 7.5t29 21.5t26.5 33.5l29 43.5q23 35 43.5 56.5t39.5 21.5q13 0 24 -11q9 -8 12.5 -19.5t3.5 -25.5q0 -22 -6.5 -47.5t-15.5 -53.5l-4 -12q-3 -11 -3 -21q0 -18 9.5 -34.5t21.5 -35t24 -43 t17 -58.5zM367 740q-30 0 -56 12.5t-43 35.5h-71q-56 0 -106.5 22t-88.5 64q-2 4 -2 6t1 3q1 5 8 5h1006q7 0 9 -7q0 -3 -2 -7q-38 -42 -88.5 -64t-106.5 -22h-71q-17 -23 -42.5 -35.5t-55.5 -12.5h-291zM220 915q-11 0 -11 11v340q0 10 11 10h261q-11 9 -18 21.5t-7 27.5 q0 13 5.5 24.5t13.5 19.5q-4 20 -20.5 34t-38.5 14q-6 0 -10.5 4t-4.5 10t4.5 10.5t10.5 4.5q30 0 53.5 -17.5t31.5 -45.5q10 2 15 2q25 0 42.5 -17.5t17.5 -42.5q0 -15 -7 -27.5t-18 -21.5h254q10 0 10 -10v-340q0 -11 -10 -11h-585zM535 1363q-8 0 -13 -4.5t-5 -11.5 t5 -12t13 -5q7 0 11.5 5t4.5 12q0 16 -16 16zM230 1153v-114h26q2 9 12 9q9 0 11 -9h515v114h-506q0 -5 -3 -8.5t-8 -3.5t-8.5 3.5t-3.5 8.5h-35zM305 1117q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5t8.5 3.5q12 0 12 -12q0 -5 -3.5 -8.5t-8.5 -3.5zM302 1092q0 12 12 12 q5 0 8.5 -3.5t3.5 -8.5t-3.5 -8.5t-8.5 -3.5t-8.5 3.5t-3.5 8.5zM337 1054q-6 0 -6 6t6 6t6 -6t-6 -6zM389 1084q-6 0 -6 6q0 7 6 7t6 -7q0 -6 -6 -6zM410 1130q-6 0 -6 6t6 6t6 -6t-6 -6zM265 1102q-6 0 -6 6t6 6q7 0 7 -6t-7 -6zM483 1071q-6 0 -6 7q0 6 6 6t6 -6 q0 -7 -6 -7zM536 1115q-6 0 -6 6q0 7 6 7t6 -7q0 -6 -6 -6zM632 1087q-7 0 -7 6t7 6q6 0 6 -6t-6 -6zM606 1058q-6 0 -6 6t6 6t6 -6t-6 -6zM367 1115q-12 0 -12 12q0 5 3.5 8.5t8.5 3.5t8.5 -3.5t3.5 -8.5t-3.5 -8.5t-8.5 -3.5zM425 1047q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5 t8.5 3.5q12 0 12 -12q0 -5 -3.5 -8.5t-8.5 -3.5zM438 1108q-5 0 -8.5 3.5t-3.5 8.5t3.5 8.5t8.5 3.5t8.5 -3.5t3.5 -8.5q0 -12 -12 -12z" />
+<glyph unicode="T" horiz-adv-x="1627" d="M1622 136q0 -28 -5 -64.5t-18.5 -74.5t-37 -75t-60.5 -66t-88.5 -46.5t-120.5 -17.5q-63 0 -113 18t-90 49t-72 72t-59 87q-91 -25 -196 -25q-112 0 -212 30t-185 82t-152.5 123.5t-114.5 153.5t-72.5 172t-25.5 180t25.5 180t72.5 172.5t114.5 153.5t152.5 123.5 t185 82.5t212 30t212.5 -30t185.5 -82.5t152.5 -123.5t114.5 -153.5t72.5 -172.5t25.5 -180q0 -80 -20 -160.5t-58.5 -156t-93.5 -143t-124 -121.5q38 -52 80.5 -87t86.5 -35q37 0 59.5 15.5t35 34.5t17 36t4.5 19h110zM762 151q63 0 116 15q-26 48 -52.5 91.5t-58 76 t-70 52t-87.5 19.5q-13 0 -22 -1.5t-16 -3.5q-8 -3 -13 -5l-40 89q24 20 59 36q30 14 75 25.5t107 11.5q108 0 197.5 -50.5t143.5 -144.5q35 75 51.5 169t16.5 203q0 127 -22.5 234t-71.5 184.5t-126.5 121t-186.5 43.5t-186 -43.5t-126 -121t-71.5 -184.5t-22.5 -234 t22.5 -234t71.5 -184.5t126 -121t186 -43.5z" />
+<glyph unicode="U" horiz-adv-x="1432" d="M1432 -75q0 -31 -22 -53t-54 -22h-1281q-31 0 -53 22t-22 53v628q0 11 5 26l3 5q2 6 3 7l640 1068q11 17 28 27t37 10t37 -10t27 -27l637 -1061l7 -14l2 -3q6 -14 6 -29v-627zM1281 477h-1130v-156h1130v156zM811 1243q0 8 -7 12q-6 8 -16 8h-145q-8 0 -16 -8 q-4 -2 -5 -6.5t-1 -6.5l11 -303q0 -6 6.5 -10.5t15.5 -4.5h123q8 0 14.5 4.5t7.5 10.5zM801 818q0 8 -6.5 14.5t-15.5 6.5h-127q-9 0 -15 -6.5t-6 -14.5v-126q0 -9 6 -15.5t15 -6.5h127q9 0 15.5 6.5t6.5 15.5v126zM1281 1v156h-1130v-156h1130z" />
+<glyph unicode="V" horiz-adv-x="1703" d="M1658 1322q45 -80 45 -168q0 -90 -44.5 -169.5t-128.5 -127.5q-58 -33 -123 -42v-522q0 -21 -44 -40t-119.5 -33.5t-177.5 -22.5t-218 -8t-218 8t-178 22.5t-120 33.5t-44 40v524q-75 11 -139 54t-104 114q-23 40 -34 82.5t-11 85.5q0 90 44.5 169.5t128.5 127.5 q40 23 82.5 33.5t85.5 10.5q65 0 122 -22q31 65 82 118t121 86q44 21 89.5 31t91.5 10q60 0 117 -16.5t107 -47.5t91 -76.5t68 -102.5q1 -2 1 -3t1 -2q62 25 129 25q90 0 169.5 -44t127.5 -128zM1407 143v-167q0 -21 -44 -40t-119.5 -33.5t-177.5 -22.5t-218 -8t-218 8 t-178 22.5t-120 33.5t-44 40v167q0 -21 44 -40t120 -33.5t178 -22.5t218 -8t218 8t177.5 22.5t119.5 33.5t44 40z" />
+<glyph unicode="W" horiz-adv-x="2086" d="M1970 461q46 -34 75.5 -75t40.5 -82l-47 -70q-4 0 -8 -0.5t-8 -0.5q-38 0 -80.5 15.5t-84.5 45.5q-32 23 -57 51.5t-40 57.5q-39 -51 -90 -109t-112 -119q-65 -65 -127 -119t-115.5 -93t-94.5 -61t-64 -22q-12 0 -18 6l-91 91q6 -6 18 -6q23 0 64 22t94.5 61t115.5 93 t127 119t119.5 127.5t93.5 116t61 94.5t22 64q0 12 -6 18l91 -91q6 -6 6 -18q0 -19 -19 -59q32 -5 66.5 -19t67.5 -38zM1661 783q6 -6 6 -18q0 -23 -22 -64t-61 -94.5t-93.5 -116t-119.5 -127.5t-127 -119t-115.5 -93t-94.5 -61t-64 -22q-12 0 -18 6l-67 66l-748 748 q-69 69 -103 154.5t-34 175.5t34 175.5t103 154.5t154 102.5t175 33.5t175.5 -33.5t154.5 -102.5q10 -10 19.5 -20.5t18.5 -21.5q3 41 20 79t49 70q35 35 79 52.5t91 17.5q46 0 90.5 -17.5t79.5 -52.5q26 -26 41.5 -56t23.5 -62l166 -569zM956 965l208 207l-94 94l-208 -207 l-207 207l-94 -94l208 -207l-208 -208l94 -93l207 207l208 -207l94 93z" />
+<glyph unicode="X" horiz-adv-x="1497" d="M1459 1688q15 0 26.5 -11t11.5 -27v-1345q0 -16 -11.5 -27t-26.5 -11h-1212q-35 0 -66.5 -13.5t-54.5 -36.5t-36.5 -54t-13.5 -66q0 -36 13.5 -67t36.5 -54t54.5 -36.5t66.5 -13.5h1212q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-51 0 -96 19.5t-78.5 53 t-53 78.5t-19.5 96v1344q0 51 19.5 96t53 78.5t78.5 53t96 19.5h1212zM1459 61q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-16 0 -27 11t-11 27t11 27t27 11h1212zM1459 197q15 0 26.5 -11t11.5 -27t-11.5 -27t-26.5 -11h-1212q-16 0 -27 11t-11 27t11 27t27 11 h1212z" />
+<glyph unicode="Y" horiz-adv-x="1797" d="M1402 933q-33 -39 -78 -59t-93 -20q-42 0 -81 15l-184 -235l534 -600q13 -15 19 -33t6 -36q0 -23 -9.5 -44.5t-28.5 -38.5q-31 -25 -70 -25q-23 0 -45 9.5t-37 29.5l-476 601l-473 -604q-17 -20 -40 -30.5t-48 -10.5q-20 0 -39 6.5t-36 20.5q-20 17 -31 41t-11 49 q0 20 7 38.5t21 34.5l537 598l-210 266q-30 -8 -60 -8q-39 0 -80.5 12t-83 34.5t-82 55.5t-76.5 76q-34 40 -61 85.5t-46 92.5t-29.5 93t-10.5 88q0 46 13 83.5t42 61.5q41 34 105 34q44 0 94 -15.5t99.5 -44t96.5 -67.5t86 -85q61 -73 92 -151.5t31 -148.5q0 -29 -9 -55.5 t-13 -49.5l210 -237l183 203q-32 55 -32 116q0 38 13 74.5t39 68.5l383 457q8 10 19.5 14.5t23.5 4.5q18 0 35 -12q19 -17 19 -42q0 -19 -13 -35l-243 -290l47 -39l243 290q15 19 41 19q22 0 36 -13q10 -8 14.5 -19t4.5 -22q0 -9 -3 -18t-10 -17l-243 -290l47 -40l243 290 q17 20 42 20q9 0 18 -3t17 -10q19 -16 19 -42q0 -20 -12 -35l-383 -457v0z" />
+<glyph unicode="Z" horiz-adv-x="1837" d="M391 1574q-14 0 -24.5 10t-10.5 24t10.5 24.5t24.5 10.5q36 0 68.5 -11.5t59.5 -31.5t47 -47.5t30 -60.5q18 5 36 5q30 0 56 -11.5t45.5 -31t31 -46t11.5 -56.5t-11.5 -56t-31 -45.5t-45.5 -31t-56 -11.5t-56.5 11.5t-46 31t-31 45.5t-11.5 56q0 32 12.5 59t33.5 47 q-5 25 -18 46t-31.5 36.5t-42.5 24.5t-50 9zM676 1445q-17 0 -29 -11.5t-12 -28.5t12 -28.5t29 -11.5t28.5 11.5t11.5 28.5t-11.5 28.5t-28.5 11.5zM1639 256q5 0 10.5 0.5t10.5 1.5l29 -341q0 -20 -16 -30q-10 -7 -22 -7q-9 0 -17 4l-236 116l-237 -116q-7 -4 -17 -4 q-13 0 -21 7q-17 9 -17 35l29 336q5 -1 11 -1.5t12 -0.5q12 0 26 3l72 17l48 -56q18 -20 42.5 -31t51.5 -11t51.5 11t41.5 31l49 56l72 -17q13 -3 27 -3zM1398 949q49 0 92 -18.5t75 -50.5t50.5 -75t18.5 -92t-18.5 -92t-50.5 -75t-75 -50.5t-92 -18.5t-92 18.5t-75 50.5 t-50.5 75t-18.5 92t18.5 92t50.5 75t75 50.5t92 18.5zM1830 610q6 -11 6 -24q0 -10 -2 -15q-6 -21 -27 -29l-110 -47l-10 -119q-2 -22 -20 -34q-12 -9 -28 -9q-7 0 -11 1l-116 26l-78 -90q-14 -16 -36 -16t-36 16l-79 90l-116 -26q-4 -1 -11 -1q-16 0 -28 9q-17 13 -19 34 l-11 119l-110 47q-20 8 -26 29q-3 7 -3 15q0 12 7 24l61 103l-61 102q-7 12 -7 24q0 8 3 16q6 19 26 29l110 46l11 119q2 22 19 35q12 9 28 9q7 0 11 -1l116 -27l79 90q14 16 36 16t36 -16l78 -90l116 27q4 1 11 1q16 0 28 -9q18 -12 20 -35l10 -119l110 -46q21 -10 27 -29 q2 -4 2 -8v-8q0 -14 -6 -24l-62 -102zM1398 414q61 0 115.5 23.5t95 64t64 95t23.5 116.5q0 61 -23.5 115.5t-64 95t-95 64t-115.5 23.5q-62 0 -116.5 -23.5t-95 -64t-64 -95t-23.5 -115.5q0 -62 23.5 -116.5t64 -95t95 -64t116.5 -23.5zM1038 374q2 -21 11 -40t24 -34 l-6 -69q-90 -27 -201.5 -41t-228.5 -14q-82 0 -162.5 7t-153 20.5t-134 34t-104.5 47.5v-138q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q137 0 240.5 16t173.5 39l-7 -89q-88 -24 -193 -36.5t-214 -12.5q-119 0 -233 14.5t-204 43t-145 71.5t-55 99v959q0 43 33 77.5 t89.5 61.5t132.5 45.5t162 29.5q6 -40 25 -74t48 -59.5t66 -40t78 -14.5t78 14.5t66 40t48 60t25 74.5q75 -9 143 -24t122.5 -36.5t93 -49t54.5 -60.5l-6 -8l-71 17q-14 3 -27 3q-40 0 -72 -23q-22 -16 -35 -39.5t-15 -49.5l-7 -72l-67 -29q-71 -14 -153.5 -22t-173.5 -8 q-95 0 -181 8.5t-158 24.5t-127 37t-88 47v-188q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q88 0 162 7.5t136 18.5l10 -17l-37 -63q-18 -29 -18 -63q0 -19 6 -37l2 -4q-63 -10 -128.5 -14.5t-132.5 -4.5q-82 0 -162.5 7t-153 20.5t-134 34t-104.5 47.5v-138 q0 -18 36 -43t106.5 -47.5t174 -38.5t237.5 -16q129 0 228.5 14.5t169.5 35.5z" />
+<glyph unicode="a" horiz-adv-x="2931" d="M1335 191q-45 -6 -89 -22.5t-81.5 -51t-64.5 -92t-38 -144.5h-173q-36 0 -61 23q-21 19 -21 48v7q2 19 6.5 46t12.5 57h-585q11 84 42 130t72.5 67t89.5 24.5t93 3.5q34 0 64.5 9.5t53.5 26t36 39t13 47.5v57q38 -13 79.5 -28.5t80 -31t70.5 -31.5t51 -30 q14 -10 25 -24.5t20 -31.5q53 23 113 45.5t117 42.5v-71q0 -35 20 -64.5t54 -50.5zM430 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM629 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5 t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM1527 589q17 -27 48 -27q15 0 29.5 6.5t25.5 20.5h14q-6 -37 -32 -61t-66 -24q-26 0 -47.5 10t-32.5 27q-12 -17 -33.5 -27t-47.5 -10q-40 0 -66 24t-31 61h13q11 -14 25.5 -20.5t29.5 -6.5q14 0 27 6.5t21 20.5q5 9 13.5 13t17.5 4 q18 0 31 -13q13 13 31 13q20 0 30 -17zM1154 1188q-42 7 -77 30.5t-58 62.5q-25 44 -25 94t25 94.5t71 70.5q22 13 46 19t48 6q17 0 34 -3.5t34 -9.5q17 37 45.5 66.5t67.5 47.5q24 11 49.5 16.5t50.5 5.5q67 0 125.5 -36t89.5 -101q17 8 35.5 11t36.5 3q50 0 94.5 -24.5 t70.5 -71.5q13 -23 18.5 -46t5.5 -47q0 -50 -24.5 -95t-71.5 -71q-32 -18 -68 -23v-213l-6 -83q18 -5 33 -25.5t15 -73.5q0 -25 -6 -49t-15.5 -44t-22.5 -35t-27 -21v-96q0 -23 -10.5 -44.5t-28.5 -35.5l-157 -125q-28 -22 -64 -22h-45q-36 0 -64 22l-157 125 q-18 14 -28 35.5t-10 44.5v96q-14 6 -27 21t-23 35t-15.5 44t-5.5 49q0 53 14.5 73.5t32.5 25.5l-6 83v214zM1779 792q0 9 -1 19.5t-3 19.5t-6 15.5t-11 6.5q-2 -1 -5.5 -5.5t-8.5 -17.5q-5 -12 -19 -12q-5 0 -7 1q-12 7 -12 18q0 3 2 9q0 1 3 3v89q-43 -10 -106.5 -16 t-138.5 -6t-138.5 6t-105.5 16v-89l2 -3q1 -3 1 -8q0 -13 -12 -19q-2 -1 -7 -1q-13 0 -19 12q-5 13 -8.5 17.5t-5.5 5.5q-7 0 -11 -6.5t-6.5 -15.5t-3 -19.5t-0.5 -19.5q0 -17 5.5 -36.5t13 -36.5t15.5 -28.5t13 -11.5q2 0 3 1q9 0 15 -6q6 -5 6 -14v-113q0 -30 24 -49 l157 -124q17 -14 39 -14h45q21 0 40 14l156 124q24 19 24 49v113q0 9 6 14q5 5 13 5h4q4 1 12.5 9.5t16 23.5t13.5 35.5t6 44.5zM1681 1500q-10 -6 -10 -18q0 -6 2 -9q6 -10 18 -10q6 0 9 2q25 14 52 14q7 0 13.5 -1t13.5 -3q42 -11 63 -49q13 -23 13 -51q0 -27 -13 -51.5 t-39 -38.5q-10 -4 -10 -16q0 -7 3 -11q5 -10 17 -10q5 0 10 3q35 20 53.5 53t18.5 71q0 18 -4.5 36t-14.5 35q-14 25 -36 42t-50 25q-20 6 -39 6q-37 0 -70 -19zM1045 1413q-5 -20 -5 -38q0 -37 19 -71q7 -10 17 -10q5 0 10 3q10 4 10 17q0 7 -2 10q-14 25 -14 51q0 16 4 28 q5 20 17.5 36t31.5 26q25 14 51 14q27 0 51.5 -13.5t38.5 -39.5l2 -3q2 -13 6 -26t10 -26q6 -11 18 -11q4 0 8 2q12 6 12 17q0 3 -2 9q-15 31 -15 65q0 43 23 80.5t65 56.5q30 15 64 15q26 0 52 -9q29 -11 50.5 -31t35.5 -47q5 -12 18 -12q2 0 8 2q12 7 12 19q0 2 -2 8 q-17 35 -45 60t-64 38q-16 6 -32 8.5t-33 2.5q-42 0 -81 -18q-45 -21 -72.5 -59t-35.5 -83q-40 34 -93 34q-37 0 -70 -18q-26 -14 -43 -36.5t-25 -50.5zM431 315q-37 -5 -73 -18.5t-66.5 -42t-52.5 -75t-31 -117.5h-141q-29 0 -50 19q-17 17 -17 39v6q2 19 7.5 49.5t16 62.5 t26.5 61t39 46q19 14 51 30t70.5 31.5t80 31t79.5 28.5v-57q0 -29 16.5 -53t44.5 -41zM284 1128q-34 5 -63.5 24.5t-47.5 51.5q-11 18 -15.5 37.5t-4.5 39.5q0 41 20 77t58 57q18 11 37 15.5t39 4.5q30 0 56 -10q14 30 37 54t55 39q39 18 82 18q55 0 103 -29t72 -83 q28 12 59 12q41 0 76.5 -20.5t57.5 -58.5q21 -36 21 -77t-20.5 -77t-58.5 -57q-24 -14 -55 -19v-174l-5 -67q14 -4 26.5 -21t12.5 -60q0 -20 -4.5 -39.5t-12.5 -36t-18.5 -28.5t-22.5 -17v-79q0 -39 -32 -65l-128 -102q-23 -18 -52 -18h-37q-14 0 -27.5 5t-24.5 13l-128 102 q-32 26 -32 65v79q-12 5 -22.5 17t-18.5 28.5t-12.5 36t-4.5 39.5q0 43 12.5 60t27.5 21l-5 67v175zM793 805q0 14 -3 31.5t-14 18.5q-1 -1 -4 -5t-7 -14q-5 -10 -16 -10q-4 0 -6 1q-10 5 -10 15q0 3 2 7q0 1 3 3v72q-35 -8 -87 -13t-113 -5q-62 0 -113.5 5t-85.5 13v-72 q0 -1 0.5 -1.5t0.5 -1.5q2 -4 2 -7q0 -10 -10 -15q-2 -1 -6 -1q-11 0 -16 10q-5 11 -7.5 14.5t-3.5 4.5q-11 -1 -14 -18.5t-3 -31.5q0 -7 3 -21.5t8 -30t13 -27.5t19 -13q4 0 10 -4q5 -5 5 -12v-92q0 -24 19 -40l128 -101q14 -11 32 -11h37q18 0 32 11l128 101q19 16 19 40 v92q0 7 5 12q6 4 14 4q4 0 10.5 7.5t13 19.5t11 28.5t4.5 36.5zM713 1382q-8 -5 -8 -14q0 -2 2 -8q5 -8 14 -8q4 0 8 2q18 11 40 11q12 0 24 -3q34 -9 51 -39q6 -10 8.5 -20.5t2.5 -21.5q0 -23 -11 -43t-31 -31q-8 -5 -8 -14q0 -5 2 -8q5 -8 14 -8q2 0 8 2q29 17 44 44 t15 58t-15 58q-24 41 -71 55q-13 4 -30 4q-15 0 -30 -4t-29 -12zM195 1312q-4 -15 -4 -32q0 -32 15 -57q5 -8 14 -8q5 0 8 2q8 5 8 14q0 2 -2 8q-11 20 -11 42q0 11 3 22q9 34 40 51q10 6 20.5 8.5t21.5 2.5q22 0 42 -11t31 -31l2 -3q2 -11 5 -21.5t8 -20.5t15 -10q2 0 6 2 q10 5 10 14q0 2 -2 8q-12 25 -12 52q0 35 19 65.5t53 46.5q25 12 53 12q23 0 41 -7q48 -17 70 -64q2 -5 6.5 -7t9.5 -2q4 0 6 1q5 2 7 6.5t2 9.5q0 4 -1 6q-14 29 -37 49t-52 31q-26 9 -53 9q-35 0 -66 -15q-36 -17 -59 -47.5t-29 -67.5q-33 28 -75 28q-32 0 -58 -16 q-20 -11 -34.5 -29t-20.5 -41zM2931 120q0 -11 -4.5 -21t-12.5 -18q-21 -19 -50 -19h-758q8 -30 12 -57t6 -46v-7q0 -29 -21 -48q-11 -11 -27.5 -17t-33.5 -6h-940q13 103 51 159.5t89 82t109.5 30t114.5 4.5q42 0 79.5 11.5t65.5 32t44 47.5t16 58v71q56 -20 116 -42.5 t114 -45.5q8 17 19 31.5t25 24.5q20 14 52 29.5t70 32.5q-23 6 -39.5 18t-27.5 23q-12 13 -21 28q28 9 51 27q19 16 35 42.5t16 71.5q0 17 -3 38q-5 26 -6.5 48.5t-1.5 42.5q0 43 7.5 76t18 58t23 43t21.5 30v175q-34 5 -63.5 24.5t-47.5 51.5q-11 18 -15.5 37.5t-4.5 39.5 q0 41 20 77t58 57q18 11 37 15.5t39 4.5q30 0 56 -10q14 30 37.5 54t55.5 39q19 9 39 13t41 4q27 0 54 -7.5t50.5 -21.5t42 -34.5t29.5 -47.5q28 12 59 12q41 0 77 -20.5t58 -58.5q11 -18 15.5 -37t4.5 -39q0 -41 -20 -77.5t-58 -57.5q-26 -14 -56 -19v-174q9 -12 21 -30 t23 -43.5t18.5 -59t7.5 -76.5q0 -20 -1.5 -42t-6.5 -47q-2 -11 -3 -21t-1 -19q0 -44 15.5 -71t35.5 -42q22 -18 51 -26q-9 -15 -21 -28q-11 -11 -27 -23t-39 -18q38 -17 70 -32.5t52 -29.5q23 -17 39 -46t26 -61t15.5 -62.5t7.5 -49.5v-6zM1334 -69q18 0 31 12.5t13 31.5 q0 18 -13 31t-31 13q-19 0 -31.5 -13t-12.5 -31q0 -19 12.5 -31.5t31.5 -12.5zM1578 -69q18 0 31 12.5t13 31.5q0 18 -13 31t-31 13q-19 0 -32 -13t-13 -31q0 -19 13 -31.5t32 -12.5zM2196 639q3 -24 10.5 -49.5t24.5 -39.5q25 -25 53 -44q23 -17 53 -30t59 -13 q28 0 56.5 13t51.5 30q26 19 51 44q12 11 19 28t11 36t5 36.5t1 29.5v17q0 7 6 12q4 4 13 4q4 0 10.5 7.5t13 19.5t11 28.5t4.5 36.5q0 14 -3 31.5t-14 18.5q-1 -1 -3.5 -4.5t-7.5 -14.5q-5 -10 -16 -10q-4 0 -6 1q-10 5 -10 15q0 3 2 7q0 1 3 3v72q-35 -8 -87 -13t-113 -5 q-62 0 -113.5 5t-85.5 13v-72q0 -1 0.5 -1.5t0.5 -1.5q2 -4 2 -7q0 -10 -10 -15q-2 -1 -6 -1q-12 0 -15 10q-5 11 -7.5 14.5t-4.5 4.5q-11 -1 -14 -18.5t-3 -31.5q0 -7 3 -21.5t8 -30t13 -27.5t19 -13q6 0 10 -4q5 -5 5 -12v-58zM2569 1382q-8 -5 -8 -14q0 -2 2 -8 q5 -8 15 -8q3 0 7 2q18 11 41 11q12 0 24 -3q32 -9 51 -39q11 -20 11 -42q0 -23 -11 -42.5t-32 -31.5q-8 -5 -8 -14q0 -5 2 -8q5 -8 14 -8q2 0 8 2q29 17 44 44t15 58t-15 58q-24 41 -71 55q-13 4 -30 4q-15 0 -30 -4t-29 -12zM2122 1354q10 6 20.5 8.5t21.5 2.5 q22 0 42 -11t31 -31l2 -3q3 -20 13 -42q5 -10 15 -10q3 0 7 2q9 4 9 14q0 2 -2 8q-12 25 -12 52q0 35 19 65.5t53 46.5q25 12 53 12q23 0 41 -7q48 -17 70 -64q2 -5 6.5 -7t9.5 -2q4 0 6 1q10 5 10 15q0 3 -2 7q-28 59 -89 80q-26 9 -53 9q-35 0 -66 -15 q-36 -17 -58.5 -47.5t-29.5 -67.5q-33 28 -75 28q-32 0 -58 -16q-20 -11 -34.5 -29t-20.5 -41q-2 -8 -3 -15.5t-1 -15.5q0 -31 15 -58q5 -8 14 -8q6 0 8 2q8 5 8 14q0 5 -2 8q-11 20 -11 42q0 11 3 22q9 34 40 51zM2286 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5 t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM2485 102q15 0 25.5 10.5t10.5 25.5t-10.5 25.5t-25.5 10.5t-25.5 -10.5t-10.5 -25.5t10.5 -25.5t25.5 -10.5zM2561 507q-15 -12 -34.5 -26t-41.5 -26t-45 -20t-44 -8q-22 0 -45 8t-45.5 19.5t-43 25.5t-35.5 26v-97 q0 -29 16 -53t45 -41q-32 -4 -62.5 -14t-58 -30.5t-50 -52t-37.5 -79.5q6 -14 10.5 -28.5t9.5 -28.5q13 77 44.5 118.5t72 61t87 22.5t90.5 3q34 0 64.5 9.5t53.5 26t36 39t13 47.5v98z" />
+<glyph unicode="b" horiz-adv-x="1424" d="M233 477v-143l411 -137l412 137v143l-412 -136zM430 1110q47 0 82 -29t44 -74q-19 -17 -30 -41t-11 -52q0 -27 10 -50t27.5 -40.5t40.5 -27.5t50 -10t50 10t40.5 27.5t27.5 40.5t10 50q0 26 -10 49.5t-27.5 41t-40.5 27.5t-50 10q-15 0 -32 -5q-9 29 -26.5 53.5t-41 42.5 t-52.5 28t-61 10q-13 0 -22 -9t-9 -22t9 -21.5t22 -8.5zM682 996q15 0 25.5 -10.5t10.5 -25.5t-10.5 -25.5t-25.5 -10.5q-14 0 -25 10.5t-11 25.5t11 25.5t25 10.5zM812 845q-20 -51 -65.5 -82.5t-103.5 -31.5q-57 0 -103 31.5t-66 81.5l-241 -80v-143l411 -137l412 137v143 zM414 1612v-181q0 -29 -19.5 -49t-48.5 -20t-49 20t-20 49v181q0 29 20 48.5t49 19.5t48.5 -19.5t19.5 -48.5zM931 1680q-29 0 -49 -19.5t-20 -48.5v-181q0 -29 20 -49t49 -20t48.5 20t19.5 49v181q0 29 -19.5 48.5t-48.5 19.5zM1161 1477h-103v-46q0 -26 -10 -49.5 t-27.5 -40.5t-40.5 -27t-49 -10t-49.5 10t-40.5 27t-27 40.5t-10 49.5v46h-331v-46q0 -26 -10 -49.5t-27.5 -40.5t-40.5 -27t-49 -10t-49.5 10t-40.5 27t-27 40.5t-10 49.5v46h-103q-24 0 -45 -9t-37 -24.5t-25 -37t-9 -45.5v-1228q0 -24 9 -45t25 -37t37 -25t45 -9h1045 q24 0 45 9t37 25t25 37t9 45v1228q0 24 -9 45.5t-25 37t-37 24.5t-45 9zM1189 133q0 -12 -8.5 -20t-19.5 -8h-1045q-11 0 -19.5 8t-8.5 20v880h398l3 5q-10 15 -25.5 24t-33.5 9q-38 0 -64 26t-26 63t26 63.5t64 26.5q69 0 127.5 -35t90.5 -95q48 -2 88 -25.5t65 -61.5h388 v-880zM1350 1361v-1228q0 -39 -15 -73.5t-40.5 -60.5t-60 -41t-73.5 -15h-1045q0 -30 21.5 -51.5t52.5 -21.5h971q54 0 102 20.5t84 56.5t56.5 84t20.5 102v1155q0 30 -21.5 51.5t-52.5 21.5z" />
+<glyph unicode="c" horiz-adv-x="1643" d="M1693 789q12 0 20.5 -8.5t8.5 -20.5q0 -11 -7 -20t-20 -9h-2l-277 10q-5 -17 -19.5 -27.5t-33.5 -10.5h-143q-13 0 -13 14t13 14h89v15h-89q-13 0 -13 14q0 13 13 13h89v16h-89q-13 0 -13 13q0 14 13 14h143q19 0 33.5 -10.5t19.5 -27.5zM359 703q-19 0 -33 10.5 t-20 27.5l-277 -10q-12 0 -20.5 8.5t-8.5 20.5q0 11 7 20t20 9h2l277 -11q6 17 20 27.5t33 10.5h143q13 0 13 -14q0 -13 -13 -13h-88v-16h87q14 0 14 -13q0 -14 -13 -14h-88v-15h87q14 0 14 -14t-14 -14h-142zM1136 956q-4 -4 -10 -4t-9 4q-4 4 -4 10t4 10l62 62l-10 11 l-63 -63q-4 -4 -10 -4t-9 4q-4 4 -4 10t4 10l62 62l-11 11l-62 -62q-5 -5 -10 -5q-6 0 -9 5q-5 3 -5 9q0 5 5 10l101 101q16 16 40 16q14 0 24 -5l188 203q10 8 21 8q10 0 20 -8q9 -9 9 -21q0 -13 -9 -20l-203 -189q6 -12 6 -25q0 -22 -17 -39zM584 1079l-11 -11l62 -62 q4 -4 4 -10t-4 -10t-10 -4t-9 4l-62 63l-11 -11l62 -62q4 -6 4 -10t-4 -10q-4 -4 -10 -4t-9 4l-101 101q-17 17 -17 39q0 13 6 25l-203 189q-8 7 -8 20t8 21t20 8q11 0 21 -8l188 -203q10 5 24 5q24 0 40 -16l101 -101q4 -6 4 -10q0 -5 -4 -9q-5 -5 -10 -5q-6 0 -9 5z M568 424q4 4 9 4q4 0 10 -4q4 -6 4 -10t-4 -10l-101 -100q-17 -17 -39 -17q-13 0 -25 6l-189 -203q-9 -9 -20 -9q-12 0 -21 9q-8 7 -8 20t8 21l204 188q-6 12 -6 25q0 23 16 39l101 101q6 4 10 4t10 -4q4 -6 4 -10q0 -5 -4 -9l-63 -63l11 -10l62 62q6 4 10 4t10 -4 q4 -6 4 -10q0 -5 -4 -9l-62 -63l10 -10zM1530 131q8 -10 8 -21q0 -12 -8 -20q-9 -9 -21 -9q-13 0 -20 9l-189 203q-10 -5 -24 -5q-11 0 -21.5 4t-18.5 12l-101 100q-4 4 -4 10t4 10q6 4 10 4t10 -4l62 -62l11 10l-63 63q-4 3 -4 9t4 10q6 4 10 4t10 -4l62 -62l11 10l-63 63 q-4 3 -4 9t4 10q6 4 10 4t10 -4l101 -101q16 -16 16 -40q0 -14 -5 -24zM904 358q13 0 13 -14v-142q0 -19 -10 -33t-27 -20l10 -277q0 -12 -8.5 -20.5t-20.5 -8.5q-11 0 -20 7t-9 20v2l10 277q-16 6 -26.5 20t-10.5 33v143q0 13 13 13q14 0 14 -13v-88h15v87q0 14 14 14 t14 -13v-88h15v87q0 14 14 14zM818 1143q-13 0 -13 14v143q0 18 10.5 32.5t26.5 20.5l-10 277q0 12 8.5 20.5t20.5 8.5q11 0 20 -7t9 -20v-2l-10 -277q17 -6 27 -20.5t10 -32.5v-143q0 -14 -13 -14q-14 0 -14 14v88h-15v-88q0 -14 -14 -14t-14 14v88h-15v-88q0 -14 -14 -14z M1071 699q3 -6 3 -10v-219q0 -15 -15 -15h-396q-6 0 -10.5 4t-4.5 11v222q0 2 2 4l118 210q16 -3 24 -18l-104 -184h347l-170 313l-35 -61q-12 10 -25 16l47 83q3 7 13 7q9 0 13 -7zM1044 548h-366v-64h366v64zM1044 674h-366v-63h366v63zM757 931q-6 0 -10.5 4t-4.5 11 q0 6 4.5 10.5t10.5 4.5q31 0 55.5 -18.5t32.5 -47.5q5 2 16 2q26 0 44 -18t18 -44t-18 -44t-44 -18t-44 18t-18 44q0 27 19 46q-5 21 -21.5 35.5t-39.5 14.5zM880 875q-8 0 -13 -5t-5 -12q0 -8 5 -13t13 -5q7 0 12 5t5 13q0 7 -5 12t-12 5z" />
+<glyph unicode="d" horiz-adv-x="1640" d="M816 59q112 0 210 8t171 21.5t115.5 31.5t42.5 39v-118q0 -21 -42.5 -39t-115.5 -31.5t-171 -21.5t-210 -8q-111 0 -209 8t-171 21.5t-115.5 31.5t-42.5 39v118q0 -21 42.5 -39t115.5 -31.5t171 -21.5t209 -8zM1597 1337q43 -76 43 -161q0 -43 -11 -84.5t-32.5 -79 t-52.5 -69t-71 -54.5q-28 -16 -58 -25.5t-60 -13.5v-599q0 -21 -42.5 -39t-115.5 -31.5t-171 -21.5t-210 -8q-111 0 -209 8t-171 21.5t-115.5 31.5t-42.5 39v599q-72 11 -134.5 52.5t-100.5 110.5q-22 38 -32.5 79t-10.5 83q0 43 11 84.5t32 78.5t52 68t71 54q38 22 79 32.5 t83 10.5q60 0 118 -22q29 63 78.5 114t117.5 83q84 39 173 39q57 0 112 -16t103.5 -46t88 -73.5t65.5 -98.5q2 -2 2 -5q60 25 125 25q43 0 84.5 -11t78.5 -32t68.5 -52t54.5 -71zM837 502h-117v-146h117v146zM1057 847q8 27 8 60q0 54 -20 94q-10 20 -22.5 36t-27.5 29 q-33 27 -71 38q-41 11 -79 11q-36 0 -69 -9t-63 -26q-14 -9 -27.5 -19.5t-24.5 -23.5q-23 -26 -36 -58l92 -64q4 8 9 14.5t11 14.5q12 16 28 28q17 13 34 20q19 8 42 8q18 0 38 -6q18 -6 32 -17q12 -11 22 -29q8 -15 8 -39q0 -30 -15 -52q-15 -23 -37 -40 q-11 -8 -22.5 -15.5t-23.5 -13.5q-11 -6 -21 -11.5t-18 -10.5q-52 -30 -69 -71q-17 -40 -17 -93h116q0 25 11 45q5 9 12.5 17t15.5 16q9 7 18.5 13.5t20.5 11.5q11 6 21 12t21 13q24 14 45 32q20 17 35 38q16 22 23 47zM1099 1405q19 9 19 31q0 7 -3 15q-28 60 -76 104 t-111 66q-57 20 -113 20q-72 0 -141 -32q-77 -36 -124.5 -101.5t-60.5 -143.5q-34 29 -75 44t-86 15q-64 0 -122 -32q-44 -25 -73.5 -63.5t-43.5 -86.5q-9 -33 -9 -66q0 -66 33 -123q5 -8 13 -12.5t17 -4.5t17 4q17 11 17 30q0 9 -5 17q-23 43 -23 89q0 24 6 47 q20 72 85 109q42 24 88 24q47 0 89 -23.5t67 -67.5l4 -6q4 -23 10.5 -45.5t17.5 -44.5q10 -20 31 -20q5 0 15 4q19 9 19 31q0 7 -3 15q-25 53 -25 111q0 74 39.5 139t111.5 99q55 26 112 26q23 0 44.5 -4t43.5 -12q50 -18 88 -52.5t61 -82.5q9 -20 31 -20q7 0 15 3z M1434 959q60 35 93 93.5t33 123.5q0 63 -33 122q-25 43 -63.5 73t-86.5 43q-33 9 -66 9q-64 0 -122 -32q-18 -11 -18 -30q0 -9 5 -17q10 -18 29 -18q9 0 17 5q40 24 89 24q12 0 24 -2t24 -5q35 -10 63 -31.5t45 -52.5q24 -42 24 -89t-23.5 -89t-67.5 -67q-17 -11 -17 -30 q0 -9 4 -17q5 -8 13 -12.5t17 -4.5q10 0 17 4z" />
+<glyph unicode="e" horiz-adv-x="3596" d="M3263 381q-15 -20 -23.5 -43.5t-8.5 -49.5t8.5 -50t23.5 -44h-225q-20 0 -37 7.5t-29.5 20t-20 29.5t-7.5 37q0 19 7.5 36t20 29.5t29.5 20t37 7.5h225zM3426 381q19 0 36 -7t29.5 -20t20 -30t7.5 -36q0 -20 -7.5 -37t-20 -29.5t-29.5 -20t-36 -7.5q-20 0 -37 7.5 t-29.5 20t-20 29.5t-7.5 37q0 19 7.5 36t20 29.5t29.5 20t37 7.5zM2875 379q-15 -20 -23.5 -43.5t-8.5 -49.5q0 -27 8.5 -50.5t23.5 -43.5h-1164q-110 0 -205 -22.5t-183 -55.5t-174 -72.5t-179 -72.5t-197 -55.5t-228 -22.5q-95 0 -192 27.5t-175.5 79t-128 124.5 t-49.5 164t49.5 164t128 124.5t175.5 79t192 27.5q124 0 228 -22.5t197 -56t179 -72.5t174 -72.5t183 -56t205 -22.5h1164zM868 61q112 38 174 98t62 128q0 57 -42.5 107t-115.5 87.5t-171.5 59t-209.5 21.5q-45 0 -90.5 -7t-88 -19.5t-80.5 -31t-68 -41.5q-8 -6 -8 -16 q0 -6 2 -9q5 -11 18 -11q4 0 6 1q43 14 87.5 20.5t88.5 6.5q101 0 191.5 -18.5t159 -50.5t108.5 -74.5t40 -90.5q0 -21 -7.5 -39t-19 -34t-26 -29t-28.5 -23q-9 -6 -9 -17q0 -3 2 -9q7 -10 18 -10q5 0 7 1zM3595 1218q0 -5 0.5 -9t0.5 -7q0 -4 -0.5 -8t-0.5 -9 q-3 -92 -34 -166.5t-86.5 -127.5t-132.5 -81.5t-171 -28.5q-57 0 -143.5 12t-189.5 33t-215 49.5t-219.5 61.5t-203 68.5t-164.5 71.5l-138 71q-15 -29 -42 -47t-62 -18h-1589q-25 0 -46.5 9.5t-37.5 25.5t-25.5 37.5t-9.5 46.5q0 24 9.5 45.5t25.5 37.5t38 25.5t46 9.5 h1589q35 0 62.5 -18t41.5 -47q35 17 69 35t69 36q69 36 164.5 72.5t202.5 69.5t219.5 61t215.5 48.5t189.5 32.5t143.5 12q94 0 171 -28.5t132.5 -81.5t86.5 -127.5t34 -166.5zM209 1137q27 0 45.5 19t18.5 46q0 26 -18.5 45t-45.5 19t-46 -19t-19 -45q0 -27 19 -46t46 -19z M3171 1533q-45 0 -119 -8.5t-164.5 -24.5t-190.5 -37.5t-195 -47t-179 -54.5t-142 -59q58 11 141 21.5t177.5 19.5t194 16.5t190.5 13t166 8.5t121 3q115 0 190.5 -13.5t123.5 -34.5q-33 94 -113 145.5t-201 51.5zM3171 870q121 0 201 51.5t113 145.5q-48 -21 -123.5 -34.5 t-190.5 -13.5q-46 0 -121 3t-166 8.5t-190.5 13t-194 16.5t-177.5 19.5t-141 21.5q58 -30 142 -59t179 -54.5t195 -47t190.5 -37.5t164.5 -24.5t119 -8.5zM3171 1108q92 0 156 9.5t104 23.5t58 30.5t18 30.5q0 13 -18 29.5t-58 30.5t-104 23.5t-156 9.5q-49 0 -127.5 -3.5 t-173.5 -10t-199.5 -15t-204 -19t-188 -22t-150.5 -23.5q62 -12 150.5 -24t188 -22.5t204 -19t199.5 -15t173.5 -10t127.5 -3.5z" />
+<glyph unicode="f" horiz-adv-x="3882" d="M849 598h172v-237h-172v-315h-263v315h-586v235l668 841h181v-839zM616 1041l-351 -443h351v443zM3882 598v-237h-172v-315h-263v315h-586v235l668 841h181v-839h172zM3476 1041l-351 -443h351v443zM2671 907q29 0 55 -11t45.5 -30.5t30.5 -45t11 -54.5t-11 -54.5 t-29.5 -44.5t-44 -30.5t-54.5 -12.5q40 -17 62.5 -52.5t22.5 -77.5q0 -29 -10 -53q-17 -42 -53 -64.5t-78 -22.5q-29 0 -53 10q-5 2 -9 4t-8 5q4 -3 7.5 -6t6.5 -7q20 -21 30.5 -47t10.5 -53t-10.5 -53t-30.5 -47q-20 -20 -46 -30.5t-53 -10.5q-56 0 -99 40q10 -24 10 -53 q0 -42 -22.5 -77.5t-63.5 -52.5q-28 -11 -54 -11q-42 0 -78 23t-53 64q-5 9 -6 18q1 -5 1 -9.5v-9.5q0 -29 -11 -55t-30 -45t-45 -30t-55 -11t-54.5 11t-44.5 29.5t-30 43.5t-12 54q-17 -40 -52.5 -62.5t-77.5 -22.5q-26 0 -53 11q-41 17 -64.5 52.5t-23.5 77.5q0 26 11 54 q2 5 4 8.5t4 8.5l-12 -15q-21 -20 -47 -30.5t-53 -10.5t-53 10.5t-46 30.5q-21 21 -31.5 47.5t-10.5 53.5q0 26 9.5 51.5t29.5 45.5q-24 -10 -51 -10q-42 0 -78 23t-53 64q-11 28 -11 54q0 42 23 78t64 53l18 6q-5 -1 -9.5 -1.5t-9.5 -0.5q-29 0 -55 11t-45 30.5t-30 45.5 t-11 55q0 28 10.5 53.5t29.5 44.5t44 30.5t54 11.5q-40 17 -62.5 53t-22.5 78q0 29 10 53q17 42 53.5 64.5t78.5 22.5q29 0 53 -10l16 -8q-8 6 -14 12q-21 20 -31 46t-10 53t10 53t31 47t47 31.5t53 10.5q55 0 98 -40q-10 24 -10 52q0 42 23 77.5t63 52.5q14 6 27.5 8.5 t27.5 2.5q42 0 77.5 -22.5t52.5 -63.5q4 -9 6 -18q-1 5 -1 9.5v9.5q0 29 11 54.5t30 45t45 30.5t55 11t54.5 -11t44.5 -29.5t30.5 -44t11.5 -53.5q17 40 53 62.5t77 22.5q26 0 53 -11q42 -17 65 -53t23 -78q0 -29 -10 -53l-9 -17l12 14q20 20 46.5 30.5t53.5 10.5t53 -10.5 t47 -30.5t31.5 -46t10.5 -53q0 -26 -10 -52t-30 -46q24 10 51 10q42 0 78 -23t53 -64q11 -28 11 -54q0 -42 -23 -78t-64 -53l-17 -6q5 1 9 1.5t9 0.5zM2678 692q17 0 33 8t29 22t20.5 32.5t7.5 39.5v9l-2 19l-18 -7q-9 -3 -17 -3q-12 0 -23.5 6.5t-22.5 6.5 q-14 5 -29.5 10.5t-33.5 5.5q-28 0 -52.5 -20.5t-33.5 -61.5l-6 1v6q0 49 30 86.5t75 49.5q-5 -1 -14 -1q-29 0 -53 15.5t-36 44.5q-12 27 -12 47q0 22 9.5 36.5t23.5 20.5q12 5 25.5 6t27.5 1q15 0 31.5 1.5t32.5 9.5q2 -8 2 -14q0 -23 -15.5 -48t-44.5 -42q2 -2 6 -3 q6 -3 15 -3t17 4q23 10 37.5 34.5t14.5 53.5q0 25 -12 48l-9 18l-14 -14q-11 -11 -26 -13t-32 -3h-4q-14 0 -30.5 -1t-33.5 -8q-22 -9 -35.5 -30.5t-13.5 -53.5v-12t2 -13l-6 -1q-2 4 -2 5q-11 25 -11 54q0 28 10.5 53.5t29.5 45.5q-17 -6 -33 -6q-18 0 -35.5 7.5 t-31.5 22.5q-18 18 -26 35.5t-8 32.5q0 22 14 36q10 10 21.5 16t24.5 11q14 6 29.5 13.5t26.5 21.5q12 -17 12 -44q0 -18 -6 -37.5t-20 -37.5h5q5 0 13.5 2t17.5 11q22 22 22 59q0 22 -9 44t-28 38l-15 13l-8 -18q-3 -5 -9.5 -12t-14 -13t-15.5 -10t-14 -4q-1 -1 -2 -1 t-3 -1q-13 -5 -25.5 -12t-23.5 -18t-17 -25.5t-6 -31.5q0 -14 4.5 -30t15.5 -32l-5 -3q-1 1 -1.5 2t-2.5 2q-20 20 -30.5 46t-10.5 53q0 39 19 71q-31 -39 -77 -39q-20 0 -37 7q-34 14 -48.5 33.5t-14.5 37.5q0 8 4 18q5 13 13.5 22.5t18.5 20.5q11 11 21.5 23.5t16.5 29.5 q16 -10 26.5 -31.5t10.5 -48.5q0 -14 -5 -34q6 0 11 4q11 5 18 21q5 10 5 27q0 15 -5 30t-14.5 28.5t-23.5 24t-31 15.5l-19 6v-20q0 -16 -9 -28.5t-23 -26.5q-11 -11 -21.5 -23t-17.5 -28q-6 -14 -6 -29q0 -22 12 -43.5t37 -38.5l-3 -5l-5 2q-41 17 -64 52t-24 77 q-12 -26 -34.5 -40t-52.5 -14q-45 0 -66.5 19t-21.5 40q0 11 3 22t8 22q0 1 0.5 1.5t0.5 1.5l2 5q5 13 10 27t5 30v7q25 -5 47 -30.5t27 -63.5q4 3 8 8q3 5 5.5 11t2.5 15q0 17 -8 33t-22 29t-32.5 20.5t-39.5 7.5h-8l-20 -2l7 -18q2 -5 3 -9t1 -9q0 -10 -3 -19.5t-8 -20.5 q0 -2 -1 -2.5t-1 -2.5q-6 -14 -11 -29.5t-5 -33.5q0 -27 20.5 -52t61.5 -33l-2 -6h-5q-49 0 -86.5 29.5t-49.5 74.5q0 -3 0.5 -6.5t0.5 -6.5q0 -30 -15.5 -54t-44.5 -36q-28 -11 -48 -11q-22 0 -36.5 9t-19.5 23q-5 12 -6 25.5t-1 27.5q0 16 -2 32.5t-10 31.5q10 2 15 2 q23 0 48 -15t42 -44l3 6q1 3 2 6.5t1 8.5q0 9 -4 17q-10 23 -35 37t-54 14q-12 0 -24.5 -2.5t-23.5 -8.5l-17 -10l13 -14q12 -12 14 -27.5t2 -33.5q0 -15 1.5 -31.5t8.5 -32.5q9 -22 30.5 -36t52.5 -14h12t13 2l1 -6l-4 -2q-28 -11 -54 -11q-28 0 -54 10.5t-46 29.5 q6 -17 6 -33q0 -38 -29 -67q-19 -18 -36.5 -26t-32.5 -8q-22 0 -36 14q-9 10 -15 21.5t-11 25.5q-6 14 -13.5 29t-21.5 26q16 12 44 12q18 0 37.5 -6t36.5 -20v2q0 1 0.5 2t0.5 3q0 5 -2.5 13t-10.5 16q-11 11 -27 16.5t-33 5.5q-22 0 -43.5 -9t-37.5 -28l-13 -15l18 -8 q15 -7 22.5 -20.5t15.5 -30.5q5 -14 12.5 -28.5t20.5 -26.5q21 -23 56 -23q14 0 30 4.5t32 15.5l3 -6l-3 -3q-20 -21 -46 -31.5t-53 -10.5q-18 0 -36 4.5t-35 14.5q39 -31 39 -75q0 -18 -8 -39q-14 -33 -33.5 -47.5t-37.5 -14.5q-9 0 -18 3q-12 5 -22 13.5t-20 18.5 q-11 11 -24 22t-30 16q11 17 33 27t49 10q18 0 33 -4q-1 6 -4 11t-8 9t-13 8q-11 5 -28 5q-15 0 -30 -5t-28 -14.5t-23.5 -23t-15.5 -30.5l-6 -19h20q17 -1 29 -10.5t25 -22.5q11 -11 23 -21t29 -17q13 -6 28 -6q21 0 43.5 12t39.5 37l5 -4q-2 -2 -2 -5q-17 -40 -52 -63 t-77 -24q25 -12 39.5 -35t14.5 -52q0 -46 -19 -67t-41 -21q-14 0 -26 4t-25 9q-1 0 -1.5 0.5t-1.5 0.5q-13 5 -26.5 9.5t-27.5 4.5h-7q4 25 29.5 47t63.5 27l-8 8q-5 3 -11 6t-15 3q-19 0 -35 -9t-28 -23.5t-19 -32.5t-7 -37l1 -29l19 7q9 3 17 3q10 0 20.5 -3t21.5 -8 q1 0 1.5 -0.5t1.5 -0.5q14 -5 30 -10.5t33 -5.5q28 0 52.5 20.5t33.5 61.5l6 -2v-4q0 -50 -29.5 -87.5t-75.5 -49.5q5 1 15 1q30 0 53.5 -15.5t35.5 -43.5q11 -28 11 -48q0 -22 -9 -37t-23 -20q-13 -5 -26 -6t-27 -1q-16 0 -32.5 -1.5t-32.5 -9.5q-1 3 -1 6.5v6.5 q0 23 15 48.5t44 42.5q-3 1 -6 3l-6 2t-8 1q-10 0 -18 -4q-23 -10 -37.5 -34.5t-14.5 -53.5q0 -26 12 -48l9 -18l14 14q12 11 28 13t34 2q15 0 31 1.5t33 8.5q21 9 35.5 30.5t14.5 52.5q0 12 -3 26h7l2 -4q11 -28 11 -54q0 -28 -10.5 -53.5t-29.5 -45.5q8 3 15.5 4t15.5 1 q18 0 35.5 -7t32.5 -21q19 -19 26.5 -36.5t7.5 -32.5q0 -22 -14 -36q-9 -10 -21 -15.5t-25 -11.5q-14 -6 -29 -13.5t-26 -21.5q-13 19 -13 45q0 18 6.5 37.5t20.5 36.5h-5q-5 0 -13.5 -2t-17.5 -11q-11 -11 -16.5 -27t-5.5 -33q0 -22 9 -43.5t28 -37.5l14 -13l9 18 q6 12 22.5 25.5t30.5 13.5q14 6 28 13.5t25 18.5q23 23 23 57q0 31 -20 61l5 4q1 -2 2 -2.5t2 -1.5q20 -20 30.5 -46t10.5 -53q0 -39 -19 -71q31 39 76 39q18 0 39 -8q33 -14 47.5 -33t14.5 -37q0 -8 -4 -18q-5 -13 -13.5 -22.5t-18.5 -20.5l-3 -3q-10 -11 -19.5 -22.5 t-14.5 -28.5q-17 11 -27 32.5t-10 48.5q0 19 4 34q-6 -1 -11 -4t-10 -8t-8 -13q-5 -13 -5 -27q0 -29 19.5 -58t54.5 -40l19 -6v20q1 17 10 29t22 25l12 16q8 8 15.5 17t11.5 20q6 13 6 28q0 21 -12 43t-37 39l3 5l5 -2q41 -17 64 -52t24 -77q12 26 34.5 40t52.5 14 q45 0 66.5 -19t21.5 -41q0 -13 -4.5 -25.5t-9.5 -25.5t-9.5 -27.5t-4.5 -29.5v-7q-25 5 -47 30.5t-27 63.5q-5 -4 -9 -9q-3 -5 -5.5 -11t-2.5 -15q0 -19 9 -35t23.5 -28t32.5 -19t37 -7l28 1l-7 19q-3 9 -3 18q0 11 4 22t9 23q5 14 10 29.5t5 32.5q0 28 -20.5 53t-60.5 33 l1 6q2 0 2.5 0.5t2.5 0.5q49 0 86.5 -30t49.5 -75q0 3 -0.5 6.5t-0.5 6.5q0 30 15.5 54t44.5 36q14 6 26 8.5t23 2.5q22 0 36 -9t19 -23q5 -13 6 -26t2 -27q0 -16 1.5 -32.5t9.5 -31.5q-10 -2 -15 -2q-23 0 -47.5 15t-41.5 44q-2 -2 -3 -6q-3 -6 -3 -16q0 -7 3 -16 q10 -23 34.5 -37t53.5 -14q25 0 49 12l17 9l-13 14q-11 12 -13.5 27.5t-2.5 33.5q0 15 -1 31.5t-8 32.5q-10 22 -31.5 36t-53.5 14h-12t-12 -2l-1 6l5 2q13 6 26.5 8.5t27.5 2.5q28 0 53.5 -10.5t45.5 -29.5q-6 16 -6 33q0 38 29 67q19 18 36.5 26t32.5 8q22 0 36 -14 q9 -10 15 -21.5t11 -25.5q7 -14 14 -29t21 -26q-17 -12 -44 -12q-18 0 -37.5 6t-36.5 20q-1 -1 -1 -2v-5q0 -5 2.5 -13t10.5 -16q11 -11 27 -16.5t33 -5.5q22 0 43.5 9t38.5 28l13 15l-19 8q-6 3 -12.5 9t-12.5 13.5t-9.5 15.5t-3.5 15q-6 14 -13.5 28t-19.5 25 q-20 23 -56 23q-14 0 -30 -4.5t-32 -15.5l-3 6l3 3q20 20 46.5 30.5t53.5 10.5q39 0 71 -19q-39 31 -39 78q0 19 7 37q14 33 33.5 47.5t37.5 14.5q9 0 18 -3q12 -5 22 -13.5t20 -18.5q11 -11 24 -22t30 -16q-11 -17 -32.5 -27t-49.5 -10q-18 0 -33 4q1 -6 5 -11q3 -5 8 -9.5 t13 -7.5q11 -5 28 -5q29 0 57 19t39 54l6 19h-19q-17 1 -29.5 10.5t-25.5 22.5q-11 11 -23 21t-29 17q-14 6 -29 6q-21 0 -42.5 -11.5t-38.5 -37.5l-5 4q0 2 2 4q17 41 51.5 64t76.5 24q-25 12 -39.5 35t-14.5 52q0 46 19 67t41 21q11 0 22 -3t22 -8q1 0 1.5 -0.5t1.5 -0.5 l11 -4q12 -5 24 -8.5t26 -3.5h7q-4 -25 -29.5 -47t-63.5 -27q3 -5 8 -9q4 -3 10.5 -5.5t15.5 -2.5zM2142 850q10 -1 18.5 -6t15.5 -11q8 -7 14 -16q-20 -18 -48 -18h-7q17 -14 27 -32t10 -40q0 -24 -13 -50q-10 -19 -29 -34t-40.5 -25.5t-42 -16t-34.5 -5.5q-11 0 -15 3 q-11 5 -22 32t-16 60q-13 -26 -27 -43t-24 -20q-2 -1 -8 -1q-16 0 -43.5 11t-55.5 30t-52 45t-33 56q-7 24 -7 47q0 37 18 63t50 43q-42 5 -68 37q9 9 20 16q9 6 20.5 11t24.5 5h6q10 -2 17 -7q2 5 4.5 8.5t5.5 6.5q11 10 25.5 13t26.5 3q5 0 9.5 -0.5t7.5 -0.5q4 -1 7 -1 q-2 -40 -34 -69q5 1 9 1h9q39 0 71 -21.5t47 -70.5q4 -11 5 -23.5t1 -25.5q26 26 61 26q14 0 32 -5q-8 11 -12.5 22.5t-4.5 24.5q0 2 0.5 4.5t0.5 4.5q10 0 21 -3q8 -2 17.5 -6t15.5 -12q5 -6 6 -13q6 3 13 3zM1809 727q9 3 9 17q0 4 -2 12t-8 14t-11 6q-1 0 -1.5 -0.5 t-1.5 -0.5q-10 -2 -10 -18q0 -4 2 -10q2 -9 7.5 -15t11.5 -6q1 0 2 0.5t2 0.5zM1833 838q7 2 9.5 7t2.5 11q0 3 -0.5 5.5t-1.5 5.5q-2 8 -8 14t-11 6q-1 0 -1.5 -0.5t-1.5 -0.5q-10 -2 -10 -17q0 -3 0.5 -5.5t1.5 -5.5q6 -20 20 -20zM1875 802q2 -8 8 -14t11 -6q1 0 1.5 0.5 t1.5 0.5q10 2 10 17q0 3 -0.5 5.5t-1.5 5.5q-3 9 -8.5 15t-11.5 6q-1 0 -1.5 -0.5t-1.5 -0.5q-9 -3 -9 -17q0 -4 2 -12zM1915 698q9 1 9 17q0 4 -2 12t-8 14t-11 6q-1 0 -1.5 -0.5t-1.5 -0.5q-9 -2 -9 -17q0 -8 2 -12q2 -8 8 -14t11 -6q1 0 1.5 0.5t1.5 0.5zM1922 857 q10 2 10 17q0 4 -2 12t-7.5 14t-11.5 6q-1 0 -2 -0.5t-2 -0.5q-9 -3 -9 -17q0 -4 2 -12t8 -14t11 -6q1 0 1.5 0.5t1.5 0.5zM1931 793q6 -20 22 -20q10 3 10 18q0 3 -0.5 5.5t-1.5 5.5q-7 20 -23 20q-5 -2 -7 -7t-2 -11q0 -3 0.5 -5.5t1.5 -5.5zM2017 716q3 6 3 12q0 8 -5 11 q-1 1 -4 1q-9 0 -15 -13q-3 -6 -3 -12q0 -7 4 -10q1 -1 4 -1q9 0 16 12zM2058 644q3 6 3 12q0 8 -5 10q-1 1 -4 1q-8 0 -15 -12q-3 -6 -3 -12q0 -7 4 -10q1 -1 4 -1q9 0 16 12zM2069 772q-3 -6 -3 -12q0 -7 5 -10q1 -1 4 -1q8 0 15 12q3 6 3 12q0 7 -4 10q-1 1 -4 1 q-9 0 -16 -12zM2074 687q1 -1 3 -1q5 0 9.5 4t6.5 9q4 8 4 13q0 6 -5 9q-1 1 -4 1q-8 0 -15 -12q-4 -10 -4 -14q0 -6 5 -9zM2118 664q3 6 3 12q0 7 -4 10q-1 1 -4 1q-10 0 -15 -12q-4 -10 -4 -14q0 -6 5 -9q1 -1 4 -1q8 0 15 13zM2145 747q-1 1 -4 1q-10 0 -15 -12 q-4 -7 -4 -13q0 -7 5 -10q1 -1 4 -1q8 0 15 13q3 6 3 12q0 7 -4 10z" />
+<glyph unicode="g" horiz-adv-x="1612" d="M732 591q9 -15 22.5 -22t28.5 -7q16 0 31.5 7.5t27.5 21.5h15q-6 -39 -34 -65t-71 -26q-27 0 -50 10.5t-36 29.5q-13 -19 -36 -29.5t-51 -10.5q-42 0 -70 26t-34 65h15q11 -14 27 -21.5t32 -7.5q15 0 28.5 7t22.5 22q12 19 33 19q20 0 33 -15q13 15 33 15q21 0 33 -19z M529 172q-45 -6 -89 -23t-81.5 -51.5t-65 -92t-38.5 -144.5h-172q-38 0 -62 24q-21 21 -21 49v6q3 23 9.5 60t19.5 76.5t32 75t48 56.5q24 18 63 37.5t86 39t98 38t98 35.5v-71q0 -35 20.5 -65t54.5 -50zM348 1169q-42 7 -77.5 31t-58.5 63q-13 23 -18.5 46.5t-5.5 47.5 q0 50 24.5 94.5t70.5 70.5q44 25 94 25q17 0 34.5 -3.5t34.5 -9.5q17 37 45.5 66.5t67.5 47.5q51 23 101 23q66 0 124 -35.5t88 -99.5l2 -3q36 14 71 14q50 0 95 -24.5t71 -71.5q25 -44 25 -94t-25 -94.5t-71 -70.5q-31 -18 -69 -23v-214l-6 -83q19 -5 33.5 -25.5 t14.5 -73.5q0 -25 -6 -49t-15.5 -44t-22.5 -35t-27 -21v-96q0 -50 -39 -80l-156 -125q-28 -22 -64 -22h-46q-36 0 -64 22l-157 125q-18 14 -28.5 35t-10.5 45v96q-14 6 -27 21t-23 35t-15.5 44t-5.5 49q0 53 15 73.5t33 25.5l-6 83v214zM973 773q0 9 -0.5 19.5t-3 19.5 t-6.5 15.5t-11 6.5q-1 -1 -4.5 -5.5t-9.5 -17.5q-5 -12 -18 -12q-2 0 -8 2q-12 5 -12 17q0 2 2 8q0 2 3 5v88q-43 -10 -106.5 -16t-138.5 -6t-138.5 6t-105.5 16v-88q0 -1 2 -5q1 -2 1 -7q0 -14 -12 -18q-6 -2 -8 -2q-13 0 -18 12q-5 13 -8.5 17.5t-5.5 5.5q-7 0 -11 -6.5 t-6.5 -15.5t-3 -19.5t-0.5 -19.5q0 -24 6 -44.5t14 -35.5t16.5 -23.5t13.5 -8.5q9 0 15 -6t6 -14v-113q0 -30 24 -49l157 -125q8 -6 18 -10t21 -4h46q11 0 21 4t18 10l156 125q24 18 24 49v113q0 7 7 14q4 6 16 6q4 0 12.5 8.5t16 23.5t13.5 35.5t6 44.5zM875 1482 q-10 -6 -10 -17q0 -6 3 -10q4 -10 17 -10q7 0 10 2q25 14 51 14q7 0 14 -1t14 -3q20 -5 36 -18t26 -31q14 -25 14 -51q0 -27 -13.5 -51.5t-39.5 -38.5q-9 -6 -9 -18q0 -7 2 -10q6 -9 17 -9q7 0 10 2q35 20 54 53.5t19 71.5q0 18 -4.5 36t-14.5 35q-14 25 -36.5 42t-50.5 25 q-20 6 -39 6q-37 0 -70 -19zM239 1395q-5 -20 -5 -38q0 -39 19 -71q4 -10 17 -10q5 0 10 3q10 5 10 17q0 5 -3 10q-13 26 -13 51q0 16 4 28q5 20 17.5 36t30.5 26q25 14 51 14q27 0 51.5 -13.5t39.5 -39.5q0 -1 2 -3q5 -28 16 -52q5 -11 18 -11q6 0 8 2q12 5 12 18q0 2 -2 8 q-15 31 -15 65q0 43 23 80.5t64 56.5q31 15 65 15q26 0 52 -9q29 -11 51 -31t35 -47q5 -12 18 -12q2 0 8 2q12 7 12 19q0 2 -2 8q-17 35 -45 60t-64 38q-32 12 -64 12q-41 0 -82 -19q-45 -21 -72.5 -59t-35.5 -83q-40 34 -93 34q-37 0 -70 -18q-52 -29 -68 -87zM1551 633 q26 0 43.5 -17.5t17.5 -42.5v-213q0 -40 -16.5 -73.5t-44.5 -55.5h21q8 0 8 -9v-353q0 -8 -8 -8h-1277q9 69 29.5 116.5t48.5 78.5t62.5 47.5t72 24t76.5 9t76 1.5q42 0 79.5 11.5t65.5 32t44 47.5t16 58v71q47 -17 98 -35.5t98 -38t86.5 -39t63.5 -37.5q21 -17 39 -42v56 q0 9 8 9h21q-28 22 -44.5 55.5t-16.5 73.5v474q0 26 17.5 43.5t42.5 17.5q26 0 43.5 -17.5t17.5 -43.5v-147q14 8 30 8q20 0 35.5 -11.5t22.5 -29.5q13 10 33 10t35.5 -11.5t22.5 -29.5q13 10 33 10zM528 -89q18 0 31 13t13 31t-13 31t-31 13q-19 0 -32 -13t-13 -31t13 -31 t32 -13zM772 -89q18 0 31 13t13 31t-13 31t-31 13q-19 0 -31.5 -13t-12.5 -31t12.5 -31t31.5 -13zM1490 603q0 13 -8.5 21.5t-21.5 8.5q-12 0 -21 -8.5t-9 -21.5h60zM1339 597q13 3 27 3h33v34q0 13 -8.5 21.5t-21.5 8.5q-12 0 -21 -8.5t-9 -21.5v-37zM1248 537q24 33 61 50 v247q0 13 -9 21.5t-22 8.5q-12 0 -21 -8.5t-9 -21.5v-297zM1498 62q16 0 27 11t11 27t-11 27t-27 11q-15 0 -26 -11t-11 -27t11 -27t26 -11zM1581 435q-14 -8 -30 -8q-27 0 -45 20q-9 -9 -20.5 -14.5t-25.5 -5.5q-27 0 -45 20q-18 -20 -46 -20q-11 0 -24 5q-6 -14 -6 -30 q0 -6 -4.5 -10.5t-10.5 -4.5q-7 0 -11 4.5t-4 10.5q0 22 8.5 41.5t22.5 34t33.5 23t41.5 8.5q27 0 48 17t26 43h-123q-24 0 -45.5 -10t-37.5 -28t-25.5 -41.5t-9.5 -50.5v-79q0 -26 9 -49.5t24 -41t35.5 -28t44.5 -10.5h108q22 0 42.5 10.5t36 28t24.5 41t9 49.5v75z M1490 510q-24 -25 -59 -30q7 -22 29 -22q13 0 21.5 8.5t8.5 21.5v22zM1397 476q-20 -5 -33 -18h5q21 0 28 18zM1581 573q0 12 -8.5 21t-21.5 9t-21.5 -9t-8.5 -21v-85q0 -13 8.5 -21.5t21.5 -8.5t21.5 8.5t8.5 21.5v85zM1149 744q-18 17 -26.5 39t-8.5 45t8.5 45t26.5 40 q5 5 11 5q5 0 12 -5q4 -4 4 -11q0 -8 -4 -12q-13 -13 -19.5 -29t-6.5 -33q0 -35 26 -61q4 -5 4 -12t-4 -11q-5 -5 -12 -5q-6 0 -11 5zM1392 753q-5 4 -5 12q0 7 5 11q21 23 21 52t-21 53q-5 4 -5 11t5 11q5 5 11 5t11 -5q31 -31 31 -75t-31 -75q-4 -4 -11 -4t-11 4z" />
+<glyph unicode="h" horiz-adv-x="1962" d="M127 1032q-10 0 -16 8q-4 4 -4 11q0 4 1 6q36 127 118.5 233.5t199 182.5t261 118.5t303.5 42.5t303.5 -42.5t261 -118.5t199.5 -182.5t119 -233.5v-4q0 -8 -4 -13q-5 -8 -15 -8h-1727zM1190 1306q-14 -16 -26.5 -33t-12.5 -33q0 -17 11.5 -28t27.5 -11q17 0 28 11t11 28 q0 16 -12.5 33t-26.5 33zM1168 1415q0 -16 11.5 -27.5t27.5 -11.5q17 0 28 11.5t11 27.5q0 17 -12.5 34t-26.5 33q-14 -16 -26.5 -33t-12.5 -34zM1302 1319q0 -17 11 -28t27 -11q17 0 28 11t11 28q0 16 -12 33t-27 33q-14 -16 -26 -33t-12 -33zM1432 1384q0 -17 11 -28 t28 -11q16 0 27.5 11t11.5 28q0 16 -12.5 33t-26.5 33q-14 -16 -26.5 -33t-12.5 -33zM1513 1220q0 -16 11 -27t28 -11q16 0 27.5 11t11.5 27q0 17 -12.5 33.5t-26.5 33.5q-14 -17 -26.5 -33.5t-12.5 -33.5zM127 178h1727v-170q0 -33 -12.5 -61.5t-33.5 -49.5t-49.5 -33.5 t-61.5 -12.5h-1413q-33 0 -61.5 12.5t-49.5 33.5t-33.5 49.5t-12.5 61.5v170zM1824 603q28 0 53.5 -11t44 -29.5t29.5 -44t11 -54.5t-11 -54.5t-29.5 -44t-44 -29.5t-53.5 -11h-1685q-29 0 -54.5 11t-44 29.5t-29.5 44t-11 54.5t11 54.5t29.5 44t44 29.5t54.5 11h907 l499 -205l155 205h124zM150 752q-17 -14 -37 -14q-28 0 -45 22q-14 17 -14 38q0 27 21 45q55 45 121 69t138 24q69 0 134.5 -23.5t122.5 -70.5q39 -32 86 -49t98 -17q100 0 182 68q55 45 121.5 68.5t137.5 23.5q72 0 138 -24t121 -69q38 -32 85 -49.5t98 -17.5q50 0 97 17.5 t86 49.5q16 13 37 13q28 0 46 -21q13 -16 13 -37q0 -28 -21 -46q-54 -45 -120.5 -69t-137.5 -24t-137.5 24t-121.5 69q-38 32 -85 49t-98 17q-50 0 -97 -17t-86 -49q-54 -45 -120.5 -69t-137.5 -24t-137 24.5t-121 69.5q-39 32 -86 48.5t-97 16.5q-51 0 -98 -17t-86 -49z " />
+<glyph unicode="i" horiz-adv-x="2130" d="M2129 964q0 -2 0.5 -3t0.5 -3v-749q0 -16 -10 -28.5t-26 -16.5l-1223 -272q-3 -1 -10 -1q-8 0 -15.5 2.5t-13.5 7.5q-17 14 -17 36v749q0 3 1 4v4q1 5 4 13.5t8 10.5l417 436q12 -36 34.5 -66t52.5 -51.5t66 -34t76 -12.5q47 0 89 17t74 46.5t52.5 69t25.5 85.5 q14 -3 28 -7t28 -9q87 -29 151.5 -64t107.5 -65t64.5 -51t23.5 -23q2 -1 2 -2t1 -2q4 -6 6 -12t2 -9zM2038 467l-1131 -251v-221l1131 251v221zM2038 901l-1131 -252v-220l1131 251v221zM1181 1502q-17 0 -29.5 12t-12.5 30q0 17 12.5 29.5t29.5 12.5q44 0 83.5 -13.5 t72.5 -38t57 -58.5t36 -74q21 6 44 6q36 0 68 -13.5t56 -37.5t37.5 -56t13.5 -68t-13.5 -68t-37.5 -56t-56 -38t-68 -14t-68 14t-56 38t-38 56t-14 68q0 38 15 71t41 57q-6 30 -22 56t-39 44.5t-51.5 29.5t-60.5 11zM1527 1345q-20 0 -34.5 -14.5t-14.5 -34.5t14.5 -34.5 t34.5 -14.5q21 0 35.5 14.5t14.5 34.5t-14.5 34.5t-35.5 14.5zM680 863l-177 175h-375q-27 0 -50 10t-40.5 27.5t-27.5 41t-10 50.5v288q0 27 10 50.5t27.5 41t40.5 27.5t50 10h706q27 0 50 -10t40.5 -27.5t27.5 -41t10 -50.5v-288q0 -27 -10 -50.5t-27.5 -41t-40.5 -27.5 t-50 -10h-154v-175z" />
+<glyph unicode="j" horiz-adv-x="1543" d="M493 390l-42 -142h825q35 0 65.5 -14t53.5 -38t36.5 -55.5t13.5 -67.5t-13.5 -67.5t-37.5 -55.5t-55.5 -37.5t-67.5 -13.5t-68 13.5t-56 37.5t-37.5 55.5t-13.5 67.5t14 69h-570q14 -33 14 -69t-13.5 -67.5t-37.5 -55.5t-55.5 -37.5t-67.5 -13.5t-68 13.5t-55.5 37.5 t-37.5 55.5t-14 67.5q0 31 10 59t28 50t42.5 38t53.5 23q21 71 33 109.5t17 56.5l7 24l-129 655l-225 46q-19 4 -30.5 19t-11.5 33q0 6 1 10q4 18 19 30t33 12q6 0 10 -1l254 -51h486q-28 23 -44.5 57t-16.5 73q0 37 14.5 69t39.5 55q-6 29 -21.5 54t-37.5 43t-49.5 28.5 t-58.5 10.5q-17 0 -29 12t-12 29t12 28.5t29 11.5q42 0 80 -13t69.5 -36.5t55 -56t35.5 -71.5q21 6 42 6q35 0 66 -13.5t54 -36.5t36.5 -54t13.5 -66q0 -39 -16.5 -73t-45.5 -57h471q12 0 22.5 -5.5t18.5 -14.5q12 -14 12 -34q0 -7 -1 -10l-136 -689q-2 -19 -17 -31t-34 -12 h-862zM963 1430q-22 0 -37 -15t-15 -37q0 -23 15 -38t37 -15t37.5 15t15.5 38q0 22 -15.5 37t-37.5 15zM410 906l46 -237h889l47 237h-982zM449 73q0 29 -20 49t-49 20t-49 -20t-20 -49t20 -49t49 -20t49 20t20 49zM1271 4q29 0 49 20t20 49t-20 49t-49 20t-49 -20t-20 -49 t20 -49t49 -20z" />
+<glyph unicode="k" horiz-adv-x="970" d="M961 680q9 -10 9 -23v-552q0 -12 -7.5 -21.5t-19.5 -12.5l-902 -200q-2 -1 -7 -1q-11 0 -21 8q-13 10 -13 26v552q0 2 1 6q1 8 8 18l359 374q10 10 23 10h13q6 0 15.5 0.5t20.5 0.5q24 0 55.5 -1.5t66.5 -5t72 -10.5t71 -19q64 -21 111.5 -46.5t79.5 -48t48 -38t17 -16.5 zM902 295l-834 -186v-163l834 186v163zM902 615l-834 -186v-163l834 186v163zM285 1580q-12 0 -20.5 8.5t-8.5 20.5q0 13 8.5 21.5t20.5 8.5q30 0 58 -9.5t51 -26.5t39.5 -40.5t25.5 -51.5q12 4 30 4q25 0 47.5 -9.5t39 -26t26 -39t9.5 -47.5q0 -26 -9.5 -48t-26 -38.5 t-39 -26t-47.5 -9.5q-26 0 -48 9.5t-38.5 26t-26 38.5t-9.5 48t10.5 49t28.5 40q-9 42 -42.5 70t-78.5 28zM526 1475q-16 0 -27 -11t-11 -27t11 -27t27 -11t27 11t11 27t-11 27t-27 11zM512 1163q14 0 14 -14v-80h46q9 0 13 -9q1 -2 1 -5q0 -6 -4 -10l-87 -87q-4 -4 -10 -4 t-10 4l-87 87q-4 4 -4 10q0 3 1 5q4 9 13 9h46v80q0 14 14 14h54z" />
+<glyph unicode="l" horiz-adv-x="1953" d="M1553 110v-6q1 -5 1 -9v-9q0 -63 -37 -103.5t-103 -48.5q-9 -1 -20.5 -1.5t-24.5 -0.5q-40 0 -93 4.5t-107.5 12.5t-105.5 19t-86 24q-14 5 -27 10t-27 10q-5 -11 -14 -19t-22 -10l-592 -73h-5q-17 0 -30 11t-15 28v5q0 17 11 30t28 15l592 73h5q25 0 37 -20l48 33 q36 25 92.5 52t116.5 50.5t114 39.5t86 20q7 1 13.5 1.5t13.5 0.5q60 0 99.5 -35t49.5 -98zM294 -69q9 1 15 7.5t6 15.5v4q0 6 -5.5 12.5t-18.5 6.5q-10 0 -17 -7t-7 -18q1 -10 7.5 -15.5t15.5 -5.5h4zM1379 214q-17 -2 -44 -8.5t-60 -16.5t-69.5 -22.5t-70.5 -26.5 t-64 -28.5t-50 -28.5q21 7 51.5 14.5t65 15t71.5 15t70.5 13.5t61.5 11t45 7t31 3t27 1q37 0 61 -8q-14 29 -40.5 45t-62.5 16q-6 0 -11.5 -0.5t-11.5 -1.5zM1409 -33q45 6 72.5 29t35.5 59q-17 -10 -44 -18.5t-70 -13.5q-21 -3 -58 -6t-80.5 -5.5t-89 -4t-84.5 -1.5 q-18 0 -33.5 0.5t-27.5 1.5q28 -11 70.5 -19t88 -13.5t90.5 -8t80 -2.5q16 0 28.5 0.5t21.5 1.5zM1399 56q33 4 56 10.5t37.5 13.5t20.5 14t6 12q-1 8 -18.5 16t-57.5 8q-11 0 -24.5 -1t-28.5 -3q-18 -2 -47.5 -7t-64.5 -12t-73.5 -15t-75 -16.5t-69 -17t-54.5 -15.5 q16 -2 36 -2h43q40 0 86.5 1.5t90 3.5t80 4.5t57.5 5.5zM273 191q-5 23 -23 38t-42 15q-16 0 -16 16t16 16q33 0 58.5 -19.5t35.5 -49.5q10 2 16 2q28 0 47 -19.5t19 -46.5t-19 -46.5t-47 -19.5q-27 0 -46.5 19.5t-19.5 46.5q0 29 21 48zM338 185q-8 0 -13 -5t-5 -13 t5 -13.5t13 -5.5t13.5 5.5t5.5 13.5t-5.5 13t-13.5 5zM1179 1058q3 -6 3 -11v-237q0 -6 -4.5 -11t-11.5 -5h-429q-7 0 -11.5 5t-4.5 11v238v2q0 1 1 1q0 2 0.5 2t0.5 2l128 228q8 -2 14.5 -7.5t11.5 -12.5l-112 -200h374l-183 339l-38 -66q-12 10 -27 18l51 89q4 9 14 9 q9 0 14 -9zM1150 895h-396v-68h396v68zM1150 1031h-396v-68h396v68zM839 1309q-16 0 -16 16t16 16q34 0 60 -19.5t36 -50.5q10 2 16 2q29 0 48.5 -19.5t19.5 -47.5t-19.5 -47.5t-48.5 -19.5q-28 0 -47.5 19.5t-19.5 47.5q0 14 6 27t16 22q-5 23 -23.5 38.5t-43.5 15.5z M972 1249q-8 0 -13.5 -5.5t-5.5 -13.5t5.5 -13t13.5 -5t13.5 5t5.5 13t-5.5 13.5t-13.5 5.5zM183 1137l207 106v-70l-134 -70l134 -69v-72l-207 107v68zM567 1281q54 0 87.5 -26.5t33.5 -77.5q0 -47 -29 -70t-70 -31l-5 -30h-51l-12 81l3 2q48 2 67 14t19 32q0 37 -45 37 q-38 0 -75 -35l-46 50q22 24 52 39t71 15zM1251 1243l208 -106v-68l-208 -107v71l135 69l-135 70v71zM558 1012q20 0 33 -13t13 -33q0 -19 -13 -32.5t-33 -13.5q-19 0 -32.5 13.5t-13.5 32.5q0 20 13.5 33t32.5 13zM1703 853l27 47q2 5 7 5t8 -5l110 -203l1.5 -3t0.5 -3 v-126q0 -8 -9 -8h-227q-8 0 -8 8v127v1q0 1 0.5 1t0.5 1l68 120q8 -1 13 -10l-59 -106h198l-97 179l-20 -34zM1840 610h-210v-36h210v36zM1840 682h-210v-36h210v36zM1667 838q0 8 8 8q18 0 32 -10t19 -27q3 1 9 1q14 0 24.5 -10.5t10.5 -24.5q0 -15 -10.5 -25.5 t-24.5 -10.5q-15 0 -25.5 10.5t-10.5 25.5q0 14 12 26q-3 12 -12.5 20t-23.5 8q-8 0 -8 9zM1746 798q-10 0 -10 -10t10 -10t10 10t-10 10zM1637 910l-63 32v21l63 33v-22l-41 -21l41 -21v-22zM1691 986q-12 0 -23 -11l-14 16q14 16 37 16q17 0 27 -8t10 -24q0 -14 -8.5 -21 t-21.5 -9l-2 -10h-15l-3 26q26 1 26 14q0 11 -13 11zM1688 897q-5 0 -9.5 4t-4.5 10t4.5 10t9.5 4q14 0 14 -14t-14 -14zM1665 517l63 -33v-20l-63 -33v22l41 21l-41 21v22zM1613 528q16 0 26 -8t10 -23t-8.5 -22t-21.5 -9l-1 -9h-16l-3 25q15 1 21 4.5t6 9.5q0 11 -14 11 q-13 0 -23 -11l-14 16q14 16 38 16zM1610 446q14 0 14 -14t-14 -14t-14 14t14 14zM1917 1098q15 0 25.5 -10.5t10.5 -25.5v-687q0 -15 -10.5 -25t-25.5 -10h-356q-15 0 -25.5 10t-10.5 25v163h-522v-17q0 -18 8 -40.5t27.5 -42.5t52 -34t80.5 -14v-50h-700v50q48 0 80 14 t51.5 34t28 42.5t8.5 40.5v17h-539q-42 0 -71 28.5t-29 70.5v892q0 42 29 70.5t71 28.5h1442q42 0 71 -28.5t29 -70.5v-431h275zM1697 1066q0 -3 3 -3h78q3 0 3 3v5q0 2 -3 2h-78q-3 0 -3 -2v-5zM851 1591q-5 0 -5 -5t5 -5t5 5t-5 5zM821 1597q-12 0 -12 -11q0 -12 12 -12 q5 0 8.5 3.5t3.5 8.5t-3.5 8t-8.5 3zM870 574q14 0 23.5 9.5t9.5 23.5q0 13 -9.5 22.5t-23.5 9.5h-98q-14 0 -23.5 -9.5t-9.5 -22.5q0 -14 9.5 -23.5t23.5 -9.5h98zM1522 675v224q-5 0 -5 4v18q0 5 8 5l-3 8q-5 0 -5 4v18q0 5 8 5v101q0 15 10.5 25.5t25.5 10.5v447h-1480 v-870h1441zM1937 1039h-395v-641h395v641z" />
+<glyph unicode="m" horiz-adv-x="2276" d="M525 188q-45 -6 -89 -22.5t-81 -51t-64 -91t-38 -143.5h-171q-36 0 -61 23q-21 21 -21 49v6q3 23 9.5 60t19 76t31.5 74t48 56q24 17 63 36.5t85.5 39t96.5 38t97 34.5v-70q0 -35 20 -64.5t55 -49.5zM1200 224q28 -21 47.5 -56t31.5 -74t18.5 -76t9.5 -60v-7 q0 -29 -21 -48q-11 -11 -27.5 -17t-33.5 -6h-932q9 68 29 115t48 77.5t62 47t71 24t75.5 9t75.5 1.5q42 0 79 11.5t64.5 31.5t43.5 47t16 58v70q47 -16 97.5 -34.5t97 -38t85.5 -39t63 -36.5zM523 -71q18 0 31 13t13 31t-13 31t-31 13t-31 -13t-13 -31t13 -31t31 -13z M765 -71q18 0 31 13t13 31t-13 31t-31 13t-31 -13t-13 -31t13 -31t31 -13zM715 582q16 -27 47 -27q15 0 29.5 7t25.5 20h13q-5 -36 -31 -60t-65 -24q-26 0 -47.5 10t-32.5 27q-12 -17 -33 -27t-47 -10q-40 0 -66 24t-31 60h14q22 -27 54 -27q14 0 26.5 6.5t21.5 20.5 q5 9 13.5 13.5t17.5 4.5q17 0 30 -13q11 13 30 13q20 0 31 -18zM345 1176q-42 7 -77 30.5t-58 62.5q-12 22 -18 46t-6 47q0 50 24.5 94t70.5 70q43 25 93 25q17 0 34 -3.5t34 -9.5q17 36 45 65.5t67 47.5q47 22 99 22q66 0 124 -35t88 -99q0 -1 0.5 -1.5t0.5 -1.5 q17 8 35.5 11t36.5 3q49 0 93 -24.5t70 -70.5q25 -43 25 -93q0 -49 -24.5 -93t-70.5 -70q-31 -18 -68 -23v-212l-6 -82q18 -5 32.5 -25.5t14.5 -72.5q0 -25 -5.5 -49t-15.5 -44t-22.5 -34.5t-26.5 -20.5v-95q0 -23 -10.5 -44.5t-28.5 -35.5l-155 -123q-28 -22 -64 -22h-45 q-35 0 -63 22l-155 123q-19 14 -29 35.5t-10 44.5v95q-14 6 -27 20.5t-23 34.5t-15.5 44t-5.5 49q0 26 4 43.5t11 29t15.5 17.5t17.5 8l-6 82v212zM965 784q0 8 -1 18.5t-3 19.5t-6 15.5t-11 6.5q-2 -1 -5.5 -5.5t-8.5 -17.5q-5 -12 -18 -12q-2 0 -8 2q-12 5 -12 18q0 2 2 8 q0 1 3 4v88q-43 -11 -105.5 -16.5t-137.5 -5.5t-137.5 5.5t-104.5 16.5v-88l2 -4q2 -6 2 -8q0 -13 -13 -18q-6 -2 -8 -2q-12 0 -17 12q-6 13 -9.5 17.5t-4.5 5.5q-7 0 -11 -6.5t-6.5 -15.5t-3 -19.5t-0.5 -18.5q0 -10 3 -28t9 -35.5t15.5 -31.5t21.5 -17q10 0 15 -5 q6 -6 6 -14v-112q0 -30 24 -49l155 -123q17 -14 39 -14h45q22 0 39 14l155 123q24 19 24 49v112q0 8 6 14q5 5 13 5h4q4 0 12 9t16 24t14 35t6 44zM867 1486q-10 -5 -10 -17q0 -6 3 -10q5 -10 17 -10q5 0 10 3q24 13 50 13q16 0 28 -4q40 -11 62 -48q13 -23 13 -51 q0 -27 -13 -51t-39 -38q-9 -6 -9 -18q0 -6 2 -9q7 -10 17 -10q5 0 10 3q35 20 53.5 53.5t18.5 70.5q0 38 -19 70q-14 25 -36 42t-50 25q-20 5 -38 5q-38 0 -70 -19zM237 1400q-2 -10 -3.5 -19t-1.5 -19q0 -37 18 -70q7 -10 17 -10q5 0 10 3q10 4 10 17q0 6 -2 9 q-14 25 -14 51q0 7 1 14t3 14q11 40 48 62q23 13 51 13q27 0 51 -13t38 -39l3 -3q2 -13 6 -26t10 -25q5 -12 17 -12q3 0 9 2q11 6 11 18q0 2 -2 8q-8 16 -11 32t-3 32q0 43 22.5 80t63.5 56q31 15 64 15q25 0 51 -9q29 -10 50.5 -30t35.5 -47q5 -12 18 -12q2 0 8 2 q11 6 11 18q0 3 -2 9q-16 34 -44 59t-63 38q-16 6 -32 8.5t-33 2.5q-42 0 -81 -18q-44 -20 -71 -57.5t-35 -82.5q-20 17 -43.5 25t-48.5 8q-37 0 -70 -18q-25 -14 -42 -36t-25 -50zM1820 1062q-8 0 -14 6t-6 15q0 8 6 14t14 6t14 -6t6 -14q0 -9 -6 -15t-14 -6zM1585 722h427 v-73h-427v73zM1585 869h427v-74h-427v74zM2092 1488q38 0 71.5 -14.5t58.5 -39.5t39.5 -59t14.5 -72v-702q0 -38 -14.5 -72t-39.5 -59t-58.5 -39.5t-71.5 -14.5h-586q-38 0 -72 14.5t-59 39.5t-39.5 59t-14.5 72v111h-176l176 177v414q0 38 14.5 72t39.5 59t59 39.5t72 14.5 h586zM1678 1202q-8 0 -13 -5t-5 -13q0 -7 5 -12t13 -5q26 0 46 -16.5t25 -41.5q-23 -21 -23 -53q0 -30 21 -51t51 -21t51 21t21 51t-21 51.5t-51 21.5q-9 0 -18 -3q-10 33 -38 54.5t-64 21.5zM2046 886q0 7 -2 11l-226 414q-4 8 -15 10q-10 0 -15 -9l-55 -97q18 -8 30 -19 l40 71l197 -364h-402l120 214q-9 17 -27 22l-138 -245q-2 -4 -2 -8v-255q0 -7 4.5 -12t12.5 -5h461q7 0 12 5t5 12v255z" />
+<glyph unicode="n" horiz-adv-x="2271" d="M392 1451q-14 0 -23.5 9.5t-9.5 23.5t9.5 23t23.5 9q34 0 64.5 -10.5t56 -29.5t44 -45t28.5 -57q18 5 34 5q28 0 53 -10.5t43.5 -29t29 -43.5t10.5 -53q0 -29 -10.5 -53.5t-29 -43.5t-43.5 -29.5t-53 -10.5t-53 10.5t-43.5 29.5t-29 43.5t-10.5 53.5t11.5 54.5t31.5 44.5 q-10 47 -47 78t-87 31zM660 1330q-15 0 -26.5 -11t-11.5 -27t11.5 -27t26.5 -11q17 0 28 11t11 27t-11 27t-28 11zM1833 1385q90 -10 169.5 -28.5t139 -45.5t94.5 -63t35 -80v-1054q0 -37 -25 -68.5t-69.5 -56.5t-105 -44t-131 -32t-148.5 -19.5t-157 -6.5t-157 6.5 t-148.5 19.5t-131 32t-105 44t-69.5 56.5t-25 68.5v44q-81 -19 -173.5 -28t-189.5 -9q-79 0 -157 6.5t-148.5 19.5t-131 32t-105 44t-69.5 56.5t-25 68.5v665q0 43 33.5 78t90.5 62t133.5 46t163.5 29q3 -39 19.5 -72.5t43 -58t61.5 -39t74 -14.5q40 0 75 14.5t61.5 40 t43 60t18.5 73.5q50 -5 97 -12.5t91 -18.5q13 37 51.5 67t96.5 53t130.5 39t153.5 25q3 -39 19.5 -72.5t43 -58.5t61.5 -39.5t74 -14.5t74 14.5t61.5 39.5t43 58.5t19.5 72.5zM999 435q-81 -18 -173.5 -27.5t-189.5 -9.5q-82 0 -162.5 7t-153 20.5t-133.5 34t-104 47.5v-159 q0 -18 36 -43t106 -47.5t173.5 -38t237.5 -15.5q114 0 204 11t159 29v191zM999 866q-76 -18 -168 -28t-195 -10q-94 0 -180 8.5t-158 24t-127 37t-88 47.5v-209q0 -18 36 -43t106 -47.5t173.5 -38t237.5 -15.5q114 0 204 11.5t159 28.5v234zM2189 273q-44 -27 -105 -47.5 t-133.5 -34t-153 -20.5t-162.5 -7t-162.5 7t-153 20.5t-134 34t-104.5 47.5v-159q0 -18 36 -43t106.5 -47.5t174 -38t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v159zM2189 661q-44 -27 -105 -47t-133.5 -34t-153 -21t-162.5 -7t-162.5 7t-153 20.5t-134 34 t-104.5 47.5v-159q0 -18 36 -43t106.5 -47.5t174 -38t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v159zM2189 1100q-33 -26 -88 -47.5t-127.5 -37.5t-158.5 -24.5t-180 -8.5q-95 0 -181 8.5t-158 24.5t-127 37.5t-88 47.5v-209q0 -18 36 -43t106.5 -47.5t174 -38 t237.5 -15.5t237.5 15.5t174 38t106.5 47.5t36 43v209zM1408 1607q-14 0 -23.5 9.5t-9.5 23.5t9.5 23t23.5 9q34 0 65 -10.5t56 -29.5t43.5 -45t28.5 -57q15 4 34 4q28 0 53 -10.5t43.5 -29t29 -43.5t10.5 -53t-10.5 -53t-29 -43.5t-43.5 -29t-53 -10.5t-53 10.5t-43.5 29 t-29 43.5t-10.5 53q0 30 11.5 55.5t31.5 44.5q-10 47 -47 78t-87 31zM1677 1486q-16 0 -27 -11t-11 -27t11 -27t27 -11t27 11t11 27t-11 27t-27 11z" />
+<glyph unicode="o" horiz-adv-x="1397" d="M697 171q18 0 30.5 -12.5t12.5 -29.5v-103q-20 15 -43 15q-24 0 -42 -15v103q0 17 12.5 29.5t29.5 12.5zM697 -5q18 0 30.5 -12.5t12.5 -30.5q0 -17 -12.5 -30t-30.5 -13q-17 0 -29.5 13t-12.5 30q0 18 12.5 30.5t29.5 12.5zM696 1584q42 0 75 -22.5t56.5 -58.5t36 -80 t12.5 -87q0 -57 -10 -104t-25.5 -89.5t-33 -81.5t-33 -79t-25.5 -83t-10 -93v-603q-19 14 -43 14q-23 0 -42 -14v603q0 50 -10 93t-25.5 83t-33 79t-33 81.5t-25.5 89.5t-10 104q0 43 12.5 87t35.5 80t56.5 58.5t74.5 22.5zM697 1082q26 0 48.5 19.5t39.5 52.5t27 77.5 t10 95.5q0 42 -12 81.5t-33 67.5q-3 3 -8 3q-3 0 -4 -1q-5 -2 -5 -7q0 -3 1 -4q12 -38 12 -80q0 -46 -8.5 -87t-23 -72t-34 -49t-40.5 -18q-19 0 -33.5 12t-23.5 25q-3 3 -8 3q-3 0 -4 -1q-5 -2 -5 -8q0 -2 1 -3q17 -51 44.5 -79t58.5 -28zM198 1544q85 -2 134.5 -54 t49.5 -139q0 -26 -5.5 -65t-14.5 -86t-22 -98t-28 -100t-31.5 -92.5t-32.5 -74.5l-33 -62q13 -7 21.5 -19.5t8.5 -28.5v-722q0 -23 -16 -38.5t-38 -15.5q-23 0 -38.5 15.5t-15.5 38.5v722q0 16 8 28.5t21 19.5l-32 62q-16 31 -32.5 74.5t-31.5 92.5t-28 100t-22 98t-14.5 86 t-5.5 65q0 43 13 78t37 60.5t57.5 39.5t75.5 15q2 0 4 0.5t4 0.5t3.5 -0.5t3.5 -0.5zM40 1351q0 -20 4 -53.5t11 -75t17 -87t21.5 -88.5t24.5 -81.5t27 -64.5q-5 26 -9.5 64t-9 81t-7.5 88.5t-5.5 86.5t-4 75t-1.5 55q0 53 6 87.5t16 55.5q-43 -15 -66.5 -51.5t-23.5 -91.5z M220 4q0 13 -8.5 21.5t-20.5 8.5q-13 0 -21.5 -8.5t-8.5 -21.5q0 -12 8.5 -20.5t21.5 -8.5q12 0 20.5 8.5t8.5 20.5zM191 877q5 28 10.5 68.5t10 85.5t8.5 92.5t7 91t4.5 79t1.5 57.5q0 42 -4.5 71t-10.5 47.5t-13.5 26.5t-13.5 8t-13.5 -8t-14 -26.5t-11 -47.5t-4.5 -71 q0 -22 1.5 -57.5t4.5 -79t7 -91t9 -92.5t10 -85.5t11 -68.5zM237 901q13 27 26 65t25 81t21.5 88.5t16.5 87t11 75t4 53.5q0 55 -23 91.5t-66 51.5q10 -21 16 -55.5t6 -87.5q0 -21 -1.5 -55t-4 -75t-6 -86.5t-7.5 -88.5t-8.5 -81t-9.5 -64zM1372 1250q11 0 18 -7t7 -17v-942 q0 -11 -7 -18t-18 -7h-105q1 -51 6 -82t10.5 -56t10 -49.5t4.5 -62.5q0 -39 -8.5 -65.5t-20.5 -43t-25 -23.5t-22 -7t-22 7t-25 23.5t-20.5 43t-8.5 65.5q0 38 4.5 62.5t10 49.5t10.5 56t6 82h-104q-11 0 -18 7t-7 18v942q0 10 7 17t18 7h104q-2 45 -7 74t-10 52t-9.5 47.5 t-4.5 60.5q0 39 8.5 65.5t20.5 43t25 23.5t22 7t22 -7t25 -23.5t20.5 -43t8.5 -65.5q0 -36 -4 -60.5t-9.5 -47.5t-10.5 -52t-6 -74h104zM1342 1198h-36v-897h36v897z" />
+<glyph unicode="p" horiz-adv-x="1624" d="M191 1312h132v-39h-132v39zM191 961h132v-39h-132v39zM191 893h132v-38h-132v38zM811 782h-550v39h550v-39zM451 1104v-38h-190v38h190zM757 942q-63 57 -97 133t-34 161q0 72 25.5 139.5t74.5 121.5q58 66 135 98.5t158 32.5q70 0 137.5 -24t124.5 -75q63 -57 97 -133 t34 -161q0 -55 -15 -107.5t-44 -99.5l248 -221q22 -19 22 -50q0 -12 -4 -24t-13 -22q-10 -11 -22.5 -16.5t-26.5 -5.5q-12 0 -24 4t-22 13l-248 221q-54 -42 -116 -63t-128 -21q-70 0 -137.5 24t-124.5 75zM809 1423q-35 -38 -53.5 -86.5t-18.5 -100.5q0 -61 24.5 -116 t69.5 -95q41 -36 88.5 -53.5t98.5 -17.5q59 0 114.5 23.5t97.5 70.5q35 39 53 87t18 100q0 61 -24.5 116t-69.5 95q-41 36 -88.5 53.5t-98.5 17.5q-59 0 -114 -23.5t-97 -70.5zM1105 342q11 0 11 -11v-53q0 -10 -11 -10h-938q-10 0 -10 10v53q0 11 10 11h938zM835 1205 q-19 17 -19 41q0 22 15 37q17 19 41 19q20 0 37 -15l97 -87l148 159q16 18 41 18q21 0 38 -15q18 -17 18 -41q0 -22 -15 -38l-186 -199q-17 -18 -41 -18q-20 0 -37 14zM321 467q36 0 65 12t51.5 32.5t38.5 48t26 58.5h-492q-10 0 -10 11v847q0 10 10 10h648q-26 -39 -44 -80 h-534v-708h1105v131q43 17 80 42v-242q0 -11 -10 -11h-492q11 -31 28 -58.5t40 -48t53 -32.5t67 -12h7t13 -0.5t13 -1t7 -0.5l105 -73q5 -2 5 -8q0 -2 -1 -3q-2 -8 -9 -8h-910q-7 0 -9 8q-1 1 -1 3q0 6 5 8l105 73q1 0 7 0.5t13 1t13 0.5h7zM600 1104q3 -10 6.5 -19.5 t7.5 -18.5h-127v38h113zM584 1174q2 -10 3.5 -19t3.5 -19h-330v38h323zM580 1244v-8v-15t1 -15h-320v38h319zM261 1031h369q5 -10 11 -19.5t12 -19.5h-392v39zM1503 86q34 0 57 -7t37 -17.5t20.5 -21.5t6.5 -19t-6.5 -19t-20.5 -21.5t-37 -18t-57 -7.5q-31 0 -52 3.5 t-41 8.5t-45 9t-64 6v-91q0 -8 -6.5 -14.5t-14.5 -6.5h-815q-9 0 -15 6.5t-6 14.5v91q-44 -1 -71 -5t-48.5 -9t-42.5 -9t-54 -4q-34 0 -57 7t-37.5 17.5t-20.5 22t-6 19.5t6 19t20.5 21.5t37.5 17.5t57 7q33 0 54 -4t42.5 -8.5t48.5 -8.5t71 -5v90q0 9 6 15.5t15 6.5h815 q8 0 14.5 -6.5t6.5 -15.5v-90q39 1 64 5.5t45 9t41 8t52 3.5zM1256 -52h-776v-31h776v31z" />
+<glyph unicode="q" horiz-adv-x="1297" d="M637 1223q-19 0 -36 7t-29.5 19.5t-19.5 29.5t-7 36q0 20 7.5 37.5t21.5 29.5q-7 32 -32 53t-59 21q-9 0 -15.5 6.5t-6.5 15.5t6.5 15.5t15.5 6.5q46 0 82 -27t49 -69q10 3 23 3q19 0 36 -7t29.5 -19.5t19.5 -29.5t7 -36t-7 -36t-19.5 -29.5t-29.5 -19.5t-36 -7z M665 1374q-11 0 -18.5 -7.5t-7.5 -18.5t7.5 -18t18.5 -7t18.5 7t7.5 18t-7.5 18.5t-18.5 7.5zM218 1160q0 29 22.5 53t61.5 42t90.5 30.5t110.5 19.5q2 -26 13 -48.5t29 -39.5t41.5 -26.5t50.5 -9.5t50.5 10t41.5 27t29 40t12 50q63 -6 119 -18.5t98 -31t67 -43t25 -55.5 v-450q0 -28 -21 -51t-57 -41t-85 -30.5t-104 -19.5q-1 1 -1 3q-11 31 -37 48q61 6 107.5 17.5t78 24.5t47.5 26t16 23v108q-27 -17 -63.5 -29.5t-80 -22t-92 -15t-98.5 -6.5q-6 8 -14 13q-23 17 -53 17q-5 0 -10 -0.5t-10 -1.5l-46 -11l-31 35q-13 15 -30.5 23t-37.5 8 q-43 0 -69 -31l-17 -19q-29 8 -53 18t-43 22v-45q-21 -3 -37 -16q-6 -4 -10.5 -9t-9.5 -10v422zM275 973q0 -12 24.5 -29t71.5 -32.5t117 -26t161 -10.5t160.5 10.5t117 26t72 32.5t24.5 29v141q-22 -17 -59.5 -31.5t-86 -25t-106.5 -16.5t-122 -6t-122 6t-107 16.5t-86 25 t-59 31.5v-141zM1262 1639q15 0 25 -10t10 -24v-1222q0 -8 -3.5 -14.5t-6.5 -9.5l-265 -264q-5 -5 -12 -5h-310l-6 69h274v225q0 14 10.5 24.5t24.5 10.5h225v1151h-1158v-1411h150l-6 -69h-179q-14 0 -24.5 10t-10.5 24v1481q0 14 10.5 24t24.5 10h1227zM1178 349h-140 v-141zM622 144q10 0 15 1l19 -234q0 -14 -11 -20q-7 -5 -15 -5q-7 0 -11 3l-162 79l-162 -79q-6 -3 -12 -3q-8 0 -15 5q-11 9 -11 23l20 231q5 -1 15 -1h9t9 2l49 11l33 -38q26 -29 65 -29q18 0 35 7.5t29 21.5l33 38l49 -11q5 -2 9.5 -2h9.5zM457 618q33 0 62.5 -12.5 t51.5 -34.5t34.5 -51.5t12.5 -63.5q0 -33 -12.5 -62.5t-34.5 -51.5t-51.5 -34.5t-62.5 -12.5q-34 0 -63.5 12.5t-51.5 34.5t-34.5 51.5t-12.5 62.5q0 34 12.5 63.5t34.5 51.5t51.5 34.5t63.5 12.5zM755 359q-3 -13 -18 -20l-75 -32l-7 -81q-1 -15 -14 -24q-8 -6 -19 -6 q-5 0 -7 1l-80 18l-54 -62q-9 -11 -24 -11q-16 0 -25 11l-54 62l-79 -18q-3 -1 -8 -1q-10 0 -19 6q-11 9 -13 24l-8 81l-75 32q-13 6 -18 20q-2 6 -2 10q0 9 5 17l42 70l-42 71q-5 8 -5 16q0 3 2 11q2 6 6.5 11.5t11.5 7.5l75 33l8 81q2 16 13 23q10 7 20 7q2 0 3.5 -0.5 t3.5 -0.5l79 -18l54 61q9 11 24 11q14 0 25 -11l54 -61l80 18q2 0 3.5 0.5t3.5 0.5q10 0 19 -7q12 -8 14 -23l7 -81l75 -33q14 -5 18 -19q1 -3 1.5 -5.5t0.5 -5.5q0 -5 -1 -8.5t-3 -7.5l-42 -71l42 -70q2 -4 3 -7.5t1 -8.5q0 -3 -0.5 -5.5t-1.5 -5.5zM457 252q42 0 79.5 16 t65 44t43.5 65t16 79t-16 79.5t-43.5 65.5t-65 44t-79.5 16t-79.5 -16t-65.5 -44t-44 -65.5t-16 -79.5t16 -79t44 -65t65.5 -44t79.5 -16z" />
+<glyph unicode="r" horiz-adv-x="1649" d="M1274 386q8 0 13.5 -5t5.5 -13t-5.5 -13.5t-13.5 -5.5h-720q-19 0 -19 19q0 8 5.5 13t13.5 5h720zM1274 454q8 0 13.5 -5.5t5.5 -13.5t-5.5 -13.5t-13.5 -5.5h-720q-19 0 -19 19q0 8 5.5 13.5t13.5 5.5h720zM554 282q-26 0 -48 9.5t-39 26t-26.5 39t-9.5 47.5v247 q22 -27 53.5 -43.5t69.5 -16.5h601q22 0 37 15t15 37q0 20 -12 34q12 13 12 33t-12 34q12 13 12 34t-15 36q15 13 15 36v423h67q8 0 13.5 -5.5t5.5 -13.5v-746q0 -8 -5.5 -13.5t-13.5 -5.5h-720q-35 0 -60 -25t-25 -60t25 -60t60 -25h720q8 0 13.5 -5.5t5.5 -13.5t-5.5 -13 t-13.5 -5h-720zM554 624q-26 0 -48 9.5t-39 26.5t-26.5 39t-9.5 48v667q0 25 9.5 47.5t26.5 39t39 26t48 9.5h601q8 0 13.5 -5t5.5 -13v-668q0 -8 -5.5 -13.5t-13.5 -5.5h-601q-18 0 -33.5 -6.5t-27 -18t-18 -27t-6.5 -32.5q0 -35 25 -60t60 -25h601q19 0 19 -19 q0 -8 -5.5 -13.5t-13.5 -5.5h-601zM1155 729q19 0 19 -19q0 -8 -5.5 -13.5t-13.5 -5.5h-601q-8 0 -13.5 5.5t-5.5 13.5q0 19 19 19h601zM1155 796q8 0 13.5 -5t5.5 -13q0 -19 -19 -19h-601q-19 0 -19 19q0 8 5.5 13t13.5 5h601zM195 280q-17 14 -40 14t-40 -14v96 q0 17 11.5 28.5t28.5 11.5t28.5 -11.5t11.5 -28.5v-96zM115 211q0 17 11.5 28.5t28.5 11.5t28.5 -11.5t11.5 -28.5t-11.5 -28.5t-28.5 -11.5t-28.5 11.5t-11.5 28.5zM114 979q0 43 -8.5 80t-21 71.5t-27.5 68t-27.5 69.5t-21 76.5t-8.5 89.5q0 37 10.5 75t30.5 68.5t48.5 50 t64.5 19.5t64.5 -19.5t48.5 -50t30.5 -68.5t10.5 -75q0 -49 -8.5 -89.5t-21 -76.5t-27.5 -69.5t-27.5 -68t-21 -71.5t-8.5 -80v-534q-17 14 -40 14t-40 -14v534zM66 1310q0 -16 9 -32.5t22 -30t28.5 -22.5t29.5 -9q22 0 41.5 16.5t34 45t23 66.5t8.5 82q0 35 -10.5 69.5 t-28.5 58.5q-2 3 -6 3q-8 0 -8 -10q6 -17 8.5 -34.5t2.5 -34.5q0 -39 -7.5 -74.5t-20 -62.5t-29 -42.5t-34.5 -15.5q-17 0 -29 10.5t-20 21.5q-4 4 -8 4t-5 -3.5t-1 -5.5zM1584 1213q-12 6 -25 6t-25 -6l13 41q3 8 12 8t12 -8zM1623 1080q-12 12 -28.5 19.5t-35.5 7.5 t-35 -7.5t-28 -19.5l27 84q10 25 36 25q12 0 22 -6.5t15 -17.5zM1559 355q-26 0 -45 18.5t-19 45.5q0 26 19 44.5t45 18.5t45 -18.5t19 -44.5q0 -27 -19 -45.5t-45 -18.5zM1559 447q-12 0 -20 -8.5t-8 -19.5q0 -12 8 -20.5t20 -8.5t20.5 8.5t8.5 20.5q0 11 -8.5 19.5 t-20.5 8.5zM1623 486q-12 13 -28 20.5t-36 7.5q-19 0 -35.5 -7.5t-28.5 -20.5v526q0 26 19 44.5t45 18.5t45 -18.5t19 -44.5v-269q-18 18 -40 24v-177q25 -8 40 -25v-79zM1526 73q34 0 58 -7.5t38 -18t20.5 -22t6.5 -19.5t-6.5 -19t-20.5 -21.5t-38 -18t-58 -7.5 q-32 0 -53 3.5t-41.5 8t-45.5 9t-65 5.5v-91q0 -9 -6.5 -15.5t-15.5 -6.5h-829q-9 0 -15.5 6.5t-6.5 15.5v92q-45 -1 -72 -5t-49 -9t-43.5 -9t-54.5 -4q-35 0 -58.5 7.5t-37.5 18t-20.5 21.5t-6.5 19t6.5 19.5t20.5 22t37.5 18t58.5 7.5q33 0 54.5 -4t43.5 -9t49 -9t72 -5 v92q0 9 6.5 15.5t15.5 6.5h829q9 0 15.5 -6.5t6.5 -15.5v-92q40 1 65 5.5t45.5 9.5t41.5 8.5t53 3.5zM1274 -68h-789v-31h789v31z" />
+<glyph unicode="s" horiz-adv-x="3691" d="M1147 1404q58 24 121 24q84 0 157.5 -41.5t118.5 -119.5q21 -37 31 -76.5t10 -79.5q0 -83 -41 -157.5t-119 -118.5q-55 -31 -115 -39v-579q0 -20 -41 -37.5t-111.5 -31t-165.5 -21t-203 -7.5t-202.5 7.5t-165.5 21t-112 31t-41 37.5v580q-69 11 -129 50.5t-97 105.5 q-42 75 -42 157q0 83 41.5 157.5t119.5 118.5q37 21 76.5 31.5t80.5 10.5q59 0 113 -21q29 60 76.5 109.5t113.5 80.5q41 20 83 29t84 9q55 0 108.5 -15.5t100.5 -44.5t85 -71t63 -95q1 -2 1 -3t1 -2zM1063 1333q18 10 18 30q0 6 -3 14q-27 59 -73.5 101t-107.5 64 q-53 19 -109 19q-73 0 -136 -31q-75 -35 -121 -98.5t-58 -138.5q-68 57 -156 57q-30 0 -60 -7.5t-58 -23.5q-42 -24 -71 -61t-42 -84q-9 -32 -9 -64q0 -63 32 -118q9 -17 29 -17q9 0 16 4q17 9 17 29q0 9 -4 16q-23 41 -23 87q0 22 6 45q19 69 82 105q40 22 85 22t86 -22.5 t65 -64.5l4 -5q7 -45 27 -87q9 -19 30 -19q8 0 14 3q9 5 14 13t5 17q0 8 -3 14q-13 26 -18.5 53.5t-5.5 54.5q0 36 10 70.5t28.5 64.5t45.5 54.5t61 40.5q52 24 108 24q45 0 87 -15q48 -17 84.5 -50.5t58.5 -79.5q9 -19 30 -19q7 0 15 3zM1387 902q58 33 89.5 89.5 t31.5 119.5q0 62 -32 118q-23 42 -60.5 71t-84.5 42q-32 9 -64 9q-62 0 -118 -32q-8 -5 -12 -13t-4 -16q0 -9 4 -16q9 -17 29 -17q9 0 16 4q41 23 86 23q23 0 46 -6q69 -20 105 -82q22 -40 22 -85t-22.5 -86.5t-64.5 -65.5q-17 -9 -17 -29q0 -9 4 -16q5 -8 13 -12.5t16 -4.5 q7 0 17 5zM789 32q108 0 203 7.5t165.5 20.5t111.5 31t41 38v-115q0 -20 -41 -37.5t-111.5 -31t-165.5 -21t-203 -7.5t-202.5 7.5t-165.5 21t-112 31t-41 37.5v115q0 -20 41 -38t112 -31t165.5 -20.5t202.5 -7.5zM2742 35q106 0 200 7.5t164 20t110.5 30t40.5 37.5v-113 q0 -20 -40.5 -37.5t-110.5 -30t-164 -20t-200 -7.5q-107 0 -200.5 7.5t-163 20t-110 30t-40.5 37.5v113q0 -20 40.5 -37.5t110 -30t163 -20t200.5 -7.5zM3539 583v-282q16 -10 25.5 -25.5t9.5 -35.5q0 -27 -18 -47q16 -19 26.5 -46t10.5 -59q0 -18 -4 -42.5t-10.5 -50 t-15 -50t-18.5 -44t-20.5 -31.5t-20.5 -12t-21 12t-21 31.5t-18.5 44t-15 50t-10.5 49.5t-4 43q0 32 10.5 59t27.5 46q-8 9 -13.5 21t-5.5 26q0 20 9.5 35.5t25.5 25.5v260l-211 -65v-278q0 -20 -40.5 -37.5t-110.5 -30.5t-164 -20.5t-200 -7.5q-107 0 -200.5 7.5t-163 20.5 t-110 30.5t-40.5 37.5v287l-405 125v62l934 286l934 -286v-62z" />
+<glyph unicode="t" horiz-adv-x="1643" d="M1250 586q103 -18 184.5 -44.5t138 -58.5t86.5 -70t30 -79v-431q0 -13 -9 -22t-23 -9h-813q-13 0 -22 9t-9 22v413l-359 216q-15 9 -15 27v175h-408q-13 0 -22 9t-9 22v431q0 66 74.5 121.5t211.5 95.5q-1 5 -1.5 9.5t-0.5 9.5q0 26 10.5 47.5t27.5 38.5q-8 41 -40.5 68 t-76.5 27q-11 0 -19.5 8.5t-8.5 19.5q0 12 8.5 20t19.5 8q60 0 106 -34.5t64 -88.5q7 2 13.5 3t14.5 1q24 0 45.5 -9.5t37.5 -25.5t25.5 -37.5t9.5 -45.5v-5l337 -203q18 -9 18 -28v-146q92 -2 179 -8.5t169 -20.5q9 -2 17.5 -8t8.5 -18v-409zM439 1507q-14 0 -23.5 -9.5 t-9.5 -23.5t9.5 -23.5t23.5 -9.5t23.5 9.5t9.5 23.5t-9.5 23.5t-23.5 9.5zM313 1354q-43 -12 -82 -26t-70.5 -30t-54.5 -34t-34 -37h659l-230 139q-16 -24 -41.5 -38.5t-56.5 -14.5q-27 0 -50 11t-40 30zM813 491l-312 188v-102l312 -188v102zM813 734h-147l147 -89v89z M813 908h-750v-112h750v112zM813 1164h-750v-112h750v112zM957 365h660q-16 27 -55 51.5t-92.5 45.5t-117 37.5t-127.5 27.5zM876 820l250 151q-60 7 -123 11t-127 5v-47v-120zM876 645l311 188v102l-311 -188v-102zM876 389l311 188v102l-311 -188v-102zM1626 47h-750v-112 h750v112zM1626 303h-750v-113h750v113z" />
+<glyph unicode="u" horiz-adv-x="5737" d="M2650 414q-71 0 -132 26t-105 71t-69 105.5t-25 129.5t24.5 130t69 106.5t106.5 71.5t136 26q91 0 150 -27.5t104 -71.5l-90 -104q-38 34 -77.5 53.5t-87.5 19.5q-41 0 -75.5 -16t-59 -43t-38.5 -63.5t-14 -78.5t13.5 -79t38.5 -65t59.5 -44t75.5 -16q56 0 93.5 20 t75.5 55l90 -91q-25 -26 -51.5 -47.5t-58 -36.5t-69.5 -23t-84 -8zM3301 426v53q-26 -29 -62 -46t-87 -17q-35 0 -65.5 10t-53.5 29t-36.5 47.5t-13.5 64.5q0 41 14.5 71t41 49.5t62.5 29t80 9.5q38 0 66.5 -5.5t54.5 -14.5v8q0 44 -26.5 67.5t-79.5 23.5q-40 0 -71 -7.5 t-65 -19.5l-35 106q41 18 84.5 29t106.5 11q115 0 167.5 -56t52.5 -157v-285h-135zM3304 624q-18 8 -41 13.5t-48 5.5q-45 0 -71 -17.5t-26 -51.5q0 -29 21 -45t55 -16q50 0 80 24t30 62v25zM3874 426l-128 201l-49 -52v-149h-140v671h140v-358l164 180h167l-188 -195 l194 -298h-160zM4537 623h-343q10 -48 41.5 -72t78.5 -24q35 0 63 11.5t57 38.5l80 -70q-35 -43 -84.5 -68t-117.5 -25q-56 0 -103 18.5t-81 52.5t-53.5 80.5t-19.5 103.5q0 54 18 101t50 82t76.5 55.5t98.5 20.5q62 0 107.5 -22t75 -59.5t44 -86t14.5 -100.5 q0 -12 -0.5 -19.5t-1.5 -17.5zM4298 816q-44 0 -71 -28.5t-35 -76.5h210q-6 47 -32.5 76t-71.5 29zM4886 416q-73 0 -143.5 25.5t-129.5 77.5l84 101q44 -36 90.5 -57.5t101.5 -21.5q44 0 68.5 16.5t24.5 44.5q0 14 -5 25t-19.5 20.5t-39.5 18.5t-65 20q-49 12 -88.5 26.5 t-67.5 36.5t-43 54t-15 80q0 44 16.5 80t46.5 61.5t71.5 39.5t90.5 14q71 0 130.5 -21t109.5 -60l-74 -107q-43 30 -84.5 46.5t-82.5 16.5q-42 0 -62.5 -16t-20.5 -40q0 -17 6 -28.5t21.5 -21t42.5 -18t69 -19.5q49 -12 87 -28t64 -38.5t39.5 -53t13.5 -72.5 q0 -49 -17.5 -86.5t-49 -63t-75 -39t-95.5 -13.5zM5388 941v-137h307v-129h-307v-249h-141v643h490v-128h-349zM1016 836l462 -114q60 23 94 52.5t34 61.5v185q0 38 -46.5 71.5t-126.5 58.5t-187.5 39.5t-229.5 14.5t-229 -14.5t-187 -39.5t-126.5 -58.5t-46.5 -71.5v-185 q0 -38 46.5 -71.5t126.5 -58.5t187 -39.5t229 -14.5v184zM1478 538l-462 114v-184l462 -114q60 23 94 52.5t34 61.5v184q0 -32 -34 -61.5t-94 -52.5zM427 468q0 -38 46.5 -71.5t126.5 -58.5t187 -39.5t229 -14.5v184q-122 0 -229 14.5t-187 39.5t-126.5 58.5t-46.5 71.5 v-184zM1552 -128q-77 0 -148.5 7t-139 19t-132 26.5t-127.5 29.5q-64 15 -126.5 29.5t-127 26t-131.5 18t-139 6.5q-102 0 -205 -15t-213 -44l-63 -17v1586l37 10q118 32 229 47.5t221 15.5q75 0 144.5 -6.5t135.5 -17.5t129 -25t125 -28l18 -4q64 -15 126.5 -29.5 t127 -25.5t131.5 -17.5t140 -6.5q100 0 199.5 13.5t206.5 42.5l63 16v-1585l-38 -10q-116 -32 -225 -47t-218 -15zM481 135q77 0 148.5 -7t139 -19t132 -27t127.5 -30q64 -15 126.5 -29.5t126.5 -25.5t131 -17.5t140 -6.5q184 0 380 49v1378q-188 -43 -368 -43 q-77 0 -148.5 7t-139.5 18.5t-133 26t-128 29.5q-64 15 -127 29t-128 25t-132.5 17.5t-140.5 6.5q-187 0 -386 -49v-1378q194 46 380 46z" />
+<glyph unicode="v" horiz-adv-x="1697" d="M849 1588q117 0 225.5 -30.5t202.5 -85.5t171.5 -132.5t132.5 -171.5t85.5 -202.5t30.5 -225.5t-30.5 -225.5t-85.5 -203t-132.5 -172t-171.5 -132.5t-202.5 -85.5t-225.5 -30.5h-849v849q0 117 30.5 225.5t85.5 202.5t132.5 171.5t172 132.5t203 85.5t225.5 30.5z M923 162q108 0 203 41t165.5 112t111.5 165.5t41 202.5q0 112 -43 208.5t-118 168.5q-43 57 -96 98q-73 77 -171 120t-207 43q-56 0 -111 -12q-92 -20 -167.5 -67.5t-129.5 -115.5t-84 -151t-30 -173q0 -56 12 -111q11 -52 31.5 -98.5t48.5 -88.5l-64 -305l346 35 q58 -35 124 -53.5t138 -18.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#x2000;" horiz-adv-x="862" />
+<glyph unicode="&#x2001;" horiz-adv-x="1725" />
+<glyph unicode="&#x2002;" horiz-adv-x="862" />
+<glyph unicode="&#x2003;" horiz-adv-x="1725" />
+<glyph unicode="&#x2004;" horiz-adv-x="575" />
+<glyph unicode="&#x2005;" horiz-adv-x="431" />
+<glyph unicode="&#x2006;" horiz-adv-x="287" />
+<glyph unicode="&#x2007;" horiz-adv-x="287" />
+<glyph unicode="&#x2008;" horiz-adv-x="215" />
+<glyph unicode="&#x2009;" horiz-adv-x="345" />
+<glyph unicode="&#x200a;" horiz-adv-x="95" />
+<glyph unicode="&#x202f;" horiz-adv-x="345" />
+<glyph unicode="&#x205f;" horiz-adv-x="431" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0v0v0v0v0z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf
new file mode 100644 (file)
index 0000000..13d5445
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf differ
diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff
new file mode 100644 (file)
index 0000000..073baab
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff differ
diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2
new file mode 100644 (file)
index 0000000..6e71eaf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 differ
diff --git a/production/example_apps/zippy_maps/webroot/img/cake-logo.png b/production/example_apps/zippy_maps/webroot/img/cake-logo.png
new file mode 100644 (file)
index 0000000..41939ef
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake-logo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/cake.icon.png b/production/example_apps/zippy_maps/webroot/img/cake.icon.png
new file mode 100644 (file)
index 0000000..394fa42
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake.icon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/cake.logo.svg b/production/example_apps/zippy_maps/webroot/img/cake.logo.svg
new file mode 100644 (file)
index 0000000..e73abb5
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+         width="225.994px" height="45.258px" viewBox="0 0 225.994 45.258" enable-background="new 0 0 225.994 45.258"
+         xml:space="preserve">
+    <g>
+        <g>
+            <path fill="#FFFFFF" d="M28.993,18.11l22.685,5.632c3.948-1.541,6.318-3.505,6.318-5.632V9.052C57.996,4.058,45.011,0,28.993,0
+                C12.979,0,0,4.058,0,9.052v9.058c0,4.995,12.979,9.05,28.993,9.05V18.11z"/>
+            <path fill="#FFFFFF" d="M51.676,32.796L28.993,27.16v9.051l22.683,5.638c3.95-1.549,6.322-3.504,6.322-5.638V27.16
+                C57.999,29.292,55.626,31.25,51.676,32.796"/>
+            <path fill="#FFFFFF" d="M0,27.16v9.052c0,4.996,12.979,9.047,28.993,9.047v-9.047C12.979,36.211,0,32.155,0,27.16"/>
+            <path fill="#FFFFFF" d="M82.884,35.384c-7.082,0-12.339-5.467-12.339-12.378V22.94c0-6.837,5.154-12.443,12.546-12.443
+                c4.536,0,7.253,1.515,9.487,3.713l-3.368,3.882c-1.857-1.685-3.749-2.715-6.156-2.715c-4.055,0-6.975,3.368-6.975,7.493v0.069
+                c0,4.124,2.849,7.562,6.975,7.562c2.751,0,4.435-1.1,6.324-2.82l3.367,3.402C90.273,33.734,87.525,35.384,82.884,35.384"/>
+            <path fill="#FFFFFF" d="M107.321,27.546c-0.894-0.416-2.064-0.688-3.334-0.688c-2.234,0-3.611,0.894-3.611,2.544v0.068
+                c0,1.406,1.171,2.231,2.852,2.231c2.441,0,4.093-1.335,4.093-3.229V27.546z M107.215,34.968v-1.99
+                c-1.269,1.408-3.021,2.337-5.568,2.337c-3.469,0-6.323-1.994-6.323-5.637v-0.069c0-4.023,3.056-5.879,7.422-5.879
+                c1.859,0,3.2,0.312,4.506,0.756v-0.311c0-2.162-1.342-3.368-3.955-3.368c-1.993,0-3.4,0.379-5.086,0.997l-1.309-3.986
+                c2.03-0.896,4.023-1.479,7.15-1.479c5.708,0,8.216,2.957,8.216,7.943v10.686H107.215z"/>
+        </g>
+        <polygon fill="#FFFFFF" points="128.629,34.968 123.816,27.443 121.994,29.368 121.994,34.968 116.772,34.968 116.772,9.876
+            121.994,9.876 121.994,23.25 128.115,16.547 134.37,16.547 127.358,23.797 134.609,34.968  "/>
+        <g>
+            <path fill="#FFFFFF" d="M144.469,20.396c-2.166,0-3.578,1.547-3.989,3.917h7.872C148.041,21.975,146.666,20.396,144.469,20.396
+                 M153.37,27.583h-12.819c0.514,2.371,2.164,3.605,4.504,3.605c1.752,0,3.022-0.552,4.465-1.89l2.994,2.647
+                c-1.723,2.132-4.195,3.438-7.529,3.438c-5.535,0-9.628-3.885-9.628-9.521v-0.07c0-5.261,3.75-9.591,9.112-9.591
+                c6.149,0,8.97,4.779,8.97,10.005v0.065C153.438,26.792,153.405,27.099,153.37,27.583"/>
+            <path fill="#FFFFFF" d="M171.551,19.329c0-2.371-1.647-3.641-4.296-3.641h-4.09v7.358h4.193c2.646,0,4.192-1.586,4.192-3.646
+                V19.329z M167.184,27.751h-4.019v7.217h-5.292v-24.06h9.83c5.738,0,9.209,3.403,9.209,8.321v0.065
+                C176.912,24.864,172.58,27.751,167.184,27.751"/>
+        </g>
+        <polygon fill="#FFFFFF" points="195.885,34.968 195.885,25.307 186.122,25.307 186.122,34.968 180.831,34.968 180.831,10.908
+            186.122,10.908 186.122,20.43 195.885,20.43 195.885,10.908 201.176,10.908 201.176,34.968     "/>
+        <g>
+            <path fill="#FFFFFF" d="M220.63,19.329c0-2.371-1.65-3.641-4.295-3.641h-4.091v7.358h4.191c2.649,0,4.194-1.586,4.194-3.646
+                V19.329z M216.268,27.751h-4.023v7.217h-5.292v-24.06h9.829c5.737,0,9.213,3.403,9.213,8.321v0.065
+                C225.994,24.864,221.662,27.751,216.268,27.751"/>
+        </g>
+    </g>
+</svg>
diff --git a/production/example_apps/zippy_maps/webroot/img/cake.power.gif b/production/example_apps/zippy_maps/webroot/img/cake.power.gif
new file mode 100644 (file)
index 0000000..8f8d570
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake.power.gif differ
diff --git a/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png b/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png
new file mode 100644 (file)
index 0000000..b8e9bfb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/2hand.png b/production/example_apps/zippy_maps/webroot/img/icons/2hand.png
new file mode 100644 (file)
index 0000000..b351f94
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/2hand.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png b/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png
new file mode 100644 (file)
index 0000000..3f28896
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt b/production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt
new file mode 100644 (file)
index 0000000..d7b056a
--- /dev/null
@@ -0,0 +1,10 @@
+The project "Map Icons Collection" was created by Nicolas Mollet under the Creative Commons Attribution-Share Alike 3.0 Unported license (CC BY SA 3.0 - http://creativecommons.org/licenses/by-sa/3.0/).
+
+This license lets you remix, tweak, and build upon our work even for commercial reasons, as long as you credit the project and license your new creations under the identical terms.
+
+Please credit: Maps Icons Collection https://mapicons.mapsmarker.com
+Logo available at https://mapicons.mapsmarker.com/wp-content/uploads/2011/03/miclogo-88x31.gif
+
+Some icons are derived from the project SJJB Map Icons (http://www.sjjb.co.uk/mapicons/) by SJJB Management (http://www.sjjb.co.uk/), licensed under Creative Commons Public Domain Dedication (http://creativecommons.org/licenses/publicdomain/).
+
+Some icons are derived from the project User Interface Design Framework (http://www.webalys.com/design-interface-application-framework.php) by Webalys (http://www.webalys.com/).
\ No newline at end of file
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/abduction.png b/production/example_apps/zippy_maps/webroot/img/icons/abduction.png
new file mode 100644 (file)
index 0000000..860d9ce
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/abduction.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png b/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png
new file mode 100644 (file)
index 0000000..9eba194
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png b/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png
new file mode 100644 (file)
index 0000000..db0c6fe
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png b/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png
new file mode 100644 (file)
index 0000000..bbe7496
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/administration.png b/production/example_apps/zippy_maps/webroot/img/icons/administration.png
new file mode 100644 (file)
index 0000000..610fb8d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/administration.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png b/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png
new file mode 100644 (file)
index 0000000..695ee40
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png b/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png
new file mode 100644 (file)
index 0000000..dff6ca7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png b/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png
new file mode 100644 (file)
index 0000000..7396866
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png b/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png
new file mode 100644 (file)
index 0000000..62032d8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png b/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png
new file mode 100644 (file)
index 0000000..28ed51d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png b/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png
new file mode 100644 (file)
index 0000000..047bdb4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport.png b/production/example_apps/zippy_maps/webroot/img/icons/airport.png
new file mode 100644 (file)
index 0000000..a03d4d7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png
new file mode 100644 (file)
index 0000000..203468e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png
new file mode 100644 (file)
index 0000000..33d4e40
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png
new file mode 100644 (file)
index 0000000..c270f21
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png b/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png
new file mode 100644 (file)
index 0000000..c40adaa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/algae.png b/production/example_apps/zippy_maps/webroot/img/icons/algae.png
new file mode 100644 (file)
index 0000000..04da6fa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/algae.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/alien.png b/production/example_apps/zippy_maps/webroot/img/icons/alien.png
new file mode 100644 (file)
index 0000000..071d697
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/alien.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/alligator.png b/production/example_apps/zippy_maps/webroot/img/icons/alligator.png
new file mode 100644 (file)
index 0000000..db0c903
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/alligator.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png
new file mode 100644 (file)
index 0000000..27e539f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png
new file mode 100644 (file)
index 0000000..0d6b123
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png b/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png
new file mode 100644 (file)
index 0000000..0ab61bd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png b/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png
new file mode 100644 (file)
index 0000000..8056a3e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png
new file mode 100644 (file)
index 0000000..e578f55
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png b/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png
new file mode 100644 (file)
index 0000000..05b5e18
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png b/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png
new file mode 100644 (file)
index 0000000..494d496
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png b/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png
new file mode 100644 (file)
index 0000000..13be871
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png b/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png
new file mode 100644 (file)
index 0000000..9d8ad2f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/apple.png b/production/example_apps/zippy_maps/webroot/img/icons/apple.png
new file mode 100644 (file)
index 0000000..e19c9e7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/apple.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png b/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png
new file mode 100644 (file)
index 0000000..72ccb78
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/arch.png b/production/example_apps/zippy_maps/webroot/img/icons/arch.png
new file mode 100644 (file)
index 0000000..a695569
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/arch.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/archery.png b/production/example_apps/zippy_maps/webroot/img/icons/archery.png
new file mode 100644 (file)
index 0000000..b11bca8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/archery.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/army.png b/production/example_apps/zippy_maps/webroot/img/icons/army.png
new file mode 100644 (file)
index 0000000..f5556e0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/army.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png b/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png
new file mode 100644 (file)
index 0000000..67ba8e3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png b/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png
new file mode 100644 (file)
index 0000000..8efffeb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png b/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png
new file mode 100644 (file)
index 0000000..922e0eb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/atv.png b/production/example_apps/zippy_maps/webroot/img/icons/atv.png
new file mode 100644 (file)
index 0000000..a594333
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/atv.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/audio.png b/production/example_apps/zippy_maps/webroot/img/icons/audio.png
new file mode 100644 (file)
index 0000000..9307923
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/audio.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png b/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png
new file mode 100644 (file)
index 0000000..c165046
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png b/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png
new file mode 100644 (file)
index 0000000..9b03a9b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/award.png b/production/example_apps/zippy_maps/webroot/img/icons/award.png
new file mode 100644 (file)
index 0000000..e3ac637
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/award.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png b/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png
new file mode 100644 (file)
index 0000000..6b65545
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bags.png b/production/example_apps/zippy_maps/webroot/img/icons/bags.png
new file mode 100644 (file)
index 0000000..69f8a6f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bags.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bank.png b/production/example_apps/zippy_maps/webroot/img/icons/bank.png
new file mode 100644 (file)
index 0000000..9a427cb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bank.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar.png b/production/example_apps/zippy_maps/webroot/img/icons/bar.png
new file mode 100644 (file)
index 0000000..92d9b71
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png b/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png
new file mode 100644 (file)
index 0000000..7525211
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png b/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png
new file mode 100644 (file)
index 0000000..9fc4c81
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png b/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png
new file mode 100644 (file)
index 0000000..de349a5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barber.png b/production/example_apps/zippy_maps/webroot/img/icons/barber.png
new file mode 100644 (file)
index 0000000..884f052
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barber.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barrier.png b/production/example_apps/zippy_maps/webroot/img/icons/barrier.png
new file mode 100644 (file)
index 0000000..4021455
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barrier.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/baseball.png b/production/example_apps/zippy_maps/webroot/img/icons/baseball.png
new file mode 100644 (file)
index 0000000..4e81eaf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/baseball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/basketball.png b/production/example_apps/zippy_maps/webroot/img/icons/basketball.png
new file mode 100644 (file)
index 0000000..1906c33
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/basketball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bats.png b/production/example_apps/zippy_maps/webroot/img/icons/bats.png
new file mode 100644 (file)
index 0000000..7978bdc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bats.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png b/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png
new file mode 100644 (file)
index 0000000..1f9d7c3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png b/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png
new file mode 100644 (file)
index 0000000..ee96f34
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beach.png b/production/example_apps/zippy_maps/webroot/img/icons/beach.png
new file mode 100644 (file)
index 0000000..58c79fa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beach.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png b/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png
new file mode 100644 (file)
index 0000000..25f840f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png b/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png
new file mode 100644 (file)
index 0000000..1b7008d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png b/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png
new file mode 100644 (file)
index 0000000..ce88e7d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png
new file mode 100644 (file)
index 0000000..af0e817
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png b/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png
new file mode 100644 (file)
index 0000000..e6fbc07
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png b/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png
new file mode 100644 (file)
index 0000000..19db88d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png b/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png
new file mode 100644 (file)
index 0000000..cdc265d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png b/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png
new file mode 100644 (file)
index 0000000..8591188
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png b/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png
new file mode 100644 (file)
index 0000000..694c56e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png
new file mode 100644 (file)
index 0000000..cb614fa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png b/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png
new file mode 100644 (file)
index 0000000..94f9d19
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png b/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png
new file mode 100644 (file)
index 0000000..096537d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/blast.png b/production/example_apps/zippy_maps/webroot/img/icons/blast.png
new file mode 100644 (file)
index 0000000..4bce639
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/blast.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png b/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png
new file mode 100644 (file)
index 0000000..dd24010
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boat.png b/production/example_apps/zippy_maps/webroot/img/icons/boat.png
new file mode 100644 (file)
index 0000000..4ce1c59
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png b/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png
new file mode 100644 (file)
index 0000000..702801f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png b/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png
new file mode 100644 (file)
index 0000000..0b136b2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bollie.png b/production/example_apps/zippy_maps/webroot/img/icons/bollie.png
new file mode 100644 (file)
index 0000000..8f4f6dd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bollie.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bomb.png b/production/example_apps/zippy_maps/webroot/img/icons/bomb.png
new file mode 100644 (file)
index 0000000..2ae136e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bomb.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png
new file mode 100644 (file)
index 0000000..b6ee09b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png b/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png
new file mode 100644 (file)
index 0000000..990ce75
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bowling.png b/production/example_apps/zippy_maps/webroot/img/icons/bowling.png
new file mode 100644 (file)
index 0000000..693c708
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bowling.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boxing.png b/production/example_apps/zippy_maps/webroot/img/icons/boxing.png
new file mode 100644 (file)
index 0000000..bd01e4a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boxing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bread.png b/production/example_apps/zippy_maps/webroot/img/icons/bread.png
new file mode 100644 (file)
index 0000000..ee60711
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bread.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png b/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png
new file mode 100644 (file)
index 0000000..f5478b9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png b/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png
new file mode 100644 (file)
index 0000000..834514a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png b/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png
new file mode 100644 (file)
index 0000000..8edc948
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png b/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png
new file mode 100644 (file)
index 0000000..381ed7b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png b/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png
new file mode 100644 (file)
index 0000000..848fda2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png
new file mode 100644 (file)
index 0000000..9af84ea
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bus.png b/production/example_apps/zippy_maps/webroot/img/icons/bus.png
new file mode 100644 (file)
index 0000000..47ea3c8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bus.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/busstop.png b/production/example_apps/zippy_maps/webroot/img/icons/busstop.png
new file mode 100644 (file)
index 0000000..6361a85
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/busstop.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bustour.png b/production/example_apps/zippy_maps/webroot/img/icons/bustour.png
new file mode 100644 (file)
index 0000000..06ab4f0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bustour.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png b/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png
new file mode 100644 (file)
index 0000000..8745cc4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png b/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png
new file mode 100644 (file)
index 0000000..6329061
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png
new file mode 100644 (file)
index 0000000..3c9bde9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png b/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png
new file mode 100644 (file)
index 0000000..9c1b8be
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png b/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png
new file mode 100644 (file)
index 0000000..40bf1d0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png b/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png
new file mode 100644 (file)
index 0000000..fc18408
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png b/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png
new file mode 100644 (file)
index 0000000..023710b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png b/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png
new file mode 100644 (file)
index 0000000..d877e40
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/candy.png b/production/example_apps/zippy_maps/webroot/img/icons/candy.png
new file mode 100644 (file)
index 0000000..6862980
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/candy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png b/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png
new file mode 100644 (file)
index 0000000..a186b6e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/car.png b/production/example_apps/zippy_maps/webroot/img/icons/car.png
new file mode 100644 (file)
index 0000000..f529bbc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/car.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png b/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png
new file mode 100644 (file)
index 0000000..39d16cd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/carrental.png b/production/example_apps/zippy_maps/webroot/img/icons/carrental.png
new file mode 100644 (file)
index 0000000..17eeed7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/carrental.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/carwash.png b/production/example_apps/zippy_maps/webroot/img/icons/carwash.png
new file mode 100644 (file)
index 0000000..fb43f3a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/carwash.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png b/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png
new file mode 100644 (file)
index 0000000..279d796
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png b/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png
new file mode 100644 (file)
index 0000000..b0214e8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png b/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png
new file mode 100644 (file)
index 0000000..893329f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png b/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png
new file mode 100644 (file)
index 0000000..5b3a5a1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/caution.png b/production/example_apps/zippy_maps/webroot/img/icons/caution.png
new file mode 100644 (file)
index 0000000..2287080
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/caution.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png
new file mode 100644 (file)
index 0000000..af4fee2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cctv.png b/production/example_apps/zippy_maps/webroot/img/icons/cctv.png
new file mode 100644 (file)
index 0000000..c0894fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cctv.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png b/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png
new file mode 100644 (file)
index 0000000..0786fcc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png b/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png
new file mode 100644 (file)
index 0000000..dea2df0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png
new file mode 100644 (file)
index 0000000..aaf5201
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png
new file mode 100644 (file)
index 0000000..b785ad7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cheese.png b/production/example_apps/zippy_maps/webroot/img/icons/cheese.png
new file mode 100644 (file)
index 0000000..6f33a17
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cheese.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png
new file mode 100644 (file)
index 0000000..1303bf8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png
new file mode 100644 (file)
index 0000000..5fca062
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png b/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png
new file mode 100644 (file)
index 0000000..461a2da
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png b/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png
new file mode 100644 (file)
index 0000000..59cc506
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png b/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png
new file mode 100644 (file)
index 0000000..f31cce3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/church-2.png b/production/example_apps/zippy_maps/webroot/img/icons/church-2.png
new file mode 100644 (file)
index 0000000..963ddc1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/church-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cinema.png b/production/example_apps/zippy_maps/webroot/img/icons/cinema.png
new file mode 100644 (file)
index 0000000..8b36705
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cinema.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/circus.png b/production/example_apps/zippy_maps/webroot/img/icons/circus.png
new file mode 100644 (file)
index 0000000..63d3843
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/circus.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png b/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png
new file mode 100644 (file)
index 0000000..c7fa383
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png b/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png
new file mode 100644 (file)
index 0000000..dc08aa0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/climbing.png b/production/example_apps/zippy_maps/webroot/img/icons/climbing.png
new file mode 100644 (file)
index 0000000..1773b5a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/climbing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clock.png b/production/example_apps/zippy_maps/webroot/img/icons/clock.png
new file mode 100644 (file)
index 0000000..7bb357a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clock.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png b/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png
new file mode 100644 (file)
index 0000000..79b936e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png b/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png
new file mode 100644 (file)
index 0000000..cf748bd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png b/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png
new file mode 100644 (file)
index 0000000..18f6bb1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png b/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png
new file mode 100644 (file)
index 0000000..86c76d9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png b/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png
new file mode 100644 (file)
index 0000000..b58a658
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/coffee.png b/production/example_apps/zippy_maps/webroot/img/icons/coffee.png
new file mode 100644 (file)
index 0000000..47da029
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/coffee.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/coins.png b/production/example_apps/zippy_maps/webroot/img/icons/coins.png
new file mode 100644 (file)
index 0000000..3604df4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/coins.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png b/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png
new file mode 100644 (file)
index 0000000..f6723f1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comics.png b/production/example_apps/zippy_maps/webroot/img/icons/comics.png
new file mode 100644 (file)
index 0000000..a069209
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comics.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png b/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png
new file mode 100644 (file)
index 0000000..7440b64
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png b/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png
new file mode 100644 (file)
index 0000000..6a458e4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/company.png b/production/example_apps/zippy_maps/webroot/img/icons/company.png
new file mode 100644 (file)
index 0000000..df9728d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/company.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/compost.png b/production/example_apps/zippy_maps/webroot/img/icons/compost.png
new file mode 100644 (file)
index 0000000..7fb98bb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/compost.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/computers.png b/production/example_apps/zippy_maps/webroot/img/icons/computers.png
new file mode 100644 (file)
index 0000000..b82761f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/computers.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/condominium.png b/production/example_apps/zippy_maps/webroot/img/icons/condominium.png
new file mode 100644 (file)
index 0000000..34699b9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/condominium.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conference.png b/production/example_apps/zippy_maps/webroot/img/icons/conference.png
new file mode 100644 (file)
index 0000000..9c995d6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conference.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/congress.png b/production/example_apps/zippy_maps/webroot/img/icons/congress.png
new file mode 100644 (file)
index 0000000..9ca2720
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/congress.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/construction.png b/production/example_apps/zippy_maps/webroot/img/icons/construction.png
new file mode 100644 (file)
index 0000000..31955bc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/construction.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png b/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png
new file mode 100644 (file)
index 0000000..86b4f08
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/contract.png b/production/example_apps/zippy_maps/webroot/img/icons/contract.png
new file mode 100644 (file)
index 0000000..1b6c528
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/contract.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png b/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png
new file mode 100644 (file)
index 0000000..76fb1ae
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png b/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png
new file mode 100644 (file)
index 0000000..6cf6c7f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png b/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png
new file mode 100644 (file)
index 0000000..8cad7a4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/convertible.png b/production/example_apps/zippy_maps/webroot/img/icons/convertible.png
new file mode 100644 (file)
index 0000000..6427150
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/convertible.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/corral.png b/production/example_apps/zippy_maps/webroot/img/icons/corral.png
new file mode 100644 (file)
index 0000000..529563d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/corral.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/country.png b/production/example_apps/zippy_maps/webroot/img/icons/country.png
new file mode 100644 (file)
index 0000000..d58ff91
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/country.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/court.png b/production/example_apps/zippy_maps/webroot/img/icons/court.png
new file mode 100644 (file)
index 0000000..2bbcc4f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/court.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png b/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png
new file mode 100644 (file)
index 0000000..308a7ec
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png b/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png
new file mode 100644 (file)
index 0000000..c791b68
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png b/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png
new file mode 100644 (file)
index 0000000..d7348f2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png b/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png
new file mode 100644 (file)
index 0000000..536e679
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cricket.png b/production/example_apps/zippy_maps/webroot/img/icons/cricket.png
new file mode 100644 (file)
index 0000000..1a48676
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cricket.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png b/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png
new file mode 100644 (file)
index 0000000..f7d97bd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png b/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png
new file mode 100644 (file)
index 0000000..01678b8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png b/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png
new file mode 100644 (file)
index 0000000..4febb9d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png
new file mode 100644 (file)
index 0000000..508436a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png b/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png
new file mode 100644 (file)
index 0000000..d8957d3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png b/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png
new file mode 100644 (file)
index 0000000..3e316ec
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cup.png b/production/example_apps/zippy_maps/webroot/img/icons/cup.png
new file mode 100644 (file)
index 0000000..45610d2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cup.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png b/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png
new file mode 100644 (file)
index 0000000..575c032
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png b/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png
new file mode 100644 (file)
index 0000000..4854fc2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/customs.png b/production/example_apps/zippy_maps/webroot/img/icons/customs.png
new file mode 100644 (file)
index 0000000..765a36c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/customs.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling.png
new file mode 100644 (file)
index 0000000..3249585
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png
new file mode 100644 (file)
index 0000000..b5253d9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png
new file mode 100644 (file)
index 0000000..ac4c49d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dam.png b/production/example_apps/zippy_maps/webroot/img/icons/dam.png
new file mode 100644 (file)
index 0000000..3f95aa0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dam.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png b/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png
new file mode 100644 (file)
index 0000000..ffbdf81
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png b/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png
new file mode 100644 (file)
index 0000000..ac85e6c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/database.png b/production/example_apps/zippy_maps/webroot/img/icons/database.png
new file mode 100644 (file)
index 0000000..c165320
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/database.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/daycare.png b/production/example_apps/zippy_maps/webroot/img/icons/daycare.png
new file mode 100644 (file)
index 0000000..01a0f15
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/daycare.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png b/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png
new file mode 100644 (file)
index 0000000..7d3bafc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/deer.png b/production/example_apps/zippy_maps/webroot/img/icons/deer.png
new file mode 100644 (file)
index 0000000..e7c1842
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/deer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dentist.png b/production/example_apps/zippy_maps/webroot/img/icons/dentist.png
new file mode 100644 (file)
index 0000000..db929f6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dentist.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png b/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png
new file mode 100644 (file)
index 0000000..50066de
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png b/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png
new file mode 100644 (file)
index 0000000..80cba1e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png b/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png
new file mode 100644 (file)
index 0000000..ee29127
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png b/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png
new file mode 100644 (file)
index 0000000..137d669
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/disability.png b/production/example_apps/zippy_maps/webroot/img/icons/disability.png
new file mode 100644 (file)
index 0000000..29edde1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/disability.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/diving.png b/production/example_apps/zippy_maps/webroot/img/icons/diving.png
new file mode 100644 (file)
index 0000000..7c33a24
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/diving.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png b/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png
new file mode 100644 (file)
index 0000000..e4aac25
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png b/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png
new file mode 100644 (file)
index 0000000..f7b4582
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png b/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png
new file mode 100644 (file)
index 0000000..5f122c4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png b/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png
new file mode 100644 (file)
index 0000000..0f1f47c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png b/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png
new file mode 100644 (file)
index 0000000..e1db9f4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png b/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png
new file mode 100644 (file)
index 0000000..84134b7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png b/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png
new file mode 100644 (file)
index 0000000..c46e6a1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png b/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png
new file mode 100644 (file)
index 0000000..a3bca91
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png b/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png
new file mode 100644 (file)
index 0000000..74414cd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/eggs.png b/production/example_apps/zippy_maps/webroot/img/icons/eggs.png
new file mode 100644 (file)
index 0000000..9f5368d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/eggs.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elephants.png b/production/example_apps/zippy_maps/webroot/img/icons/elephants.png
new file mode 100644 (file)
index 0000000..cbaefda
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elephants.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator.png
new file mode 100644 (file)
index 0000000..9267347
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png
new file mode 100644 (file)
index 0000000..834e02d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png
new file mode 100644 (file)
index 0000000..57f11fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/embassy.png b/production/example_apps/zippy_maps/webroot/img/icons/embassy.png
new file mode 100644 (file)
index 0000000..87b65d4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/embassy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/entrance.png b/production/example_apps/zippy_maps/webroot/img/icons/entrance.png
new file mode 100644 (file)
index 0000000..186ee6f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/entrance.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png b/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png
new file mode 100644 (file)
index 0000000..3c8cc22
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/exit.png b/production/example_apps/zippy_maps/webroot/img/icons/exit.png
new file mode 100644 (file)
index 0000000..d7af836
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/exit.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/expert.png b/production/example_apps/zippy_maps/webroot/img/icons/expert.png
new file mode 100644 (file)
index 0000000..a876f35
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/expert.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/factory.png b/production/example_apps/zippy_maps/webroot/img/icons/factory.png
new file mode 100644 (file)
index 0000000..d9213de
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/factory.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png b/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png
new file mode 100644 (file)
index 0000000..5509d85
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/family.png b/production/example_apps/zippy_maps/webroot/img/icons/family.png
new file mode 100644 (file)
index 0000000..473b2fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/family.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png b/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png
new file mode 100644 (file)
index 0000000..7021e76
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png b/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png
new file mode 100644 (file)
index 0000000..7fe3678
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png b/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png
new file mode 100644 (file)
index 0000000..4373485
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/female-2.png b/production/example_apps/zippy_maps/webroot/img/icons/female-2.png
new file mode 100644 (file)
index 0000000..b74dfbf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/female-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png b/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png
new file mode 100644 (file)
index 0000000..4b70325
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ferry.png b/production/example_apps/zippy_maps/webroot/img/icons/ferry.png
new file mode 100644 (file)
index 0000000..34cb864
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ferry.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/festival.png b/production/example_apps/zippy_maps/webroot/img/icons/festival.png
new file mode 100644 (file)
index 0000000..0d6577f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/festival.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png b/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png
new file mode 100644 (file)
index 0000000..a7c87f6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/field.png b/production/example_apps/zippy_maps/webroot/img/icons/field.png
new file mode 100644 (file)
index 0000000..8c2637c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/field.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png b/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png
new file mode 100644 (file)
index 0000000..c50baba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/findajob.png b/production/example_apps/zippy_maps/webroot/img/icons/findajob.png
new file mode 100644 (file)
index 0000000..7f2d27f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/findajob.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/finish.png b/production/example_apps/zippy_maps/webroot/img/icons/finish.png
new file mode 100644 (file)
index 0000000..8575616
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/finish.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png
new file mode 100644 (file)
index 0000000..97b62e7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fire.png b/production/example_apps/zippy_maps/webroot/img/icons/fire.png
new file mode 100644 (file)
index 0000000..b1fe48a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fire.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png b/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png
new file mode 100644 (file)
index 0000000..6517b7d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/firemen.png b/production/example_apps/zippy_maps/webroot/img/icons/firemen.png
new file mode 100644 (file)
index 0000000..2f5f7c7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/firemen.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png b/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png
new file mode 100644 (file)
index 0000000..a091e78
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png b/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png
new file mode 100644 (file)
index 0000000..fdb5b59
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png b/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png
new file mode 100644 (file)
index 0000000..a0dedac
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishing.png b/production/example_apps/zippy_maps/webroot/img/icons/fishing.png
new file mode 100644 (file)
index 0000000..5e482f0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png b/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png
new file mode 100644 (file)
index 0000000..3aa4a52
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png b/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png
new file mode 100644 (file)
index 0000000..50dc155
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fitness.png b/production/example_apps/zippy_maps/webroot/img/icons/fitness.png
new file mode 100644 (file)
index 0000000..9cf72d0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fitness.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png
new file mode 100644 (file)
index 0000000..637784a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png b/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png
new file mode 100644 (file)
index 0000000..c963797
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flood.png b/production/example_apps/zippy_maps/webroot/img/icons/flood.png
new file mode 100644 (file)
index 0000000..2ab1b9f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flood.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flowers.png b/production/example_apps/zippy_maps/webroot/img/icons/flowers.png
new file mode 100644 (file)
index 0000000..e80d390
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flowers.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png b/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png
new file mode 100644 (file)
index 0000000..762a869
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png b/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png
new file mode 100644 (file)
index 0000000..b27bade
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png b/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png
new file mode 100644 (file)
index 0000000..586d670
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/footprint.png b/production/example_apps/zippy_maps/webroot/img/icons/footprint.png
new file mode 100644 (file)
index 0000000..5f19ddb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/footprint.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png
new file mode 100644 (file)
index 0000000..a48d1cc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/forest.png b/production/example_apps/zippy_maps/webroot/img/icons/forest.png
new file mode 100644 (file)
index 0000000..b9c8eee
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/forest.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/forest2.png b/production/example_apps/zippy_maps/webroot/img/icons/forest2.png
new file mode 100644 (file)
index 0000000..4102937
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/forest2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fossils.png b/production/example_apps/zippy_maps/webroot/img/icons/fossils.png
new file mode 100644 (file)
index 0000000..423ef39
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fossils.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png b/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png
new file mode 100644 (file)
index 0000000..0c16b09
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png
new file mode 100644 (file)
index 0000000..d5c8a04
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png b/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png
new file mode 100644 (file)
index 0000000..60e8232
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png b/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png
new file mode 100644 (file)
index 0000000..8d08153
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png b/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png
new file mode 100644 (file)
index 0000000..27d2d4f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fruits.png b/production/example_apps/zippy_maps/webroot/img/icons/fruits.png
new file mode 100644 (file)
index 0000000..c147a11
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fruits.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ft.png b/production/example_apps/zippy_maps/webroot/img/icons/ft.png
new file mode 100644 (file)
index 0000000..e95706c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ft.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png
new file mode 100644 (file)
index 0000000..ade87fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png b/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png
new file mode 100644 (file)
index 0000000..26bebcc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png b/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png
new file mode 100644 (file)
index 0000000..bd8fa80
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png b/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png
new file mode 100644 (file)
index 0000000..1379043
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png b/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png
new file mode 100644 (file)
index 0000000..067210c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png b/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png
new file mode 100644 (file)
index 0000000..a7d112e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png b/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png
new file mode 100644 (file)
index 0000000..2cf4a57
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png b/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png
new file mode 100644 (file)
index 0000000..fc92196
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gifts.png b/production/example_apps/zippy_maps/webroot/img/icons/gifts.png
new file mode 100644 (file)
index 0000000..9086970
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gifts.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png b/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png
new file mode 100644 (file)
index 0000000..3fb47e7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/glasses.png b/production/example_apps/zippy_maps/webroot/img/icons/glasses.png
new file mode 100644 (file)
index 0000000..cf908fe
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/glasses.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/golfing.png b/production/example_apps/zippy_maps/webroot/img/icons/golfing.png
new file mode 100644 (file)
index 0000000..0a48c67
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/golfing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png b/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png
new file mode 100644 (file)
index 0000000..806ab79
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png
new file mode 100644 (file)
index 0000000..436b707
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/grass.png b/production/example_apps/zippy_maps/webroot/img/icons/grass.png
new file mode 100644 (file)
index 0000000..6f2fe5e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/grass.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/grocery.png b/production/example_apps/zippy_maps/webroot/img/icons/grocery.png
new file mode 100644 (file)
index 0000000..ffa7fbf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/grocery.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/group-2.png b/production/example_apps/zippy_maps/webroot/img/icons/group-2.png
new file mode 100644 (file)
index 0000000..7bf9693
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/group-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png b/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png
new file mode 100644 (file)
index 0000000..ff56abb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/handball.png b/production/example_apps/zippy_maps/webroot/img/icons/handball.png
new file mode 100644 (file)
index 0000000..672ad07
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/handball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png b/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png
new file mode 100644 (file)
index 0000000..00ddbb6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/harbor.png b/production/example_apps/zippy_maps/webroot/img/icons/harbor.png
new file mode 100644 (file)
index 0000000..382ac8a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/harbor.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hare1.png b/production/example_apps/zippy_maps/webroot/img/icons/hare1.png
new file mode 100644 (file)
index 0000000..10bcc4f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hare1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hats.png b/production/example_apps/zippy_maps/webroot/img/icons/hats.png
new file mode 100644 (file)
index 0000000..6876000
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hats.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/haybale.png b/production/example_apps/zippy_maps/webroot/img/icons/haybale.png
new file mode 100644 (file)
index 0000000..53337ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/haybale.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png b/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png
new file mode 100644 (file)
index 0000000..356b205
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png b/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png
new file mode 100644 (file)
index 0000000..d34a824
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highhills.png b/production/example_apps/zippy_maps/webroot/img/icons/highhills.png
new file mode 100644 (file)
index 0000000..e0159c5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highhills.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highschool.png b/production/example_apps/zippy_maps/webroot/img/icons/highschool.png
new file mode 100644 (file)
index 0000000..afe7796
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highschool.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highway.png b/production/example_apps/zippy_maps/webroot/img/icons/highway.png
new file mode 100644 (file)
index 0000000..ac77fbf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hiking.png b/production/example_apps/zippy_maps/webroot/img/icons/hiking.png
new file mode 100644 (file)
index 0000000..4b3222d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hiking.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png b/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png
new file mode 100644 (file)
index 0000000..cdb12c0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png b/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png
new file mode 100644 (file)
index 0000000..f122de2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png b/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png
new file mode 100644 (file)
index 0000000..0827eff
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/home-2.png b/production/example_apps/zippy_maps/webroot/img/icons/home-2.png
new file mode 100644 (file)
index 0000000..8ee5544
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/home-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png b/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png
new file mode 100644 (file)
index 0000000..1adce31
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png b/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png
new file mode 100644 (file)
index 0000000..8a9c3fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png b/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png
new file mode 100644 (file)
index 0000000..eab39f5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png b/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png
new file mode 100644 (file)
index 0000000..913afeb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png b/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png
new file mode 100644 (file)
index 0000000..49b5ffc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png
new file mode 100644 (file)
index 0000000..b12cef1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png b/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png
new file mode 100644 (file)
index 0000000..b22c75e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png
new file mode 100644 (file)
index 0000000..62ac992
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png b/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png
new file mode 100644 (file)
index 0000000..9cc3980
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/house.png b/production/example_apps/zippy_maps/webroot/img/icons/house.png
new file mode 100644 (file)
index 0000000..5b609b8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/house.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hunting.png b/production/example_apps/zippy_maps/webroot/img/icons/hunting.png
new file mode 100644 (file)
index 0000000..c509e4c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hunting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hut.png b/production/example_apps/zippy_maps/webroot/img/icons/hut.png
new file mode 100644 (file)
index 0000000..0669aa7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hut.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icecream.png b/production/example_apps/zippy_maps/webroot/img/icons/icecream.png
new file mode 100644 (file)
index 0000000..56e0689
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icecream.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png b/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png
new file mode 100644 (file)
index 0000000..6c3414e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png b/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png
new file mode 100644 (file)
index 0000000..fc15fc3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png b/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png
new file mode 100644 (file)
index 0000000..b825030
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png b/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png
new file mode 100644 (file)
index 0000000..540c917
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/information.png b/production/example_apps/zippy_maps/webroot/img/icons/information.png
new file mode 100644 (file)
index 0000000..6ac10a4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/information.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png b/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png
new file mode 100644 (file)
index 0000000..6d29eb0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png b/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png
new file mode 100644 (file)
index 0000000..a2f96d1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png
new file mode 100644 (file)
index 0000000..2425c5b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png
new file mode 100644 (file)
index 0000000..54dec40
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png
new file mode 100644 (file)
index 0000000..f1e030e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png
new file mode 100644 (file)
index 0000000..41d87a1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png
new file mode 100644 (file)
index 0000000..d9a8e82
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png b/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png
new file mode 100644 (file)
index 0000000..36dd64f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jeep.png b/production/example_apps/zippy_maps/webroot/img/icons/jeep.png
new file mode 100644 (file)
index 0000000..a6dad3b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jeep.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png b/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png
new file mode 100644 (file)
index 0000000..88a8864
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png b/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png
new file mode 100644 (file)
index 0000000..574d087
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png b/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png
new file mode 100644 (file)
index 0000000..4ad43d6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png b/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png
new file mode 100644 (file)
index 0000000..d796d11
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jogging.png b/production/example_apps/zippy_maps/webroot/img/icons/jogging.png
new file mode 100644 (file)
index 0000000..889437c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jogging.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/judo.png b/production/example_apps/zippy_maps/webroot/img/icons/judo.png
new file mode 100644 (file)
index 0000000..df11b1b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/judo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/junction.png b/production/example_apps/zippy_maps/webroot/img/icons/junction.png
new file mode 100644 (file)
index 0000000..cefaf8e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/junction.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/karate.png b/production/example_apps/zippy_maps/webroot/img/icons/karate.png
new file mode 100644 (file)
index 0000000..7d56910
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/karate.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/karting.png b/production/example_apps/zippy_maps/webroot/img/icons/karting.png
new file mode 100644 (file)
index 0000000..9bccb76
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/karting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png b/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png
new file mode 100644 (file)
index 0000000..1b1c3c6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png b/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png
new file mode 100644 (file)
index 0000000..c2ad2aa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kebab.png b/production/example_apps/zippy_maps/webroot/img/icons/kebab.png
new file mode 100644 (file)
index 0000000..f70089a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kebab.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kingair.png b/production/example_apps/zippy_maps/webroot/img/icons/kingair.png
new file mode 100644 (file)
index 0000000..71d4127
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kingair.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png b/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png
new file mode 100644 (file)
index 0000000..55ddef4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png b/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png
new file mode 100644 (file)
index 0000000..345f371
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png b/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png
new file mode 100644 (file)
index 0000000..b6159df
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lake.png b/production/example_apps/zippy_maps/webroot/img/icons/lake.png
new file mode 100644 (file)
index 0000000..2ebb5ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lake.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/landfill.png b/production/example_apps/zippy_maps/webroot/img/icons/landfill.png
new file mode 100644 (file)
index 0000000..569f3b8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/landfill.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/landmark.png b/production/example_apps/zippy_maps/webroot/img/icons/landmark.png
new file mode 100644 (file)
index 0000000..bfa95e3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/landmark.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laterne.png b/production/example_apps/zippy_maps/webroot/img/icons/laterne.png
new file mode 100644 (file)
index 0000000..899b4e0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laterne.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png b/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png
new file mode 100644 (file)
index 0000000..dc5ccbf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png
new file mode 100644 (file)
index 0000000..65c20b2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/library.png b/production/example_apps/zippy_maps/webroot/img/icons/library.png
new file mode 100644 (file)
index 0000000..2df51af
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/library.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png
new file mode 100644 (file)
index 0000000..5db8c77
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png b/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png
new file mode 100644 (file)
index 0000000..7b698a1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/linedown.png b/production/example_apps/zippy_maps/webroot/img/icons/linedown.png
new file mode 100644 (file)
index 0000000..03337d0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/linedown.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png b/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png
new file mode 100644 (file)
index 0000000..9c285d8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/liquor.png b/production/example_apps/zippy_maps/webroot/img/icons/liquor.png
new file mode 100644 (file)
index 0000000..be5b352
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/liquor.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png b/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png
new file mode 100644 (file)
index 0000000..0b8424d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lock.png b/production/example_apps/zippy_maps/webroot/img/icons/lock.png
new file mode 100644 (file)
index 0000000..7fbd783
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lock.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png b/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png
new file mode 100644 (file)
index 0000000..75c6cfc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png
new file mode 100644 (file)
index 0000000..b122791
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/love_date.png b/production/example_apps/zippy_maps/webroot/img/icons/love_date.png
new file mode 100644 (file)
index 0000000..1a50c22
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/love_date.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png b/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png
new file mode 100644 (file)
index 0000000..e374e5e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png b/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png
new file mode 100644 (file)
index 0000000..0dd7a3d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png b/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png
new file mode 100644 (file)
index 0000000..6733f53
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/male-2.png b/production/example_apps/zippy_maps/webroot/img/icons/male-2.png
new file mode 100644 (file)
index 0000000..b0e4b40
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/male-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mall.png b/production/example_apps/zippy_maps/webroot/img/icons/mall.png
new file mode 100644 (file)
index 0000000..74c05f8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mall.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/map.png b/production/example_apps/zippy_maps/webroot/img/icons/map.png
new file mode 100644 (file)
index 0000000..8935d3f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/map.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png b/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png
new file mode 100644 (file)
index 0000000..8d7691c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png b/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png
new file mode 100644 (file)
index 0000000..58f859e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/market.png b/production/example_apps/zippy_maps/webroot/img/icons/market.png
new file mode 100644 (file)
index 0000000..01db73d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/market.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/massage.png b/production/example_apps/zippy_maps/webroot/img/icons/massage.png
new file mode 100644 (file)
index 0000000..7e996eb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/massage.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png b/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png
new file mode 100644 (file)
index 0000000..43e2e20
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png b/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png
new file mode 100644 (file)
index 0000000..bd6207a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/medicine.png b/production/example_apps/zippy_maps/webroot/img/icons/medicine.png
new file mode 100644 (file)
index 0000000..1fcd3c9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/medicine.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/megalith.png b/production/example_apps/zippy_maps/webroot/img/icons/megalith.png
new file mode 100644 (file)
index 0000000..a809cfc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/megalith.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/memorial.png b/production/example_apps/zippy_maps/webroot/img/icons/memorial.png
new file mode 100644 (file)
index 0000000..2cd4500
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/memorial.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png b/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png
new file mode 100644 (file)
index 0000000..23770e4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/military.png b/production/example_apps/zippy_maps/webroot/img/icons/military.png
new file mode 100644 (file)
index 0000000..f63477c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/military.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mine.png b/production/example_apps/zippy_maps/webroot/img/icons/mine.png
new file mode 100644 (file)
index 0000000..45224b2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mine.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png b/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png
new file mode 100644 (file)
index 0000000..f2a0d21
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png b/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png
new file mode 100644 (file)
index 0000000..9872a32
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png b/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png
new file mode 100644 (file)
index 0000000..274543a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png b/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png
new file mode 100644 (file)
index 0000000..78adabd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png b/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png
new file mode 100644 (file)
index 0000000..298ea76
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png
new file mode 100644 (file)
index 0000000..566b39d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monument.png b/production/example_apps/zippy_maps/webroot/img/icons/monument.png
new file mode 100644 (file)
index 0000000..516c0d8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monument.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png b/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png
new file mode 100644 (file)
index 0000000..30fd02e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png b/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png
new file mode 100644 (file)
index 0000000..1827972
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png b/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png
new file mode 100644 (file)
index 0000000..54f7d1e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png b/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png
new file mode 100644 (file)
index 0000000..eafd06c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png b/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png
new file mode 100644 (file)
index 0000000..6590c6c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png b/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png
new file mode 100644 (file)
index 0000000..c8fdea0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png b/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png
new file mode 100644 (file)
index 0000000..e8b71fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png b/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png
new file mode 100644 (file)
index 0000000..55ebb37
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountains.png b/production/example_apps/zippy_maps/webroot/img/icons/mountains.png
new file mode 100644 (file)
index 0000000..a6559e7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountains.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/movierental.png b/production/example_apps/zippy_maps/webroot/img/icons/movierental.png
new file mode 100644 (file)
index 0000000..2206873
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/movierental.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png
new file mode 100644 (file)
index 0000000..0fa5388
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png b/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png
new file mode 100644 (file)
index 0000000..bd8ae9c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mural.png b/production/example_apps/zippy_maps/webroot/img/icons/mural.png
new file mode 100644 (file)
index 0000000..846476c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mural.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png
new file mode 100644 (file)
index 0000000..0924e1f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png
new file mode 100644 (file)
index 0000000..f7e8033
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png
new file mode 100644 (file)
index 0000000..783eacc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png
new file mode 100644 (file)
index 0000000..566fe3a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png
new file mode 100644 (file)
index 0000000..b977ea0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png
new file mode 100644 (file)
index 0000000..34315c3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png
new file mode 100644 (file)
index 0000000..4c9ada5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png
new file mode 100644 (file)
index 0000000..4adbc11
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png b/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png
new file mode 100644 (file)
index 0000000..90c9a2c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music.png b/production/example_apps/zippy_maps/webroot/img/icons/music.png
new file mode 100644 (file)
index 0000000..0892333
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png b/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png
new file mode 100644 (file)
index 0000000..d8a8f3c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png b/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png
new file mode 100644 (file)
index 0000000..bdbd38c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png b/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png
new file mode 100644 (file)
index 0000000..2297968
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_live.png b/production/example_apps/zippy_maps/webroot/img/icons/music_live.png
new file mode 100644 (file)
index 0000000..47d2d78
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_live.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png b/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png
new file mode 100644 (file)
index 0000000..590e8b2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nanny.png b/production/example_apps/zippy_maps/webroot/img/icons/nanny.png
new file mode 100644 (file)
index 0000000..375014d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nanny.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png
new file mode 100644 (file)
index 0000000..78ca58e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png b/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png
new file mode 100644 (file)
index 0000000..2fcf253
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png b/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png
new file mode 100644 (file)
index 0000000..1f8881a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png b/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png
new file mode 100644 (file)
index 0000000..7b806c2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png b/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png
new file mode 100644 (file)
index 0000000..f93316f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nursery.png b/production/example_apps/zippy_maps/webroot/img/icons/nursery.png
new file mode 100644 (file)
index 0000000..ad6fe04
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nursery.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png b/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png
new file mode 100644 (file)
index 0000000..27d8bb2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/observatory.png b/production/example_apps/zippy_maps/webroot/img/icons/observatory.png
new file mode 100644 (file)
index 0000000..213e807
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/observatory.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/office-building.png b/production/example_apps/zippy_maps/webroot/img/icons/office-building.png
new file mode 100644 (file)
index 0000000..0d519b9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/office-building.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png b/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png
new file mode 100644 (file)
index 0000000..89d5dc9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png b/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png
new file mode 100644 (file)
index 0000000..bfa7468
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png b/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png
new file mode 100644 (file)
index 0000000..63fd5c5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png b/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png
new file mode 100644 (file)
index 0000000..29c9fb2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png b/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png
new file mode 100644 (file)
index 0000000..1a0ce4f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png b/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png
new file mode 100644 (file)
index 0000000..4bb19e9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png b/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png
new file mode 100644 (file)
index 0000000..a04c0b4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png b/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png
new file mode 100644 (file)
index 0000000..f0e162f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paint.png b/production/example_apps/zippy_maps/webroot/img/icons/paint.png
new file mode 100644 (file)
index 0000000..44e5ff8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paint.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paintball.png b/production/example_apps/zippy_maps/webroot/img/icons/paintball.png
new file mode 100644 (file)
index 0000000..34f4b8a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paintball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png b/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png
new file mode 100644 (file)
index 0000000..187109c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png b/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png
new file mode 100644 (file)
index 0000000..e139665
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png b/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png
new file mode 100644 (file)
index 0000000..30717aa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png b/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png
new file mode 100644 (file)
index 0000000..61056bb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png b/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png
new file mode 100644 (file)
index 0000000..56366ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png b/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png
new file mode 100644 (file)
index 0000000..a8e303e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png
new file mode 100644 (file)
index 0000000..948663b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png b/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png
new file mode 100644 (file)
index 0000000..58b87ca
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/party-2.png b/production/example_apps/zippy_maps/webroot/img/icons/party-2.png
new file mode 100644 (file)
index 0000000..3ed02b3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/party-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png b/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png
new file mode 100644 (file)
index 0000000..5de9866
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/peace.png b/production/example_apps/zippy_maps/webroot/img/icons/peace.png
new file mode 100644 (file)
index 0000000..496ac93
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/peace.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png
new file mode 100644 (file)
index 0000000..a115b8d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png b/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png
new file mode 100644 (file)
index 0000000..a1dd3d4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pens.png b/production/example_apps/zippy_maps/webroot/img/icons/pens.png
new file mode 100644 (file)
index 0000000..78b59d0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pens.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png b/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png
new file mode 100644 (file)
index 0000000..61d61ed
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/petanque.png b/production/example_apps/zippy_maps/webroot/img/icons/petanque.png
new file mode 100644 (file)
index 0000000..3672dfb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/petanque.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png b/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png
new file mode 100644 (file)
index 0000000..4b7c947
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pets.png b/production/example_apps/zippy_maps/webroot/img/icons/pets.png
new file mode 100644 (file)
index 0000000..883bb4d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pets.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/phantom.png b/production/example_apps/zippy_maps/webroot/img/icons/phantom.png
new file mode 100644 (file)
index 0000000..131b489
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/phantom.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/phones.png b/production/example_apps/zippy_maps/webroot/img/icons/phones.png
new file mode 100644 (file)
index 0000000..889081e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/phones.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/photo.png b/production/example_apps/zippy_maps/webroot/img/icons/photo.png
new file mode 100644 (file)
index 0000000..f516856
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/photo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/photography.png b/production/example_apps/zippy_maps/webroot/img/icons/photography.png
new file mode 100644 (file)
index 0000000..279659b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/photography.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png b/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png
new file mode 100644 (file)
index 0000000..2286f35
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pig.png b/production/example_apps/zippy_maps/webroot/img/icons/pig.png
new file mode 100644 (file)
index 0000000..697127b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pig.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png b/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png
new file mode 100644 (file)
index 0000000..14e0b2d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pirates.png b/production/example_apps/zippy_maps/webroot/img/icons/pirates.png
new file mode 100644 (file)
index 0000000..fef930f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pirates.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png b/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png
new file mode 100644 (file)
index 0000000..faa51f7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png b/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png
new file mode 100644 (file)
index 0000000..bdee290
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png b/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png
new file mode 100644 (file)
index 0000000..05357ef
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/playground.png b/production/example_apps/zippy_maps/webroot/img/icons/playground.png
new file mode 100644 (file)
index 0000000..4257fda
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/playground.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png b/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png
new file mode 100644 (file)
index 0000000..18a7b98
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/poker.png b/production/example_apps/zippy_maps/webroot/img/icons/poker.png
new file mode 100644 (file)
index 0000000..c66fdbe
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/poker.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/police.png b/production/example_apps/zippy_maps/webroot/img/icons/police.png
new file mode 100644 (file)
index 0000000..f93a9ed
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/police.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/postal.png b/production/example_apps/zippy_maps/webroot/img/icons/postal.png
new file mode 100644 (file)
index 0000000..890e05a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/postal.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png b/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png
new file mode 100644 (file)
index 0000000..349ef14
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png b/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png
new file mode 100644 (file)
index 0000000..89cfcce
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png b/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png
new file mode 100644 (file)
index 0000000..69d821b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png b/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png
new file mode 100644 (file)
index 0000000..90f03ab
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/prayer.png b/production/example_apps/zippy_maps/webroot/img/icons/prayer.png
new file mode 100644 (file)
index 0000000..c6abcd1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/prayer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/presentation.png b/production/example_apps/zippy_maps/webroot/img/icons/presentation.png
new file mode 100644 (file)
index 0000000..4b881d8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/presentation.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png b/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png
new file mode 100644 (file)
index 0000000..8788016
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png b/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png
new file mode 100644 (file)
index 0000000..3f1ce52
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/prison.png b/production/example_apps/zippy_maps/webroot/img/icons/prison.png
new file mode 100644 (file)
index 0000000..2967b25
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/prison.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/publicart.png b/production/example_apps/zippy_maps/webroot/img/icons/publicart.png
new file mode 100644 (file)
index 0000000..4523333
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/publicart.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png b/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png
new file mode 100644 (file)
index 0000000..0ca7618
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png b/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png
new file mode 100644 (file)
index 0000000..4cfb9b0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radar.png b/production/example_apps/zippy_maps/webroot/img/icons/radar.png
new file mode 100644 (file)
index 0000000..0a2aeeb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radiation.png b/production/example_apps/zippy_maps/webroot/img/icons/radiation.png
new file mode 100644 (file)
index 0000000..92b81f6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radiation.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png b/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png
new file mode 100644 (file)
index 0000000..3c6ade8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png b/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png
new file mode 100644 (file)
index 0000000..197e95a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rainy.png b/production/example_apps/zippy_maps/webroot/img/icons/rainy.png
new file mode 100644 (file)
index 0000000..79bf0df
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rainy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rape.png b/production/example_apps/zippy_maps/webroot/img/icons/rape.png
new file mode 100644 (file)
index 0000000..198495c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rape.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png
new file mode 100644 (file)
index 0000000..6b459d4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/recycle.png b/production/example_apps/zippy_maps/webroot/img/icons/recycle.png
new file mode 100644 (file)
index 0000000..2a03eca
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/recycle.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/regroup.png b/production/example_apps/zippy_maps/webroot/img/icons/regroup.png
new file mode 100644 (file)
index 0000000..a5554b6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/regroup.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/repair.png b/production/example_apps/zippy_maps/webroot/img/icons/repair.png
new file mode 100644 (file)
index 0000000..afc22ea
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/repair.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png
new file mode 100644 (file)
index 0000000..fb3b6dd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/resort.png b/production/example_apps/zippy_maps/webroot/img/icons/resort.png
new file mode 100644 (file)
index 0000000..5ad7c49
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/resort.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png
new file mode 100644 (file)
index 0000000..76792f5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png
new file mode 100644 (file)
index 0000000..d486d14
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png
new file mode 100644 (file)
index 0000000..4b08175
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png
new file mode 100644 (file)
index 0000000..c97f89f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png
new file mode 100644 (file)
index 0000000..457ec14
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png
new file mode 100644 (file)
index 0000000..1d69fdb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png
new file mode 100644 (file)
index 0000000..b30b617
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png
new file mode 100644 (file)
index 0000000..5900e4e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png
new file mode 100644 (file)
index 0000000..ae58f53
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png
new file mode 100644 (file)
index 0000000..ff45f5d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png
new file mode 100644 (file)
index 0000000..fc4202e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png
new file mode 100644 (file)
index 0000000..a32f50e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png
new file mode 100644 (file)
index 0000000..da0a53a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png
new file mode 100644 (file)
index 0000000..a36f663
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png
new file mode 100644 (file)
index 0000000..f00384d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png
new file mode 100644 (file)
index 0000000..7791309
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png
new file mode 100644 (file)
index 0000000..a861bc0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png
new file mode 100644 (file)
index 0000000..6b20261
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/revolt.png b/production/example_apps/zippy_maps/webroot/img/icons/revolt.png
new file mode 100644 (file)
index 0000000..2cee54f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/revolt.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png b/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png
new file mode 100644 (file)
index 0000000..ff25588
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/river-2.png b/production/example_apps/zippy_maps/webroot/img/icons/river-2.png
new file mode 100644 (file)
index 0000000..2ece442
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/river-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/road.png b/production/example_apps/zippy_maps/webroot/img/icons/road.png
new file mode 100644 (file)
index 0000000..a4cef60
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/road.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png b/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png
new file mode 100644 (file)
index 0000000..7266598
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png
new file mode 100644 (file)
index 0000000..c6640a8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rodent.png b/production/example_apps/zippy_maps/webroot/img/icons/rodent.png
new file mode 100644 (file)
index 0000000..836bf61
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rodent.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png b/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png
new file mode 100644 (file)
index 0000000..05c33e7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png b/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png
new file mode 100644 (file)
index 0000000..c35fe2a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png b/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png
new file mode 100644 (file)
index 0000000..31d2fe8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png b/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png
new file mode 100644 (file)
index 0000000..bce9800
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png
new file mode 100644 (file)
index 0000000..4fd075f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sailing.png b/production/example_apps/zippy_maps/webroot/img/icons/sailing.png
new file mode 100644 (file)
index 0000000..7d0dc49
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sailing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png
new file mode 100644 (file)
index 0000000..2eb4426
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sauna.png b/production/example_apps/zippy_maps/webroot/img/icons/sauna.png
new file mode 100644 (file)
index 0000000..4ae5ec4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sauna.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png
new file mode 100644 (file)
index 0000000..89f6514
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/school.png b/production/example_apps/zippy_maps/webroot/img/icons/school.png
new file mode 100644 (file)
index 0000000..785bf0f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/school.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png b/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png
new file mode 100644 (file)
index 0000000..a604f72
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png b/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png
new file mode 100644 (file)
index 0000000..dd33abc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png b/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png
new file mode 100644 (file)
index 0000000..0242ada
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/seals.png b/production/example_apps/zippy_maps/webroot/img/icons/seals.png
new file mode 100644 (file)
index 0000000..dba195e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/seals.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/segway.png b/production/example_apps/zippy_maps/webroot/img/icons/segway.png
new file mode 100644 (file)
index 0000000..138da35
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/segway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png b/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png
new file mode 100644 (file)
index 0000000..32ed409
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png b/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png
new file mode 100644 (file)
index 0000000..a01752d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/share.png b/production/example_apps/zippy_maps/webroot/img/icons/share.png
new file mode 100644 (file)
index 0000000..f805cd6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/share.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png b/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png
new file mode 100644 (file)
index 0000000..fcb5444
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png b/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png
new file mode 100644 (file)
index 0000000..82ace96
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png b/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png
new file mode 100644 (file)
index 0000000..c256c0d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shoes.png b/production/example_apps/zippy_maps/webroot/img/icons/shoes.png
new file mode 100644 (file)
index 0000000..870b5e6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shoes.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shooting.png b/production/example_apps/zippy_maps/webroot/img/icons/shooting.png
new file mode 100644 (file)
index 0000000..5e6ead4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shooting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png b/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png
new file mode 100644 (file)
index 0000000..b4f2f99
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png b/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png
new file mode 100644 (file)
index 0000000..a978348
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shower.png b/production/example_apps/zippy_maps/webroot/img/icons/shower.png
new file mode 100644 (file)
index 0000000..3503e84
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shower.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png
new file mode 100644 (file)
index 0000000..2cbfca3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png b/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png
new file mode 100644 (file)
index 0000000..4fb7cbd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sikh.png b/production/example_apps/zippy_maps/webroot/img/icons/sikh.png
new file mode 100644 (file)
index 0000000..df2e67d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sikh.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png b/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png
new file mode 100644 (file)
index 0000000..21bebe3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skiing.png b/production/example_apps/zippy_maps/webroot/img/icons/skiing.png
new file mode 100644 (file)
index 0000000..b3ee65d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skiing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skijump.png b/production/example_apps/zippy_maps/webroot/img/icons/skijump.png
new file mode 100644 (file)
index 0000000..f814af2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skijump.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png b/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png
new file mode 100644 (file)
index 0000000..b9ab1fa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skis.png b/production/example_apps/zippy_maps/webroot/img/icons/skis.png
new file mode 100644 (file)
index 0000000..871a43c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skis.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skull.png b/production/example_apps/zippy_maps/webroot/img/icons/skull.png
new file mode 100644 (file)
index 0000000..20196c4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skull.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledge.png b/production/example_apps/zippy_maps/webroot/img/icons/sledge.png
new file mode 100644 (file)
index 0000000..b61d283
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledge.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png b/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png
new file mode 100644 (file)
index 0000000..3be838a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png b/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png
new file mode 100644 (file)
index 0000000..75bacab
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/slipway.png b/production/example_apps/zippy_maps/webroot/img/icons/slipway.png
new file mode 100644 (file)
index 0000000..81ad5da
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/slipway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png b/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png
new file mode 100644 (file)
index 0000000..4b8d354
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png b/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png
new file mode 100644 (file)
index 0000000..5b3b9a3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smoking.png b/production/example_apps/zippy_maps/webroot/img/icons/smoking.png
new file mode 100644 (file)
index 0000000..afcea98
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smoking.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snail.png b/production/example_apps/zippy_maps/webroot/img/icons/snail.png
new file mode 100644 (file)
index 0000000..4259718
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snail.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snakes.png b/production/example_apps/zippy_maps/webroot/img/icons/snakes.png
new file mode 100644 (file)
index 0000000..3947eff
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snakes.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png b/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png
new file mode 100644 (file)
index 0000000..39cae03
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png b/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png
new file mode 100644 (file)
index 0000000..dcbd9ed
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png b/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png
new file mode 100644 (file)
index 0000000..8820380
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png b/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png
new file mode 100644 (file)
index 0000000..f66a358
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png b/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png
new file mode 100644 (file)
index 0000000..10619fb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png b/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png
new file mode 100644 (file)
index 0000000..d5de482
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png b/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png
new file mode 100644 (file)
index 0000000..756ad6b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/soccer.png b/production/example_apps/zippy_maps/webroot/img/icons/soccer.png
new file mode 100644 (file)
index 0000000..5acbb91
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/soccer.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png b/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png
new file mode 100644 (file)
index 0000000..6795f46
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png b/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png
new file mode 100644 (file)
index 0000000..51f49d6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spa.png b/production/example_apps/zippy_maps/webroot/img/icons/spa.png
new file mode 100644 (file)
index 0000000..dbafb86
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spa.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png b/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png
new file mode 100644 (file)
index 0000000..6d73e12
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png b/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png
new file mode 100644 (file)
index 0000000..06569da
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png b/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png
new file mode 100644 (file)
index 0000000..5e270a2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png b/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png
new file mode 100644 (file)
index 0000000..53d1f35
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png b/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png
new file mode 100644 (file)
index 0000000..0d2d0bf
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spider.png b/production/example_apps/zippy_maps/webroot/img/icons/spider.png
new file mode 100644 (file)
index 0000000..3608abc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spider.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/splice.png b/production/example_apps/zippy_maps/webroot/img/icons/splice.png
new file mode 100644 (file)
index 0000000..8f470c1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/splice.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png b/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png
new file mode 100644 (file)
index 0000000..7c84dee
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png b/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png
new file mode 100644 (file)
index 0000000..d333ae7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png b/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png
new file mode 100644 (file)
index 0000000..ba514fe
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png b/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png
new file mode 100644 (file)
index 0000000..418bed6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stadium.png b/production/example_apps/zippy_maps/webroot/img/icons/stadium.png
new file mode 100644 (file)
index 0000000..1e434d0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stadium.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stairs.png b/production/example_apps/zippy_maps/webroot/img/icons/stairs.png
new file mode 100644 (file)
index 0000000..801f967
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stairs.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/star-3.png b/production/example_apps/zippy_maps/webroot/img/icons/star-3.png
new file mode 100644 (file)
index 0000000..18f55ca
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/star-3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png b/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png
new file mode 100644 (file)
index 0000000..5fa69f3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png b/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png
new file mode 100644 (file)
index 0000000..82b1188
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png
new file mode 100644 (file)
index 0000000..0f48d01
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png b/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png
new file mode 100644 (file)
index 0000000..19ef504
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stop.png b/production/example_apps/zippy_maps/webroot/img/icons/stop.png
new file mode 100644 (file)
index 0000000..f7ffb61
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stop.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/strike.png b/production/example_apps/zippy_maps/webroot/img/icons/strike.png
new file mode 100644 (file)
index 0000000..89c27d4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/strike.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png b/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png
new file mode 100644 (file)
index 0000000..bea9db5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png b/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png
new file mode 100644 (file)
index 0000000..6b5ad6a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png b/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png
new file mode 100644 (file)
index 0000000..8e201c1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png b/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png
new file mode 100644 (file)
index 0000000..dcb656f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png
new file mode 100644 (file)
index 0000000..f70fe62
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sunny.png b/production/example_apps/zippy_maps/webroot/img/icons/sunny.png
new file mode 100644 (file)
index 0000000..c34075d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sunny.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png b/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png
new file mode 100644 (file)
index 0000000..41c4bd0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png b/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png
new file mode 100644 (file)
index 0000000..b2bd45d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png b/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png
new file mode 100644 (file)
index 0000000..166a56e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfing.png b/production/example_apps/zippy_maps/webroot/img/icons/surfing.png
new file mode 100644 (file)
index 0000000..f86e83e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png b/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png
new file mode 100644 (file)
index 0000000..d0fcf59
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png b/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png
new file mode 100644 (file)
index 0000000..2dcf027
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/swimming.png b/production/example_apps/zippy_maps/webroot/img/icons/swimming.png
new file mode 100644 (file)
index 0000000..491f81b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/swimming.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png
new file mode 100644 (file)
index 0000000..64f3a36
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png b/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png
new file mode 100644 (file)
index 0000000..3609c3f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tailor.png b/production/example_apps/zippy_maps/webroot/img/icons/tailor.png
new file mode 100644 (file)
index 0000000..404744a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tailor.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png b/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png
new file mode 100644 (file)
index 0000000..f175716
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/targ.png b/production/example_apps/zippy_maps/webroot/img/icons/targ.png
new file mode 100644 (file)
index 0000000..06b9d1a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/targ.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxi.png b/production/example_apps/zippy_maps/webroot/img/icons/taxi.png
new file mode 100644 (file)
index 0000000..b09359e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxi.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png b/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png
new file mode 100644 (file)
index 0000000..6eaed94
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png b/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png
new file mode 100644 (file)
index 0000000..698719e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png b/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png
new file mode 100644 (file)
index 0000000..a7ac062
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png b/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png
new file mode 100644 (file)
index 0000000..bb6fa71
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/telephone.png b/production/example_apps/zippy_maps/webroot/img/icons/telephone.png
new file mode 100644 (file)
index 0000000..97121b0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/telephone.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png b/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png
new file mode 100644 (file)
index 0000000..e0dcb6a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png b/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png
new file mode 100644 (file)
index 0000000..987c1f7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tennis.png b/production/example_apps/zippy_maps/webroot/img/icons/tennis.png
new file mode 100644 (file)
index 0000000..f6f372b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tennis.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/terrace.png b/production/example_apps/zippy_maps/webroot/img/icons/terrace.png
new file mode 100644 (file)
index 0000000..aef05b4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/terrace.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/text.png b/production/example_apps/zippy_maps/webroot/img/icons/text.png
new file mode 100644 (file)
index 0000000..04e7bdb
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/text.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/textiles.png b/production/example_apps/zippy_maps/webroot/img/icons/textiles.png
new file mode 100644 (file)
index 0000000..630f372
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/textiles.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theater.png b/production/example_apps/zippy_maps/webroot/img/icons/theater.png
new file mode 100644 (file)
index 0000000..627fb55
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theater.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theft.png b/production/example_apps/zippy_maps/webroot/img/icons/theft.png
new file mode 100644 (file)
index 0000000..1dbf922
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theft.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/themepark.png b/production/example_apps/zippy_maps/webroot/img/icons/themepark.png
new file mode 100644 (file)
index 0000000..92ddc01
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/themepark.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/therapy.png b/production/example_apps/zippy_maps/webroot/img/icons/therapy.png
new file mode 100644 (file)
index 0000000..d20b0cc
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/therapy.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png b/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png
new file mode 100644 (file)
index 0000000..c636169
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png b/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png
new file mode 100644 (file)
index 0000000..7bf618e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png b/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png
new file mode 100644 (file)
index 0000000..193fa5f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png b/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png
new file mode 100644 (file)
index 0000000..9a74e62
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png b/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png
new file mode 100644 (file)
index 0000000..c36df0b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png b/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png
new file mode 100644 (file)
index 0000000..824c1a2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tires.png b/production/example_apps/zippy_maps/webroot/img/icons/tires.png
new file mode 100644 (file)
index 0000000..1967000
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tires.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/toilets.png b/production/example_apps/zippy_maps/webroot/img/icons/toilets.png
new file mode 100644 (file)
index 0000000..327834a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/toilets.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png b/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png
new file mode 100644 (file)
index 0000000..8733d3a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tools.png b/production/example_apps/zippy_maps/webroot/img/icons/tools.png
new file mode 100644 (file)
index 0000000..8b42712
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tools.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png b/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png
new file mode 100644 (file)
index 0000000..a9b9fe1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/torture.png b/production/example_apps/zippy_maps/webroot/img/icons/torture.png
new file mode 100644 (file)
index 0000000..b67a131
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/torture.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tower.png b/production/example_apps/zippy_maps/webroot/img/icons/tower.png
new file mode 100644 (file)
index 0000000..e2af01a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tower.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png
new file mode 100644 (file)
index 0000000..37dc9e6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/toys.png b/production/example_apps/zippy_maps/webroot/img/icons/toys.png
new file mode 100644 (file)
index 0000000..f9e1003
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/toys.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png b/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png
new file mode 100644 (file)
index 0000000..c408c07
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png b/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png
new file mode 100644 (file)
index 0000000..19ea65f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/train.png b/production/example_apps/zippy_maps/webroot/img/icons/train.png
new file mode 100644 (file)
index 0000000..63e386e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/train.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tramway.png b/production/example_apps/zippy_maps/webroot/img/icons/tramway.png
new file mode 100644 (file)
index 0000000..5e80bc1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tramway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trash.png b/production/example_apps/zippy_maps/webroot/img/icons/trash.png
new file mode 100644 (file)
index 0000000..05f610a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trash.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png b/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png
new file mode 100644 (file)
index 0000000..f4f27c8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png b/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png
new file mode 100644 (file)
index 0000000..c2c6d24
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/treedown.png b/production/example_apps/zippy_maps/webroot/img/icons/treedown.png
new file mode 100644 (file)
index 0000000..560eba5
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/treedown.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png b/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png
new file mode 100644 (file)
index 0000000..def53ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trolley.png b/production/example_apps/zippy_maps/webroot/img/icons/trolley.png
new file mode 100644 (file)
index 0000000..24d431c
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trolley.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/truck3.png b/production/example_apps/zippy_maps/webroot/img/icons/truck3.png
new file mode 100644 (file)
index 0000000..c4e1320
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/truck3.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png b/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png
new file mode 100644 (file)
index 0000000..5caf387
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png b/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png
new file mode 100644 (file)
index 0000000..31be93f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png b/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png
new file mode 100644 (file)
index 0000000..ca4121d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tweet.png b/production/example_apps/zippy_maps/webroot/img/icons/tweet.png
new file mode 100644 (file)
index 0000000..55a8a1d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tweet.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png b/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png
new file mode 100644 (file)
index 0000000..dc1a779
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ufo.png b/production/example_apps/zippy_maps/webroot/img/icons/ufo.png
new file mode 100644 (file)
index 0000000..521c163
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ufo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png b/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png
new file mode 100644 (file)
index 0000000..a0ab615
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/underground.png b/production/example_apps/zippy_maps/webroot/img/icons/underground.png
new file mode 100644 (file)
index 0000000..02490a0
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/underground.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/university.png b/production/example_apps/zippy_maps/webroot/img/icons/university.png
new file mode 100644 (file)
index 0000000..2cdb09d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/university.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png b/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png
new file mode 100644 (file)
index 0000000..dc357f1
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/van.png b/production/example_apps/zippy_maps/webroot/img/icons/van.png
new file mode 100644 (file)
index 0000000..eef8711
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/van.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/vespa.png b/production/example_apps/zippy_maps/webroot/img/icons/vespa.png
new file mode 100644 (file)
index 0000000..6804ed7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/vespa.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png b/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png
new file mode 100644 (file)
index 0000000..8827f8a
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/video.png b/production/example_apps/zippy_maps/webroot/img/icons/video.png
new file mode 100644 (file)
index 0000000..49f1bcd
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/video.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/videogames.png b/production/example_apps/zippy_maps/webroot/img/icons/videogames.png
new file mode 100644 (file)
index 0000000..22d2956
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/videogames.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/villa.png b/production/example_apps/zippy_maps/webroot/img/icons/villa.png
new file mode 100644 (file)
index 0000000..3fe6b79
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/villa.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png
new file mode 100644 (file)
index 0000000..c5257ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png b/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png
new file mode 100644 (file)
index 0000000..033152e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png b/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png
new file mode 100644 (file)
index 0000000..cc4a8f6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waiting.png b/production/example_apps/zippy_maps/webroot/img/icons/waiting.png
new file mode 100644 (file)
index 0000000..eda32d2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waiting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png b/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png
new file mode 100644 (file)
index 0000000..4e4e9ba
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/war.png b/production/example_apps/zippy_maps/webroot/img/icons/war.png
new file mode 100644 (file)
index 0000000..fc82796
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/war.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png b/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png
new file mode 100644 (file)
index 0000000..91d4f5d
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/water.png b/production/example_apps/zippy_maps/webroot/img/icons/water.png
new file mode 100644 (file)
index 0000000..593fe65
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/water.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png b/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png
new file mode 100644 (file)
index 0000000..eab5c36
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png b/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png
new file mode 100644 (file)
index 0000000..dc4636b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png
new file mode 100644 (file)
index 0000000..99d5c64
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png b/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png
new file mode 100644 (file)
index 0000000..9787105
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png b/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png
new file mode 100644 (file)
index 0000000..ede6e97
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watertower.png b/production/example_apps/zippy_maps/webroot/img/icons/watertower.png
new file mode 100644 (file)
index 0000000..6b4c7b4
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watertower.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png b/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png
new file mode 100644 (file)
index 0000000..743406e
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png b/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png
new file mode 100644 (file)
index 0000000..661c928
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/webcam.png b/production/example_apps/zippy_maps/webroot/img/icons/webcam.png
new file mode 100644 (file)
index 0000000..da16de2
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/webcam.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wedding.png b/production/example_apps/zippy_maps/webroot/img/icons/wedding.png
new file mode 100644 (file)
index 0000000..c8c40b7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wedding.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/weights.png b/production/example_apps/zippy_maps/webroot/img/icons/weights.png
new file mode 100644 (file)
index 0000000..39e83b7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/weights.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png b/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png
new file mode 100644 (file)
index 0000000..a474c17
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png b/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png
new file mode 100644 (file)
index 0000000..3f1b368
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wifi.png b/production/example_apps/zippy_maps/webroot/img/icons/wifi.png
new file mode 100644 (file)
index 0000000..2c7c360
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wifi.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png b/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png
new file mode 100644 (file)
index 0000000..cb94055
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png
new file mode 100644 (file)
index 0000000..bb7a3aa
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png b/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png
new file mode 100644 (file)
index 0000000..89c4dc7
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png
new file mode 100644 (file)
index 0000000..ce6af24
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png b/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png
new file mode 100644 (file)
index 0000000..16a1123
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png b/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png
new file mode 100644 (file)
index 0000000..2606aef
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/winebar.png b/production/example_apps/zippy_maps/webroot/img/icons/winebar.png
new file mode 100644 (file)
index 0000000..c927950
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/winebar.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png b/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png
new file mode 100644 (file)
index 0000000..c85f42f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png b/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png
new file mode 100644 (file)
index 0000000..d62f002
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png b/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png
new file mode 100644 (file)
index 0000000..24f9587
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/workshop.png b/production/example_apps/zippy_maps/webroot/img/icons/workshop.png
new file mode 100644 (file)
index 0000000..c50ea96
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/workshop.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/world.png b/production/example_apps/zippy_maps/webroot/img/icons/world.png
new file mode 100644 (file)
index 0000000..524744f
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/world.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png b/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png
new file mode 100644 (file)
index 0000000..02cabb9
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png b/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png
new file mode 100644 (file)
index 0000000..779f6e6
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/yoga.png b/production/example_apps/zippy_maps/webroot/img/icons/yoga.png
new file mode 100644 (file)
index 0000000..120ecda
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/yoga.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/yooner.png b/production/example_apps/zippy_maps/webroot/img/icons/yooner.png
new file mode 100644 (file)
index 0000000..d471f13
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/yooner.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png b/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png
new file mode 100644 (file)
index 0000000..2ace63b
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png b/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png
new file mode 100644 (file)
index 0000000..6441e76
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png b/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png
new file mode 100644 (file)
index 0000000..21b18e8
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zoo.png b/production/example_apps/zippy_maps/webroot/img/icons/zoo.png
new file mode 100644 (file)
index 0000000..adc20f3
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zoo.png differ
diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zoom.png b/production/example_apps/zippy_maps/webroot/img/icons/zoom.png
new file mode 100644 (file)
index 0000000..a539187
Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zoom.png differ
diff --git a/production/example_apps/zippy_maps/webroot/index.php b/production/example_apps/zippy_maps/webroot/index.php
new file mode 100644 (file)
index 0000000..6791f47
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * The Front Controller for handling every request
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         0.2.9
+ * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+// for built-in server
+if (php_sapi_name() === 'cli-server') {
+    $_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
+
+    $url = parse_url(urldecode($_SERVER['REQUEST_URI']));
+    $file = __DIR__ . $url['path'];
+    if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
+        return false;
+    }
+}
+require dirname(__DIR__) . '/vendor/autoload.php';
+
+use App\Application;
+use Cake\Http\Server;
+
+// Bind your application to the server.
+$server = new Server(new Application(dirname(__DIR__) . '/config'));
+
+// Run the request/response through the application
+// and emit the response.
+$server->emit($server->run());
diff --git a/production/example_apps/zippy_maps/webroot/js/empty b/production/example_apps/zippy_maps/webroot/js/empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js b/production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js
new file mode 100644 (file)
index 0000000..644d35e
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),
+null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
index 326f11aa5bd2de47071aaf20faf0d7cd281aaadb..58b0e9a87f08fe1a3fd16464487942fc5bda4187 100644 (file)
@@ -3,7 +3,7 @@
 # specifies the version of the code that is being constructed here.
 major=2
 minor=140
-revision=114
+revision=115
 build=420
 
 # specifies the remainder of the version record info.
index 0616d0f4eb6d3a4249b759faa5e25e8dce9cf1f8..46a5dc2553f2a5f824680fe812c1ff2d95f63351 100644 (file)
@@ -2,7 +2,9 @@
 # these metrics are how bogged down we are in to-do type items.
 
 # logged historical file where we append our latest report.
-REPORT_FILE="$HOME/cloud/magic_cabinet/fred/task_stats/overload_history.txt"
+REPORT_FILE="$CLOUD_BASE/stats/overload_history.txt"
+
+#hmmm: check path validity?
 
 # given a path, this will find how many items are under it, ignoring svn and git files, plus
 # other patterns we happen to notice are not useful.
@@ -112,53 +114,53 @@ full_report+="count\tcomplexity\tweight (kb)\tcategory\n\
 #hmmm: don't fail if the hierarchy doesn't exist.
 
 # high priority stuff would be called urgent.
-analyze_hierarchy_and_report ~/cloud/urgent "high priority (aieeee!)"
+analyze_hierarchy_and_report $CLOUD_BASE/urgent "high priority (aieeee!)"
 
 # notes are individual files of tasks, usually, although some are combined.
-analyze_hierarchy_and_report ~/cloud/grunty_notes "grunty notes (externalities)"
+analyze_hierarchy_and_report $CLOUD_BASE/grunty* "grunty (external facing) notes"
 
 # web site development tasks.
-analyze_hierarchy_and_report ~/cloud/webular "web design (ideas and tasks)"
+analyze_hierarchy_and_report $CLOUD_BASE/webular "web design (ideas and tasks)"
 
 # feisty notes are about feisty meow(r) concerns ltd codebase development.
-analyze_hierarchy_and_report ~/cloud/feisty_notes "feisty meow notes (mondo coding)"
+analyze_hierarchy_and_report $CLOUD_BASE/feisty_notes "feisty meow notes (mondo coding)"
 
 # metaverse notes are about our ongoing simulator development and LSL scripting.
-analyze_hierarchy_and_report ~/cloud/metaverse "metaverse in cyberspace design and scripting"
+analyze_hierarchy_and_report $CLOUD_BASE/metaverse "metaverse in cyberspace design and scripting"
 
 # home notes are a new top-level category; used to be under the grunty.
-analyze_hierarchy_and_report ~/cloud/branch_road "hearth and home notes (branch road)"
+analyze_hierarchy_and_report $CLOUD_BASE/branch_road "hearth and home notes (branch road)"
 
 # and then count up the things that we think will be cleaned soon, but one thing we have learned
 # unsorted files haven't been categorized yet.
-analyze_hierarchy_and_report ~/cloud/disordered "disordered and maybe deranged files"
+analyze_hierarchy_and_report $CLOUD_BASE/disordered "disordered and maybe deranged files"
 
 # we now consider the backlog of things to read to be a relevant fact.  this is going to hose
 # up our weight accounting considerably.
-analyze_hierarchy_and_report ~/cloud/reading "reading list (for a quiet afternoon)"
+analyze_hierarchy_and_report $CLOUD_BASE/reading "reading list (for a quiet afternoon)"
 
 ####
 
 # vocation is a prefix for anything i consider part of my life's work.
-analyze_by_dir_patterns "life's work and other oddities" ~/cloud/vocation*
+analyze_by_dir_patterns "life's work and other oddities" $CLOUD_BASE/vocation*
 
 # scan all the items declared as active projects.
-analyze_by_dir_patterns "active issues" ~/cloud/active*
+analyze_by_dir_patterns "active issues" $CLOUD_BASE/active*
 
 # rub alongside all the travel notes to see if any have interesting burrs.
-analyze_by_dir_patterns "travel plans" ~/cloud/walkabout*
+analyze_by_dir_patterns "travel plans" $CLOUD_BASE/walkabout*
 
-# scan across all appropriately named project or research folders that live in the "cloud".
-analyze_by_dir_patterns "running projects" ~/cloud/project* ~/cloud/research*
+# scan across all appropriately named project or research folders.
+analyze_by_dir_patterns "running projects" $CLOUD_BASE/project* $CLOUD_BASE/research*
 
 # look for our mad scientist style efforts.
-analyze_by_dir_patterns "lab experiments" ~/cloud/experiment*
+analyze_by_dir_patterns "lab experiments" $CLOUD_BASE/experiment*
 
 # snag any work related items for that category.
-analyze_by_dir_patterns "jobby work tasks" ~/cloud/job* 
+analyze_by_dir_patterns "jobby work tasks" $CLOUD_BASE/job* 
 
 # scan all the trivial project folders.
-analyze_by_dir_patterns "trivialities and back burner items" ~/cloud/trivia* ~/cloud/backburn*
+analyze_by_dir_patterns "trivialities and back burner items" $CLOUD_BASE/trivia* $CLOUD_BASE/backburn*
 
 full_report+="================================================================\n\
 "
diff --git a/scripts/archival/comparator.sh b/scripts/archival/comparator.sh
new file mode 100644 (file)
index 0000000..fe3db5d
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# compares this machine's local archives against an exemplar set.
+
+remote_place="$1"; shift
+if [ -z "$remote_place" ]; then
+  remote_place=wildmutt
+  #remote_place=curie
+fi
+local_place="$1"; shift
+if [ -z "$local_place" ]; then
+  local_place=/z
+fi
+
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"
+
+uber_archive_comparator "$remote_place" "$local_place"
+
diff --git a/scripts/archival/compare_backup_drive.sh b/scripts/archival/compare_backup_drive.sh
new file mode 100644 (file)
index 0000000..501bfc9
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# compares the soapbox with the real archive to see if any older stuff might be
+# left behind.  if it's got a less than in front, then it's only on the soapbox drive
+# now rather than the pc's hard drive.
+
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+
+function compare_archives_with_target()
+{
+  local target="$1"; shift
+
+echo compare arch with target: $target
+
+  for currdir in $MAJOR_ARCHIVE_SOURCES; do
+    sep
+    echo "comparing '$currdir' with target '$target', where 'less thans' are on the target..."
+echo would do--    compare_dirs "$target/$(basename $currdir)" "$currdir"
+  done
+}
+
+# decide which drive to compare.
+targets="$1"
+if [ -z "$targets" ]; then
+  targets=($($(which ls) -1 /media/$USER/*))
+  if [ ${#targets[@]} -gt 1 ]; then
+    echo "
+Please provide a media drive name on the command line, because more than
+one possibility exists.
+"
+    exit 1
+  fi
+fi
+
+echo "comparing the media drive '${targets[0]}' against local archives."
+
+compare_archives_with_target "/media/$USER/${targets[0]}"
+
+sep
+
index 084e26c318c0ae756d823bdda0f88d1069d76cac..baca195c08edf92a36bf3c63db74d6d1450b340c 100644 (file)
@@ -42,7 +42,7 @@ function synch_directory_to_target()
   sep
 
   if [ ! -d "$from" ]; then
-    echo "skipping synch on missing source directory: ${from}"
+    echo "skipping synch on missing source directory: $from"
     return 0
   fi
   if [ ! -d "$to" ]; then
@@ -69,12 +69,12 @@ function update_archive_drive()
 
   sep
 
-  echo Target drive currently has...
-  ls "$target_folder"
-  if [ $? -ne 0 ]; then
-    echo "The target location '$target_folder' is not mounted currently, so cannot be updated."
+  if [ ! -d "$target_folder" -a ! -f "$target_folder" ]; then
+    echo "Target '$target_folder' is not available currently; not updating."
     return 1
   fi
+  echo Target drive currently has...
+  dir "$target_folder"
 
   # synch all our targets.
   for currdir in $MAJOR_ARCHIVE_SOURCES; do
@@ -98,6 +98,66 @@ function update_archive_drive()
   popd
 }
 
+# compares one local well-known folder against the similar folder on a
+# remote destination.  the first folder is the archive name, with no paths.
+# the second paramter is the local path component of the archive, such as
+# "/z" if the archives are found in the /z hierarchy.  the third parameter
+# is the remote location of the archive, which should just be a host name.
+# the fourth parameter is the destination path component to match the local
+# path component (since these can differ).
+function do_a_folder_compare()
+{
+  local archname="$1"; shift
+  local pathing="$1"; shift
+  local dest="$1"; shift
+  local destpath="$1"; shift
+  if [ -z "$archname" -o -z "$dest" ]; then
+    echo "do_a_folder_compare needs an archive name and a destination host."
+    return 1
+  fi
+
+  if [ -d "/z/$archname" ]; then
+    sep 14
+    echo "Comparing ${pathing}/${archname} with remote $dest:${destpath}/${archname}"
+    compare_dirs ${pathing}/${archname} ${dest}:${destpath}/${archname}
+    sep 14
+  fi
+}
+
+# runs through all the local archives on this host to make sure nothing is
+# different when compared with the mainline versions on the specified host.
+# the first parameter is the remote version to compare against.  if there is
+# a second parameter, it is used as the path on the local machine where the
+# comparison should be based (e.g. an archive drive rather than /z/).
+function uber_archive_comparator()
+{
+  local remote_arch="$1"; shift
+  if [ -z "$remote_arch" ]; then
+    echo uber_archive_comparator needs the remote archive host to compare with.
+    return 1
+  fi
+  local local_place="$1"; shift
+  if [ -z "$local_place" ]; then
+    local_place="/z"
+  fi
+
+  sep 14
+  echo "comparing against host '$remote_arch'"
+  sep 14
+
+#hmmm: shouldn't this be a list in a variable someplace?
+  for archicle in \
+    basement \
+    imaginations \
+    musix \
+    toaster \
+    walrus \
+    ; do
+      do_a_folder_compare ${archicle} ${local_place} ${remote_arch} "/z"
+  done
+}
+
+
 #hmmm: abstractable piece?  the runtime plug at the end of a library script?
 # this block should execute when the script is actually run, rather
 # than when it's just being sourced.
diff --git a/scripts/archival/localz_comparator.sh b/scripts/archival/localz_comparator.sh
new file mode 100644 (file)
index 0000000..32980c4
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+source "$FEISTY_MEOW_SCRIPTS/archival/comparator.sh"
+
+
diff --git a/scripts/archival/raw_synch.sh b/scripts/archival/raw_synch.sh
new file mode 100644 (file)
index 0000000..e0cebc6
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+
+synch_host="$1"; shift
+if [ -z "$synch_host" ]; then
+  echo This script requires a hostname where we expect to find archives.
+  exit 1
+fi
+
+echo "Updating our local archives from $synch_host: this is very raw mode, without syncthing!" | splitter
+echo
+
+for currdir in basement imaginations musix toaster walrus; do
+  if [ -d "/z/$currdir" ]; then
+    sep
+    echo "synching $currdir folder from $synch_host..."
+    rsync -avz "$synch_host":/z/$currdir/* /z/$currdir/
+    continue_on_error synching with $currdir from remote host.
+  fi
+done
+
+sep
+
index 60845421df08b5a889c71aade54318c18ce536bc..91ee6d75a83c9f1f32183613a8b6c8517470ad92 100644 (file)
@@ -36,7 +36,7 @@ $TMP =~ s/\\/\//g;  # fix the temp variable for ms-winders.
 @missing_log = ();
 
 # these files are considered unimportant and won't be included in the archive.
-@junk_file_list = ("*~", "*.$$$", "3rdparty", "*.aps", "*.bak", "binaries",
+@junk_file_list = ("*~", "*.$$$", "*.aps", "*.bak", "binaries",
     "*.bsc", "*.cgl", "*.csm", "CVS", "Debug", "*.dll", "*.err", "*.exe",
     "generated_*", "*.git", "*.glb", "inprogress", "ipch", "*.llm",
     "*.log", "*.lnk",
index e6c54770b2d92693b940f5f267cc06f580b65fd3..20e15a776c27149b962697fa8edb8ab8a52f0bb6 100644 (file)
@@ -39,7 +39,6 @@ local($root) = &canonicalize("$FEISTY_MEOW_APEX");
 
 # snarf up all the important directories.
 # CAK: current as of 2012-05-05.
-###moved &backup_hierarchy($snarf_file_base, $number, $root, "customize");
 &backup_hierarchy($snarf_file_base, $number, $root, "infobase");
 &backup_hierarchy($snarf_file_base, $number, $root, "documentation");
 &backup_hierarchy($snarf_file_base, $number, $root, "experiments");
@@ -57,6 +56,7 @@ local($root) = &canonicalize("$FEISTY_MEOW_APEX");
 &backup_hierarchy($snarf_file_base, $number, "$root", "production/3rdparty");
 &backup_hierarchy($snarf_file_base, $number, "$root", "production/assign_bases");
 &backup_hierarchy($snarf_file_base, $number, "$root", "production/check_versions");
+&backup_hierarchy($snarf_file_base, $number, "$root", "production/example_apps");
 &backup_hierarchy($snarf_file_base, $number, "$root", "production/setup_src");
 &backup_hierarchy($snarf_file_base, $number, "$root", "production/sites");
 
index 04ce990bc0cb13db6957b4556ed0162649b7cf6a..b67ac9788a56eaabbf00af64ac58bc3e2e35cdad 100644 (file)
@@ -65,6 +65,7 @@ if [[ "$archive_file" =~ .*\.tar$ \
     || "$archive_file" =~ .*\.tar\.xz$ \
     || "$archive_file" =~ .*\.iar$ \
     || "$archive_file" =~ .*\.oar$ \
+    || "$archive_file" =~ .*\.tbz$ \
     || "$archive_file" =~ .*\.tgz$ \
     || "$archive_file" =~ .*\.txz$ \
     || "$archive_file" =~ .*\.ova$ \
old mode 100644 (file)
new mode 100755 (executable)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 109ad0ccd32bd2e714b6f3bce1514c4018d49e25..e62e2e31815fb15fd6f4d56a64696923871175dc 100644 (file)
 
 ##############
 
+# make our functions available to the aliases.
+#hmmm: should this be necessary?  will it even work?
+source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
+
+##############
+
 # call the generated aliases file, if it exists.
 # we do this first so that our core aliases get a chance to override the aliases
 # based on scripts.
@@ -126,12 +132,18 @@ define_yeti_alias play='bash $FEISTY_MEOW_SCRIPTS/multimedia/sound_play.sh'
 
 # some really eccentric feisty meow aliases...
 
+# launches a bash session in the background using the screen command.
+define_yeti_alias bashido='screen -L -S bashido -d -m bash'
+
 # says goodbye when leaving a shell.
 define_yeti_alias bye='. $FEISTY_MEOW_SCRIPTS/processes/goodbye.sh'
+
 define_yeti_alias cputemp='acpi -t'
+
 # makes root user's home directory's permissions right.
 define_yeti_alias reroot='chown -R root:root /root'
-# yes, these are really helpful...
+
+# yes, these what/who/why functions are really helpful...
 define_yeti_alias whoareyou='echo -e "Hello, I am a computer named $(hostname)\nand I am very pleased to meet you."'
 define_yeti_alias whereami='echo whoa dude, try not to think about it...'
 define_yeti_alias why='echo We all wonder what the point of the universe is at times.  If you figure it all out, please write us.'
index 6dbd31c3415ea797a493d58e92004d57b60ff8c0..c435d2dd9751f6045af2e8b4bedf8c82f8917166 100644 (file)
@@ -14,25 +14,21 @@ fi
 
 source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
 
-LOG_FILE=$TMP/zz_transients.log
-  # log file for this script.
-
-word=Verified
 if [ ! -d "$TMP" ]; then
   mkdir -p $TMP
-  word=Created
   chown $USER $TMP
   if [ $? -ne 0 ]; then
     echo "failed to chown $TMP to user's ownership."
   fi
+  log_feisty_meow_event "created transient area \"$TMP\" for $USER on $(date_stringer)." 
 fi
-echo "$word transient area \"$TMP\" for $USER on $(date_stringer)." >>$LOG_FILE
 
 # set other temporary variables to the same place as TMP.
 export TEMP=$TMP
 
 # Make sure no one else is playing around in the temporary directory.
 chmod 700 $TMP
+continue_on_error chmodding to secure temporary directory.
 
 if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then echo done creating temporary directory....; fi
 
index a58e818fd5000bee4172a7fcf0f955e8d76d0656..f13f4afeb83565738a042e42a051fc78ca38f826 100644 (file)
@@ -61,6 +61,23 @@ if [ -z "$skip_all" ]; then
 
   ##############
 
+  function fm_username()
+  {
+    # see if we can get the user name from the login name.  oddly this sometimes doesn't work.
+    local custom_user="$(logname 2>/dev/null)"
+    if [ -z "$custom_user" ]; then
+      # try the normal unix user variable.
+      custom_user="$USER"
+    fi
+    if [ -z "$custom_user" ]; then
+      # try the windows user variable.
+      custom_user="$USERNAME"
+    fi
+    echo "$custom_user"
+  }
+
+  ##############
+
   # displays the value of a variable in bash friendly format.
   function var() {
     HOLDIFS="$IFS"
@@ -187,20 +204,18 @@ if [ -z "$skip_all" ]; then
     # version for the other side (just 'linux'); we don't want the remote side still
     # thinking it's running xterm.
     save_terminal_title
-    if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
-      echo TERM saved is: $PRIOR_TERMINAL_TITLE
-    fi
+
 #hmmm: why were we doing this?  it scorches the user's logged in session, leaving it without proper terminal handling.
 #    # we save the value of TERM; we don't want to leave the user's terminal
 #    # brain dead once we come back from this function.
 #    local oldterm="$TERM"
 #    export TERM=linux
+
     /usr/bin/ssh -X -C "${args[@]}"
+
 #    # restore the terminal variable also.
 #    TERM="$oldterm"
-    if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
-      echo TERM before restore, will use prior title of: $PRIOR_TERMINAL_TITLE
-    fi
+
     restore_terminal_title
     if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
       echo TERM title restored to prior value
@@ -486,15 +501,17 @@ if [ -z "$skip_all" ]; then
     restore_terminal_title
   }
 
-  # copies a set of custom scripts into the proper location for feisty meow
-  # to merge their functions and aliases with the standard set.
+  # merges a set of custom scripts into the feisty meow environment.  can be
+  # passed a name to use as the custom scripts source folder (found on path
+  # $FEISTY_MEOW_SCRIPTS/customize/{name}), or it will try to guess the name
+  # by using the login name.
   function recustomize()
   {
     local custom_user="$1"; shift
     if [ -z "$custom_user" ]; then
       # default to login name if there was no name provided.
-      custom_user="$(logname)"
-        # we do intend to use logname here to get the login name and to ignore
+      custom_user="$(fm_username)"
+        # we do intend to use the login name here to get the login name and to ignore
         # if the user has sudo root access; we don't want to provide a custom
         # profile for root.
     fi
@@ -517,51 +534,43 @@ we will skip recustomization, but these other customizations are available:
       return 1
     fi
 
-    # prevent permission foul-ups.
-    my_user="$USER"
-      # here we definitely want the effective user name (in USER), since
-      # we don't want, say, fred (as logname) to own all of root's loading
-      # dock stuff.
-    chown -R "$my_user:$my_user" \
-        "$FEISTY_MEOW_LOADING_DOCK"/* "$FEISTY_MEOW_GENERATED_STORE"/* 2>/dev/null
-    continue_on_error "chowning feisty meow generated directories to $my_user"
-
+    # recreate the feisty meow loading dock.
     regenerate >/dev/null
-    pushd "$FEISTY_MEOW_LOADING_DOCK/custom" &>/dev/null
-    incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom")"
-
-    local fail_message="\n
-are the perl dependencies installed?  if you're on ubuntu or debian, try this:\n
-    $(grep "apt.*perl" $FEISTY_MEOW_APEX/readme.txt)\n
-or if you're on cygwin, then try this (if apt-cyg is available):\n
-    $(grep "apt-cyg.*perl" $FEISTY_MEOW_APEX/readme.txt)\n";
-
-    #echo "the incongruous files list is: $incongruous_files"
-    # disallow a single character result, since we get "*" as result when nothing exists yet.
-    if [ ${#incongruous_files} -ge 2 ]; then
-      log_feisty_meow_event "cleaning unknown older overrides..."
-      perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" $incongruous_files
-      continue_on_error "running safedel.  $fail_message" 
+
+    # jump into the loading dock and make our custom link.
+    pushd "$FEISTY_MEOW_LOADING_DOCK" &>/dev/null
+    if [ -h custom ]; then
+      # there's an existing link, so remove it.
+      \rm custom
+    fi
+    # make sure we cleaned up the area before we re-link.
+    if [ -h custom -o -d custom -o -f custom ]; then
+      echo "
+Due to an over-abundance of caution, we are not going to remove an unexpected
+'custom' object found in the file system.  This object is located in the
+feisty meow loading dock here: $(pwd)
+And here is a description of the rogue 'custom' object:
+"
+      ls -al custom
+      echo "
+If you are pretty sure that this is just a remnant of an older approach in
+feisty meow, where we copied the custom directory rather than linking it
+(and it most likely is just such a bit of cruft of that nature), then please
+remove that old remnant 'custom' item, for example by saying:
+  /bin/rm -rf \"custom\" ; popd
+Sorry for the interruption, but we want to make sure this removal wasn't
+automatic if there is even a small amount of doubt about the issue."
+      return 1
     fi
+
+    # create the custom folder as a link to the customizations.
+    ln -s "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" custom
+
     popd &>/dev/null
-    log_feisty_meow_event "copying custom overrides for $custom_user"
-    mkdir -p "$FEISTY_MEOW_LOADING_DOCK/custom" 2>/dev/null
-    perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom"
-    continue_on_error "running cpdiff.  $fail_message"
 
-    if [ -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" ]; then
-      log_feisty_meow_event "copying custom scripts for $custom_user"
-#hmmm: could save output to show if an error occurs.
-      rsync -avz "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" &>/dev/null
-      continue_on_error "copying customization scripts"
-    fi
+    # now take into account all the customizations by regenerating the feisty meow environment.
     regenerate
 
-    # prevent permission foul-ups, again.
-    chown -R "$my_user:$my_user" \
-        "$FEISTY_MEOW_LOADING_DOCK" "$FEISTY_MEOW_GENERATED_STORE" 2>/dev/null
-    continue_on_error "once more chowning feisty meow generated directories to $my_user"
-
     restore_terminal_title
   }
 
@@ -712,49 +721,6 @@ or if you're on cygwin, then try this (if apt-cyg is available):\n
     popd &>/dev/null
   }
 
-  function spacem()
-  {
-    while [ $# -gt 0 ]; do
-      arg="$1"; shift
-      if [ ! -f "$arg" -a ! -d "$arg" ]; then
-        echo "=> did not find a file or directory named '$arg'."
-        continue
-      fi
-
-      # first we will capture the output of the character replacement operation for reporting.
-      # this is done first since some filenames can't be properly renamed in perl (e.g. if they
-      # have pipe characters apparently).
-      intermediate_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg")"
-      local saw_intermediate_result=0
-      if [ -z "$intermediate_name" ]; then
-        # make sure we report something, if there are no further name changes.
-        intermediate_name="'$arg'"
-      else 
-        # now zap the first part of the name off (since original name isn't needed).
-        intermediate_name="$(echo $intermediate_name | sed -e 's/.*=> //')"
-        saw_intermediate_result=1
-      fi
-
-      # first we rename the file to be lower case.
-      actual_file="$(echo $intermediate_name | sed -e "s/'\([^']*\)'/\1/")"
-      final_name="$(perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$actual_file")"
-      local saw_final_result=0
-      if [ -z "$final_name" ]; then
-        final_name="$intermediate_name"
-      else
-        final_name="$(echo $final_name | sed -e 's/.*=> //')"
-        saw_final_result=1
-      fi
-#echo intermed=$saw_intermediate_result 
-#echo final=$saw_final_result 
-
-      if [[ $saw_intermediate_result != 0 || $saw_final_result != 0 ]]; then
-        # printout the combined operation results.
-        echo "'$arg' => $final_name"
-      fi
-    done
-  }
-
   ##############
 
 # new breed of definer functions goes here.  still in progress.
@@ -967,6 +933,26 @@ return 0
 
   ##############
 
+  # space 'em all: fixes naming for all of the files of the appropriate types
+  # in the directories specified.
+  function spacemall() {
+    local -a dirs=("${@}")
+    if [ ${#dirs[@]} -eq 0 ]; then
+      dirs=(.)
+    fi
+
+    local charnfile="$(mktemp $TMP/zz_charn.XXXXXX)"
+    find "${dirs[@]}" -follow -maxdepth 1 -mindepth 1 -type f | \
+        grep -i \
+"docx\|eml\|html\|jpeg\|jpg\|m4a\|mov\|mp3\|ods\|odt\|pdf\|png\|pptx\|txt\|xlsx\|zip" | \
+        sed -e 's/^/"/' | sed -e 's/$/"/' | \
+        xargs bash "$FEISTY_MEOW_SCRIPTS/files/spacem.sh"
+    # drop the temp file now that we're done.
+    rm "$charnfile"
+  }
+
+  ##############
+
   # site avenger aliases
   function switchto()
   {
index 6521601c5d707aa5894850a02c8f6e75cf16f256..faf9e827924de944dd0f57c35100aa09771afed7 100644 (file)
@@ -23,7 +23,7 @@
 
 require "filename_helper.pl";
 
-use Env qw(FEISTY_MEOW_BINARIES BUILD_TOP FEISTY_MEOW_APEX FEISTY_MEOW_LOADING_DOCK FEISTY_MEOW_SCRIPTS DEBUG_FEISTY_MEOW );
+use Env qw(FEISTY_MEOW_BINARIES BUILD_TOP FEISTY_MEOW_APEX FEISTY_MEOW_LOADING_DOCK FEISTY_MEOW_SCRIPTS DEBUG_FEISTY_MEOW HOME );
 
 # given a possible aliasable filename, this will decide whether to create a perl
 # or bash alias for it.  it needs the filename of the possible alias and the
@@ -92,17 +92,14 @@ sub rebuild_script_aliases {
   }
   if (length($DEBUG_FEISTY_MEOW)) {
     print "using these alias files:\n";
-#print "HEY IS THIS PROBLEM CHILD?\n";
     foreach $i (@ALIAS_DEFINITION_FILES) {
       local $base_of_dir = &basename(&dirname($i));
       local $basename = &basename($i);
       print "  $base_of_dir/$basename\n";
     }
-#print "WAS PROBLEM CHILD ABOVE HERE?\n";
   }
 
   # write the aliases for sh and bash scripts.
-
   local $GENERATED_ALIAS_FILE = "$FEISTY_MEOW_LOADING_DOCK/fmc_core_and_custom_aliases.sh";
   if (length($DEBUG_FEISTY_MEOW)) {
     print "writing generated aliases in $GENERATED_ALIAS_FILE...\n";
@@ -170,7 +167,7 @@ if (! -d $FEISTY_MEOW_LOADING_DOCK) {
 
 # set the executable bit for binaries for just this current user.
 if (-d $FEISTY_MEOW_BINARIES) {
-  system("chmod -R u+x \"$FEISTY_MEOW_BINARIES\"/*");
+  system("find \"$FEISTY_MEOW_BINARIES\" -type f -exec chmod u+x \"{}\" ';'");
 }
 
 ##############
index cf1e1b0f68fef362066e74477ca46e2a43188f67..716e97be9982254051e47ee74a89a2b8e67dc331 100644 (file)
@@ -52,11 +52,14 @@ PERLLIB=$PERLLIB:"$FEISTY_MEOW_SCRIPTS/core":"$FEISTY_MEOW_SCRIPTS/files":"$FEIS
 PERL5LIB=$PERLLIB
 #echo PERLLIB after modification is $PERLLIB
 # make toast out of generated files right away, but leave any custom scripts.
-find "$FEISTY_MEOW_LOADING_DOCK" -maxdepth 1 -type f -exec perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" "{}" ';'
+\rm "$FEISTY_MEOW_LOADING_DOCK"/fmc_*
+#NO! find "$FEISTY_MEOW_LOADING_DOCK" -maxdepth 1 -type f -exec perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" "{}" ';'
 # &>/dev/null
-if [ ! -d "$FEISTY_MEOW_LOADING_DOCK/custom" ]; then
-  mkdir "$FEISTY_MEOW_LOADING_DOCK/custom"
-fi
+
+## #no, old:
+## if [ ! -d "$FEISTY_MEOW_LOADING_DOCK/custom" ]; then
+##   mkdir "$FEISTY_MEOW_LOADING_DOCK/custom"
+## fi
 
 # just a variable we use in here to refer to the generated variables file.
 FEISTY_MEOW_VARIABLES_LOADING_FILE="$FEISTY_MEOW_LOADING_DOCK/fmc_variables.sh"
diff --git a/scripts/customize/dirt/scripts/redirt.sh b/scripts/customize/dirt/scripts/redirt.sh
new file mode 100644 (file)
index 0000000..4e4df5a
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+function do_redirt()
+{
+  reapply_cool_permissions dirt
+
+  # anything else specific to dirt?
+}
+
+# this block should execute when the script is actually run, rather
+# than when it's just being sourced.
+if [[ $0 =~ .*redirt\.sh.* ]]; then
+  source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+  exit_on_error "sourcing the feisty meow environment"
+  source "$FEISTY_MEOW_SCRIPTS/security/cool_permissionator.sh"
+  exit_on_error "sourcing the permission script"
+  do_redirt
+  continue_on_error "redirting process"
+fi
+
index 37b085e479a467cea50fcd90e3b180040e9dad11..fc40f19eba5663eaa4aeba71fbf6cf3714f800eb 100644 (file)
@@ -4,6 +4,8 @@
 
 # updates the mounted barkuptree drive with stuff on wildmutt.
 define_yeti_alias update_barkuptree='source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"; update_archive_drive "/media/fred/barkuptreedrive"'
+# updates buffalonious when mounted.
+define_yeti_alias update_buffalonious='source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"; update_archive_drive "/z/buffalonious"'
 
 # updates local archive drive called catfurnose.
 define_yeti_alias update_catfurnose='source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"; update_archive_drive "/media/fred/catfurnose"'
@@ -14,6 +16,10 @@ define_yeti_alias update_fredmusicprime='source "$FEISTY_MEOW_SCRIPTS/archival/g
 # updates my little 1 TB "soapbox" style usb drive with any appropriate archives and source.
 define_yeti_alias update_soapbox='source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"; update_archive_drive "/media/fred/soapboxdrive"'
 
+# does the updating thing on the new tiny flat drive that for a while was serving the ps4 shuttle service but now is an honest ext4 drive.
+define_yeti_alias update_slimpickenz='source "$FEISTY_MEOW_SCRIPTS/archival/general_updater.sh"; update_archive_drive "/media/fred/slimpickenz"'
+
+
 # moo and unmoo mount the local folders i use most.
 #no longer used.  we are doing mostly full directory stores without nfs mounts these days.
 #define_yeti_alias moo='check_mount /z/stuffing ; check_mount /z/walrus ; check_mount /z/chunky ; check_mount /z/fredgrid'
index 64f28c17eecccc9f4c86ed372380fb6a16181850..36bee1e1cac0be0cb52ef5db6114af3a4b66eff4 100644 (file)
@@ -4,9 +4,8 @@
 if [ -z "$USER_CUSTOMIZATIONS_LOADED" ]; then
   # if we don't see the nethack variable defined, this probably hasn't run yet.
 
-  # The cloud directory is our new repository that's always available.  It serves as our
-  # personal cloud for data.
-  export CLOUD_BASE=$HOME/cloud
+  # The nuage directory is a cloud-like repository of our personal data, managed as a git repo.
+  export CLOUD_BASE=$HOME/nuage
 
   # The gruntose web site is expected to reside below, if it exists at all.
   export WEBBED_SITES=$HOME/web
@@ -15,7 +14,7 @@ if [ -z "$USER_CUSTOMIZATIONS_LOADED" ]; then
   fi
 
   # add a bunch of personal folders to the list for checkin & checkout.
-  REPOSITORY_LIST=" cloud ebooks web ${REPOSITORY_LIST} "
+  REPOSITORY_LIST=" nuage ebooks web ${REPOSITORY_LIST} "
 
   # adds our locally relevant archive folders into the list to be synched.
   MAJOR_ARCHIVE_SOURCES+="/z/archons /z/basement /z/imaginations /z/musix /z/toaster /z/walrus $HOME/brobdingnag"
diff --git a/scripts/customize/fred/scripts/archival/compare_soapbox.sh b/scripts/customize/fred/scripts/archival/compare_soapbox.sh
deleted file mode 100644 (file)
index d489373..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# compares the soapbox with the real archive to see if any older stuff might be
-# left behind.  if it's got a less than in front, then it's only on the soapbox drive
-# now rather than the pc's hard drive.
-
-source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
-
-function compare_archives_with_target()
-{
-  local target="$1"; shift
-
-  for currdir in $MAJOR_ARCHIVE_SOURCES; do
-    sep
-    echo "comparing '$currdir' with target '$target', where 'less thans' are on the target..."
-    compare_dirs "$target/$(basename $currdir)" "$currdir"
-  done
-}
-
-#hmmm: generalize this one also.
-
-compare_archives_with_target /media/fred/soapboxdrive
-
-sep
-
diff --git a/scripts/customize/fred/scripts/archival/euphrosyne_comparator.sh b/scripts/customize/fred/scripts/archival/euphrosyne_comparator.sh
deleted file mode 100644 (file)
index 28f703b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-# runs through all the local archives on euphrosyne to make sure nothing is different
-# when compared to the mainline versions on surya.
-
-#hmmm: add a check that this is in fact the right host, euphrosyne.
-
-#target=wildmutt
-target=curie
-
-source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
-
-sep 14
-echo "Comparing basement folder..."
-compare_dirs /z/basement ${target}:/z/basement
-sep 14
-
-sep 14
-echo "Comparing imaginations folder..."
-compare_dirs /z/imaginations ${target}:/z/imaginations
-sep 14
-
-sep 14
-echo "Comparing musix folder..."
-compare_dirs /z/musix ${target}:/z/musix
-sep 14
-
-sep 14
-echo "Comparing walrus folder..."
-compare_dirs /z/walrus ${target}:/z/walrus
-sep 14
diff --git a/scripts/customize/fred/scripts/archival/raw_synch.sh b/scripts/customize/fred/scripts/archival/raw_synch.sh
deleted file mode 100644 (file)
index 2ffc661..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
-
-synch_host="$1"; shift
-if [ -z "$synch_host" ]; then
-  echo This script requires a hostname where we expect to find archives.
-  exit 1
-fi
-
-echo "Updating our local archives from $synch_host: this is very raw mode, without syncthing!" | splitter
-echo
-
-for currdir in basement imaginations musix toaster walrus; do
-  sep
-  echo "synching $currdir folder from $synch_host..."
-  if [ -d "/z/$currdir" ]; then
-    rsync -avz "$synch_host":/z/$currdir/* /z/$currdir/
-    continue_on_error synching with $currdir from remote host.
-  fi
-done
-
-sep
-
index 764ab6c5459f59d18fb07970a6b21200a110a84b..9f08189adc15f17bbe886620243f1344817adcd8 100644 (file)
@@ -5,24 +5,6 @@
 
 source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
 
-#we are missing the netcp thing.  why????
-
-WINE_SOURCE_DIR="$HOME/wine_goods/My Games"
-SPOOLING_OUTPUT_DIR="$HOME/data/spooling_saves"
-
-if [ ! -d "$WINE_SOURCE_DIR" ]; then
-  WINE_SOURCE_DIR="/cygdrive/c/users/fred/My Documents/My Games"
-fi
-if [ ! -d "$WINE_SOURCE_DIR" ]; then
-  echo "Failing to find the game save directories."
-  exit 1
-fi
-
-if [ ! -d "$SPOOLING_OUTPUT_DIR" ]; then
-  mkdir -p "$SPOOLING_OUTPUT_DIR"
-  exit_on_error Creating spooling output directory.
-fi
-
 # copies the files for a particular game out to a spooling folder.
 function copyem()
 {
@@ -30,34 +12,75 @@ function copyem()
   source_dir="$1"; shift
   out_dir="$1"; shift
 
-  if [ -d "$source_dir" ]; then
+  if [ -d "$source_dir" -a $(ls "$source_dir" 2>/dev/null | wc -c) != 0 ]; then
     echo $game_name
-#old    cp -v -n "$source_dir"/* "$out_dir"/
+    if [ ! -d "$out_dir" ]; then
+      mkdir -p "$out_dir"
+      exit_on_error "Creating storage dir: $out_dir"
+    fi
     netcp "$source_dir"/* "$out_dir"/
     sep 28
   fi
 }
 
-# make the output folders if they don't exist.
-for i in skyrim fallout_new_vegas fallout_3 oblivion fallout_4 ; do
-  if [ ! -d "$SPOOLING_OUTPUT_DIR/$i" ]; then
-    mkdir -p "$SPOOLING_OUTPUT_DIR/$i"
+##############
+
+# run through and copy our save files from the potentially weird locations they reside in.
+# this requires a single argument, which is the top-level directory of the game storage.
+function copy_all_save_games()
+{
+  local WINE_GOODS_DIR="$1"
+
+  local WINE_GAMES_DIR="$WINE_GOODS_DIR/My Games"
+  local SPOOLING_OUTPUT_DIR="$HOME/data/spooling_saves"
+
+  if [ ! -d "$WINE_GAMES_DIR" ]; then
+    echo "Failing to find the game save directories."
+    exit 1
+  fi
+
+  if [ ! -d "$SPOOLING_OUTPUT_DIR" ]; then
+    mkdir -p "$SPOOLING_OUTPUT_DIR"
+    exit_on_error Creating spooling output directory.
   fi
-done
 
-# now run through and copy our save files from the potentially weird locations
-# they reside in.
+  sep 28
+
+  copyem "skyrim" "$WINE_GAMES_DIR/Skyrim/Saves" "$SPOOLING_OUTPUT_DIR/skyrim"
+
+  copyem "fallout new vegas" "$WINE_GAMES_DIR/FalloutNV/Saves" "$SPOOLING_OUTPUT_DIR/fallout_new_vegas"
 
-sep 28
+  copyem "fallout 3" "$WINE_GAMES_DIR/Fallout3/Saves" "$SPOOLING_OUTPUT_DIR/fallout_3"
 
-copyem "skyrim" "$WINE_SOURCE_DIR/Skyrim/Saves" "$SPOOLING_OUTPUT_DIR/skyrim"
+  copyem "oblivion" "$WINE_GAMES_DIR/Oblivion/Saves" "$SPOOLING_OUTPUT_DIR/oblivion/"
 
-copyem "fallout new vegas" "$WINE_SOURCE_DIR/FalloutNV/Saves" "$SPOOLING_OUTPUT_DIR/fallout_new_vegas"
+  copyem "fallout 4" "$WINE_GAMES_DIR/Fallout4/Saves" "$SPOOLING_OUTPUT_DIR/fallout_4"
 
-copyem "fallout 3" "$WINE_SOURCE_DIR/Fallout3/Saves" "$SPOOLING_OUTPUT_DIR/fallout_3"
+  copyem "witcher 3" "$WINE_GOODS_DIR/The Witcher 3/gamesaves" "$SPOOLING_OUTPUT_DIR/witcher_3"
+}
 
-copyem "oblivion" "$WINE_SOURCE_DIR/Oblivion/Saves" "$SPOOLING_OUTPUT_DIR/oblivion/"
+# mainline of script tries out a few locations to back up.
 
-copyem "fallout 4" "$WINE_SOURCE_DIR/Fallout4/Saves" "$SPOOLING_OUTPUT_DIR/fallout_4"
+# first try our play on linux storage.  very individualized for fred.
+wine_goods_dir="$HOME/linx/wine_goods"
+if [ ! -d "$wine_goods_dir" ]; then
+  wine_goods_dir="/cygdrive/c/users/fred/My Documents"
+fi
+if [ ! -d "$wine_goods_dir" ]; then
+  echo "not trying to back up any wine goods; could not find an appropriate folder."
+else
+  copy_all_save_games "$wine_goods_dir"
+fi
+
+# now try the main linux steam save game storage area, which is also fred specific.
+# this uses a link in the home directory called steam_goods which is connected to
+# "$HOME/.steam/steam/SteamApps/compatdata/MYNUM/pfx/drive_c/users/steamuser/My Documents"
+# where MYNUM is replaced with one's steam ID number.
+wine_goods_dir="$HOME/linx/steam_goods"
+if [ ! -d "$wine_goods_dir" ]; then
+  echo "not trying to back up any steam goods; could not find an appropriate folder."
+else
+  copy_all_save_games "$wine_goods_dir"
+fi
 
 
diff --git a/scripts/customize/fred/scripts/games/save_f76_pics.sh b/scripts/customize/fred/scripts/games/save_f76_pics.sh
new file mode 100644 (file)
index 0000000..e7bdc5b
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# copies the fallout 76 screenshots and images into our walruse metaverse hierarchy.
+
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+
+if [[ "$(hostname)" =~ clemens* ]]; then
+  character="chronical_pc"
+  identity="8836c852c8a647ba8ca45808a73c3fbb"
+elif [[ "$(hostname)" =~ orpheus* ]]; then
+  character="spoonburg_pc"
+  identity="8f99c06443f04f6f8270604369bb78eb"
+else
+  echo Could not determine the proper character name to store the fallout 76
+  echo images under.  Can you add a hostname to this script?
+  echo "  => $0"
+  exit 1
+fi
+
+src_dir="$HOME/linx/wind_goods/My Games/Fallout 76/Photos/${identity}"
+dest_dir="/z/walrus/media/pictures/metaverse/fallout_76/${character}"
+
+#echo "src is: '$src_dir'"
+#echo "dest is: '$dest_dir'"
+
+if [ ! -d "$src_dir" ]; then
+  echo "Could not find the source directory: $src_dir"
+  exit 1
+fi
+if [ ! -d "$dest_dir" ]; then
+  echo "Could not find the destination directory: $dest_dir"
+  exit 1
+fi
+
+netcp "$src_dir"/*[0-9].png "$dest_dir"/
+
+
diff --git a/scripts/customize/fred/scripts/games/zap_witcher.sh b/scripts/customize/fred/scripts/games/zap_witcher.sh
new file mode 100644 (file)
index 0000000..e3901b2
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# windows compatible process killer for any stray processes started as
+# "witcher" something.
+
+source $FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh
+
+procid="$( psa witcher | tail -n 1 | awk '{ print $1; }' )"
+
+if [ ! -z "$procid" ]; then
+  taskkill.exe /f /pid ${procid}
+fi
index 65f9c35c7d5513bf75486bd71d1fe36db0f24724..5f981d471fe0147620a71a9876ff1004a8aaeb53 100644 (file)
@@ -15,6 +15,6 @@ if [[ $0 =~ .*refred\.sh.* ]]; then
   source "$FEISTY_MEOW_SCRIPTS/security/cool_permissionator.sh"
   exit_on_error "sourcing the permission script"
   do_refred
-  exit_on_error "refredding process"
+  continue_on_error "refredding process"
 fi
 
index f6ddb3d2a256b394e9e8e12af3bc59bde5d18d78..bbd14eea19a9689cd258bc9d2fe2fc5e4d7b01cf 100644 (file)
@@ -8,8 +8,8 @@ feisty meow environment.
 user customization folder organization
 ======================================
 
-the user's optional custom folder is located at:
-echo $FEISTY_MEOW_SCRIPTS/customize/$(logname)
+the user's optional custom folder is usually located at:
+  $FEISTY_MEOW_SCRIPTS/customize/$(logname)
 
 the top-level of the customization folder can store:
 
@@ -26,10 +26,10 @@ custom script aliases
 
 there is also a facility for adding aliases automatically for any custom
 scripts that have been developed by the user.  these join the other aliases
-provided by the feisty meow environment.
+that are already provided by the feisty meow environment.
 
 store any custom scripts in the folder:
-$FEISTY_MEOW_SCRIPTS/customize/$(logname)/scripts
+  $FEISTY_MEOW_SCRIPTS/customize/$(logname)/scripts
 
 any scripts in that folder (or in a directory under that folder) will
 automatically be turned into aliases.
index 6c700d8f20a31e508b383295a416eb0d1ef812be..65c4f63208412d179d8eeeec021b2561c74f69ec 100644 (file)
@@ -20,6 +20,8 @@ if [ "$dir1" == "$dir2" ]; then
   exit 1
 fi
 
+source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+
 out1="$(mktemp "$TMP/compare_dirs_output.XXXXXX")"
 out2="$(mktemp "$TMP/compare_dirs_output.XXXXXX")"
 
@@ -44,11 +46,13 @@ fi
 if [ -z "$host1" ]; then
   # fully local compare location for first dir.
   pushd "$dir1" &>/dev/null
+  exit_on_error "compare_dirs: seeking directory $dir1"
   find . >"$out1"
   popd &>/dev/null
 else
   # remote compare location for first dir.
   ssh "$host1" "cd \"$dir1\" && find ." >"$out1"
+  exit_on_error "compare_dirs: listing remote directory $dir1"
 fi
 
 # sort the output from listing the first directory.
@@ -57,11 +61,13 @@ sort "$out1" >"$out1".sort
 if [ -z "$host2" ]; then
   # fully local compare location for second dir.
   pushd "$dir2" &>/dev/null
+  exit_on_error "compare_dirs: seeking directory $dir2"
   find . >"$out2"
   popd &>/dev/null
 else
   # remote compare location for second dir.
   ssh "$host2" "cd \"$dir2\" && find ." >"$out2"
+  exit_on_error "compare_dirs: listing remote directory $dir2"
 fi
 
 # sort the output from listing the second directory.
diff --git a/scripts/files/find_readonly.sh b/scripts/files/find_readonly.sh
new file mode 100644 (file)
index 0000000..833dd17
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# locates read only files in the directories specified.
+# this is a much simpler and more efficient command than some i've seen
+# floating about; it gets the find command to do all the heavy lifting
+# and doesn't try to build impossibly large command lines.
+
+find "${@}" -follow -type f -perm -u+r -a ! -perm -u+w 
+
index d4e3f11fa9d2ec4d9bdef70ce7a92a05eba830ab..ca42de7c3fb0889ec02b3aa3287a65fa4e709d16 100644 (file)
@@ -45,6 +45,7 @@ sub rename_lower {
 #print "new name='$new_name'\n";
       local $intermediate_name = $dir . "RL" .  rand() . ".tmp";
 #print "\n";
+
 #print "command A is: rename [$old_name] [$intermediate_name]\n";
 #print "command B is: rename [$intermediate_name] [$new_name]\n";
 #print "\n";
diff --git a/scripts/files/spacem.sh b/scripts/files/spacem.sh
new file mode 100644 (file)
index 0000000..b73a68c
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+function spacem_out()
+{
+  while [ $# -gt 0 ]; do
+    arg="$1"; shift
+    if [ ! -f "$arg" -a ! -d "$arg" ]; then
+      echo "=> did not find a file or directory named '$arg'."
+      continue
+    fi
+
+    # we capture the output of the character replacement operation for reporting.
+    # this is done first since some filenames cannot be properly renamed in perl (e.g. if they
+    # have pipe characters apparently).
+    intermediate_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg")"
+    local saw_intermediate_result=0
+    if [ -z "$intermediate_name" ]; then
+      # make sure we report something, if there are no further name changes.
+      intermediate_name="'$arg'"
+    else 
+      # now zap the first part of the name off (since original name is not needed).
+      intermediate_name="$(echo $intermediate_name | sed -e 's/.*=> //')"
+      saw_intermediate_result=1
+    fi
+
+    # here we rename the file to be lower case.
+    actual_file="$(echo $intermediate_name | sed -e "s/'\([^']*\)'/\1/")"
+    final_name="$(perl "$FEISTY_MEOW_SCRIPTS/files/renlower.pl" "$actual_file")"
+    local saw_final_result=0
+    if [ -z "$final_name" ]; then
+      final_name="$intermediate_name"
+    else
+      final_name="$(echo $final_name | sed -e 's/.*=> //' )"
+      saw_final_result=1
+    fi
+
+    if [[ $saw_intermediate_result != 0 || $saw_final_result != 0 ]]; then
+      # printout the combined operation results.
+      echo "'$arg' => $final_name"
+    fi
+  done
+}
+
+# this block should execute when the script is actually run, rather
+# than when it is just being sourced.
+if [[ $0 =~ .*spacem\.sh.* ]]; then
+  source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
+  exit_on_error "sourcing the feisty meow environment"
+  spacem_out "${@}"
+  exit_on_error "running spacem_out on a list: ${@}"
+fi
+
index d9c832526378f8a488a551442e309e70230a9457..dbecd2637009bd8a0182397b5e9f7402f7e1f013 100644 (file)
@@ -180,10 +180,12 @@ if [ -z "$SAVE_BINARIES" ]; then
 fi
 
 # make the clam shell scripts executable.
-chmod 755 "$CLAM_SCRIPTS"/*.sh
-chmod 755 "$CLAM_SCRIPTS"/cpp/*.sh
+#hmmm: why?  this should no longer be needed.
+#      and even if it's needed, the perms should be stored in the repo.
+#chmod 755 "$CLAM_SCRIPTS"/*.sh
+#chmod 755 "$CLAM_SCRIPTS"/cpp/*.sh
 #chmod 755 "$CLAM_SCRIPTS"/csharp/*.sh
-chmod 755 "$FEISTY_MEOW_SCRIPTS/generator/wrapdoze.sh"
+#chmod 755 "$FEISTY_MEOW_SCRIPTS/generator/wrapdoze.sh"
 
 # rebuild the dependency tool.  needed by everything, pretty much, but
 # since it's from the xfree project, it doesn't need any of our libraries.
old mode 100755 (executable)
new mode 100644 (file)
index ab9f266967e8d59d4c41b78f166622a85f8a4f42..a1ae5db2af4e7a6cc1696af27309204e937b4bf5 100644 (file)
@@ -46,5 +46,5 @@ if [ $? != 0 ]; then
 fi
 
 \mv -f $genlinx $genlinx_moz $genlinx_js $GRUNTOSE_DIR/Info/Twain
-\mv -f $newmarx $TMP
+#not needed: \mv -f $newmarx $HOME
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 50f8d80aa63f532851dc241ba241073c4e74753c..f12fc74080918d53cf90175c7cdcbf38fc9fe010 100644 (file)
@@ -62,6 +62,10 @@ exit_on_error "running the git pull downstream master"
 git push --tags downstream master
 exit_on_error "running the git push downstream master"
 
+# do our dev branch also.
+git push --tags downstream dev
+continue_on_error "running the git push downstream dev: is there a dev branch?"
+
 popd &>/dev/null
 
 restore_terminal_title
index 737f314cb2368ede6157083be13f1165a7aae42c..282dd4d922ff3bd9aa2708bbd34cca9760b679aa 100644 (file)
@@ -11,23 +11,6 @@ source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh"
 
 ##############
 
-# check git version to see if we can use autostash.
-# this appears to be an ubuntu issue, where xenial did not provide it even though the
-# feature appeared in git 2.6 and xenial claims it has git version 2.7.4.  eventually,
-# this version test can go away.
-gitvertest="$(git version | sed -e 's/git version [0-9]\.//' | sed -e 's/\.[0-9][0-9]*$//' )"
-if (( $gitvertest >= 11 )); then
-  # auto-stash is not available until 2.6 for git, but ubuntu is misreporting or using a
-  # differing version number somehow.  we are sure autostash was missing on ubuntu xenial
-  # with git 2.7.4 and it's definitely present in zesty with git at 2.11.
-#  PULL_ADDITION='--rebase --autostash'
-#although initially attractive, above set of flags seems to lose history we don't want to
-#lose.
-PULL_ADDITION=
-fi
-
-##############
-
 # the maximum depth that the recursive functions will try to go below the starting directory.
 export MAX_DEPTH=5
 
@@ -362,7 +345,7 @@ function do_revctrl_careful_update()
     remote_branch_info=$(git ls-remote --heads origin $bran 2>/dev/null)
     if [ ! -z "$remote_branch_info" ]; then
       # we are pretty sure the remote branch does exist.
-      git pull --tags $PULL_ADDITION origin "$bran" | $TO_SPLITTER
+      git pull --tags origin "$bran" | $TO_SPLITTER
       promote_pipe_return 0
     fi
     exit_on_error "git pull of remote branch: $bran"
@@ -374,7 +357,7 @@ function do_revctrl_careful_update()
 
   # now pull down any changes in our own origin in the repo, to stay in synch
   # with any changes from others.
-  git pull --tags $PULL_ADDITION --all | $TO_SPLITTER
+  git pull --tags --all | $TO_SPLITTER
 #is the above really important when we did this branch already in the loop?
 #it does an --all, but is that effective or different?  should we be doing that in above loop?
   promote_pipe_return 0
@@ -414,7 +397,7 @@ function do_revctrl_simple_update()
   elif [ -d ".git" ]; then
     if test_writeable ".git"; then
       $blatt_report
-      git pull --tags $PULL_ADDITION 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
+      git pull --tags 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
       promote_pipe_return 0
       exit_on_error "git pull of origin"
     fi
index e4f345c9dc3d2798156004450d7ce56aad651a7e..c6f9bd86cdd319a6fd6f5535067ff47e86010a59 100644 (file)
@@ -23,11 +23,19 @@ function reapply_cool_permissions()
   done
 #echo arch addin now is: $arch_addin
 
+  # now another round with similar setup, to ensure we get any directories
+  # that actually live out in /z but not in /home/archives.
+  ARCHIVE_TOP=/z
+  for dirname in $arch_builder; do
+    arch_addin+="$ARCHIVE_TOP/$dirname "
+  done
+#echo arch addin now is: $arch_addin
+
   # special case that makes our software hierarchy folder, if it doesn't exist.
   # everything else is only re-permed if it exists.
   if [ ! -d "$DEFAULT_FEISTYMEOW_ORG_DIR" ]; then
     sudo mkdir "$DEFAULT_FEISTYMEOW_ORG_DIR"
-    exit_on_error "making directory: $DEFAULT_FEISTYMEOW_ORG_DIR"
+    continue_on_error "making directory: $DEFAULT_FEISTYMEOW_ORG_DIR"
   fi
 
   # fix some permissions for important security considerations.
@@ -43,36 +51,36 @@ function reapply_cool_permissions()
         /usr/local/${cooluser} \
         /home/games \
         $arch_addin; do
-    if [ -d "$dirname" ]; then
+    if [ -d "$dirname" -o -L "$dirname" ]; then
       echo "revising ownership on '$dirname'"
       sudo chown -R ${cooluser}:${cooluser} "$dirname"
-      exit_on_error "chowning for ${cooluser}: $dirname"
+      continue_on_error "chowning for ${cooluser}: $dirname"
     fi
   done
 
   # special case for archives directory in stuffing.
   if [ -d /z/stuffing -o -L /z/stuffing ]; then
     sudo chown ${cooluser}:${cooluser} /z/
-    exit_on_error "chowning /z for ${cooluser}"
+    continue_on_error "chowning /z for ${cooluser}"
     sudo chmod g+rx,o+rx /z
-    exit_on_error "chmodding /z/ for ${cooluser}"
+    continue_on_error "chmodding /z/ for ${cooluser}"
     sudo chown ${cooluser}:${cooluser} /z/stuffing/
-    exit_on_error "chowning /z/stuffing for ${cooluser}"
+    continue_on_error "chowning /z/stuffing for ${cooluser}"
     sudo chmod g+rx,o-rwx /z/stuffing
-    exit_on_error "chmodding /z/stuffing for ${cooluser}"
+    continue_on_error "chmodding /z/stuffing for ${cooluser}"
     pushd /z/stuffing &>/dev/null
     if [ -d archives -o -L archives ]; then
       sudo chown ${cooluser}:${cooluser} archives/
-      exit_on_error "chowning /z/stuffing/archives for ${cooluser}"
+      continue_on_error "chowning /z/stuffing/archives for ${cooluser}"
       sudo chmod -R g+rwx archives
-      exit_on_error "chmodding /z/stuffing/archives for ${cooluser}"
+      continue_on_error "chmodding /z/stuffing/archives for ${cooluser}"
     fi
     popd &>/dev/null
   fi
 
   # make the log files readable by normal humans.
   sudo bash $FEISTY_MEOW_SCRIPTS/security/normal_perm.sh /var/log
-  exit_on_error "setting normal perms on /var/log"
+  continue_on_error "setting normal perms on /var/log"
 }
 
 # this block should execute when the script is actually run, rather
@@ -83,9 +91,9 @@ if [[ $0 =~ .*cool_permissionator\.sh.* ]]; then
   THISDIR="$( \cd "$(\dirname "$0")" && /bin/pwd )"
   export FEISTY_MEOW_APEX="$( \cd "$THISDIR/../.." && \pwd )"
   source "$THISDIR/../core/launch_feisty_meow.sh"
-  exit_on_error "sourcing the feisty meow launcher"
+  continue_on_error "sourcing the feisty meow launcher"
   coolio="$USER"
   reapply_cool_permissions "$coolio"
-  exit_on_error "reapplying cool permissions on $coolio"
+  continue_on_error "reapplying cool permissions on $coolio"
 fi
 
index 869370bebf03415f0168434196b60658fff1255e..4384a7dfef4be58c86e23ef81cbd2f3990cbd66d 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/bash
 # this script makes a tunnel for fred's SMTP traffic.
 
-#hmmm: move this script to fred customized stuff
+#hmmm: move this script to fred's custom stuff
 
 TUNNEL_USER_PLUS_HOST="fred@serene.feistymeow.org"
 TUNNEL_LINK="-L 14008:localhost:25"
index 5ccc61f78b68a1a273c53f6c0cd5852bfb74a56c..437e5134ded32cfc9dfd4e5c870a8a5daa547293 100644 (file)
@@ -18,7 +18,7 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
@@ -37,7 +37,7 @@ full_app_dir="$BASE_APPLICATION_PATH/$app_dirname"
 pushd "$full_app_dir" &>/dev/null
 exit_on_error "Changing to app path '$full_app_dir'"
 
-dir="avenger5/vendor/siteavenger/avcore"
+dir="$CHECKOUT_DIR_NAME/vendor/siteavenger/avcore"
 if [ ! -d $dir ]; then
   echo "The application doesn't seem to use avcore: $full_app_dir"
 else
diff --git a/scripts/site_avenger/clean_mapsdemo.sh b/scripts/site_avenger/clean_mapsdemo.sh
deleted file mode 100644 (file)
index e2c8755..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-# some code i wrote to add to revamp that turned out to be unsuitable.
-# but it corrects a problem in cakelampvm v002 release that i find annoying,
-# so here it is as its own file.
-
-# clean out some old files that were not checked in in mapsdemo.
-echo Doing some git repository maintenance in fred account.
-#
-# change over to fred folder
-pushd /home/fred
-exit_on_error "changing dir to fred's home; what have you done with fred?"
-
-pushd apps/mapsdemo/avenger5
-exit_on_error "changing dir to mapsdemo app"
-
-rpuffer . &>/dev/null
-if [ $? -ne 0 ]; then
-  # it seems our old files are still conflicting this.
-  if [ -f config/config_google.php ]; then
-    \rm -f config/config_google.php
-    exit_on_error "removing old config for google"
-  fi
-  if [ -f config/app.php ]; then
-    \rm -f config/app.php
-    exit_on_error "removing old config for app"
-  fi
-
-  git reset --hard HEAD
-  exit_on_error "resetting git's hard head"
-
-  rpuffer .
-#hmmm: use output saver thing when that exists.
-  exit_on_error "puffing out mapsdemo app after inadequate corrective action was taken"
-fi
-
-popd
-
-popd
-#...coolness, if we got to here.
-
-
index 9e74f0a6e8307a31b58b002d38041a16265e182b..46dbd3a76da5e16e975650c6e127a1f8b441673b 100644 (file)
 # basic information that is constant for all site avenger sites.
 
 # the top level of the user's application storage.
-export BASE_APPLICATION_PATH="$HOME/apps"
+if [ -z "$BASE_APPLICATION_PATH" ]; then
+  export BASE_APPLICATION_PATH="$HOME/apps"
+fi
 # where the code should come from.
-export DEFAULT_REPOSITORY_ROOT="git@github.com:kwentworth"
-# we checkout the git repository to a directory underneath the
-# app storage directory named this:
-export CHECKOUT_DIR_NAME="avenger5"
+if [ -z "$DEFAULT_REPOSITORY_ROOT" ]; then
+  export DEFAULT_REPOSITORY_ROOT="git@github.com:kwentworth"
+fi
+# we checkout the git repository to a directory underneath the app storage
+# directory named this (see below for "this"), if that directory name is found.
+# this is a saco designs infrastructure standard.
+if [ -z "$CHECKOUT_DIR_NAME" ]; then
+  export CHECKOUT_DIR_NAME="avenger5"
+fi
 # the subfolder that the web browser will look for the site in,
 # underneath the application's specific path.
-export STORAGE_SUFFIX="/public"
+if [ -z "$STORAGE_SUFFIX" ]; then
+  export STORAGE_SUFFIX="/public"
+fi
 
 ####
 
+#hmmm: below does not have any protection to avoid overriding existing values, like above does.  do we need more?
+
 # constants within our cakelampvm machine.
 
 # in our scheme, the single IP address that all our domains map to.
index e187202f3ea6769489e658acba1301d0be99d4a8..de9310c10b3b9d067e9a017b59b097b97ea088b7 100644 (file)
@@ -59,7 +59,11 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
+
+echo fixing some things here...
+echo "apps root is now '$BASE_APPLICATION_PATH'"
+echo " => this should be just above the app dir name if we got no parms!"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
index 205fcb4c91afbf23ed985d9fd146c812b7107dbe..1565060572d186be846092d7e0e134d2eacf665d 100644 (file)
@@ -47,7 +47,7 @@ echo "Regenerating feisty meow loading dock."
 
 regenerate
 exit_on_error "regenerating feisty meow configuration"
-chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
+chown -R "$(fm_username)":"$(fm_username)" /home/$(fm_username)/.[a-zA-Z0-9]*
 exit_on_error "fix after reconfigured as sudo"
 
 ##############
@@ -344,7 +344,7 @@ sep
 echo Adding site avenger packages to composer.
 # add in site avenger dependencies so we can build avcore properly.
 pushd ~ &>/dev/null
-sudo -u $(logname) composer config -g repositories.siteavenger composer https://packages.siteavenger.com/
+sudo -u $(fm_username) composer config -g repositories.siteavenger composer https://packages.siteavenger.com/
 popd &>/dev/null
 
 ##############
@@ -378,7 +378,7 @@ sep
 
 regenerate
 exit_on_error "regenerating feisty meow scripts"
-chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
+chown -R "$(fm_username)":"$(fm_username)" /home/$(fm_username)/.[a-zA-Z0-9]*
 exit_on_error "fix after regenerate as sudo"
 echo "
 
index 6d51135dba42962ecfcf0d8d1b7ab01f44365791..5a230615f31583d233c8a7573cf5b43d0edc0fbb 100644 (file)
@@ -47,7 +47,7 @@ echo "Regenerating feisty meow loading dock."
 
 recustomize
 exit_on_error "regenerating feisty meow configuration"
-chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
+chown -R "$(fm_username)":"$(fm_username)" /home/$(fm_username)/.[a-zA-Z0-9]*
 exit_on_error "fix after reconfigured as sudo"
 
 ##############
@@ -139,7 +139,7 @@ sep
 
 recustomize
 exit_on_error "recustomize-ing feisty meow scripts"
-chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
+chown -R "$(fm_username)":"$(fm_username)" /home/$(fm_username)/.[a-zA-Z0-9]*
 exit_on_error "fix after recustomize as sudo"
 echo "
 
index e2d2cdcea5b4b5e017732166d807a956a2a18da3..0964b49f6ccc19d96408e4e06c365906b3dae1d9 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/bash
 
-# Author: Kevin Wentworth
 # Author: Chris Koeritz
+# Author: Kevin Wentworth
 
 # This contains a bunch of reusable functions that help out in managing websites.
 
 
 source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
 
-export SSM_LOG_FILE="$TMP/$(logname)-siteavenger-script.log"
-
-# get our configuration loaded, if we know the config file.
-# if there is none, we will use our default version.
-export SITE_MANAGEMENT_CONFIG_FILE
-if [ -z "$SITE_MANAGEMENT_CONFIG_FILE" ]; then
-  SITE_MANAGEMENT_CONFIG_FILE="$THISDIR/config/default.app"
-  echo "$(date_stringer): Site management config file was not set.  Using default:" >> "$SSM_LOG_FILE"
-  echo "$(date_stringer):   $SITE_MANAGEMENT_CONFIG_FILE" >> "$SSM_LOG_FILE"
-fi
-
-# load in at least the default version to get us moving.
-source "$SITE_MANAGEMENT_CONFIG_FILE"
-exit_on_error "loading site management configuration from: $SITE_MANAGEMENT_CONFIG_FILE"
+export SSM_LOG_FILE="$TMP/$(fm_username)-siteavenger-script.log"
 
 # configure feisty revision control to ignore vendor folders.
 export NO_CHECKIN_VENDOR=true
 
+# handles the computation of the base application path and the app dir name.
+# this expects to be passed the application directory name, but it will attempt to
+# do something intelligent if no name is passed in.
+function autoconfigure_paths()
+{
+  export app_dirname="$1"; shift
+
+  if [ -z "$app_dirname" ]; then
+    echo "$(date_stringer): Guessing application dir from local folder."
+    app_dirname="$(basename $(\pwd))"
+    export BASE_APPLICATION_PATH="$(dirname $(\pwd))"
+echo "calculated application dir of '$app_dirname' and"
+echo "a base app path of '$BASE_APPLICATION_PATH'"
+  fi
+
+  # get our configuration loaded, if we know the config file.
+  # if there is none, we will use our default version.
+  export SITE_MANAGEMENT_CONFIG_FILE
+  if [ -z "$SITE_MANAGEMENT_CONFIG_FILE" ]; then
+    SITE_MANAGEMENT_CONFIG_FILE="$THISDIR/config/default.app"
+    echo "$(date_stringer): Site management config file was not set.  Using default:" >> "$SSM_LOG_FILE"
+    echo "$(date_stringer):   $SITE_MANAGEMENT_CONFIG_FILE" >> "$SSM_LOG_FILE"
+  fi
+
+  # load in at least the default version to get us moving.
+  source "$SITE_MANAGEMENT_CONFIG_FILE"
+  exit_on_error "loading site management configuration from: $SITE_MANAGEMENT_CONFIG_FILE"
+
+
+echo "after site config file sourced, app dirname now '$app_dirname' and"
+echo "base app path now '$BASE_APPLICATION_PATH'"
+
+}
+
 # tests that the main storage folder for apps exists.
+# the parameter passed in should be the application directory name (app_dirname), without
+# any additional path components.  the script will attempt to auto-configure the application
+# base path (above the project folder with app_dirname) and get all the other path variables
+# established.
 function check_apps_root()
 {
-  local appdir="$1"; shift
-  if [ ! -d "$appdir" ]; then
-    echo "$(date_stringer): Creating the apps directory: $appdir" >> "$SSM_LOG_FILE"
-    mkdir "$appdir"
+  local temp_app_dirname="$1"; shift
+
+echo new call to auto conf func...
+  autoconfigure_paths "$temp_app_dirname"
+echo after call to auto conf func...
+
+  if [ -z "$BASE_APPLICATION_PATH" ]; then
+echo fix this: we had no base app path, what to do now?
+exit 1
+  fi
+
+  if [ ! -d "$BASE_APPLICATION_PATH" ]; then
+    echo "$(date_stringer): Creating the apps directory: $BASE_APPLICATION_PATH" >> "$SSM_LOG_FILE"
+    mkdir "$BASE_APPLICATION_PATH"
     exit_on_error "Making apps directory when not already present"
   fi
 }
@@ -149,10 +184,10 @@ function find_app_folder()
 
     # make sure we're allowed to auto-guess the folder name from our current dir.
     if [ -z "$NO_AUTOMATIC_FOLDER_GUESS" ]; then
-      # if we can find an avenger5 directory above our current PWD, then that
-      # might tell us our name.
-      if  find_named_parent_dir "avenger5"; then
-        # we can grab a name above the avenger5 location.  let's try that.
+      # if we can find the special checkout directory name above our current PWD, then that
+      # might tell us our project name.
+      if find_named_parent_dir "$CHECKOUT_DIR_NAME"; then
+        # we can grab a name above the checkout dir name location.  let's try that.
         app_dirname="$(basename "$(dirname $PARENT_DIR_FOUND)" )"
       fi
     else
@@ -194,22 +229,37 @@ function test_app_folder()
   local dir="$1"; shift
 
   local combo="$appsdir/$dir"
+  if [ "$dir" == " " ]; then
+    # trickery here means we don't expect an intermediate directory component.
+    combo="$appsdir"
+  fi
 
   if [ ! -d "$combo" ]; then
+    # the directory wasn't there yet, so we will auto-create it.  this should
+    # hopefully be the right decision usually.
     echo "$(date_stringer): Creating app directory: $combo" >> "$SSM_LOG_FILE"
     mkdir "$combo"
     exit_on_error "Making application directory when not already present"
+  else
+    # the directory does exist.  let's test out a theory that it might not be
+    # an official site avenger style folder, in which case we need to patch a
+    # variable to set expectations.
+    if [ ! -d "$combo/$CHECKOUT_DIR_NAME" ]; then
+      echo "Dropping expectation for intermediate checkout directory name."
+      CHECKOUT_DIR_NAME=" "
+    fi
   fi
 
+echo yo modulopius on the variables:
+var combo CHECKOUT_DIR_NAME
+
   locate_config_file "$dir"
 }
 
 # eases some permissions to enable apache to write log files and do other shopkeeping.
 function fix_site_perms()
 {
-  local app_dir="$1"; shift
-
-  local site_dir="$app_dir/$CHECKOUT_DIR_NAME"
+  local site_dir="$1"; shift
 
   if [ -f "$site_dir/bin/cake" ]; then
     sudo chmod -R a+rx "$site_dir/bin/cake"
@@ -239,9 +289,38 @@ function clear_orm_cache()
   fi
 }
 
+# checks that the directory provided is a valid git repository.
+function is_valid_git_repo()
+{
+  local complete_path="$1"; shift
+  
+  # see if the directory even exists.
+  if [ ! -d "$complete_path" ]; then
+    # nope, that's not a git repo since it's not even there.
+    false
+    return
+  fi
+
+  # directory exists, so let's test it out.
+  pushd "$complete_path" &>/dev/null
+  exit_on_error "Switching to directory for check out: $complete_path"
+
+  # ask for repository name (without .git).
+  if git rev-parse --git-dir > /dev/null 2>&1; then
+    # this is a valid git repo.
+    true
+    return
+  fi
+  # no, this is not a valid git repository.
+  popd &>/dev/null
+  false
+}
+
 # updates the revision control repository passed in.  this expects that the
 # repo will live in a folder called "checkout_dirname" under the app path,
-# which is the standard for our deployed sites.
+# which is the standard for deployed site avenger sites.  if that directory is
+# missing, then we assume a checkout of the top-level repository instead.
 # important: this also sets a global variable called site_store_path to the full
 # path of the application.
 function update_repo()
@@ -257,54 +336,46 @@ echo "$(date_stringer): $(var full_app_dir checkout_dirname repo_root repo_name)
   # forget any prior value, since we are going to validate the path.
   unset site_store_path
 
-  pushd "$full_app_dir" &>/dev/null
-  exit_on_error "Switching to our app dir '$full_app_dir'"
+#  pushd "$full_app_dir" &>/dev/null
+#  exit_on_error "Switching to our app dir '$full_app_dir'"
 
-  local complete_path="$full_app_dir/$checkout_dirname"
+  local complete_path="$full_app_dir"
+  if [ ! "$checkout_dirname" == " " ]; then
+    # make the full path using the non-empty checkout dir name.
+    complete_path+="/$checkout_dirname"
+  fi
 
-  # see if the checkout directory exits.  the repo_found variable is set to
-  # non-empty if we find it and it's a valid git repo.
-  repo_found=
-  if [ -d "$checkout_dirname" ]; then
-    # checkout directory exists, so let's check it.
-    pushd "$checkout_dirname" &>/dev/null
-    exit_on_error "Switching to our checkout directory: $checkout_dirname"
+echo set complete_path: $complete_path
+  # store the local version into our special global.
+  site_store_path="$complete_path"
 
-    # ask for repository name (without .git).
-    if git rev-parse --git-dir > /dev/null 2>&1; then
-      # this is a valid git repo.
-      repo_found=yes
-    fi
-    # we don't consider the state of having the dir exist but the repo be wrong as good.
-    if [ -z "$repo_found" ]; then
+  # check out the directory to see if it's a git repository.
+  if ! is_valid_git_repo "$complete_path"; then
+    if [ -d "$complete_path" ]; then
+      # we don't consider the state of having the dir exist but the repo be wrong as good.
       echo "There is a problem; this folder is not a valid repository:"
-      echo "  $full_app_dir"
+      echo "  $complete_path"
       echo "This script cannot continue unless the git repository is valid."
       exit 1
     fi
-    popd &>/dev/null
-  fi
-
-  if [ ! -z "$repo_found" ]; then
-    # a repository was found, so update the version here and leave.
-    echo "Repository $repo_name exists.  Updating it."
-    rgetem
-    exit_on_error "Recursive checkout on: $complete_path"
-  else
-    # clone the repo since it wasn't found.
+    # okay, so the directory doesn't even exist.  that means we will try to
+    # clone the project anew.
+    mkdir "$complete_path"
+    exit_on_error "Making project directory prior to new clone: $complete_path"
+    pushd "$complete_path/.." &>/dev/null
+    exit_on_error "Switching to parent directory prior to new clone: $complete_path/.."
     echo "Cloning repository $repo_name now."
     git clone "$repo_root/$repo_name.git" $checkout_dirname
     exit_on_error "Git clone of repository: $repo_name"
+    popd &>/dev/null
   fi
 
-#not doing this here since powerup uses this and has no sudo.
-  #fix_site_perms "$complete_path"
-
-#unused?
-  # construct the full path to where the app will actually live.
-  site_store_path="$complete_path"
-
+  # a repository was found, so update the version here and leave.
+  pushd "$complete_path" &>/dev/null
+  exit_on_error "Switching to directory for repo update: $complete_path"
+  echo "Repository $repo_name exists.  Updating it."
+  git pull --tags --all
+  exit_on_error "Recursive checkout on: $complete_path"
   popd &>/dev/null
 }
 
@@ -324,8 +395,8 @@ function composer_repuff()
   exit_on_error "Composer installation step on '$site_store_path'."
   echo "Site updated."
 
-#hmmm: argh global
-  dir="$site_store_path/$CHECKOUT_DIR_NAME/vendor/siteavenger/avcore"
+#hmmm: untested, had wrong path here and was never being run.
+  dir="vendor/siteavenger/avcore"
   if [ -d "$dir" ]; then
     echo "Running avcore database migrations..."
     logfile="$TMP/problem-avcore_db_migration-$(date_stringer).log"
@@ -358,6 +429,7 @@ function create_site_links()
   exit_on_error "Switching to our app dir '$site_store_path'"
 
   pushd webroot &>/dev/null
+  exit_on_error "Switching to our webroot dir"
 
   # remove all symlinks that might plague us.
   find . -maxdepth 1 -type l -exec rm -f {} ';'
@@ -381,32 +453,41 @@ function create_site_links()
   # get back out of webroot.
   popd &>/dev/null
 
-  # hop up a level above where we had been.
+  # hop up a level above where we had been.  this is a level above the
+  # site store path, which will not be appropriate for all projects, so
+  # we must tread carefully.
   pushd .. &>/dev/null
 
-  # link 'public' to webroot.
-  if [ -L public ]; then
-    # public is a symlink.
-    \rm public
-    exit_on_error "Removing public directory symlink"
-  elif [ -d public ]; then
-    # public is a folder with default files.
+  # we only do the following linking exercises when we are sure this is a
+  # site avenger style application.  otherwise we would be creating links
+  # above our own heads, sort of.
+  if [ -d "$CHECKOUT_DIR_NAME" ]; then
+    # link 'public' to webroot.
+    if [ -L public ]; then
+      # public is a symlink.
+      \rm public
+      exit_on_error "Removing public directory symlink"
+    elif [ -d public ]; then
+      # public is a folder with default files.
 #hmmm: is that safe?
-    \rm -rf public
-    exit_on_error "Removing public directory and contents"
-  fi
+      \rm -rf public
+      exit_on_error "Removing public directory and contents"
+    fi
 
-  # create the main 'public' symlink
+    # create the main 'public' symlink
 #hmmm: argh global
-  make_safe_link $CHECKOUT_DIR_NAME/webroot public
-  exit_on_error "Creating link to webroot called 'public'"
-
+    make_safe_link $CHECKOUT_DIR_NAME/webroot public
+    exit_on_error "Creating link to webroot called 'public'"
 #hmmm: public/$themelower/im will be created automatically by system user with appropriate permissions
 
-  echo Created symbolic links.
+  else
+    echo "Skipping 'public' link for project without '$CHECKOUT_DIR_NAME' folder."
+  fi
 
   popd &>/dev/null
   popd &>/dev/null
+
+  echo Created symbolic links.
 }
 
 # fetches composer to make sure it's up to date.
@@ -446,9 +527,8 @@ function fix_appdir_ownership()
     echo "$(date_stringer): user name failed checks for chowning, was found as '$user_name'" >> "$SSM_LOG_FILE"
   fi
 
-  # 
-#probably not enough for path!
-  fix_site_perms "$combo"
+#hmmm: is this variable set by this point?  it's the right thing to pass down there anyway.
+  fix_site_perms "$site_store_path"
 }
 
 # Jumps to an application directory given the app name.  If no app name is
@@ -458,7 +538,7 @@ function switch_to()
   # check for parameters.
   app_dirname="$1"; shift
 
-  check_apps_root "$BASE_APPLICATION_PATH"
+  check_apps_root "$app_dirname"
 
   # find proper webroot where the site will be initialized.
   if [ -z "$app_dirname" ]; then
index 503ae1349cfc979b67704eba1892aac37a81418b..c07d94539865423c5ac0cf89f6e175adab87e1ba 100644 (file)
@@ -19,7 +19,7 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
index d3ff8125894475dec8eac6d5728136cc1187849f..d1b183d758aea5613037dc3db5e3ddd79527757a 100644 (file)
@@ -19,7 +19,7 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
index ca9ee7680d75dc252999ed5e79561fe987a83724..3395d5ac47d886de85710a9877b7f3ec508b02be 100644 (file)
@@ -55,7 +55,7 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
index 13d4b3a9397a6172cc4993522ea45cae95956cdf..c332986a8931008d36c667487c9da0268b2f0e25 100644 (file)
@@ -47,7 +47,7 @@ source "$THISDIR/shared_site_mgr.sh"
 
 sep
 
-check_apps_root "$BASE_APPLICATION_PATH"
+check_apps_root "$app_dirname"
 
 # find proper webroot where the site will be initialized.
 if [ -z "$app_dirname" ]; then
index 711bca44099cef2f1b87db9129eda97ebe639c13..dfce536012e91917b434a1ee041a5b3622e13080 100644 (file)
@@ -26,7 +26,7 @@ if [ -z "$IP_ADDRESS" ]; then
 fi
 if [ -z "$SERVER_ADMIN" ]; then
   # the email address (where first dot is replaced by @) for the administrator of the domain.
-  SERVER_ADMIN="$(logname).localhost"
+  SERVER_ADMIN="$(fm_username).localhost"
   echo "** defaulting server admin to $SERVER_ADMIN"
 fi
 if [ -z "$MAIN_NAME_SERVER" ]; then
index cb1753d1acf0370e30b141b26094111a640cdb30..a29dd6c050f84119f0ba98975c55bd70382a598c 100644 (file)
@@ -60,7 +60,7 @@ ${domain_name}.       IN A    ${IP_ADDRESS}
 " >"$domain_file"
 
   # our personalized configuration approach wants the real owner to own the file.
-  chown "$(logname):$(logname)" $domain_file
+  chown "$(fm_username):$(fm_username)" $domain_file
   exit_on_error "setting ownership on: $domain_file"
 }
 
@@ -99,7 +99,7 @@ zone \"${domain_name}\" in {
 " >> /etc/bind/named.conf.local
 
   # keep ownership for the real user.
-  chown "$(logname):$(logname)" /etc/bind/named.conf.local
+  chown "$(fm_username):$(fm_username)" /etc/bind/named.conf.local
   exit_on_error "setting ownership on: /etc/bind/named.conf.local"
 }
 
@@ -169,7 +169,7 @@ function add_new_subdomain()
 " >> /etc/bind/${containing_domain}.conf
 
   # keep ownership for real user.
-  chown "$(logname):$(logname)" "/etc/bind/${containing_domain}.conf"
+  chown "$(fm_username):$(fm_username)" "/etc/bind/${containing_domain}.conf"
   exit_on_error "setting ownership on: /etc/bind/${containing_domain}.conf"
 }
 
@@ -277,7 +277,7 @@ function write_apache_config()
 </VirtualHost>
 " >"$site_config" 
 
-  chown "$(logname):$(logname)" "$site_config"
+  chown "$(fm_username):$(fm_username)" "$site_config"
   exit_on_error "setting ownership on: $site_config"
 }
 
@@ -361,7 +361,7 @@ function maybe_create_site_storage()
     chmod g+rx "$chow_path"
     exit_on_error "Failed to add group permissions on the path: $chow_path"
     # reassert the user's ownership of any directories we might have just created.
-    chown "$(logname):$(logname)" "$chow_path"
+    chown "$(fm_username):$(fm_username)" "$chow_path"
     exit_on_error "changing ownership to user failed on the path: $chow_path"
     chow_path="$(dirname "$chow_path")"
   done
diff --git a/scripts/system/update_system_time.sh b/scripts/system/update_system_time.sh
new file mode 100644 (file)
index 0000000..01efc95
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# a simple time update script that traps output from rdate, since we
+# get a lot of noise even when a successful update occurs, to whit:
+#  "rdate: Could not read data: Success"
+#
+# author: chris koeritz
+
+#hmmm: the generalized pattern of show output only on error is embodied below.  make it a function.
+
+outfile="$(mktemp /tmp/update_system_time.XXXXXX)"
+/usr/bin/rdate -s time.nist.gov &> "$outfile"
+retval=$?
+if [ $retval -ne 0 ]; then
+  echo "Actual error code $retval returned by rdate, with output:"
+  cat "$outfile" 
+fi
+rm -f "$outfile"
+
index 7ced5c9fc83caa8093a303fb5406a936b29c39aa..a4e6a3fca9c711bd1d7c5458efd8ba9e59a11fa1 100644 (file)
@@ -6,6 +6,8 @@ source "$FEISTY_MEOW_SCRIPTS/core/common.alias"
 # uncomment this to get extra noisy debugging.
 #export DEBUG_TERM_TITLE=true
 
+##############
+
 # puts a specific textual label on the terminal title bar.
 # this doesn't consider any previous titles; it just labels the terminal.
 # the title may not be visible in some window managers.
@@ -23,59 +25,70 @@ function apply_title_to_terminal()
   else
     # not running interactively, so just echo the title.
     sep
-    echo ${title}
+    echo "${title}"
     sep
   fi
 }
 
-# user friendly version that saves the title being added.
-function set_terminal_title()
+##############
+
+# records the current terminal title, pushing it down on the stack of titles,
+# possibly prior to a new one being used.
+function save_terminal_title()
 {
-  apply_title_to_terminal $*
+  local title="$*"
+
+  if [ -z "$title" ]; then
+    if [ ! -z "$DEBUG_TERM_TITLE" ]; then
+      echo "terminal_titler: empty title: pushing current title again"
+    fi
+    peek_title_stack
+    title="$LAST_TITLE"
+    if [ -z "$title" ]; then
+      log_feisty_meow_event "terminal_titler: there was no saved title, so we're ignoring the save attempt."
+      return 1
+    fi
+  fi
 
-#tricky attempts to get it to be available when we ask for it in get_terminal_title
-  sync
-#  echo -n
+#hmmm: need a validation step here to remove bad chars that conflict with our title compression scheme.
+
+  # only slap a comma after the existing value if it wasn't empty.
+  if [ -z "$TERMINAL_TITLE_STACK" ]; then
+    export TERMINAL_TITLE_STACK="\"$title\""
+  else
+    export TERMINAL_TITLE_STACK="$TERMINAL_TITLE_STACK,\"$title\""
+  fi
 
-#  # we're enforcing a new title from here on.
-#  unset PRIOR_TERMINAL_TITLE
-  save_terminal_title
+  if [ ! -z "$DEBUG_TERM_TITLE" ]; then
+    echo "terminal_titler: new terminal title stack is:"
+    echo "$TERMINAL_TITLE_STACK"
+  fi
 }
 
-# echoes back the current title on the terminal window, if we can acquire it.
-function get_terminal_title()
+# takes a terminal title off the stack and sets the LAST_TITLE variable.
+function pop_title_stack()
 {
-  # this is an important value now; it is checked for in save_terminal_title.
-  local term_title_found="unknown"
-  # save the former terminal title if we're running in X with xterm.
-  which xprop &>/dev/null
-  if [ $? -eq 0 ]; then
-    # gnome-terminal doesn't set WINDOWID currently, but we can work around this.
-    if [[ -z "$WINDOWID" && ! -z "$(which xwininfo)" ]]; then
-#not good solution.      term_title_found="$(xprop -id $(xdotool getactivewindow) | perl -nle 'print $1 if /^WM_NAME.+= \"(.*)\"$/')"
-      term_title_found=$(xwininfo -id $(xprop -root | awk '/NET_ACTIVE_WINDOW/ { print $5; exit }') | awk -F\" '/xwininfo:/ { print $2; exit }')
-    # check if we're actually using xterm *and* that we have a window ID.
-    elif [[ "$TERM" =~ .*"xterm".* && ! -z "$WINDOWID" ]]; then
-      term_title_found="$(xprop -id $WINDOWID | perl -nle 'print $1 if /^WM_NAME.+= \"(.*)\"$/')"
-    fi
+  # whack our output variable, just in case.
+  unset LAST_TITLE
+  # get our stack top.
+  peek_title_stack
+  # trim the popped item out of the stack.
+  if [ ! -z "$TERMINAL_TITLE_STACK" ]; then
+    TERMINAL_TITLE_STACK="$(echo $TERMINAL_TITLE_STACK | sed -n -e 's/\(.*\),[^,]*$/\1/p')"
   fi
-  echo -n "$term_title_found"
 }
 
-# reads the current terminal title, if possible, and saves it to our record.
-function save_terminal_title()
+# like pop, but does not change the stack, effectively handing you the most
+# recently set title.
+function peek_title_stack()
 {
-  local title="$(get_terminal_title)"
-  if [ "$title" != "unknown" ]; then
-    # there was a title, so save it.
-    if [ ! -z "$DEBUG_TERM_TITLE" ]; then
-      echo "saving prior terminal title as '$title'"
-    fi
-    export PRIOR_TERMINAL_TITLE="$title"
-  else
-    # the terminal had no title, or we couldn't access it, or there's no terminal.
-    if [ ! -z "$DEBUG_TERM_TITLE" ]; then
-      echo "not saving prior terminal title which was empty"
+  # whack our output variable, just in case.
+  unset LAST_TITLE
+
+  if [ ! -z "$TERMINAL_TITLE_STACK" ]; then
+    LAST_TITLE="$(echo $TERMINAL_TITLE_STACK | sed -n -e 's/.*","\([^,]*\)"$/\1/p')"
+    if [ -z "$LAST_TITLE" ]; then
+      LAST_TITLE="$(echo $TERMINAL_TITLE_STACK | sed -n -e 's/"//gp')"
     fi
   fi
 }
@@ -83,16 +96,15 @@ function save_terminal_title()
 # using our stored terminal title, this replaces the title on the terminal.
 function restore_terminal_title()
 {
-# we don't want to emit anything extra if this is being driven by git.
-#hmmm...  this could be a problem?
-#  if [ -z "$(echo $* | grep git)" ]; then
-
   # run the terminal labeller to restore the prior title, if there was one.
-  if [ ! -z "$PRIOR_TERMINAL_TITLE" ]; then
+  pop_title_stack
+
+  if [ ! -z "$LAST_TITLE" ]; then
     if [ ! -z "$DEBUG_TERM_TITLE" ]; then
-      echo "restoring prior terminal title of '$PRIOR_TERMINAL_TITLE'"
+      echo "terminal_titler: restoring prior terminal title of '$LAST_TITLE'"
+      echo "terminal_titler: while new title stack is: $TERMINAL_TITLE_STACK"
     fi
-    apply_title_to_terminal "$PRIOR_TERMINAL_TITLE"
+    apply_title_to_terminal "$LAST_TITLE"
   fi
 }
 
@@ -100,28 +112,36 @@ function restore_terminal_title()
 function label_terminal_with_info()
 {
   # we only label the terminal anew if there's no saved title.
-  if [ -z "$PRIOR_TERMINAL_TITLE" ]; then
+  if [ -z "$TERMINAL_TITLE_STACK" ]; then
     if [ ! -z "$DEBUG_TERM_TITLE" ]; then
-      echo "showing new generated title since prior title was empty"
+      echo "terminal_titler: showing new generated title since prior title was empty"
     fi
     pruned_host=$(echo $HOSTNAME | sed -e 's/^\([^\.]*\)\..*$/\1/')
     date_string=$(date +"%Y %b %e @ %T")
-    user="$(logname)"
+    user="$(fm_username)"
     if [ -z "$user" ]; then
       # try snagging the windoze name.
       user=$USERNAME
     fi
     new_title="-- $user@$pruned_host -- [$date_string]"
     apply_title_to_terminal "$new_title"
-    save_terminal_title
+    save_terminal_title "$new_title"
   else
     # use the former title; paste it back up there just in case.
-    if [ ! -z "$DEBUG_TERM_TITLE" ]; then
-      echo "showing prior terminal title since there was a prior title!"
-      echo "using prior terminal title of '$PRIOR_TERMINAL_TITLE'"
-    fi
-    apply_title_to_terminal "$PRIOR_TERMINAL_TITLE"
+    peek_title_stack
+    apply_title_to_terminal "$LAST_TITLE"
   fi
 }
 
+##############
+
+# user friendly version sets the terminal title and saves the title being added.
+function set_terminal_title()
+{
+  apply_title_to_terminal $*
+  save_terminal_title $*
+}
+
+##############
+
 
index a40f2877901a2e7f7f4eda4bba0a53750e9899a2..6805073a0af68a51489d3a7b74afba0ffef1742c 100644 (file)
@@ -9,26 +9,26 @@
 if [ ! -L "My Documents" -o ! -L "Desktop" ]; then
   echo "This script is meant to be used in a user directory under wine."
   echo "It will re-hook the links for the desktop and documents to a local folder"
-  echo "called '~/wine_goods'"
+  echo "called '~/linx/wine_goods'"
   exit 1
 fi
 
 \rm "Desktop" "My Documents" "My Pictures" "My Videos" "My Music"
 
-if [ ! -d ~/wine_goods ]; then
-  mkdir ~/wine_goods
+if [ ! -d ~/linx/wine_goods ]; then
+  mkdir ~/linx/wine_goods
 fi
-if [ ! -d ~/wine_goods/desktop ]; then
-  mkdir ~/wine_goods/desktop
+if [ ! -d ~/linx/wine_goods/desktop ]; then
+  mkdir ~/linx/wine_goods/desktop
 fi
-if [ ! -d ~/wine_goods/otherlinks ]; then
-  mkdir ~/wine_goods/otherlinks
+if [ ! -d ~/linx/wine_goods/otherlinks ]; then
+  mkdir ~/linx/wine_goods/otherlinks
 fi
 
-ln -s ~/wine_goods "My Documents"
-ln -s ~/wine_goods/desktop "Desktop"
-ln -s ~/wine_goods/otherlinks "My Pictures"
-ln -s ~/wine_goods/otherlinks "My Videos"
-ln -s ~/wine_goods/otherlinks "My Music"
+ln -s ~/linx/wine_goods "My Documents"
+ln -s ~/linx/wine_goods/desktop "Desktop"
+ln -s ~/linx/wine_goods/otherlinks "My Pictures"
+ln -s ~/linx/wine_goods/otherlinks "My Videos"
+ln -s ~/linx/wine_goods/otherlinks "My Music"
 
 
index 953f288d8eb4811a5383fb23fac9e8ef6624ce6a..1a403ca6fe45302d2559528831cf27a3fdd693ac 100644 (file)
@@ -2,8 +2,10 @@
 
 the VNC program is great for remote controlling a desktop.
 
-it's available at http://www.realvnc.com/
+ultravnc is currently the best one for windows.
+it's available at: https://www.uvnc.com/
+
+on linux, krdc is the viewer i use a lot.
+for the server side, i have used vnc4server, i think.
 
-hmmm, maybe ultravnc is better for windows?
 
-=> make sure you're using the open source and cost-free solution.