From 832c58104451b36f8488c30ded39ff7a33d5b2c3 Mon Sep 17 00:00:00 2001 From: kamba4 Date: Thu, 12 Sep 2024 19:22:07 +0000 Subject: [PATCH] add www directory --- www/sunders/Leaflet/leaflet-LICENSE | 23 + www/sunders/Leaflet/leaflet-README.md | 32 + www/sunders/Leaflet/leaflet.css | 640 +++++++ www/sunders/Leaflet/leaflet.js | 6 + www/sunders/Leaflet/semicircle-LICENSE | 20 + www/sunders/Leaflet/semicircle-README.md | 83 + www/sunders/Leaflet/semicircle.js | 196 +++ www/sunders/add-lists.php | 299 ++++ www/sunders/apple-touch-icon.png | Bin 0 -> 4544 bytes www/sunders/camera.php | 445 +++++ www/sunders/config.php.example | 17 + www/sunders/css/spinner.css | 179 ++ www/sunders/css/stats.css | 588 +++++++ www/sunders/css/sunders.css | 766 +++++++++ www/sunders/de/camera.php | 3 + www/sunders/de/images | 1 + www/sunders/de/index.php | 6 + www/sunders/de/stats/index.php | 6 + www/sunders/decode-json.php | 10 + www/sunders/en/camera.php | 3 + www/sunders/en/images | 1 + www/sunders/en/index.php | 6 + www/sunders/en/stats/index.php | 6 + www/sunders/es/camera.php | 3 + www/sunders/es/images | 1 + www/sunders/es/index.php | 6 + www/sunders/es/stats/index.php | 6 + www/sunders/favicon.ico | Bin 0 -> 1150 bytes www/sunders/favicon.png | Bin 0 -> 1003 bytes www/sunders/files/license_Leaflet.txt | 23 + www/sunders/files/license_Semicircle.txt | 20 + www/sunders/files/license_osmcamera.txt | 9 + www/sunders/files/sunders.asc | 52 + www/sunders/fr/camera.php | 3 + www/sunders/fr/images | 1 + www/sunders/fr/index.php | 6 + www/sunders/fr/stats/index.php | 6 + www/sunders/i18n.php | 80 + www/sunders/i18n/common/de.json | 33 + www/sunders/i18n/common/en.json | 32 + www/sunders/i18n/common/es.json | 32 + www/sunders/i18n/common/fr.json | 32 + www/sunders/i18n/common/it.json | 32 + www/sunders/i18n/common/ru.json | 32 + www/sunders/i18n/countries/de.json | 708 ++++++++ www/sunders/i18n/countries/en.json | 708 ++++++++ www/sunders/i18n/countries/es.json | 708 ++++++++ www/sunders/i18n/countries/fr.json | 708 ++++++++ www/sunders/i18n/countries/it.json | 708 ++++++++ www/sunders/i18n/countries/ru.json | 708 ++++++++ www/sunders/i18n/credits/de.json | 11 + www/sunders/i18n/credits/en.json | 11 + www/sunders/i18n/credits/es.json | 11 + www/sunders/i18n/credits/fr.json | 11 + www/sunders/i18n/credits/it.json | 11 + www/sunders/i18n/credits/ru.json | 11 + www/sunders/i18n/links/de.json | 17 + www/sunders/i18n/links/en.json | 17 + www/sunders/i18n/links/es.json | 17 + www/sunders/i18n/links/fr.json | 17 + www/sunders/i18n/links/it.json | 17 + www/sunders/i18n/links/ru.json | 17 + www/sunders/i18n/manual/de.json | 84 + www/sunders/i18n/manual/en.json | 84 + www/sunders/i18n/manual/es.json | 84 + www/sunders/i18n/manual/fr.json | 84 + www/sunders/i18n/manual/it.json | 84 + www/sunders/i18n/manual/ru.json | 84 + www/sunders/i18n/stats/de.json | 96 ++ www/sunders/i18n/stats/en.json | 96 ++ www/sunders/i18n/stats/es.json | 96 ++ www/sunders/i18n/stats/fr.json | 96 ++ www/sunders/i18n/stats/it.json | 96 ++ www/sunders/i18n/stats/ru.json | 96 ++ www/sunders/i18n/symbology/de.json | 29 + www/sunders/i18n/symbology/en.json | 29 + www/sunders/i18n/symbology/es.json | 29 + www/sunders/i18n/symbology/fr.json | 29 + www/sunders/i18n/symbology/it.json | 29 + www/sunders/i18n/symbology/ru.json | 29 + www/sunders/images/button_language.png | Bin 0 -> 964 bytes www/sunders/images/button_less_blue.png | Bin 0 -> 210 bytes www/sunders/images/button_less_gray.png | Bin 0 -> 211 bytes www/sunders/images/button_more_blue.png | Bin 0 -> 218 bytes www/sunders/images/button_more_gray.png | Bin 0 -> 219 bytes www/sunders/images/button_next.png | Bin 0 -> 274 bytes www/sunders/images/button_permalink.png | Bin 0 -> 596 bytes www/sunders/images/button_previous.png | Bin 0 -> 268 bytes www/sunders/images/button_search.png | Bin 0 -> 471 bytes www/sunders/images/button_stats.png | Bin 0 -> 218 bytes www/sunders/images/cam.png | Bin 0 -> 805 bytes www/sunders/images/camAll.png | Bin 0 -> 1547 bytes www/sunders/images/camBlue.png | Bin 0 -> 780 bytes www/sunders/images/camGreen.png | Bin 0 -> 781 bytes www/sunders/images/camRed.png | Bin 0 -> 780 bytes www/sunders/images/close.png | Bin 0 -> 278 bytes www/sunders/images/colorBlue.png | Bin 0 -> 390 bytes www/sunders/images/colorBlueAll.png | Bin 0 -> 1222 bytes www/sunders/images/colorGreen.png | Bin 0 -> 396 bytes www/sunders/images/colorGreenAll.png | Bin 0 -> 1230 bytes www/sunders/images/colorRed.png | Bin 0 -> 392 bytes www/sunders/images/colorRedAll.png | Bin 0 -> 1223 bytes www/sunders/images/dome.png | Bin 0 -> 621 bytes www/sunders/images/domeAll.png | Bin 0 -> 1212 bytes www/sunders/images/domeBlue.png | Bin 0 -> 606 bytes www/sunders/images/domeGreen.png | Bin 0 -> 610 bytes www/sunders/images/domeRed.png | Bin 0 -> 608 bytes www/sunders/images/dome_z-17_h-3.png | Bin 0 -> 6751 bytes www/sunders/images/dome_z-17_h-5.png | Bin 0 -> 9824 bytes www/sunders/images/dome_z-17_h-5_d-45.png | Bin 0 -> 8002 bytes www/sunders/images/fixed.png | Bin 0 -> 1002 bytes www/sunders/images/fixedAll.png | Bin 0 -> 1745 bytes www/sunders/images/fixedBlue.png | Bin 0 -> 934 bytes www/sunders/images/fixedGreen.png | Bin 0 -> 948 bytes www/sunders/images/fixedRed.png | Bin 0 -> 934 bytes .../images/fixed_z-17_d-90_a-15_h-10.png | Bin 0 -> 10042 bytes .../images/fixed_z-17_d-90_a-15_h-5.png | Bin 0 -> 6652 bytes .../images/fixed_z-17_d-90_a-60_h-10.png | Bin 0 -> 6412 bytes www/sunders/images/guard.png | Bin 0 -> 893 bytes www/sunders/images/guardAll.png | Bin 0 -> 1646 bytes www/sunders/images/guardBlue.png | Bin 0 -> 873 bytes www/sunders/images/guardGreen.png | Bin 0 -> 868 bytes www/sunders/images/guardRed.png | Bin 0 -> 866 bytes www/sunders/images/icon.png | Bin 0 -> 167 bytes www/sunders/images/link-how-de.png | Bin 0 -> 873 bytes www/sunders/images/link-how-en.png | Bin 0 -> 816 bytes www/sunders/images/link-how-es.png | Bin 0 -> 784 bytes www/sunders/images/link-how-fr.png | Bin 0 -> 1320 bytes www/sunders/images/link-how-it.png | Bin 0 -> 788 bytes www/sunders/images/link-how-ru.png | Bin 0 -> 816 bytes www/sunders/images/link-what-de.png | Bin 0 -> 1083 bytes www/sunders/images/link-what-en.png | Bin 0 -> 978 bytes www/sunders/images/link-what-es.png | Bin 0 -> 754 bytes www/sunders/images/link-what-fr.png | Bin 0 -> 1136 bytes www/sunders/images/link-what-it.png | Bin 0 -> 935 bytes www/sunders/images/link-what-ru.png | Bin 0 -> 978 bytes www/sunders/images/link-where-de.png | Bin 0 -> 731 bytes www/sunders/images/link-where-en.png | Bin 0 -> 988 bytes www/sunders/images/link-where-es.png | Bin 0 -> 844 bytes www/sunders/images/link-where-fr.png | Bin 0 -> 1456 bytes www/sunders/images/link-where-it.png | Bin 0 -> 848 bytes www/sunders/images/link-where-ru.png | Bin 0 -> 988 bytes www/sunders/images/lock-insecure.png | Bin 0 -> 315 bytes www/sunders/images/lock-secure.png | Bin 0 -> 341 bytes www/sunders/images/logo.png | Bin 0 -> 9904 bytes www/sunders/images/panning.png | Bin 0 -> 989 bytes www/sunders/images/panningAll.png | Bin 0 -> 1961 bytes www/sunders/images/panningBlue.png | Bin 0 -> 1005 bytes www/sunders/images/panningGreen.png | Bin 0 -> 1013 bytes www/sunders/images/panningRed.png | Bin 0 -> 1013 bytes www/sunders/images/slider-toggle.png | Bin 0 -> 893 bytes www/sunders/images/title-how-de.png | Bin 0 -> 2519 bytes www/sunders/images/title-how-en.png | Bin 0 -> 1937 bytes www/sunders/images/title-how-es.png | Bin 0 -> 1484 bytes www/sunders/images/title-how-fr.png | Bin 0 -> 1742 bytes www/sunders/images/title-how-it.png | Bin 0 -> 1527 bytes www/sunders/images/title-how-ru.png | Bin 0 -> 1937 bytes www/sunders/images/title-mea.png | Bin 0 -> 1562 bytes www/sunders/images/title-sunders.png | Bin 0 -> 2552 bytes www/sunders/images/title-what-de.png | Bin 0 -> 2294 bytes www/sunders/images/title-what-en.png | Bin 0 -> 1917 bytes www/sunders/images/title-what-es.png | Bin 0 -> 1649 bytes www/sunders/images/title-what-fr.png | Bin 0 -> 1323 bytes www/sunders/images/title-what-it.png | Bin 0 -> 1791 bytes www/sunders/images/title-what-ru.png | Bin 0 -> 1917 bytes www/sunders/images/title-where-de.png | Bin 0 -> 2427 bytes www/sunders/images/title-where-en.png | Bin 0 -> 2039 bytes www/sunders/images/title-where-es.png | Bin 0 -> 2831 bytes www/sunders/images/title-where-fr.png | Bin 0 -> 1648 bytes www/sunders/images/title-where-it.png | Bin 0 -> 1705 bytes www/sunders/images/title-where-ru.png | Bin 0 -> 2039 bytes www/sunders/images/todo_cam.png | Bin 0 -> 735 bytes www/sunders/images/todo_camAll.png | Bin 0 -> 1409 bytes www/sunders/images/todo_camBlue.png | Bin 0 -> 808 bytes www/sunders/images/todo_camGreen.png | Bin 0 -> 663 bytes www/sunders/images/todo_camRed.png | Bin 0 -> 709 bytes www/sunders/images/todo_dome.png | Bin 0 -> 580 bytes www/sunders/images/todo_domeAll.png | Bin 0 -> 1145 bytes www/sunders/images/todo_domeBlue.png | Bin 0 -> 627 bytes www/sunders/images/todo_domeGreen.png | Bin 0 -> 548 bytes www/sunders/images/todo_domeRed.png | Bin 0 -> 563 bytes www/sunders/images/todo_fixed.png | Bin 0 -> 824 bytes www/sunders/images/todo_fixedAll.png | Bin 0 -> 1534 bytes www/sunders/images/todo_fixedBlue.png | Bin 0 -> 1012 bytes www/sunders/images/todo_fixedGreen.png | Bin 0 -> 769 bytes www/sunders/images/todo_fixedRed.png | Bin 0 -> 818 bytes www/sunders/images/todo_guard.png | Bin 0 -> 803 bytes www/sunders/images/todo_guardAll.png | Bin 0 -> 1506 bytes www/sunders/images/todo_guardBlue.png | Bin 0 -> 895 bytes www/sunders/images/todo_guardGreen.png | Bin 0 -> 722 bytes www/sunders/images/todo_guardRed.png | Bin 0 -> 779 bytes www/sunders/images/todo_panning.png | Bin 0 -> 939 bytes www/sunders/images/todo_panningAll.png | Bin 0 -> 1682 bytes www/sunders/images/todo_panningBlue.png | Bin 0 -> 1028 bytes www/sunders/images/todo_panningGreen.png | Bin 0 -> 792 bytes www/sunders/images/todo_panningRed.png | Bin 0 -> 851 bytes www/sunders/images/todo_traffic.png | Bin 0 -> 748 bytes www/sunders/images/traffic.png | Bin 0 -> 839 bytes www/sunders/images/yarrow-up.png | Bin 0 -> 485 bytes www/sunders/index.php | 301 ++++ www/sunders/it/camera.php | 3 + www/sunders/it/index.php | 6 + www/sunders/it/stats/index.php | 6 + www/sunders/js/leafletembed_functions.js | 457 +++++ www/sunders/js/leafletembed_icons.js | 313 ++++ www/sunders/js/search.js | 113 ++ www/sunders/json/credits.json | 23 + www/sunders/json/links.json | 58 + www/sunders/json/manual.json | 76 + www/sunders/json/stats-query.json | 143 ++ www/sunders/json/symbology.json | 29 + www/sunders/mindex.html | 21 + www/sunders/mstile-144x144.png | Bin 0 -> 4459 bytes www/sunders/ru/camera.php | 3 + www/sunders/ru/images | 1 + www/sunders/ru/index.php | 6 + www/sunders/ru/stats/index.php | 6 + www/sunders/stats/index.php | 1481 +++++++++++++++++ www/sunders/sunders.html | 26 + 219 files changed, 12487 insertions(+) create mode 100644 www/sunders/Leaflet/leaflet-LICENSE create mode 100644 www/sunders/Leaflet/leaflet-README.md create mode 100644 www/sunders/Leaflet/leaflet.css create mode 100644 www/sunders/Leaflet/leaflet.js create mode 100644 www/sunders/Leaflet/semicircle-LICENSE create mode 100644 www/sunders/Leaflet/semicircle-README.md create mode 100644 www/sunders/Leaflet/semicircle.js create mode 100644 www/sunders/add-lists.php create mode 100644 www/sunders/apple-touch-icon.png create mode 100644 www/sunders/camera.php create mode 100644 www/sunders/config.php.example create mode 100644 www/sunders/css/spinner.css create mode 100644 www/sunders/css/stats.css create mode 100644 www/sunders/css/sunders.css create mode 100644 www/sunders/de/camera.php create mode 120000 www/sunders/de/images create mode 100644 www/sunders/de/index.php create mode 100644 www/sunders/de/stats/index.php create mode 100644 www/sunders/decode-json.php create mode 100644 www/sunders/en/camera.php create mode 120000 www/sunders/en/images create mode 100644 www/sunders/en/index.php create mode 100644 www/sunders/en/stats/index.php create mode 100644 www/sunders/es/camera.php create mode 120000 www/sunders/es/images create mode 100644 www/sunders/es/index.php create mode 100644 www/sunders/es/stats/index.php create mode 100644 www/sunders/favicon.ico create mode 100644 www/sunders/favicon.png create mode 100644 www/sunders/files/license_Leaflet.txt create mode 100644 www/sunders/files/license_Semicircle.txt create mode 100644 www/sunders/files/license_osmcamera.txt create mode 100644 www/sunders/files/sunders.asc create mode 100644 www/sunders/fr/camera.php create mode 120000 www/sunders/fr/images create mode 100644 www/sunders/fr/index.php create mode 100644 www/sunders/fr/stats/index.php create mode 100644 www/sunders/i18n.php create mode 100644 www/sunders/i18n/common/de.json create mode 100644 www/sunders/i18n/common/en.json create mode 100644 www/sunders/i18n/common/es.json create mode 100644 www/sunders/i18n/common/fr.json create mode 100644 www/sunders/i18n/common/it.json create mode 100644 www/sunders/i18n/common/ru.json create mode 100644 www/sunders/i18n/countries/de.json create mode 100644 www/sunders/i18n/countries/en.json create mode 100644 www/sunders/i18n/countries/es.json create mode 100644 www/sunders/i18n/countries/fr.json create mode 100644 www/sunders/i18n/countries/it.json create mode 100644 www/sunders/i18n/countries/ru.json create mode 100644 www/sunders/i18n/credits/de.json create mode 100644 www/sunders/i18n/credits/en.json create mode 100644 www/sunders/i18n/credits/es.json create mode 100644 www/sunders/i18n/credits/fr.json create mode 100644 www/sunders/i18n/credits/it.json create mode 100644 www/sunders/i18n/credits/ru.json create mode 100644 www/sunders/i18n/links/de.json create mode 100644 www/sunders/i18n/links/en.json create mode 100644 www/sunders/i18n/links/es.json create mode 100644 www/sunders/i18n/links/fr.json create mode 100644 www/sunders/i18n/links/it.json create mode 100644 www/sunders/i18n/links/ru.json create mode 100644 www/sunders/i18n/manual/de.json create mode 100644 www/sunders/i18n/manual/en.json create mode 100644 www/sunders/i18n/manual/es.json create mode 100644 www/sunders/i18n/manual/fr.json create mode 100644 www/sunders/i18n/manual/it.json create mode 100644 www/sunders/i18n/manual/ru.json create mode 100644 www/sunders/i18n/stats/de.json create mode 100644 www/sunders/i18n/stats/en.json create mode 100644 www/sunders/i18n/stats/es.json create mode 100644 www/sunders/i18n/stats/fr.json create mode 100644 www/sunders/i18n/stats/it.json create mode 100644 www/sunders/i18n/stats/ru.json create mode 100644 www/sunders/i18n/symbology/de.json create mode 100644 www/sunders/i18n/symbology/en.json create mode 100644 www/sunders/i18n/symbology/es.json create mode 100644 www/sunders/i18n/symbology/fr.json create mode 100644 www/sunders/i18n/symbology/it.json create mode 100644 www/sunders/i18n/symbology/ru.json create mode 100644 www/sunders/images/button_language.png create mode 100644 www/sunders/images/button_less_blue.png create mode 100644 www/sunders/images/button_less_gray.png create mode 100644 www/sunders/images/button_more_blue.png create mode 100644 www/sunders/images/button_more_gray.png create mode 100644 www/sunders/images/button_next.png create mode 100644 www/sunders/images/button_permalink.png create mode 100644 www/sunders/images/button_previous.png create mode 100644 www/sunders/images/button_search.png create mode 100644 www/sunders/images/button_stats.png create mode 100644 www/sunders/images/cam.png create mode 100644 www/sunders/images/camAll.png create mode 100644 www/sunders/images/camBlue.png create mode 100644 www/sunders/images/camGreen.png create mode 100644 www/sunders/images/camRed.png create mode 100644 www/sunders/images/close.png create mode 100644 www/sunders/images/colorBlue.png create mode 100644 www/sunders/images/colorBlueAll.png create mode 100644 www/sunders/images/colorGreen.png create mode 100644 www/sunders/images/colorGreenAll.png create mode 100644 www/sunders/images/colorRed.png create mode 100644 www/sunders/images/colorRedAll.png create mode 100644 www/sunders/images/dome.png create mode 100644 www/sunders/images/domeAll.png create mode 100644 www/sunders/images/domeBlue.png create mode 100644 www/sunders/images/domeGreen.png create mode 100644 www/sunders/images/domeRed.png create mode 100644 www/sunders/images/dome_z-17_h-3.png create mode 100644 www/sunders/images/dome_z-17_h-5.png create mode 100644 www/sunders/images/dome_z-17_h-5_d-45.png create mode 100644 www/sunders/images/fixed.png create mode 100644 www/sunders/images/fixedAll.png create mode 100644 www/sunders/images/fixedBlue.png create mode 100644 www/sunders/images/fixedGreen.png create mode 100644 www/sunders/images/fixedRed.png create mode 100644 www/sunders/images/fixed_z-17_d-90_a-15_h-10.png create mode 100644 www/sunders/images/fixed_z-17_d-90_a-15_h-5.png create mode 100644 www/sunders/images/fixed_z-17_d-90_a-60_h-10.png create mode 100644 www/sunders/images/guard.png create mode 100644 www/sunders/images/guardAll.png create mode 100644 www/sunders/images/guardBlue.png create mode 100644 www/sunders/images/guardGreen.png create mode 100644 www/sunders/images/guardRed.png create mode 100644 www/sunders/images/icon.png create mode 100644 www/sunders/images/link-how-de.png create mode 100644 www/sunders/images/link-how-en.png create mode 100644 www/sunders/images/link-how-es.png create mode 100644 www/sunders/images/link-how-fr.png create mode 100644 www/sunders/images/link-how-it.png create mode 100644 www/sunders/images/link-how-ru.png create mode 100644 www/sunders/images/link-what-de.png create mode 100644 www/sunders/images/link-what-en.png create mode 100644 www/sunders/images/link-what-es.png create mode 100644 www/sunders/images/link-what-fr.png create mode 100644 www/sunders/images/link-what-it.png create mode 100644 www/sunders/images/link-what-ru.png create mode 100644 www/sunders/images/link-where-de.png create mode 100644 www/sunders/images/link-where-en.png create mode 100644 www/sunders/images/link-where-es.png create mode 100644 www/sunders/images/link-where-fr.png create mode 100644 www/sunders/images/link-where-it.png create mode 100644 www/sunders/images/link-where-ru.png create mode 100644 www/sunders/images/lock-insecure.png create mode 100644 www/sunders/images/lock-secure.png create mode 100644 www/sunders/images/logo.png create mode 100644 www/sunders/images/panning.png create mode 100644 www/sunders/images/panningAll.png create mode 100644 www/sunders/images/panningBlue.png create mode 100644 www/sunders/images/panningGreen.png create mode 100644 www/sunders/images/panningRed.png create mode 100644 www/sunders/images/slider-toggle.png create mode 100644 www/sunders/images/title-how-de.png create mode 100644 www/sunders/images/title-how-en.png create mode 100644 www/sunders/images/title-how-es.png create mode 100644 www/sunders/images/title-how-fr.png create mode 100644 www/sunders/images/title-how-it.png create mode 100644 www/sunders/images/title-how-ru.png create mode 100644 www/sunders/images/title-mea.png create mode 100644 www/sunders/images/title-sunders.png create mode 100644 www/sunders/images/title-what-de.png create mode 100644 www/sunders/images/title-what-en.png create mode 100644 www/sunders/images/title-what-es.png create mode 100644 www/sunders/images/title-what-fr.png create mode 100644 www/sunders/images/title-what-it.png create mode 100644 www/sunders/images/title-what-ru.png create mode 100644 www/sunders/images/title-where-de.png create mode 100644 www/sunders/images/title-where-en.png create mode 100644 www/sunders/images/title-where-es.png create mode 100644 www/sunders/images/title-where-fr.png create mode 100644 www/sunders/images/title-where-it.png create mode 100644 www/sunders/images/title-where-ru.png create mode 100644 www/sunders/images/todo_cam.png create mode 100644 www/sunders/images/todo_camAll.png create mode 100644 www/sunders/images/todo_camBlue.png create mode 100644 www/sunders/images/todo_camGreen.png create mode 100644 www/sunders/images/todo_camRed.png create mode 100644 www/sunders/images/todo_dome.png create mode 100644 www/sunders/images/todo_domeAll.png create mode 100644 www/sunders/images/todo_domeBlue.png create mode 100644 www/sunders/images/todo_domeGreen.png create mode 100644 www/sunders/images/todo_domeRed.png create mode 100644 www/sunders/images/todo_fixed.png create mode 100644 www/sunders/images/todo_fixedAll.png create mode 100644 www/sunders/images/todo_fixedBlue.png create mode 100644 www/sunders/images/todo_fixedGreen.png create mode 100644 www/sunders/images/todo_fixedRed.png create mode 100644 www/sunders/images/todo_guard.png create mode 100644 www/sunders/images/todo_guardAll.png create mode 100644 www/sunders/images/todo_guardBlue.png create mode 100644 www/sunders/images/todo_guardGreen.png create mode 100644 www/sunders/images/todo_guardRed.png create mode 100644 www/sunders/images/todo_panning.png create mode 100644 www/sunders/images/todo_panningAll.png create mode 100644 www/sunders/images/todo_panningBlue.png create mode 100644 www/sunders/images/todo_panningGreen.png create mode 100644 www/sunders/images/todo_panningRed.png create mode 100644 www/sunders/images/todo_traffic.png create mode 100644 www/sunders/images/traffic.png create mode 100644 www/sunders/images/yarrow-up.png create mode 100644 www/sunders/index.php create mode 100644 www/sunders/it/camera.php create mode 100644 www/sunders/it/index.php create mode 100644 www/sunders/it/stats/index.php create mode 100644 www/sunders/js/leafletembed_functions.js create mode 100644 www/sunders/js/leafletembed_icons.js create mode 100644 www/sunders/js/search.js create mode 100644 www/sunders/json/credits.json create mode 100644 www/sunders/json/links.json create mode 100644 www/sunders/json/manual.json create mode 100644 www/sunders/json/stats-query.json create mode 100644 www/sunders/json/symbology.json create mode 100644 www/sunders/mindex.html create mode 100644 www/sunders/mstile-144x144.png create mode 100644 www/sunders/ru/camera.php create mode 120000 www/sunders/ru/images create mode 100644 www/sunders/ru/index.php create mode 100644 www/sunders/ru/stats/index.php create mode 100644 www/sunders/stats/index.php create mode 100644 www/sunders/sunders.html diff --git a/www/sunders/Leaflet/leaflet-LICENSE b/www/sunders/Leaflet/leaflet-LICENSE new file mode 100644 index 0000000..0cb916b --- /dev/null +++ b/www/sunders/Leaflet/leaflet-LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2010-2021, Vladimir Agafonkin +Copyright (c) 2010-2011, CloudMade +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/www/sunders/Leaflet/leaflet-README.md b/www/sunders/Leaflet/leaflet-README.md new file mode 100644 index 0000000..f56c4cc --- /dev/null +++ b/www/sunders/Leaflet/leaflet-README.md @@ -0,0 +1,32 @@ +Leaflet + +Leaflet is the leading open-source JavaScript library for **mobile-friendly interactive maps**. +Weighing just about 39 KB of gzipped JS plus 4 KB of gzipped CSS code, it has all the mapping [features][] most developers ever need. + +Leaflet is designed with *simplicity*, *performance* and *usability* in mind. +It works efficiently across all major desktop and mobile platforms out of the box, +taking advantage of HTML5 and CSS3 on modern browsers while being accessible on older ones too. +It can be extended with a huge amount of [plugins][], +has a beautiful, easy to use and [well-documented][] API +and a simple, readable [source code][] that is a joy to [contribute][] to. + +For more info, docs and tutorials, check out the [official website][].
+For **Leaflet downloads** (including the built master version), check out the [download page][]. + +We're happy to meet new contributors. +If you want to **get involved** with Leaflet development, check out the [contribution guide][contribute]. +Let's make the best mapping library that will ever exist, +and push the limits of what's possible with online maps! + +[![Build Status](https://travis-ci.org/Leaflet/Leaflet.svg?branch=master)](https://travis-ci.org/Leaflet/Leaflet) + + [contributors]: https://github.com/Leaflet/Leaflet/graphs/contributors + [features]: http://leafletjs.com/#features + [plugins]: http://leafletjs.com/plugins.html + [well-documented]: http://leafletjs.com/reference.html "Leaflet API reference" + [source code]: https://github.com/Leaflet/Leaflet "Leaflet GitHub repository" + [hosted on GitHub]: http://github.com/Leaflet/Leaflet + [contribute]: https://github.com/Leaflet/Leaflet/blob/master/CONTRIBUTING.md "A guide to contributing to Leaflet" + [official website]: http://leafletjs.com + [download page]: http://leafletjs.com/download.html + diff --git a/www/sunders/Leaflet/leaflet.css b/www/sunders/Leaflet/leaflet.css new file mode 100644 index 0000000..601476f --- /dev/null +++ b/www/sunders/Leaflet/leaflet.css @@ -0,0 +1,640 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Prevents IE11 from highlighting tiles in blue */ +.leaflet-tile::selection { + background: transparent; +} +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; + } + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; + } +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; + } +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; + } + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; + } + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive, +svg.leaflet-image-layer.leaflet-interactive path { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-container a.leaflet-active { + outline: 2px solid orange; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } + +.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + +/* Default icon URLs */ +.leaflet-default-icon-path { + background-image: url(images/marker-icon.png); + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover { + text-decoration: underline; + } +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: border-box; + box-sizing: border-box; + + background: #fff; + background: rgba(255, 255, 255, 0.5); + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; + } +.leaflet-popup-content p { + margin: 18px 0; + } +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-left: -20px; + overflow: hidden; + pointer-events: none; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + border: none; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; + } +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + -ms-zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } + + +/* Tooltip */ +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + } +.leaflet-tooltip.leaflet-clickable { + cursor: pointer; + pointer-events: auto; + } +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; + } + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} +.leaflet-tooltip-top { + margin-top: -6px; +} +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; + } +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; + } +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; + } +.leaflet-tooltip-left { + margin-left: -6px; +} +.leaflet-tooltip-right { + margin-left: 6px; +} +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; + } +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; + } +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; + } diff --git a/www/sunders/Leaflet/leaflet.js b/www/sunders/Leaflet/leaflet.js new file mode 100644 index 0000000..21f499c --- /dev/null +++ b/www/sunders/Leaflet/leaflet.js @@ -0,0 +1,6 @@ +/* @preserve + * Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com + * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function h(t){for(var i,e,n=1,o=arguments.length;n=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}();function kt(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var Bt={ie:tt,ielt9:it,edge:et,webkit:nt,android:ot,android23:st,androidStock:at,opera:ht,chrome:ut,gecko:lt,safari:ct,phantom:_t,opera12:dt,win:pt,ie3d:mt,webkit3d:ft,gecko3d:gt,any3d:vt,mobile:yt,mobileWebkit:xt,mobileWebkit3d:wt,msPointer:Pt,pointer:Lt,touch:bt,mobileOpera:Tt,mobileGecko:Mt,retina:zt,passiveEvents:Ct,canvas:St,svg:Zt,vml:Et},At=Pt?"MSPointerDown":"pointerdown",It=Pt?"MSPointerMove":"pointermove",Ot=Pt?"MSPointerUp":"pointerup",Rt=Pt?"MSPointerCancel":"pointercancel",Nt={},Dt=!1;function jt(t,i,e,n){function o(t){Ut(t,r)}var s,r,a,h,u,l,c,_;function d(t){t.pointerType===(t.MSPOINTER_TYPE_MOUSE||"mouse")&&0===t.buttons||Ut(t,h)}return"touchstart"===i?(u=t,l=e,c=n,_=p(function(t){t.MSPOINTER_TYPE_TOUCH&&t.pointerType===t.MSPOINTER_TYPE_TOUCH&&Ri(t),Ut(t,l)}),u["_leaflet_touchstart"+c]=_,u.addEventListener(At,_,!1),Dt||(document.addEventListener(At,Wt,!0),document.addEventListener(It,Ht,!0),document.addEventListener(Ot,Ft,!0),document.addEventListener(Rt,Ft,!0),Dt=!0)):"touchmove"===i?(h=e,(a=t)["_leaflet_touchmove"+n]=d,a.addEventListener(It,d,!1)):"touchend"===i&&(r=e,(s=t)["_leaflet_touchend"+n]=o,s.addEventListener(Ot,o,!1),s.addEventListener(Rt,o,!1)),this}function Wt(t){Nt[t.pointerId]=t}function Ht(t){Nt[t.pointerId]&&(Nt[t.pointerId]=t)}function Ft(t){delete Nt[t.pointerId]}function Ut(t,i){for(var e in t.touches=[],Nt)t.touches.push(Nt[e]);t.changedTouches=[t],i(t)}var Vt=Pt?"MSPointerDown":Lt?"pointerdown":"touchstart",qt=Pt?"MSPointerUp":Lt?"pointerup":"touchend",Gt="_leaflet_";var Kt,Yt,Xt,Jt,$t,Qt,ti=fi(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ii=fi(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),ei="webkitTransition"===ii||"OTransition"===ii?ii+"End":"transitionend";function ni(t){return"string"==typeof t?document.getElementById(t):t}function oi(t,i){var e,n=t.style[i]||t.currentStyle&&t.currentStyle[i];return n&&"auto"!==n||!document.defaultView||(n=(e=document.defaultView.getComputedStyle(t,null))?e[i]:null),"auto"===n?null:n}function si(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ri(t){var i=t.parentNode;i&&i.removeChild(t)}function ai(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function hi(t){var i=t.parentNode;i&&i.lastChild!==t&&i.appendChild(t)}function ui(t){var i=t.parentNode;i&&i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function li(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=pi(t);return 0this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,N(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e,n,o=A((i=i||{}).paddingTopLeft||i.padding||[0,0]),s=A(i.paddingBottomRight||i.padding||[0,0]),r=this.getCenter(),a=this.project(r),h=this.project(t),u=this.getPixelBounds(),l=u.getSize().divideBy(2),c=O([u.min.add(o),u.max.subtract(s)]);return c.contains(h)||(this._enforcingBounds=!0,e=a.subtract(h),n=A(h.x+e.x,h.y+e.y),(h.xc.max.x)&&(n.x=a.x-e.x,0c.max.y)&&(n.y=a.y-e.y,0=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o="mouseout"===i||"mouseover"===i,s=t.target||t.srcElement,r=!1;s;){if((e=this._targets[m(s)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){r=!0;break}if(e&&e.listens(i,!0)){if(o&&!Vi(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||r||o||!Vi(s,t)||(n=[this]),n},_handleDOMEvent:function(t){var i;this._loaded&&!Ui(t)&&("mousedown"!==(i=t.type)&&"keypress"!==i&&"keyup"!==i&&"keydown"!==i||Pi(t.target||t.srcElement),this._fireDOMEvent(t,i))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,i,e){var n;if("click"===t.type&&((n=h({},t)).type="preclick",this._fireDOMEvent(n,n.type,e)),!t._stopped&&(e=(e||[]).concat(this._findEventTargets(t,i))).length){var o=e[0];"contextmenu"===i&&o.listens(i,!0)&&Ri(t);var s,r={originalEvent:t};"keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type&&(s=o.getLatLng&&(!o._radius||o._radius<=10),r.containerPoint=s?this.latLngToContainerPoint(o.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=s?o.getLatLng():this.layerPointToLatLng(r.layerPoint));for(var a=0;athis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(M(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,ci(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:n}),setTimeout(p(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&_i(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),M(function(){this._moveEnd(!0)},this))}});function Yi(t){return new Xi(t)}var Xi=S.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return ci(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(ri(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=n):i=this._createRadioElement("leaflet-base-layers_"+m(this),n),this._layerControlInputs.push(i),i.layerId=m(t.layer),zi(i,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("div");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;0<=s;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;si.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),$i=Xi.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=si("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=si("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),Oi(s),zi(s,"click",Ni),zi(s,"click",o,this),zi(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";_i(this._zoomInButton,i),_i(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMinZoom()||ci(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMaxZoom()||ci(this._zoomInButton,i)}});Ki.mergeOptions({zoomControl:!0}),Ki.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new $i,this.addControl(this.zoomControl))});var Qi=Xi.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i="leaflet-control-scale",e=si("div",i),n=this.options;return this._addScales(n,i+"-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=si("div",i,e)),t.imperial&&(this._iScale=si("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;5280Leaflet'},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var i in(t.attributionControl=this)._container=si("div","leaflet-control-attribution"),Oi(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Ki.mergeOptions({attributionControl:!0}),Ki.addInitHook(function(){this.options.attributionControl&&(new te).addTo(this)});Xi.Layers=Ji,Xi.Zoom=$i,Xi.Scale=Qi,Xi.Attribution=te,Yi.layers=function(t,i,e){return new Ji(t,i,e)},Yi.zoom=function(t){return new $i(t)},Yi.scale=function(t){return new Qi(t)},Yi.attribution=function(t){return new te(t)};var ie=S.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}});ie.addTo=function(t,i){return t.addHandler(i,this),this};var ee,ne={Events:Z},oe=bt?"touchstart mousedown":"mousedown",se={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},re={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},ae=E.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){c(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(zi(this._dragStartTarget,oe,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(ae._dragging===this&&this.finishDrag(),Si(this._dragStartTarget,oe,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var i,e;!t._simulated&&this._enabled&&(this._moved=!1,li(this._element,"leaflet-zoom-anim")||ae._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((ae._dragging=this)._preventOutline&&Pi(this._element),xi(),Xt(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=bi(this._element),this._startPoint=new k(i.clientX,i.clientY),this._parentScale=Ti(e),zi(document,re[t.type],this._onMove,this),zi(document,se[t.type],this._onUp,this))))},_onMove:function(t){var i,e;!t._simulated&&this._enabled&&(t.touches&&1i&&(e.push(t[n]),o=n);oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function de(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||Oe.prototype._containsPoint.call(this,t,!0)}});var Ne=Ce.extend({initialize:function(t,i){c(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=g(t)?t:t.features;if(o){for(i=0,e=o.length;iu.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c]))},_onCloseButtonClick:function(t){this._close(),Ni(t)},_getAnchor:function(){return A(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Ki.mergeOptions({closePopupOnClick:!0}),Ki.include({openPopup:function(t,i,e){return t instanceof tn||(t=new tn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Me.include({bindPopup:function(t,i){return t instanceof tn?(c(t,i),(this._popup=t)._source=this):(this._popup&&!i||(this._popup=new tn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){return this._popup&&this._map&&(i=this._popup._prepareOpen(this,t,i),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Ni(t),i instanceof Be?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var en=Qe.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){Qe.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){Qe.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=Qe.prototype.getEvents.call(this);return bt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=si("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i,e=this._map,n=this._container,o=e.latLngToContainerPoint(e.getCenter()),s=e.layerPointToContainerPoint(t),r=this.options.direction,a=n.offsetWidth,h=n.offsetHeight,u=A(this.options.offset),l=this._getAnchor(),c="top"===r?(i=a/2,h):"bottom"===r?(i=a/2,0):(i="center"===r?a/2:"right"===r?0:"left"===r?a:s.xthis.options.maxZoom||nthis.options.maxZoom||void 0!==this.options.minZoom&&oe.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return N(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new R(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new k(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(ri(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){ci(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=a,t.onmousemove=a,it&&this.options.opacity<1&&mi(t,this.options.opacity),ot&&!st&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),p(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&M(p(this._tileReady,this,t,null,o)),vi(o,e),this._tiles[n]={el:o,coords:t,current:!0},i.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,i,e){i&&this.fire("tileerror",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(mi(e.el,0),z(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(ci(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),it||!this._map._fadeAnimated?M(this._pruneTiles,this):setTimeout(p(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new k(this._wrapX?o(t.x,this._wrapX):t.x,this._wrapY?o(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new I(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var sn=on.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=c(this,i)).detectRetina&&zt&&0')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_n={_initContainer:function(){this._container=si("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(hn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=cn("shape");ci(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=cn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[m(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ri(i),t.removeInteractiveTarget(i),delete this._layers[m(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i=i||(t._stroke=cn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=g(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e=e||(t._fill=cn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){hi(t._container)},_bringToBack:function(t){ui(t._container)}},dn=Et?cn:J,pn=hn.extend({getEvents:function(){var t=hn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=dn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=dn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ri(this._container),Si(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){var t,i,e;this._map._animatingZoom&&this._bounds||(hn.prototype._update.call(this),i=(t=this._bounds).getSize(),e=this._container,this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),vi(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update"))},_initPath:function(t){var i=t._path=dn("path");t.options.className&&ci(i,t.options.className),t.options.interactive&&ci(i,"leaflet-interactive"),this._updateStyle(t),this._layers[m(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ri(t._path),t.removeInteractiveTarget(t._path),delete this._layers[m(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,$(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){hi(t._path)},_bringToBack:function(t){ui(t._path)}});function mn(t){return Zt||Et?new pn(t):null}Et&&pn.include(_n),Ki.include({getRenderer:function(t){var i=(i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&ln(t)||mn(t)}});var fn=Re.extend({initialize:function(t,i){Re.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=N(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});pn.create=dn,pn.pointsToPath=$,Ne.geometryToLayer=De,Ne.coordsToLatLng=We,Ne.coordsToLatLngs=He,Ne.latLngToCoords=Fe,Ne.latLngsToCoords=Ue,Ne.getFeature=Ve,Ne.asFeature=qe,Ki.mergeOptions({boxZoom:!0});var gn=ie.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){zi(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Si(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ri(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),Xt(),xi(),this._startPoint=this._map.mouseEventToContainerPoint(t),zi(document,{contextmenu:Ni,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=si("div","leaflet-zoom-box",this._container),ci(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new I(this._point,this._startPoint),e=i.getSize();vi(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ri(this._box),_i(this._container,"leaflet-crosshair")),Jt(),wi(),Si(document,{contextmenu:Ni,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){var i;1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(p(this._resetState,this),0),i=new R(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})))},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Ki.addInitHook("addHandler","boxZoom",gn),Ki.mergeOptions({doubleClickZoom:!0});var vn=ie.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Ki.addInitHook("addHandler","doubleClickZoom",vn),Ki.mergeOptions({dragging:!0,inertia:!st,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var yn=ie.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new ae(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),ci(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){_i(this._map._container,"leaflet-grab"),_i(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,i=this._map;i._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=N(this._map.options.maxBounds),this._offsetLimit=O(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,i.fire("movestart").fire("dragstart"),i.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var i,e;this._map.options.inertia&&(i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(e),this._times.push(i),this._prunePositions(i)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)i.getMaxZoom()&&1 + + + L.SemiCircle/ + L.SemiCircleMarker
+ factories: L.semiCircle/L.SemiCircleMarker + + + Options:
+ startAngle: start angle of the semicircle
+ stopAngle: stop angle of the semicircle
+ Angles are defined like compass courses: 0 = north, 90 = east, etc. + + + +## Provided methods: ## + + + + + + + + + + + + + +
L.SemiCircle.setStartAngle(angle)Set the start angle of the circle to angle and redraw.
L.Circle.setStopAngle(angle)Set the stop angle of the circle to angle and redraw.
L.Circle.setDirection(direction, size)Set the startAngle to direction - (0.5 * size) and the stopAngle to direction + (0.5 * size) and redraw.
+ +## Usage: +The plugin provides two ways to only display a part of the circle: +1. Use the `options` map and set `startAngle` and `stopAngle`. +2. Use `setDirection(direction, size)` to display a semicircle of `size` degrees at `direction`. + +## Example: +[Live demo](http://jieter.github.com/Leaflet-semicircle/examples/semicircle.html) + +Using `options.startAngle` and `options.stopAngle`: +``` +L.semiCircle([51.5, -0.09], { + radius: 500, + startAngle: 45, + stopAngle: 135 +}).addTo(map); +``` + +Draw the same semicircle using `setDirection(direction, size)`: +``` +L.semiCircle([51.5, -0.09], {radius: 500}) + .setDirection(90, 90) + .addTo(map); +``` + +## Screenshot: + +[Live demo](http://jieter.github.com/Leaflet-semicircle/examples/semicircle.html) + +![Semicircles screenshot](screenshot.png) + +## Changelog + +### 2.0.2 (2017-09-01) + - Fixed #24: instance check for canvas renderer + +### 2.0.1 (2017-07-22) + - Fixed #14: Poleward displacement of circle center when radius is large. + +### 2.0.0 (2017-07-09) + - Changed the API to stand-alone classes rather than overwriting `L.Circle` with an extension of itself. + - Added support for Leaflet 1.1.0 diff --git a/www/sunders/Leaflet/semicircle.js b/www/sunders/Leaflet/semicircle.js new file mode 100644 index 0000000..aad6261 --- /dev/null +++ b/www/sunders/Leaflet/semicircle.js @@ -0,0 +1,196 @@ +/** + * Semicircle extension for L.Circle. + * Jan Pieter Waagmeester + * + * This version is tested with leaflet 1.0.2 + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['leaflet'], factory); + } else if (typeof module !== 'undefined' && typeof require !== 'undefined') { + // Node/CommonJS + module.exports = factory(require('leaflet')); + } else { + // Browser globals + if (typeof window.L === 'undefined') { + throw 'Leaflet must be loaded first'; + } + factory(window.L); + } +})(function (L) { + var DEG_TO_RAD = Math.PI / 180; + + // make sure 0 degrees is up (North) and convert to radians. + function fixAngle (angle) { + return (angle - 90) * DEG_TO_RAD; + } + + // rotate point [x + r, y+r] around [x, y] by `angle` radians. + function rotated (p, angle, r) { + return p.add( + L.point(Math.cos(angle), Math.sin(angle)).multiplyBy(r) + ); + } + + L.Point.prototype.rotated = function (angle, r) { + return rotated(this, angle, r); + }; + + var semicircle = { + options: { + startAngle: 0, + stopAngle: 359.9999 + }, + + startAngle: function () { + if (this.options.startAngle < this.options.stopAngle) { + return fixAngle(this.options.startAngle); + } else { + return fixAngle(this.options.stopAngle); + } + }, + + stopAngle: function () { + if (this.options.startAngle < this.options.stopAngle) { + return fixAngle(this.options.stopAngle); + } else { + return fixAngle(this.options.startAngle); + } + }, + + setStartAngle: function (angle) { + this.options.startAngle = angle; + return this.redraw(); + }, + + setStopAngle: function (angle) { + this.options.stopAngle = angle; + return this.redraw(); + }, + + setDirection: function (direction, degrees) { + if (degrees === undefined) { + degrees = 10; + } + this.options.startAngle = direction - (degrees / 2); + this.options.stopAngle = direction + (degrees / 2); + + return this.redraw(); + }, + getDirection: function () { + return this.stopAngle() - (this.stopAngle() - this.startAngle()) / 2; + }, + + isSemicircle: function () { + var startAngle = this.options.startAngle, + stopAngle = this.options.stopAngle; + + return ( + !(startAngle === 0 && stopAngle > 359) && + !(startAngle === stopAngle) + ); + }, + _containsPoint: function (p) { + function normalize (angle) { + while (angle <= -Math.PI) { + angle += 2.0 * Math.PI; + } + while (angle > Math.PI) { + angle -= 2.0 * Math.PI; + } + return angle; + } + var angle = Math.atan2(p.y - this._point.y, p.x - this._point.x); + var nStart = normalize(this.startAngle()); + var nStop = normalize(this.stopAngle()); + if (nStop <= nStart) { + nStop += 2.0 * Math.PI; + } + if (angle <= nStart) { + angle += 2.0 * Math.PI; + } + return ( + nStart < angle && angle <= nStop && + p.distanceTo(this._point) <= this._radius + this._clickTolerance() + ); + } + }; + + L.SemiCircle = L.Circle.extend(semicircle); + L.SemiCircleMarker = L.CircleMarker.extend(semicircle); + + L.semiCircle = function (latlng, options) { + return new L.SemiCircle(latlng, options); + }; + L.semiCircleMarker = function (latlng, options) { + return new L.SemiCircleMarker(latlng, options); + }; + + var _updateCircleSVG = L.SVG.prototype._updateCircle; + var _updateCircleCanvas = L.Canvas.prototype._updateCircle; + + L.SVG.include({ + _updateCircle: function (layer) { + // If we want a circle, we use the original function + if (!(layer instanceof L.SemiCircle || layer instanceof L.SemiCircleMarker) || + !layer.isSemicircle()) { + return _updateCircleSVG.call(this, layer); + } + if (layer._empty()) { + return this._setPath(layer, 'M0 0'); + } + + var p = layer._map.latLngToLayerPoint(layer._latlng), + r = layer._radius, + r2 = Math.round(layer._radiusY || r), + start = p.rotated(layer.startAngle(), r), + end = p.rotated(layer.stopAngle(), r); + + var largeArc = (layer.options.stopAngle - layer.options.startAngle >= 180) ? '1' : '0'; + + var d = 'M' + p.x + ',' + p.y + + // line to first start point + 'L' + start.x + ',' + start.y + + 'A ' + r + ',' + r2 + ',0,' + largeArc + ',1,' + end.x + ',' + end.y + + ' z'; + + this._setPath(layer, d); + } + }); + + L.Canvas.include({ + _updateCircle: function (layer) { + // If we want a circle, we use the original function + if (!(layer instanceof L.SemiCircle || layer instanceof L.SemiCircleMarker) || + !layer.isSemicircle()) { + return _updateCircleCanvas.call(this, layer); + } + + if (!this._drawing || layer._empty()) { return; } + + var p = layer._point, + ctx = this._ctx, + r = layer._radius, + s = (layer._radiusY || r) / r, + start = p.rotated(layer.startAngle(), r); + + if (s !== 1) { + ctx.save(); + ctx.scale(1, s); + } + + ctx.beginPath(); + ctx.moveTo(p.x, p.y); + ctx.lineTo(start.x, start.y); + ctx.arc(p.x, p.y, r, layer.startAngle(), layer.stopAngle()); + ctx.lineTo(p.x, p.y); + + if (s !== 1) { + ctx.restore(); + } + + this._fillStroke(ctx, layer); + } + }); +}); diff --git a/www/sunders/add-lists.php b/www/sunders/add-lists.php new file mode 100644 index 0000000..12fc0c0 --- /dev/null +++ b/www/sunders/add-lists.php @@ -0,0 +1,299 @@ +'; + + // Loop over the lists to display. + foreach($decodedJSON as $listObject) { + echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
'; + + // Loop over the entries of the current list. + foreach($listObject->{'listEntries'} as $listEntryObject) { + echo '
+
'; + + // Loop over the icons of the current list entry. + foreach($listEntryObject->{'icons'} as $icon) { + echo ''.translate($i18n, $i18nDefault, $icon->{'alt'}, [], [], []).''; + } + echo '
+
'.translate($i18n, $i18nDefault, $listEntryObject->{'description'}, [], [], []).'
+
'; + } + } + echo ''; + } + + // Convert the content of the manual JSON file to HTML. + function addListManual($jsonPath, $i18n, $i18nDefault) { + global $pathToWebFolder; + + $decodedJSON = getDecodedJSON($jsonPath); + + echo '
'; + + // Loop over the lists to display. + foreach($decodedJSON as $listObject) { + echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
'; + + // Loop over the entries of the current list. + foreach($listObject->{'listEntries'} as $listEntryObject) { + $keysAsHTMLArray = array(); + $valuesAsHTMLArray = array(); + + // Loop over the keys of the current list entry. + foreach($listEntryObject->{'keys'} as $key) { + + if (is_null($key->{'href'})) { + array_push($keysAsHTMLArray, translate($i18n, $i18nDefault, $key->{'key'}, [], [], [])); + } else { + array_push($keysAsHTMLArray, translate($i18n, $i18nDefault, $key->{'key'}, [$key->{'href'}], [], [])); + } + } + + // Loop over the values of the current list entry. + foreach($listEntryObject->{'values'} as $value) { + + if (is_null($value->{'href'})) { + array_push($valuesAsHTMLArray, translate($i18n, $i18nDefault, $value->{'value'}, [], [], [])); + } else { + array_push($valuesAsHTMLArray, translate($i18n, $i18nDefault, $value->{'value'}, [$value->{'href'}], [], [])); + } + } + + echo '
+
'; + echo implode('
', $keysAsHTMLArray); + echo '
'; + + // Some lists have an icon column. + if ($listObject->{'isListWithIcons'}) { + echo '
' + .implode('
', $valuesAsHTMLArray).' +
+
'; + $iconObject = $listEntryObject->{'icon'}; + if (!is_null($iconObject)){ + echo ''.translate($i18n, $i18nDefault, $iconObject->{'alt'}, [], [], []).''; + } + } else { + echo '
' + .implode('
', $valuesAsHTMLArray).''; + } + + echo '
+
'; + } + + // Some lists end with examples, i.e. 3 images with descriptions. + if (!is_null($listObject->{'examples'})) { + $examplesObject = $listObject->{'examples'}; + $examplesObjectImages = $examplesObject->{'images'}; + $examplesObjectDescriptions = $examplesObject->{'descriptions'}; + + echo '
+
+
'.translate($i18n, $i18nDefault, 'examples', [], [], []).': +
+
+
+
'; + + + for($i = 0; $i < count($examplesObjectImages); ++$i) { + $linesAsHTMLArray = array(); + + foreach($examplesObjectDescriptions[$i]->{'lines'} as $line) { + array_push($linesAsHTMLArray, translate($i18n, $i18nDefault, $line, [], [], [])); + } + + echo '
+
+ '.translate($i18n, $i18nDefault, $examplesObjectImages[$i]->{'alt'}, [], [], []).' +
+
' + .implode('
', $linesAsHTMLArray).' +
+
'; + } + + echo '
+
'; + } + } + echo '
'; + } + + // Convert the content of the links JSON file to HTML. +/* function addListLinks($jsonPath, $i18n, $i18nDefault) { + global $pathToWebFolder; + $expandSectionCounter = 0; + + $decodedJSON = getDecodedJSON($jsonPath); + echo '
'; + + // Loop over the lists to display. + foreach($decodedJSON as $listObject) { + echo '
'.translate($i18n, $i18nDefault, $listObject->{'listTitle'}, [], [], []).'
'; + + // Loop over the sections of the current list. + foreach($listObject->{'sections'} as $sectionObject) { + if ($sectionObject->{'isExpandable'}) { + $sectionToggleChecked = ''; + + if ($sectionObject->{'isExpandedByDefault'}) { + $sectionToggleChecked = 'checked="checked"'; + } + + echo ' '.translate($i18n, $i18nDefault, $sectionOb$ + } + + echo '
'; + + // Loop over the entries of the current section. + foreach($sectionObject->{'listEntries'} as $listEntryObject) { + echo '
+
'; + + // Choose lock icon according to https or http connection. + if (substr($listEntryObject->{'href'}, 0, 5) == 'https') { + echo ''.translate($i18n, $i18nDefault, 'secure-alt', [], [], [])$
+          } else {
+            echo     '<img src= + [ '.htmlentities($listEntryObject->{'sourceText'}).' ]
'.htmlentities($li$ +
+
'; + } + echo '
'; + } + } + echo '
'; + } +*/ + + // Convert the content of the links JSON file to HTML. + function addListLinks($jsonPath, $i18n, $i18nDefault) { + global $pathToWebFolder; + $expandSectionCounter = 0; + + $decodedJSON = getDecodedJSON($jsonPath); + echo ''; + } + + // Convert the content of the credits and licenses JSON file to HTML. + function addListCredits($jsonPath, $i18n, $i18nDefault) { + global $pathToWebFolder; + + $decodedJSON = getDecodedJSON($jsonPath); + + // Loop over the lists to display. + foreach($decodedJSON as $listObject) { + echo ''; + + // Loop over the entries of the current list. + foreach($listObject->{'listEntries'} as $listEntryObject) { + echo '
' + .translate($i18n, $i18nDefault, $listEntryObject->{'type'}, [], [], []).' +
'; + + // Loop over the credits of the current list entry. + foreach($listEntryObject->{'credits'} as $credit) { + $hrefCredit = $credit->{'href-credit'}; + $hrefLicense = $credit->{'href-license'}; + + if (substr($hrefCredit, 0, 4) != 'http') { + $hrefCredit = $pathToWebFolder.$hrefCredit; + } + + if (substr($hrefLicense, 0, 4) != 'http') { + $hrefLicense = $pathToWebFolder.$hrefLicense; + } + + echo ''; + } + } + } + } + + // Create a HTML list that contains the supported languages (i18n). + function addListLanguages($initialLanguage, $i18n, $i18nDefault) { + global $pathToWebFolder, $embedPerma; + + + $supportedLanguages = [ + 'de' => 'deutsch', + 'en' => 'english', + 'es' => 'español', + 'fr' => 'français', + 'it' => 'italiano', + 'ru' => 'русский' + ]; + + echo ' + '; + } +?> + diff --git a/www/sunders/apple-touch-icon.png b/www/sunders/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..55261d5d53871b9ab14abfe2766a839fb1ad106c GIT binary patch literal 4544 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 Qz`(%Z>FVdQ&MBb@0A)Oz1poj5 literal 0 HcmV?d00001 diff --git a/www/sunders/camera.php b/www/sunders/camera.php new file mode 100644 index 0000000..96707f7 --- /dev/null +++ b/www/sunders/camera.php @@ -0,0 +1,445 @@ +id = $valId; + $this->lat = $valLat; + $this->lon = $valLon; + } + } + + function mergeNeighbor(&$clusterGrid, $posCell, $pos) { + global $divDiag2; + + if (!array_key_exists($pos, $clusterGrid)) { + /* the neighbor is empty */ + return; + } + + $neighbor = $clusterGrid[$pos]; + + if ($neighbor['count'] == 0) { + /* The neighbor is merged to an other cell, yet */ + return; + } + + $cell = $clusterGrid[$posCell]; + + /* Calculate the (square of) distance from the cell to its neighbor */ + $lonDist = ($cell['longitude']/$cell['count']) - ($neighbor['longitude']/$neighbor['count']); + $latDist = ($cell['latitude'] /$cell['count']) - ($neighbor['latitude'] /$neighbor['count']); + $dist = ($lonDist * $lonDist) + ($latDist * $latDist); + + if ($dist < $divDiag2 / 10) { + $count = $cell['count'] + $neighbor['count']; + $clusterGrid[$posCell]['latitude'] = $cell['latitude'] + $neighbor['latitude']; + $clusterGrid[$posCell]['longitude'] = $cell['longitude'] + $neighbor['longitude']; + $clusterGrid[$posCell]['count'] = $count; + $clusterGrid[$posCell]['points'] = array_merge($cell['points'], $neighbor['points']); + /* Invalidate the merged neighbor */ + $clusterGrid[$pos]['count'] = 0; + } + } + + function mergeNeighborhood(&$clusterGrid, $pos) { + global $divWCount, $divHCount; + + if ($clusterGrid[$pos]['count'] == 0) { + /* cell merged yet */ + return; + } + + $latLon = explode(',', $clusterGrid[$pos]['grid'] ); + if ($latLon[0] > 0 && $latLon[1] < $divHCount - 1) { + if ($latLon[0] > 0) { + $posNeigh = ($latLon[0] - 1) . ',' . ($latLon[1] + 1); + mergeNeighbor($clusterGrid, $pos, $posNeigh); + } + + $posNeigh = $latLon[0] . ',' . ($latLon[1] + 1); + mergeNeighbor($clusterGrid, $pos, $posNeigh); + + if ($latLon[0] < $divWCount - 1) { + $posNeigh = ($latLon[0] + 1) . ',' . ($latLon[1] + 1); + mergeNeighbor($clusterGrid, $pos, $posNeigh); + } + } + + if ($latLon[0] < $divWCount - 1) { + $posNeigh = ($latLon[0] + 1) . ',' . $latLon[1]; + mergeNeighbor($clusterGrid, $pos, $posNeigh); + } + } + + /* Recursive calculation of the quick hull algo + $isBottom : 1 if bottom point is searched, -1 if top point is searched */ + function quickHullCalc(&$pointList, $count, $minPoint, $maxPoint, $isBottom) { + + $msg = 'Quick count='.$count.', min=('.$minPoint->id.','.$minPoint->lat.','.$minPoint->lon.'), max=('.$minPoint->id.','.$minPoint->lat.','.$minPoint->lon.'), isBottom='.$isBottom; + + $farthestPoint = null; + $farthestDist = 0; + $outsideList = array(); + $outsideListCount = 0; + + if ($maxPoint->lon != $minPoint->lon) { + /* Get the line equation as y = mx + p */ + $m = ($maxPoint->lat - $minPoint->lat) / ($maxPoint->lon - $minPoint->lon); + $p = ($maxPoint->lat * $minPoint->lon - $minPoint->lat * $maxPoint->lon) / ($minPoint->lon - $maxPoint->lon); + } else { + /* The line equation is y = p */ + $m = null; + $p = $minPoint->lat; + $coef = (($minPoint->lon > $maxPoint->lon) ? 1 : -1); + } + + /* For each point, check whether : + - it is on the right side of the line + - it is the farthest from the line + */ + foreach ($pointList as $point) { + if (isset($m)) { + $dist = $isBottom * ($m * $point->lon - $point->lat + $p); + } else { + $dist = $coef * ($point->lon - $p); + } + if ($dist > 0 + && $point->id != $minPoint->id + && $point->id != $maxPoint->id) { + + array_push($outsideList, $point); + $outsideListCount++; + + if ($dist > $farthestDist) { + $farthestPoint = $point; + $farthestDist = $dist; + } + } + } + + if ($outsideListCount == 0) { + return array($minPoint); + } else if ($outsideListCount == 1) { + return array($minPoint, $outsideList[0]); + } else { + return array_merge( + quickHullCalc($outsideList, $outsideListCount, $minPoint, $farthestPoint, $isBottom), + quickHullCalc($outsideList, $outsideListCount, $farthestPoint, $maxPoint, $isBottom)); + } + } + + /* This function receives a list of points [lat, lon] and returns a list of points [lat, lon] + representing the minimal convex polygon containing the points */ + function quickHull(&$pointList, $count) { + + $msg= 'Quick count='.$count; + + if ($count == 0) { + return array(); + } else if ($count == 1) { + return array($pointList[0]); + } else if ($count == 2) { + return array($pointList[0], $pointList[1]); + } + + /* retrieves the min and max points on the x axe */ + $minPoint = $pointList[0]; + $maxPoint = $pointList[0]; + + foreach ($pointList as $point) { + if ($point->lon < $minPoint->lon || ($point->lon == $minPoint->lon && $point->lat < $minPoint->lat)) { + $minPoint = $point; + } + if ($point->lon > $maxPoint->lon || ($point->lon == $maxPoint->lon && $point->lat > $maxPoint->lat)) { + $maxPoint = $point; + } + } + + $bottomPoints = quickHullCalc($pointList, $count, $minPoint, $maxPoint, 1); + $topPoints = quickHullCalc($pointList, $count, $maxPoint, $minPoint, -1); + return array_merge($bottomPoints, $topPoints); + } + + + + + $GRID_MAX_ZOOM = 16; + $GRID_CELL_PIXEL = 90; + + /* Check if parameters are not empty */ + if ( !array_key_exists('bbox', $_GET) + || !array_key_exists('zoom', $_GET) + || !array_key_exists('width', $_GET) + || !array_key_exists('height', $_GET)) { + header('Content-type: application/json'); + $result = '{"error":"bbox, zoom, width and height parameters are required. ' + .(array_key_exists('bbox', $_GET) ? '' : 'bbox is empty. ') + .(array_key_exists('zoom', $_GET) ? '' : 'zoom is empty. ') + .(array_key_exists('width', $_GET) ? '' : 'width is empty. ') + .(array_key_exists('height', $_GET) ? '' : 'height is empty. ') + .'"}'; + echo $result; + exit; + } + + /* Check zoom */ + $zoom = $_GET['zoom']; + + if ( !is_numeric($zoom) + || intval($zoom) < 1 + || intval($zoom) > 19) { + header('Content-type: application/json'); + $result = '{"error":"unexpected zoom value : ' + .htmlentities($zoom) + .'"}'; + echo $result; + exit; + } + + /* Check bounds box --> bbox=boundsSW.lng,boundsSW.lat,boundsNE.lng,boundsNE.lat */ + $bbox = explode(',', $_GET['bbox']); + + if ( !is_numeric($bbox[0]) || $bbox[0] > 180 // 0 = SW.lng + || !is_numeric($bbox[2]) || $bbox[2] < -180 // 2 = NE.lng + || !is_numeric($bbox[1]) || $bbox[1] < -90 || $bbox[1] > 90 // 1 = SW.lat + || !is_numeric($bbox[3]) || $bbox[3] < -90 || $bbox[3] > 90) { // 3 = NE.lat + header('Content-type: application/json'); + $result = '{"error":"unexpected bbox longitude and latitude values : ' + .'lon ['.htmlentities($bbox[0]).', '.htmlentities($bbox[2]).'], ' + .'lat ['.htmlentities($bbox[1]).', '.htmlentities($bbox[3]).']' + .'"}'; + echo $result; + exit; + } + + if ($bbox[0] >= $bbox[2]) { // 0 = SW.lng | 2 = NE.lng + header('Content-type: application/json'); + $result = '{"error":"min longitude greater than max longitude : ' + .'lon ['.htmlentities($bbox[0]).', '.htmlentities($bbox[2]).']' + .'"}'; + echo $result; + exit; + } + + if ($bbox[1] >= $bbox[3]) { // 1 = SW.lat | 3 = NE.lat + header('Content-type: application/json'); + $result = '{"error":"min latitude greater than max latitude : ' + .'lat ['.htmlentities($bbox[1]).', '.htmlentities($bbox[3]).']' + .'"}'; + echo $result; + exit; + } + + $lonMin = $bbox[0]; // 0 = SW.lng + $lonMax = $bbox[2]; // 2 = NE.lng + $latMin = $bbox[1]; // 1 = SW.lat + $latMax = $bbox[3]; // 3 = NE.lat + + $pixelWidth = (int) $_GET['width']; + $pixelHeight = (int) $_GET['height']; + + if ($pixelWidth == 0 || $pixelHeight == 0) { + header('Content-type: application/json'); + $result = '{"error":"width or height is null : ' + .htmlentities($pixelWidth).'x'.htmlentities($pixelHeight) + .'"}'; + echo $result; + exit; + } + + $lonWidth = $lonMax - $lonMin; // NE.lng - SW.lng + $latHeight = $latMax - $latMin; // NE.lat - SW.lat + + $divWCount = ((int) ($pixelWidth / $GRID_CELL_PIXEL)) + 1; + $divHCount = ((int) ($pixelHeight / $GRID_CELL_PIXEL)) + 1; + + $divWidth = $lonWidth / $divWCount; + $divHeight = $latHeight / $divHCount; + $divDiag2 = ($divWidth * $divWidth) + ($divHeight * $divHeight); + + /* Connect to database */ + $mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, MYSQL_DB); + if($mysqli->connect_errno) { + header('Content-type: application/json'); + $result = '{"error":"error while connecting to db : ' . $mysqli->error . '"}'; + echo $result; + exit; + } + + $rqtLonMin = $lonMin; // SW.lng + $rqtLonMax = $lonMax; // NE.lng + + /* Indicates whether the map displays the -180/180° longitude */ + if ($rqtLonMax - $rqtLonMin > 360) { + $rqtLonMin = -180; + $rqtLonMax = 180; + } + + /* Select the nodes to be returned, and cluster them on a grid if necessary */ + if ($rqtLonMin >= -180 && $lonMax <= 180) { + $sql='SELECT id, latitude, longitude + FROM position + WHERE latitude between ? and ? + AND longitude between ? and ?'; + } else { + $sql='SELECT id, latitude, longitude + FROM position + WHERE latitude between ? and ? + AND (longitude between ? and 1800000000 OR longitude between -1800000000 and ?)'; + + while ($rqtLonMin < -180) { + $rqtLonMin += 360; + } + while ($rqtLonMax > 180) { + $rqtLonMax -= 360; + } + } + + $rqtLonMin = bcmul($rqtLonMin, 10000000, 0); // SW.lng + $rqtLonMax = bcmul($rqtLonMax, 10000000, 0); // NE.lng + $rqtLatMin = bcmul($latMin, 10000000, 0); // SW.lat + $rqtLatMax = bcmul($latMax, 10000000, 0); // NE.lat + + $resArray = array(); + $nbFetch = 0; + + if ($stmt = $mysqli->prepare($sql)) { + $stmt->bind_param('iiii', $rqtLatMin, $rqtLatMax, $rqtLonMin, $rqtLonMax); // SW.lat, NE.lat, SW.lng, NE.lng + + $stmt->execute(); + + $stmt->bind_result($id, $latitude, $longitude); + + while ($stmt->fetch()) { + $nbFetch++; + + $latitude = bcdiv($latitude, 10000000, 7); + $longitude = bcdiv($longitude, 10000000, 7); + + while ($longitude < $lonMin) { // $lonMin = SW.lng + $longitude += 360; + } + while ($longitude > $lonMax) { // $lonMax = NE.lng + $longitude -= 360; + } + + /* Initialize the current point */ + if ($zoom >= $GRID_MAX_ZOOM) { + array_push($resArray, array( + 'points' => array(new OsmPoint($id, $latitude, $longitude)), + 'latitude' => $latitude, + 'longitude' => $longitude, + 'count' => 1 )); + } else { + $posLat = (int) (($latitude - $latMin) / $divHeight); // $latMin = SW.lat + $posLon = (int) (($longitude - $lonMin) / $divWidth); // $lonMin = SW.lng + $pos = $posLon.','.$posLat; + + if (!array_key_exists($pos, $resArray)) { + $resArray[$pos] = array( + 'points' => array(), + 'latitude' => 0, + 'longitude' => 0, + 'count' => 0, + 'grid' => $pos); + } + + $elt = new OsmPoint($id, $latitude, $longitude); + array_push($resArray[$pos]['points'], $elt); + + /* Increment the number of points */ + $resArray[$pos]['count']++; + $resArray[$pos]['latitude'] += $latitude; + $resArray[$pos]['longitude'] += $longitude; + } + } + + $stmt->close(); + } else { + $mysqli->close(); + header('Content-type: application/json'); + $result = '{"error":"Error while request : ' . $mysqli->error . '"}'; + echo $result; + exit; + } + + /* Unify some clusters if nodes center are near */ + $pointsCount = 0; + if ($zoom < $GRID_MAX_ZOOM) { + foreach($resArray as $val) { + mergeNeighborhood($resArray, $val['grid']); + $pointsCount += $val['count']; + } + } + + $result='['; + $separator=''; + + /* Writing selected points */ + $sql='SELECT k, v + FROM tag + WHERE id = ? + AND k NOT IN ("lat", "lon")'; + + $stmt = $mysqli->prepare($sql); + $stmt->bind_param('d', $id); + $stmt->bind_result($k, $v); + + /* Writing grouped items or not */ + foreach($resArray as $val) { + if ($val['count'] > 0) { + $result = $result.$separator + .'{"lat":"'.($val['latitude'] / $val['count']).'"' + .',"lon":"'.($val['longitude'] / $val['count']).'"'; + + if ($val['count'] == 1) { + $id = $val['points'][0]->id; + $result = $result.',"id":"'.$id.'"'; + + $stmt->execute(); + + while($stmt->fetch()) { + $result = $result.',"'.htmlentities($k).'":"'.htmlentities($v, ENT_COMPAT, 'UTF-8').'"'; + } + } else { + $result = $result + .',"count":"'.$val['count'].'"' + .',"multi":"yes"' + .',"poly":['; + + if ($pointsCount < MAX_POINTS_FOR_QUICKHULL) { + $convexPoly = quickHull($val['points'], $val['count']); + $sepPoly = ''; + foreach($convexPoly as $point) { + $result = $result.$sepPoly.'{' + .'"lat":"'.$point->lat.'"' + .',"id":"'.$point->id.'"' + .',"lon":"'.$point->lon.'"}'; + $sepPoly=','; + } + } + $result=$result.']'; + } + + $result = $result.'}'; + $separator=','; + } + } + + $stmt->close(); + + $result = $result . ']'; + + $mysqli->close(); + + header('Content-type: application/json; Charset : utf-8'); + echo $result; +?> diff --git a/www/sunders/config.php.example b/www/sunders/config.php.example new file mode 100644 index 0000000..6df3a3f --- /dev/null +++ b/www/sunders/config.php.example @@ -0,0 +1,17 @@ + diff --git a/www/sunders/css/spinner.css b/www/sunders/css/spinner.css new file mode 100644 index 0000000..a687599 --- /dev/null +++ b/www/sunders/css/spinner.css @@ -0,0 +1,179 @@ +.spinner-bar { + display: flex; + justify-content: space-between; + width: 360px; +} + +@keyframes spinner1 { + 0% { opacity: 1; } + 5% { opacity: 1; } + 10% { opacity: 0.2; } + 90% { opacity: 0.2; } + 95% { opacity: 1; } + 100% { opacity: 1; } +} + +@keyframes spinner2 { + 0% { opacity: 0.2; } + 5% { opacity: 1; } + 10% { opacity: 1; } + 15% { opacity: 0.2; } + 85% { opacity: 0.2; } + 90% { opacity: 1; } + 95% { opacity: 1; } + 100% { opacity: 0.2; } +} + +@keyframes spinner3 { + 0% { opacity: 0.2; } + 5% { opacity: 0.2; } + 10% { opacity: 1; } + 15% { opacity: 1; } + 20% { opacity: 0.2; } + 80% { opacity: 0.2; } + 85% { opacity: 1; } + 90% { opacity: 1; } + 95% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner4 { + 0% { opacity: 0.2; } + 10% { opacity: 0.2; } + 15% { opacity: 1; } + 20% { opacity: 1; } + 25% { opacity: 0.2; } + 75% { opacity: 0.2; } + 80% { opacity: 1; } + 85% { opacity: 1; } + 90% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner5 { + 0% { opacity: 0.2; } + 15% { opacity: 0.2; } + 20% { opacity: 1; } + 25% { opacity: 1; } + 30% { opacity: 0.2; } + 70% { opacity: 0.2; } + 75% { opacity: 1; } + 80% { opacity: 1; } + 85% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner6 { + 0% { opacity: 0.2; } + 20% { opacity: 0.2; } + 25% { opacity: 1; } + 30% { opacity: 1; } + 35% { opacity: 0.2; } + 65% { opacity: 0.2; } + 70% { opacity: 1; } + 75% { opacity: 1; } + 80% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner7 { + 0% { opacity: 0.2; } + 25% { opacity: 0.2; } + 30% { opacity: 1; } + 35% { opacity: 1; } + 40% { opacity: 0.2; } + 60% { opacity: 0.2; } + 65% { opacity: 1; } + 70% { opacity: 1; } + 75% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner8 { + 0% { opacity: 0.2; } + 30% { opacity: 0.2; } + 35% { opacity: 1; } + 40% { opacity: 1; } + 45% { opacity: 0.2; } + 55% { opacity: 0.2; } + 60% { opacity: 1; } + 65% { opacity: 1; } + 70% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner9 { + 0% { opacity: 0.2; } + 35% { opacity: 0.2; } + 40% { opacity: 1; } + 45% { opacity: 1; } + 50% { opacity: 0.2; } + 55% { opacity: 1; } + 60% { opacity: 1; } + 65% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +@keyframes spinner10 { + 0% { opacity: 0.2; } + 40% { opacity: 0.2; } + 45% { opacity: 1; } + 55% { opacity: 1; } + 60% { opacity: 0.2; } + 100% { opacity: 0.2; } +} + +.spinner { + animation-duration: 2s; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +.spinner1 { + animation-name: spinner1; +} + +.spinner2 { + animation-name: spinner2; +} + +.spinner3 { + animation-name: spinner3; +} + +.spinner4 { + animation-name: spinner4; +} + +.spinner5 { + animation-name: spinner5; +} + +.spinner6 { + animation-name: spinner6; +} + +.spinner7 { + animation-name: spinner7; +} + +.spinner8 { + animation-name: spinner8; +} + +.spinner9 { + animation-name: spinner9; +} + +.spinner10 { + animation-name: spinner10; +} + +/* MOBILE SETTINGS */ +@media only screen and (max-width: 600px) { + .spinner-bar { + width: 100%; + padding-right: 20px; + padding-left: 20px; + } +} diff --git a/www/sunders/css/stats.css b/www/sunders/css/stats.css new file mode 100644 index 0000000..b317fe6 --- /dev/null +++ b/www/sunders/css/stats.css @@ -0,0 +1,588 @@ +/* ICON COLORS */ + +.icon0-color { color: #6c5d53; } /* gray */ +.icon1-color { color: #d40055; } /* red */ +.icon2-color { color: #0055d4; } /* blue */ +.icon3-color { color: #00d455; } /* green */ +.iconxxx-color { color: #a1a1b3; } /* text color */ + +/* ICON FILL COLORS */ + +.icon0-fill { fill: #6c5d53; } /* gray */ +.icon1-fill { fill: #d40055; } /* red */ +.icon2-fill { fill: #0055d4; } /* blue */ +.icon3-fill { fill: #00d455; } /* green */ +.iconxxx-fill { fill: #a1a1b3; } /* text color */ + +/* ICON STROKE COLORS */ + +.icon0-stroke { stroke: #6c5d53; } /* gray */ +.icon1-stroke { stroke: #d40055; } /* red */ +.icon2-stroke { stroke: #0055d4; } /* blue */ +.icon3-stroke { stroke: #00d455; } /* green */ +.iconxxx-stroke { stroke: #a1a1b3; } /* text color */ + +/* ICON BACKGROUND COLORS */ + +.icon0-bg { background: #6c5d53; } /* gray */ +.icon1-bg { background: #d40055; } /* red */ +.icon2-bg { background: #0055d4; } /* blue */ +.icon3-bg { background: #00d455; } /* green */ +.iconxxx-bg { background: #a1a1b3; } /* text color */ + +/* ICON BORDER TOP COLORS */ + +.icon0-bt { border-top: 1px solid #6c5d53; } /* gray */ +.icon1-bt { border-top: 1px solid #d40055; } /* red */ +.icon2-bt { border-top: 1px solid #0055d4; } /* blue */ +.icon3-bt { border-top: 1px solid #00d455; } /* green */ +.iconxxx-bt { border-top: 1px solid #a1a1b3; } /* text color */ + +/* ICON BORDER BOTTOM COLORS */ + +.icon0-bb { border-bottom: 1px solid #6c5d53; } /* gray */ +.icon1-bb { border-bottom: 1px solid #d40055; } /* red */ +.icon2-bb { border-bottom: 1px solid #0055d4; } /* blue */ +.icon3-bb { border-bottom: 1px solid #00d455; } /* green */ +.iconxxx-bb { border-bottom: 1px solid #a1a1b3; } /* text color */ + +/* CHART COLORS */ + +.color0-color { color: #6c5d53; } /* gray */ +.color1-color { color: rgb(117, 60,123); } +.color2-color { color: rgb(179,121,216); } +.color3-color { color: rgb(202, 45,197); } +.color4-color { color: rgb(170, 0,120); } +.color5-color { color: rgb(209, 15, 85); } +.color6-color { color: rgb(236, 75, 24); } +.color7-color { color: rgb(247,147, 30); } +.color8-color { color: rgb(252,226,108); } +.color9-color { color: rgb(198,242, 94); } +.color10-color { color: rgb(159,196, 55); } +.color11-color { color: rgb( 87,226, 76); } +.color12-color { color: rgb( 64,164, 66); } +.color13-color { color: rgb( 5,222,158); } +.color14-color { color: rgb(196,252,240); } +.color15-color { color: rgb(100,186,170); } +.color16-color { color: rgb( 45,166,162); } +.color17-color { color: rgb( 26,167,238); } +.color18-color { color: rgb( 93,102,232); } +.color19-color { color: rgb( 53, 60,152); } +.color20-color { color: rgb( 53, 11,122); } +.colorxxx-color { color: #a1a1b3; } /* text color */ + +/* CHART FILL COLORS */ + +.color0-fill { fill: #6c5d53; } /* gray */ +.color1-fill { fill: rgb(117, 60,123); } +.color2-fill { fill: rgb(179,121,216); } +.color3-fill { fill: rgb(202, 45,197); } +.color4-fill { fill: rgb(170, 0,120); } +.color5-fill { fill: rgb(209, 15, 85); } +.color6-fill { fill: rgb(236, 75, 24); } +.color7-fill { fill: rgb(247,147, 30); } +.color8-fill { fill: rgb(252,226,108); } +.color9-fill { fill: rgb(198,242, 94); } +.color10-fill { fill: rgb(159,196, 55); } +.color11-fill { fill: rgb( 87,226, 76); } +.color12-fill { fill: rgb( 64,164, 66); } +.color13-fill { fill: rgb( 5,222,158); } +.color14-fill { fill: rgb(196,252,240); } +.color15-fill { fill: rgb(100,186,170); } +.color16-fill { fill: rgb( 45,166,162); } +.color17-fill { fill: rgb( 26,167,238); } +.color18-fill { fill: rgb( 93,102,232); } +.color19-fill { fill: rgb( 53, 60,152); } +.color20-fill { fill: rgb( 53, 11,122); } +.colorxxx-fill { fill: #a1a1b3; } /* text color */ + +/* CHART STROKE COLORS */ + +.color0-stroke { stroke: #6c5d53; } /* gray */ +.color1-stroke { stroke: rgb(117, 60,123); } +.color2-stroke { stroke: rgb(179,121,216); } +.color3-stroke { stroke: rgb(202, 45,197); } +.color4-stroke { stroke: rgb(170, 0,120); } +.color5-stroke { stroke: rgb(209, 15, 85); } +.color6-stroke { stroke: rgb(236, 75, 24); } +.color7-stroke { stroke: rgb(247,147, 30); } +.color8-stroke { stroke: rgb(252,226,108); } +.color9-stroke { stroke: rgb(198,242, 94); } +.color10-stroke { stroke: rgb(159,196, 55); } +.color11-stroke { stroke: rgb( 87,226, 76); } +.color12-stroke { stroke: rgb( 64,164, 66); } +.color13-stroke { stroke: rgb( 5,222,158); } +.color14-stroke { stroke: rgb(196,252,240); } +.color15-stroke { stroke: rgb(100,186,170); } +.color16-stroke { stroke: rgb( 45,166,162); } +.color17-stroke { stroke: rgb( 26,167,238); } +.color18-stroke { stroke: rgb( 93,102,232); } +.color19-stroke { stroke: rgb( 53, 60,152); } +.color20-stroke { stroke: rgb( 53, 11,122); } +.colorxxx-stroke { stroke: #a1a1b3; } /* text color */ + +/* CHART BACKGROUD COLORS */ + +.color0-bg { background: #6c5d53; } /* gray */ +.color1-bg { background: rgb(117, 60,123); } +.color2-bg { background: rgb(179,121,216); } +.color3-bg { background: rgb(202, 45,197); } +.color4-bg { background: rgb(170, 0,120); } +.color5-bg { background: rgb(209, 15, 85); } +.color6-bg { background: rgb(236, 75, 24); } +.color7-bg { background: rgb(247,147, 30); } +.color8-bg { background: rgb(252,226,108); } +.color9-bg { background: rgb(198,242, 94); } +.color10-bg { background: rgb(159,196, 55); } +.color11-bg { background: rgb( 87,226, 76); } +.color12-bg { background: rgb( 64,164, 66); } +.color13-bg { background: rgb( 5,222,158); } +.color14-bg { background: rgb(196,252,240); } +.color15-bg { background: rgb(100,186,170); } +.color16-bg { background: rgb( 45,166,162); } +.color17-bg { background: rgb( 26,167,238); } +.color18-bg { background: rgb( 93,102,232); } +.color19-bg { background: rgb( 53, 60,152); } +.color20-bg { background: rgb( 53, 11,122); } +.colorxxx-bg { background: #a1a1b3; } /* text color */ + +/* CHART BORDER TOP COLORS */ + +.color0-bt { border-top: 1px solid #6c5d53; } /* gray */ +.color1-bt { border-top: 1px solid rgb(117, 60,123); } +.color2-bt { border-top: 1px solid rgb(179,121,216); } +.color3-bt { border-top: 1px solid rgb(202, 45,197); } +.color4-bt { border-top: 1px solid rgb(170, 0,120); } +.color5-bt { border-top: 1px solid rgb(209, 15, 85); } +.color6-bt { border-top: 1px solid rgb(236, 75, 24); } +.color7-bt { border-top: 1px solid rgb(247,147, 30); } +.color8-bt { border-top: 1px solid rgb(252,226,108); } +.color9-bt { border-top: 1px solid rgb(198,242, 94); } +.color10-bt { border-top: 1px solid rgb(159,196, 55); } +.color11-bt { border-top: 1px solid rgb( 87,226, 76); } +.color12-bt { border-top: 1px solid rgb( 64,164, 66); } +.color13-bt { border-top: 1px solid rgb( 5,222,158); } +.color14-bt { border-top: 1px solid rgb(196,252,240); } +.color15-bt { border-top: 1px solid rgb(100,186,170); } +.color16-bt { border-top: 1px solid rgb( 45,166,162); } +.color17-bt { border-top: 1px solid rgb( 26,167,238); } +.color18-bt { border-top: 1px solid rgb( 93,102,232); } +.color19-bt { border-top: 1px solid rgb( 53, 60,152); } +.color20-bt { border-top: 1px solid rgb( 53, 11,122); } +.colorxxx-bt { border-top: 1px solid #a1a1b3; } /* text color */ + +/* CHART BORDER BOTTOM COLORS */ + +.color0-bb { border-bottom: 1px solid #6c5d53; } /* gray */ +.color1-bb { border-bottom: 1px solid rgb(117, 60,123); } +.color2-bb { border-bottom: 1px solid rgb(179,121,216); } +.color3-bb { border-bottom: 1px solid rgb(202, 45,197); } +.color4-bb { border-bottom: 1px solid rgb(170, 0,120); } +.color5-bb { border-bottom: 1px solid rgb(209, 15, 85); } +.color6-bb { border-bottom: 1px solid rgb(236, 75, 24); } +.color7-bb { border-bottom: 1px solid rgb(247,147, 30); } +.color8-bb { border-bottom: 1px solid rgb(252,226,108); } +.color9-bb { border-bottom: 1px solid rgb(198,242, 94); } +.color10-bb { border-bottom: 1px solid rgb(159,196, 55); } +.color11-bb { border-bottom: 1px solid rgb( 87,226, 76); } +.color12-bb { border-bottom: 1px solid rgb( 64,164, 66); } +.color13-bb { border-bottom: 1px solid rgb( 5,222,158); } +.color14-bb { border-bottom: 1px solid rgb(196,252,240); } +.color15-bb { border-bottom: 1px solid rgb(100,186,170); } +.color16-bb { border-bottom: 1px solid rgb( 45,166,162); } +.color17-bb { border-bottom: 1px solid rgb( 26,167,238); } +.color18-bb { border-bottom: 1px solid rgb( 93,102,232); } +.color19-bb { border-bottom: 1px solid rgb( 53, 60,152); } +.color20-bb { border-bottom: 1px solid rgb( 53, 11,122); } +.colorxxx-bb { border-bottom: 1px solid #a1a1b3; } /* text color */ + +body { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + background: #222233; + color: #a1a1b3; + font-family: sans-serif; +} + +.light { + font-weight: 100; +} + +.bold { + font-weight: bold; +} + +.right { + text-align: right; +} + +text { + fill: #a1a1b3; +} + +a { + color: #0192d9; + text-decoration: none; +} + +a:hover { + color: #a1a1b3; +} + +a text { + fill: #0192d9; +} + +div.selected { + border-bottom: solid 2px #0192d9; +} + +div.unselected { + border-bottom: solid 2px #222233; +} + +.header, .footer { + text-align: center; + margin: 0 10%; +} + +.header:hover, .footer:hover { + background: rgba(161, 161, 179, 0.2); +} + +.header { + margin-top: 60px; +} + +.footer { + margin-bottom: 60px; +} + +.distance { + margin: 0 10% 3% 10%; +} + +.to-be-translated { + color: #d40055; +} +.to-be-translated a { + color: #ac39ac; + text-decoration: none; +} + +.to-be-translated a:hover { + color: #d40055; +} + +@media (orientation: landscape) { + .pie { + flex-direction: row; + } + + .pie .pie-chart { + width: 50%; + } + + .pie .pie-legend { + width: 40%; + padding-left: 10%; + } +} + +@media (orientation: portrait) { + .pie { + flex-direction: column; + } + + .pie > div { + width: 100%; + } + + .pie .pie-legend { + margin-top: 50px; + } +} + +/* TOTAL CHART */ + +.vb-total { + margin: 10%; +} + +.g-total > text { + text-anchor: middle; +} + +.g-total .number { + font-size: 20px; +} + +.g-total .text { + font-size: 3px; +} + +/* NAVI */ + +.navi-section-check { + display: none; +} + +.navi-section-check + .navi-section-toggle { + cursor: pointer; + display: block; +} + +/* checkbox = false --> hide navi section */ +.navi-section-check ~ .navi-section { + display: none; +} + +/* checkbox = true --> hide toggle button */ +.navi-section-check:checked + .navi-section-toggle { + display: none; +} + +/* checkbox = true --> show navi section */ +.navi-section-check:checked ~ .navi-section { + display: block; +} + +.navi-section-toggle { + margin: 0 10%; +} + +.navi-section-toggle:hover { + background: rgba(161, 161, 179, 0.2); +} + +.navi-section-toggle .navi-text { + fill: #0192d9; + font-size: 3px; +} + +.navi-row { + display: flex; + flex-direction: row; + margin: 0 10%; +} + +.navi-row.cats .navi-text { + font-size: 10px; +} + +.navi-row.years .navi-text, .navi-row.months .navi-text { + font-size: 17px; +} + +.navi-row.lines .navi-text { + font-size: 6.5px; +} + +.navi-element:hover { + background: rgba(161, 161, 179, 0.2); +} + +.navi-text { + text-anchor: middle; + font-weight: lighter; +} + +/* PIE CHART */ + +.pie { + display: flex; + align-items: flex-start; + margin: 10%; +} + +.pie-slice-link { + cursor: pointer; +} + +.pie-text { + text-anchor: middle; + font-size: 6px; +} + +.g-pie path { + stroke: #222233; +} + +.g-pie .donut-hole { + fill: #222233; +} + +.pie-legend-row { + margin-bottom: 10px; +} + +.pie-legend-row > div { + display: flex; + flex-direction: row; +} + +.square { + min-width: 20px; + min-height: 20px; +} + +.square-double { + min-width: 40px; + min-height: 20px; +} + +/* PIE CHART LEGEND */ + +.pie-legend-section-check { + display: none; +} + +/* checkbox = false + -- show section 'less' + -- show button 'more' + -- hide section 'more' + -- hide button 'less' */ +.pie-legend-section-check ~ .pie-legend-less { + display: block; +} + +.pie-legend-section-check ~ .pie-legend-section-toggle-more { + display: block; +} + +.pie-legend-section-check ~ .pie-legend-more { + display: none; +} + +.pie-legend-section-check ~ .pie-legend-section-toggle-less { + display: none; +} + +/* checkbox = true + -- show section 'more' + -- show button 'less' + -- hide section 'less' + -- hide button 'more' */ + +.pie-legend-section-check:checked ~ .pie-legend-more { + display: block; +} + +.pie-legend-section-check:checked ~ .pie-legend-section-toggle-less { + display: block; +} + +.pie-legend-section-check:checked ~ .pie-legend-less { + display: none; +} + +.pie-legend-section-check:checked ~ .pie-legend-section-toggle-more { + display: none; +} + +.pie-legend label { + cursor: pointer; + height: 40px; + background-repeat: no-repeat; + background-position: 40px; + background-color: transparent; +} + +.pie-legend-section-toggle-more { + background-image: url('../images/button_more_blue.png'); +} + +.pie-legend-section-toggle-more:hover { + background-image: url('../images/button_more_gray.png'); +} + +.pie-legend-section-toggle-less { + background-image: url('../images/button_less_blue.png'); +} + +.pie-legend-section-toggle-less:hover { + background-image: url('../images/button_less_gray.png'); +} + +/* TIME CHART */ + +.time { + display: flex; + flex-direction: column; + margin: 10%; +} + +.time-chart { + margin-bottom: 50px; +} + +.line-text { + text-anchor: middle; + font-weight: lighter; +} + +.g-time { + fill: none; + stroke-width: 4px; +} + +.day .g-time { + stroke-width: 10px; +} + +.h-grid, .v-grid { + stroke: #a1a1b3; +} + +.h-grid { + stroke-width: 2px; + stroke-opacity: 0.1; +} + +.v-grid { + stroke-dasharray:0.5%, 1%; + stroke-opacity: 0.2; +} + +.day .h-grid { + stroke-width: 5px; +} + +.day .v-grid { + stroke-width: 3px; +} + +.v-label { + text-anchor: middle; +} + +.time-legend table { + width: 100%; + border-collapse: collapse; +} + +.time-legend .title { + padding-bottom: 50px; + text-align: center; + font-size: 1.2rem; +} + +.time .row-distance { + font-size: 0.2rem; +} + +.time .row-title { + font-size: 0.8rem; +} + +tfoot td { + font-weight: bold; + text-align: center; + padding-top: 8px; +} + +/*.even-bg { + background: rgba(161, 161, 179, 0.1); +}*/ diff --git a/www/sunders/css/sunders.css b/www/sunders/css/sunders.css new file mode 100644 index 0000000..8011f9f --- /dev/null +++ b/www/sunders/css/sunders.css @@ -0,0 +1,766 @@ +/* COLORS +background: #222233 / 34, 34, 51 +text: #a1a1b3 / 161,161,179 +links: #0192d9 / 1,146,217 + +beige: #f1eee8 / 241,238,232 +lightblue: #0192d9 / 1,146,217 +darkblue: #050585 / 5, 5,133 +gray: #d9d0c9 / 217,208,201 +purple: #ac39ac / 172, 57,172 + +red icon: #d40055 / 212, 0, 85 +blue icon: #0055d4 / 0, 85,212 +green icon: #00d455 / 0,212, 85 +gray icon: #6c5d53 / 108, 93, 83 +yellow icon: #ffdd55 / 255,221, 85 */ + +html { + height: 100%; +} + +body { + height: 100%; + margin: 0; + padding: 0; + overflow-x: hidden; + font-family: sans-serif; +} + +#map { + width: 100%; + height: 100%; +} + +.bold { + font-weight: bold; +} + +.monospace { + font-family: monospace; + font-size: 1.5em; +} + +.text-small { + font-size: 0.8em; +} + +.text-medium { + font-size: 0.9em; +} + +.w-20 { + width: 20px; +} + +.w-45 { + width: 45px; + min-width: 45px; +} + +.w-120 { + width: 120px; + min-width: 120px; +} + +.w-240 { + width: 240px; +} + +.w-260 { + width: 260px; +} + +.w-315 { + width: 315px; +} + +.w-340 { + width: 340px; +} + +.pl-20 { + padding-left: 20px; +} + +.slider-toggle-input[type=checkbox] { + position: absolute; + opacity: 0; +} + +.slider-toggle-input[type=checkbox]:checked ~ .slider-overlay, +.slider-toggle-input[type=checkbox]:checked ~ .slider { + transform: translate3d(0, 0, 0); +} + +.slider-toggle-input[type=checkbox]:checked ~ .slider-toggle-button { + transform: translate3d(-490px, 0, 0) rotate(180deg); +} + +.slider-toggle-button { + position: absolute; + top: 10px; + right: 10px; + z-index: 250000; + cursor: pointer; + transform-origin: 20px 20px; + transition: transform .8s; +} + +.slider-toggle-bar { + display: none; +} + +.slider-overlay { + position: absolute; + right: 30px; + width: 470px; + z-index: 200000; + transform: translate3d(490px, 0, 0); + transition: all .8s; +} + +/*#news.slider-overlay { + display: flex; + align-items: flex-end; + top: 95px; + right: -255px; + color: #ffdd55; + font-weight: bold; +} + +#news.slider-overlay .text { + padding-left: 10px; +}*/ + +#anchorbar.slider-overlay { + top: 10px; +} + +#buttonbar.slider-overlay { + top: 52px; +} + +.topbar { + display: flex; + justify-content: space-around; + align-items: center; + position: absolute; + width: 470px; + height: 40px; + background: #0192d9; + color: #f1eee8; +} + +.topbar.anchorbar { + background-color: rgba(1, 146, 217, 0.9); +} + +.topbar.buttonbar { + background-color: rgba(1, 146, 217, 0.6); +} + +.mobile-bar-padding { + width: 0; +} + +.bar-button { + width: 80px; + height: 30px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + border: 1px solid transparent; + cursor: pointer; +} + +.bar-button:hover { + border: 1px solid #f1eee8; +} + +.bar-button.main { + width: 120px; +} + +.bar-button.search { + background-image: url('../images/button_search.png'); +} + +.bar-button.stats { + background-image: url('../images/button_stats.png'); +} + +.bar-button.permalink { + background-image: url('../images/button_permalink.png'); +} + +.search-group { + position: relative; +} + +#search-overlay { + display: none; + position: absolute; + top: 42px; + width: 430px; + padding: 30px 20px; + background-color: rgba(1, 146, 217, 0.9); + color: #f1eee8; +} + +.search-field-row { + display: flex; + justify-content: center; + align-items: center; +} + +#search-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #222233; + border: 1px solid #f1eee8; + border-radius: 0px; + border-right: none; + color: #f1eee8; + width: 320px; + height: 30px; + line-height: 30px; + padding: 0px 10px; + font-family: monospace; + font-weight: bold; +} + +#search-input:focus { + outline: 0; +} + +.search-button { + width: 34px; + height: 32px; + background-image: url('../images/button_search.png'); + background-repeat: no-repeat; + background-position: center; + background-color: #222233; + border: 1px solid #f1eee8; + border-left: 1px solid transparent; + color: #f1eee8; + cursor: pointer; +} + +.search-button:hover { + border-left: 1px solid #f1eee8; +} + +.search-button:focus { + outline: 0; +} + +#search-results-overlay { + display: none; + position: absolute; + top: 136px; + bottom: 0; + width: 470px; + overflow-y: auto; + background: #0192d9; + background-color: rgba(1, 146, 217, 0.9); + color: #f1eee8; +} + +#search-spinner-block { + display: none; + padding: 20px 0; +} + +#search-spinner { + display: flex; + justify-content: center; +} + +#search-results-list-block { + display: none; + padding: 20px 0; +} + +#search-results-list { + display: flex; + flex-direction: column; + align-items: center; +} + +.search-result { + width: 370px; + padding: 15px 20px; + border: 1px solid transparent; + border-bottom: 1px dotted #f1eee8; + line-height: 25px; + cursor: pointer; +} + +.search-result:first-child { + border-top: 1px dotted #f1eee8; +} + +.search-result:hover { + background-color: #222233; +} + +.search-more { + width: 100px; + height: 30px; + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + border: 1px solid transparent; + cursor: pointer; +} + +.search-more:hover { + border: 1px solid #f1eee8; +} + +.search-more.search-previous { + background-image: url('../images/button_previous.png'); + margin-bottom: 10px; +} + +.search-more.search-next { + background-image: url('../images/button_next.png'); + margin-top: 10px; +} + +.close { + position: absolute; + top: 10px; + right: 10px; + width: 20px; + height: 20px; + background-image: url('../images/close.png'); + background-repeat: no-repeat; + background-position: center; + background-color: transparent; + border: 1px solid transparent; + cursor: pointer; +} + +.close:hover { + border: 1px solid #f1eee8; +} + +.language-toggle-input { + display: none; +} + +.language-toggle-input[type=checkbox]:checked ~ .language-toggle-button #language li ul { + display: block; +} + +#language { + background-image: url('../images/button_language.png'); + list-style:none; + padding: 0; + z-index: 300000; +} + +#language li { + position: relative; + text-align: center; +} + +#language ul { + display: none; + list-style: none; + position: absolute; + padding: 0; +} + +#language ul a { + color: #f1eee8; + font-family: monospace; + font-size: 1em; + text-decoration: none; +} + +#language ul li { + width: 80px; + height: 30px; + line-height: 30px; + margin-top: 2px; + background-color: rgba(1, 146, 217, 0.9); + border: 1px solid #f1eee8; +} + +#language ul a:first-child li { + margin-top: 18px; +} + +#language ul li:hover { + background-color: rgba(1, 146, 217, 0.6); +} + +.language-current { + font-weight: bold; +} + +.slider { + display: flex; + flex-direction: column; + position: absolute; + top: 0px; + right: 0px; + width: 500px; + height: 100%; + z-index: 100000; + background: #f1eee8; + background-color: rgba(34, 34, 51, 0.95); + color: #a1a1b3; + overflow-y: auto; + transform: translate3d(490px, 0, 0); + transition: all .8s; +} + +.slider a { + color: #0192d9; + text-decoration: none; +} + +.slider a:hover { + color: #a1a1b3; +} + +.slider-item { + box-sizing: border-box; + flex-shrink: 0; + padding-left: 40px; + padding-right: 40px; +} + +.slider-logo { + padding: 140px 0 20px 0; +} + +.slider-logo img { + display: block; + margin: 0 auto; +} + +.slider-title { + padding-top: 120px; + padding-bottom: 20px; + padding-left: 40px; +} + +.slider-subtitle { + text-align: center; +} + +.slider-translation { + text-align: center; + font-style: italic; + padding: 20px 40px 0 40px; +} + +.slider-list-title { + padding-top: 40px; + padding-bottom: 20px; + padding-left: 20px; + font-weight: bold; +} + +.text-small .slider-list-title { + font-size: 1.25em; +} + +.slider-list-section { + padding-left: 20px; + font-weight: bold; + font-size: 0.9em; +} + +.slider-list-section-toggle { + display: none; +} + +.slider-list-section-toggle + .slider-list-section { + cursor: pointer; + display: block; + font-weight: bold; + margin-top: 10px; +} + +.slider-list-section-toggle + .slider-list-section + div { + display: none; +} + +.slider-list-section-toggle:checked + .slider-list-section + div { + display: block; +} + +.slider-list-section-toggle + .slider-list-section:before { + content: "\002B\2000"; /*plus icon + whitespace*/ + display: block; + float: left; +} + +.slider-list-section-toggle:checked + .slider-list-section:before { + content: "\2212\2000"; /*minus icon + whitespace*/ +} + +.slider-list-entry { + display: flex; + flex-direction: row; + align-items: flex-start; + padding-top: 10px; + padding-left: 20px; +} + +.example-boxes { + display: flex; + flex-direction: row; + width: 100%; +} + +.example-boxes .example-box { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; +} + +.example-boxes .example-box .example-box-image { + border: 1px solid #a1a1b3; + margin: 5px; + padding: 5px; +} + +.example-boxes .example-box .example-box-description { + margin: 10px; +} + +.slider-footer { + padding-top: 40px; + padding-bottom: 40px; + text-align: center; +} + +.slider-footer-title { + font-weight: bold; + padding-bottom: 10px; +} + +.slider-credit-type { + padding-top: 6px; +} + +.slider-onion-link { + padding-top: 6px; + font-size: 1.5em; +} + +/* MOBILE SETTINGS */ +@media only screen and (max-width: 600px) { + .slider, + .slider-item, + .slider-list-entry .fieldofview, + .slider-overlay, + .slider-toggle-bar, + .topbar, + .w-240, + .w-260, + .w-315, + .w-340 { + width: 100%; + } + + .slider-toggle-button { + display: none; + } + + .slider-toggle-bar { + display: inherit; + } + + .slider-overlay { + right: 0; + } + + .slider-toggle-bar { + position: absolute; + bottom: 16px; + z-index: 250000; + cursor: pointer; + background-color: rgba(1, 146, 217, 0.6); + line-height: 40px; + text-align: center; + font-weight: bold; + color: #f1eee8; + } + + .slider-toggle-bar.toggle-false { + display: none; + } + + .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-overlay { + width: 470px; + right: 20px; + } + + .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-toggle-bar.toggle-false { + display: inherit; + } + + .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider-toggle-bar.toggle-true { + display: none; + } + + .topbar { + position: inherit; + } + + .slider { + transform: translate3d(500px, 0, 0); + } + + .slider-toggle-input[type=checkbox]:not(:checked) ~ .slider { + right: 0px; + width: 500px; + } + + .slider-item, .slider-translation { + padding-left: 20px; + padding-right: 20px; + } + + .slider-list-entry, + .slider-list-section, + .slider-list-title { + padding-left: 10px; + } + + .example-boxes { + flex-direction: column; + } + + .example-boxes .example-box { + flex-direction: row; + } + + .example-boxes .example-box .example-box-image { + margin-left: 10px; + } + + .slider-footer { + padding-bottom: 80px; + } + + #search-overlay { + width: 100%; + padding-right: 0; + padding-left: 0; + } + + .search-field-row { + padding-right: 40px; + padding-left: 40px; + } + + #search-results-overlay { + width: 100%; + } + + .search-result { + width: 100%; + padding-right: 0; + padding-left: 0; + } + + .search-result div { + padding-right: 20px; + padding-left: 20px; + } +} + +/* Label with number of composite cameras. */ +.composite-cameras-label { + background-color: rgba(1, 146, 217, 0.66); + background-clip: padding-box; + color: #fff; + border: 4px solid rgba(0,0,0,0.25); + border-radius: 4px; + font-weight: bold; + padding: 3px 6px; + box-shadow: none; +} + +.composite-cameras-label.leaflet-tooltip-right::before { + left: -4px; + border-right-color: rgba(0,0,0,0.25); +} + +.composite-cameras-label.leaflet-tooltip-left::before { + right: -4px; + border-left-color: rgba(0,0,0,0.25); +} + +.cover { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + background: #222233; + color: #a1a1b3; +} + +.to-be-translated { + color: #d40055; +} +.to-be-translated a { + color: #ac39ac; + text-decoration: none; +} + +.to-be-translated a:hover { + color: #d40055; +} + +/* overwrite leaflet styles */ + +.leaflet-popup-content-wrapper { + background: rgba(34, 34, 51, 0.95); + color: #a1a1b3; + font-size: 0.9rem; + border-radius: 5px; +} + +.leaflet-popup-content-wrapper a { + color: #0192d9; + text-decoration: none; +} + +.leaflet-popup-content-wrapper a:hover { + color: #a1a1b3; +} + +.leaflet-popup-tip { + background: rgba(34, 34, 51, 0.95); + color: #a1a1b3; +} + +.leaflet-bar a { + background: rgba(34, 34, 51, 0.95); + color: #a1a1b3; +} + +.leaflet-bar a:hover { + background: rgba(34, 34, 51, 0.8); + color: #a1a1b3; +} + +.leaflet-container a.leaflet-popup-close-button { + top: 4px; + right: 4px; +} + diff --git a/www/sunders/de/camera.php b/www/sunders/de/camera.php new file mode 100644 index 0000000..d85146c --- /dev/null +++ b/www/sunders/de/camera.php @@ -0,0 +1,3 @@ + diff --git a/www/sunders/de/images b/www/sunders/de/images new file mode 120000 index 0000000..e4c5bd0 --- /dev/null +++ b/www/sunders/de/images @@ -0,0 +1 @@ +../images/ \ No newline at end of file diff --git a/www/sunders/de/index.php b/www/sunders/de/index.php new file mode 100644 index 0000000..624af27 --- /dev/null +++ b/www/sunders/de/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/de/stats/index.php b/www/sunders/de/stats/index.php new file mode 100644 index 0000000..2ed4131 --- /dev/null +++ b/www/sunders/de/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/decode-json.php b/www/sunders/decode-json.php new file mode 100644 index 0000000..2786de7 --- /dev/null +++ b/www/sunders/decode-json.php @@ -0,0 +1,10 @@ + diff --git a/www/sunders/en/camera.php b/www/sunders/en/camera.php new file mode 100644 index 0000000..d85146c --- /dev/null +++ b/www/sunders/en/camera.php @@ -0,0 +1,3 @@ + diff --git a/www/sunders/en/images b/www/sunders/en/images new file mode 120000 index 0000000..e4c5bd0 --- /dev/null +++ b/www/sunders/en/images @@ -0,0 +1 @@ +../images/ \ No newline at end of file diff --git a/www/sunders/en/index.php b/www/sunders/en/index.php new file mode 100644 index 0000000..1471328 --- /dev/null +++ b/www/sunders/en/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/en/stats/index.php b/www/sunders/en/stats/index.php new file mode 100644 index 0000000..9276942 --- /dev/null +++ b/www/sunders/en/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/es/camera.php b/www/sunders/es/camera.php new file mode 100644 index 0000000..d85146c --- /dev/null +++ b/www/sunders/es/camera.php @@ -0,0 +1,3 @@ + diff --git a/www/sunders/es/images b/www/sunders/es/images new file mode 120000 index 0000000..e4c5bd0 --- /dev/null +++ b/www/sunders/es/images @@ -0,0 +1 @@ +../images/ \ No newline at end of file diff --git a/www/sunders/es/index.php b/www/sunders/es/index.php new file mode 100644 index 0000000..20ea3d6 --- /dev/null +++ b/www/sunders/es/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/es/stats/index.php b/www/sunders/es/stats/index.php new file mode 100644 index 0000000..2ce49c5 --- /dev/null +++ b/www/sunders/es/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/favicon.ico b/www/sunders/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6a84cc49c1cb073b4d9bd1c1cf73e6f27d6f8111 GIT binary patch literal 1150 zcmZQzU}Ruq5D);-3Je)63=Con3=A3!3=9Gc3=9ek5OIcK3jY89&wz|CO=A$eIgz30 z)+ENuHzzTEzB!5U`OQg;S8h&br~t_!t3_sC>t~R>If-fZjY*7OLHOom#&tI)G0gzs zTay?!-kikv9V|YPY3kLf3=+tC@6Kf4zd4EVB3R92hWvXI7{qT)V(Pd#nehY&gV-QF zHzqUWgVfxd#CQp$2V}`F7HzzVwg6sf=GZbG1i}f&wpsOG1+3Np) u1_l`ZW6!|wfSrNij4=bl3`qtC10DtjBOV5Z>6{DH=O_6KY%d`eauCnfqaFfdnmx;TbJ9DX~^KjTiQ zz;XM}WwUb^_a0Z`kh+{w9k5ztR`5chld3_j8W|o-BW~PMn>}fX$%+71f$W?KDdI`F zqMTg|MGt0)ux@;?@c63S3wK2V1HBakFRk#L{CDsAcHZ6lb04L7RvQ=3G5`E`-_OtY zc-EYp_2>RkmC&>w&-%9;%5SlFDJWU4$A9eny*J9Ml#;#f*wzN?C9L#5t5(mEtiEC0 zp#x$9>8bB#Oq#tv;wo#7fv|Zxv%_iLv`U}2y;c(Eb;@5%>$j>tGADKq=Mx6qXKxlQ z-Q*s2reUtyBfa$g(>HeatQCLd`r7V{G<(046vLva<}&#|Z%coBS=gj1zTtZP-Gqxb z123$baQ=D%W5)6ghrO=t4`Z5fPR8u!>Qs&MO-cv)CcNt@lAagvU3RmoYQe?&zV?&6 zei~+%S?+ye+ZpU#{K#HcezW<}v{^iUBBi&cKIi({uvGmP%WiJ9W&0FvP6$Z4&2(eg z|6~2@Ce+qwVk?n!b+?A%879u}8tRDYWoHA=qc*^-ne0@Kz ziJpoJR(RX}wmnw-b~gg9Qxq^(tp>shkdQ2)E0-t^*4%Uf*2 zr^Q)?Pug(f*x$0;XN(Wx792}amo<>yv{G$G&(s79^ROe2BMN@x7Dz~>L6O$yHjSoE0y7&LdqWp)Q(d)8ARz!#VT`2Q=j@9G+ zr@xe}D4cb7>Y0m9BC^rTQuf*2w-)VA*%vDty^QN`k!rEXnw>XZObaMKoZninFzM7X zR@sGVHTNIS3oQB^${;<DA>e*(}FSPw3~q9-(qR&;0ZA!%q_AE8ZOV6mK}gJGGy) z%4vaRv*UZyMa>`IznMG#+UM(knh%7jzdK)VUc+2-dTnTY=K0uSvoC*b&n diff --git a/www/sunders/fr/images b/www/sunders/fr/images new file mode 120000 index 0000000..e4c5bd0 --- /dev/null +++ b/www/sunders/fr/images @@ -0,0 +1 @@ +../images/ \ No newline at end of file diff --git a/www/sunders/fr/index.php b/www/sunders/fr/index.php new file mode 100644 index 0000000..2946f9f --- /dev/null +++ b/www/sunders/fr/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/fr/stats/index.php b/www/sunders/fr/stats/index.php new file mode 100644 index 0000000..a4028c4 --- /dev/null +++ b/www/sunders/fr/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/i18n.php b/www/sunders/i18n.php new file mode 100644 index 0000000..9091e79 --- /dev/null +++ b/www/sunders/i18n.php @@ -0,0 +1,80 @@ +{'texts'}->{$key}; + + if (empty($text)) { + $i18n = $i18nDefault; + $text = $i18n->{'texts'}->{$key}; + + if (!empty($text) && substr($key, -4) != '-alt') { + $openTagToBeTranslated = ''; + $closeTagToBeTranslated = ''; + } + } + + $textLinkArray = explode ('@@' , $text); // A @@ at the beginning/end of $text leads to an empty string as the first/last element of $textLinkArray. + $isTextWithoutLinks = count($textLinkArray) == 1; + $translatedText = ''; + + if ($isTextWithoutLinks) { + $translatedText = $translatedText.htmlentities($text); + } else { + foreach ($textLinkArray as $phrase) { + if (substr($phrase, 0, 2) == 'LT') { // link with a text to be translated + $index = (int)substr($phrase, 2, 2); + $translatedText = $translatedText.''.htmlentities($i18n->{'links'}->{$key}[$index]).''.htmlentities(substr($phrase, 4)); + } elseif (substr($phrase, 0, 2) == 'LF') { // link with a fix text + $index = (int)substr($phrase, 2, 2); + $translatedText = $translatedText.''.htmlentities($linksWithFixedText[1][$index]).''.htmlentities(substr($phrase, 4)); + } elseif (substr($phrase, 0, 2) == 'TF') { // fix text + $index = (int)substr($phrase, 2, 2); + $translatedText = $translatedText.htmlentities($fixedTexts[$index].substr($phrase, 4)); + } else { + $translatedText = $translatedText.htmlentities($phrase); + } + } + } + + return $openTagToBeTranslated.$translatedText.$closeTagToBeTranslated; + } +?> diff --git a/www/sunders/i18n/common/de.json b/www/sunders/i18n/common/de.json new file mode 100644 index 0000000..7642776 --- /dev/null +++ b/www/sunders/i18n/common/de.json @@ -0,0 +1,33 @@ +{ + "texts": { + "what-alt": "um was es hier geht", + "how-alt": "wie du mitmachen kannst", + "where-alt": "wo es mehr infos gibt", + "search-button-alt": "in OpenStreetMap suchen", + "permalink-button-alt": "Permalink mit Koordinaten erzeugen", + "stats-button-alt": "Upload-Statistiken", + "language-button-alt": "Sprache ändern", + "subtitle": "(Überwachung unter Überwachung)", + "translation": "", + "what-show": "Surveillance under Surveillance (Überwachung unter Überwachung) zeigt dir Kameras und Wachleute, die dich überwachen — fast überall. Du kannst ihren Standort sehen und, falls die Informationen verfügbar sind, welcher Art sie sind, welches Gebiet sie überwachen oder weitere interessante Fakten.", + "what-icons": "Unterschiedliche Symbole und Farben geben dir einen schnellen Überblick über die erfassten Überwachungseinträge. Klicke auf ein Symbol auf der Karte, um die verfügbaren Informationen zum zugehörigen Eintrag anzuzeigen.", + "how-osm": "Surveillance under Surveillance (Überwachung unter Überwachung) verwendet und zeigt Daten von OpenStreetMap-Mitwirkenden, die auf der regulären @@LF00-Seite nicht angezeigt werden. @@LT00 oder @@LT01, wenn du selbst neue Kameras oder Wachleute eintragen oder bestehende Einträge überarbeiten möchtest.", + "how-update": "Unsere Datenbank wird stündlich aktualisiert. Deshalb kann es einige Zeit dauern bis deine OSM-Einträge auf der Surveillance under Surveillance Karte angezeigt werden.", + "how-keyval": "Dies sind die gebräuchlichsten Schlüssel/Wert-Kombinationen, um einen Überwachungseintrag bei OpenStreetMap zu beschreiben:", + "how-fork": "Neben der Mitarbeit bei OpenStreetMap, kannst du dieses Projekt auch bei @@LF00 forken.", + "where-sites": "Besuch die folgenden Seiten zu überwachungsrelevanten Themen:", + "footer-pgp": "Hier ist unser @@LT00 — benutz ihn!", + "footer-note": "Bitte beachte, dass nur verschlüsselte Emails beantwortet werden.", + "footer-your-key": "Teil uns mit, wo wir deinen PGP-Schlüssel finden.", + "footer-help": "Hilfe zum Thema Verschlüsselung gibt es @@LT00.", + "at": "ät", + "dot": "punkt", + "new-stats": "neue Statistiken!", + "gdpr": "BEIM BESUCH DIESER SEITE WERDEN KEINE PERSÖNLICHEN DATEN GESAMMELT!" + }, + "links": { + "how-osm": [ "Verwende dein existierendes OSM-Konto", "lege ein neues Konto an" ], + "footer-pgp": [ "PGP-Schlüssel" ], + "footer-help": [ "hier" ] + } +} diff --git a/www/sunders/i18n/common/en.json b/www/sunders/i18n/common/en.json new file mode 100644 index 0000000..77116f5 --- /dev/null +++ b/www/sunders/i18n/common/en.json @@ -0,0 +1,32 @@ +{ + "texts": { + "what-alt": "what this is about", + "how-alt": "how to participate", + "where-alt": "where to get more info", + "search-button-alt": "search OpenStreetMap", + "permalink-button-alt": "create permalink with coordinates", + "stats-button-alt": "upload statistics", + "language-button-alt": "change language", + "subtitle": "", + "translation": "", + "what-show": "Surveillance under Surveillance shows you cameras and guards — watching you — almost everywhere. You can see where they are located and, if the information is available, what type they are, the area they observe, or other interesting facts.", + "what-icons": "Different icons and colors give you a quick overview about the indexed surveillance entries. Click on those icons on the map to get the available information.", + "how-osm": "Surveillance under Surveillance uses data from OpenStreetMap contributors that is not visualized on the regular @@LF00 site. If you like to add new cameras or guards or if you like to revise existing entries @@LT00 or @@LT01.", + "how-update": "Our database is updated once an hour. So it might take a while until your OSM entries are visible on the Surveillance under Surveillance map.", + "how-keyval": "These are the most common key/value combinations to describe a surveillance node at OpenStreetMap:", + "how-fork": "Besides contributing to OpenStreetMap feel free to fork this project on @@LF00.", + "where-sites": "Visit the following sites about surveillance related topics:", + "footer-pgp": "Here is our @@LT00 — use it!", + "footer-note": "Please note that only encrypted emails will be answered.", + "footer-your-key": "Let us know where we can find your PGP key.", + "footer-help": "Get help for @@LF00 / @@LF01 / @@LF02.", + "at": "at", + "dot": "dot", + "new-stats": "new statistics!", + "gdpr": "NO PERSONAL DATA IS COLLECTED WHEN YOU VISIT THIS SITE!" + }, + "links": { + "how-osm": [ "use your existing OSM account", "create a new one" ], + "footer-pgp": [ "PGP key" ] + } +} diff --git a/www/sunders/i18n/common/es.json b/www/sunders/i18n/common/es.json new file mode 100644 index 0000000..9eb30f2 --- /dev/null +++ b/www/sunders/i18n/common/es.json @@ -0,0 +1,32 @@ +{ + "texts": { + "what-alt": "de que se trata", + "how-alt": "como participar", + "where-alt": "donde puedo obtener mas información", + "search-button-alt": "buscar en OpenStreetMap", + "permalink-button-alt": "crearte un enlace permanente", + "stats-button-alt": "estadística de subir", + "language-button-alt": "cambiar de idioma", + "subtitle": "(Vigilando a la Vigilancia)", + "translation": "", + "what-show": "Surveillance under Surveillance (vigilando a la vigilancia) muestra las cámaras y los guardas — que te vigilan — en casi todos lados. Podes ver su ubicación y, si la información esta disponible, de que tipo son, el área de cobertura u otra información relevante.", + "what-icons": "Diferentes iconos y colores dan una idea sobre las entradas cargadas. Hace clic sobre esos iconos en el mapa para ver la información disponible.", + "how-osm": "Surveillance under Surveillance (vigilando a la vigilancia) usa datos de OpenStreetMap, éstos no están visibles por defecto en el mapa regular del sitio de @@LF00. Si querés agregar nuevas cámaras o guardias, o si deseas revisar las entradas existentes podes @@LT01 en OSM o @@LT00.", + "how-update": "Nuestra base de datos se actualiza cada una hora. Así que puede tomar un rato hasta que los cambios en OSM se vean reflejados en este mapa.", + "how-keyval": "Estos son las propiedades mas comunes para describir un nodo de vigilancia en OpenStreetMap:", + "how-fork": "Aparte de contribuir a Openstreetmap te invitamos a modificar este proyecto en @@LF00.", + "where-sites": "Podés visitar estos sitios que tratan sobre temas relacionas a la vigilancia:", + "footer-pgp": "Esta es nuestra @@LT00 — Usala!", + "footer-note": "Tené en cuenta que solo los correos cifrados serán respondidos.", + "footer-your-key": "Envianos o decinos donde podemos conseguir tu llave.", + "footer-help": "Si necesitas ayuda con PGP, @@LF00 / @@LF01 / @@LF02.", + "at": "en", + "dot": "punto", + "new-stats": "¡nuevo!", + "gdpr": "¡NO SE RECOGEN DATOS PERSONALES CUANDO USTED VISITA ESTE SITIO!" + }, + "links": { + "how-osm": [ "usar una que ya tengas", "crearte una cuenta" ], + "footer-pgp": [ "llave PGP" ] + } +} diff --git a/www/sunders/i18n/common/fr.json b/www/sunders/i18n/common/fr.json new file mode 100644 index 0000000..02a1635 --- /dev/null +++ b/www/sunders/i18n/common/fr.json @@ -0,0 +1,32 @@ +{ + "texts": { + "what-alt": "utilisation", + "how-alt": "comment participer", + "where-alt": "où s'informer", + "search-button-alt": "chercher sur OpenStreetMap", + "permalink-button-alt": "créer un lien permanent à ces coordonnées", + "stats-button-alt": "statistiques sur les données", + "language-button-alt": "changer langue", + "subtitle": "(Surveillance sous Surveillance)", + "translation": "", + "what-show": "Surveillance under Surveillance vous montre les caméras et gardes — qui vous regardent — presque partout. Vous pouvez voir leurs emplacements et, si l'information est connue, de quels types elles sont, la zone surveillée, ou autres faits intéressants.", + "what-icons": "Différentes icônes et couleurs vous donnent un aperçu des surveillances indexées. Cliquez sur ces icônes sur la carte pour avoir toutes les informations possibles.", + "how-osm": "Surveillance under Surveillance utilise les données des contributeurs OpenStreetMap qui ne sont pas visibles sur le site @@LF00. Si vous souhaitez ajouter de nouvelles caméras/gardes ou si vous voulez modifier les données existantes, @@LT00 ou @@LT01.", + "how-update": "Notre base de donnée est mise à jour toutes les heures. Il se peut donc qu'il faille un certain temps avant que vos modifications sur OSM soient visible sur la carte Surveillance under Surveillance.", + "how-keyval": "Voici les étiquettes clé/valeur les plus courantes dans OpenStreetMap pour qualifier les noeuds de type “surveillance”:", + "how-fork": "En plus de contribuer à OpenStreetMap, n'hésitez pas à forker ce projet sur @@LF00.", + "where-sites": "Visitez les sites suivants qui traitent de sujets liés à la surveillance :", + "footer-pgp": "Voici notre @@LT00 — utilisez-là !", + "footer-note": "Notez que seuls les mails chiffrés recevront une réponse.", + "footer-your-key": "Dites-nous où nous pouvons trouver votre clef PGP.", + "footer-help": "Trouvez de l'aide pour @@LF00 / @@LF01 / @@LF02.", + "at": "at", + "dot": "point", + "new-stats": "nouveau!", + "gdpr": "AUCUNE DONNÉE PERSONNELLE N'EST COLLECTÉE LORS DE VOTRE VISITE SUR CE SITE!" + }, + "links": { + "how-osm": [ "utilisez votre compte OSM", "créez-en un" ], + "footer-pgp": [ "clef PGP" ] + } +} diff --git a/www/sunders/i18n/common/it.json b/www/sunders/i18n/common/it.json new file mode 100644 index 0000000..99430d2 --- /dev/null +++ b/www/sunders/i18n/common/it.json @@ -0,0 +1,32 @@ +{ + "texts": { + "what-alt": "di che cosa si tratta", + "how-alt": "come partecipare", + "where-alt": "dove trovo altre info", + "search-button-alt": "cerca su OpenStreetMap", + "permalink-button-alt": "crea permalink con le coordinate", + "stats-button-alt": "statistiche dell'upload ", + "language-button-alt": "cambia lingua", + "subtitle": "(Sorveglianza sotto Sorveglianza)", + "translation": "", + "what-show": "Surveillance under Surveillance (Sorveglianza sotto Sorveglianza) è un sito che ti mostra telecamere e guardie — che ti osservano — quasi ovunque. Puoi vedere dove si trovano e, se l'informazione è disponibile, di che tipologia,l'area che osservano o altri fatti interessanti.", + "what-icons": "Icone e colori diversi ti danno una rapida panoramica sui differenti tipi di sorveglianza. Clicca su queste icone sulla mappa per ottenere le informazioni disponibili.", + "how-osm": "Surveillance under Surveillance utilizza i dati di OpenStreetMap che non sono visualizzati sul normale @@LF00 sito. Se vuoi aggiungere altre telecamere o guardie o se vuoi rivedere le voci esistenti usa il tuo account entries @@LT00 o creane uno nuovo @@LT01.", + "how-update": "Il nostro database viene aggiornato una volta ogni ora. Quindi potrebbe essere necessario un po' di tempo prima che le tue segnalazioni OSM siano visibili sulla mappa di Surveillance under Surveillance.", + "how-keyval": "These are the most common key/value combinations to describe a surveillance node at OpenStreetMap:", + "how-fork": "Oltre a contribuire a OpenStreetMap sentiti libero di fare un fork di questo progetto su @@LF00.", + "where-sites": "Visita i seguenti siti su argomenti relativi alla sorveglianz:", + "footer-pgp": "Qui la nostra @@LT00 — usala!", + "footer-note": "Si risponde solo a email crittate.", + "footer-your-key": "Facci sapere dove possiamo trovare la tua chiave PGP.", + "footer-help": "Ottieni aiuto per @@LF00 / @@LF01 / @@LF02.", + "at": "at", + "dot": "dot", + "new-stats": "new statistics!", + "gdpr": "NESSUN DATO PERSONALE VIENE RACCOLTO QUANDO VISITI QUESTO SITO!" + }, + "links": { + "how-osm": [ "usa il tuo account OSM", "creane uno nuovo" ], + "footer-pgp": [ "PGP key" ] + } +} diff --git a/www/sunders/i18n/common/ru.json b/www/sunders/i18n/common/ru.json new file mode 100644 index 0000000..9d89390 --- /dev/null +++ b/www/sunders/i18n/common/ru.json @@ -0,0 +1,32 @@ +{ + "texts": { + "what-alt": "", + "how-alt": "", + "where-alt": "", + "search-button-alt": "", + "permalink-button-alt": "", + "stats-button-alt": "", + "language-button-alt": "", + "subtitle": "", + "translation": "This site has not been translated yet. You can help to offer this site in RUSSIAN by sending us your translation via email. Please scroll down for our address. Thanks a lot!", + "what-show": "", + "what-icons": "", + "how-osm": "", + "how-update": "", + "how-keyval": "", + "how-fork": "", + "where-sites": "", + "footer-pgp": "", + "footer-note": "", + "footer-your-key": "", + "footer-help": "", + "at": "", + "dot": "", + "new-stats": "новые!", + "gdpr": "" + }, + "links": { + "how-osm": [ "" ], + "footer-pgp": [ "" ] + } +} diff --git a/www/sunders/i18n/countries/de.json b/www/sunders/i18n/countries/de.json new file mode 100644 index 0000000..b8e8ea5 --- /dev/null +++ b/www/sunders/i18n/countries/de.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "noch nicht lokalisiert", + "--": "nicht lokalisierbar", + + "AA": "", + "AB": "", + "AC": "Ascension", + "AD": "Andorra", + "AE": "Vereinigte Arabische Emirate", + "AF": "Afghanistan", + "AG": "Antigua und Barbuda", + "AH": "", + "AI": "Anguilla", + "AJ": "", + "AK": "", + "AL": "Albanien", + "AM": "Armenien", + "AN": "Niederländische Antillen", + "AO": "Angola", + "AP": "", + "AQ": "Antarktika", + "AR": "Argentinien", + "AS": "Amerikanisch-Samoa", + "AT": "Österreich", + "AU": "Australien", + "AV": "", + "AW": "Aruba", + "AX": "Åland", + "AY": "", + "AZ": "Aserbaidschan", + + "BA": "Bosnien und Herzegowina", + "BB": "Barbados", + "BC": "", + "BD": "Bangladesch", + "BE": "Belgien", + "BF": "Burkina Faso", + "BG": "Bulgarien", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BK": "", + "BL": "Saint-Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivien", + "BP": "", + "BQ": "Karibische Niederlande", + "BR": "Brasilien", + "BS": "Bahamas", + "BT": "Bhutan", + "BU": "Birma (Myanmar)", + "BV": "Bouvetinsel", + "BW": "Botswana", + "BX": "", + "BY": "Weißrussland", + "BZ": "Belize", + + "CA": "Kanada", + "CB": "", + "CC": "Kokosinseln", + "CD": "Demokratische Republik Kongo", + "CE": "", + "CF": "Zentralafrikanische Republik", + "CG": "Republik Kongo", + "CH": "Schweiz", + "CI": "Elfenbeinküste", + "CJ": "", + "CK": "Cookinseln", + "CL": "Chile", + "CM": "Kamerun", + "CN": "Volksrepublik China", + "CO": "Kolumbien", + "CP": "Clipperton-Insel", + "CQ": "", + "CR": "Costa Rica", + "CS": "Tschechoslowakei (Serbien und Montenegro)", + "CT": "", + "CU": "Kuba", + "CV": "Kap Verde", + "CW": "Curaçao", + "CX": "Weihnachtsinsel", + "CY": "Zypern", + "CZ": "Tschechische Republik", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Deutschland", + "DF": "", + "DG": "Diego Garcia", + "DH": "", + "DI": "", + "DJ": "Dschibuti", + "DK": "Dänemark", + "DL": "", + "DM": "Dominica", + "DN": "", + "DO": "Dominikanische Republik", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Benin", + "DZ": "Algerien", + + "EA": "Melilla", + "EB": "", + "EC": "Ecuador", + "ED": "", + "EE": "Estland", + "EF": "", + "EG": "Ägypten", + "EH": "Westsahara", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Eritrea", + "ES": "Spanien", + "ET": "Äthiopien", + "EU": "", + "EV": "", + "EW": "Estland", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Finnland", + "FJ": "Fidschi", + "FK": "Falklandinseln", + "FL": "Liechtenstein", + "FM": "Föderierte Staaten von Mikronesien", + "FN": "", + "FO": "Färöer", + "FP": "", + "FQ": "", + "FR": "Frankreich", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Gabun", + "GB": "Vereinigtes Königreich", + "GC": "", + "GD": "Grenada", + "GE": "Georgien", + "GF": "Französisch-Guayana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GJ": "", + "GK": "", + "GL": "Grönland", + "GM": "Gambia", + "GN": "Guinea", + "GO": "", + "GP": "Guadeloupe", + "GQ": "Äquatorialguinea", + "GR": "Griechenland", + "GS": "Südgeorgien und die Südlichen Sandwichinseln", + "GT": "Guatemala", + "GU": "Guam", + "GV": "", + "GW": "Guinea-Bissau", + "GX": "", + "GY": "Guyana", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Hongkong", + "HL": "", + "HM": "Heard und McDonaldinseln", + "HN": "Honduras", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Kroatien", + "HS": "", + "HT": "Haiti", + "HU": "Ungarn", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Kanarische Inseln", + "ID": "Indonesien", + "IE": "Irland", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "Indien", + "IO": "Britisches Territorium im Indischen Ozean", + "IP": "", + "IQ": "Irak", + "IR": "Iran", + "IS": "Island", + "IT": "Italien", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Jamaika", + "JB": "", + "JC": "", + "JD": "", + "JE": "Jersey", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Jamaika", + "JN": "", + "JO": "Jordanien", + "JP": "Japan", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Kenia", + "KF": "", + "KG": "Kirgisistan", + "KH": "Kambodscha", + "KI": "Kiribati", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Komoren", + "KN": "St. Kitts und Nevis", + "KO": "", + "KP": "Nordkorea", + "KQ": "", + "KR": "Südkorea", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Kuwait", + "KX": "", + "KY": "Kaimaninseln", + "KZ": "Kasachstan", + + "LA": "Laos", + "LB": "Libanon", + "LC": "St. Lucia", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Liechtenstein", + "LJ": "", + "LK": "Sri Lanka", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Litauen", + "LU": "Luxemburg", + "LV": "Lettland", + "LW": "", + "LX": "", + "LY": "Libyen", + "LZ": "", + + "MA": "Marokko", + "MB": "", + "MC": "Monaco", + "MD": "Moldawien", + "ME": "Montenegro", + "MF": "Saint-Martin", + "MG": "Madagaskar", + "MH": "Marshallinseln", + "MI": "", + "MJ": "", + "MK": "Mazedonien", + "ML": "Mali", + "MM": "Myanmar", + "MN": "Mongolei", + "MO": "Macau", + "MP": "Nördliche Marianen", + "MQ": "Martinique", + "MR": "Mauretanien", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Malediven", + "MW": "Malawi", + "MX": "Mexiko", + "MY": "Malaysia", + "MZ": "Mosambik", + + "NA": "Namibia", + "NB": "", + "NC": "Neukaledonien", + "ND": "", + "NE": "Niger", + "NF": "Norfolkinsel", + "NG": "Nigeria", + "NH": "", + "NI": "Nicaragua", + "NJ": "", + "NK": "", + "NL": "Niederlande", + "NM": "", + "NN": "", + "NO": "Norwegen", + "NP": "Nepal", + "NQ": "", + "NR": "Nauru", + "NS": "", + "NT": "", + "NU": "Niue", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "Neuseeland", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Oman", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Panama", + "PB": "", + "PC": "", + "PD": "", + "PE": "Peru", + "PF": "Französisch-Polynesien", + "PG": "Papua-Neuguinea", + "PH": "Philippinen", + "PI": "Philippinen", + "PJ": "", + "PK": "Pakistan", + "PL": "Polen", + "PM": "Saint-Pierre und Miquelon", + "PN": "Pitcairninseln", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Puerto Rico", + "PS": "Staat Palästina", + "PT": "Portugal", + "PU": "", + "PV": "", + "PW": "Palau", + "PX": "", + "PY": "Paraguay", + "PZ": "", + + "QA": "Katar", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Argentinien", + "RB": "Bolivia; Botswana", + "RC": "Taiwan (Republik China)", + "RD": "", + "RE": "Réunion", + "RF": "", + "RG": "", + "RH": "Haiti", + "RI": "Indonesien", + "RJ": "", + "RK": "", + "RL": "Libanon", + "RM": "Madagaskar", + "RN": "Niger", + "RO": "Rumänien", + "RP": "Philippinen", + "RQ": "", + "RR": "", + "RS": "Serbien", + "RT": "", + "RU": "Russland", + "RV": "", + "RW": "Ruanda", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Saudi-Arabien", + "SB": "Salomonen", + "SC": "Seychellen", + "SD": "Sudan", + "SE": "Schweden", + "SF": "Finnland", + "SG": "Singapur", + "SH": "St. Helena, Ascension und Tristan da Cunha", + "SI": "Slowenien", + "SJ": "Spitzbergen und Jan Mayen", + "SK": "Slowakei", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SP": "", + "SQ": "", + "SR": "Surinam", + "SS": "Südsudan", + "ST": "São Tomé und Príncipe", + "SU": "Union der Sozialistischen Sowjetrepubliken (UdSSR)", + "SV": "El Salvador", + "SW": "", + "SX": "Sint Maarten", + "SY": "Syrien", + "SZ": "Swasiland", + + "TA": "Tristan da Cunha", + "TB": "", + "TC": "Turks- und Caicosinseln", + "TD": "Tschad", + "TE": "", + "TF": "Französische Süd- und Antarktisgebiete", + "TG": "Togo", + "TH": "Thailand", + "TI": "", + "TJ": "Tadschikistan", + "TK": "Tokelau", + "TL": "Osttimor", + "TM": "Turkmenistan", + "TN": "Tunesien", + "TO": "Tonga", + "TP": "Osttimor", + "TQ": "", + "TR": "Türkei", + "TS": "", + "TT": "Trinidad und Tobago", + "TU": "", + "TV": "Tuvalu", + "TW": "Taiwan (Republik China)", + "TX": "", + "TY": "", + "TZ": "Tansania", + + "UA": "Ukraine", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Uganda", + "UH": "", + "UI": "", + "UJ": "", + "UK": "Vereinigtes Königreich", + "UL": "", + "UM": "Kleinere Inselbesitzungen der Vereinigten Staaten", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "Vereinigte Staaten von Amerika (USA)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Uruguay", + "UZ": "Usbekistan", + + "VA": "Vatikanstadt", + "VB": "", + "VC": "St. Vincent und die Grenadinen", + "VD": "", + "VE": "Venezuela", + "VF": "", + "VG": "Britische Jungferninseln", + "VH": "", + "VI": "Amerikanische Jungferninseln", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Vietnam", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Vanuatu", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Wallis und Futuna", + "WG": "Grenada", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "St. Lucia", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Samoa", + "WT": "", + "WU": "", + "WV": "St. Vincent und die Grenadinen", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Kosovo", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Jemen", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Mayotte", + "YU": "Jugoslawien", + "YV": "Venezuela", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "Südafrika", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Sambia", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Zaire", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Simbabwe", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/countries/en.json b/www/sunders/i18n/countries/en.json new file mode 100644 index 0000000..5c8e0c8 --- /dev/null +++ b/www/sunders/i18n/countries/en.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "not localized yet", + "--": "unable to localize", + + "AA": "", + "AB": "", + "AC": "Ascension Island", + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua and Barbuda", + "AH": "", + "AI": "Anguilla", + "AJ": "", + "AK": "", + "AL": "Albania", + "AM": "Armenia", + "AN": "Netherlands Antilles", + "AO": "Angola", + "AP": "", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AV": "", + "AW": "Aruba", + "AX": "Åland Islands", + "AY": "", + "AZ": "Azerbaijan", + + "BA": "Bosnia and Herzegovina", + "BB": "Barbados", + "BC": "", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BK": "", + "BL": "Saint Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BP": "", + "BQ": "Caribbean Netherlands", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BU": "Burma (Myanmar)", + "BV": "Bouvet Island", + "BW": "Botswana", + "BX": "", + "BY": "Belarus", + "BZ": "Belize", + + "CA": "Canada", + "CB": "", + "CC": "Cocos Islands", + "CD": "Democratic Republic of the Congo", + "CE": "", + "CF": "Central African Republic", + "CG": "Republic of the Congo", + "CH": "Switzerland", + "CI": "Ivory Coast", + "CJ": "", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "People's Republic of China", + "CO": "Colombia", + "CP": "Clipperton Island", + "CQ": "", + "CR": "Costa Rica", + "CS": "Czechoslovakia (Serbia and Montenegro)", + "CT": "", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curaçao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czech Republic", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Germany", + "DF": "", + "DG": "Diego Garcia", + "DH": "", + "DI": "", + "DJ": "Djibouti", + "DK": "Denmark", + "DL": "", + "DM": "Dominica", + "DN": "", + "DO": "Dominican Republic", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Benin", + "DZ": "Algeria", + + "EA": "Melilla", + "EB": "", + "EC": "Ecuador", + "ED": "", + "EE": "Estonia", + "EF": "", + "EG": "Egypt", + "EH": "Western Sahara", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "EU": "", + "EV": "", + "EW": "Estonia", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FL": "Liechtenstein", + "FM": "Federated States of Micronesia", + "FN": "", + "FO": "Faroe Islands", + "FP": "", + "FQ": "", + "FR": "France", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Gabon", + "GB": "United Kingdom", + "GC": "", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GJ": "", + "GK": "", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GO": "", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia and the South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GV": "", + "GW": "Guinea-Bissau", + "GX": "", + "GY": "Guyana", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Hong Kong", + "HL": "", + "HM": "Heard Island and McDonald Islands", + "HN": "Honduras", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Croatia", + "HS": "", + "HT": "Haiti", + "HU": "Hungary", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Canary Islands", + "ID": "Indonesia", + "IE": "Ireland", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IP": "", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Iceland", + "IT": "Italy", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Jamaica", + "JB": "", + "JC": "", + "JD": "", + "JE": "Jersey", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Jamaica", + "JN": "", + "JO": "Jordan", + "JP": "Japan", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Kenya", + "KF": "", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Comoros", + "KN": "Saint Kitts and Nevis", + "KO": "", + "KP": "North Korea", + "KQ": "", + "KR": "South Korea", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Kuwait", + "KX": "", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + + "LA": "Laos", + "LB": "Lebanon", + "LC": "Saint Lucia", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Liechtenstein", + "LJ": "", + "LK": "Sri Lanka", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LW": "", + "LX": "", + "LY": "Libya", + "LZ": "", + + "MA": "Morocco", + "MB": "", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "Saint Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MI": "", + "MJ": "", + "MK": "Macedonia", + "ML": "Mali", + "MM": "Myanmar", + "MN": "Mongolia", + "MO": "Macau", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + + "NA": "Namibia", + "NB": "", + "NC": "New Caledonia", + "ND": "", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NH": "", + "NI": "Nicaragua", + "NJ": "", + "NK": "", + "NL": "Netherlands", + "NM": "", + "NN": "", + "NO": "Norway", + "NP": "Nepal", + "NQ": "", + "NR": "Nauru", + "NS": "", + "NT": "", + "NU": "Niue", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "New Zealand", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Oman", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Panama", + "PB": "", + "PC": "", + "PD": "", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PI": "Philippines", + "PJ": "", + "PK": "Pakistan", + "PL": "Poland", + "PM": "Saint Pierre and Miquelon", + "PN": "Pitcairn Islands", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Puerto Rico", + "PS": "State of Palestine", + "PT": "Portugal", + "PU": "", + "PV": "", + "PW": "Palau", + "PX": "", + "PY": "Paraguay", + "PZ": "", + + "QA": "Qatar", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Argentina", + "RB": "Bolivia; Botswana", + "RC": "Taiwan (Republic of China)", + "RD": "", + "RE": "Réunion", + "RF": "", + "RG": "", + "RH": "Haiti", + "RI": "Indonesia", + "RJ": "", + "RK": "", + "RL": "Lebanon", + "RM": "Madagascar", + "RN": "Niger", + "RO": "Romania", + "RP": "Philippines", + "RQ": "", + "RR": "", + "RS": "Serbia", + "RT": "", + "RU": "Russia", + "RV": "", + "RW": "Rwanda", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SF": "Finland", + "SG": "Singapore", + "SH": "Saint Helena, Ascension and Tristan da Cunha", + "SI": "Slovenia", + "SJ": "Svalbard and Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SP": "", + "SQ": "", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "São Tomé and Príncipe", + "SU": "Union of Soviet Socialist Republics (USSR)", + "SV": "El Salvador", + "SW": "", + "SX": "Sint Maarten", + "SY": "Syria", + "SZ": "Swaziland", + + "TA": "Tristan da Cunha", + "TB": "", + "TC": "Turks and Caicos Islands", + "TD": "Chad", + "TE": "", + "TF": "French Southern and Antarctic Lands", + "TG": "Togo", + "TH": "Thailand", + "TI": "", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "East Timor", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TP": "East Timor", + "TQ": "", + "TR": "Turkey", + "TS": "", + "TT": "Trinidad and Tobago", + "TU": "", + "TV": "Tuvalu", + "TW": "Taiwan (Republic of China)", + "TX": "", + "TY": "", + "TZ": "Tanzania", + + "UA": "Ukraine", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Uganda", + "UH": "", + "UI": "", + "UJ": "", + "UK": "United Kingdom", + "UL": "", + "UM": "United States Minor Outlying Islands", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "United States of America (USA)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Uruguay", + "UZ": "Uzbekistan", + + "VA": "Vatican City", + "VB": "", + "VC": "Saint Vincent and the Grenadines", + "VD": "", + "VE": "Venezuela", + "VF": "", + "VG": "British Virgin Islands", + "VH": "", + "VI": "United States Virgin Islands", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Vietnam", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Vanuatu", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Wallis and Futuna", + "WG": "Grenada", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "Saint Lucia", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Samoa", + "WT": "", + "WU": "", + "WV": "Saint Vincent and the Grenadines", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Kosovo", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Yemen", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Mayotte", + "YU": "Yugoslavia", + "YV": "Venezuela", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "South Africa", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Zambia", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Zaire", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Zimbabwe", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/countries/es.json b/www/sunders/i18n/countries/es.json new file mode 100644 index 0000000..1feaf61 --- /dev/null +++ b/www/sunders/i18n/countries/es.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "aún no localizado", + "--": "incapaz de localizar", + + "AA": "", + "AB": "", + "AC": "Isla Ascensión", + "AD": "Andorra", + "AE": "Emiratos Árabes Unidos", + "AF": "Afganistán", + "AG": "Antigua y Barbuda", + "AH": "", + "AI": "Anguila", + "AJ": "", + "AK": "", + "AL": "Albania", + "AM": "Armenia", + "AN": "Antillas Neerlandesas", + "AO": "Angola", + "AP": "", + "AQ": "Antártida", + "AR": "Argentina", + "AS": "Samoa Americana", + "AT": "Austria", + "AU": "Australia", + "AV": "", + "AW": "Aruba", + "AX": "Åland", + "AY": "", + "AZ": "Azerbaiyán", + + "BA": "Bosnia y Herzegovina", + "BB": "Barbados", + "BC": "", + "BD": "Bangladés", + "BE": "Bélgica", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Baréin", + "BI": "Burundi", + "BJ": "Benín", + "BK": "", + "BL": "San Bartolomé", + "BM": "Bermudas", + "BN": "Brunéi", + "BO": "Bolivia", + "BP": "", + "BQ": "Caribe Neerlandés", + "BR": "Brasil", + "BS": "Bahamas", + "BT": "Bután", + "BU": "Birmania (Myanmar)", + "BV": "Isla Bouvet", + "BW": "Botsuana", + "BX": "", + "BY": "Bielorrusia", + "BZ": "Belice", + + "CA": "Canadá", + "CB": "", + "CC": "Islas Cocos", + "CD": "República Democrática del Congo", + "CE": "", + "CF": "República Centroafricana", + "CG": "República del Congo", + "CH": "Suiza", + "CI": "Costa de Marfil", + "CJ": "", + "CK": "Islas Cook", + "CL": "Chile", + "CM": "Camerún", + "CN": "República Popular China", + "CO": "Colombia", + "CP": "Isla Clipperton", + "CQ": "", + "CR": "Costa Rica", + "CS": "Checoslovaquia (Serbia y Montenegro)", + "CT": "", + "CU": "Cuba", + "CV": "Cabo Verde", + "CW": "Curazao", + "CX": "Isla de Navidad", + "CY": "Chipre", + "CZ": "República Checa", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Alemania", + "DF": "", + "DG": "Diego García", + "DH": "", + "DI": "", + "DJ": "Yibuti", + "DK": "Dinamarca", + "DL": "", + "DM": "Dominica", + "DN": "", + "DO": "República Dominicana", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Benín", + "DZ": "Argelia", + + "EA": "Melilla", + "EB": "", + "EC": "Ecuador", + "ED": "", + "EE": "Estonia", + "EF": "", + "EG": "Egipto", + "EH": "Sahara Occidental", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Eritrea", + "ES": "España", + "ET": "Etiopía", + "EU": "", + "EV": "", + "EW": "Estonia", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Finlandia", + "FJ": "Fiyi", + "FK": "Islas Malvinas", + "FL": "Liechtenstein", + "FM": "Estados Federados de Micronesia", + "FN": "", + "FO": "Islas Feroe", + "FP": "", + "FQ": "", + "FR": "Francia", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Gabón", + "GB": "Reino Unido", + "GC": "", + "GD": "Granada", + "GE": "Georgia", + "GF": "Guayana Francesa", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GJ": "", + "GK": "", + "GL": "Groenlandia", + "GM": "Gambia", + "GN": "Guinea", + "GO": "", + "GP": "Guadalupe", + "GQ": "Guinea Ecuatorial", + "GR": "Grecia", + "GS": "Islas Georgias del Sur y Sandwich del Sur", + "GT": "Guatemala", + "GU": "Guam", + "GV": "", + "GW": "Guinea-Bisáu", + "GX": "", + "GY": "Guyana", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Hong Kong", + "HL": "", + "HM": "Islas Heard y McDonald", + "HN": "Honduras", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Croacia", + "HS": "", + "HT": "Haití", + "HU": "Hungría", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Canarias", + "ID": "Indonesia", + "IE": "Irlanda", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Israel", + "IM": "Isla de Man", + "IN": "India", + "IO": "Territorio Británico del Océano Índico", + "IP": "", + "IQ": "Irak", + "IR": "Irán", + "IS": "Islandia", + "IT": "Italia", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Jamaica", + "JB": "", + "JC": "", + "JD": "", + "JE": "Jersey", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Jamaica", + "JN": "", + "JO": "Jordania", + "JP": "Japón", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Kenia", + "KF": "", + "KG": "Kirguistán", + "KH": "Camboya", + "KI": "Kiribati", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Comoras", + "KN": "San Cristóbal y Nieves", + "KO": "", + "KP": "Corea del Norte", + "KQ": "", + "KR": "Corea del Sur", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Kuwait", + "KX": "", + "KY": "Islas Caimán", + "KZ": "Kazajistán", + + "LA": "Laos", + "LB": "Líbano", + "LC": "Santa Lucía", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Liechtenstein", + "LJ": "", + "LK": "Sri Lanka", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Liberia", + "LS": "Lesoto", + "LT": "Lituania", + "LU": "Luxemburgo", + "LV": "Letonia", + "LW": "", + "LX": "", + "LY": "Libia", + "LZ": "", + + "MA": "Marruecos", + "MB": "", + "MC": "Mónaco", + "MD": "Moldavia", + "ME": "Montenegro", + "MF": "San Martín", + "MG": "Madagascar", + "MH": "Islas Marshall", + "MI": "", + "MJ": "", + "MK": "Macedonia", + "ML": "Malí", + "MM": "Myanmar", + "MN": "Mongolia", + "MO": "Macao", + "MP": "Islas Marianas del Norte", + "MQ": "Martinica", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauricio", + "MV": "Maldivas", + "MW": "Malaui", + "MX": "México", + "MY": "Malasia", + "MZ": "Mozambique", + + "NA": "Namibia", + "NB": "", + "NC": "Nueva Caledonia", + "ND": "", + "NE": "Níger", + "NF": "Isla Norfolk", + "NG": "Nigeria", + "NH": "", + "NI": "Nicaragua", + "NJ": "", + "NK": "", + "NL": "Países Bajos", + "NM": "", + "NN": "", + "NO": "Noruega", + "NP": "Nepal", + "NQ": "", + "NR": "Nauru", + "NS": "", + "NT": "", + "NU": "Niue", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "Nueva Zelanda", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Omán", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Panamá", + "PB": "", + "PC": "", + "PD": "", + "PE": "Perú", + "PF": "Polinesia Francesa", + "PG": "Papúa Nueva Guinea", + "PH": "Filipinas", + "PI": "Filipinas", + "PJ": "", + "PK": "Pakistán", + "PL": "Polonia", + "PM": "San Pedro y Miquelón", + "PN": "Islas Pitcairn", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Puerto Rico", + "PS": "Estado de Palestina", + "PT": "Portugal", + "PU": "", + "PV": "", + "PW": "Palaos", + "PX": "", + "PY": "Paraguay", + "PZ": "", + + "QA": "Catar", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Argentina", + "RB": "Bolivia; Botsuana", + "RC": "Taiwán (República de China)", + "RD": "", + "RE": "Reunión", + "RF": "", + "RG": "", + "RH": "Haití", + "RI": "Indonesia", + "RJ": "", + "RK": "", + "RL": "Líbano", + "RM": "Madagascar", + "RN": "Níger", + "RO": "Rumania", + "RP": "Filipinas", + "RQ": "", + "RR": "", + "RS": "Serbia", + "RT": "", + "RU": "Rusia", + "RV": "", + "RW": "Ruanda", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Arabia Saudita", + "SB": "Islas Salomón", + "SC": "Seychelles", + "SD": "Sudán", + "SE": "Suecia", + "SF": "Finlandia", + "SG": "Singapur", + "SH": "Santa Elena, Ascensión y Tristán de Acuña", + "SI": "Eslovenia", + "SJ": "Svalbard y Jan Mayen", + "SK": "Eslovaquia", + "SL": "Sierra Leona", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SP": "", + "SQ": "", + "SR": "Surinam", + "SS": "Sudán del Sur", + "ST": "Santo Tomé y Príncipe", + "SU": "Unión de Repúblicas Socialistas Soviéticas (URSS)", + "SV": "El Salvador", + "SW": "", + "SX": "Sint Maarten", + "SY": "Siria", + "SZ": "Suazilandia", + + "TA": "Tristán de Acuña", + "TB": "", + "TC": "Islas Turcas y Caicos", + "TD": "Chad", + "TE": "", + "TF": "Tierras Australes y Antárticas Francesas", + "TG": "Togo", + "TH": "Tailandia", + "TI": "", + "TJ": "Tayikistán", + "TK": "Tokelau", + "TL": "Timor Oriental", + "TM": "Turkmenistán", + "TN": "Túnez", + "TO": "Tonga", + "TP": "Timor Oriental", + "TQ": "", + "TR": "Turquía", + "TS": "", + "TT": "Trinidad y Tobago", + "TU": "", + "TV": "Tuvalu", + "TW": "Taiwán (República de China)", + "TX": "", + "TY": "", + "TZ": "Tanzania", + + "UA": "Ucrania", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Uganda", + "UH": "", + "UI": "", + "UJ": "", + "UK": "Reino Unido", + "UL": "", + "UM": "Islas Ultramarinas Menores de Estados Unidos", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "Estados Unidos de América (USA)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Uruguay", + "UZ": "Uzbekistán", + + "VA": "Ciudad del Vaticano", + "VB": "", + "VC": "San Vicente y las Granadinas", + "VD": "", + "VE": "Venezuela", + "VF": "", + "VG": "Islas Vírgenes Británicas", + "VH": "", + "VI": "Islas Vírgenes de los Estados Unidos", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Vietnam", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Vanuatu", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Wallis y Futuna", + "WG": "Grenada", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "Santa Lucía", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Samoa", + "WT": "", + "WU": "", + "WV": "San Vicente y las Granadinas", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Kosovo", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Yemen", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Mayotte", + "YU": "Yugoslavia", + "YV": "Venezuela", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "Sudáfrica", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Zambia", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Zaire", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Zimbabue", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/countries/fr.json b/www/sunders/i18n/countries/fr.json new file mode 100644 index 0000000..47a4705 --- /dev/null +++ b/www/sunders/i18n/countries/fr.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "pas encore localisé", + "--": "incapable de localiser", + + "AA": "", + "AB": "", + "AC": "Île de l'Ascension", + "AD": "Andorre", + "AE": "Émirats arabes unis", + "AF": "Afghanistan", + "AG": "Antigua-et-Barbuda", + "AH": "", + "AI": "Anguilla", + "AJ": "", + "AK": "", + "AL": "Albanie", + "AM": "Arménie", + "AN": "Antilles néerlandaises", + "AO": "Angola", + "AP": "", + "AQ": "Antarctique", + "AR": "Argentine", + "AS": "Samoa américaines", + "AT": "Autriche", + "AU": "Australie", + "AV": "", + "AW": "Aruba", + "AX": "Åland", + "AY": "", + "AZ": "Azerbaïdjan", + + "BA": "Bosnie-Herzégovine", + "BB": "Barbade", + "BC": "", + "BD": "Bangladesh", + "BE": "Belgique", + "BF": "Burkina Faso", + "BG": "Bulgarie", + "BH": "Bahreïn", + "BI": "Burundi", + "BJ": "Bénin", + "BK": "", + "BL": "Saint-Barthélemy", + "BM": "Bermudes", + "BN": "Brunei", + "BO": "Bolivie", + "BP": "", + "BQ": "Pays-Bas caribéens", + "BR": "Brésil", + "BS": "Bahamas", + "BT": "Bhoutan", + "BU": "Birmanie (Myanmar)", + "BV": "Île Bouvet", + "BW": "Botswana", + "BX": "", + "BY": "Biélorussie", + "BZ": "Belize", + + "CA": "Canada", + "CB": "", + "CC": "Îles Cocos", + "CD": "République démocratique du Congo", + "CE": "", + "CF": "République centrafricaine", + "CG": "République du Congo", + "CH": "Suisse", + "CI": "Côte d'Ivoire", + "CJ": "", + "CK": "Îles Cook", + "CL": "Chili", + "CM": "Cameroun", + "CN": "République populaire de Chine", + "CO": "Colombie", + "CP": "Île de Clipperton", + "CQ": "", + "CR": "Costa Rica", + "CS": "Tchécoslovaquie (Serbie-et-Monténégro)", + "CT": "", + "CU": "Cuba", + "CV": "Cap-Vert", + "CW": "Curaçao", + "CX": "Île Christmas", + "CY": "Chypre", + "CZ": "République tchèque", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Allemagne", + "DF": "", + "DG": "Diego Garcia", + "DH": "", + "DI": "", + "DJ": "Djibouti", + "DK": "Danemark", + "DL": "", + "DM": "Dominique", + "DN": "", + "DO": "République dominicaine", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Bénin", + "DZ": "Algérie", + + "EA": "Melilla", + "EB": "", + "EC": "Équateur", + "ED": "", + "EE": "Estonie", + "EF": "", + "EG": "Égypte", + "EH": "Sahara occidental", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Érythrée", + "ES": "Espagne", + "ET": "Éthiopie", + "EU": "", + "EV": "", + "EW": "Estonie", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Finlande", + "FJ": "Fidji", + "FK": "Îles Malouines", + "FL": "Liechtenstein", + "FM": "États fédérés de Micronésie", + "FN": "", + "FO": "Îles Féroé", + "FP": "", + "FQ": "", + "FR": "France", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Gabon", + "GB": "Royaume-Uni", + "GC": "", + "GD": "Grenade", + "GE": "Géorgie", + "GF": "Guyane", + "GG": "Guernesey", + "GH": "Ghana", + "GI": "Gibraltar", + "GJ": "", + "GK": "", + "GL": "Groenland", + "GM": "Gambie", + "GN": "Guinée", + "GO": "", + "GP": "Guadeloupe", + "GQ": "Guinée équatoriale", + "GR": "Grèce", + "GS": "Géorgie du Sud-et-les Îles Sandwich du Sud", + "GT": "Guatemala", + "GU": "Guam", + "GV": "", + "GW": "Guinée-Bissau", + "GX": "", + "GY": "Guyana", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Hong Kong", + "HL": "", + "HM": "Îles Heard-et-MacDonald", + "HN": "Honduras", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Croatie", + "HS": "", + "HT": "Haïti", + "HU": "Hongrie", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Îles Canaries", + "ID": "Indonésie", + "IE": "Irlande", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Israël", + "IM": "Île de Man", + "IN": "Inde", + "IO": "Territoire britannique de l'océan Indien", + "IP": "", + "IQ": "Irak", + "IR": "Iran", + "IS": "Islande", + "IT": "Italie", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Jamaïque", + "JB": "", + "JC": "", + "JD": "", + "JE": "Jersey", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Jamaïque", + "JN": "", + "JO": "Jordanie", + "JP": "Japon", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Kenya", + "KF": "", + "KG": "Kirghizistan", + "KH": "Cambodge", + "KI": "Kiribati", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Comores", + "KN": "Saint-Christophe-et-Niévès", + "KO": "", + "KP": "Corée du Nord", + "KQ": "", + "KR": "Corée du Sud", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Koweït", + "KX": "", + "KY": "Îles Caïmans", + "KZ": "Kazakhstan", + + "LA": "Laos", + "LB": "Liban", + "LC": "Sainte-Lucie", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Liechtenstein", + "LJ": "", + "LK": "Sri Lanka", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lituanie", + "LU": "Luxembourg", + "LV": "Lettonie", + "LW": "", + "LX": "", + "LY": "Libye", + "LZ": "", + + "MA": "Maroc", + "MB": "", + "MC": "Monaco", + "MD": "Moldavie", + "ME": "Monténégro", + "MF": "Saint-Martin", + "MG": "Madagascar", + "MH": "Îles Marshall", + "MI": "", + "MJ": "", + "MK": "Macédoine", + "ML": "Mali", + "MM": "Myanmar", + "MN": "Mongolie", + "MO": "Macao", + "MP": "Îles Mariannes du Nord", + "MQ": "Martinique", + "MR": "Mauritanie", + "MS": "Montserrat", + "MT": "Malte", + "MU": "Maurice", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexique", + "MY": "Malaisie", + "MZ": "Mozambique", + + "NA": "Namibie", + "NB": "", + "NC": "Nouvelle-Calédonie", + "ND": "", + "NE": "Niger", + "NF": "Île Norfolk", + "NG": "Nigeria", + "NH": "", + "NI": "Nicaragua", + "NJ": "", + "NK": "", + "NL": "Pays-Bas", + "NM": "", + "NN": "", + "NO": "Norvège", + "NP": "Népal", + "NQ": "", + "NR": "Nauru", + "NS": "", + "NT": "", + "NU": "Niue", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "Nouvelle-Zélande", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Oman", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Panama", + "PB": "", + "PC": "", + "PD": "", + "PE": "Pérou", + "PF": "Polynésie française", + "PG": "Papouasie-Nouvelle-Guinée", + "PH": "Philippines", + "PI": "Philippines", + "PJ": "", + "PK": "Pakistan", + "PL": "Pologne", + "PM": "Saint-Pierre-et-Miquelon", + "PN": "Îles Pitcairn", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Porto Rico", + "PS": "État de Palestine", + "PT": "Portugal", + "PU": "", + "PV": "", + "PW": "Palaos", + "PX": "", + "PY": "Paraguay", + "PZ": "", + + "QA": "Qatar", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Argentine", + "RB": "Bolivie; Botswana", + "RC": "Taïwan (République de Chine)", + "RD": "", + "RE": "La Réunion", + "RF": "", + "RG": "", + "RH": "Haïti", + "RI": "Indonésie", + "RJ": "", + "RK": "", + "RL": "Liban", + "RM": "Madagascar", + "RN": "Niger", + "RO": "Roumanie", + "RP": "Philippines", + "RQ": "", + "RR": "", + "RS": "Serbie", + "RT": "", + "RU": "Russie", + "RV": "", + "RW": "Rwanda", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Arabie saoudite", + "SB": "Salomon", + "SC": "Seychelles", + "SD": "Soudan", + "SE": "Suède", + "SF": "Finlande", + "SG": "Singapour", + "SH": "Sainte-Hélène, Ascension et Tristan da Cunha", + "SI": "Slovénie", + "SJ": "Svalbard et Jan Mayen", + "SK": "Slovaquie", + "SL": "Sierra Leone", + "SM": "Saint-Marin", + "SN": "Sénégal", + "SO": "Somalie", + "SP": "", + "SQ": "", + "SR": "Suriname", + "SS": "Soudan du Sud", + "ST": "Sao Tomé-et-Principe", + "SU": "Union des républiques socialistes soviétiques (URSS)", + "SV": "Salvador", + "SW": "", + "SX": "Saint-Martin", + "SY": "Syrie", + "SZ": "Swaziland", + + "TA": "Tristan da Cunha", + "TB": "", + "TC": "Îles Turks-et-Caïcos", + "TD": "Tchad", + "TE": "", + "TF": "Terres australes et antarctiques françaises", + "TG": "Togo", + "TH": "Thaïlande", + "TI": "", + "TJ": "Tadjikistan", + "TK": "Tokelau", + "TL": "Timor oriental", + "TM": "Turkménistan", + "TN": "Tunisie", + "TO": "Tonga", + "TP": "Timor oriental", + "TQ": "", + "TR": "Turquie", + "TS": "", + "TT": "Trinité-et-Tobago", + "TU": "", + "TV": "Tuvalu", + "TW": "Taïwan (République de Chine)", + "TX": "", + "TY": "", + "TZ": "Tanzanie", + + "UA": "Ukraine", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Ouganda", + "UH": "", + "UI": "", + "UJ": "", + "UK": "Royaume-Uni", + "UL": "", + "UM": "Îles mineures éloignées des États-Unis", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "États-Unis d'Amérique (USA)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Uruguay", + "UZ": "Ouzbékistan", + + "VA": "Vatican", + "VB": "", + "VC": "Saint-Vincent-et-les-Grenadines", + "VD": "", + "VE": "Venezuela", + "VF": "", + "VG": "Îles Vierges britanniques", + "VH": "", + "VI": "Îles Vierges des États-Unis", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Viêt Nam", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Vanuatu", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Wallis-et-Futuna", + "WG": "Grenade", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "Sainte-Lucie", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Samoa", + "WT": "", + "WU": "", + "WV": "Saint-Vincent-et-les-Grenadines", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Kosovo", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Yémen", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Mayotte", + "YU": "Yougoslavie", + "YV": "Venezuela", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "Afrique du Sud", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Zambie", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Zaïre", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Zimbabwe", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/countries/it.json b/www/sunders/i18n/countries/it.json new file mode 100644 index 0000000..d631e28 --- /dev/null +++ b/www/sunders/i18n/countries/it.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "non ancora localizzato", + "--": "non in grado di localizzare", + + "AA": "", + "AB": "", + "AC": "Isola di Ascensione", + "AD": "Andorra", + "AE": "Emirati Arabi Uniti ", + "AF": "Afghanistan", + "AG": "Antigua e Barbuda", + "AH": "", + "AI": "Anguilla", + "AJ": "", + "AK": "", + "AL": "Albania", + "AM": "Armenia", + "AN": "Antille olandesi", + "AO": "Angola", + "AP": "", + "AQ": "Antartide", + "AR": "Argentina", + "AS": "Samoa Americane", + "AT": "Austria", + "AU": "Australia", + "AV": "", + "AW": "Aruba", + "AX": "Isole Åland", + "AY": "", + "AZ": "Azerbaigian", + + "BA": "Bosnia ed Erzegovina", + "BB": "Barbados", + "BC": "", + "BD": "Bangladesh", + "BE": "Belgio", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BK": "", + "BL": "Saint Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BP": "", + "BQ": "Paesi Bassi caraibici", + "BR": "Brasile", + "BS": "Bahamas", + "BT": "Bhutan", + "BU": "Burma (Birmania)", + "BV": "Isola Bouvet", + "BW": "Botswana", + "BX": "", + "BY": "Bielorussia", + "BZ": "Belize", + + "CA": "Canada", + "CB": "", + "CC": "Isole Cocos", + "CD": "Repubblica Democratica del Congo", + "CE": "", + "CF": "Repubblica Centrafricana", + "CG": "Repubblica del Congo", + "CH": "Svizzera", + "CI": "Costa d'Avorio", + "CJ": "", + "CK": "Isole Cook", + "CL": "Cile", + "CM": "Camerun", + "CN": "Repubblica Popolare Cinese", + "CO": "Colombia", + "CP": "Isola di Clipperton", + "CQ": "", + "CR": "Costa Rica", + "CS": "Cecoslovacchia,(Serbia e Montenegro)", + "CT": "", + "CU": "Cuba", + "CV": "Capo Verde", + "CW": "Curaçao", + "CX": "Isola di Natale", + "CY": "Cipro", + "CZ": "Repubblica Ceca", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Germania", + "DF": "", + "DG": "Diego Garcia", + "DH": "", + "DI": "", + "DJ": "Gibuti", + "DK": "Danimarca", + "DL": "", + "DM": "Dominica", + "DN": "", + "DO": "Repubblica Dominicana", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Benin", + "DZ": "Algeria", + + "EA": "Melilla", + "EB": "", + "EC": "Ecuador", + "ED": "", + "EE": "Estonia", + "EF": "", + "EG": "Egitto", + "EH": "Sahara Occidentale", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Eritrea", + "ES": "Spagna", + "ET": "Etiopia", + "EU": "", + "EV": "", + "EW": "Estonia", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Finlandia", + "FJ": "Figi", + "FK": "Isole Falkland", + "FL": "Liechtenstein", + "FM": "Stati Federati di Micronesia", + "FN": "", + "FO": "Isole Faroe", + "FP": "", + "FQ": "", + "FR": "Francia", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Gabon", + "GB": "Regno Unito", + "GC": "", + "GD": "Grenada", + "GE": "Georgia", + "GF": "Guiana francese", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibilterra", + "GJ": "", + "GK": "", + "GL": "Groenlandia", + "GM": "Gambia", + "GN": "Guinea", + "GO": "", + "GP": "Guadalupa", + "GQ": "Guinea Equatoriale", + "GR": "Grecia", + "GS": "Georgia del Sud e Isole Sandwich Austral", + "GT": "Guatemala", + "GU": "Guam", + "GV": "", + "GW": "Guinea-Bissau", + "GX": "", + "GY": "Guiana", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Hong Kong", + "HL": "", + "HM": "Isole Heard e McDonald", + "HN": "Honduras", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Croazia", + "HS": "", + "HT": "Haiti", + "HU": "Ungheria", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Isole Canarie", + "ID": "Indonesia", + "IE": "Irlanda", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Israele", + "IM": "Isola di Man", + "IN": "India", + "IO": "Territorio britannico dell'Oceano Indiano", + "IP": "", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Islanda", + "IT": "Italia", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Giamaica", + "JB": "", + "JC": "", + "JD": "", + "JE": "Jersey", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Giamaica", + "JN": "", + "JO": "Giordania", + "JP": "Giappone", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Kenya", + "KF": "", + "KG": "Kirghizistan", + "KH": "Cambogia", + "KI": "Kiribati", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Comoros", + "KN": "Saint Kitts e Nevis", + "KO": "", + "KP": "Corea del Nord", + "KQ": "", + "KR": "Corea del Sud", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Kuwait", + "KX": "", + "KY": "Isole Cayman", + "KZ": "Kazakhstan", + + "LA": "Laos", + "LB": "Libano", + "LC": "Saint Lucia", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Liechtenstein", + "LJ": "", + "LK": "Sri Lanka", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Lussemburgo", + "LV": "Latvia", + "LW": "", + "LX": "", + "LY": "Libya", + "LZ": "", + + "MA": "Morocco", + "MB": "", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "Saint Martin", + "MG": "Madagascar", + "MH": "Isole Marshall", + "MI": "", + "MJ": "", + "MK": "Macedonia", + "ML": "Mali", + "MM": "Birmania", + "MN": "Mongolia", + "MO": "Macau", + "MP": "Isole Marianne Settentrionali", + "MQ": "Martinica", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldive", + "MW": "Malawi", + "MX": "Messico", + "MY": "Malaysia", + "MZ": "Mozambico", + + "NA": "Namibia", + "NB": "", + "NC": "Nuova Caledonia", + "ND": "", + "NE": "Niger", + "NF": "Isola Norfolk", + "NG": "Nigeria", + "NH": "", + "NI": "Nicaragua", + "NJ": "", + "NK": "", + "NL": "Paesi Bassi/Olanda", + "NM": "", + "NN": "", + "NO": "Norvegia", + "NP": "Nepal", + "NQ": "", + "NR": "Nauru", + "NS": "", + "NT": "", + "NU": "Niue", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "Nuova Zelanda", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Oman", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Panama", + "PB": "", + "PC": "", + "PD": "", + "PE": "Perù", + "PF": "Polinesia francese", + "PG": "Papua Nuova Guinea", + "PH": "Filippine", + "PI": "Filippine", + "PJ": "", + "PK": "Pakistan", + "PL": "Polonia", + "PM": "Saint-Pierre e Miquelon", + "PN": "Isole Pitcairn", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Porto Rico", + "PS": "Stato di Palestina", + "PT": "Portogallo", + "PU": "", + "PV": "", + "PW": "Palau", + "PX": "", + "PY": "Paraguay", + "PZ": "", + + "QA": "Qatar", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Argentina", + "RB": "Bolivia; Botswana", + "RC": "Taiwan/Formosa (Repubblica Cinese)", + "RD": "", + "RE": "Réunion", + "RF": "", + "RG": "", + "RH": "Haiti", + "RI": "Indonesia", + "RJ": "", + "RK": "", + "RL": "Libano", + "RM": "Madagascar", + "RN": "Niger", + "RO": "Romania", + "RP": "Filippine", + "RQ": "", + "RR": "", + "RS": "Serbia", + "RT": "", + "RU": "Russia", + "RV": "", + "RW": "Ruanda", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Svezia", + "SF": "Finlandia", + "SG": "Singapore", + "SH": "Sant'Elena, Ascensione e Tristan da Cunha", + "SI": "Slovenia", + "SJ": "Svalbard e Jan Mayen", + "SK": "Slovacchia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SP": "", + "SQ": "", + "SR": "Suriname", + "SS": "Sudandel Sud", + "ST": "São Tomé e Príncipe", + "SU": "Unione delle Repubbliche Socialiste Sovietiche (URSS)", + "SV": "El Salvador", + "SW": "", + "SX": "Sint Maarten", + "SY": "Siria", + "SZ": "Swaziland", + + "TA": "Tristan da Cunha", + "TB": "", + "TC": "Turks e Caicos", + "TD": "Ciad", + "TE": "", + "TF": "Terre australi e antartiche francesi", + "TG": "Togo", + "TH": "Thailandia", + "TI": "", + "TJ": "Tagikistan", + "TK": "Tokelau", + "TL": "Timor Orientale", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TP": "Timor Orientale", + "TQ": "", + "TR": "Turchia", + "TS": "", + "TT": "Trinidad e Tobago", + "TU": "", + "TV": "Tuvalu", + "TW": "Taiwan/Formosa (Repubblica Cinese)", + "TX": "", + "TY": "", + "TZ": "Tanzania", + + "UA": "Ucraina", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Uganda", + "UH": "", + "UI": "", + "UJ": "", + "UK": "Regno Unito", + "UL": "", + "UM": "Isole Minori Esterne degli Stati Uniti d'America", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "Stati Uniti d'America (USA)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Uruguay", + "UZ": "Uzbekistan", + + "VA": "Città del Vaticano", + "VB": "", + "VC": "Saint Vincent e Grenadine", + "VD": "", + "VE": "Venezuela", + "VF": "", + "VG": "Isole Vergini britanniche", + "VH": "", + "VI": "Isole Vergini americane", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Vietnam", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Vanuatu", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Wallis e Futuna", + "WG": "Grenada", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "Saint Lucia", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Samoa", + "WT": "", + "WU": "", + "WV": "Saint Vincent e Grenadine", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Kosovo", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Yemen", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Mayotte", + "YU": "Jugoslavia", + "YV": "Venezuela", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "Sudafrica", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Zambia", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Zaire", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Zimbabwe", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/countries/ru.json b/www/sunders/i18n/countries/ru.json new file mode 100644 index 0000000..af0b05d --- /dev/null +++ b/www/sunders/i18n/countries/ru.json @@ -0,0 +1,708 @@ +{ + "texts": { + "xxx": "еще не локализованы", + "--": "не удалось локализовать", + + "AA": "", + "AB": "", + "AC": "Остров Вознесения", + "AD": "Андорра", + "AE": "Объединённые Арабские Эмираты", + "AF": "Афганистан", + "AG": "Антигуа и Барбуда", + "AH": "", + "AI": "Ангилья", + "AJ": "", + "AK": "", + "AL": "Албания", + "AM": "Армения", + "AN": "Нидерландские Антильские острова", + "AO": "Ангола", + "AP": "", + "AQ": "Антарктида", + "AR": "Аргентина", + "AS": "Американское Самоа", + "AT": "Австрия", + "AU": "Австралия", + "AV": "", + "AW": "Аруба", + "AX": "Аландские острова", + "AY": "", + "AZ": "Азербайджан", + + "BA": "Босния и Герцеговина", + "BB": "Барбадос", + "BC": "", + "BD": "Бангладеш", + "BE": "Бельгия", + "BF": "Буркина-Фасо", + "BG": "Болгария", + "BH": "Бахрейн", + "BI": "Бурунди", + "BJ": "Бенин", + "BK": "", + "BL": "Сен-Бартелеми", + "BM": "Бермудские Острова", + "BN": "Бруней", + "BO": "Боливия", + "BP": "", + "BQ": "Бонайре, Синт-Эстатиус и Саба", + "BR": "Бразилия", + "BS": "Багамские Острова", + "BT": "Бутан", + "BU": "Бирма (Мьянма)", + "BV": "Остров Буве", + "BW": "Ботсвана", + "BX": "", + "BY": "Белоруссия", + "BZ": "Белиз", + + "CA": "Канада", + "CB": "", + "CC": "Кокосовые острова", + "CD": "Демократическая Республика Конго", + "CE": "", + "CF": "Центральноафриканская Республика", + "CG": "Республика Конго", + "CH": "Швейцария", + "CI": "Кот-д’Ивуар", + "CJ": "", + "CK": "Острова Кука", + "CL": "Чили", + "CM": "Камерун", + "CN": "Китайская Народная Республика", + "CO": "Колумбия", + "CP": "Клиппертон", + "CQ": "", + "CR": "Коста-Рика", + "CS": "Чехословакия (Сербия и Черногория)", + "CT": "", + "CU": "Куба", + "CV": "Кабо-Верде", + "CW": "Кюрасао", + "CX": "Остров Рождества", + "CY": "Кипр", + "CZ": "Чешская Республика", + + "DA": "", + "DB": "", + "DC": "", + "DD": "", + "DE": "Германия", + "DF": "", + "DG": "Диего-Гарсия", + "DH": "", + "DI": "", + "DJ": "Джибути", + "DK": "Дания", + "DL": "", + "DM": "Доминика", + "DN": "", + "DO": "Доминиканская Республика", + "DP": "", + "DQ": "", + "DR": "", + "DS": "", + "DT": "", + "DU": "", + "DV": "", + "DW": "", + "DX": "", + "DY": "Бени́н", + "DZ": "Алжир", + + "EA": "Мелилья", + "EB": "", + "EC": "Эквадор", + "ED": "", + "EE": "Эстония", + "EF": "", + "EG": "Египет", + "EH": "Западная Сахара", + "EI": "", + "EJ": "", + "EK": "", + "EL": "", + "EM": "", + "EN": "", + "EO": "", + "EP": "", + "EQ": "", + "ER": "Эритрея", + "ES": "Испания", + "ET": "Эфиопия", + "EU": "", + "EV": "", + "EW": "Эстония", + "EX": "", + "EY": "", + "EZ": "", + + "FA": "", + "FB": "", + "FC": "", + "FD": "", + "FE": "", + "FF": "", + "FG": "", + "FH": "", + "FI": "Финляндия", + "FJ": "Фиджи", + "FK": "Фолклендские острова", + "FL": "Лихтенштейн", + "FM": "Федеративные Штаты Микронезии", + "FN": "", + "FO": "Фарерские острова", + "FP": "", + "FQ": "", + "FR": "Франция", + "FS": "", + "FT": "", + "FU": "", + "FV": "", + "FW": "", + "FX": "", + "FY": "", + "FZ": "", + + "GA": "Габон", + "GB": "Великобритания", + "GC": "", + "GD": "Гренада", + "GE": "Грузия", + "GF": "Гвиана (департамент Франции)", + "GG": "Гернси", + "GH": "Гана", + "GI": "Гибралтар", + "GJ": "", + "GK": "", + "GL": "Гренландия", + "GM": "Гамбия", + "GN": "Гвинея", + "GO": "", + "GP": "Гваделупа", + "GQ": "Экваториальная Гвинея", + "GR": "Греция", + "GS": "Южная Георгия и Южные Сандвичевы Острова", + "GT": "Гватемала", + "GU": "Гуам", + "GV": "", + "GW": "Гвинея-Бисау", + "GX": "", + "GY": "Гайана", + "GZ": "", + + "HA": "", + "HB": "", + "HC": "", + "HD": "", + "HE": "", + "HF": "", + "HG": "", + "HH": "", + "HI": "", + "HJ": "", + "HK": "Гонконг", + "HL": "", + "HM": "Остров Херд и острова Макдональд", + "HN": "Гондурас", + "HO": "", + "HP": "", + "HQ": "", + "HR": "Хорватия", + "HS": "", + "HT": "Гаити", + "HU": "Венгрия", + "HV": "", + "HW": "", + "HX": "", + "HY": "", + "HZ": "", + + "IA": "", + "IB": "", + "IC": "Канарские острова", + "ID": "Индонезия", + "IE": "Ирландия", + "IF": "", + "IG": "", + "IH": "", + "II": "", + "IJ": "", + "IK": "", + "IL": "Израиль", + "IM": "Остров Мэн", + "IN": "Индия", + "IO": "Британская Территория в Индийском Океане", + "IP": "", + "IQ": "Ирак", + "IR": "Иран", + "IS": "Исландия", + "IT": "Италия", + "IU": "", + "IV": "", + "IW": "", + "IX": "", + "IY": "", + "IZ": "", + + "JA": "Ямайка", + "JB": "", + "JC": "", + "JD": "", + "JE": "Джерси", + "JF": "", + "JG": "", + "JH": "", + "JI": "", + "JJ": "", + "JK": "", + "JL": "", + "JM": "Ямайка", + "JN": "", + "JO": "Иордания", + "JP": "Япония", + "JQ": "", + "JR": "", + "JS": "", + "JT": "", + "JU": "", + "JV": "", + "JW": "", + "JX": "", + "JY": "", + "JZ": "", + + "KA": "", + "KB": "", + "KC": "", + "KD": "", + "KE": "Кения", + "KF": "", + "KG": "Киргизия", + "KH": "Камбоджа", + "KI": "Кирибати", + "KJ": "", + "KK": "", + "KL": "", + "KM": "Коморы", + "KN": "Сент-Китс и Невис", + "KO": "", + "KP": "Корейская Народно-Демократическая Республика", + "KQ": "", + "KR": "Республика Корея", + "KS": "", + "KT": "", + "KU": "", + "KV": "", + "KW": "Кувейт", + "KX": "", + "KY": "Острова Кайман", + "KZ": "Казахстан", + + "LA": "Лаос", + "LB": "Ливан", + "LC": "Сент-Люсия", + "LD": "", + "LE": "", + "LF": "", + "LG": "", + "LH": "", + "LI": "Лихтенштейн", + "LJ": "", + "LK": "Шри-Ланка", + "LL": "", + "LM": "", + "LN": "", + "LO": "", + "LP": "", + "LQ": "", + "LR": "Либерия", + "LS": "Лесото", + "LT": "Литва", + "LU": "Люксембург", + "LV": "Латвия", + "LW": "", + "LX": "", + "LY": "Ливия", + "LZ": "", + + "MA": "Марокко", + "MB": "", + "MC": "Монако", + "MD": "Молдавия", + "ME": "Черногория", + "MF": "Сен-Мартен", + "MG": "Мадагаскар", + "MH": "Маршалловы Острова", + "MI": "", + "MJ": "", + "MK": "Македония", + "ML": "Мали", + "MM": "Мьянма", + "MN": "Монголия", + "MO": "Макао", + "MP": "Северные Марианские Острова", + "MQ": "Мартиника", + "MR": "Мавритания", + "MS": "Монтсеррат", + "MT": "Мальта", + "MU": "Маврикий", + "MV": "Мальдивы", + "MW": "Малави", + "MX": "Мексика", + "MY": "Малайзия", + "MZ": "Мозамбик", + + "NA": "Намибия", + "NB": "", + "NC": "Каледония", + "ND": "", + "NE": "Нигер", + "NF": "Остров Норфолк", + "NG": "Нигерия", + "NH": "", + "NI": "Никарагуа", + "NJ": "", + "NK": "", + "NL": "Нидерланды", + "NM": "", + "NN": "", + "NO": "Норвегия", + "NP": "Непал", + "NQ": "", + "NR": "Науру", + "NS": "", + "NT": "", + "NU": "Ниуэ", + "NV": "", + "NW": "", + "NX": "", + "NY": "", + "NZ": "Новая Зеландия", + + "OA": "", + "OB": "", + "OC": "", + "OD": "", + "OE": "", + "OF": "", + "OG": "", + "OH": "", + "OI": "", + "OJ": "", + "OK": "", + "OL": "", + "OM": "Оман", + "ON": "", + "OO": "", + "OP": "", + "OQ": "", + "OR": "", + "OS": "", + "OT": "", + "OU": "", + "OV": "", + "OW": "", + "OX": "", + "OY": "", + "OZ": "", + + "PA": "Панама", + "PB": "", + "PC": "", + "PD": "", + "PE": "Перу", + "PF": "Французская Полинезия", + "PG": "Папуа — Новая Гвинея", + "PH": "Филиппины", + "PI": "Филиппины", + "PJ": "", + "PK": "Пакистан", + "PL": "Польша", + "PM": "Сен-Пьер и Микелон", + "PN": "Острова Питкэрн", + "PO": "", + "PP": "", + "PQ": "", + "PR": "Пуэрто-Рико", + "PS": "Государство Палестина", + "PT": "Португалия", + "PU": "", + "PV": "", + "PW": "Палау", + "PX": "", + "PY": "Парагвай", + "PZ": "", + + "QA": "Катар", + "QB": "", + "QC": "", + "QD": "", + "QE": "", + "QF": "", + "QG": "", + "QH": "", + "QI": "", + "QJ": "", + "QK": "", + "QL": "", + "QM": "", + "QN": "", + "QO": "", + "QP": "", + "QQ": "", + "QR": "", + "QS": "", + "QT": "", + "QU": "", + "QV": "", + "QW": "", + "QX": "", + "QY": "", + "QZ": "", + + "RA": "Аргентина", + "RB": "Боливия; Ботсвана", + "RC": "Тайва́нь (Китайская Республика)", + "RD": "", + "RE": "Реюньон", + "RF": "", + "RG": "", + "RH": "Республика Гаити", + "RI": "Индонезия", + "RJ": "", + "RK": "", + "RL": "Ливан", + "RM": "Мадагаскар", + "RN": "Нигер", + "RO": "Румыния", + "RP": "Филиппины", + "RQ": "", + "RR": "", + "RS": "Сербия", + "RT": "", + "RU": "Россия", + "RV": "", + "RW": "Руанда", + "RX": "", + "RY": "", + "RZ": "", + + "SA": "Саудовская Аравия", + "SB": "Соломоновы Острова", + "SC": "Сейшельские Острова", + "SD": "Судан", + "SE": "Швеция", + "SF": "Финляндия", + "SG": "Сингапур", + "SH": "Острова Святой Елены, Вознесения и Тристан-да-Кунья", + "SI": "Словения", + "SJ": "Шпицберген и Ян-Майен", + "SK": "Словакия", + "SL": "Сьерра-Леоне", + "SM": "Сан-Марино", + "SN": "Сенегал", + "SO": "Сомали", + "SP": "", + "SQ": "", + "SR": "Суринам", + "SS": "Южный Судан", + "ST": "Сан-Томе и Принсипи", + "SU": "Союз Советских Социалистических Республик (СССР)", + "SV": "Сальвадор", + "SW": "", + "SX": "Синт-Мартен", + "SY": "Сирия", + "SZ": "Свазиленд", + + "TA": "Тристан-да-Кунья", + "TB": "", + "TC": "Теркс и Кайкос", + "TD": "Чад", + "TE": "", + "TF": "Французские Южные и Антарктические территории", + "TG": "Того", + "TH": "Таиланд", + "TI": "", + "TJ": "Таджикистан", + "TK": "Токелау", + "TL": "Восточный Тимор", + "TM": "Туркмения", + "TN": "Тунис", + "TO": "Тонга", + "TP": "Восточный Тимор", + "TQ": "", + "TR": "Турция", + "TS": "", + "TT": "Тринидад и Тобаго", + "TU": "", + "TV": "Тувалу", + "TW": "Тайва́нь (Китайская Республика)", + "TX": "", + "TY": "", + "TZ": "Танзания", + + "UA": "Украина", + "UB": "", + "UC": "", + "UD": "", + "UE": "", + "UF": "", + "UG": "Уганда", + "UH": "", + "UI": "", + "UJ": "", + "UK": "Соединённое Королевство", + "UL": "", + "UM": "Внешние малые острова США", + "UN": "", + "UO": "", + "UP": "", + "UQ": "", + "UR": "", + "US": "Соединённые Шта́ты Аме́рики (США)", + "UT": "", + "UU": "", + "UV": "", + "UW": "", + "UX": "", + "UY": "Уругвай", + "UZ": "Узбекистан", + + "VA": "Ватикан", + "VB": "", + "VC": "Сент-Винсент и Гренадины", + "VD": "", + "VE": "Венесуэла", + "VF": "", + "VG": "Виргинские Острова (Великобритания)", + "VH": "", + "VI": "Виргинские Острова (США)", + "VJ": "", + "VK": "", + "VL": "", + "VM": "", + "VN": "Вьетнам", + "VO": "", + "VP": "", + "VQ": "", + "VR": "", + "VS": "", + "VT": "", + "VU": "Вануату", + "VV": "", + "VW": "", + "VX": "", + "VY": "", + "VZ": "", + + "WA": "", + "WB": "", + "WC": "", + "WD": "", + "WE": "", + "WF": "Уоллис и Футуна", + "WG": "Гренада", + "WH": "", + "WI": "", + "WJ": "", + "WK": "", + "WL": "Сент-Люсия", + "WM": "", + "WN": "", + "WO": "", + "WP": "", + "WQ": "", + "WR": "", + "WS": "Самоа", + "WT": "", + "WU": "", + "WV": "Сент-Винсент и Гренадины", + "WW": "", + "WX": "", + "WY": "", + "WZ": "", + + "XA": "", + "XB": "", + "XC": "", + "XD": "", + "XE": "", + "XF": "", + "XG": "", + "XH": "", + "XI": "", + "XJ": "", + "XK": "Косово", + "XL": "", + "XM": "", + "XN": "", + "XO": "", + "XP": "", + "XQ": "", + "XR": "", + "XS": "", + "XT": "", + "XU": "", + "XV": "", + "XW": "", + "XX": "", + "XY": "", + "XZ": "", + + "YA": "", + "YB": "", + "YC": "", + "YD": "", + "YE": "Йемен", + "YF": "", + "YG": "", + "YH": "", + "YI": "", + "YJ": "", + "YK": "", + "YL": "", + "YM": "", + "YN": "", + "YO": "", + "YP": "", + "YQ": "", + "YR": "", + "YS": "", + "YT": "Майотта", + "YU": "Югославия", + "YV": "Венесуэла", + "YW": "", + "YX": "", + "YY": "", + "YZ": "", + + "ZA": "Ю́жная А́фрика", + "ZB": "", + "ZC": "", + "ZD": "", + "ZE": "", + "ZF": "", + "ZG": "", + "ZH": "", + "ZI": "", + "ZJ": "", + "ZK": "", + "ZL": "", + "ZM": "Замбия", + "ZN": "", + "ZO": "", + "ZP": "", + "ZQ": "", + "ZR": "Заир", + "ZS": "", + "ZT": "", + "ZU": "", + "ZV": "", + "ZW": "Зимбабве", + "ZX": "", + "ZY": "", + "ZZ": "" + } +} diff --git a/www/sunders/i18n/credits/de.json b/www/sunders/i18n/credits/de.json new file mode 100644 index 0000000..9c77683 --- /dev/null +++ b/www/sunders/i18n/credits/de.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "Danksagungen & Lizenzen", + "type-idea": "Idee und Codebasis", + "type-js": "Javascipt-Erweiterungen", + "type-map": "Karte und Daten zu Überwachungseinträgen", + "type-service": "Webdienste", + "type-icon": "Symbole", + "type-font": "Schriftart für Überschriften" + } +} diff --git a/www/sunders/i18n/credits/en.json b/www/sunders/i18n/credits/en.json new file mode 100644 index 0000000..d066625 --- /dev/null +++ b/www/sunders/i18n/credits/en.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "Credits & Licenses", + "type-idea": "Idea and code base", + "type-js": "Javascript plugins", + "type-map": "Map and surveillance node data", + "type-service": "Web services", + "type-icon": "Icons", + "type-font": "Font for titles" + } +} diff --git a/www/sunders/i18n/credits/es.json b/www/sunders/i18n/credits/es.json new file mode 100644 index 0000000..525c33c --- /dev/null +++ b/www/sunders/i18n/credits/es.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "Agradecimientos & Licencias", + "type-idea": "Idea e código base", + "type-js": "Javascript complementos", + "type-map": "Mapa e datos de nodos de vigilancia", + "type-service": "Servicios web", + "type-icon": "Iconos", + "type-font": "Tipo de letra en títulos" + } +} diff --git a/www/sunders/i18n/credits/fr.json b/www/sunders/i18n/credits/fr.json new file mode 100644 index 0000000..1f783a9 --- /dev/null +++ b/www/sunders/i18n/credits/fr.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "Attributions & Licences", + "type-idea": "Idée et base du code", + "type-js": "Plugins Javascript", + "type-map": "Carte et données des noeuds de surveillance", + "type-service": "Services Web", + "type-icon": "Icônes", + "type-font": "Police pour les titres" + } +} diff --git a/www/sunders/i18n/credits/it.json b/www/sunders/i18n/credits/it.json new file mode 100644 index 0000000..56c0124 --- /dev/null +++ b/www/sunders/i18n/credits/it.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "Attribuzioni & Licenze", + "type-idea": "Idea e code base", + "type-js": "Javascript plugin", + "type-map": "Mappa e dati dei nodi di sorveglianza", + "type-service": "Servizi web", + "type-icon": "Icone", + "type-font": "Caratteri per titoli" + } +} diff --git a/www/sunders/i18n/credits/ru.json b/www/sunders/i18n/credits/ru.json new file mode 100644 index 0000000..73b04c1 --- /dev/null +++ b/www/sunders/i18n/credits/ru.json @@ -0,0 +1,11 @@ +{ + "texts": { + "title-credits": "", + "type-idea": "", + "type-js": "", + "type-map": "", + "type-service": "", + "type-icon": "", + "type-font": "" + } +} diff --git a/www/sunders/i18n/links/de.json b/www/sunders/i18n/links/de.json new file mode 100644 index 0000000..912b039 --- /dev/null +++ b/www/sunders/i18n/links/de.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "Englisch", + "fra": "Französisch", + "ger": "Deutsch", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "Sichere Verbindung", + "insecure-alt": "Unsichere Verbindung!" + } +} diff --git a/www/sunders/i18n/links/en.json b/www/sunders/i18n/links/en.json new file mode 100644 index 0000000..cedf046 --- /dev/null +++ b/www/sunders/i18n/links/en.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "English", + "fra": "French", + "ger": "German", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "Secure connection", + "insecure-alt": "Insecure connection!" + } +} diff --git a/www/sunders/i18n/links/es.json b/www/sunders/i18n/links/es.json new file mode 100644 index 0000000..28e4e69 --- /dev/null +++ b/www/sunders/i18n/links/es.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "Ingles", + "fra": "Francés", + "ger": "Alemán", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "", + "insecure-alt": "" + } +} diff --git a/www/sunders/i18n/links/fr.json b/www/sunders/i18n/links/fr.json new file mode 100644 index 0000000..28ff792 --- /dev/null +++ b/www/sunders/i18n/links/fr.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "Anglais", + "fra": "Français", + "ger": "Allemand", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "Raccordement sûr", + "insecure-alt": "Raccordement peu sûr!" + } +} diff --git a/www/sunders/i18n/links/it.json b/www/sunders/i18n/links/it.json new file mode 100644 index 0000000..d86821f --- /dev/null +++ b/www/sunders/i18n/links/it.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "English", + "fra": "French", + "ger": "German", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "Connessione sicura", + "insecure-alt": "Connessione non sicura!" + } +} diff --git a/www/sunders/i18n/links/ru.json b/www/sunders/i18n/links/ru.json new file mode 100644 index 0000000..e1265af --- /dev/null +++ b/www/sunders/i18n/links/ru.json @@ -0,0 +1,17 @@ +{ + "texts": { + "eng": "", + "fra": "", + "ger": "", + "sect-2015": "2015", + "sect-2016": "2016", + "sect-2017": "2017", + "sect-2018": "2018", + "sect-2019": "2019", + "sect-2020": "2020", + "sect-2021": "2021", + "sect-2022": "2022", + "secure-alt": "", + "insecure-alt": "" + } +} diff --git a/www/sunders/i18n/manual/de.json b/www/sunders/i18n/manual/de.json new file mode 100644 index 0000000..c41f4fc --- /dev/null +++ b/www/sunders/i18n/manual/de.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "Notwendig, um ein Symbol auf der Karte anzuzeigen", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00 (Überwachung)", + "v-public": "public (öffentlich)", + "v-outdoor": "outdoor (außen)", + "v-indoor": "indoor (in einem Gebäude)", + "v-camera": "camera (Kamera)", + "v-fixed": "fixed (feststehend)", + "v-panning": "panning (schwenkbar)", + "v-dome": "dome (Kuppel)", + "v-guard": "guard (Wachpersonal)", + "v-alpr": "ALPR (AKLS)", + "icon-public-alt": "Überwachung öffentlicher Bereiche", + "icon-outdoor-alt": "Überwachung außerhalb eines Gebäudes", + "icon-indoor-alt": "Überwachung innerhalb eines Gebäudes", + "icon-cam-alt": "Kamera", + "icon-fixed-alt": "Feststehende Kamera", + "icon-panning-alt": "Schwenkbare Kamera", + "icon-dome-alt": "Kuppelkamera", + "icon-guard-alt": "Wachpersonal", + "icon-alpr-alt": "Automatische Kennzeichenlesesysteme", + "title-view-fixed": "Notwendig, zum Anzeigen des feststehenden Kamerablickfelds", + "title-view-dome": "Notwendig, zum Anzeigen des Kuppelkamerablickfelds", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "0 - 359 (in Grad) oder", + "v-direction-1": "N / NE / E / SE / S / SW / W / NW", + "v-direction-2": "z.B. für wandmontierte Kuppeln", + "v-angle-0": "0 - 90 (in Grad)", + "v-angle-1": "von einer horizontalen Blickrichtung bis zu einer auf den Boden gerichteten Kamera", + "v-angle-2": "Standard: 15°", + "v-height-0": "3 - 12 (in Metern)", + "v-height-1": "Standard: 5m", + "examples": "Beispiele", + "example-img-0-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 15°, Höhe: 5m)", + "example-img-1-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 15°, Höhe: 10m)", + "example-img-2-alt": "Feststehendes Blickfeld (Richtung: 90°, Winkel: 60°, Höhe: 10m)", + "example-img-3-alt": "Rundumblickfeld (Höhe: 3m)", + "example-img-4-alt": "Rundumblickfeld (Höhe: 5m)", + "example-img-5-alt": "Rundumblickfeld (Höhe: 5m, Richtung: 45°)", + "example-direction-45": "Richtung = 45°", + "example-direction-90": "Richtung = 90°", + "example-angle-15": "Winkel = 15°", + "example-angle-60": "Winkel = 60°", + "example-height-3": "Höhe = 3m", + "example-height-5": "Höhe = 5m", + "example-height-10": "Höhe = 10m", + "title-optional": "Optional", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank (Bank) / building (Gebäude) / parking (Parkplatz) / shop (Geschäft) / town (Stadt) / traffic (Verkehr)", + "v-cam-mount": "ceilling (Decke) / pole (Mast) / wall (Wand)", + "v-operator": "Gesellschaft oder Person die die Kamera betreibt", + "v-name": "Name der Kamera", + "v-ref": "Referenznummer der Kamera", + "v-image": "Link zu einem extern abgelegten Bilds, das das kartierte Objekt zeigt" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/manual/en.json b/www/sunders/i18n/manual/en.json new file mode 100644 index 0000000..3556368 --- /dev/null +++ b/www/sunders/i18n/manual/en.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "Mandatory to display an icon on the map", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00", + "v-public": "public", + "v-outdoor": "outdoor", + "v-indoor": "indoor", + "v-camera": "camera", + "v-fixed": "fixed", + "v-panning": "panning", + "v-dome": "dome", + "v-guard": "guard", + "v-alpr": "ALPR", + "icon-public-alt": "Public surveillance", + "icon-outdoor-alt": "Outdoor surveillance", + "icon-indoor-alt": "Indoor surveillance", + "icon-cam-alt": "Camera", + "icon-fixed-alt": "Fixed camera", + "icon-panning-alt": "Panning camera", + "icon-dome-alt": "Dome camera", + "icon-guard-alt": "Guard", + "icon-alpr-alt": "Automatic Licence Plate Recognition", + "title-view-fixed": "Mandatory to draw a fixed camera's field of view", + "title-view-dome": "Mandatory to draw a dome camera's field of view", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "0 - 359 (in degrees) or", + "v-direction-1": "N / NE / E / SE / S / SW / W / NW", + "v-direction-2": "e.g. for wall-mounted domes", + "v-angle-0": "0 - 90 (in degrees)", + "v-angle-1": "from a horizontal view to a ground-pointed camera", + "v-angle-2": "default: 15°", + "v-height-0": "3 - 12 (in meters)", + "v-height-1": "default: 5m", + "examples": "Examples", + "example-img-0-alt": "Fixed field of view (direction: 90°, angle: 15°, height: 5m)", + "example-img-1-alt": "Fixed field of view (direction: 90°, angle: 15°, height: 10m)", + "example-img-2-alt": "Fixed field of view (direction: 90°, angle: 60°, height: 10m)", + "example-img-3-alt": "Dome field of view (height: 3m)", + "example-img-4-alt": "Dome field of view (height: 5m)", + "example-img-5-alt": "Dome field of view (height: 5m, direction: 45°)", + "example-direction-45": "direction = 45°", + "example-direction-90": "direction = 90°", + "example-angle-15": "angle = 15°", + "example-angle-60": "angle = 60°", + "example-height-3": "height = 3m", + "example-height-5": "height = 5m", + "example-height-10": "height = 10m", + "title-optional": "Optional", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank / building / parking / shop / town / traffic", + "v-cam-mount": "ceilling / pole / wall", + "v-operator": "organization or person operating the camera", + "v-name": "name of the camera", + "v-ref": "reference number of the camera", + "v-image": "link to an externally hosted image that depicts the tagged object" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/manual/es.json b/www/sunders/i18n/manual/es.json new file mode 100644 index 0000000..bfe420d --- /dev/null +++ b/www/sunders/i18n/manual/es.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "Obligatorio para mostrar un icono en el mapa", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00 (vigilancia)", + "v-public": "public (publico)", + "v-outdoor": "outdoor (exteriores)", + "v-indoor": "indoor (interiores)", + "v-camera": "camera (cámara)", + "v-fixed": "fixed (fija)", + "v-panning": "panning (panorámica)", + "v-dome": "dome (domo)", + "v-guard": "guard (guardia)", + "v-alpr": "ALPR", + "icon-public-alt": "", + "icon-outdoor-alt": "", + "icon-indoor-alt": "", + "icon-cam-alt": "", + "icon-fixed-alt": "", + "icon-panning-alt": "", + "icon-dome-alt": "", + "icon-guard-alt": "", + "icon-alpr-alt": "", + "title-view-fixed": "Obligatorio para dibujar el rango de captura de la cámara fija", + "title-view-dome": "Obligatorio para dibujar el rango de captura de la cámara domo", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "0 - 359 (en grados) o", + "v-direction-1": "N / NE / E / SE / S / SW / W / NW", + "v-direction-2": "ej: para domos montadas en la pared", + "v-angle-0": "0 - 90 (en grados)", + "v-angle-1": "desde una vista horizontal hasta las cámaras que apuntan hacia el piso", + "v-angle-2": "por defecto: 15°", + "v-height-0": "3 -12 (en metros)", + "v-height-1": "por defecto: 5m", + "examples": "Ejemplos", + "example-img-0-alt": "", + "example-img-1-alt": "", + "example-img-2-alt": "", + "example-img-3-alt": "", + "example-img-4-alt": "", + "example-img-5-alt": "", + "example-direction-45": "dirección = 45°", + "example-direction-90": "dirección = 90°", + "example-angle-15": "ángulo = 15°", + "example-angle-60": "ángulo = 60°", + "example-height-3": "altura = 3m", + "example-height-5": "altura = 5m", + "example-height-10": "altura = 10m", + "title-optional": "Opcional", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank (banco) / building (edificio) / parking (estacionamiento) / shop (negocio) / town (centro) / traffic (trafico)", + "v-cam-mount": "ceilling (techo) / pole (palo) / wall (pared)", + "v-operator": "organización o persona que opera la cámara", + "v-name": "nombre de la cámara", + "v-ref": "numero de referencia de la cámara", + "v-image": "enlace a un sitio externo con la imagen del objeto" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/manual/fr.json b/www/sunders/i18n/manual/fr.json new file mode 100644 index 0000000..48f46d3 --- /dev/null +++ b/www/sunders/i18n/manual/fr.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "Nécessaires pour afficher une icône sur la carte", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00", + "v-public": "public", + "v-outdoor": "outdoor", + "v-indoor": "indoor", + "v-camera": "camera", + "v-fixed": "fixed", + "v-panning": "panning", + "v-dome": "dome", + "v-guard": "guard", + "v-alpr": "ALPR (LAPI)", + "icon-public-alt": "Surveillance publique", + "icon-outdoor-alt": "Surveillance extérieure", + "icon-indoor-alt": "Surveillance intérieure", + "icon-cam-alt": "Caméra", + "icon-fixed-alt": "Caméra fixe", + "icon-panning-alt": "Caméra panoramique", + "icon-dome-alt": "Caméra dôme", + "icon-guard-alt": "Garde", + "icon-alpr-alt": "ALPR", + "title-view-fixed": "Nécessaires pour l'affichage du champ de vision de la caméra fixe", + "title-view-dome": "Nécessaires pour l'affichage du champ de vision de la caméra dôme", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "0 - 359 (en degrés) ou les points cardinaux anglais :", + "v-direction-1": "N / NE / E / SE / S / SW / W / NW", + "v-direction-2": "c.a.d. pour les dômes muraux", + "v-angle-0": "0 - 90 (en degrés)", + "v-angle-1": "représentant un angle ômhorizontal jusqu'à une caméra pointée vers le sol", + "v-angle-2": "par défaut : 15°", + "v-height-0": "3 - 12 (en mètres)", + "v-height-1": "par défaut : 5m", + "examples": "Exemples :", + "example-img-0-alt": "Angle visuel fixe (direction: 90°, angle: 15°, height: 5m)", + "example-img-1-alt": "Angle visuel fixe (direction: 90°, angle: 15°, height: 10m)", + "example-img-2-alt": "Angle visuel fixe (direction: 90°, angle: 60°, height: 10m)", + "example-img-3-alt": "Angle visuel dôme (height: 3m)", + "example-img-4-alt": "Angle visuel dôme (height: 5m)", + "example-img-5-alt": "Angle visuel dôme (height: 5m, direction: 45°)", + "example-direction-45": "direction = 45°", + "example-direction-90": "direction = 90°", + "example-angle-15": "angle = 15°", + "example-angle-60": "angle = 60°", + "example-height-3": "height = 3m", + "example-height-5": "height = 5m", + "example-height-10": "height = 10m", + "title-optional": "Facultatifs", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank / building / parking / shop / town / traffic", + "v-cam-mount": "ceilling / pole / wall", + "v-operator": "entité ou personne exploitant la caméra", + "v-name": "nom de la caméra", + "v-ref": "numéro de référence de la caméra", + "v-image": "lien vers une image hébergée ailleurs de l'objet" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/manual/it.json b/www/sunders/i18n/manual/it.json new file mode 100644 index 0000000..21b6470 --- /dev/null +++ b/www/sunders/i18n/manual/it.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "Obbligatorio per visualizzare un'icona sulla mappa", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00 (sorveglianza)", + "v-public": "public (pubblico)", + "v-outdoor": "outdoor (all'aperto)", + "v-indoor": "indoor (all'interno)", + "v-camera": "camera (telecamera)", + "v-fixed": "fixed (fissa)", + "v-panning": "panning (panoramica)", + "v-dome": "dome (cupola)", + "v-guard": "guard (guardia)", + "v-alpr": "ALPR", + "icon-public-alt": "Sorveglianza pubblica", + "icon-outdoor-alt": "Sorveglianza all'aperto", + "icon-indoor-alt": "Sorveglianza all'interno", + "icon-cam-alt": "Telecamera", + "icon-fixed-alt": "Telecamera fissa", + "icon-panning-alt": "Telecamera panoramica", + "icon-dome-alt": "Telecamera a cupola", + "icon-guard-alt": "Guardia", + "icon-alpr-alt": "Riconoscimento automatico delle targhe", + "title-view-fixed": "Obbligatorio per tracciare il campo visivo della telecamera fissa", + "title-view-dome": "Obbligatorio per tracciare il campo visivo della telecamera a cupola", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "0 - 359 (in gradi) o", + "v-direction-1": "N / NE / E / SE / S / SO / O / NO", + "v-direction-2": "ad esempio per cupole a muro", + "v-angle-0": "15 - 90 (in gradi)", + "v-angle-1": "da una visuale quasi orizzontale a una telecamera puntata a terra", + "v-angle-2": "predefinito: 15°", + "v-height-0": "3 - 12 (in metri)", + "v-height-1": "predefinito: 5m", + "examples": "Esempi", + "example-img-0-alt": "Campo visivo (direzione: 90°, angolo: 15°, altezza: 5m)", + "example-img-1-alt": "Campo visivo (direzione: 90°, angolo: 15°, altezza: 10m)", + "example-img-2-alt": "Campo visivo (direzione: 90°, angolo: 60°, altezza: 10m)", + "example-img-3-alt": "Cupola visivo (altezza: 3m)", + "example-img-4-alt": "Cupola visivo (altezza: 5m)", + "example-img-5-alt": "Cupola visivo (altezza: 5m, direzione: 45°)", + "example-direction-45": "direzione = 45°", + "example-direction-90": "direzione = 90°", + "example-angle-15": "angolo = 15°", + "example-angle-60": "angolo = 60°", + "example-height-3": "altezza = 3m", + "example-height-5": "altezza = 5m", + "example-height-10": "altezza = 10m", + "title-optional": "Facoltativo", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank (banca) / building (edificio) / parking (parcheggio) / shop (negozio) / town (città) / traffic (traffico)", + "v-cam-mount": "ceilling (soffitto) / pole (palo) / wall (muro)", + "v-operator": "organizzazione o persona che gestisce la telecamera", + "v-name": "denominazione della telecamera", + "v-ref": "numero di riferimento della telecamera", + "v-image": "link a un'immagine in hosting esterno che rappresenta l'oggetto marcato" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/manual/ru.json b/www/sunders/i18n/manual/ru.json new file mode 100644 index 0000000..30252fe --- /dev/null +++ b/www/sunders/i18n/manual/ru.json @@ -0,0 +1,84 @@ +{ + "texts": { + "title-icon": "", + "k-manmade": "@@LT00", + "k-surveillance": "@@LT00", + "k-surv-type": "@@LT00", + "k-cam-type": "@@LT00", + "v-surveillance": "@@LT00", + "v-public": "public", + "v-outdoor": "outdoor", + "v-indoor": "indoor", + "v-camera": "camera", + "v-fixed": "fixed", + "v-panning": "panning", + "v-dome": "dome", + "v-guard": "guard", + "v-alpr": "ALPR", + "icon-public-alt": "", + "icon-outdoor-alt": "", + "icon-indoor-alt": "", + "icon-cam-alt": "", + "icon-fixed-alt": "", + "icon-panning-alt": "", + "icon-dome-alt": "", + "icon-guard-alt": "", + "icon-alpr-alt": "", + "title-view-fixed": "", + "title-view-dome": "", + "k-cam-direction": "@@LT00", + "k-cam-angle": "@@LT00", + "k-height": "@@LT00", + "v-direction-0": "", + "v-direction-1": "", + "v-direction-2": "", + "v-angle-0": "", + "v-angle-1": "", + "v-angle-2": "", + "v-height-0": "", + "v-height-1": "", + "examples": "", + "example-img-0-alt": "", + "example-img-1-alt": "", + "example-img-2-alt": "", + "example-img-3-alt": "", + "example-img-4-alt": "", + "example-img-5-alt": "", + "example-direction-45": "", + "example-direction-90": "", + "example-angle-15": "", + "example-angle-60": "", + "example-height-3": "", + "example-height-5": "", + "example-height-10": "", + "title-optional": "", + "k-surv-zone": "@@LT00", + "k-cam-mount": "@@LT00", + "k-operator": "@@LT00", + "k-name": "@@LT00", + "k-ref": "@@LT00", + "k-image": "@@LT00", + "v-surv-zone": "bank / building / parking / shop / town / traffic", + "v-cam-mount": "ceilling / pole / wall", + "v-operator": "", + "v-name": "", + "v-ref": "", + "v-image": "" + }, + "links": { + "k-manmade": [ "man_made" ], + "k-surveillance": [ "surveillance" ], + "k-surv-type": [ "surveillance:type" ], + "k-cam-type": [ "camera:type" ], + "k-cam-direction": [ "camera:direction" ], + "k-cam-angle": [ "camera:angle" ], + "k-height": [ "height" ], + "k-surv-zone": [ "surveillance:zone" ], + "k-cam-mount": [ "camera:mount" ], + "k-operator": [ "operator" ], + "k-name": [ "name" ], + "k-ref": [ "ref" ], + "k-image": [ "image" ], + "v-surveillance": [ "surveillance" ] + } +} diff --git a/www/sunders/i18n/stats/de.json b/www/sunders/i18n/stats/de.json new file mode 100644 index 0000000..ab6bd26 --- /dev/null +++ b/www/sunders/i18n/stats/de.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node" : "Eintrag", + "nodes" : "Einträge", + "surv-node" : "Überwachungseintrag", + "surv-nodes" : "Überwachungseinträge", + + "filter": "Filter", + "single": "einzel", + "total": "gesamt", + + "area": "Bereich", + "area-pl": "Bereiche", + "area-all": "alle Bereiche", + "country": "Land", + "country-pl": "Länder", + "country-all": "weltweit", + "type": "Art", + "type-pl": "Arten", + "type-all": "alle Arten", + "year": "Jahr", + "year-all": "alle Jahre", + "month": "Monat", + "month-all": "alle Monate", + + "areaxxx-0": "noch nicht kategorisiert", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "keine Angabe", + "area0-1": "", + "area0-2": "keine Angabe", + "area1-0": "öffentlicher Bereich", + "area1-1": "für alle zugänglich", + "area1-2": "öffentlich", + "area2-0": "privater Bereich", + "area2-1": "nur für befugte Personen zugänglich", + "area2-2": "privat", + "area3-0": "Bereich innerhalb eines Gebäudes", + "area3-1": "", + "area3-2": "Innenraum", + "typexxx-0": "noch nicht kategorisiert", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "Kamera", + "type0-1": "keine weiteren Angaben", + "type0-2": "Kamera", + "type1-0": "feststehende Kamera", + "type1-1": "überwacht meist einen begrenzten Bereich", + "type1-2": "feststehend", + "type2-0": "schwenkbare Kamera", + "type2-1": "überwacht meist verschiedene Bereiche", + "type2-2": "schwenkbar", + "type3-0": "Kuppelkamera", + "type3-1": "überwacht meist einen 360°-Bereich", + "type3-2": "Kuppel", + "type4-0": "Wachpersonal", + "type4-1": "z.B. Beschäftigte eines Sicherheitsunternehmens", + "type4-2": "Wache", + "type5-0": "ANSE", + "type5-1": "Automatische Nummernschilderkennung", + "type5-2": "ANSE", + + "all": "alle", + "Jan": "Jan", + "Jan_": "Januar", + "Feb": "Feb", + "Feb_": "Februar", + "Mar": "Mär", + "Mar_": "März", + "Apr": "Apr", + "Apr_": "April", + "May": "Mai", + "May_": "Mai", + "Jun": "Jun", + "Jun_": "Juni", + "Jul": "Jul", + "Jul_": "Juli", + "Aug": "Aug", + "Aug_": "August", + "Sep": "Sep", + "Sep_": "September", + "Oct": "Okt", + "Oct_": "Oktober", + "Nov": "Nov", + "Nov_": "November", + "Dec": "Dez", + "Dec_": "Dezember", + "Su": "So", + "Mo": "Mo", + "Tu": "Di", + "We": "Mi", + "Th": "Do", + "Fr": "Fr", + "Sa": "Sa" + } +} diff --git a/www/sunders/i18n/stats/en.json b/www/sunders/i18n/stats/en.json new file mode 100644 index 0000000..bcf416d --- /dev/null +++ b/www/sunders/i18n/stats/en.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node": "node", + "nodes": "nodes", + "surv-node": "surveillance node", + "surv-nodes": "surveillance nodes", + + "filter": "filter", + "single": "single", + "total": "total", + + "area": "area", + "area-pl": "areas", + "area-all": "all areas", + "country": "country", + "country-pl": "countries", + "country-all": "worldwide", + "type": "type", + "type-pl": "types", + "type-all": "all types", + "year": "year", + "year-all": "all years", + "month": "month", + "month-all": "all months", + + "areaxxx-0": "not categorized yet", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "not specified", + "area0-1": "", + "area0-2": "not specified", + "area1-0": "public outdoor area", + "area1-1": "accessable by everyone", + "area1-2": "public", + "area2-0": "private outdoor area", + "area2-1": "accessable only by authorized persons", + "area2-2": "private", + "area3-0": "indoor area", + "area3-1": "", + "area3-2": "indoor", + "typexxx-0": "not categorized yet", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "camera", + "type0-1": "no further information", + "type0-2": "camera", + "type1-0": "fixed camera", + "type1-1": "usually observing a limited area", + "type1-2": "fixed cam", + "type2-0": "panning camera", + "type2-1": "usually able to observe various areas", + "type2-2": "panning cam", + "type3-0": "dome camera", + "type3-1": "usually observing a 360° area", + "type3-2": "dome cam", + "type4-0": "guard", + "type4-1": "e.g. an employee of a security service", + "type4-2": "guard", + "type5-0": "ALPR", + "type5-1": "Automatic Licence Plate Recognition", + "type5-2": "ALPR", + + "all": "all", + "Jan": "Jan", + "Jan_": "January", + "Feb": "Feb", + "Feb_": "February", + "Mar": "Mar", + "Mar_": "March", + "Apr": "Apr", + "Apr_": "April", + "May": "May", + "May_": "May", + "Jun": "Jun", + "Jun_": "Jun", + "Jul": "Jul", + "Jul_": "July", + "Aug": "Aug", + "Aug_": "August", + "Sep": "Sep", + "Sep_": "September", + "Oct": "Oct", + "Oct_": "October", + "Nov": "Nov", + "Nov_": "November", + "Dec": "Dec", + "Dec_": "December", + "Su": "Su", + "Mo": "Mo", + "Tu": "Tu", + "We": "We", + "Th": "Th", + "Fr": "Fr", + "Sa": "Sa" + } +} diff --git a/www/sunders/i18n/stats/es.json b/www/sunders/i18n/stats/es.json new file mode 100644 index 0000000..776731e --- /dev/null +++ b/www/sunders/i18n/stats/es.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node": "nodo", + "nodes": "nodos", + "surv-node": "nodo de vigilancia", + "surv-nodes": "nodos de vigilancia", + + "filter": "filtro", + "single": "solo", + "total": "total", + + "area": "área", + "area-pl": "áreas", + "area-all": "todas las áreas", + "country": "país", + "country-pl": "países", + "country-all": "mundialmente", + "type": "tipo", + "type-pl": "tipos", + "type-all": "todos los tipos", + "year": "año", + "year-all": "todos los años", + "month": "mes", + "month-all": "todos los meses", + + "areaxxx-0": "aún no categorizado", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "no especificado", + "area0-1": "", + "area0-2": "no especificado", + "area1-0": "área publica en exteriores", + "area1-1": "accesible por cualquiera", + "area1-2": "publica", + "area2-0": "área privada en exteriores", + "area2-1": "accesible solo por personal autorizado", + "area2-2": "privada", + "area3-0": "área de interiores", + "area3-1": "", + "area3-2": "interiores", + "typexxx-0": "aún no categorizado", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "cámara", + "type0-1": "no hay más información", + "type0-2": "cámara", + "type1-0": "cámara fija", + "type1-1": "usualmente abarca un área limitada", + "type1-2": "fija", + "type2-0": "cámara orientable", + "type2-1": "usualmente abarca varias áreas", + "type2-2": "orientable", + "type3-0": "cámara domo", + "type3-1": "abarca un área de 360°", + "type3-2": "domo", + "type4-0": "guardia", + "type4-1": "ej: empleado de un servicio de seguridad", + "type4-2": "guardia", + "type5-0": "ICAP", + "type5-1": "identificador automático de patentes", + "type5-2": "ICAP", + + "all": "todo", + "Jan": "Ene", + "Jan_": "Enero", + "Feb": "Feb", + "Feb_": "Febrero", + "Mar": "Mar", + "Mar_": "Marzo", + "Apr": "Abr", + "Apr_": "Abril", + "May": "May", + "May_": "Mayo", + "Jun": "Jun", + "Jun_": "Junio", + "Jul": "Jul", + "Jul_": "Julio", + "Aug": "Ago", + "Aug_": "Agosto", + "Sep": "Sep", + "Sep_": "Septiembre", + "Oct": "Oct", + "Oct_": "Octubre", + "Nov": "Nov", + "Nov_": "Noviembre", + "Dec": "Dic", + "Dec_": "Diciembre", + "Su": "Do", + "Mo": "Lu", + "Tu": "Ma", + "We": "Mi", + "Th": "Ju", + "Fr": "Vi", + "Sa": "Sa" + } +} diff --git a/www/sunders/i18n/stats/fr.json b/www/sunders/i18n/stats/fr.json new file mode 100644 index 0000000..8ecc09b --- /dev/null +++ b/www/sunders/i18n/stats/fr.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node": "nœud", + "nodes": "nœuds", + "surv-node": "nœud de surveillance", + "surv-nodes": "nœuds de surveillance", + + "filter": "filtre", + "single": "particulière", + "total": "totale", + + "area": "zone", + "area-pl": "zones", + "area-all": "tous les zones", + "country": "pays", + "country-pl": "pays", + "country-all": "dans le monde entier", + "type": "type", + "type-pl": "types", + "type-all": "tous les types", + "year": "année", + "year-all": "tous les ans", + "month": "mois", + "month-all": "tous les mois", + + "areaxxx-0": "encore non classées", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "non spécifié", + "area0-1": "", + "area0-2": "non spécifié", + "area1-0": "espace extérieur public", + "area1-1": "accessible par tout le monde", + "area1-2": "public", + "area2-0": "espace extérieur privé", + "area2-1": "accessible uniquement par les personnes autorisées", + "area2-2": "privé", + "area3-0": "espace intérieure", + "area3-1": "", + "area3-2": "intérieure", + "typexxx-0": "encore non classées", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "caméra", + "type0-1": "aucune information supplémentaire", + "type0-2": "caméra", + "type1-0": "caméra fixe", + "type1-1": "généralement l'observation d'une zone limitée", + "type1-2": "cam fixe", + "type2-0": "caméra panoramique", + "type2-1": "habituellement en mesure d'observer les différents zones", + "type2-2": "cam panoramique", + "type3-0": "caméra dôme", + "type3-1": "généralement l'observation d'un 360° zone", + "type3-2": "cam dôme", + "type4-0": "gardien", + "type4-1": "p. ex. un employé d'un service de sécurité", + "type4-2": "gardien", + "type5-0": "LAPI", + "type5-1": "Lecture Automatisée de Plaques d’Immatriculation", + "type5-2": "LAPI", + + "all": "tout", + "Jan": "Jan", + "Jan_": "Janvier", + "Feb": "Fév", + "Feb_": "Février", + "Mar": "Mar", + "Mar_": "Mars", + "Apr": "Avr", + "Apr_": "Avril", + "May": "Mai", + "May_": "Mai", + "Jun": "Jui", + "Jun_": "Juin", + "Jul": "Jui", + "Jul_": "Juillet", + "Aug": "Aoû", + "Aug_": "Août", + "Sep": "Sep", + "Sep_": "Septembre", + "Oct": "Oct", + "Oct_": "Octobre", + "Nov": "Nov", + "Nov_": "Novembre", + "Dec": "Déc", + "Dec_": "Décembre", + "Su": "Di", + "Mo": "Lu", + "Tu": "Ma", + "We": "Me", + "Th": "Je", + "Fr": "Ve", + "Sa": "Sa" + } +} diff --git a/www/sunders/i18n/stats/it.json b/www/sunders/i18n/stats/it.json new file mode 100644 index 0000000..f4b262a --- /dev/null +++ b/www/sunders/i18n/stats/it.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node": "nodo", + "nodes": "nodi", + "surv-node": "nodo di sorveglianza", + "surv-nodes": "nodi di sorveglianza", + + "filter": "filtro", + "single": "singolo", + "total": "totale", + + "area": "area", + "area-pl": "aree", + "area-all": "tutte le aree", + "country": "paese", + "country-pl": "paesi", + "country-all": "mondiale", + "type": "tipo", + "type-pl": "tipi", + "type-all": "tutti i tipi", + "year": "anno", + "year-all": "tutti gli anni", + "month": "mese", + "month-all": "tutti i mesi", + + "areaxxx-0": "non ancora classificato", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "non specificato", + "area0-1": "", + "area0-2": "non specificato", + "area1-0": "area pubblica all'aperto", + "area1-1": "accessibile a tutti", + "area1-2": "pubblica", + "area2-0": "spazio esterno privato", + "area2-1": "accessibile solo alle persone autorizzate", + "area2-2": "privato", + "area3-0": "spazio interno", + "area3-1": "", + "area3-2": "interno", + "typexxx-0": "non ancora classificato", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "telecamera", + "type0-1": "nessuna ulteriore informazione", + "type0-2": "telecamera", + "type1-0": "telecamera fissa", + "type1-1": "di solito osserva un'area limitata", + "type1-2": "telecamera fissa", + "type2-0": "telecamera panoramica", + "type2-1": "di solito in grado di osservare varie aree", + "type2-2": "telecamera panoramica", + "type3-0": "telecamera a cupola/dome", + "type3-1": "di solito in grado di osservare un'area a 360", + "type3-2": "telecamera a cupola", + "type4-0": "guardia", + "type4-1": "ad es. un dipendente di un servizio di sicurezza", + "type4-2": "guardia", + "type5-0": "ALPR", + "type5-1": "Riconoscimento automatico delle targhe", + "type5-2": "ALPR", + + "all": "tutti", + "Jan": "Gen", + "Jan_": "Gennaio", + "Feb": "Feb", + "Feb_": "Febbraio", + "Mar": "Mar", + "Mar_": "Marzo", + "Apr": "Apr", + "Apr_": "Aprile", + "May": "Mag", + "May_": "Maggio", + "Jun": "Giu", + "Jun_": "Giugno", + "Jul": "Lul", + "Jul_": "Luglio", + "Aug": "Ago", + "Aug_": "Agosto", + "Sep": "Set", + "Sep_": "Settembre", + "Oct": "Ott", + "Oct_": "Ottobre", + "Nov": "Nov", + "Nov_": "Novembre", + "Dec": "Dic", + "Dec_": "Dicembre", + "Su": "Do", + "Mo": "Lu", + "Tu": "Ma", + "We": "Me", + "Th": "Gi", + "Fr": "Ve", + "Sa": "Sa" + } +} diff --git a/www/sunders/i18n/stats/ru.json b/www/sunders/i18n/stats/ru.json new file mode 100644 index 0000000..cf2f560 --- /dev/null +++ b/www/sunders/i18n/stats/ru.json @@ -0,0 +1,96 @@ +{ + "texts": { + "node": "точка", + "nodes": "точки", + "surv-node": "точка наблюдения", + "surv-nodes": "точки наблюдения", + + "filter": "фильтр", + "single": "отдельно", + "total": "общий", + + "area": "область", + "area-pl": "области", + "area-all": "во всех областях", + "country": "страна", + "country-pl": "страны", + "country-all": "во всем мире", + "type": "тип", + "type-pl": "типы", + "type-all": "все типы", + "year": "год", + "year-all": "все годы", + "month": "месяц", + "month-all": "все месяцы", + + "areaxxx-0": "не относятся к категории пока еще не", + "areaxxx-1": "", + "areaxxx-2": "??", + "area0-0": "не указан", + "area0-1": "", + "area0-2": "не указан", + "area1-0": "открытая площадь", + "area1-1": "поднявшись на каждый", + "area1-2": "общественной", + "area2-0": "частная открытая область", + "area2-1": "поднявшись только уполномоченным лицам", + "area2-2": "частный", + "area3-0": "область для установки внутри помещений", + "area3-1": "", + "area3-2": "для использования внутри помещений", + "typexxx-0": "не относятся к категории пока еще не", + "typexxx-1": "", + "typexxx-2": "??", + "type0-0": "камера", + "type0-1": "никакой дополнительной информации", + "type0-2": "камера", + "type1-0": "фиксированная камера", + "type1-1": "обычно наблюдений ограниченной области", + "type1-2": "фиксированная камера", + "type2-0": "панорамирование камерой", + "type2-1": "обычно возможность наблюдать различные районы", + "type2-2": "панорамирование камерой", + "type3-0": "купольная камера", + "type3-1": "как правило, соблюдая 360° область", + "type3-2": "купольная камера", + "type4-0": "ограждение", + "type4-1": "например, сотрудник службы безопасности", + "type4-2": "ограждение", + "type5-0": "АРНЗ", + "type5-1": "Автоматическое Распознавание Номерных Знаков", + "type5-2": "АРНЗ", + + "all": "все", + "Jan": "Янв", + "Jan_": "Январь", + "Feb": "Фев", + "Feb_": "Февраль", + "Mar": "Мар", + "Mar_": "Март", + "Apr": "Апр", + "Apr_": "Апрель", + "May": "Май", + "May_": "Май", + "Jun": "Июн", + "Jun_": "Июнь", + "Jul": "Июл", + "Jul_": "Июль", + "Aug": "Авг", + "Aug_": "Август", + "Sep": "Сен", + "Sep_": "Сентябрь", + "Oct": "Окт", + "Oct_": "Октябрь", + "Nov": "Ноя", + "Nov_": "Ноябрь", + "Dec": "Дек", + "Dec_": "Декабрь", + "Su": "Во", + "Mo": "По", + "Tu": "Вт", + "We": "Ср", + "Th": "Че", + "Fr": "Пя", + "Sa": "Су" + } +} diff --git a/www/sunders/i18n/symbology/de.json b/www/sunders/i18n/symbology/de.json new file mode 100644 index 0000000..86d8ad4 --- /dev/null +++ b/www/sunders/i18n/symbology/de.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "Symbole", + "icon-cam-alt": "Kameras", + "desc-cam": "Kamera — keine weiteren Angaben", + "icon-fixed-alt": "Feststehende Kameras", + "desc-fixed": "Feststehende Kamera — überwacht meist einen begrenzten Bereich", + "icon-panning-alt": "Schwenkbare Kameras", + "desc-panning": "Schwenkbare Kamera — überwacht meist verschiedene Bereiche", + "icon-dome-alt": "Kuppelkameras", + "desc-dome": "Kuppelkamera — überwacht meist einen 360°-Bereich", + "icon-guard-alt": "Wachpersonal", + "desc-guard": "Wachpersonal — z.B. Beschäftigte eines Sicherheitsunternehmens", + "icon-alpr-alt": "Automatische Kennzeichenlesesysteme", + "desc-alpr": "AKLS — Automatische Kennzeichenlesesysteme", + "title-colors": "Farben", + "icon-red-alt": "Überwachung öffentlicher Bereiche", + "desc-red": "Roter Hintergrund — Überwachung eines öffentlichen Bereichs, der für alle zugänglich ist", + "icon-blue-alt": "Überwachung außerhalb eines Gebäudes", + "desc-blue": "Blauer Hintergrund — Überwachung eines Bereichs außerhalb eines Gebäudes, der nur für befugte Personen zugänglich ist", + "icon-green-alt": "Überwachung innerhalb eines Gebäudes", + "desc-green": "Grüner Hintergrund — Überwachung eines Bereichs innerhalb eines Gebäudes", + "icon-yellow-fixed-alt": "Feststehend Kamera, zu kontrollieren", + "icon-yellow-dome-alt": "Kuppelkamera, zu kontrollieren", + "icon-yellow-guard-alt": "Wachpersonal, zu kontrollieren", + "icon-yellow-alpr-alt": "Automatische Nummernschilderkennung, zu kontrollieren", + "desc-yellow": "Gelbes Symbol — Mit einem Kontrollkennzeichen markiere Kamera oder Wachpersonaleintrag, die/der noch korrigiert oder vervollständigt werden muss." + } +} diff --git a/www/sunders/i18n/symbology/en.json b/www/sunders/i18n/symbology/en.json new file mode 100644 index 0000000..679259f --- /dev/null +++ b/www/sunders/i18n/symbology/en.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "Icons", + "icon-cam-alt": "Cameras", + "desc-cam": "Camera — no further information", + "icon-fixed-alt": "Fixed cameras", + "desc-fixed": "Fixed camera — usually observing a limited area", + "icon-panning-alt": "Panning cameras", + "desc-panning": "Panning camera — usually able to observe various areas", + "icon-dome-alt": "Dome cameras", + "desc-dome": "Dome camera — usually observing a 360° area", + "icon-guard-alt": "Guards", + "desc-guard": "Guard — e.g. an employee of a security service", + "icon-alpr-alt": "Automatic Licence Plate Recognition", + "desc-alpr": "ALPR — Automatic Licence Plate Recognition", + "title-colors": "Colors", + "icon-red-alt": "Public surveillance", + "desc-red": "Red background — observing a public outdoor area, accessable by everyone", + "icon-blue-alt": "Outdoor surveillance", + "desc-blue": "Blue background — observing a private outdoor area, accessable only by authorized persons", + "icon-green-alt": "Indoor surveillance", + "desc-green": "Green background — observing an indoor area", + "icon-yellow-fixed-alt": "Fixed cameras, fixme", + "icon-yellow-dome-alt": "Dome cameras, fixme", + "icon-yellow-guard-alt": "Guards, fixme", + "icon-yellow-alpr-alt": "Automatic Licence Plate Recognition, fixme", + "desc-yellow": "Yellow icon — camera or guard marked with a fixme key because it needs further attention" + } +} diff --git a/www/sunders/i18n/symbology/es.json b/www/sunders/i18n/symbology/es.json new file mode 100644 index 0000000..baea1f9 --- /dev/null +++ b/www/sunders/i18n/symbology/es.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "Iconos", + "icon-cam-alt": "Cámaras", + "desc-cam": "Cámara — no hay más información", + "icon-fixed-alt": "Cámaras Fija", + "desc-fixed": "Cámara Fija — usualmente abarca un área limitada", + "icon-panning-alt": "Cámaras Panorámica", + "desc-panning": "Cámara Panorámica — usualmente abarca varias áreas", + "icon-dome-alt": "Cámaras Domo", + "desc-dome": "Cámara Domo — usualmente abarca un área de 360°", + "icon-guard-alt": "Guardia", + "desc-guard": "Guardia — ej: empleado de un servicio de seguridad", + "icon-alpr-alt": "Reconocimiento automático de matrículas", + "desc-alpr": "Reconocimiento automático de matrículas (ANPR en inglés)", + "title-colors": "Colores", + "icon-red-alt": "", + "desc-red": "Fondo rojo — observa un área publica en exteriores, accesible por cualquiera", + "icon-blue-alt": "", + "desc-blue": "Fondo azul — observa un área privada en exteriores, accesible solo por personal autorizado", + "icon-green-alt": "", + "desc-green": "Fondo verde — observa un área de interiores", + "icon-yellow-fixed-alt": "", + "icon-yellow-dome-alt": "", + "icon-yellow-guard-alt": "", + "icon-yellow-alpr-alt": "", + "desc-yellow": "Icono amarillo — cámara o guardia marcada como arréglame, ya que necesita ser revisado." + } +} diff --git a/www/sunders/i18n/symbology/fr.json b/www/sunders/i18n/symbology/fr.json new file mode 100644 index 0000000..e929818 --- /dev/null +++ b/www/sunders/i18n/symbology/fr.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "Icônes", + "icon-cam-alt": "Caméras", + "desc-cam": "Caméra — pas d'autre information", + "icon-fixed-alt": "Caméras fixe", + "desc-fixed": "Caméra fixe — en général, surveille une zone réduite", + "icon-panning-alt": "Caméras panoramique", + "desc-panning": "Caméra panoramique — en général, peut surveiller plusieurs zones", + "icon-dome-alt": "Caméras dôme", + "desc-dome": "Caméra dôme — en général, peut surveiller une zone à 360°", + "icon-guard-alt": "Gardes", + "desc-guard": "Garde ou sentinelle — c.a.d. un.e employé.e d'une société de sécurité", + "icon-alpr-alt": "Lecture automatique des plaques d’immatriculation", + "desc-alpr": "LAPI — Lecture automatique des plaques d’immatriculation", + "title-colors": "Couleurs", + "icon-red-alt": "Surveillance publique", + "desc-red": "Fond rouge — surveille une zone extérieure publique, accessible par tous", + "icon-blue-alt": "Surveillance extérieure", + "desc-blue": "Fond bleu — surveille une zone extérieure privée, seulement accessible par les personnes autorisées", + "icon-green-alt": "Surveillance intérieure", + "desc-green": "Fond vert — surveille une zone intérieure", + "icon-yellow-fixed-alt": "Caméras fixe, à corriger", + "icon-yellow-dome-alt": "Caméras dôme, à corriger", + "icon-yellow-guard-alt": "Gardes, à corriger", + "icon-yellow-alpr-alt": "ALPR, à corriger", + "desc-yellow": "Icône à fond jaune — Caméra ou garde marqué avec une étiquette “fixme” (à corriger), indiquant un besoin de précision ultérieure" + } +} diff --git a/www/sunders/i18n/symbology/it.json b/www/sunders/i18n/symbology/it.json new file mode 100644 index 0000000..cfc6d25 --- /dev/null +++ b/www/sunders/i18n/symbology/it.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "Icone", + "icon-cam-alt": "Telecamere", + "desc-cam": "Telecamera — nessuna ulteriore informazione", + "icon-fixed-alt": "Telecamere fissa", + "desc-fixed": "Telecamera fissa - di solito osserva un'area limitata", + "icon-panning-alt": "Telecamere a scansione", + "desc-panning": "Telecamera a scansione - di solito in grado di osservare varie aree", + "icon-dome-alt": "Telecamere a cupola", + "desc-dome": "Telecamera a cupola — di solito osservano un'area a 360°", + "icon-guard-alt": "Guardie", + "desc-guard": "Guardia — ad es. un dipendente di un sevizio di vigilanza", + "icon-alpr-alt": "Riconoscimento automatico delle targhe", + "desc-alpr": "Riconoscimento automatico delle targhe (ALPR in inglese)", + "title-colors": "Colori", + "icon-red-alt": "Sorveglianza pubblica", + "desc-red": "Sfondo rosso - osserva un'area pubblica all'aperto, accessibile a tutti", + "icon-blue-alt": "Sorveglianza esterna", + "desc-blue": "Sfondo blu - osserva un'area esterna privata, accessibile solo alle persone autorizzate", + "icon-green-alt": "Sorveglianza interna", + "desc-green": "Sfondo verde - osserva un'area interna", + "icon-yellow-fixed-alt": "Telecamere fisse, fixme", + "icon-yellow-dome-alt": "Telecamere a cupola, fixme", + "icon-yellow-guard-alt": "Guardie, fixme", + "icon-yellow-alpr-alt": "Riconoscimento automatico delle targhe, fixme", + "desc-yellow": "Icona gialla - telecamera o guardia segnata con un tasto fixme perché ha bisogno di ulteriore attenzione" + } +} diff --git a/www/sunders/i18n/symbology/ru.json b/www/sunders/i18n/symbology/ru.json new file mode 100644 index 0000000..34d078e --- /dev/null +++ b/www/sunders/i18n/symbology/ru.json @@ -0,0 +1,29 @@ +{ + "texts": { + "title-icons": "", + "icon-cam-alt": "", + "desc-cam": "", + "icon-fixed-alt": "", + "desc-fixed": "", + "icon-panning-alt": "", + "desc-panning": "", + "icon-dome-alt": "", + "desc-dome": "", + "icon-guard-alt": "", + "desc-guard": "", + "icon-alpr-alt": "", + "desc-alpr": "", + "title-colors": "", + "icon-red-alt": "", + "desc-red": "", + "icon-blue-alt": "", + "desc-blue": "", + "icon-green-alt": "", + "desc-green": "", + "icon-yellow-fixed-alt": "", + "icon-yellow-dome-alt": "", + "icon-yellow-guard-alt": "", + "icon-yellow-alpr-alt": "", + "desc-yellow": "" + } +} diff --git a/www/sunders/images/button_language.png b/www/sunders/images/button_language.png new file mode 100644 index 0000000000000000000000000000000000000000..746b2d1a852a007c940e5da8e803b23b3f7cdbf8 GIT binary patch literal 964 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRwj^(N7l!{JxM1({$qWn( zoCO|{#S9GG!XV7ZFl&wk0|NtliKnkC`vYzPQDKeE@8aVb7?=Y+T^vI!PM1#g&j|?? zIadGt+-!SRtH(VK?JYA-c;uukP7Lf-5;Rp?peic%FVpMNkr!TNZsEPw9c``Fkq#oQ ztZiH?W+>=+_{K;q?(}V7^EFL6E%EZg!ZUlW|F#n^KJJivK5bI@`JZQZKA-!(`WV;6 zAL(Vr84@>Gzc4e^G5Ik+Uh4JrRZ%IM!pSo}liob*z3F=(FoEI3#-bP&x9Ls3|F#_# zHL)+Zo%BWN1E&C^?t%-RmoqnPJ~01)*n`3ZjtG`Gz0g(j?_N!O-ep|fIQhVmnO9YF z%{Ln#ShU3UfQkW=53_W`+yjmZjBziWVjHeD2p`Ztkm$L$!ScD?xfCPzvu^@kyqPgG zmr0LtKGS;U$Ojb(B@Kybf(1Ml+&QM3^BeAmuYLK~a`H(TMm`39#`i9PA#DGc_OaaK zy0CcC8P-o>4~iemnYs3@-$6_Bd_DQ+pLedzF|*1`llPMPbgy6Jbgg89m<4|gZ%($^ zEB;*ucR~-8A22oEotRem{OM|5fv4St=VzUoa!}HE_Jl8Wn*;ApJ^x(m+|J*Pat!bP z%CW!Ull5iVu5#A%ROz|e^(xE;#cN~izAv6x%Q#`#%L*Cw^~*AUv2EBpIr+T%0b#}p zS&vOO-|Q`vQO?X2asB@`u{u#t=$Wc-dyiDkc zvqhT&^;JA$yn}6ZGj%!`jdwHjFs@vZ-uP2*gZzyN`XY6)K0?p;&S#KgWV^k#l`+BL z(z^{Obd6`TUGx0K`-8DUYsD&arh9zahBxxI{yM9Zp0;tx)dTiZ$`aLLg%dAhK5SXv(0kyYk6N)@ z#<*(_PXc7j>_OpfEFEak-aeD5hjl2vB z94rp^Q}3KhymKyd!%?P+d*@jAn0g#-=44x3UlGCfx&Ah{kwod#g)fpsxmZsJtcYk? zWNe(a?1kO}omDx;-R(tEl2)Q?Y^39R4=(cCf9Ks!mlw?2THO6!^p-JzfTydU%Q~lo FCIDtYL*W1b literal 0 HcmV?d00001 diff --git a/www/sunders/images/button_less_gray.png b/www/sunders/images/button_less_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..309c9f7fe44ae27194344c5d36047822532b884e GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0y~yU=RVZIoKE&7*+=O#W652uqAoByDW2=gfnKA6MA}UY%$0XOeBUNIQPE&vl1ba4!^I6ZgrMZp6K z9L|-o$KJ{;yIm^v>+HJ$m!Ly?^*?_;#h(v9Fo3a>?p@&aA5> zHl6m!Y;$K^nX=wVQpd*Y`2LcncR@=1EAt9>Z}2nOG$-h6^jG!PC9Bq(S4evNl9$ty RVqjok@O1TaS?83{1OU+UN`U|X literal 0 HcmV?d00001 diff --git a/www/sunders/images/button_more_gray.png b/www/sunders/images/button_more_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..06168f79d464efe19b30ba8b188f0e05aec1ba95 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0y~yU=RVZIoKE&7*+=O#W652uqAoByDEak-aeD6Li-HFf zIGii*o|l|)R?;fr_vP1LtC|??OpgdGx*1$NZ@TI0+o%5@sJ)nskD0|RG)M`SSr1Gg{;GcwGYBf-GHz+U3%>&pIs zTS~x0=vbf_I|BoQkEe@ch{WaG^WJ<73Ifa*su=9A-21e0=v}M4>tJ zRo62xFa(qY`2{mDGBLBTvU6~8^YHTV3kZu!$f&5QYiMcfm|IxcI6Av|`}l`PCnl$t zR@OCj^h}yMW7h1s^A@jOyJ_dX14mDsI&=Q&tvmM~y?FWd{pYVgfB(H`H+?Sy1H%DN z7sn6@N!EkyN==LmYzMmK1Hav?ZhPbFA$aNgKmW&kOYeSvX2!6fWU`7o!-2|Mlez0H z85+)(xXtw6#&F>T&zhy-Yzw9q7EDuR;QMUlko#V1HG{}m8}V75rx-N0e~!58|Eg=} zQOAZ;;geL3-}fx%O;~ZSa>hN6qVlz33lz1Rt)ncXUZNfieiX) zA`x<#b-}0EmxY+mTQVMa;;;9+{r;yQh66{+C)tQH95_*1wbhP+p;q++Ki_nvz{?g- S&oVGDFnGH9xvXkD0|RG)M`SSr1Gg{;GcwGYBf-GHz+U3%>&pIs zTS~x;e|n-s3? literal 0 HcmV?d00001 diff --git a/www/sunders/images/button_search.png b/www/sunders/images/button_search.png new file mode 100644 index 0000000000000000000000000000000000000000..4258d24448f0bfc2e7f3556a31e8066be3219848 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4rT@hhF#%r?HL#t<_GwMxH2#>e0=v}(4xrg zzv>tm7)(ln{DK)6nV4DF*!hH{l(cm9O-#)ky?p`#gF+&sYwDYtTc^xhv}OCwJqOR7 zzk281gGaC5e*XINuW#JquM7+fn>}3|LnI_q4|awfGGK5$I6dIhx*XSotjb(N3nKi6hdt#bF@PowLVF|J| z+eE(j1&H3=V|vs!r~RD3#m_tMy=O=l;gvhRe*4!OFW3s)#KjIw))Q^`H}lgU a-br_4Z#abBb7Np&VDNPHb6Mw<&;$Tba}N*z literal 0 HcmV?d00001 diff --git a/www/sunders/images/button_stats.png b/www/sunders/images/button_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..22210f59a4e44a9865c56d4b2efe37052dfabef0 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yV31;9U=U$pW?*1Q%rod^U|`S+@CkAK`0fRf=-8(4 z#S9D#j3q&S!3+-1Zlr-YN#5=*3>~bp9t;c&oCO|{#S9GG!XV7ZFl&wk0|NtliKnkC z`vYzv5k}#Qw^BqH7#K7?T^vIsE+<zWuC7#KWV{an^LB{Ts5E1*`c literal 0 HcmV?d00001 diff --git a/www/sunders/images/cam.png b/www/sunders/images/cam.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b458abacd80874d2907e8980a5a30f5359faa0 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nMV>B>Ar`$$uXuZe1j-!$_}=#WxyODzy?Z@m=L?FmI*EJ>3V7)lDe?4JhVa@` zd$(+I)om)%Xq~vLXW~n>?#M^LR@~O4~}A58JK!?dKQs z$^7#wDT!LtU>xsSxctIitFA>8yq8RoFl5f;dh_0M!h(ejyB!4h_AmME)^M`ZaMH;X zzXhvSiTv=sQT;*S>C@E)>cJWt{f$38zFxj%e&%V;pW#ta{y|$(Se?Fly`&4A6&a7YazqOP}0xdu}@is9USXyys4kM%q6*LF|M zzP4%4h55X8FJ3-7@=>`Y#>)N2S?xz3Eedb{(@wc97AwoBb9%|rt-Z0mzMHEh^S9`B zFJH(wuZ``*=ck(sy?JlHDx2{9^TL%E?KTc+07Uy8o zV|Y;Xx+HG5Q|Vtnw>Brq`SFv39+m9ckgF{&&2ZWzE&so|-*RqE)k7VUB2%Y5?fI+i zx-?b7ka^;)zzmBEHu)PKIvB5%WL34Y(!I;t^s%$NBzFIqBM~ak+ZJR={hMU;%~W>T zjrfnd54yQ8S8X_~eqio_$FU6oM`OeoR;F~#yy0(P`Y2eFp^i~jn5}p1j@@$@7#J8l MUHx3vIVCg!079v1m;e9( literal 0 HcmV?d00001 diff --git a/www/sunders/images/camAll.png b/www/sunders/images/camAll.png new file mode 100644 index 0000000000000000000000000000000000000000..551147a399379783227496bdcc1badd463c40b39 GIT binary patch literal 1547 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12#bcMmZ<<+gc0^tTQ}a978;gpPinc z6MS8=eSY!#t?OkwI-TcUTv|LwBUq|+oyS$9l|n*Mtl1Z5Scw|#+7^&`bz4u^YPDq? zy#l^V1%tNNNjL?EI^?pL__n#-R6EA?cY~j2rglu};*{AlZeP$5aQb)S*!TaIzZ0$= zQ}WyVG4;K>{r8P^R?ltU+lHTsIitqc^>}Uzv)kQ?vwSNF4tRy_+K_%^_=|geNE%Yq=lPNh;&H$q}=|CQPveZ7jEbM`8&`?e;nT~b$neo@d0yZis}$K)5LTxUDn zH=aw+v))i@*DTl{_Vl^2*v6>6R@;q^oO$){X}_^c_TmhV#-cq*{-)P1o0U#jX8(5C zw}w7oV{0;9Y+on{~`}4Z{ zjM|?%*LK!_`X3+~EBF6km5WM<%|h+03)9?JR2RvvG%vqw_ED&FpKeP~r|W-%sT{iJ zoV$O2EjQ7zn>i)uRnrTlBL7LxE?#mwB zcBm%!mf76D^Z&iuUbAy=b7=gY*Vp9s{d@HOXZ7J=pLZ4>iC^S3ZaYWi zUA;Q@Rw>WS?VfXAs%}g#X4SWt6nlKxiQAKm_iBF2S@-64Q^^g}(w;qAEGNH8^DiSvH{~l{hVSS*ob3OXLy@H~xA@`VFVETc?R>MpulVWB@ExDtXdks()myanxyHwL zyeaMOf$QR{zWvy#vo)}H-s13=_XN@_OuAoBkKcKG^Yax~7k!Db^(wDnK72DUCiI(q z#e3N^9#hQY><`^y-{<)2t{~I>{h4c6gJRd*4YT_C|Fgq-!_4!%3ftccS#K%;)+)%i6)9dn0yEE0%1)DY%N%K0UXHVH)6?|v93FkAda0?wC ztHo>gOnvj%Zf|SCvP;)_o0m-soA>gkWqel7!P%2LW_DMyCLA;2IjkPDpNA(mv$M9- zx|sRCxmRNTzayMXGfr2v$V75QADo(UZl9w@`jkUqHBPLPoZhkBV7nJH@jtuC>xtr4 U){}x67#J8lUHx3vIVCg!0D_bK4gdfE literal 0 HcmV?d00001 diff --git a/www/sunders/images/camBlue.png b/www/sunders/images/camBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..b399c0a58c33c82cefba2dfbe23971c142d7f9bd GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nPEQxd5R2ZWSA0E05@n8meE<2(n|D4YxAQK2Q_9iKb%{ufkZW4NvYVAPQJk~N zQsSP{3*X%;fzz8_q?BrCUDA_%C8XIHQgR|VH9y29A#dgDb#LEU==-y0Uc55v#{IXI z&(613{`+6)*2Cwg!Sdpxz&ypyD61d=jeSiq_guAq?nvg-xFEPdxBtTv=g!G@5AXSt z^teJxK;jb1>q&y=-o>7pwx!WLMfuqNsaLvtydTdze=sh4-j{95Z)^#1*9v|fQoc-y zXTe_eW~0)SE0-jGgshQ}`4OU$mFb~)pln%H*j@{lXRoB>wyjUOp4PoVuE5Gi(y76& zc5~`$C7s~KnTMUEE~(8DDY2J*?)6^c{C#%o)&MWfi+{Kp`lp8nPv$tU@u9}`VAvCH zyV!oWo&PLOKYxF2&Wu+pUH`?c@t0B&d%3yGM011B$*vveKE`@i)Eb^W@H126%}k&i#A4vHsf`4$d)cG`%x69ua zZ?->u_Mgt_$5y)0$y>~hMv7hLe9aUqETUd}YaMUkWRBvJbkS{#cYH3{lXGUqr<%z5 zCKfj&lFOZ^C|}sc)s1B(TdLi-{DN_#}Ug>$6XKrJ9SCcoyiTPB^{WBl5$G9KR5rGBfoF zto$!iV_!`c{ACqnvgGXlUy3cIj?TB1tXFoeHENn(D!8~=n9HI2rG=oUj+E2orp9^f lH|IE?`1Wy=9>abHDTU7)9u)OkF)%PNc)I$ztaD0e0szPDVb%Zu literal 0 HcmV?d00001 diff --git a/www/sunders/images/camGreen.png b/www/sunders/images/camGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..6635468c687265bfc207264715bd39f8329d337a GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nE>9Q75R2ZWSG+w!0%eYWd~f;v+?l;keT-*aVs_JYKGd_QNRUPKhMq=;M#q7y zz%AViwhMY(S*8#*Rkvr}w#>lU7dTWFyROr!c4!ls_HxN%lkey5?0mkZqwSb`?~mJm zE&qRREIv11S*TXCmtpgn1Nwn3I?|mBW@wmrUO(vJS)^>2VIY`rMD_fh?Q?zyOF@bZlI>r7p8}N#TQ>z!N1eyS8t*7Ta}2@a)Nl)|(G8 z`0?I%bvH2*+VryYS32)EtG_NzW{|PnW{=RtB`gx&7M8?{!6?>T*`cJP5kX@sZ@nNgdTH_w= z>8m^aZn@9@bn>^I>ay2X6Y9IFwEbEw^MfWUsw8G^KG9RSrbatIOYh?DFHFCadR>;- zuC(Vjb2tC{{hW^AfoYCm(N|;QE}Tht8_J`|UG?c|dOnN)a}TZO^IzPzwExr4Tl^|Q zF3Lu7kHx16UFE+mO>P|f{G~eP?ZXvsrUXQ#TG*A$o>KI3jg_zW&u@RC4ocRq;xTvM zz0>m6StsLT?_RL+9hnu8;Ks=%94uj>b$a2!*CFiM7D3xud%o?kzBbvME3R_amFU86 zuF^NfG9P@nUUo_A^x{*=94wkogT9sNN6vM=UMj-w=M!;DMkDu8LXPqG$>%M9y%qaV zozt>@D&P0FiffIGoz&C%cntUbVKaJZwPw?*v{uG7n^t-3;tNt^UHiHGoK()-{lYUv zJnR=nBSnoOMo$LbaN_2~)iG6!fhyEx+`|Up!vh k?e2V*W4?b{m>!5v^!{?FvvWrg0|Nttr>mdKI;Vst0L2_y@Bjb+ literal 0 HcmV?d00001 diff --git a/www/sunders/images/camRed.png b/www/sunders/images/camRed.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0e7ccec41e6867680f51283c1fc5e9885ddf08 GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nPEQxd5R2ZWS8OvTJIWmY_&#=?&B?{SvqOYx8kb%5y0~g>bE(jlAah5@B~F4h zl2h`OA~tUA;Mk?n5xmy=IVTfEcTlE4jj4*GSFYW_Wh8x_{C01!2i+dY^2U zE&u-WK6km2pm!$AkJUC3ajoVljUrP-mKLh#6s=P+p32V4#-w#<(wWJEb~3yBK7WzD zb$0p_&h_l~S4k-?FALnbuQ4P>ahd&+tzCPcy?rLUbZyo&7xsSTa6RW)cD{RlS4B!V z?0L?%%wM^8LaVJ!lvxIUe^QH%iqisFafbJkvZU<33-7(}n{eBzC36Z-)^S!vjTwPg zH!}JkShOgYH_Y4ikn+r3KRY_Rop1QZO=aO;yR}ZOjA_H4udHWwc_cpFXPf^iIC`aZrQyp@c$o~({1MkZe8zMv!(0U z`G$kGv!B@*Km4wwEBybKmDs%d&W9u94=HmWJG14^_s1FL?OwP3yVRebez|sv!^J^Xwzdqqgwt%Guhj+dYLBKjuK*V-qp z^2C#=?GoKiEY@ZMRu|ef8gv-&wmfva8F|b~Kk=GtL_vl2t-_hRKEAlV@lW09%}4j| zYJ0FROl$l04<9cuXw6lvTF>3$u+*qW=SKIrXBk(vdolm-;fV;5&rmKY;68b~|7Xb) ztpof9>q~StNKY;M$E~YnbpCkP`sowjwe;@axlM=X!2OtR>qO;PcLBSbab^;BH~U_5 zESVhgW7aew*;jx6)%}0$EU>KcYLI`)3i0^ML35TksU&IgK3F|P!i{fpm7PS9-s|e3 luAHPHfY2*-8b9#1|71s z>c^U8aNX41a^%8NiDO}>{@Aarj(R!ylfC+srgTe~DWM4f DD&2pp literal 0 HcmV?d00001 diff --git a/www/sunders/images/colorBlue.png b/www/sunders/images/colorBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..291756badf04524620277a88d34fc994ea0e4a50 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRwj^(N7l!{JxM1({$qWn( zoCO|{#S9F**Fl)kNn>^e0|NtliKnkC`vW#XJ_+glQ#p<^Ffa;xx;TbdoPK-8-tSNV z!-0qQe+S>1bm0M0p`xsWtcL+lpB&SBB?Her-1i*K+-Lek_!#JEF<*0PSoZ#FWvg0g z!2|09>Sm|sIycyT-q5I$m9b>OltYfYOjjf~{ycZE(XGMidu5evk@fFKPi>XAuM2sh zdC>Lv^MA|EhMFI!OX-+@esOi2^t$)=Ry-<{DZY8lLp;lEvuS9r{Iwkc%8T2QHd=-7 ziLYi3bXII_&?%pKSf`wWagu!*m;b~49Ng@s`+r4$S8ZjUna8`=Vuj4NM-3&}6N>U@ z@W}hYdwuW o1+0q6&{fIon=X3e2*U^NPUhqqSzFml3=9kmp00i_>zopr0GOYgmjD0& literal 0 HcmV?d00001 diff --git a/www/sunders/images/colorBlueAll.png b/www/sunders/images/colorBlueAll.png new file mode 100644 index 0000000000000000000000000000000000000000..0a22f1d787e88415468dd6168b6e8886372850f6 GIT binary patch literal 1222 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12#bcPVGCoQyCc;Sb{xW978;gZ=If< zBN8fdyx!RQ_RY0h?k@eps9UPtE4X@D*UE`4EVCEH8)RH~#4f~Yvf_ur5%#2u0v}nM zIOP=r9Sm4?RoX%f6h8?#b_6nBWD1?&)Vgol+r0AK)|)@?s9V94w<~(v%DwZ|p8t7v z@Bf_YbGGG6F3g$SJl8xS6v-Ry5P#*!(wj5(vT=O4Uv_!LCoZ8K$5#I- z@Jo&i7T+I#$xvtF)P(KckNUW#et$N_VC$*os|%H{Ztu~Pe|hDI{#~`w_gf4nZQQST zV6Q3{tNuLc&^WQUR`c1rBwuFSxY+wa>+rMXzUQ8HPd|P0TacwGWB+4)>DSM$eY9+@ zIJvF$!#UgDybeLmu)9K?$8Jx2zJ;e-{K1u;JdS;~qREde%&$JxvY+d3u=Sx6*Ln}3 zz8jl1=J~DJ)jBy>>h<@wAJ1HRmdw1{{-VuclEa%7=T4Nk`gqOH^nIwhU}-G-f~rNQ z&S+Nh#YaC)4f5oBzIzhi{7vn}%S9(VFExC;&hScDW#LI7Uw7r2UHhlY|M%&!$o1m7 zwEWDhyN*tV-LdP#mfVQl>kte$tDzbL<|N70{k!3dj z4fn>cyA5(}-P{7T%f6+2+4@z5{pPItzE3|Fa!k|x@g`wLd)6_7gY$QaJ;~-T53A7d z6K0&QGx7PwfVIVy}XotZIyS#w}#q(ZKtQ`<~;q` zD=YcDK;&HY0rx(mlH(E``;Oe5DtGOycIw?dL7(Q^yw>6P@a?gydcuNM|X z#jo^FOj;=2a83LA=bG~$GoDRhcyT>fioZS6MkZ}feBwJ3`Sa&K1iuPC5vU?E-9;&L zb4D=x)T5SrJ{2hLQvC7h#f95BQBBjz=K8W%vHy&lZQ7@5%pEA&nd`39@|!(q!Q$&F zZ{MwMuJGhgYW`|Iy*Y#$@PUb?TBsdMkr$w#_#8J<+8#@)Ymw3z?b&B`_U zOMmfi`(my8EoHXbGVh{-4tCwpV;#tsq}3d*+08ZQ$ft4eg89eiSU-IIE$3-wMl| zfBRDFH-73A3fX?-)iVY4+glVXUHhWftkIYI__Zjt*0AV~lv(}K>nZ=*PDg&;Bx*J@ zXkk%8Wy3A4_q?-@*Sq&A1x7!8df*d7uvW;L4VJI=h*${=Gw984T6pTmr@K31ZgOtZ p;rK4Oqx5!U&5HPW|C|4_&)y^U;*g}OJp%&+gQu&X%Q~loCIG67RA2xA literal 0 HcmV?d00001 diff --git a/www/sunders/images/colorGreen.png b/www/sunders/images/colorGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..ca9272430da412d7082c4fe3d2c189b0b068e5b4 GIT binary patch literal 396 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/dome.png b/www/sunders/images/dome.png new file mode 100644 index 0000000000000000000000000000000000000000..f017fd06f8564dc4cf6ace7dbfbd0f001cc3a0c3 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0{SDr48Ar`$$r|iuRP82y-|9{{p{rTJ&x+eh zgTqNoQ)Ky$%-Aj6^4VU=s;WDVFMML{w&BEirLcYa%GxK>U6(rWYA^8C+_2Oi2? z)GJeEVme;xa^i5$3=YMBiBp7bZ<^S5?7?zwAs&{NMN&^ciQn5Bx%BFahr8AZ1zay( z^pR!yx)}ATR^69B30&Jg@6WE_B-OtGoJM}-?`)OKs@Z(`z3;7G>&MFcW5YKtTb+w% zIz0CV&6A2)KgCd4jg6!2@ZP`2CQp6t(sx$Fam`)6@9*z1{Wva=!S1_iLt)(Ggomlm zB-PXWwHWK))O^2M!+G~%0H@ix*WMLxpXD|w26Nsh&#`-M@8@@8Md(!FzE8gzTF;jL z>RUYF+`nsfRPh5I+&0}8+`}3ulrmvrvZ)#^=IwfV=YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12#c^E7cnVc>^QmZ+Kr5~|7Xs;IWy;S_kne<-@Va$5>t1+GCl5I z@iXhzCXWc4?!x^O{2==zoqF{0Lwn_IqxZ@1|_`OL;7`oYXRRrg6- zb+_#4`o1Jcf9a7^ksi@Y6Y>gVS+|v~xKaQ2@c#I?13#@hOa8X~(Ng41&YvP1FPr{4 zd+(EQ)>9XED)DD>RWD{!eqUO&U^(aih0R9gTaJkK?sc0ovG1`=$G1o7tm<}FF;8YK z`}pW|;61xPjJwOfC)tava9iC~{9Ep%v+|A2oo#2CJgy&~=R3j1q{(=9$Hi6C3a?K; zqn5*0xA)9hRrcK3ap#tvUo-bXLRQP{drG&y743ch`%b*yhsWCws|0tqY+Jb^(RowV zC#Ko5tC#BunWZS$SH84Qap8Z~udfu{{B{3dqt0tOfnUFITw8l&8E^Db%kmTQ zsWxSN=a?Vt5OQVQ`8=qzTC(h1{tMZcixzzNdp^9&X1eF+qn-Zd_nz)-X!^CM)9tL8 z(e};0>(73@^=sO;+^O$t_I-HpSf1m!m6TCTMAX_9bN9up(p@X2_4CzJA^nh7_5ZhS zVe*#?|J2ozdN6yB_m!E^A5wDlvR~JpUp@bWw>|HoZ7x#Q=0##NPrgpwx=?xP)svA; zCtuGjx>va5NbAv*Wij<1<_66#%juqN{%^(H4YlbzAGW+cyLWTW^=DC=>hr$T%-JdO zEMia9?$4^ln(Z5RM9%e|Z>fHCMr5ph&HQ%$pgS}AuABEvQDJx6m?pMLP4|=8wKGg7 z8v`e7%GzYiEyld~WY&y58)j}4lkn(Mnix7ccHi~`H{b7b46Agw>h^N&63;z#UElog zEqQy`JmXb&?wgypy;IJ`AC{TV<@0}Yv38ID%!4&gWge$(_;>1O;lDj%{O|s9bl%EQ zxHgw7qtE}UN%*#qvuqra8QX3K2u^a?e0Ei%1KTX#cHSjZR;xliUwcDm{4v2MM`1s65U+H%i#XQ$J|9zCV+r?aJ`@>nT?x94M zS;YTqyWcBc6Ae+O-Z?WdZ7x$_T_x2m>OCPVF`r0&h`Rd*6!t>`pn;Ls}M`q)uGIM>#o-ona z?;QE}nReZpk?bE3QQh_YrR(PNafLPVmm;T6Q0_`Qy+dTl+vP1qRTpz^ik=c*^L$>@ f+Q-YxfBetQmn!_)r4zuwz`)??>gTe~DWM4fN61$H literal 0 HcmV?d00001 diff --git a/www/sunders/images/domeBlue.png b/www/sunders/images/domeBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b726c3ef2d758b2d83e863ccb2ba6d0b9a0c9c GIT binary patch literal 606 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 Y?rByFzj1rUz`(%Z>FVdQ&MBb@03ZX(jsO4v literal 0 HcmV?d00001 diff --git a/www/sunders/images/dome_z-17_h-5.png b/www/sunders/images/dome_z-17_h-5.png new file mode 100644 index 0000000000000000000000000000000000000000..aea28bf9102b995ef5e5162d775f9c3ff56561f4 GIT binary patch literal 9824 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/dome_z-17_h-5_d-45.png b/www/sunders/images/dome_z-17_h-5_d-45.png new file mode 100644 index 0000000000000000000000000000000000000000..3e46629c137ae9ddd2efc1e60b7d02012c8850d0 GIT binary patch literal 8002 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 Y9~fno^Cs~yFfcH9y85}Sb4q9e0C4qba{vGU literal 0 HcmV?d00001 diff --git a/www/sunders/images/fixedBlue.png b/www/sunders/images/fixedBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..4871b2e091bca7d8e79f0fbf747e2f0654c57ce2 GIT binary patch literal 934 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~+WltB!5R2ZqQ)4q`r-~e}KmU8~m04w_k!H6|8a>;WzB-g(RQ~WrtN3o&&5M-6 z90epb9=*At#TPD6w)<*s6UVx(i4R&AX{=sxc+;o>Z~#7sLK&7Vwul?;x6 zWVPvemNH)H5|Y~sV|J=7Sjio9Qb7Jq_olU1kIXL-IC`>c&!6STFTelax01W++q&nE zd}rtDoqzNzo0<8~hq$J-{Fxb!9!skgm=DYgvCV&%nRIXRimrr$9Vd=Ev+CX163$x2 z|K#VdxneEy9+Gtr!)3yY-W4?6l`XxhU_W7stmjUlf~pk)xPf@$IQC-<*>d z1-I`gJH9Y?^1-{4&L49-cw&d|wg+oVBsf>kv7fYHsb_lnd5iw-QFCtIKXcWZ&zi5- zFnRr&m%^OgJ_nWKV;D}A{Qfj$_UsZp8Q(=(O~E%V3b|9-Zd{PZaycMhEo v6ZpQqL1D?KgunICj7uf?kH$qY)-x8SM(2yC`^YjdFfe$!`njxgN@xNAC)c&7 literal 0 HcmV?d00001 diff --git a/www/sunders/images/fixedGreen.png b/www/sunders/images/fixedGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..25e0e804554dae5455b56276675e011875b7eff8 GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~+Lr)jS5R2ZqQ{!`jLuHQJKfibTTiMdG*T)V`DBXQA#l`5c)Z=EM)*lX2%#%bq z7espWG^p)cF}o?_ig@jX7fMD#$&Wg2Zx;N&VZkIHlN5~<2Z`jz{?TTh+1|UW^YhnsYz@p0nIP|HM2^EtVIBy!Nkzjg>PvrYUtQy`OSn{p%l*oLoFC zFV;#O|H~P7y5`^t+s@T{R2iL>9E@^4hFwm3m%Eqw|0b6w>1kIvi@Qpv$Em9@y@~uM zVSoFvjMlsZ!T%;5V7RY-Z^7xz;}Zg1{nHp4dM~Qzo8>K8qxHfm*}(o#;~j(JZ$3sd zRj=dy5bCXeC_L!u+&ZrCN}0U-XAe(2w`$^g71gIfllcDbOtky`m|btm^6Xvq)z_bM zES(~h+<$q2`-ze_>MBg#dIeM3Lnd{8GO4|pFQL^l;j{PWoGY^wx6Gcap7i~(cI0K% zV3rk^ol0hL-izKiwd8o+KA%0C4y@yfiQc|T?alnCWivSraG42#tf0=X_H3n8s@=@J>;pwJT8@B#)EIVTUA!gb9{BCv2w7qAI&ZgYG z5+~9%xjwh#)?TOIJLld>-Zpt2^K5pOiifY3Z(*DDBKxM_t<#rMTyEApt*zU5USFy& ze(p-vJPSCx3*#x4wUJF+=?EyHK`I?*BzAR5ngulB~EXz1u7Qvcy-lmwU@T z)T`bopS5iQPs9&#)ucSm34up*(|*`bZD>kf94mfR=!5#Lf>@s~Tg9F+FfcH9y85}S Ib4q9e0L6E=Y5)KL literal 0 HcmV?d00001 diff --git a/www/sunders/images/fixedRed.png b/www/sunders/images/fixedRed.png new file mode 100644 index 0000000000000000000000000000000000000000..b406e897a0c8750eb13b4cfe04885aef7eeec2cd GIT binary patch literal 934 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/fixed_z-17_d-90_a-15_h-5.png b/www/sunders/images/fixed_z-17_d-90_a-15_h-5.png new file mode 100644 index 0000000000000000000000000000000000000000..5d3bf0905a80c0a035ed733ca8eb6cd57eb09cc4 GIT binary patch literal 6652 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/fixed_z-17_d-90_a-60_h-10.png b/www/sunders/images/fixed_z-17_d-90_a-60_h-10.png new file mode 100644 index 0000000000000000000000000000000000000000..1de1eda47dd75cfaf130ee5d2e10439503d57bf9 GIT binary patch literal 6412 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 VMssKGVPIfj@O1TaS?83{1OTQEHbnpc literal 0 HcmV?d00001 diff --git a/www/sunders/images/guardBlue.png b/www/sunders/images/guardBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..8a74bb25638c00ab9ff3f522dbb93a67da9c4979 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nXPz#OAr`$$r}$=sgiEx|FMfV!r}5+XI(4^3IvP z-*>NPTT zGQ=-F_*dQaT+IB(AMMptqjNb{{AS7DCQ8`sc%l*l%dH%|sqGu*Kaa_3e>q3Zb z=BkUf|7t3W8~0@w%iUehx#;1is-0#pJ6KN5JCk$kQUA)+eScNE-)giSHaeR&drTH!BfAM<{jja}}i51AW{1Rh-PR4uppyNKn$ zH!aU4Wmo^4yeV4#@7jFJ^KEkF>+hWY^zxvT(pIa^Ek|GSzp^M@A?D1bcmMRRX)2e* z#Pj!kU}z2U>QsK5`sjCl?z8rLVtn*O91}Eee5o^czkhYfa=Vla3$7%KTp)Qlws~ghHgvliM}FNn}1&azt8RW;*zW0Cf3Op zuO=DXl3!{qwx&Yxb!$A=uH=KE5#5b*Hwvum+{5%C)YGfY?P{3p{QP8x+iho(IPaEh eFcxFbXH+}F7kj4o*?9&A1_n=8KbLh*2~7Z51dYA` literal 0 HcmV?d00001 diff --git a/www/sunders/images/guardGreen.png b/www/sunders/images/guardGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..910284f900f39d5bb1e7d0da84363e8db04b886a GIT binary patch literal 868 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nhn_BuAr`$$r}%n=1d1H5|6Y5h+IZ&G8NsuRd(>)g9x`fK6t!hV#{yRY*0oDq z14UT2dU$rNP{C&w--5E+Wb6ChrO#V_rgOHE`NX3_iQdsw_Ic{cn;EvW z&W^NA6^xx(wAp%oe`BN5i;q+{{qo7`;fhJT4(O!lt5{_nmYm5I><(n4UZhrC4(!(uHkYmcnT8-;z0qcIp{HheE z@AUOttsCS{eBScWu~+g;wb9?5f^o}t?G&o-Qq9#nek&q8#CxaNVOD((lh$`@%D=@w zIdmdf<9bd!Z=FJ#Dx-zejYD4dnXa>YpY@vMWo}(~#mk4s z=ayt#Pbs6og=K}?)*NKb(YpI)%AJWXm)ibKO;R|pd81$Y-Py8i3ERx(E{J1txPHD) zz5f64=y6_cmi4(mA1<%yJP0u+ZAa(um`MJ}0p14^U*PLe+3G&jk z+V*6obl0>3>k@|kg1PJsE}POH2t8lK|M~B%=y#JC75*R_(*p3Z;Scl~LEG{5kB z3$twPwhNY`J5TTaa=poXwdvuWWx*Xk9?YnD{P+L;@az>ccZG;{iEdpPygGx|H2D46 zc?ANkPXwjD-g|Z5U@Mn)mhz&xoSX}OiEaum_Ay_+psQ(f(aA|>8%u=#wzr9HW&FYV Y%0w_faowAh3=9kmp00i_>zopr028`^!vFvP literal 0 HcmV?d00001 diff --git a/www/sunders/images/guardRed.png b/www/sunders/images/guardRed.png new file mode 100644 index 0000000000000000000000000000000000000000..4f61068264c33452bd59ffeb6a2ffc7fa19751c1 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0n`<^b2Ar`%Br+9mW1WFvQe_kbTJlR&J*sHk6{M=Tuyp%sl>hDVtwhp z|K;!A*W54X3wN=8B*ZvxCF_b=yA@ zb_>qEMh$V21xfc;u}<0kX6c_>ayF%k$FHaTy!d>YRpI}G(l6RvJZ?{u-+Oz)GFFEb zx@VSLHJve6(CDJYzNf`=XL?;$`uD*$s=&%E*K%ceY)$0FIl1>QtniF=b>(1ZTM&Mp z#Wg`^#?y+lYI6p++zBV8r(5mYzE7(59M7>`zc%qG2K<}X92M3Q_N@GD`hzR6zh>p_ zs0m!Kpq0sT-mmfpD|w&U%q&rHdsQlac=~(=V>9RJw=`nH+oQssG(BhK>VLLI*;-G) z`aj2#l0EZ|6*K%OU$^wjn{Rs#%$X+KZ$ClOi$TC*ljQwVKiBcwcx!29<`q2hF|o6| z;5S2MetDWVzt7SyK8v{{F5P*sC1+c?@vm>Ee>gNexy+ZITgspI(0KVm)^0|L*F6?L zS3Ub~$f%Vq^AG-}2K8AAjddS`=E_^SrRHyUqGrnKgRR z51#Nx=|9wLd!KKpk44ofy`glX=O&z`$AH z5n0T@z%2~Ij105pNH8!ku$OrHy0YKl;Nj8cwl<6BU|?X7EOCt}an8@pP0cG|a4t$s zEJ;mKD9gTe~DWM4fXD=yI literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-how-de.png b/www/sunders/images/link-how-de.png new file mode 100644 index 0000000000000000000000000000000000000000..8c661fed130a0b731a7f9378b68375d5c9008d7b GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW_qOo(HTW)%YigJg+oM2T~LZfWEIf;HdPP|HZYX*#ea>_*XceS(tqBAfMYjtq&2)^X78tJ93_$uxxkNPUGfx zXU?r!u=<^i?7hgl-dnkPRX;aQpP8Ok@$B!u&$aiy%PJ^AKvMjZqMc^vH_j99Zk7JO zRiJ!n!Rj}+9$8*HzW*zqE|221P2bnOI(_2Yvij#9QGVA;_4IX0M7fHW=USILT`z6B z)i^16@0XbDl_4hiObyRxthc!yRrK~~PuJV?^RjhkrmbUV@Y1$lSG8{I6U%F}qxde* zd8uK2ZThBc@3obEUr!qJR8(ABv_|lan!$pkIK>;fQJ)XIdGlM$LC<-D)>N}xh7W%u zv=8P9%-t$-JnFWaLmU%B$COYhzNM4iZa*xnbV8faL%QuEkE1+8#;h;uLgMEps2n`% zqqh0)>x}`6YCg`lldip}rzGsfW91~Qv`?NR(Q2m8mq|H6H*c)(oW?irl=-*9%-6g0 zm<*lgZ%tWlB|m4`?1tjfxv!QVGhz5~q-I8GwSwZ*L#LX8j>H8?uaLg?Ph#rXvbW!t zJ1RykU%tFQ_=eD~3Bk?H(oBY)TN)(7zG`h|@#m_DySd&lJM+oo5TlK5z2EuM9Ys=Q zg|52>2tHWb^)xEL{d4cqgKZphqLeolPIzY`Tf?KmU%-(tXM*Pa>FYZL86Goi(4E@0 zkE5n?$_pP`%RRbYvAi5A-LL$%y?gfS#*NpH?Bm}!Ccck!SIM@_zVDh6-8$oXY3#S{ z(FXDreWuUF)>bd%x*6-u@MGV!vnfWmS@y9`|J3{4A#$Pv|H;iQDo&!0!gr*vU7Ka5 z5mTDNY&`8)(1X+MsmEtARfM;GaT5KMSaeCqk+td4iyu2yz6#s))%e!?8&P*eo|88t2r_xLtABVAk$ik87iJuEkv4(v^7TS$li?>WlWJE?{s(@S(ax YTi( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOf_gUVjcINPc(3UBNcL~VZXSz$(%pQw&KN7M*c)iso6KS+>FgB z+q|%=H}l(9gV|~twqFE%-uy|p`LiPZTW#9CpAim=FJ_oXo#j;haO!*3K5fUNwb!!u zN&Y{rkgfQ$=HHsvd2t55lk2a|T;_TEpUJM>TTS=v&F%g2PU_>_q6e0VXUkPT%!yeV zGArYzh2OuLv&EZD?@v8^y!hVjn{NV6FMDNqy7B#+5bbZdSJ(fw`7l@ZzV6b{d$IgA z>BqO3>z9?fariZ@VP-g)z0u{5>3<;7ICI56 zwS$_5Z0VnVnio2xDb83C_Wka=wrM9`-7c3GT6jYFsra#5c1a=(PMq@gku_FK50-uk zox1v)hKur~Ejrl(O{W>G<<5)bnZz>34QT1)|+qEQH_~04C~4|{4XX5F*q%{@!9Fs)4S`v z1ebdzFH4pRHe6+3&9gsF%*fLGd$598r$t9kRM{kT3%v)WqIIssJO`xY6!G&PQ!69VkEePXyUq3Zq_kA-um$joBj*>~!_x3|95U&WT7Hx|>2 z`nG?Mbdl2PUX(fOlC%?#sM3TNwO1mU6nJ`Ltmftk-00}yI{q(4oF!y&MPHmoTfGgteoaR3isA~r zb!%?Cic;QrPWElZ_x*Yak=Gvl*m*=$YGdQFgSDrB1)WJT^8MSt7L-hSpS66H)@XBC VaPg@GD+2=qgQu&X%Q~loCIFCDYt;Y% literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-how-es.png b/www/sunders/images/link-how-es.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6f7706bb0c4ddfb4ed19d022042dc9f7b37cbf GIT binary patch literal 784 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW^1Snq6_wKD?)gJg+oM2T~LZfZmmi?3Y0nCas6Y|)6rv#`Msctf0s~9==GrRM~9|b7fui|ZFvPF(tFMopxbaHG8D_q#SKPUuHe=`WdDiLs9^T`>kYOU#>$dn}Mp=V3=cb!WH!Q#P zc;$}$VT&#vj*mLdd-%bbGp!Sr-+FvA;M%hr5u0wPvU0e~bd9=c2 zU)HQN1&J@byJGJ2xI8+&`|Dc^54F!`A}?fPR0`I7^kLCA`gy3tXl4w1LyVs3lkea3 zn`RvFzxerUN!qUiPo9`FXowYE7patO@>e*<;Gl3`!NPUYH<8Mj@p|(;RfNKp?_0Z~ z%<<2@#+hy$jAjfCM>;P~yl}K_+40-umDz?9H~r15*z`T&OU>%}4vUy{Iz4(HWKL>% zu-LZsxO>}g{nE#~lLeXtmvfcppTGOvTb6&W!Qp5rM+t^kLHi3|pKEqx=$G~VAwKPU z(?SoY1G9PWHx@jZa3%HJx1{a+ZnI}!udgK zvcBz2@4md6?YWPGS1!L7aDSr2)YGy5*J_fiWCs8M literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-how-fr.png b/www/sunders/images/link-how-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..f35f8aab9be6c8afa9d9131c7af61e9c5ba88011 GIT binary patch literal 1320 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLV9?-TV_;z5sEBuFU|?WN@^*J&_z!{$_AZ~y zz`(#+;1OBOz`!jG!i)^F=14FwFtC?+`ns||U85mf4JY5_^GVZ;d;q4O>DsycAdp}333+D>h zUz}mkJ;p92l`VZ~NvBkjd2dPL6(5t{PV1T@H(Y#sW2d<8&Q8j?qao$nv$ia?M(3A- zlyt11u$b_HvJ$<5bcyG8g`(t&|LZ-ANg%htQ^{hD&wP40(J(HqI>&#G1hOnCow*@OIZ)&09)S!PwV zKC0q5(7*K6+AZ_AI(SXrW=_b@*6U%O!QJuG|J&(jxx4IgMbGKG=P&)L)#stI>8b(G z`=DsoO9p?IS+3AuYHVQeVBY^ZzQ_HZ89$!neVl)~&5LIX=9%#Pf041HZfmWIP`&BQ zXH%zD{3$wIRHKtEv~Ek1Ug|z>-|Fr|Ee>UqRb1*$#Yw-*%YHqJsiD9k=JuoSe;F2? zUa8*n@8rrqjR_lUZR6RS1e?yv&97%?cyj5Zu?ip4nr4rE3KomZS?t&va*V#Q#Qu?L zn!k77fzy5$Y@=757rbMA-SeRS#f>iC*TwEu6JH(P#eZ4m%ImCG`VBXX&mUJ!)+s!2 zG49OqqKl_)1lX|5c6_54$)mILe(?7XpZz)ynEe&#&=cIqA|W<0QfRK})#&&gq3uuX z7T%d*9xTOp?dC2y-W!kpq(`pUcssA;Uhc}ZuL_$K50pkPS#5fwB4cIM(jNuaE8^#J zw|T6KVDW#)VYcr}yxlcJg>OC^pDZpGuP^O9VSco4)5~WIy7KtnEswkVpF?5(&G-4Y z{aA_~{yFO1Z*@NWe~+Aqx1Z?k4Sh2@&$N3>Co(YTM95c^?vK`~3AAb7u{KA(NsVE{ z5v!LUSzoz6F=05-bl~32@{*D>Q?}&k9(!{wSt*DiVe0G0X$dnnu-nG1>gS!B`m*<+9Ybxo^2HBk zEPYHCQJI{R*j!)UHV(8kF$r-`40XNdtTgdN*!=6YQcvofmbn@Pon*XtLby@weP`ER ziC6Q^uAls7-tD`cb4B-gsJXu3SvO;@PuP`duA7e9ovF6nwO>rBcB%~T#wRnbKhH0y z`?~MJ$}Ssc9dDtdQ$p6Qn*2h}_Db>0kI6qvY^Hl3y&swTHb?7QoSy9dNuEcm&Egz7 zw%xlICzLa9ckP{99SOx7HL|ZM3K!k}-pDpVPBAO&bo*l8thFlgJ1(<+Unl=c<-WzA zwDZ|2rVJV)I>q3=ump91q|{Si6j+nR=z4n)Gb{b2k_xl~~dk)GQN2`LBl^egj$oSy*^w7hCP%W`s zf0dr!*LV5<{rh)z(8i2vHN#!TGfm{Js=uw-7G)=v)o&Zo^(}UHyGhRdeJ{4l{+7P- zp~`2{xpU`k7TtCXM7WLS)#Bc^kMRc`j3brKt%gde9ZiaSvFs7+(8AF Mr>mdKI;Vst0MhnfRR910 literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-how-it.png b/www/sunders/images/link-how-it.png new file mode 100644 index 0000000000000000000000000000000000000000..d14bfa0842add912625d0ee674c54a24f1e4a105 GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|V1ZPZ!6Kh{JEES!YZRlxUm({`}gOZ~nr*v%_2hWLo&N9)(?S6%mw)aVc2)j_=-r z<`Q8RcG;4GK*xgZ78*M&Ir<*)hFn^bS)4n2$=m<+e72s+xlz>{!z|8EdRTw{ckTO~ zPaBRVZH&+n>pr@PYtyU+A;0EvTv2}bvtaAJyL*>!n3Sd`vg+vLk4dl1Lq!!Be(a3V z(^8t`qo)0`#7e63M`wXW!24IPPU}98UYSyrmj3+k!U@5}cmH*kvTBNO-R1ilIAyW! zqwB$@|4ZuY|MNKP{FB^%jx}CECiCK+S6$(Lop07NPvM$5TVs1e{((HZ6s zE8Y`Ra9%fgC-)DA3I+AEDs{0Ei<)HKkHfF)wlLq z`Un4fR`ZFw81LLzw|&~?x$8sXO>FG!?rH98G0S!Rcd`DkhsuloKb>XK?2Ks!=FblO zOnUY|MsR9kx%>OK|Nr&;nR+-*E2Z80r_V;4nR_=~^%eU(bM?}iXTgT^WuwXkN;_t` zU-na2)>pRW@`|hyV`h^Y)|VcIU=grOC&xU%AHkcy|2fE|#>Xj2|RB8f2K9nBLne_0QgH@ZN@HAA{_(v!X5) z*0Epb<*T?S_{lA($yv+$DeqkIymhZ7*RMKw%B5;P3zMS#gDbJ-KO= xbLq;o*xRqJ-!i@KTX&Nuz8jpnrs+OWKjI{!+9*^Sz`(%3;OXk;vd$@?2>>yKbvXb4 literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-how-ru.png b/www/sunders/images/link-how-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..5927ced7131fc4114faef7aa7335b81838333145 GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOf_gUVjcINPc(3UBNcL~VZXSz$(%pQw&KN7M*c)iso6KS+>FgB z+q|%=H}l(9gV|~twqFE%-uy|p`LiPZTW#9CpAim=FJ_oXo#j;haO!*3K5fUNwb!!u zN&Y{rkgfQ$=HHsvd2t55lk2a|T;_TEpUJM>TTS=v&F%g2PU_>_q6e0VXUkPT%!yeV zGArYzh2OuLv&EZD?@v8^y!hVjn{NV6FMDNqy7B#+5bbZdSJ(fw`7l@ZzV6b{d$IgA z>BqO3>z9?fariZ@VP-g)z0u{5>3<;7ICI56 zwS$_5Z0VnVnio2xDb83C_Wka=wrM9`-7c3GT6jYFsra#5c1a=(PMq@gku_FK50-uk zox1v)hKur~Ejrl(O{W>G<<5)bnZz>34QT1)|+qEQH_~04C~4|{4XX5F*q%{@!9Fs)4S`v z1ebdzFH4pRHe6+3&9gsF%*fLGd$598r$t9kRM{kT3%v)WqIIssJO`xY6!G&PQ!69VkEePXyUq3Zq_kA-um$joBj*>~!_x3|95U&WT7Hx|>2 z`nG?Mbdl2PUX(fOlC%?#sM3TNwO1mU6nJ`Ltmftk-00}yI{q(4oF!y&MPHmoTfGgteoaR3isA~r zb!%?Cic;QrPWElZ_x*Yak=Gvl*m*=$YGdQFgSDrB1)WJT^8MSt7L-hSpS66H)@XBC VaPg@GD+2=qgQu&X%Q~loCIFCDYt;Y% literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-what-de.png b/www/sunders/images/link-what-de.png new file mode 100644 index 0000000000000000000000000000000000000000..e2a2ae4f76f5aa6b45d4ecb6899db35c2674bb7e GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW_q+&pUWnHmNL2FViFh!W@g+}zZ> z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}){2Ij?{E{-7)hu==O&yh}*I5z)z&T-Fz&c{oR zsxjVN8>A!|5f#$8bY)A+5rLILrw(*!DPC#Zq%13>E$l6N$VpsHKJ;W)UVZDC|FW6#`A4^`x%zlr?!QYj zli!BtJT8vCUVSTN?e@=;W1EComi;w5FE~d)*J$qf`w|RKcvx0?rQT<1*m&_qwaU5f z4vr^s4E#@8GgQ9iX+KG*_@O*0f1A9ci)og8{JuZ`X8z+86q%xE?CtF>$l=G-u?HH`8dbw%yG@E6ATURBGG?4KVGqE_!-CLU!!CCTjl5N%bizF-Byhkyu8Hh z?o{hw#b0LGx8K_@pL^x%)1yH%yZxoVpd3FaB%s=GMQ=Lv)k*F z*9NULd35Vq>Gf^jR`*rTe{j3qFY?K*`RRLR*w{VVvF+zyznwL^);nG46Avxjsn9fw z;r`ED%k`gDn+@jO1ULKXpu)=%o1w&i)DLechcRtymzNsMO$d4aS&Q>UuuKT#bkaMCn3)|tS zA8YI8dxVEhl9|;TbN#{m@bz)GEi1a&qq6q=+HoOy^5j(hPn)eCdepZDbj7lrpZV>b zZ6K$1)1q~+ZKwK{-`*3n)%W^c!!O_deX+jz|C=7;gUTqq*=MhD>a1R;tUXOl;@jF~ zys};HolP=~f5jKG+5Hb`sW2^D^L53{;OH5_-C8mlo_Y)lN6yC_-^F`k>0!U6ucJMG zAJ}@<-XSiCdFno{pC7O32D6xQXvOR3NWA*2bUpTB)SIi{pDRWv8@N2+6}Zj*_^n;V z7v3ZK5-R?h-S_TjOWyyt{-5xtpVG|RB4^#Z6=na^KYq)ub(am^_2sT#t9ttBQq3476@6dJHmoLl}XJBAp@O1TaS?83{1OSQ@>DmAQ literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-what-en.png b/www/sunders/images/link-what-en.png new file mode 100644 index 0000000000000000000000000000000000000000..01b34e401e2007251ad44db670d61a7db8a8df66 GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOLg@34rMDOu7$i$vBTAg}b8}Pk zN*J7rQWHy3QxwWGOEMJPJ$(bh8~MZ;7?`a*T^vIq4!@ngF+Vy~qN!{A1b`qUgb)a^zT(l|q+*lWf9^1Xs~o zuQxk3z7Ni|x7T)E`S@2I&-QJ+MjEBhX2@(&3ogFTJW+LrQH@W{kKym2n&+R1n) zvadT~d*bH0D_#qg=Bdp+y6@h}9s`}tyPtm7|9qflNzu-^2h2k!X)@}!Kh>X};&xy& zi^A&0mMLCKS3Y@?9M4$MdSzY9S?BW}TOJ?X;JZO(q3(m(7q0DG(a)x}cIC;9<(_lY z3w;urp4@!MvGevB8TAt1u<-9W3@=vL2DowPxk!HqEP8f@Q+q9+wzBlz^;!$6mtT0k zr}X2a>0jMv-e|hmx$Ig&OTf{6zZWJ*-M+3`>Lh%$#%{gx$ETG`} e1pJi$z`ifB<68Q?E-MBG1_n=8KbLh*2~7aw;>mab literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-what-es.png b/www/sunders/images/link-what-es.png new file mode 100644 index 0000000000000000000000000000000000000000..07041a4ce8f99c7c4ab0c3d4aa5782034f7140bc GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW^1h=F4@`&kAC2FViFh!W@g+}zZ> z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}){2Bs)a7srr@!*8eW_ZLo-IKJQCRA6C{mhRG~ zg%>ldZY`QnR&D=x*%&CG3$jxjMZGyX95_`T{;X?c>hA~EClyc^%^ z7!GaqeP8%OR=`#Gc7@odx?{WZ_f_tD|J&~TUUm%;u2!do0U9FzCly)R2WW`=y7lpb zN$<6=@ZhDFPIV-TOq#VUFoUrqw*S_piuW_vtd||^6Y1Wj*|kk4mfxgoY0Z5z*Ngwu z-Z3_)9!K z#4flmNEG;Oeaw)FxA|p-g2lDF<-#uFv)A9ujJmk=OTwQh4M&C^h6eV!$lEKHN&eX; zDx9Rka3J~p%`^07>!L}%4mhFK_ zPusVNXs5aQw8*MFz27@&|9p>$atsO!p7Y8dFI?#Z+Ke%TiLy9bz_@jnTGYFYi9GCH$D)TVNL#;?z?s4-!8_v z9I*{lK0b`y%J^t9n?~ZZk5rHs2R|*CTArdqe(vuj9|f zy!vwM)bylv?{?kX^*ZhTp5Frfb0rp4JbH53!Fa~W8ePtrt9R#Z3tay^tM}MWfA60k zebgTRS+6#?%%@p5a$ZRAYU3sso3uQJGq3hXg5sHdqP%7Vw+_Fnd0c5d|NfqttR_;u zZi_EwK&e@3v(LK8p8m5c#3XL5ZSj=CQ(Jw@bUwd!+cnqYLn7x9y=VRGE)RZswdx-e z+PnYCJoiHjg;ff=EIzO_cuRlH4_nTgDJ1lWRbZ|t;|zvtyoS@fglqecB&Dt|+8Ovi zt@PFe_LPc>AAAiT*)J}=oM~uaprEF%uDvp(>vg7>_HQrqoiwN3T@x~)^Y zTGM5tpUJAKOI@8%Wu^I?-^%OX8;zGcx1H?ET{k7dyxFhP{D->EzdyX(~0n z=5n3tyJ!BCW_Vy#&%pM-;OFuAa{1NHzueu!Xa4Xrbv|{qYD1-gSX*1)bjcip;?|ja ze}9^hxzXxn(PNV**~!Vt_txpXn(b*aujX%Jf8dtQj7MU=#ZS6FXYSm)w+%WuWQ&W7 ze|Kmu;k~JJBl&-W#*xl_&V{!FpM5`d#x}NGsl(1&ZP9j*3%hSk&|S29`TI+^r1l@} z$!u_TsZhNjxNFyzDbj0{;}hFf#VX{Sj$HgU+rwt!9)<@^r=C_dKfK_oB*WeHpqt^} z4)xjRT=~_GZ?}$XjCI(Av)FS2gVI5StFYeCfy;RSzr%OVr)t6l5`d4+cD_RZ#)TBH1;XY~_r z9y_jpY@U^UydN^%PfnMVP}zTQ-)Rolx*GZ2Ui$*O`yI=o(@wlSbzhk0k5`MWLe-=T zyY8Mo`}FqxCPQbJrVc(~!N#AbKGl5NJu5AD=O0z$^Xrehi!dd-O`Udr``aixQ&Z6m zJdZn4CESBnifpZ_IlMzqJ8g4&(axK@PG9))rR0K^j!l~Wvp%uzpNC(TR9(+0gXSS9 cRVMJCp=0MgUE_qwYM_ko>FVdQ&MBb@05(Ypv;Y7A literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-what-it.png b/www/sunders/images/link-what-it.png new file mode 100644 index 0000000000000000000000000000000000000000..3474e7fa67d0fb704d294c104948b82377a7f968 GIT binary patch literal 935 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|Rr6r;B4q#NoHo&v#3wN*uR8Kig;0*-K|scHcg$r`;4P@Fig5TSt9SM_t!H2jyD+ zF=pv=eOu)E>fquBXPcuBb}Kj?b=Izm`lu25;YDJuqpy02@#K?Xn|~U9u9)Fzw&k~S z_T{CAYV`6Y_Pw9{{P&*EcJHkxOoD+;>_+PhIR33jvHBTffBl`sx#oX)v*xAdPCNbd zS(#L*X#=B^;KjEl``%lJtqHc-?Q(R?VqKnuhq53x=t6W3u*aZ&%2@o-q zR$niFb843453QLt<|auJM=JM+6f-DN*@RtMg=cS?a&Q#`BY&KizF+WFq3p z>)?{@u)?dv-N5v#OKtIS2d(R_a<7~Iv9@%%DX$Myj^m7F?r_QPogH7c|L($&mGjuo z-OruAQTyujy!vNnLc$xS{ueqg6Hy)V_E_?luGhORPwva-+i*3$^S(}HsaCsq#n=4i zuhPfeS$o|Ui&VUOdZ74r<8!tZHud) zfMF9;|NVaLCS&9Jlk--}oo}0|Iw8J+N$`B$T-!|||0nRj@hXk_wlSXX%87=TJ9p0V z+9IVc|MZ>B-<9gIt4q)Ku+;r^da(0s*y6gp`pZdU?)PMLDw z$l9`DvRi2P?U0=eH#FKG8@uzpz4UO|ql+SH<$V&@0v*2YJ+S+uQ8Vv~U8OUPA1&ls z^`4FQyKBp0PcP-~${#zK_X<|LE9N?>CZ2y}Z9l`I_Qv=7+Fo7kTuMC+iK@xZRIosbl9lIaj;;!{z&LKU}(|d+e9d%?E515(14^gD(85TJTc1jw^<} zOG8~G&+m)W`c*f3zupo&nX*PB*=p&fJF_}mtTUaIb8p+#ye&IxF`s!=R_>bXa$ReD ot{1Mleo24r6bSfl_@C+0|1i<{zxvu47#J8lUHx3vIVCg!002S7^8f$< literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-what-ru.png b/www/sunders/images/link-what-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..01b34e401e2007251ad44db670d61a7db8a8df66 GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOLg@34rMDOu7$i$vBTAg}b8}Pk zN*J7rQWHy3QxwWGOEMJPJ$(bh8~MZ;7?`a*T^vIq4!@ngF+Vy~qN!{A1b`qUgb)a^zT(l|q+*lWf9^1Xs~o zuQxk3z7Ni|x7T)E`S@2I&-QJ+MjEBhX2@(&3ogFTJW+LrQH@W{kKym2n&+R1n) zvadT~d*bH0D_#qg=Bdp+y6@h}9s`}tyPtm7|9qflNzu-^2h2k!X)@}!Kh>X};&xy& zi^A&0mMLCKS3Y@?9M4$MdSzY9S?BW}TOJ?X;JZO(q3(m(7q0DG(a)x}cIC;9<(_lY z3w;urp4@!MvGevB8TAt1u<-9W3@=vL2DowPxk!HqEP8f@Q+q9+wzBlz^;!$6mtT0k zr}X2a>0jMv-e|hmx$Ig&OTf{6zZWJ*-M+3`>Lh%$#%{gx$ETG`} e1pJi$z`ifB<68Q?E-MBG1_n=8KbLh*2~7aw;>mab literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-where-de.png b/www/sunders/images/link-where-de.png new file mode 100644 index 0000000000000000000000000000000000000000..15cd85ab22d6adbe18291e3ea7f26c990280978b GIT binary patch literal 731 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW_qT9><|3S^{YiEBiObAE1aYF-J0 zb5UwyNotBhd1gt5g1e`0KzJjcI0FNdv!{z=NW|f{)9v#wJ4hUx|NImCDx)PLp^Y3< z8k&?MH!KlSekq=i^pyF7;Eg}50?yMHl{E>fn3+lJHVJA!u}WdW1+%TXw~lmjEmG`_ zZ!4b6aieJ#%U%CX@9u4`-Szxk<@xjj2?i28Y|RG~W|-yNUiP{!!sgCh-}mpWxq}T? zEO@zgdvu(#MUgy%!|s>+GPdt=JAHq1$(#JG(Q$`M?c>=Q&aaMpY4W#d`P0)6vZ~(S zEvn4BvvI}7d&^{m&j@I|nDLz>%|(^#>Z{u-3a%XM*ba8`Gl)-~F4wHV#Nc9e(OSFs z=9$AMxdg9#NtjS9qt1BHmm$FG)5X?^>@b1BYtOubi(xnHs{Qy7T7G z5a2xQ!BOn(y;A4oj(1ZlRkg%zLw^@5zP!CnSLxH&_?tC0ip&32g`7Rwcw3qIY_K6a zgJPh4e~qlS$M**xy2Fm>tmIM-p4T6EJ11d(rdUyK<$ThSljA;g&@hh z7tg(@f4|mwiQ6Nl4yBVb7^2zhet*5eXa8P!^J9z7FHe6)hit5f|9GU(?yC3Fp!i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOLNZ0G24s|EiEBiObAE1aYF-J0 zb5UwyNotBhd1gt5g1e`0KzJjcI0FN-i>HfYNW|f{Vdt}DN@Z&E&FnQ+7bZV4+kJ8A zZ6VH{tsSgW<$C0F{xMrtyz&g$@W3@7;Ms$~j~Bd`u)6Zwa>?0bR127eE*}OtfKVpSNvIEdb=Rj{3h@A zw`ry;VpKk^a@uQZHSg~-v5NSn8p}I5b81VJo?m17pB^xCw{&^@i8TK^YgnHar#vcl zlxyMf^!io$+VAnyk1^|*80MAN>R8%*vOST$?fb+p$v5LIvu}TsWmutG{r=FSN(OUH zKRY9{iMzw!{mXBOQnv6+u#)<0*)(|*+w$(C`Rxq0+={_#^M1U&nIM*8yXeD8m!cPQ z-|kdCtepRjMQQD^>~krX7O&rGlcaKM`g!hKHY(-vicXq+I`4PAQ)qe2kPtb`Yw5gm z6IBk{=ibiS^10;eZf$!N=au{~xG(E9V_GWYymuU#^%EgSb9^!T;%&H6d7 z+HR}4Bua26+RgQoRkjpZ`)G=)w)}dnQWl0En>TM(bpFX+Ie*c6i$0c0cClF{sq0hU zO}(v`vU;aP{4@3j^=LU0*X~LNj?SZYX7e|w$F7e1SFIUzBzcMH-AR*HvMA4fd*l5C z0mD5THhd5`y0EU`c1w!?{5bI^6D61og@14JC~$gk@FS75zg zxoeH{BUR2)#(4MSy%N_0!>@5l3MeP)R7Z(H+q(rv{jueN53a+Y#j<({rr8Mt=k zglv9~7_%F)%PNc)I$ztaD0e0szr~yd3}l literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-where-es.png b/www/sunders/images/link-where-es.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d8d260df15070440e7a7cefd25670863a9a79 GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fSW^1lxw+tg$M%!gJg+oM2T~LZfAT?13oo1wSSCSd@4F>7BjjNgPS=GC+;}CV6$Oi!KI@|pE7OzBl7-M z0{7A`SI^(2JGdgMTf3wt{LXp5*Zg~x6j6% z3S&}S<-sDl=utlV&Ccnc_J{N(3!LU+SDxt6dwJiw*IU*Ue0Y2(=JB6Bf*NT_5^Y(t z9+z5wjG8ew*Wm2Q=8ZS5Fveb=x&G(V=FGn9E2sWTXW8xQ!r(J8M|>hr+Refy?yZ_qHxc|Rb2l|o9^zMqB-g9&skjgrT42iCZ_)OsMz(X;PX-6 zO;Jr}Rd#VK$>H?BCSzH$Qe?eXeD3|Kjyd8dgQIF66kWWuNP&eR^5EQu6E89}sI!_l zMo-?mJ<|Es{raqgiR_1!7c&Z0=B!^i^@ZrIH>yg>t$SpuTa>tWt?Ta4vB;LV?ZrHC z$GX=_6JE%FY>N2(`Rc7)j)${n%viDPLUhLdobz)mESFsU-9G2rcOL=9O9C~K?(p tT5|rCZh`xx+){p(?}>qee}?xN*)Aj{`W5VoWME)m@O1TaS?83{1OUoleJub0 literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-where-fr.png b/www/sunders/images/link-where-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..c761895122e3ab5ef98ff628e81bc7ea42c4dec6 GIT binary patch literal 1456 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLV9?-TV_;z5sEBuFU|?WN@^*J&_z!{$_AZ~y zz`(#+;1OBOz`!jG!i)^F=14FwFtC?+`ns||U85meaJY5_^GVZ;d8J!^$Dsyaq{<75O<}(UX3dD(I8XPfvYPkyDg)Y4vJ#?0bp|L0oX-+5Nj zVPSxV2v@5Ui25ugrj$`$9)04mW@nnwVe!KcmwJYtz3i^-5-`8~;pDjKul?t5|B=bi zas08PcBYKacU8HWnQJO+^dGkJpb{@HTbl1H&!`Qt|{;zi3i`#f0`jc$KRu#9A~imV zF-W+%uf6RS=(=PZFT?}bBkJ-oArJjm592MBOY1`kR%G9&wKUX|kOCw%PS->*VJyP<){h zARZiil9jJEdG2b41-o`_Q_g2&xM5bqlI;+4^^=4` zgmZ#vBO`;t&TS<(W&L~8Cl)mv-C4|L%6l|9RU_)hrx}t;(V&25-Fzt#Nqk@ZGN5_N+@yL*WHFoRoi{CL!Yg_D|ba#@+Q{&55wPz?UGUQ>{ zcA|Rkvz1C5{}>p=V;)K#-;`RfAfhKcQNQT@sf`jVzkHD1rpsO&_3hn5?qAm*$1Oax zbN~6ueJ2gKezFp+f3tkPzs`J}zW(N?S5LG4xv;ZXL4fN%=Rx_THOe z0%z|Vwkp>7S6F4er`y%IDsT#(?CPi$cJz6!+LImp>eVYY4<763%@f<&PES4-ljvWk zYq+#USABc#ZL^g*DteZw5(QPiCKTJ6Je7F=g41RG%6n^ctD6^oNY3gsZa*E@6?4*7 z$A8O~Eh6Waa|s{1ed|_~)57P|3|(?g*51jyHEq_bfKx`j@;-~RzwXI6_~c$eXu$-j z_}!^Inyc4XPC9uaOz;T9#|byye5$H@`S$Iq+3fRpx(}R@mze+fS=noq5K%jx2ODl) z6)pU2dw+7o%WHR}8RqO>+pZJ+jYa#=@4TC9CkL3^$~~NSZf(?&)ytk*8XPhDdi}TW z-AzHq=KYK+e3|n7_OzAreO14{Ew*3T{lkInL5)sk!b_QTRe#Qzwbh$__0aX&)Hh+1 z<$PxrAM12$o#6W#4zk6ZD`?MPB^GT?WO3 ztaH^T4qSMl$l*8fipM?INdlR2S^f3a(QP*l&-7O;n%B_p!tA--q3*rU7dgF_xU?6i z)RivzE#i1mt70oK$LO;2|JUyu{(s>%pJ);M?(C1f%C|0Lm_*H=_x7QdSoh9sWzo`E zr=Ok_nBFh{|LdW%d68#A^j8-y+4=LyPp4O!uu=$87^!{WPjhs;HcjtCI;i0EboFyt I=akR{08nD4D*ylh literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-where-it.png b/www/sunders/images/link-where-it.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf5c1147da9a6f7bb9fb4bf08b0c859f62bf7ff GIT binary patch literal 848 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|PUwr;B4q#NoHoZ1a^}WscSV|ClG%^z=vT6F#MuBbr}vnC%nC%&V=WBQ3W>yI~HJIEZr`7`*)G$=nX%9A^939hc5ro(-+#p|P4wPQ zXRTX0{A>pqk1Q`LYEH;|@%#7Epq18V50#Z4UfSGz*z&&l@76OG;7dQKzZ?j*0kK0Wx_wnm>yxXhh7MScye{H_Y z>`qtCkH;U+cI0e+)@EY+(d_Gm9QSRN%j4Fc_fK^x`5^e=*ZpE;8~bVI8^0?aiu!en zHK1bgbrd@q`>&5I@rj4nhcdagcvS+A$yF=_nZ%x9zxtBP+UpnoJ(umh( z+ENxYmX!rTDhTjK@*M@1YUnO^<+aW|lCog8(r)X9cgLg~q zbAB)hbOZ?t%65lc+!?lds<`^UGm?TPocf7JJtxWgEh#gaKD+UGnV{Xi3wA|<9j&VZ z10n=(1T&Og<@{p1z}`sh&DkEos|m7vAuXY}&_J}>7Za>|V%^A8tX+uwtb@#ok50_8mH9xm2cmC}TsqY~|tKYrSG=Kb4rKO~< zsM+?~AD30>nVg?^3V64e#P&&ST+wt&eIoDuU{(8>i|4z({ovaYerf5p<2^HWteW*^ zesH+88bNnJrgguuZ!C+3qbjZKvJaY10z_@6B<0 z+cR(Z_m&<|ee_s;lJu$VFKZZ2tZv}nWY=?+f4TdcovV7Qc3XeVc0L@pbkm+nDfc2v zd$UXN5fQ&)UG6Ln-L9-V-S~Iwp+|q+ubzS@NdAxF6AB`^Q(U*7XJBAp@O1TaS?83{ F1OT;hlWPC~ literal 0 HcmV?d00001 diff --git a/www/sunders/images/link-where-ru.png b/www/sunders/images/link-where-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..71b183d757e91c4dfd68fadf8e8034175a680308 GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V9?-TV_;y|Q?$~Dfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=fQ^UOLNZ0G24s|EiEBiObAE1aYF-J0 zb5UwyNotBhd1gt5g1e`0KzJjcI0FN-i>HfYNW|f{Vdt}DN@Z&E&FnQ+7bZV4+kJ8A zZ6VH{tsSgW<$C0F{xMrtyz&g$@W3@7;Ms$~j~Bd`u)6Zwa>?0bR127eE*}OtfKVpSNvIEdb=Rj{3h@A zw`ry;VpKk^a@uQZHSg~-v5NSn8p}I5b81VJo?m17pB^xCw{&^@i8TK^YgnHar#vcl zlxyMf^!io$+VAnyk1^|*80MAN>R8%*vOST$?fb+p$v5LIvu}TsWmutG{r=FSN(OUH zKRY9{iMzw!{mXBOQnv6+u#)<0*)(|*+w$(C`Rxq0+={_#^M1U&nIM*8yXeD8m!cPQ z-|kdCtepRjMQQD^>~krX7O&rGlcaKM`g!hKHY(-vicXq+I`4PAQ)qe2kPtb`Yw5gm z6IBk{=ibiS^10;eZf$!N=au{~xG(E9V_GWYymuU#^%EgSb9^!T;%&H6d7 z+HR}4Bua26+RgQoRkjpZ`)G=)w)}dnQWl0En>TM(bpFX+Ie*c6i$0c0cClF{sq0hU zO}(v`vU;aP{4@3j^=LU0*X~LNj?SZYX7e|w$F7e1SFIUzBzcMH-AR*HvMA4fd*l5C z0mD5THhd5`y0EU`c1w!?{5bI^6D61og@14JC~$gk@FS75zg zxoeH{BUR2)#(4MSy%N_0!>@5l3MeP)R7Z(H+q(rv{jueN53a+Y#j<({rr8Mt=k zglv9~7_%F)%PNc)I$ztaD0e0szr~yd3}l literal 0 HcmV?d00001 diff --git a/www/sunders/images/lock-insecure.png b/www/sunders/images/lock-insecure.png new file mode 100644 index 0000000000000000000000000000000000000000..b21b5ec9ec69fb9bbbf5272915267aaaeddf1ad4 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>llEak-ar)^ceQy^> z5!Mg)qpv8O-}JzYb#dzK2h%IsLbsh`H{g`&y)B|srY^y<(Z=AGkJ1dDvhD}-^;V>| z9Dif?A(fveo$vd+!+Q^l7#)fDzM+?S&0{{{J1qgV&;Pon%{#7Z=JQzSvCWd{rgPOl z+g{typ*U}2^WSTnNo%HmY~tr}T45)>)h=#wOvbfY!aTzA=F$o+uXwL}uG_Zug8!cs zGdUsst*j#d+LFAEM67?nq8#%usjZNIw#Cszj;q#ZmOfHGRU*Iia@*Z6e9>n`z3v8V r``di($8pB^$^(J!pKq@J!T46n;L!OiPU{&M7#KWV{an^LB{Ts5w4{f` literal 0 HcmV?d00001 diff --git a/www/sunders/images/logo.png b/www/sunders/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..87072803f67ed7894b54f811cc2cd56dba15b118 GIT binary patch literal 9904 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 TYRP3_U|{fc^>bP0l+XkKZd?&9 literal 0 HcmV?d00001 diff --git a/www/sunders/images/panning.png b/www/sunders/images/panning.png new file mode 100644 index 0000000000000000000000000000000000000000..52a0a59a250c709911fad252d5dc635fc6a536d3 GIT binary patch literal 989 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SC{Gv15R2ZmQ=@Z2LPgs4*FKvw(=wO;3saK!?UDsCm#244>~7eW(W|N&=IJ5K z%<12Iu`Q$Lnn_eX=XukIju*w{;`NZHICHuAg1MQ?jnmWm z_lTU`mLYxKQ6G(QgS#seL{$EXt1Eu1{q`D$q_1UR%!-vOAoS0 zGJZ?yObA$h`Kii-%bsezsf?+S3)dWSJbchxQ@7N>dXAgRA>(HsTKtZG><<)a4VUI$ z$bauy*!<}sT3dAt98R~-4~%)@FfC-V-*n-IRj<-3H?Es^cWbG~q?YZ+oxd;b{=vpB z$Ni?nGSlu_+nOvb#`$~)KAVo>0d$M9HLIc8r$pY-0lXMFtAiza(A zE3#bL^LXal-3FIms?J}c!4 zwjL;zHVgj$OHuFtPigbtdv=^Je`t6A=&VOu-_$IeCR?4o@z$F=FZX+1_g`*#?VDv+ zl4_J@e#R3x>m!rSDPRYKXU?TMAayj#N`Ph~}c6C2LilqBnYijDITZlYZ`AA4< z^5iGtB0^t&xRplBd9Q)!~dg0&HxPc|gy^M+o%J)`%i#rMyWRkqVPSl=-V@Udpr zzt^1?7wuJ&Wwd(VrT^x}moKhaFl#dRj61R~;CF`KVQ2i6}Nx; z^z`a+t+}&Bbaw1nwpq(Mb+j2?l(Rik$xNHoxiOH7EBxZ6Tj$zzLnGT$A{TCaX`m}# z>vj0xvYzuMzE2`l+#*|$D(W`p&)S~;-US+A zr(~x-$&{+SUj5_m8t#ToTp!(`v##wpb9#Ekhx{uwi-?@ literal 0 HcmV?d00001 diff --git a/www/sunders/images/panningAll.png b/www/sunders/images/panningAll.png new file mode 100644 index 0000000000000000000000000000000000000000..329cb625f2061171864382d302c43fd5562c44f3 GIT binary patch literal 1961 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sfLndiaCL!~($r=m{>}H-Wjv*e$d#Be1 zh&-1)Zohl`@wa;!s#sRIe%#>Vu~k@Wt6#|_PqoVyWhIlg?c=$+Y_jM74!6fX@f|Cf zHhNB3;yi2HPvy%ixA|roUa_j3SvH4n@2s%IH$R#fxjG6?c{7}3{Qm6Ty|?c!+poJ< zsC4Xp{qLH2?>Fzi`*-hJle^NQ9t)n`4tOK>?Wo@b)pw_L9E;ozdz?Drti}-$^KxD{ zr#nwhA$PKx<$Pt1QRdr<`uxoBXV7_K{aX?CxbEoA<>WmAO8#YFqk_l;o|8rzp3Y zuF+q6KxW&G?`N)=go{|8u1U?gxvP7r_vw!Q=o5W5l6#9g9~CGFXNG^&;RJe>}h1#MH zpR02fjw^~iX^+ZRnse&VpU1)-ds@HNTi)z>BcgFCN&VJR28Mfg{gqaJ`*J&W%jdvP z^WwUfs?M-|mi}ydx(83s{jUyhgBVgb79W(3H>#elqxjq^uE9yzo?BY8 zE?Ioj?T;sqDlSvjG`hG=ug%v6xf2;##O?-b;;1KG9pc z&mNZC8!`3L>yH+j&K|oukH7N!+QpgwHh=e<)K_#}S$k*v?!N)wQdw7i*twWzm+Z>q z>7q9R-(K3I^>SM9uhef$At(EMzOl8hQt}K4i0JVRobc?~1Oca#&Awk&+!s)`uG2}9 z{}Ub&n?5|suq&U038RsUwH{Y+kxHsPyxPfo5=24~O2gjIzxGKXfIvDmUTlSNlif>TPx_u$cm7Lyf~54+F0;L;?h z>=860rib4!Gv$kY{cqk$Cs`&2aGW-gl-=i7QKokJ@1@jat)5ct#-KU;KR3L%dHiF} zx?^1#K6^h^r`3Pf|MG5Ph}idD!+?$Q?x~!|&R&@Nn6)<9O7u7T3Z24&;=aw>pSRo9 z_H;G=4YBgtk$Gp~b{(~2Zk11WSN{k(8MNqO&b+HtXI^HUdiZ~K?nLQqGq*QB=VMp5 z-ZL*dpLNN6+5OqCzhCq3={>hTpjiJ=@g(*G67v&3eBP?!-c)XT;qMKtCwE$RUk=VL zer`Hp=eHTvqB}nw`t_;n{G))mbYSZ%{9`W;SPR;hM^5tlpH0NT#>Y6)Q@74c3{7K2)|1z z|0PCOQ)*H(1bH>h%Df|Lo$pjUGB8`;K4+8CmTu?B!aoNZmlxK)RD7d)?~8|ImZkfT zD?h*Nd-^}aVO`9@1&W1<27cM@9hc``H2Hr0=L)@$8K2G-S;{R?E$It>*mE!bmc!O< zOsCfwRw*Ai+P69K>6@d>_9>o@l9x*ILn^pZzi2z(srkA6i1m79p<{n}KUi{QP3>Q_ z*t*bWPt%Jjt=s=q&3djO6lyp1*sP>g-m)_uTg838$unJKRfv3VtM$rlpu&EI{in6n zd>=q2GFW^{5jm=G{56~FzWoaiZSe3pZotE8o5Of>zr`}n%@0+|?jD+B`m8w7P`W>{ kUt`AQ&tJ=byZ(~*)tVQ1l4;^z1_lNOPgg&ebxsLQ0Nj?!`Tzg` literal 0 HcmV?d00001 diff --git a/www/sunders/images/panningBlue.png b/www/sunders/images/panningBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc7e4b1a7dea49d62c97580481929e486f5299c GIT binary patch literal 1005 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SEKe855R2a4DbYSLp(1VjYxQg|KQuDn^~p$-S)CYCqu_Y?g4^U*%`YeOXKh`^ zpL^wqgg(EU(<)sl;oJ&?SrR#_SxFump~CuC&5kX~ePs3D`e`0Lsj5s{vShC>4~Sg2ki$%5UQ5X_M^oE5OL&D$SXPv> zG4G!(^Q!yv>z>xPr+67lLkrSxJm__IezWIlyLGx^(C1|`kp(;6e_j2fY5AtkGR{b%$#$2J*P>DM6HkvcLZkN=~esIL0%jKHx$%*Q-1J>os-IhG?@!J3C z3%SkmgEF!VUfhvS`c^R|`0c~cO4o$!#r3f_{x3eGVUvAh(c{amooBlasP`YOc(gb2 zT<_Y1Ta!{xM~lxmT^%#$T;T?7w>K42-YwrQ_I}H2?$Z;$@Gg5H?Gq?{;l_6D1IGL; zEBUit%yI~K6*MbQJ^oO*@RzmHl;0wCGdG5X@6djg{^La%-@A25H@{RopY6Ix-{;aL zyQ8<`^*7BZJZU}2cyZ*ds%J0XcL;n~{Y2LD{m&4=h(({S?CxE`wI)K&S=jQP)z%X` zH>NIOQCzU{-h)r~#d@Q8_hoPw7q30ndQ#@Q%uF^eE%8Q%&vyfz8k595Qet(YKfO}t z-t#}UC{#cHcG`vsMP1)CH}W3XTC#HepEf6@*PpI>r1=&eOTMP1KaHV&o}stiV{bld zK3~J>CD&N&D#}?87Ht)IanebZ!QSu52Nj*P7(L(FcS05yZ~QDKcPlXRlSah4OP^zG z=kFJJwsr5;qxUO>wv-%OX!$7l!znKNznMul<=A&6&Dl5Q>B`@$Ek70T&fj$Au1c7@hVI+i9Yk%US{D^H)oY&n}XIFOU&Gu@xIr%>Z;27oE*NqODtyv z<=wxxW^hWkGR~Gb?ZvRw>#&)~Dy`CxuWl=xcIfFW%`G{7I97|}yFQ0<*Rpe>ox%(Z O3=E#GelF{r5}E*(!OQai literal 0 HcmV?d00001 diff --git a/www/sunders/images/panningGreen.png b/www/sunders/images/panningGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..59bdcd65c27d51f8dcc76a7e0d952f058a335641 GIT binary patch literal 1013 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SB2O2`5R2a4DbX1*p(1VjYxOLPPcHSD#d5i1M%b*t#R8p5nSpz3Jm!lW^v;c6 zV%HH;!@Y3QkwqaNPcFJLZ9!AmB{wY%Dc4&Ib$y)-T|HAOebUS`XDp4M zZ>sH(ouPJd&GNlBvums0*Zgvt^*9q58t&(x!W7DrKsrn8OOHI!Zz`D&x!l~-mtW}>(I$F9DBK!Th5nv zSNbn}LoVal@ne5E{Hre2m-4e_3U`0`;Id(<&*C}hiB+z4u{|Gu9+Fh+-n^QLcVY6q zavsH{Qy!h-zOpJ*Ws$o<%f2i}$6FOaMycluExsBbzudg!PEKTB&P(^5dn;F_S@(Up z_Ggk}$saFP-D7EX88;65e9^eyZXNz)YQx*cXQqkeZUKf2H`ZK#BwRJ~tk;2XVfP!> zpE;j@N{+as_FVKD%dEJG+|NwbtMEJSXA8en^jp%t;(FGN(9O-) zo&7H_X}!?erguds=fWPh>vsy1Cdz4v%1`J1I930SU`LVGrK857{F93|%Xsk#%&nQc zZKa=`&p(Gtv5Pch>rTZjdi=~VX`)=#6$aOr7pB|AGfmqSvplr8_O^RPP?G2D#y6~d zs_Z|m?%Ft~W5LmkM_CW`XZ5=6<1OFdx<38LoF^Aw<|XVrt*UU~Y=%B>l<&)JmFkBl zrGNVN=X%Y~ioDio-z8@6c)G;9Xgn zxNR!-Hru~_vg*L`X5A3Ye?<%0RX(g=-*%SMMx{Hi@8lz$#9HNaW%dfK9}ba$0fs+* ztlN7;>F%E3|4IyuM-MnJO4XSh7T>b)k7?cJyayiBYd6ooIA8Kn?*+emtE&5gC+Z#J z;(YY&z6OUJXU^iNkC*4mJ-hpJGQ*Z%N+~+R6X%^i9r*v#53ZF{b5^cMzcNSb^2XxF zn{C8)O!uwgh~5>mW!Xz_{!hMXOQwi(f4`8H=ep$BrXXJJo?XEu=jxBDzUJ?`6dAhN zda+Z+mS0MH;D}DW`!M8V6wLvOq!)h6`A5ANqe%gyMtostNrRasXR9;r)hCj^b Y1N!DFSqSAbFfcH9y85}Sb4q9e05)RQ^8f$< literal 0 HcmV?d00001 diff --git a/www/sunders/images/panningRed.png b/www/sunders/images/panningRed.png new file mode 100644 index 0000000000000000000000000000000000000000..f07e4eb1f649e0e9367c9fefcdd61e6f59c227ba GIT binary patch literal 1013 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SB2O2`5R2a4DX|&RsS?NQ-=DO!&75R5YprHp?sVU4XF@kB8NCXa65FAm!EC>5 z_ryv?qmS!C+@ss&nb*slx}%}>Vo7vrlTo)v__K&;u6N#dFKu13b#CVNt17*WOdm#8w`sS{uIY{A_~?ydyahaPKM8gn&goMiF{ z5PXmwU~pW0#{J9w@3vbm35^i+&(Ql)9nG-r(LLR-YU#_ClhvXS1Md#zl$W9Ppq8%h5z}^Yn3xD6zJ>iXP>#<^V@tqM(^M-=~p)^o+>XVwY4zs)nm)Bc|md6Db;MDK6oydjud`9IGb`8IsEG!)Hubp$hO#hdr zzpNlnN@w3+Q}6hBt1blH-y-(gZBxp8quUIk`-<*9Y;AIW_T=cQ!zX=Rw6jh%JllVS zb%VH2OyvUM*I8?{F8q#=_KJO*>)^hqqHCYgF|~seMWz`&SuS=VDoprSrvAO$?^DGq zOW*yf5MTIEuIar^{GVqR4^CVWcId!eIVI~V${Y9Kve8iNzAanBZrhfr1_CoP!mNaketpXIV@0I=5ewtkWshI2 zOaEX~#eeG-!zHbRd9xL7+B?0P{W0j?F5$fzv&|G9P2BRuRO5-BPx0fk>kZET?>lol z)O5G4OK;b1TbF|S-Y>rAYv|pmP|;=lQpFm&btPwoW9YyBP@db0^5+w7YwZjv-1vtz Y=Ui|16X%5~3=9kmp00i_>zopr0N*3k-v9sr literal 0 HcmV?d00001 diff --git a/www/sunders/images/slider-toggle.png b/www/sunders/images/slider-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..b196c5087d3a881615470b2d72c66bcfc94b644d GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yH*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<`$OL^O;FYbyE~7#Ji=Tq8=H^K)}k^GX<; zi&7IyQd1PlGfOfQ+&z5*!W;R-85o$Jdb&7zuQ-P=Q?Q0DmaotusS-;^!)+1x&5 zlbxab>#~d94^*9YwFr2slxS#i>TIJe$|KV0#@9&FWlsW#@~c zX$CRnW^)4G@8kc-|0hv%q2n&i1`)1<;;V{Re3KH_D0#3V@XVJipMA!HLi1RZCb1oS z7Gvmrz{6eEd+z!q2JfV{bMnzb!nKcO{wKxt{Qt+4ey_RJq^qnl;zHQNB@MiHH!NP3 zd13YXq&3%%e_U*z^r=2t{ptZP@xIvan-&~>yC8>+eOiFYi<{zcyIw{={yS&QlC!sG zvxaQ6xORKObBnTuP0A%-%E zb;0xErYoww%thP|$HpEq&nZvBP|;URPFDtwnA_{pz0z zt|iwumpqO;Rgm;d#Z~%Cd+R?>zbB7&rCB8e@v^eqdwh0j|G&it?$77q6nAf$C@cN* z__W7GpHD9hc>BSrz(Qc6P}er!-zgDweqmAZ`s=6jo&75_hmUj7npexzPliqLRyZNr x&#f_Q-TjK=A0yc_Z13nga9?2B!mxc=ynBh{CZB@(8U_Xi22WQ%mvv4FO#p%ZkxKvo literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-how-de.png b/www/sunders/images/title-how-de.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf60116a7bce2c9270f8ee52d5f21325205240b GIT binary patch literal 2519 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 Q7#J8lUHx3vIVCg!094o5I{*Lx literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-how-en.png b/www/sunders/images/title-how-en.png new file mode 100644 index 0000000000000000000000000000000000000000..35a71f5b62f43e01aaf2d87efc3f49242575f3e9 GIT binary patch literal 1937 zcmeAS@N?(olHy`uVBq!ia0y~yVCZ6CV9?-TV_;xV3{GlfU|?WN@^*J&_z!{$_AZ~y zz`(#+;1OBOz`!jG!i)^F=14FwFtC?+`ns||WD(;uQoi`(QU?PAgJg+oM2T~LZfM;X6@D2;jc_q zy$!gzGDb_pBVYx?LaikpE(vc`a+4RXIx%}k($pngPWAy(EVH~C^&3Q{u|17^?=&@p zZ&BJ@{?NuC6#;pzC@Jw!-Bs7urCRG{K1zt*eBQF=#>{t*-sN3O%(?dB-;$}e#^2}t zoL_u?-tP#9g#j8OT&+%UY6simiw^}>@^^XYh`i!mIbp}~mBG%vcJU9|Q{G))cwyf3 z@Ll)49p6JU@>I8Rg$-n>3er;=u#`2r*`QNBidbr$YTJVZ-|J6Ee$>g=q zykt_@SK4}J&5txr-P!Z(d|2;1Ez{+erRy+v>O=O4bo#{Duk zYZuR%E3Dqu)Xw)+_g+kXJllbjmoA_FDW>q?Y|4zfKOb$cuX_7@nf%kFI~PB8@=kmD zd09}{sgtez*EJZHxh|Qi;`-!ljNd*RgALhg@vGXdy{>xT+HhN@S?N=INY*lI8NS&J z0=>u1GyLdEefZ$t-@P9*N}h-}*i1N`TF%E~^W%Gl$v>@zYav=ce-`Y>-!$b!hRHvh zhV>J9x=!q8s5BC}Rk|sPcWKAbNB6}JCN{jE{G()_eB8dWvv2Aib?#g8nKd&fM@n(y z-EGLEct$A67A`HsK{B3hpf_`2)a(36b z{8|h9%tq!`#!1p;vt{f4&*c|CCHdTQ+iRSSPI@leAa+uA*0cJGm9h-; znN?zY(@rm%pR$|dn)UZrueaulO>&vEt@rK01^+L4{k`*P@uax<>;E|%+-EWM1^2;( z2NM^$OuQez>&xi{sVBd`k(Tayba#??_Ft8W6}fXeVz$KJ4k~at_D1KuNspp_gYQqq zv~XwV+p#K~4{Ud@nWi#x&P&0Kb!oSMp8NC1CB;%oOTA}~hswWKj0RJ#w_10}tuJ0x zrg7zW;U%l|cys-&%1ZT-5gvIfgNj$KKRmbW_I!1r^;bJRbn4GqhaK+ssybPdB$m{} zz3sa0QPHQTj&_UdI;;!1Pz#+|sK>S_&+3 zx(@u?=Jo2s!^1D1W~}Jxk#3u~Stt9`;^y<&N)^%%cK>up+}AYszUX@YRagE5YA31k z92O9|taKuC)`_ei8}~>=UtX8ruj?(eYo5PIzx)2>F9N4`-1B5o^0@M7UF!XP_bxN| zh3`z?aHpoczW#k6gM0Y>{-+ObeY2Q6Q+7M^&A^D|3@W=kZf;rfN+V0cxB35_oyA{O zYSx8MDX_>nmZW@H<(A72S0RQc@(jBfYA*TBn&mU)@$vTAvu1Dotg?^AKvzjPyRhNz zXJ_kYA9F0WO=8dcc16jW!81}UZo~WAx3}J!Q#EVWmS&axTo?42_)nhAHVnM;$(dyt zhh2dkgKxO-(a1HoZm-{N!nqboEwWaoursCG!o-3h(o8uNTpo6}9H#$&+ua z=gytS?hRJ)$aL7v`vgY zYxz0Mgom$B=CVmmxXV1VvrjVn-Jf5%^5V;-uR$t8AFp1`y))&sp{?=fV_oZ(&nbVo z>)A$~W$Nnj_1nY#81yLSySH!iJo5N#ii)Z2-(xcpB`hEPpYw>J-Dz*zr^jOb53cNU wUMR%MkQu3TVq%h}JxcweA;RVA`ys#PT>}5khpp!r7#J8lUHx3vIVCg!0BumX+yDRo literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-how-es.png b/www/sunders/images/title-how-es.png new file mode 100644 index 0000000000000000000000000000000000000000..a7585db8a4aaa450c97b32e7250a670c2559a6ff GIT binary patch literal 1484 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-how-it.png b/www/sunders/images/title-how-it.png new file mode 100644 index 0000000000000000000000000000000000000000..5aeaf643239f4cc44bf2cc15b83a4a12fc09fd94 GIT binary patch literal 1527 zcmeAS@N?(olHy`uVBq!ia0y~yU}$1sV9?-TV_;w~YEdd>U|?WN@^*J&_z!{$_AZ~y zz`(l3)5S5Q;?~=!*qjhok$>mj_}^YSE$C;UpvecN774>6M_hP37P0Pfoyfkl@cpzT ztyu{@hAU=laH*KolF^fv>AO3dHCKeEn?+@rs*5~FMvcj`9K!(B3r;_8@4r`Fb7SY- z?A>?oEqncL+syYb@6FwrzVH2+nKO;mxiv6=55tm}0GTaYWml>dy=DKf_I~_#=Z!xt zu1-mDw~&cEe#YOp_{jVFABy+A<$idJW5ayOex`uNfK>)OHqI{j+=~AgCwzD4IR5_k zrZsEUw{_I(uYiD%%g z^i`r{Jwi}mK4nXmU?yb;b5dvix{ z^zDgRigVN%Z4BpF2<%EWTw~7L;?(}0b&fhiRN}_#rWP+EcGv#i#lo;~FU zOdAw(+x?9$Z)R|@iYRd7_#QR?{Z8v;i|3rXqN!vvk5glgr%J%=>>#IwC#)Inr5qDg z(wV;VoPTq3-&eKy1wWqfC{*@HuGV>2#V4`q>XzQWVb+sA*Z6+6Q`st`>t<}=FZGoIzxj&?U2`DkDq7y^sZmX77H?8ayTq3=m7~?^2{mn(q~^?ayT$lHrC~?vrDqH)rtF(>vZq?@(9L=ND{XAe z&T39s7juX8!1v|#3;xb}_SGPGw~g}iNEzd3ySJB3-s?12U2ZZ~()kf{d5<^4o9TQ% zd@k?lW~fmr@2s4rIrn$`ZVQe3&u`pWXy5C0-kPCCdH?L$GkMlce7rSl)_1{%eG{zG zQ#scJUwrXXRWd#Nn&8Zujmi@%9z5yH9kO|GLE1YsX+ED7lzdIy}X$ z!1Q?4US;M7%T#KjC+)KR#%2EY(fiIP>}P5W1vn(m?3l82r~Tff74F|;i))nrsS0rL zyw1&uku~R8l9C-X@44`^oa4(|uT1U!y&}4K+12+f8;Vz@|FxUHoz=lxv*6@%|Nr{2 zi&R!csoa@6ckWcD1E#53g~1bw_1>ulxj)#uG2-aGny5D~EaFlnemSPCVVp2Uvc$7k zZ_c`lcf6M_D7k)SU20Hi`6f1A=lZ#lug``voc5Yq%vjp{C{C#Hz?t2D{{5=0T*qVQ z@sc~j;qso{&I?a4GOV9w^xWy?sbjGTvzj@=*KC(qnmtEo^U|#C-5mLnZ0|Koj{S1+N-LeQtdjZiQ?&q}*vtQZtuWZj?8v@Ac%$LjXUV%>1qGmi8F@d%GfN+T V)z8(`Wnf@n@O1TaS?83{1ON_l$87)r literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-how-ru.png b/www/sunders/images/title-how-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..35a71f5b62f43e01aaf2d87efc3f49242575f3e9 GIT binary patch literal 1937 zcmeAS@N?(olHy`uVBq!ia0y~yVCZ6CV9?-TV_;xV3{GlfU|?WN@^*J&_z!{$_AZ~y zz`(#+;1OBOz`!jG!i)^F=14FwFtC?+`ns||WD(;uQoi`(QU?PAgJg+oM2T~LZfM;X6@D2;jc_q zy$!gzGDb_pBVYx?LaikpE(vc`a+4RXIx%}k($pngPWAy(EVH~C^&3Q{u|17^?=&@p zZ&BJ@{?NuC6#;pzC@Jw!-Bs7urCRG{K1zt*eBQF=#>{t*-sN3O%(?dB-;$}e#^2}t zoL_u?-tP#9g#j8OT&+%UY6simiw^}>@^^XYh`i!mIbp}~mBG%vcJU9|Q{G))cwyf3 z@Ll)49p6JU@>I8Rg$-n>3er;=u#`2r*`QNBidbr$YTJVZ-|J6Ee$>g=q zykt_@SK4}J&5txr-P!Z(d|2;1Ez{+erRy+v>O=O4bo#{Duk zYZuR%E3Dqu)Xw)+_g+kXJllbjmoA_FDW>q?Y|4zfKOb$cuX_7@nf%kFI~PB8@=kmD zd09}{sgtez*EJZHxh|Qi;`-!ljNd*RgALhg@vGXdy{>xT+HhN@S?N=INY*lI8NS&J z0=>u1GyLdEefZ$t-@P9*N}h-}*i1N`TF%E~^W%Gl$v>@zYav=ce-`Y>-!$b!hRHvh zhV>J9x=!q8s5BC}Rk|sPcWKAbNB6}JCN{jE{G()_eB8dWvv2Aib?#g8nKd&fM@n(y z-EGLEct$A67A`HsK{B3hpf_`2)a(36b z{8|h9%tq!`#!1p;vt{f4&*c|CCHdTQ+iRSSPI@leAa+uA*0cJGm9h-; znN?zY(@rm%pR$|dn)UZrueaulO>&vEt@rK01^+L4{k`*P@uax<>;E|%+-EWM1^2;( z2NM^$OuQez>&xi{sVBd`k(Tayba#??_Ft8W6}fXeVz$KJ4k~at_D1KuNspp_gYQqq zv~XwV+p#K~4{Ud@nWi#x&P&0Kb!oSMp8NC1CB;%oOTA}~hswWKj0RJ#w_10}tuJ0x zrg7zW;U%l|cys-&%1ZT-5gvIfgNj$KKRmbW_I!1r^;bJRbn4GqhaK+ssybPdB$m{} zz3sa0QPHQTj&_UdI;;!1Pz#+|sK>S_&+3 zx(@u?=Jo2s!^1D1W~}Jxk#3u~Stt9`;^y<&N)^%%cK>up+}AYszUX@YRagE5YA31k z92O9|taKuC)`_ei8}~>=UtX8ruj?(eYo5PIzx)2>F9N4`-1B5o^0@M7UF!XP_bxN| zh3`z?aHpoczW#k6gM0Y>{-+ObeY2Q6Q+7M^&A^D|3@W=kZf;rfN+V0cxB35_oyA{O zYSx8MDX_>nmZW@H<(A72S0RQc@(jBfYA*TBn&mU)@$vTAvu1Dotg?^AKvzjPyRhNz zXJ_kYA9F0WO=8dcc16jW!81}UZo~WAx3}J!Q#EVWmS&axTo?42_)nhAHVnM;$(dyt zhh2dkgKxO-(a1HoZm-{N!nqboEwWaoursCG!o-3h(o8uNTpo6}9H#$&+ua z=gytS?hRJ)$aL7v`vgY zYxz0Mgom$B=CVmmxXV1VvrjVn-Jf5%^5V;-uR$t8AFp1`y))&sp{?=fV_oZ(&nbVo z>)A$~W$Nnj_1nY#81yLSySH!iJo5N#ii)Z2-(xcpB`hEPpYw>J-Dz*zr^jOb53cNU wUMR%MkQu3TVq%h}JxcweA;RVA`ys#PT>}5khpp!r7#J8lUHx3vIVCg!0BumX+yDRo literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-mea.png b/www/sunders/images/title-mea.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2f35aedc5ffca59303c1c05e92085e922d2372 GIT binary patch literal 1562 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-what-de.png b/www/sunders/images/title-what-de.png new file mode 100644 index 0000000000000000000000000000000000000000..38ad3451543088943ac694eecd9d768769b0ac38 GIT binary patch literal 2294 zcmeAS@N?(olHy`uVBq!ia0y~yV3^Lpz@Wjw#=yYvnK|Po0|NtFlDE4H!+#K5uy^@n z1_lPs0*}aI1_o|n5N2eUHAjMhfq}im)7O>#A&VHNwN~Y`i>V9@43Z_T5hc#~xw)x% zB@E6*sfi`2DGKG8B^e6tp1uL$jeOz^3>>yZ;?)4mQBnTE^ivFW|)vM=QP#j~fOx#~k)^vd!M37k;rg<i_q$g^E$CVh;)tqO4d*5FZcln8(pk-wE_GkUG=05wlaPQvdJ36)+&Ybeg z)0ih{+T>edLBA``*eSM~v(aPPscW-^C8+~n$`GtI+%OxQpAs@cHynOBAV)wN%CBBzaLa*L6 z);;~S=jfUnPfxFpH}nm5bF%hTC|GgkrHcb_ki3r zYv$NDUlEozyAmVqC$nj5`hg_wcIEqG2h$jC^B&%AE7Fz2{6PKb@vU1|OEWw;(0Jmz zNv}Oq0pkH#1_h=4tRDnUe%bSO>b-mQb}{ks_f3D?kiE(MVDq$A^=s?DyE-it-p}yF z_+-laQ@?(>{}bbK{l~OGN$mB{Dfi=x6$LCpo_(D*U!idSCQXL8O>5@O`uaM19m9cj zvB%RYYtj~uv#d> zZ&MIUD)WzM&8E*v9+P5La;=V?8@=rHa4p)oZ0G(d*S=K9ME{z^&rmY?&#~C@+MGN?$dqR(Ic{4r(XdVeON^J#Y;YpxA$Wp%Lf zT;~z1eXl0x*(Eul%bwF#6vqipd1m^2lg`aliPd5Zn`}cnZbU}!UL`fb;gxkdPhsuq zUF&X{%$~#WjGpM(m|VgC_!if_}+Omkmlwg-ziCMnH&a$}A6 zvdpfItA&nT4GVq3R=e>BU-FJBTrKRf%; z@NU-zoy=m3prcD)_x+Sy{;bntm8Szs?#t%V(tWlJ-=0M5U|~4?;ip@os7cnX!yir^ z`friEOLU?~OxS1Ru&-x#GYEb5n0a}9`DxRSSsYJq9XodH(jMjo2k+jv5#e>n^wKR> zb=7Wv;gip1h)uu${yp0T$3v=z*h9pBsU3)9uwTUWcK^|>$;Ur_3eYIhlIi=>a#%fY zLd?&9JKIaWe3h=h`qi`gVZoA}8#h+g$thNZT~9BYbSqeSeQZG#+t*B`n=<{rA*OFm z7C9tMYrVhXan|mI`4Kw$*XJqxv~0)|e4!%#O?>t0=;9!ipA8*Ou1sCMXIW-N=vO{fh6{J^&bHJETXppu zKkwo6Hm8YuRm{I!H|a6eXWo(i{$6~z)!cQ$D$`%=TEp<++J%1+_t&qE{`)84dHdqn zik?lsO#*ZJoX@MyTzzoby?ghj^&EP=tLEodZRVI_PtlvzH>b$g|LGQI{Mme|tZ&Kn z#Vc(iCHvX0=SsdlK8;(v>i&v#*Mu47F4@BS)nlPOJD-XD+RQ(V9Ay%1=S2ixR%cA; z_j_VJtF20~@}5E1dpXayPLd~Caui{^wZKJUZQ= zBlkdb%WEx*cBz-%_xyc0+V_Xg~p2)tw{`A9# z+2W@z*gf68Ucz2Q={=C2=lf7lQ@~*8DVeQbM<`Bw6oD&r=R_A4p{M1eaW`1 z^@YC6t}Z%zW3Ac#RhfUfI^LM`-2b<6TmJrMHY*>_Wthe|V>#ar_1|{W&qhoYTdU{5 zeA4$}LCQvs_h(~VZ`n@wJ$NK(qc}qeg9h^tgU%oZ*-n@D2MsmztXU_|PS|krb=mG| w9T|R?ypAM&4FCIYmULMPN>zTW{XfIW&a?L_PgTxgU|?YIboFyt=akR{09`_6zyJUM literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-what-en.png b/www/sunders/images/title-what-en.png new file mode 100644 index 0000000000000000000000000000000000000000..64b3a7b04fbe2e125cd5b1e6adf5e2e52dfc7669 GIT binary patch literal 1917 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 B33dPg literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-what-fr.png b/www/sunders/images/title-what-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..222cb277cf750c9324ba0368ef49d3915c6cd75f GIT binary patch literal 1323 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-where-en.png b/www/sunders/images/title-where-en.png new file mode 100644 index 0000000000000000000000000000000000000000..59444bdacd95390d5f1367986887923677e2ec04 GIT binary patch literal 2039 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 P0|SGntDnm{r-UW|9fD{5 literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-where-fr.png b/www/sunders/images/title-where-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..4920c3e0adfd400d84566fa1fbeef0382159c675 GIT binary patch literal 1648 zcmeAS@N?(olHy`uVBq!ia0y~yU`S+OV9?-TV_;x-7dVBTfq{W7$=lt9;Xep2*t>i( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=kc)#~m1%P35_<*)2HDJzh!W@g+}zZ> z5(W@(E=o--Nlj5G&n(GMaQE~LNYP7WXJBBx;_2cTl5y|t%-o#dRFUKVpYMG8%j_GM zu`v6Qm+U?APu@0bxG_&k+{DMZ+K_8^?g7J&!wXcr48nMiMYOmapVoHvF3*e&jT>~8 zl~lYH6ukuY&lFJd31FL9(!6o)+}E~sJGQS$;?}L6{Py3ZWpB?GpZ`DS`JLzUisy4n zz`>vO3tZT>P90o6w5OtC_2?w*sR;HmM!Gd$)}@RdUw^@++Q&q4^N-lmdEhnX~9ulF?Yj>D}q8_-)7L# z(*B-$<87vO=v4kHn{(Gvazex2oi4CgCd2lEmBA^ra_a53cYYhFII0-$Sgjp$@J#y5 zz&BsDrakO3PB!?p|E^sst6+-a2hUC0-hA5<)DU+i>5;&KHuXDR3=Dt8wj?Y$Qe9QI z-rIlvSJMW0#szzAccee_@t(G-t-hjRiXEFki0JJ*dC#x4e<}+JEVMYC^K44N4*MN- zf2Hp#YX-%{=uFdzRI;+NIuy5ly7F<^zCAn7e3^VZwnB_yPu%tU4BL)xe*F3BO=IJ= z(@e8tVhzJY1sNIQyG!#Hef(Kd`t9uO@b8)bDm2Z_!>tM*wL}F3B)osSHK6k6Y+Jkd zxwh8Uy4oT^&Z()|R>?PS?%i$YKIx6-0f!H9U(Y>Xy?OHe`1!dTm(=;Yd~RoYwC&rs z14iq^`7-AQUQTN;W4fVu`kd_6t!JY(YyoZ_f34Js@xV#i}P?f(o>hV z_0n6tD*xgwiPLWC=xo~a$%f&|HMz=p9&gxp_)hB%bIlgM7|QUOfg{aMmV-syeHOE8 z=0BzbRZ2w+FVdcEPq}$hLi3;Jk#flcC6Q(4uKdZor^Qlx>dbV;CyWe&eT-X7inP<8 z1@GN^Fjd-YN0stPKi{c+!WZvo>H>2L%P4UL^D8TFZ;2lE$0D_#_2i zx|qm1%&Jp)eEd66Dry4ysz?Hd!r z_LBc%X{nL%(o)WmRZI*D%mK>#C;HU5e9>u;h?VzMKUB$(*uXVo=8VG5nKL`YZoa*C zb>hU8D=+O@!Q%2o?CFywd*%H71rk^7o3nlT6p=Khj0NqrCE56 zZ9}kpxaR5Be&!!u*DF-A3jDUn8DD>0EEw+3BO9>(wPQ)2)7wmaeSLX`59-E;T$b21 z^h)olzn--9{Hm^f9((n5b>IHaKhSyP_;P7!>Es{B_WoM(QhQ?lYvF3^f3AyP8Wtb_ z`^6{uChL?b7TrD1A1B(WtK`OfXxJAMe|PKZgN7@&DRl&8Wn~4mDtz9drYPgK`rQSt z_QPTUQ>HDxdbM5LXOc>e@ywzs1}*vPDit>8t`%79nKbh}Q;ympqs@_4k+FBD*nhly zp!UoT!LKi+C#pYV_dfE;nSn1f)YK+xb7XW!#yXWm!-o56MO-0M?TdELy?uPInoDrl zvt6go^xC_eyRe?n~V1g z%WQL_E(&gAdEXt@aEbBM#aw^M?PdmzKir)81u7YyGN0(#E!1JLVDIgP{31(tPLMqR zLORiWQPf$z1_c%~Ew9t3UH+6by>H(2MXYr0qAfb9&uWw$F3YUed;0HVufeX^TZ=Sw zPb(K6^(jmitF2v_)u7LmqPpm(OG?r+@7z1w6VJFwAdydC|0Va!chCNw z`BR3$u|<80uT35|i_`tyP$8ktd=<`CwsPj0#Ef+(&YXE(Rh3sO{oUzenbcpkZdL2~ zH&gi9SN^}TaqskZbv56s_6Eh>n^VKEqv+{$?u*fvzAJC))$wdz7;*c;Vqc|?z0>3j oBy6g_95{OMim?G2n6cvzb5inF({Gxee}M{qPgg&ebxsLQ0A-c!00000 literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-where-it.png b/www/sunders/images/title-where-it.png new file mode 100644 index 0000000000000000000000000000000000000000..770e7d983b70ef314203e0d2752e29c0e4f41b06 GIT binary patch literal 1705 zcmeAS@N?(olHy`uVBq!ia0y~yV3@`US@vpM)YI}AxGy>&X$I0EtlH5!dNFR^2)qnDzb1& z(hbSQB9}uJHLYs8&{qdX2vQ6nN8WU;*)c<+y$%Jbq7=~OyPI5 z%aN-7YgqhiL;2(0z1h`g&ZSMhcfZ?qvGMbHpZCibznjb2eKcufgpL>z6%%sej`VrE z>KB=UfAwDU$86tx-AlxlnVH=-^d)=Iy4fG4?$*`+ZwyuHoX>o|I_}rf4d;&~ePmvB zhs{EPe^*{ryzcKGf1+=(#b`ZRle4eyWPae)+aad!E6e{rek9+~d-8gr(D#O_RXGfC zTt9RASKZ6gQx9dXSN#2>^$MfofpFI+zxy8VVUPL3ye{ykSoiezxtW#Aon8J5{ma}d zsz;vFFSTTTl)J~*>@dB|A-odzIpfW*vo$N>iC$~7AHmf z9*e)}S@lZzsg&{b)BhQM$bB%|aIVyN{<`uz-XBA2lm71H zUBwCqE!g#mOshPg|?E!~>+N=J^m7FNGmS2AEAlPfm89UDuB3k5*R&u9aQ-eCzpA zlk2wbXa4K9fBB@7kL1NJpIXWBt@%>( z(*0M{oj%m*N+0hO^+|r6Zta<`vsS_?=C=5IJ=NFm-uWI?NVruohHoX&;o-`&`# zoZ)k4Yw4`RotI9jDL>o!-%RiR(#+j0KRB75UCrRP*^ufpwQ%u$_vr0;b0d7Tm&YB= z4iEn|g(IISoR^PpSzBA%qXX$K5?}Xxkv_XixX0>Uj@jp)*J!yEJO&%f1tpx$q)b%W++&rYlPYM0C|F{-l$1oNNVQCTmZ zCDG3;EZRQj@$*7o4&m|>hokFvYn4yaZ{jfn>EV@r+vMa0E88sRCb^oL; z&##Dk{w_^G(dW)XcA0Rmm)&3auAjA;d-~~jhWmZnTr%WxmDfJ3s@iA9wI{Jp!i-_L zZT@MG&DU*uJEB`Yohy9vzw)xc!R;ZM2W~bW+pm{qYcQccXlm{Pd+YuC{W!(Hw>o^z zh)!)4o~Z5hJSZma@{NU8&s@9a%Jo6(fB5&MTJxFK#l2DZlB_D}c!&GKGUQRa^%i?~M7Ec=girDaG;Zs?wo96ZOgsm}}0Rs7R{&`#{8{>C?A8 zUa~6c4uMmb7w!CWcY*m7D;K|OwP#l)-$|@FEBJScR>ukd;+=nLH=lRiCa%lPemzq;&76&;^`~*{Jj1tJ8O#|u zL;HU0+rR%_=XK+E2K%&T&iwejL54Z1QJ+cPhxCj~iDnUtaoW zVf(v(<)-SX(pMvtIOcRFACI$+db{~l(26grkHp>G{{4JbRNI=ldR}4s$E&xaJ+^H7 z_gpJ<=BYI6ez%)9d#`K@+!c*db|Xsi(?`$!XINPyZD2iv|0e?j1B0ilpUXO@geCw? CG*cP? literal 0 HcmV?d00001 diff --git a/www/sunders/images/title-where-ru.png b/www/sunders/images/title-where-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..59444bdacd95390d5f1367986887923677e2ec04 GIT binary patch literal 2039 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 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_camAll.png b/www/sunders/images/todo_camAll.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb77a4f1e8c05fb5bdb81c9cc674daf994a444c GIT binary patch literal 1409 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12%pUX}#o{nYs)NtbCp>jv*e$&rXlc z5eXGJUjO~vnR8-ZZ_SrB=rWnPa=7Vu{hY9*LrEiR!Vv*O4mE)m_C|p#TLeTEuc{~a z%t~PKTy>9X^-;&-lM> z@wu7CkABVUVCvs+t2xg+DW$9-V9C}g2RffTY}4xOOlRnwb79i$8{w1mvL$APHLia4 z^%=*mKQ<s?=C36wMkFV_)o?x@&gF+>GUWuO0d&J7xB~_=U}t_9E+y zIqhRST-GaY|8*!gFT?I}`?k$LJCj4ExqUn${iN!&kc@{P416#q*j^lFPfb# z#iQM_e6^88X}+Ri)`VrNj$7S5_fu7DV8~a`J0DffPVbuW z`6rWKjKPH)v(Gf9$v?Xxrv67e!zl87<%e+Tnm?&iK8vqU2-PlJ z;Me+F9NTU-x@b(1J->2cK$(o!z6QnqW`lQ1wmH9a!%kln__5MbAtY<>YbK2^^Vr{4 zif!>ZF^5f3*wJIhM*e^6nqPSS6Zii1XX0n2j(|N*?F}+KH_to2EYrwtX}X%w^WuNg zQp>r2i!biCGml=9ZV|&)RVTmJo4e<=^TGtno}Y|v*PYKfO_;g&e17d;;-niG*MRr{PIm=?09 z-Cm_=BJ^n*=M-M^SHglFR#w{O_D5IT@w?`if264Nm0z!a0jsvGglghiwG9nc<_pVZ zepIbj(q~_#rMiyYcmIlgyy{=~mhJc!x#4hX)0@@_rqX)*SASUC^e~!H@XyH;6Ie01^g8!KDB+n0sz2=g#r zv)^kFCGm0bt_h1+Y`lgjF zYNgg2P;tid*?|mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nrJgR1Ar`$$uf}JbO_VwQ@%#JAy8Xp{Pi2Do=Kd8t)p~g4P5W(XpVG}#yu5ZQ z2;Vv@boRgWq^KAT^C?1^MaoxlHcptB+r~RvTI|`G4$JiVKi__T-ZA0ktz#GMrl0>@ z8+ZQuquZY|;-jlYEMDC5m08}{VBU2hMyPW&i=lDL6w4b~yb2fhZL13pl6{`|n}sh# z{KKPQfzyJVjcp|}&DVB6)|Q`OzgXVgy5Za2ubZkq{ZsWmpX+6? z!X&q|t=q1o@bjOvKl>QN&eS>QRj~&J$7Ietz4Mok+mFZb?Z;=Q!SmMzi#o{&mre* zPCd*jo-yO4Y?!@8LGRE5GRV%5U@AzqCK=Yb4w6eBI^8O?Jc^+oH1f|r>s-u}uhOoe9YTQ(FYDxVa7T(P8EFZP%2+)LT3XIL(sZQCuEbjxb$ z`RBcSe7+{nmOrYq6aD_VQ>A>P?()vB#kX(NZk}Lw`oW*J*BP@Gr5|v<`ugU7w)SO9 zjXiGmDxJy`VSMm?)|7DF^y`P%)|s_S7Ce!^5Za`2c+q(yp^c0kv+o^zSFe6@L%~#s zBWDC8HRp0BC#xziojgO*iDTmNjfZv>HXrADEuh5zFu*5l)}pd%)txV8|9@4eSON<5 zt+%yLdIejEEdKk8DMlqUqKtWRt*l3)I*ZjhzwiAaJhtrZNe&-``9l6rIjFecDgy%p NgQu&X%Q~loCIEjeZjt~1 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_camGreen.png b/www/sunders/images/todo_camGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bcbcc66803f108f25be8b143f5b4237798fcae GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~65lUY6K1IK_k^-ZE$iyXDessP3?FQ0m3*aRFms)NdY8(V&_^ya zeZp64ZqPl$!1wcSs-OL-Y&Gk*`(mEHjFl+zI-h*y+RoXsJZuH}uNQ3V)0`bD_3wa< z)V#cZu2bv(^>O{_c<9R^&fCJwaJykeQdwEt)&Qe|bB8tyge6x<9m<^S{8I7a($iX= z+c(M_+-N&_u9J6y??X?v^RhK(EkmPHZa>`6xKPe-jRWTjt~+`MmUBoM`mhGPW4!AW zv)QTRjkF(+2&*5LjoyLpJ9a1dKQLdvMB{AjMC&CVE*y+(6t-5ny~?i0U<>1A&6*Dz z7*#BHW-*oS%8XIcfG>h3m5H3XU^uPSO<< zbC2)Mp8nY+C*jl~Rc`a(rArUhurRG*p2}iXQod9FLEO}a*Nk^Ie7K~!-Ap!1@Q7~g z#h^u7*pmM(cRmmmXy6;4n9?wN!g4`o-}r+P_6KtWWF;)5T_o%q3-=vcv2v4yTMzFK zg_Z*|8jl(zT?r}N*H*Hhq2KiLl5OV_BM(0M#bl+k{|g6eIotE>hKKqK-=E3g__Zd9 Qfq{X+)78&qol`;+0KPR85dZ)H literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_camRed.png b/www/sunders/images/todo_camRed.png new file mode 100644 index 0000000000000000000000000000000000000000..d84f19ed44c5a06ca21d15e3df566895fd8873c0 GIT binary patch literal 709 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~6Cr=m05R2ZWSI>KkB+4BB`2G9MpQ*bSZCckRAg$8b$P&mRdTFUMr>Ll7#oG%D z{Vs)e`X&BlRAiahw7f%QWiq?6#)j_B(vAh2uHE%bE-5cNR%vB(RBNZvLw31m4-=n# ztx0ct-!tWTE${1!Uz%ZWMa!14Eb_xR@X8abXxn!J;K_f)<$C7i7pC1-VR&AsrM?GyjPpCTP|Wv-Yym|Qz{blT?$ryQQKn8>mO zZZP7tS6}!^PjU}u&TghhGb&fzl!?}NI4#*xtKom>Q!>YX6Sk}OJFhc`{ob$c!4)F4 z#_vRI^E>ek`CPa3nos30Z;KN;GA%dXJtjb|f<56o$Co{3(s`V1-BPldN%hg2<#><& z-tbyu$KB|LrR*CDSj5~Da>Ys*3QM!K*EuDMJPJK~&waw~!2GMe`l@lwPu0^RWG__l z-C{eKb-hEkBXz^k#DZ@Q-&QTi-e443AJWCv$rT{e+^_!dvg<+{zK7;Ntd?|kP1w!1 z>g1Qb|2Ngmy~=TC#w(_p{kd!$TDwGUDvr6&UbAsv)`#$emo)XgzA>xfsIlJ-o93{e>m&k-+un48_S-5 z7S_v)7jKkuIHRv{tapAQtFgsQr6t!UcfQulsmbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0{gPtyqAr`$$r|!=V4wPt{U+g#Owl${pD#%%A+= zmyS+oP2Rm3sYimZWLAgvS!FZTs-@8A*IfD53`(@vzW&|I2woSF?&K=Y3Z&MyT6Dz4s z_+LED%+F+YG#{VqgRj=7uk}B?{(#W$G5K&w7w_ z^!O{*FEg}?pBibK&i|>v>3iLX?HO~#%AaSZp6*$>Xp;VcN$I?gtfudIpYitFzcr?R k_|`Y>JU>Hg!B6JB$!p4vR=i;M1& literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_domeAll.png b/www/sunders/images/todo_domeAll.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0ef2d00b6b79d71e9325a826b2b8064909620c GIT binary patch literal 1145 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12%pU1+nro=eijfSlB#W978;gFP$Ep zArmTbyuLWCEPZ>YZtf-DO_^)=X-sVk$##>-`){v+qB?Ml6k0xYj5 z^V@kSyGDCyH*qdh5c-v{<=6xhFQG3-XL%QA&+^`WbM9?RyEB_^pM96(Ry42e^Y4Gg z|9_qCnQs1#%Yn;M;cf@Us)9l?6+IngBhN(JFP%5Bop$WUGKw}99Dl@WhACv$cpAU%~}$;;=9d^na%q9eT_|bJG9ujT#-z9x#wuv@k`Im z0@Dp9)c<+>S;JD~Osw=$_Se7Jjb3C4B!=irmbL@muRhc`-_3$^wocGLiTirJ_G|UWMQG)HCeRYjDaj6TFr)`!-w#r^k4Eo|6Wner$6hy zdtaF|_hE{7M^{1HQ|5@*x^rGvJapT~raSrcb}6o(&i;G&WBkNlMfX2HePC1K5C2fR z!!u8Qki4f=ma}e|&Ge^VjXx`TC4H@)Ag#D*_rv3Cy;EeLKJrL5VArcUSarH>p-_HE zO2t#H=(>4RUmsr+!)x)*=HQQ-ChqC z<~3%exB7Lb-dy;y%CGjbnpdW(v9-#>DX~F)sfYJ({%}>aGf2@)wqZBR|2>Smjwl7?}IC@LZd3Bk0~G)}ngL zKzfqQjufGM7G0rxOT-#0lx23LB$=sfbcudw^h)mdxAR6H-ih|T39i^8R`g&-L*t5* zf)kHSZmo)KXa4%(UUcC%^~n}n7XIAtAr$;AIilG``+d{9*5WrWZ>-FU*=(5|Ci3S| z#iaz(VE-c)vrKn)F5bLqRcFQ7$jz-WUUPX@OMOX`sre^wSH1R2=nd_&3=9kmp00i_ I>zopr02Kx&8UO$Q literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_domeBlue.png b/www/sunders/images/todo_domeBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..7897384cb624e7315113b94aaa95028dee3da57b GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0{51uZLAr`$$r}}0KJIb`rpL=&tMD`W$OD1c-=y(bJV!B%OF@TffTCm`rh&SdR zLaKRezcPy~X${h3T;CP4LH)JjN<&uXb*&RpUN4+wvM*=T=Esg2kDjF}?tlEJ{__We z!v?o9SFUtO%2+?q$Xz4AIfF0mk%r^pu0^je-*{!WVDa2(ue`#uYi#x%ICW1Z-tW+s zr5{+nyyP=iijUm=y)jyN|AbpyQG2(nwwv00r}pCs;U&@c?9UpMzO{0)jGXuWt|SNB zhF^JnPg4XJCiK>rS{WF`_X=@cGcb|SiME%YvHG=3TYW{-920$`Np)-usjo9EcKF@b zUK4%&NBzT-tJ!^G)>bpg)$e{2RV=w}$vdr5@8#=G7d(C_t;ee4f52G#K;FZ&{KJc* zj%-d`zK(mx-2TfsKYt&ZrE7otXGQ&kG(FFYJjvfH>b8l9oHdxeGo^k(kQBFdcgpFF zeap^Ho1bHO?9e$SugrBjUk5Rq*_@b{ud~r4^g-dLjw35L9Tr+0I(@!y8=r9OTV8k0 zwwm0!ZMEwjUQ1l`{8_#6lkCSDjTsRai<=!MNtk9v1hxolUh$@Lrd&q*xuQS@B+_b-!7$-PV4ieos#F0{Vo)R1j{zd!j$ gPo|2d!w2>+ayyq8Zf+=NU|?YIboFyt=akR{0L_dMh5!Hn literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_domeGreen.png b/www/sunders/images/todo_domeGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b1015f89d2e83fe02595da07d3d2bdbc000afe27 GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0{g`O^sAr`$$r=InSc9dwF|MS@s6-@~)&4`$8+ zGV%1j3=eU~&WXn_eD+oaXYJNLveLS0QR@{P_d41o_gH(8k;H-Hn;df6OqQJPoIm4uXM09xGPMJd?W0cy-kg_bR_qFm9ni}ulE1`h1G{c zR6Yo0+>u=U)#1>3{~I4Cl(X!3yFi}t_5BKY*1TyS&N}}*P^wq@;--#r1DB3y!JEUL zzj=O7<7)ChabhE*MR0^hf^MT|vrv2D&dZ||Ux?|OgzVPf=BfaGL z?EgYOiy|B6mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0{4W2HJAr`$$r}}3LJ4zg@H=cR-=7a{1TXIbkW(O@4aS;%yn%-dha%ud6?~B3( z_pH3XXzvz<2!TILf-H_UTO9S1HcnrbDRo2brv1(9hvlxUxy|>)lK1@YJ@#@EZGq`` z0}{Lxe$V)!9JiO>t6-AGqz#U*?x!!3V-&p-S+4Q*3+v?b>T~vVb?j?il4p~8;9kqp z<+)RkrU-4_R{LdcdxrhX3)QyrJPW?79rL%!2!3sBH)Hnk z9}GTg`yDxj{!8BZ#gcZAchbB=+pB*@COL3cnLXjsK0Pb)@ej!#=64!Cu3r?Mq0uS5 zMkhMsMh)k#XKZKm5_bGwAD&_Ha@WCAn^+(Gj6UJU_tvfQo7aPc>Du$>FR4u1@S4Hp zL5A?L`2Y7!q@QkHeAdQ#^`WHpyJn!k65p60t3xxA~kLp^R7ZjeJRFVC{WBW#J-ze*8ue3DI z%Pz86vCb*`cvAQ*mtDQ5_BZg%-h13d_RlZPkY#yCGFvTT6t?nrlt^Fr!*)u4?t;?e TR~IlaFfe$!`njxgN@xNALbmsM literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_fixed.png b/www/sunders/images/todo_fixed.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf86f3e46d76fedd59beacb1c44ef23915f7fbd GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nt)4E9Ar`%Br}}z?B#N}n|9p1u=irc65zAJz=!t|F=xQxfFz9G%TqNdtQAs0e z2gfb8tBYJu-@2lt@uGi)t3`-_l#rC-LRX(A(bUC#%~4b87Z>kce$=$o;j%0HzN5B# z?lZqXZFzsH{M}?O;~Pf|@~jsg;7~f{)jl)C||*KjjFE_ zXWwQexoNDbtpd3mK`|i?v$!Q@OVl!JuDk1Zd3wv=-L12{4yI3Ix8keueQ;OSBT@LU zQJ(e2X(kL;MK@H>-cZafA!zmZ)N8#T(<1DeBD`lAAHTKHsZmhKbG_tB^BZP2wte5b zHta?W>*dQ%)ypq^^ppIz)52h4OF#mPw@aZ+glN;IOF0t_1$Zjb{arFTI1Vd+Sao>m zYh@pwwAphO2HJdl^)VyzBmNxyEaGL`ITRZE8oCk-bWZSQqd%c#{I1yfUh4Xec z>wbB=+R%C1w9@^ha^x+HKYTk}^CR-WBBl?&TmLOdw|>wb;PIkM+xM*3!zvHHgKY*q zeNN}3UU(mRA1KEDY@M*5yx=3-g4Y|1UUdWnsvU`Q%HMx!{-=^==Yo%`P9OVfU^efq zUiQI9wx<@Sd-*Oc*mp4?P_1N7yZCys`%?}oO3ePjF0kP3+Dm^UPo8dkIRDh&W%WGI zl~O}kvl~C|%38Q7rXWqhKD^_~`W!Re)79tBJPDaG$!Y!0l@fjO0&15Ep0<5@IlHK0 zen9wEn=MNO)RrHTxbD(n#*#kUsd#qL-*u-SOep%i@Y9~qljmp0?_H{OOW=s<#Q*;f eocjNd^$+8_t4fa+zn%@s3JjjEelF{r5}E*Vf^Z-J literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_fixedAll.png b/www/sunders/images/todo_fixedAll.png new file mode 100644 index 0000000000000000000000000000000000000000..0575218d147da4eb2ec0e8002ff0f40fc400e46f GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sfLndiaR?bgBXP6lnSi3!4978;gpPgQv zBN8fcw7xh!Eq(i%EqBFsb%&@*9P9{uBB!8xCNoJf(He|Bhbt#OUW691MT*{8E@&RXt_EW?W{`5zxxFZ9gH%y*M;Y|GDi?Dg9ZXy4|N$$fn!MO^8b*`=*F z*&Z}m2GsGVm>qf&|KQNs03+rL=k)izc5R<=TcXqc^VzQ&KZ{M?S!&qM+W-1ClapDJ z#Nw(G@*Hu?#F{#oKR(!5V%M{eGlj9Qo=4q|_4)kG4&Wezs`ANX8Vy4##v^IUKOMTJlpZ_iAbW2WHG}Ez1PZl6&;GHMmOu% zi#7gkyRb2-aY|Pa?_G}5Qa`rkPF<9{^wF2|3vwp>%=oxTpkiC8s?ROv$7Z}AH)n6y zu6y>8f8Ns4t77-|C8tY-H>Qj4z97}U{j9}<~wCjqJ!6nBZro|I(#4jl3j`?KQ5tty))t&q2yHZ$vEiJ7% z*viZ+regY|Hh@7!yl=~)b9W~_{m!MsZMDnPp_R3r=N_}|?WWVSI8w`*4k?jTmvic`PpvUo3lJ zeKJz#q0`OW2~jL>S1W#J_W7aXv7ug!P0&)fYPTfceTg&s%5ysQPd#=pM|HB9e)^{y zdAo`qZc=V+7E%*U*wm0`*`mL2G558-I-dQFcUBt6ZE`uj`QVzgYt6G+7t8e7as8}K z_qW^q^Ul>L3EMv1*DsWhC~l{|4Eq!IkRo$Vw+wr@5T1@=$lcA4}W^dSfE74sh zUTTg;Oh=~Q@$lmI$1mmtOr5cb?f!b%i-IrhkCd7JK4Sdei-CcG!PC{xWt~$(699>0 B&7uGR literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_fixedBlue.png b/www/sunders/images/todo_fixedBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..35f513346b228459674ccd6ff7f141b39897a633 GIT binary patch literal 1012 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SLQfaR5R2a4tMxutQe_T&{QmuS&Hm$ePp%i>=jXd{?F{4M$L-2Jvvw|fw58}- zQ1rAZr`K$ast?(6O@8LqYj-kMo2s7PYI0_ovGk1YZC{)eJ=Qr#tTXcG+wr1_duRN8 z`M($U9Oe6BS6?^peB61v`Oj~D_E>mOQ@BLrrOK{*&Sl3qHlB!`mYbV@>6{jKy|6TG$;pGxY3u77rvBcZ z5NdKS=I+VL{oTUi(*>?h*^&=&SjGDk+n7vU_xr_T0E|l$-bY57Q~f z*<(*hez(miM0WP7z(9c~bGI(%G2|Sd&{N2*x z>2-itl#=g%?U2wd}2v)k5}uXp#<&h)60TaH9-d|&7je8~J6LxRSP^KakV zoenx~@i_RKrrhZXcQ9Ak zCVSICW#NNUoSz^5lN|M6RS~kElr8IaA}VS@o`#Q0cfi%ClFfnw bf4KKY1Ztaa%9CbbU|{fc^>bP0l+XkK$P4D- literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_fixedGreen.png b/www/sunders/images/todo_fixedGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..f28c82d10350e77c610401e6804952d2f739840f GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nI!_nJ5R2a4tNs~st}@3yoqeOa)G<65+%z#7{p3z~jh>s~9@(jnxyBuJH4$mIR*_q(khCnira+g4j| z@Me>7P364j=GMYt)Bl~j5_NR>tAblwKQ?L1UNR{`_pHVz#?ZeKToa=%#$DK+QMPB1 z`H4dZTo#+3NIS0mOHA}F>y;!yf2+y=N-{#CykxSCuP-uhJY=}fTSjW?KHqwcN1le_ zweG8gY@$8{9jw;X`(knL;XjWV4F9}LCw1?eP&e~*@axFV^SjR+TkBey7He#`;>U(( z&rct@eKf&}qw?oU8MZSI?t~bBtPg#r!#V9^+0o8fSG^xpcKO<#7l|xweOBgdAiBf& zL)z^7)iu}d?aUM2VefWGC39o;;JLnaA~9bwzK(WPm4<3pZr`Td7Z`Y z>YliZ?+rwy6u0wO&ezZ6x+8j1e!JOMy*I~>o0{|7G=FkZkonKDn>W&fnQtdb=JD0s zedw~hvF_5-*?Rn9D!p4<o z^S4&++F@0YpQ3xV!%((l%hf*zzq{RAQL!UM^W%|@R>SRWtL4+(qhk$aMZ%_EE4o;9 zc4p1J)1fbaA6c@o)NG1ucIjJg^HrmbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0n^`0({Ar`$;r+Vl31WFvQe|~0f@%t@@x6Ivlbg^dCp+ni1TY1Ce6cdBZZfxA3 zvDPC*OVP2jbuKHnpo)%3uWe@M28S6-Og_Fz&RV85{hsxAzy70{rK_BePoHzAcwg~5 z{rmra&!4S*iPPOtEc)*86JL_tf)zwqTZMl3%~811qFu(I=wfBKY>^}TyUi*mx#i;I zS1d4?XK)~jZ|ZTKH(#e(9MfE~bk~PCwVylgAAa4wDy$=yHBmGmf#IF>m)-hp8$-m6 z-h4N>^pepaUwF#9)>+0Ee#nTGI9+6OIKwNybB5xZ?+Fq|HIK!=PKh-3klygsY8&&j z{6(3p@jjG98(=G?y|2EVUlEBEOUxq>(%bWm&_WsSD!yW zVLoGvlb>qR?JM?Y1*SRNy4AAk@r4f(VzF~;-%}pgO z7D{9U|Eb|R)!g}U|6%o*yPNfMFI?c>n!fyd&&tkE32UPHmH9Tl?b=kE5c2xB+8LP} z#S;5iyz?4#*w*Xw8<;nVELrzD@v8GlIgPt(d5h!@oe*8IdvSitr-U`y`~fo()-yeA znmyx9An%Ev2368+=Nq^3>?u#U>S)06%t_Z);-vb`_DORCw(+z1H+|-K^)8e7o;h8NyB`W#Ugg{jUUB-p8fbM{dvker__h11MgOBmbzrV z)$_lwkm`hqFI`G^Pg`m9>+)u4ZWdPt)d~BAkH;;XEZV*>Mf^_%)8E^TIy(E<9<~-U zzZHF8UAQDaZ^@#gN+QfED*A_)JKs9X&z|r_%;nlS-ZdE;Kb-CDD0#HI>(}y+al8|4 z-ap)Tu}@s+5KFac$hN46)vF87lpVREe<0|tM4tY`7vUVK+{$UrDRYXLc60jYusZ!= Za=r5X)O;h3Ees3{44$rjF6*2UngA_?X7vC7 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_guard.png b/www/sunders/images/todo_guard.png new file mode 100644 index 0000000000000000000000000000000000000000..ba85599c3165954cbb8e9e01b44f08a4fa7ea24e GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0n1)eUBAr`&8Q$77f0tFiOzsfss(V(H3CC$O*NTL4u_Xw*Q<5-9yok^!%}cft2rP> zrN>XlP$c=Mt;mm7ru`eDqT;ptqxb0NO9*I0Wp1D5f2!-}e7OTprWi>yo4=o0BDJeJ zF??%U$t=N)r#pT%FEfeVyWlj_j_(@02PR7G5IDyZJMq(V#-rP0ZDaIv?!U4P5Nv6S z5;wEm%vX@d_p5!*giq$2&;2VFXRHwA`Xp=nO}g$+6g$U<+zV$vo|jMm^4xji{fmzm zzq_~Z{Jr)~Vbb^N8kB#_9(b~);Ell*c>x{omp?UbY-673<&eF-{W+_j&%wiLPfxi% zd|(%`%2FUJdrqL}yses@E^R@del_gVKh^zhtM$3ld`tJLf8MoJ>&deNcmAAeRbM~l zqo-<2dccl~`m&(Pdu+O~aS?fam(S@`n>nm7Id@>f_2}=`9d)68*DOtMU0V1@;-pOJ z3XwNA876hyyZ-QDTHd{F*L@77Gxxkvmf%S~BfLyWVu|6S#YRs|&gL97S!l%4D=05| zP~mfn;B)Z_YVBzrrJD@%MGl`>m%9A2n(^kN335sE3=%%@>reamvp%`Zl!1YP!PC{x JWt~$(699rHViN!W literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_guardAll.png b/www/sunders/images/todo_guardAll.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1f56f4868fc765e6359271752bdf1e35eba9f1 GIT binary patch literal 1506 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sf12%pUWufSv$Up`L)_hMF#}JR>z0+fJ zL_#In<`<`>rEd?|aCcMccHN^4y&7FyCL2wCr)UUW(0YypxtZIucW<^fKHjZqt#et|_GH@kn)8+C z_Z2_0zCTCs@bk-DGKXFXRDEMP_C`^lOVU*J#L~q#7P1*VGIUt1v&FDKR@F1I&?HxM zTa^40j-WgdU(*C@$Gt&KoZ4NNq)uq{cR&2RIBVNqv6+{ddG=%{mNsrme-{2C;hN){ z(8(W8No3ZlKeg6-zH{MDoz*f4-)B8G(V25VaDDJQo9D#|Gh6QN@@(#T_@r!8^7myn z*G)Q(Ke%{RFfUd>`LN%Tl~Ehc@m<(^QK>lZS=vGA*_P~grFGZX|1u2qW;|~>sqfy; zHGfN(m+MPsY!NG3aJY4AWcTGf`&l|ytodSIHaE}ry>Rz(zazKNl2Hz7opw^!Hi&d;LZA-*>iHJ$ya; zt&Z2{uiMWwMqH7Rn+d_po^Cbofcs z+`_~@nWWFclQspp+Nk|lF8;0d$=l_pYXuD3F9>o?{mR>(#mMZ8NwT@U}hVZ|RU@%Gaja(Ek0SG|1wnpH=rAh3~@V`;=TmIKiX zZn1<+;hYpMy6tV{gzL|H;yB%way-fUlehqTk zvSve)s05$BUeArc24xa%`$K#F@+ikwZ+sb*zpA9FZgQ99tXXvqjfsN$@*bt_xWI8& zzoBSP#QCxv7Z_@-yZj@zR%`3mZC__`{y_K6N57uccCC-PdWPqJ`K8+#3>$U3CQWs8 zteBZ}@ASXg5;v}&dqek{tj|0Bz5TdyYmC+`-gx_(=Iygs)?|MAS^xO5MA`AgKW9?x z+*v=GH-}rjS8bI0{ODSIoUC5NLiXDpQb^I|4-v5ReQCsCMO)(Tk&m@ec79g4}38aYd&N@pYPrD$Eta)Ux59D zFZJbRtl~cWDt{F<>b(+;XIt>T{|567wbAwS8`xNfoUm;SR{MTckSPS<@=-u%ndmucyP_T;XOhNgd)?Y?$tzr&}5k8^E)F!I!g z)u`|Po2|_5w@&9=u0?|Q_5UR?7t6A;)-7f+T2!E(cVg*x#oNpqb?+^fIN+%{={M`i z{$(2Gg70_yeD$4w<8s{@T&iw-;hu4uW54+n9?+U;lPCA<;?obE3vNz$C~N*T#>%TA z(thhGvQd7&J^6aEBDu(bcWs%5&9p6uL9ItT7{)_X=4ep@kb<<6EV(oa8h zHm-dAy=KOSMJMK5JhCS@?c(iZeuwjA2dC?X<_Dz^aFHk(YaNn|a<@5C? zyRupj-*V!+;%y;h6sag|k+(4J@`7z#ag|n1zDkaLr5x`?PaZ9azPPr`Y4hX-md3?z zGEy#!-bj1ABr@_t*W(>l$}_ciYOgN2DQzL8yo%{?<{Xpg6S3jRcUCd1ohT#sUtUZ@ WnfqQ3n-K#81B0ilpUXO@geCxEAIn1k literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_guardBlue.png b/www/sunders/images/todo_guardBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..e42b0fc9b759e5348f95ebcae1e0ef2463bd6383 GIT binary patch literal 895 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nKb|g*Ar`&8Q@wM10ws>ue>Y6)I;UZDCU<$}Ud_N&z1J$1G?^@!xFI3=;Y0!N zjThB~1XT`s?NU&jxIk!q>ms?_C83_tt{HBv3*MGQ9iA~WEc?uzYMm3kyDrbj|62S1 zzvceoeUm2_FWFG<(a@)L*X{c4f?LfeCOKLqa?Fgl)4WJzvdC-(R?Rp4T&^;UpC+@l zzpC9MS1|d)(=82VM-v`yIWKejf=}ccj%==mrRF_vBHDTkUi|?YQJ=Jp% zbJGs}s_m<6ukBP9c4STXv-(G;zGcVUDrrt{_VgS$L?)@iU_cG~haYs%F(ObZsDZ@w(( zGS#3%T~yd2+e;!+=uCON;ns6?<_a1!jK0Ymt zR?|8AZgExaI!ndRH-*w)N42-kv zp3JKBKk}9RpX_>VE{E`pRWGmaotYaM@Hc$NpCrNGr*D1SwTPwN$a2T7R_1-nZ(L=W z9;c^fl*6tdar#L~@yq{>wt?c+`8iLX^{sxR_fF#J+xUB24FW>$(&2^%76+MpesbM; zIqPhvTf7!`!{h$&fX^k7UjAk+XDXr(CCSw7Xq$Uo>t(N%udY$j^Mt!qtKO~M+9RLu zoxmY!D)v2K#n;Q9PG(D%EUe}H8oSwI*FMJGzR#aLHi~0ezWh$)!fXCI?;N{+t?x>= zU9VxkJ@<^*<<2(Sts<4;imyWgrYL9J2=?wYKVaeNFKy&^QS&2P-Qgk@D^ZXA`x%&9 zcdJaw^(kTrc=F_bW<%Zzm%5bX;O>hn8B*#PQ-nqL+Mdsu%)r3F;OXk;vd$@?2>_i% BlyLw6 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_guardGreen.png b/www/sunders/images/todo_guardGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e678c315ff911d3bfc07e70ed769fc7f396edd09 GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~6e@_?35R2ZWQ}<_!1PUCt|7^B<`Vs*}r6NxUY28aK%7Tyi4SHWRhW%n+BDC?U z8e?a#Se9rG^CC}84#8##ZcAz2E`cXqH(Y##`&Cv<-+lM{v84BV_TKij_`uCymY%-v z{>-`N?>&FM)@Sve{+&tt{mt~cqyVc%=No0U6;^I3`pj}{I`iy(C%PUx%)3jwE96B+ zY50_n1TS!Ld&J>^!x(=6_RSsdzq1 zE?e*1lL?KEoo|=29BlFppP)2n^M+-H7k3@VmA7L*G+pKl%cuAC>$Gi7Dfql~Zt!NC z_gul_H}ir6X9Fr^wqBcktDSdGNkM(T-@R^+iKYoMPWi{$tp$CqJg8R63!WOS=#$p* zRY*QP?e^ELJheib#r)nK$XRkG(js0|&gJI5!))7Pqr4+6o^KHj*({NtO+HBpAc a@m8U4y?NyuEg2XX7(8A5T-G@yGywnuU@dz9 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_guardRed.png b/www/sunders/images/todo_guardRed.png new file mode 100644 index 0000000000000000000000000000000000000000..33d80e16ca5a35e60a869244bee60f5fcc8e2ee7 GIT binary patch literal 779 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0n4o?@y5R2ZWQ++)|5+#n;pMUe_%(^_sb?esZcnLI3j7*f}YRWt6wERUg( z-i}usUpy9?C?u!E`D%%X2ust2wH({{TwRwmH3lwtS~nwl@$SvmyYt&U({sZkU+^D3 z^SS=n-?N|hygy^T$skozLoguuMQivEXGsCq*dV8iT#qH#PnlMjI9Bx;OoYheC;H@xF zekP}#b%TAQqU#$oma>X{_1Y4*_gI)l9MDj^@bwtaPEP%cWx*GB#BWGnFr~H4wn2>{ z$BrrNQ0vUO6Ml2V_w9aMB)q^p?Sf#dR)xc2<_ibzysP|X(s1aFh?(rSKM(W_ZY})4 zJ6(}$ZIRrUun*h4uKro_p8Iq2)qOt>$Vb0^In^;?cl6z^Ih7}Bo8APsY8`x(%pqGO zzh~Yx2Gs|#=f564@9uC^+p_wmt@&5SFIBk@W=)$Ox0{<$z;b=Yi?wnBH&$j?KHnN2 zb%!A$uI*`gy*EGi#no5ieNIO@_V3vDSMt+jX$Hn=_bVnmniJhA$5?;mE4T5zz5C~f zmoNCAopOA^%P9}~wdRB!?+=A)4syJ2$6nP#hoqwf#J>|azXv29L7p{Rn% z+>q6YulgP=S+#u0s#J#8tV`ZsJGH}$_wXT)x3ZqjoKYLBCdxG3^bYv*uySd9*H7sQ zGAkIln7l4@hs|&ZuPQCo-ui=O&GZXZj*81B>{EZTJS$xGMbjctw`po}t3I`V{C|I+ zo9~vpg(lJ6$z|Iw8fFQ-Vf=WVU(lYVI%dYryKQTa3Vs(4IHuFT_%>%xfK<)WUmdFQ ktg9uD+jOiw%Ghf!eEi|eOvi?F1_lNOPgg&ebxsLQ01c>ITL1t6 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_panning.png b/www/sunders/images/todo_panning.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0b3206e7d0225d828aa3bf0a3c8f1eee03a53e GIT binary patch literal 939 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy~+4Nn)x5R2ZaQ++dHLPd_(KR>tUr^jrqp4`c4Y8FdH)?T@E$zk@aRW9A8TeLNs z5?o_AZneg8yOuomJ8`VHyP+whYsQroS6GyCb8|K>TdJltOU*d{(~OcyenFp&zBzGseU{ZyXSD_{_pnxi{I56nb-LrJpL&AgWg4vz0HPluOs)#C$0R#(ZUzFkloDHem=PO(7(G6^th+5(_EZT>-JcQ=%DNhrgAr z^fqE!G%-QmQb)#8$D;Db!&T?MMh9qJFFGwM5P0Z6+qZX2_v;HhuX&|qN$)ASQm}|U z@9(;rqHXv3eqVcE5i+6Fgo){>+k({M3oqLaoM)f1nfcTd-l<+2UL{$8#klg6>t`O^AH(v*7Epb!_L(Y2FTQ zD+yW=HdT5*r*e4BCcYZO6?1-@HKfblnAK42{UN|OB`qOwW8)#~&jBm7&PuZgSbaY@ z?>O%|?!V5b^!ICB-lf~INA(G%4xt+1SLU${MgrtjGcBFyRAmMyDX{J}|l$?e3;Y#%~TSQu2r z?lcVC{OIju!&|rdl!_m__I{L`e7TaXEhg>L|MyL~cbSgwdc5TJ_6=twRerEmxGa(X xs3+VnCJ_1iA9H}{oggOO(x7XP9Xje6rUp4MTzIGJ#lXP8;OXk;vd$@?2>|Ssv`+v4 literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_panningAll.png b/www/sunders/images/todo_panningAll.png new file mode 100644 index 0000000000000000000000000000000000000000..8e2b7bdc98ccd56ecd5078e6ffcd5bd802f26cd1 GIT binary patch literal 1682 zcmeAS@N?(olHy`uVBq!ia0y~yV9;S;U=ZP8V_;zTw)Xx(1_lPUByV>YhW{YAVDIwD z3=9mM1s;*b3=F*2L734=V|E1t0|R@Br>`sfLndiac7~lh#8ep=*yKH3978;gpPgQx zBXd;tsJ-#-^4G@c?7ws7*Ot{qObm)@p0(p8zbR9Thqsqdz{(X;!6!u=m9{Q*49v_9 zX`SY#cOo#9GxTrcgscU9TwE(A#CNDHQJUbSoHJ?O+(}Ybci8>kVWIf#=ex4+Wy|W{ zJk?A89rXX^M8DnE{`t?&o+-b-PguM?NXka%uN33+T&9Pa0<%<2bqj(8?>u13*(hqT zg0pTpgSPI>jk70w;;zVv>rkE%D7fTS!*a2Q+Ra;H*^jZsm@x|#7QWcTXYHSGT;22A zjg&_V<}Q6H>d3Lx@$X`>u;?iv1?F3KyL0bIt=e+@*vorg#9k+Hsn$EK{hlDmeoM7v zw%BVIk*T-OzI(^cwIk8NTlvmb!y})bNkrClZTZ6Z=7);1tl3P*j0%=jW=#guHyq?! z@;h&#RD6+TU_v*V4CTn~tkJn4{BeU-l$zO4W9od7A?l z+5A87k>}8F?KA}&U$uAT*YcPn8AE=Yzh2Kg?JlPl@AQ8>^WU(imwaS2F8uRL|MES5 zlfc|w=WRUe7DP>Z-tX&hVwRhd$t}jmRV)77*&}7@&~`AVVb|LYzc|*|v6$XI5V388 zjleA9{y)=X<86F>HFhtsSrRa3V?sNlX%p*H#fyJ3c0ciceSmA)qdsn@j25|l;m5cKD{HELWc-60Tp~|NVi}o@oP77JTNk~8-=AAX`=ZuF7ni-<9?G-bs zIx5X1&jm-RvK(cy3KLk;aIEUSrq?sQD<0x1b!$BLv)^Kys;M8Bs`%SqqB`Wm%3y)l zdPgtkHEb5_RH*-NSNglkwIb~2v|g03c5+py1)M4`o-m{7-rrgAZzk1bX9s#8 z+_QyuI{zD3ycGp%2Q!b7uxy1ZvLUq3RBsZCX~perA0;v?bQ6g<7~&V6^*;zJDsh4pr-Is z`rsSsS#Ng!iTsoM%(bDvaf%u#@u-<`|+z=fByUE zJPJ^KR=ZE+jA~+qcV*%=DS@z`ocWou3r}r2{a9$#I>id#)d~_b^dq?MdpDNsXIuL* zO|e|?44dN{&G;LC^b`JmPx!jJE@IcDI~SDZUn+XD_cO0w&imB!vd6hk`esIYWL7g5 z9BQ&{OezYlbmwDxFnhKte>vB_qRscyXE88c_I2gh8mn-Z|E6N&xr43u4<3E4_{(|4 z%Z63ailvv%3mUOZeXY2I>C*CtLGkxeZyoS;wfJ*je#HGr3)UH(J^lZONp;^{E{E!z zIg-0O4_}jbt$Kw~zj}lE^Ut?c&#d6E-|?U6Y~Tu>gVpjGefu9zfBZ@9#0|kCcOGy@ z@ydY8k2TF*(lv$QQ3b3fZ<;Pdak$j(KEre9jN^=Vte;AEY&!3>?(PxQ-xhz9ec$|k z;P#6xPpjwivv0Lqwr??%u4t`e{cZE&bJyoRl3Oya&;Ic2-=P;Qdv33{EME8HUCsW@ zP0yaK|H-&d>pRQM&EDJ}4l%sd<@q3L?mE--H2aTlV*LH`8c(DKMltn9x0xx?rFfcH9y85}Sb4q9e0OFw{ A!2kdN literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_panningBlue.png b/www/sunders/images/todo_panningBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa6b07c007fcadf6deeba8174af86d0ba4a6c02 GIT binary patch literal 1028 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz1SMo$;V5R2ZmQ)7LC(4u~vC-qoMOsTQ-7 zKjq}6oYUK09Ff*PV<)t&MQ8WLR8P}JgUzWo)h2cH_y`)Og=>i>Ejkf?+Tk_VmM<4B z7neP}c7s7O@>|T_%K86)pZ;Gt?@49rhX->QJyp&vdc8j>*r}uGoR^ciOIir~q6p7P zwGAyio-Tid_c%^G)+e>ck$sigT8hYQ@)8f@vr4?*C-~0Sk zT3&1Mbe5`Sz8o)(NRg5d-=wXn^WM5H&Q$U=*`TRq=KA!)IXSxQ>h z=|%Z=#!Ev@IRh_vnr7BVHZ0N8i4Iz}Cect;Lwm-e%=?v1?)HzDGwXJjXg-+inyjG1 zUt_RFlAFWf<171<6DD&sZIp=k|Mv5qx@W9)l5zeqlRMRnrm-FqQd{TytoXqhZx(6$ z=TA=CFDv?F-@Zfb@-zK~XXBmrnR?xQ#(3|}wd2k=jc2&b<bLnjANvZsz~fThJ&W#egsaPF znpaMfaG$@+BlIIjS+mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nsh%#5Ar`%Bui9tK4V5_l@w{bz-o4oimd@}h6exYAlJP>}nmvoSW{CQ3s~2}1 z*%etY2F%%2Qn0E!RI9YWa0<^tvCb3$;pQm|1gs^ce3d(wnVWy#_q?QH{YleIm1h1u z1@{hD?t5;z|Niee=4*8S&0Q(-F(R+FD}9zkQS0GVi#T%po(+9!PsubaZ)a zovp(?q3>-?6Q>jRI36Y>#oM$rELUn?DEFRu-`=y)w{LD=X?Jf~^TY2Sf*+mr+i>Se zQT$Tt1G+J*D|Vh0j-K;AWq*p<#=Gpdk9-$>Zso(D=Du;p;kpMaBX<9(O3^J|dAd{A zZ`%|3W3qb@WeI_A7<@}Zb0 z!+W{2y}#O)&(NrzT5A#@)q6a2?)TRJzr_pWpE+sPzMdSH$H2hA;OXk;vd$@?2>|wi BcGLg> literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_panningRed.png b/www/sunders/images/todo_panningRed.png new file mode 100644 index 0000000000000000000000000000000000000000..6bde24b35195c7e8a42b6acadd5b4191ad8f59b0 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0n3!W~HAr`%Br+RyYB#Iobe|~Omdh$NgDhC&j0r+(pnpEWWE2#XK{~s)g7kr&gA-8Vq1CNF~*XuV#1RUufsd*?qtl_=_szw zHS4y-ydMe@jmP5b|9Kc^#>-EOcQ066m{t`t$1`IWLujnRH#V*_j%hM!RWWxmWcK$d z?CdQ5_45qB(c=v}rMK}mJ#*CY=sonux!~A;Ub$QBxAV;tst7cK{-{Sp+ro*f8gUii1ZR+&E{al`Bd4|TTmI^H&3Vaq!2 z)v0fSN29nx%C)0n_N#uJ{fhbRhNoIv_BTz7p89T!BbH5%e)k(2GkhA{6KdxmT0Ex@5&O zZ^OcfSDj&DGyZeU?svGFxbTUFy}aWmyB&rd@$EkvBs;8m_sw-OWW2<2Q$u9m`Yk$A z)+;ZXJ>Ih4@GVmYW0&TM`o^8ohYo!{^_TBWqtl%d7J<&Gp&S8G3}TE&*>?La)OeD9 zU99^}O6nP{@;fiDwzpb#$i`X=9@u~SL$T?Cu7^SsB*O!i?qFzDx#4^08sp@Myhn}4 zK418Dq=QrEQy{DL{B`OQhL0x9723jJpXXG>F-zYump??d=?nMf<6#0$><6wh&D?HK zf1ZI&d4m6S<^AgITTKj)`Sf?+WoW#sR(Y~U_d$)pWEIN5z`)??>gTe~ HDWM4fz6o^S literal 0 HcmV?d00001 diff --git a/www/sunders/images/todo_traffic.png b/www/sunders/images/todo_traffic.png new file mode 100644 index 0000000000000000000000000000000000000000..400ca90554985040131a29207895b832e409fb1d GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nOivfb5R2a4ss0`zfgkfHT+s5k zwbe8{SJ_;Tcaqt*l}EaY5+(I|F10iY9nn!wlTy?d(w_QW9PqTJLmJ> z;&Zj%W422DR}DC@UT!g0{zm4^DMDEjJCr8pI;}bUb9RSHUBZsz56SAgIvw4np+MB)=cyHSaRsVmNpOd zEvBniHFi!hkY>OB_11AUvmJG*T=Qi;HqT-3cK+|%E8CKA;I$5uW&7EFExkEnZ11>Q zgXD@b+Y51=oczF&EwF8j?))9ytR0Fw<%qExmIaDyTF%e3%Bl+VN=_DG5ydX zAswBW<${mnJ$G%|Y2vDJ);0Imwvy-5mi@v%Y zZ@oRcW|oa@h*a9MQ~h_(%vtd7{@Wsj5WV!>LfcupxML@Nda7S+KMd7Z4x24qI zZ~gx^QAw4fEBH9ihr8~5 z=IKs7w8`?vUOk@vuIDztU!Sq~oVv-kC3>=s-r)nbiSOkS)1$vGtM%phJpXjN^A1s? zn`&30{w!RxrpM4?&PuM8uC?L0P75V&DY{i_xWupbb-%%LHYzppf?(UexY^$VINBvn z#W3oX_BbYX{W`$EWnFH{?sZ42%Ge{^3pyBQ*$drycuAR2@c{z^1B0ilpUXO@geCyX CWJLJ@ literal 0 HcmV?d00001 diff --git a/www/sunders/images/traffic.png b/www/sunders/images/traffic.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6f67ec39f35634f36eb0bab0f3eea5a0b75a73 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?4@>mbbNq%pgKfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz0nBc3jfAr`$$r}%n=1WL5cFMj{_T+CU6?1_C##U@TP2vB0{6cE`uBj6N=llj)p zB0<5e99~Tt9s(+>dR^*gn=F!F#L>kw>4H;-57+TI8wI(v-R91>F5WM8>57FPZ%Nqq zJ$s&8ey{#{Zn;|fG8WcnNwQDNHgM@o33{^0rNzUd$;I^1{YeT53l7AtdH8+*^SJN4 zP6rJqolNm_h`p|<7u%SBJx)vOngFlmiVsJ6YW`U{J>NOm(s9#T=i`14BX@B*pBH}j z{SJe}<B?05WvAzU5);!+EPa~4 zz)(Ex_+y)W*PZWwUe1uS=Kh&&ZFk>f+cGtr{`>uyKl8CwZD((r|Mlr% zXL#|t_M5bZ(u`%@2OGmp-ejuPKUCWGL+a+EY@eC`T8=IfT(W#+}e@g za!Al7_300Lp37xhrfR*f@;a@xDNW?hljm?sBgicg_1vQES;X;{4X89 z_V{fL&8W^fF8%G6nb@;foy#;e}-k6wm*EcTh-O5#VjZ15pz!4`4(cXl_)TJF;#ZE0+ zyT^%jwns{?S;3s@_n#E@KTCLaygdC`*|d2@UDo%n&Uy5B&ZD1xXJ)9?Mr1@;9u3WT zpcI#|xBh{~24?G)c8m6yOXrKbraN8kb5ggx!DUvs?TPd8YU||{sXS6u8>U-WE?=x0 z!{@u(Foomk7Ezm5A!f_CZ}9le{-15RT%v$W{R3w_o5KDN8=tIybYKtH^bKK2zd!7J zw6|M2;+X%R6`>Zo#&-^FpSb#?sma^#7pr%CzFxNQ 19) { + $initialZoom = DEFAULT_ZOOM; + } + } + + /* Check if the URL contains a numeric lat value and a numeric lon value. + If not use DEFAULT_LAT and DEFAULT_LON from config.php. */ + if (array_key_exists('lat', $_GET) && array_key_exists('lon', $_GET)) { + $initialLat = $_GET['lat']; + $initialLon = $_GET['lon']; + if (!is_numeric($initialLat) || !is_numeric($initialLon)) { + $initialLat = DEFAULT_LAT; + $initialLon = DEFAULT_LON; + } + } + + $sliderToggleChecked = 'checked="checked"'; + $embQueryFirst = ''; + $embedPerma = 'null'; + $embedMode = ''; + if (array_key_exists('emb', $_GET)) { + $embedMode = $_GET['emb']; + if ($embedMode == 'wosb') { + $sliderToggleChecked = ''; + } + } + + $useStatistics = USE_STATISTICS; +?> + + + + + + + + + Surveillance under Surveillance + + + + + + + + + + + + + + + + + + + + + if (window.self !== window.top) { + window.top.location.href="./sunders.html"; + } + '; + } else { + $embQuery = 'emb='.$embedMode; + $embQueryFirst = '?'.$embQuery; + $embedPerma = '\''.$embedMode.'\''; + } + ?> + + > + + + + +
+ + + +
+ +
+
+ + + + +
+ '; + } + ?> + +
+ +
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
+ +
+ + + '.$subtitle.'
'; + } + + if (! empty($translation)) { + echo '
'.$translation.'
'; + } + ?> + +
+
+ <?php echo translate($i18nCommon, $i18nCommonDefault, 'what-alt', [], [], []) ?> +
+
+

+
+
+

+
+ + + +
+
+ <?php echo translate($i18nCommon, $i18nCommonDefault, 'how-alt', [], [], []) ?> +
+
+

+
+
+

+
+
+

+
+ + + + + + + + + +
+
+ <?php echo translate($i18nCommon, $i18nCommonDefault, 'where-alt', [], [], []) ?> +
+
+

+
+ + + + +
+ + + + + + + + + + + + + diff --git a/www/sunders/it/camera.php b/www/sunders/it/camera.php new file mode 100644 index 0000000..d85146c --- /dev/null +++ b/www/sunders/it/camera.php @@ -0,0 +1,3 @@ + diff --git a/www/sunders/it/index.php b/www/sunders/it/index.php new file mode 100644 index 0000000..b285747 --- /dev/null +++ b/www/sunders/it/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/it/stats/index.php b/www/sunders/it/stats/index.php new file mode 100644 index 0000000..662cc1f --- /dev/null +++ b/www/sunders/it/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/js/leafletembed_functions.js b/www/sunders/js/leafletembed_functions.js new file mode 100644 index 0000000..cb199a0 --- /dev/null +++ b/www/sunders/js/leafletembed_functions.js @@ -0,0 +1,457 @@ +var ajaxRequest; +var map; +var osmTiles; +var plotList; +var plotLayers = []; +var footprintPolygon; + +// Returns the value of URL parameter #name. +function getUrlParameter(name) { + name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + var results = regex.exec(window.location.search); + return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); +} + +// Draw the map for the first time. +function initMap() { + // Set up the AJAX request. + ajaxRequest=getXmlHttpRequest(); + if (ajaxRequest == null) { + alert('This browser does not support HTTP requests.'); + return; + } + + // --- URLSearchParams is not supported by all browsers --- + // var urlParams = new URLSearchParams(window.location.search); + // var embedMode = urlParams.get('emb'); + var embedMode = getUrlParameter('emb'); + if (embedMode !== '') { + embedMode = '\'' + embedMode + '\''; + } + + // Set up the OSM tile layer with correct attribution + var osmUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + // var osmUrl = ''; + var dataAttrib = '© OpenStreetMap contributors'; + var permalink = 'Permalink'; + var mapAttrib = dataAttrib + ' | ' + permalink; + osmTiles = new L.TileLayer(osmUrl, {minZoom: 4, maxZoom: 19, attribution: mapAttrib}); + + // Set up the map. + map = new L.Map('map', {maxZoom: 19}); + map.zoomControl.setPosition('topleft'); + map.attributionControl.setPosition('bottomleft'); + map.setView(new L.LatLng(initialLat, initialLon), initialZoom); + map.addLayer(osmTiles); + addPlots(); + map.on('moveend', onMapMoved); +} + +// Return XMLHttpRequest. +function getXmlHttpRequest() { + if (window.XMLHttpRequest) { return new XMLHttpRequest(); } + if (window.ActiveXObject) { return new ActiveXObject('Microsoft.XMLHTTP'); } + return null; +} + +// Create an URL for the current location and use this URL to reload the map. +function getPermalink(switchToLanguage, embedMode) { + var center = map.getCenter(); + var lat = Math.round(center.lat * 100000000) / 100000000; + var lon = Math.round(center.lng * 100000000) / 100000000; + var serverUrl = location.protocol + '//' + location.host + location.pathname; + var embQuery = ''; + + if (switchToLanguage != null) { + var supportedLanguages = [ 'de', 'en', 'es', 'fr', 'it', 'ru' ]; + var urlLanguage = (serverUrl.slice(-3)).substring(0, 2); + + if ((serverUrl.slice(-4)).substring(0, 1) == '/' && supportedLanguages.includes(urlLanguage)) { + serverUrl = serverUrl.substring(0, serverUrl.length - 3); + } + serverUrl = serverUrl + switchToLanguage; + } + + if (embedMode != null) { + embQuery = '&emb=' + embedMode; + } + + var permalinkUrl = serverUrl + '?lat=' + lat + '&lon=' + lon + '&zoom=' + map.getZoom() + embQuery; + + return permalinkUrl; +} + +// Use the permalink URL to reload the map. +function permalink(switchToLanguage, embedMode) { + window.location = getPermalink(switchToLanguage, embedMode); +} + +// Add plots to map. +function addPlots() { + var bounds = map.getBounds(); + var boundsSW = bounds.getSouthWest(); + var boundsNE = bounds.getNorthEast(); + // extend bounds, to also draw cameras that are located just outside the screen, but whose observation area may be inside + boundsSW.lng -= 0.001; + boundsSW.lat -= 0.001; + boundsNE.lng += 0.001; + boundsNE.lat += 0.001; + var size = map.getSize(); + var url = 'camera.php?bbox=' + boundsSW.lng + ',' + boundsSW.lat + ',' + boundsNE.lng + ',' + boundsNE.lat + '&zoom=' + map.getZoom() + '&width=' + size.x + '&height=' + size.y; + ajaxRequest.onreadystatechange = onStateChanged; + ajaxRequest.open('GET', url, true); + ajaxRequest.send(null); +} + +// Remove all markers from map. +function removeMarkers() { + for (i=0; i' + plot.count + ''; + } else { + countTxt = plot.count; + } + + plotIcon = eval('compositeCamerasIcon'); + + return( + new L.Marker(plotLatLng, { icon: plotIcon }).bindTooltip(countTxt, { + permanent: true, + interactive: true, + direction: 'right', + className: 'composite-cameras-label' + }) + ); +} + +/* Draw a footprint that represents the area composite cameras are located in. + polygonCoordinates is a string like this: + [{"lat":"42.9992737", "lon":"23.2704823"},{"lat":"42.9974195", "lon":"23.2713401"},{"lat":"42.9993203", "lon":"23.2706528"}] */ +function drawFootprint(polygonCoordinates) { + polygonCoordinates = JSON.parse(polygonCoordinates); + var polygonPoints = []; + for (x in eval(polygonCoordinates)) { + polygonPoints.push(new L.LatLng(polygonCoordinates[x]['lat'], polygonCoordinates[x]['lon'])); + } + if (footprintPolygon != null) { + map.removeLayer(footprintPolygon); + } + footprintPolygon = L.polygon(polygonPoints, { color:'#0192d9', weight : 1, fillOpacity:0.1 }); + footprintPolygon.addTo(map); +} + +// Get plot type (public, outdoor, indoor) +function getPlotType(plot) { + return(plot['surveillance']); +} + +// Add camera icon. +function getPlotMarkerCamera(plot, plotLatLng, plotType) { + // Get icon name for current camera or guard: fixed, dome, guard + var iconName = 'cam'; + if (plot['camera:type'] == 'fixed') { + iconName = 'fixed'; + } else if (plot['camera:type'] == 'panning') { + iconName = 'panning'; + } else if (plot['camera:type'] == 'dome') { + iconName = 'dome'; + } else if (plot['surveillance:type'] == 'guard') { + iconName = 'guard'; + } + + /* Add postfix for cameras and guards according to their location: + Red (public outdoor areas), Blue (private outdoor areas), Green (indoor) */ + if (plotType == 'public') { + iconName = iconName + 'Red'; + } else if (plotType == 'indoor' ) { + iconName = iconName + 'Green'; + } else if (plotType == 'outdoor' ) { + iconName = iconName + 'Blue'; + } + + // Get icon name for current traffic camera + if (plot['surveillance:type'] == 'ALPR' || plotType == 'red_light' || plotType == 'level_crossing' || plotType == 'speed_camera') { + iconName = 'traffic'; + } + + // Add prefix for cameras and guards marked with a 'fixme' key: todo_ + if (plot['fixme'] != null) { + iconName = 'todo_' + iconName; + } + + iconName = iconName + 'Icon'; + plotIcon = eval(iconName); // see leafletembed_icons.js + return(new L.Marker(plotLatLng, {icon : plotIcon})); +} + +// Get camera height. +function getCameraHeight(plot) { + var cameraHeight = plot['height']; + if (! isNumeric(cameraHeight)) { + cameraHeight = 5; + } else if (cameraHeight < 3) { + cameraHeight = 3; + } else if (cameraHeight > 12) { + cameraHeight = 12; + } + return(cameraHeight); +} + +// Get focus radius for height. +function getRadiusForHeight(cameraHeight) { + return(cameraHeight * 7); +} + +// Get camera direction. +function getCameraDirection(plot) { + var cameraDirection = plot['camera:direction']; + if (cameraDirection == null) { + cameraDirection = plot['direction']; + if (cameraDirection == null) { + cameraDirection = plot['surveillance:direction']; + } + } + if (cameraDirection == 'N') { + cameraDirection = 0; + } else if (cameraDirection == 'NE') { + cameraDirection = 45; + } else if (cameraDirection == 'E') { + cameraDirection = 90; + } else if (cameraDirection == 'SE') { + cameraDirection = 135; + } else if (cameraDirection == 'S') { + cameraDirection = 180; + } else if (cameraDirection == 'SW') { + cameraDirection = 225; + } else if (cameraDirection == 'W') { + cameraDirection = 270; + } else if (cameraDirection == 'NW') { + cameraDirection = 315; + } + if (isNumeric(cameraDirection)) { + return(cameraDirection * 1); + } +} + +// Get focus color. +function getFocusColor(plotType) { + var focusColor = '#6c5d53'; + if (plotType == 'public') { + focusColor = '#d40055'; + } else if (plotType == 'indoor' ) { + focusColor = '#00d455'; + } else if (plotType == 'outdoor' ) { + focusColor = '#0055d4'; + } + return(focusColor); +} + +// Get camera angle. +function getCameraAngle(plot) { + // 0° = horizontal view + // 90° = vertical view to bottom + // 180° = horizontal view to opposite direction + // 270° = vertical view to sky + // If camera angle is between 90° and 270° the camera looks to the oposite direction. + var cameraAngle = plot['camera:angle']; + if (cameraAngle < 0) { + cameraAngle = -cameraAngle; + } + if (cameraAngle == null || !isNumeric(cameraAngle)) { + cameraAngle = 15; + } + return(cameraAngle); +} + +// Get camera angle type. +function getCameraAngleType(cameraAngle) { + var cameraAngleType = 'regular'; + var tmpAngle = (cameraAngle * 1 + 90) / 180 + var quotient = Math.floor(tmpAngle); + var remainder = tmpAngle % 1; + if (quotient % 2 != 0) { + cameraAngleType = 'opposite'; + } + if ((cameraAngleType == 'regular' && remainder >= 175.5 / 180) || (cameraAngleType == 'opposite' && remainder <= 4.5 / 180)) { + cameraAngleType = 'ground'; + } else if ((cameraAngleType == 'opposite' && remainder >= 175.5 / 180) || (cameraAngleType == 'regular' && remainder <= 4.5 / 180)) { + cameraAngleType = 'sky'; + } + return(cameraAngleType); +} + +// Get camera angle factor. +function getCameraAngleFactor(angle) { + cameraAngle = Math.cos(((angle) * 207986.0) / 11916720); + return(cameraAngle); +} + +// Draw fixed camera focus. +function drawCameraFocusFixed(plotLatLng, focusDirection, focusRadius, focusSize, focusColor) { + return(new L.semiCircle(plotLatLng, { radius: focusRadius, weight:1, color:focusColor, fillOpacity:0.1 }).setDirection(focusDirection, focusSize)); +} + + +// Draw dome focus. +function drawCameraFocusDome(plotLatLng, focusRadius, focusColor) { + return(new L.Circle(plotLatLng, focusRadius, { weight:1, color:focusColor, fillOpacity:0.1 })); +} + +// Add camera popup to camera marker. +function addCameraDetailsData(plotMarker, plot) { + popupDataTable = '' + + '' + // + '' + + '' + + ''; + for (x in plot) { + if (plot[x] !== '' && x != 'multi' && x != 'id' && x != 'userid' && x != 'lat' && x != 'lon') { + popupDataTable = popupDataTable + ''; + } + } + popupDataTable = popupDataTable +''; + + plotMarker.bindPopup(popupDataTable, {autoPan:false, maxWidth:400}); + + plotMarker.on('click', onClick); +} + +function isNumeric(s) { + var intRegex = /^\d+$/; + var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/; + return ((intRegex.test(s) || floatRegex.test(s))); +} + +initMap() diff --git a/www/sunders/js/leafletembed_icons.js b/www/sunders/js/leafletembed_icons.js new file mode 100644 index 0000000..0e907a2 --- /dev/null +++ b/www/sunders/js/leafletembed_icons.js @@ -0,0 +1,313 @@ +/* Label with number of composite cameras. */ +var compositeCamerasIcon = L.icon({ + iconUrl: 'images/icon.png', + iconSize: [0, 0], + iconAnchor: [0, 0], + labelAnchor: [-6, 0] +}); + +/* Gray icons for non-specific cameras and guards. */ +var camIcon = L.icon({ + iconUrl: 'images/cam.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var fixedIcon = L.icon({ + iconUrl: 'images/fixed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var panningIcon = L.icon({ + iconUrl: 'images/panning.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var domeIcon = L.icon({ + iconUrl: 'images/dome.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var guardIcon = L.icon({ + iconUrl: 'images/guard.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var trafficIcon = L.icon({ + iconUrl: 'images/traffic.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Blue icons for outdoor cameras and guards. + Those cameras and guards surveil only private, i.e. non-public areas. */ +var camBlueIcon = L.icon({ + iconUrl: 'images/camBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var fixedBlueIcon = L.icon({ + iconUrl: 'images/fixedBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var panningBlueIcon = L.icon({ + iconUrl: 'images/panningBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var domeBlueIcon = L.icon({ + iconUrl: 'images/domeBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var guardBlueIcon = L.icon({ + iconUrl: 'images/guardBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Green icons for indoor cameras and guards. */ +var camGreenIcon = L.icon({ + iconUrl: 'images/camGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var fixedGreenIcon = L.icon({ + iconUrl: 'images/fixedGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var panningGreenIcon = L.icon({ + iconUrl: 'images/panningGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var domeGreenIcon = L.icon({ + iconUrl: 'images/domeGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var guardGreenIcon = L.icon({ + iconUrl: 'images/guardGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Red icons for outdoor cameras and guards. + Those cameras and guards surveil public, i.e. non-private areas. */ +var camRedIcon = L.icon({ + iconUrl: 'images/camRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var fixedRedIcon = L.icon({ + iconUrl: 'images/fixedRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var panningRedIcon = L.icon({ + iconUrl: 'images/panningRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var domeRedIcon = L.icon({ + iconUrl: 'images/domeRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var guardRedIcon = L.icon({ + iconUrl: 'images/guardRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Gray-yellow icons for non-specific cameras and guards marked with a 'fixme' key. */ +var todo_camIcon = L.icon({ + iconUrl: 'images/todo_cam.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_fixedIcon = L.icon({ + iconUrl: 'images/todo_fixed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_panningIcon = L.icon({ + iconUrl: 'images/todo_panning.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_domeIcon = L.icon({ + iconUrl: 'images/todo_dome.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_guardIcon = L.icon({ + iconUrl: 'images/todo_guard.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_trafficIcon = L.icon({ + iconUrl: 'images/todo_traffic.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Blue-yellow icons for outdoor cameras and guards marked with a 'fixme' key. + Those cameras and guards surveil only private, i.e. non-public areas. */ +var todo_camBlueIcon = L.icon({ + iconUrl: 'images/todo_camBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_fixedBlueIcon = L.icon({ + iconUrl: 'images/todo_fixedBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_panningBlueIcon = L.icon({ + iconUrl: 'images/todo_panningBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_domeBlueIcon = L.icon({ + iconUrl: 'images/todo_domeBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_guardBlueIcon = L.icon({ + iconUrl: 'images/todo_guardBlue.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Green-yellow icons for indoor cameras and guards marked with a 'fixme' key. */ +var todo_camGreenIcon = L.icon({ + iconUrl: 'images/todo_camGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_fixedGreenIcon = L.icon({ + iconUrl: 'images/todo_fixedGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_panningGreenIcon = L.icon({ + iconUrl: 'images/todo_panningGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_domeGreenIcon = L.icon({ + iconUrl: 'images/todo_domeGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_guardGreenIcon = L.icon({ + iconUrl: 'images/todo_guardGreen.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +/* Red-yellow icons for outdoor cameras and guards marked with a 'fixme' key. + Those cameras and guards surveil public, i.e. non-private areas. */ +var todo_camRedIcon = L.icon({ + iconUrl: 'images/todo_camRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_fixedRedIcon = L.icon({ + iconUrl: 'images/todo_fixedRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_panningRedIcon = L.icon({ + iconUrl: 'images/todo_panningRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_domeRedIcon = L.icon({ + iconUrl: 'images/todo_domeRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); + +var todo_guardRedIcon = L.icon({ + iconUrl: 'images/todo_guardRed.png', + iconSize: [20, 20], + iconAnchor: [10, 10], + popupAnchor : [0, -10] +}); diff --git a/www/sunders/js/search.js b/www/sunders/js/search.js new file mode 100644 index 0000000..4ba00a0 --- /dev/null +++ b/www/sunders/js/search.js @@ -0,0 +1,113 @@ +var searchLimit; + +function displaySearchOverlay() { + document.getElementById('search-overlay').style.display = 'block'; +} + +// Close the search overlay. +function closeSearchOverlay() { + document.getElementById('search-overlay').style.display = 'none'; + document.getElementById('search-results-overlay').style.display = 'none'; + document.getElementById('buttonbar').style.bottom = ''; +} + +// Search for possible locations +function searchLocation(maxResults) { + var searchString = document.getElementById('search-input').value; + + if (searchString) { + + document.getElementById('buttonbar').style.bottom = 0; + document.getElementById('search-results-overlay').style.display = 'block'; + + var spinnerDiv = '
'; + for (var i=1; i<=10; i++) { + spinnerDiv += '
▬▬
'; + } + spinnerDiv += '
'; + + document.getElementById('search-results-list-block').style.display = 'none'; + document.getElementById('search-spinner').innerHTML = spinnerDiv; + document.getElementById('search-spinner-block').style.display = 'block'; + + if (maxResults) { + searchLimit = maxResults; + } else { + // Search one more than required to check if there are more results and a 'next' button is required. + searchLimit = 11; + } + + var searchScript = document.createElement('script'); + searchScript.src = 'https://nominatim.openstreetmap.org/search.php?q=' + searchString + '&format=json&json_callback=parseResult&limit=' + searchLimit; + document.body.appendChild(searchScript); + } +} + +function parseResult(response) { + var searchResultDivs = ''; + + if (response.length == searchLimit) { + var lastResultIndex = searchLimit - 1; + var nextSearchLimit = searchLimit + 10; + } else { + var lastResultIndex = response.length; + } + + if (lastResultIndex > 10) { + var previousSearchLimit = searchLimit - 10; + } + + // Button to search for the previous 10 results. + if (previousSearchLimit) { + searchResultDivs += '
'; + } + + searchResultDivs += '
'; + + // Show the current 10 search results. + for (var i=searchLimit-11; i' + + '
' + searchResult.class + ' / ' + searchResult.type + '
' + + '
' + searchResult.display_name + '
' + + '
'; + } + + searchResultDivs += ''; + + // Button to search for the next 10 results. + if (nextSearchLimit) { + searchResultDivs += '
' + } + + document.getElementById('search-spinner-block').style.display = 'none'; + document.getElementById('search-results-list').innerHTML = searchResultDivs; + document.getElementById('search-results-list-block').style.display = 'block'; +} + +// Returns the value of URL parameter #name. +function getUrlParameter(name) { + name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + var results = regex.exec(window.location.search); + return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); +} + +// Open map for coordinates +function gotoLocation(lat, lon) { + var serverUrl = location.protocol + '//' + location.host + location.pathname; + var embQuery = ''; + + // --- URLSearchParams is not supported by all browsers --- + // var urlParams = new URLSearchParams(window.location.search); + // var embedMode = urlParams.get('emb'); + var embedMode = getUrlParameter('emb'); + if (embedMode != '') { + embQuery = '&emb=' + embedMode; + } + + var gotoUrl = serverUrl + '?lat=' + lat + '&lon=' + lon + '&zoom=' + map.getZoom() + embQuery; + + window.location = gotoUrl; +} diff --git a/www/sunders/json/credits.json b/www/sunders/json/credits.json new file mode 100644 index 0000000..86e7a78 --- /dev/null +++ b/www/sunders/json/credits.json @@ -0,0 +1,23 @@ +[ { "listTitle": "title-credits", + "listEntries": [ + { "type": "type-idea", + "credits": [ + { "credit": "osmcamera by khris78", "href-credit": "https://github.com/khris78/osmcamera", "license": "CC-BY-SA / MIT / GPLv3 / WTFPL", "href-license": "files/license_osmcamera.txt" } ] }, + { "type": "type-js", + "credits": [ + { "credit": "Leaflet", "href-credit": "https://github.com/Leaflet/Leaflet", "license": "BSD-2-Clause", "href-license": "files/license_Leaflet.txt" }, + { "credit": "Leaflet-Semicircle", "href-credit": "https://github.com/jieter/Leaflet-semicircle", "license": "MIT", "href-license": "files/license_Semicircle.txt" } ] }, + { "type": "type-map", + "credits": [ + { "credit": "OpenStreetMap contributors", "href-credit": "https://www.openstreetmap.org", "license": "ODbL / CC BY-SA", "href-license": "https://www.openstreetmap.org/copyright" } ] }, + { "type": "type-service", + "credits": [ + { "credit": "OpenStreetMap Nominatim", "href-credit": "https://nominatim.openstreetmap.org/", "license": "ODbL", "href-license": "https://www.openstreetmap.org/copyright" }, + { "credit": "GeoNames", "href-credit": "https://www.geonames.org/", "license": "CC BY 3.0", "href-license": "https://creativecommons.org/licenses/by/3.0/" } ] }, + { "type": "type-icon", + "credits": [ { + "credit": "Font Awesome", "href-credit": "https://fontawesome.com/", "license": "CC BY 4.0 / SIL OFL 1.1 / MIT", "href-license": "https://fontawesome.com/license/free" } ] }, + { "type": "type-font", + "credits": [ { + "credit": "Grabstein Grotesk", "href-credit": "https://fontlibrary.org/de/font/grabstein-grotesk", "license": "OLF", "href-license": "http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL" } ] } ] } +] diff --git a/www/sunders/json/links.json b/www/sunders/json/links.json new file mode 100644 index 0000000..f597479 --- /dev/null +++ b/www/sunders/json/links.json @@ -0,0 +1,58 @@ +[ { "listTitle": "eng", + "sections": [ + { "sectionTitle": "", "isExpandable": false, "isExpandedByDefault": true, "listEntries": [ + { "sourceText": "1984 Actionday", "href": "https://1984actionday.wordpress.com/", "linkText": "When will you fight back?" }, + { "sourceText": "ACLU", "href": "https://www.aclu.org/sites/default/files/field_document/061819-robot_surveillance.pdf", "linkText": "The Dawn of Robot Surveillance" }, + { "sourceText": "Adversarial Fashion", "href": "https://adversarialfashion.com/", "linkText": "Patterns on goods designed to trigger Automated License Plate Readers" }, + { "sourceText": "Atlas of Surveillance", "href": "https://atlasofsurveillance.org/", "linkText": "Documenting Police Tech in Our Communities" }, + { "sourceText": "Ban Facial Recognition", "href": "https://www.banfacialrecognition.com/", "linkText": "Ban Facial Recognition" }, + { "sourceText": "Ban Facial Recognition", "href": "https://www.banfacialrecognition.com/festivals/", "linkText": "Ban Facial Recognition at Festivals" }, + { "sourceText": "Ban Facial Recognition", "href": "https://ban-facial-recognition.wesign.it/droitshumains/ban-facial-recognition-europe", "linkText": "Ban Facial Recognition Europe!" }, + { "sourceText": "Electronic Frontier Foundation", "href": "https://www.eff.org/sls", "linkText": "Street Level Surveillance" }, + { "sourceText": "Every Two Years", "href": "https://everytwoyears.org/", "linkText": "Help Make Democracy" }, + { "sourceText": "Fawkes", "href": "http://sandlab.cs.uchicago.edu/fawkes/", "linkText": "Image “Cloaking” for Personal Privacy" }, + { "sourceText": "GitHub", "href": "https://github.com/unsurv", "linkText": "unsurv" }, + { "sourceText": "Insecam", "href": "https://www.insecam.org/", "linkText": "World biggest online cameras directory" }, + { "sourceText": "No CCTV", "href": "http://www.no-cctv.org.uk/", "linkText": "Campaigning against camera surveillance in the UK & beyond" }, + { "sourceText": "NYC Surveillance Camera Project", "href": "http://www.mediaeater.com/cameras/", "linkText": "NYC Surveillance Camera Project" }, + { "sourceText": "Reclaim Your Face", "href": "https://reclaimyourface.eu/", "linkText": "Reclaim Your Face" }, + { "sourceText": "S.T.O.P.", "href": "https://www.stopspying.org/", "linkText": "The Surveillance Technology Oversight Project" }, + { "sourceText": "Spy Blog", "href": "https://p10.secure.hostingprod.com/@spyblog.org.uk/ssl/spyblog/cctv-surveillance-cameras/", "linkText": "Category: CCTV surveillance cameras" }, + { "sourceText": "unsurv", "href": "https://www.unsurv.org/", "linkText": "unsurv.org" }, + { "sourceText": "Wikipedia", "href": "https://www.wikipedia.org/wiki/Mass_surveillance_in_the_United_States", "linkText": "Mass Surveillance in the United States" }, + { "sourceText": "Yale University", "href": "https://privacylab.yale.edu/", "linkText": "Privacy Lab" } + ] } + ] + }, + { "listTitle": "fra", + "sections": [ + { "sectionTitle": "", "isExpandable": false, "isExpandedByDefault": true, "listEntries": [ + { "sourceText": "Ban Facial Recognition", "href": "https://ban-facial-recognition.wesign.it/droitshumains/bannissons-la-reconnaissance-faciale-en-europe", "linkText": "Bannissons la reconnaissance faciale en Europe!" }, + { "sourceText": "BUG BROTHER", "href": "http://bugbrother.blog.lemonde.fr/", "linkText": "Qui surveillera les surveillants?" }, + { "sourceText": "LA QUADRATURE DU NET", "href": "https://www.laquadrature.net/fr", "linkText": "Internet & Libertés" }, + { "sourceText": "Reclaim Your Face", "href": "https://reclaimyourface.eu/fr/", "linkText": "Reclaim Your Face FR" }, + { "sourceText": "SOUS-SURVEILLANCE.NET", "href": "https://www.sous-surveillance.net/", "linkText": "Carte — Revue de presse — Projet" } + ] } + ] + }, + { "listTitle": "ger", + "sections": [ + { "sectionTitle": "", "isExpandable": false, "isExpandedByDefault": true, "listEntries": [ + { "sourceText": "AK Vorrat", "href": "http://wiki.vorratsdatenspeicherung.de/Arbeitsgruppe_Video%C3%BCberwachung", "linkText": "Arbeitsgruppe Videoüberwachung" }, + { "sourceText": "AK Vorrat", "href": "http://wiki.vorratsdatenspeicherung.de/images/Folder_cctv.pdf", "linkText": "Infobroschüre: Videoüberwachung? Sicherheit geht anders!" }, + { "sourceText": "AK Vorrat, Ortsgruppe Hannover", "href": "http://wiki.vorratsdatenspeicherung.de/Ortsgruppen/Hannover/Videoueberwachung_in_Hannover", "linkText": "Videoüberwachung in Hannover" }, + { "sourceText": "AKTION FREIHEIT STATT ANGST", "href": "https://www.aktion-freiheitstattangst.org/", "linkText": "Aktion Freiheit statt Angst e.V." }, + { "sourceText": "Ban Facial Recognition", "href": "https://ban-facial-recognition.wesign.it/droitshumains/verbot-der-gesichtserkennung-in-europa", "linkText": "Verbot der Gesichtserkennung in Europa!" }, + { "sourceText": "Benjamin J. Kees", "href": "https://algoropticon.de/", "linkText": "Algorithmisches Panopticon" }, + { "sourceText": "dieDatenschützer Rhein-Main", "href": "https://ddrm.de/category/videouberwachung-2/", "linkText": "Kategoriearchiv: Videoüberwachung" }, + { "sourceText": "EPICENTER.WORKS", "href": "https://epicenter.works/thema/face-recognition", "linkText": "Face Recognition - Gesichtserkennung" }, + { "sourceText": "EPICENTER.WORKS", "href": "https://überwachungspaket.at/", "linkText": "Stoppt das Überwachungspaket!" }, + { "sourceText": "Frag den Staat", "href": "https://fragdenstaat.de/anfrage/informationen-zum-projekt-sicherheitsbahnhof-berlin-sudkreuz/", "linkText": "Informationen zum „Projekt Sicherheitsbahnhof“ Berlin Südkreuz" }, + { "sourceText": "Frag den Staat", "href": "https://fragdenstaat.de/anfrage/datenschutzkonzept-fur-videouberwachung-am-bahnhof-berlin-sudkreuz/", "linkText": "Datenschutzkonzept für Videoüberwachung am Bahnhof Berlin Südkreuz" }, + { "sourceText": "Kassel-Watch-Log", "href": "https://www.ks-watch.de/", "linkText": "Videoüberwachung im öffentlichen Raum Kassel" }, + { "sourceText": "Reclaim Your Face", "href": "https://reclaimyourface.eu/de/", "linkText": "Reclaim Your Face DE" }, + { "sourceText": "_STATTKAMERAS", "href": "https://stattkameras.de/", "linkText": "Gegen Videoüberwachung am Hansaplatz" } + ] } + ] + } +] diff --git a/www/sunders/json/manual.json b/www/sunders/json/manual.json new file mode 100644 index 0000000..e46f599 --- /dev/null +++ b/www/sunders/json/manual.json @@ -0,0 +1,76 @@ +[ { "listTitle": "title-icon", "isListWithIcons": true, + "listEntries": [ + { "keys": [ { "key": "k-manmade", "href": "https://wiki.openstreetmap.org/wiki/Key:man_made" } ], + "values": [ { "value": "v-surveillance", "href": "https://wiki.openstreetmap.org/wiki/Tag:man_made%3Dsurveillance" } ], + "icon": null }, + { "keys": [ { "key": "k-surveillance", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance" } ], + "values": [ { "value": "v-public" } ], + "icon": { "src": "colorRed.png", "alt": "icon-public-alt" } }, + { "keys": [ { "key": "k-surveillance", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance" } ], + "values": [ { "value": "v-outdoor" } ], + "icon": { "src": "colorBlue.png", "alt": "icon-outdoor-alt" } }, + { "keys": [ { "key": "k-surveillance", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance" } ], + "values": [ { "value": "v-indoor" } ], + "icon": { "src": "colorGreen.png", "alt": "icon-indoor-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" } ], + "values": [ { "value": "v-camera" } ], + "icon": { "src": "cam.png", "alt": "icon-cam-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" }, { "key": "k-cam-type", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-camera" }, { "value": "v-fixed" } ], + "icon": { "src": "fixed.png", "alt": "icon-fixed-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" }, { "key": "k-cam-type", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-camera" }, { "value": "v-panning" } ], + "icon": { "src": "panning.png", "alt": "icon-panning-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" }, { "key": "k-cam-type", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-camera" }, { "value": "v-dome" } ], + "icon": { "src": "dome.png", "alt": "icon-dome-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" } ], + "values": [ { "value": "v-guard" } ], + "icon": { "src": "guard.png", "alt": "icon-guard-alt" } }, + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" } ], + "values": [ { "value": "v-alpr" } ], + "icon": { "src": "traffic.png", "alt": "icon-alpr-alt" } } ] }, + { "listTitle": "title-view-fixed", "isListWithIcons": false, + "listEntries": [ + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" } ], + "values": [ { "value": "v-camera" } ] }, + { "keys": [ { "key": "k-cam-type", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-fixed" } ] }, + { "keys": [ { "key": "k-cam-direction", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-direction-0" }, { "value": "v-direction-1" } ] }, + { "keys": [ { "key": "k-cam-angle", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-angle-0" }, { "value": "v-angle-1" }, { "value": "v-angle-2" } ] }, + { "keys": [ { "key": "k-height", "href": "https://wiki.openstreetmap.org/wiki/Key:height" } ], + "values": [ { "value": "v-height-0" }, { "value": "v-height-1" } ] } ], + "examples": { + "images": [ { "src": "fixed_z-17_d-90_a-15_h-5.png", "alt": "example-img-0-alt" }, { "src": "fixed_z-17_d-90_a-15_h-10.png", "alt": "example-img-1-alt" }, { "src": "fixed_z-17_d-90_a-60_h-10.png", "alt": "example-img-2-alt" } ], + "descriptions": [ { "lines": [ "example-direction-90", "example-angle-15", "example-height-5" ] }, { "lines": [ "example-direction-90", "example-angle-15", "example-height-10" ] }, { "lines": [ "example-direction-90", "example-angle-60", "example-height-10" ] } ] } }, + { "listTitle": "title-view-dome", "isListWithIcons": false, + "listEntries": [ + { "keys": [ { "key": "k-surv-type", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:type" } ], + "values": [ { "value": "v-camera" } ] }, + { "keys": [ { "key": "k-cam-type", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-dome" } ] }, + { "keys": [ { "key": "k-cam-direction", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-direction-0" }, { "value": "v-direction-1" }, { "value": "v-direction-2" } ] }, + { "keys": [ { "key": "k-height", "href": "https://wiki.openstreetmap.org/wiki/Key:height" } ], + "values": [ { "value": "v-height-0" }, { "value": "v-height-1" } ] } ], + "examples": { + "images": [ { "src": "dome_z-17_h-3.png", "alt": "example-img-3-alt" }, { "src": "dome_z-17_h-5.png", "alt": "example-img-4-alt" }, { "src": "dome_z-17_h-5_d-45.png", "alt": "example-img-5-alt" } ], + "descriptions": [ { "lines": [ "example-height-3" ] }, { "lines": [ "example-height-5" ] }, { "lines": [ "example-height-5", "example-direction-45" ] } ] } }, + { "listTitle": "title-optional", "isListWithIcons": false, + "listEntries": [ + { "keys": [ { "key": "k-surv-zone", "href": "https://wiki.openstreetmap.org/wiki/Key:surveillance:zone" } ], + "values": [ { "value": "v-surv-zone" } ] }, + { "keys": [ { "key": "k-cam-mount", "href": "https://wiki.openstreetmap.org/wiki/Proposed_features/Extended_tags_for_Key:Surveillance#Camera" } ], + "values": [ { "value": "v-cam-mount" } ] }, + { "keys": [ { "key": "k-operator", "href": "https://wiki.openstreetmap.org/wiki/Key:operator" } ], + "values": [ { "value": "v-operator" } ] }, + { "keys": [ { "key": "k-name", "href": "https://wiki.openstreetmap.org/wiki/Key:name" } ], + "values": [ { "value": "v-name" } ] }, + { "keys": [ { "key": "k-ref", "href": "https://wiki.openstreetmap.org/wiki/Key:ref" } ], + "values": [ { "value": "v-ref" } ] }, + { "keys": [ { "key": "k-image", "href": "https://wiki.openstreetmap.org/wiki/Key:image" } ], + "values": [ { "value": "v-image" } ] } + ] } +] diff --git a/www/sunders/json/stats-query.json b/www/sunders/json/stats-query.json new file mode 100644 index 0000000..836dd5b --- /dev/null +++ b/www/sunders/json/stats-query.json @@ -0,0 +1,143 @@ +{ + "level0": { + "country": { + "total": [ "country-all", "area-all", "type-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [] }, + { "label": "area-pl", "pie": "area", "cols": [] }, + { "label": "type-pl", "pie": "type", "cols": [] } + ], + "query": { "pie": "area", "cols": [ "country" ] } + }, + "area": { + "total": [ "area-all", "country-all", "type-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [] }, + { "label": "area-pl", "pie": "area", "cols": [] }, + { "label": "type-pl", "pie": "type", "cols": [] } + ], + "query": { "pie": "country", "cols": [ "area" ] } + }, + "type": { + "total": [ "type-all", "country-all", "area-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [] }, + { "label": "area-pl", "pie": "area", "cols": [] }, + { "label": "type-pl", "pie": "type", "cols": [] } + ], + "query": { "pie": "country", "cols": [ "type" ] } + } + }, + "level1": { + "area_country": { + "total": [ "country", "area-all", "type-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [] }, + { "label": "area-pl", "pie": "area", "cols": [ "country" ] }, + { "label": "type-pl", "pie": "type", "cols": [ "country" ] } + ], + "query": { "pie": "type", "cols": [ "country", "area" ] } + }, + "type_country": { + "total": [ "country", "area-all", "type-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [] }, + { "label": "area-pl", "pie": "area", "cols": [ "country" ] }, + { "label": "type-pl", "pie": "type", "cols": [ "country" ] } + ], + "query": { "pie": "area", "cols": [ "country", "type" ] } + }, + "country_area": { + "total": [ "area", "country-all", "type-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "area" ] }, + { "label": "area-all", "pie": "area", "cols": [] }, + { "label": "type-pl", "pie": "type", "cols": [ "area" ] } + ], + "query": { "pie": "type", "cols": [ "area", "country" ] } + }, + "type_area": { + "total": [ "area", "country-all", "type-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "area" ] }, + { "label": "area-all", "pie": "area", "cols": [] }, + { "label": "type-pl", "pie": "type", "cols": [ "area" ] } + ], + "query": { "pie": "country", "cols": [ "area", "type" ] } + }, + "country_type": { + "total": [ "type", "country-all", "area-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "type" ] }, + { "label": "area-pl", "pie": "area", "cols": [ "type" ] }, + { "label": "type-all", "pie": "type", "cols": [] } + ], + "query": { "pie": "area", "cols": [ "type", "country" ] } + }, + "area_type": { + "total": [ "type", "country-all", "area-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "type" ] }, + { "label": "area-pl", "pie": "area", "cols": [ "type" ] }, + { "label": "type-all", "pie": "type", "cols": [] } + ], + "query": { "pie": "country", "cols": [ "type", "area" ] } + } + }, + "level2": { + "type_country|area": { + "total": [ "country", "area", "type-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [ "area" ] }, + { "label": "area-all", "pie": "area", "cols": [ "country" ] }, + { "label": "type-pl", "pie": "type", "cols": [ "country", "area" ] } + ], + "query": { "pie": null, "cols": [] } + }, + "area_country|type": { + "total": [ "country", "type", "area-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [ "type" ] }, + { "label": "area-pl", "pie": "area", "cols": [ "country", "type" ] }, + { "label": "type-all", "pie": "type", "cols": [ "country" ] } + ], + "query": { "pie": null, "cols": [] } + }, + "type_area|country": { + "total": [ "area", "country", "type-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [ "area" ] }, + { "label": "area-all", "pie": "area", "cols": [ "country" ] }, + { "label": "type-pl", "pie": "type", "cols": [ "area", "country" ] } + ], + "query": { "pie": null, "cols": [] } + }, + "country_area|type": { + "total": [ "area", "type", "country-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "area", "type" ] }, + { "label": "area-all", "pie": "area", "cols": [ "type" ] }, + { "label": "type-all", "pie": "type", "cols": [ "area" ] } + ], + "query": { "pie": null, "cols": [] } + }, + "area_type|country": { + "total": [ "type", "country", "area-all" ], + "navi": [ + { "label": "country-all", "pie": "country", "cols": [ "type" ] }, + { "label": "area-pl", "pie": "area", "cols": [ "type", "country" ] }, + { "label": "type-all", "pie": "type", "cols": [ "country" ] } + ], + "query": { "pie": null, "cols": [] } + }, + "country_type|area": { + "total": [ "type", "area", "country-all" ], + "navi": [ + { "label": "country-pl", "pie": "country", "cols": [ "type", "area" ] }, + { "label": "area-all", "pie": "area", "cols": [ "type" ] }, + { "label": "type-all", "pie": "type", "cols": [ "area" ] } + ], + "query": { "pie": null, "cols": [] } + } + } +} diff --git a/www/sunders/json/symbology.json b/www/sunders/json/symbology.json new file mode 100644 index 0000000..a0765ef --- /dev/null +++ b/www/sunders/json/symbology.json @@ -0,0 +1,29 @@ +[ { "listTitle": "title-icons", + "listEntries": [ + { "icons": [ { "src": "camAll.png", "alt": "icon-cam-alt" } ], + "description": "desc-cam" }, + { "icons": [ { "src": "fixedAll.png", "alt": "icon-fixed-alt" } ], + "description": "desc-fixed" }, + { "icons": [ { "src": "panningAll.png", "alt": "icon-panning-alt" } ], + "description": "desc-panning" }, + { "icons": [ { "src": "domeAll.png", "alt": "icon-dome-alt" } ], + "description": "desc-dome" }, + { "icons": [ { "src": "guardAll.png", "alt": "icon-guard-alt" } ], + "description": "desc-guard" }, + { "icons": [ { "src": "traffic.png", "alt": "icon-alpr-alt" } ], + "description": "desc-alpr" } ] }, + { "listTitle": "title-colors", + "listEntries": [ + { "icons": [ { "src": "colorRedAll.png", "alt": "icon-red-alt" } ], + "description": "desc-red" }, + { "icons": [ { "src": "colorBlueAll.png", "alt": "icon-blue-alt" } ], + "description": "desc-blue" }, + { "icons": [ { "src": "colorGreenAll.png", "alt": "icon-green-alt" } ], + "description": "desc-green" }, + { "icons": [ + { "src": "todo_camAll.png", "alt": "icon-yellow-fixed-alt" }, + { "src": "todo_domeAll.png", "alt": "icon-yellow-dome-alt" }, + { "src": "todo_guardAll.png", "alt": "icon-yellow-guard-alt" }, + { "src": "todo_traffic.png", "alt": "icon-yellow-alpr-alt" } ], + "description": "desc-yellow" } ] } +] diff --git a/www/sunders/mindex.html b/www/sunders/mindex.html new file mode 100644 index 0000000..792d3f8 --- /dev/null +++ b/www/sunders/mindex.html @@ -0,0 +1,21 @@ + + + + + We'll be back! + + + + + + + + + + +
+ Surveillance under Surveillance +

is down for maintenance...

+
+ + diff --git a/www/sunders/mstile-144x144.png b/www/sunders/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..5a620553360af697c1c8416652f1ce3fe4de8237 GIT binary patch literal 4459 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 F1ORuCP^bU^ literal 0 HcmV?d00001 diff --git a/www/sunders/ru/camera.php b/www/sunders/ru/camera.php new file mode 100644 index 0000000..d85146c --- /dev/null +++ b/www/sunders/ru/camera.php @@ -0,0 +1,3 @@ + diff --git a/www/sunders/ru/images b/www/sunders/ru/images new file mode 120000 index 0000000..e4c5bd0 --- /dev/null +++ b/www/sunders/ru/images @@ -0,0 +1 @@ +../images/ \ No newline at end of file diff --git a/www/sunders/ru/index.php b/www/sunders/ru/index.php new file mode 100644 index 0000000..52e5734 --- /dev/null +++ b/www/sunders/ru/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/ru/stats/index.php b/www/sunders/ru/stats/index.php new file mode 100644 index 0000000..724fb2d --- /dev/null +++ b/www/sunders/ru/stats/index.php @@ -0,0 +1,6 @@ + diff --git a/www/sunders/stats/index.php b/www/sunders/stats/index.php new file mode 100644 index 0000000..029e42c --- /dev/null +++ b/www/sunders/stats/index.php @@ -0,0 +1,1481 @@ + 2 || in_array($initialPie, $colsArray)) { + $colsArray = array(); + } + + foreach ($colsArray as $col) { + if (!in_array($col, $validPies)) { + // ignore 'cols' + $colsArray = array(); + break; + } + } + } + + // get values from URL if valid + if (!empty($colsArray) && array_key_exists('vals', $_GET)) { + $vals = $_GET['vals']; + $vals = strtoupper($vals); + $valsArray = explode('|', $vals); + + if (count($colsArray) == count($valsArray)) { + for ($i = 0; $i < count($colsArray); $i++) { + if ($colsArray[$i] == 'area') { + $i18n = $i18nStats; + $i18nDefault = $i18nStatsDefault; + $key = 'area'.$valsArray[$i].'-2'; + } elseif ($colsArray[$i] == 'type') { + $i18n = $i18nStats; + $i18nDefault = $i18nStatsDefault; + $key = 'type'.$valsArray[$i].'-2'; + } else { + $i18n = $i18nCountries; + $i18nDefault = $i18nCountriesDefault; + // Check if $key consists of 2 capital letters. + $key = preg_match('/\b[A-Z]{2}\b/', $valsArray[$i]) === 1 || '--' ? $valsArray[$i] : 'dontfindme'; + } + if (!isValidValue($i18n, $i18nDefault, $key)) { + // ignore 'vals' and 'cols' + $valsArray = array(); + $colsArray = array(); + break; + } + } + } else { + // ignore 'vals' and 'cols' + $valsArray = array(); + $colsArray = array(); + } + } + + // get year from URL if valid + if (array_key_exists('year', $_GET)) { + $valueStr = $_GET['year']; + $valueInt = (int) $valueStr; + // if (is_numeric($valueStr) && $valueInt >= 2007 && $valueInt <= date('Y')) { // the first OSM surveillance entry is from 2007 + if (is_numeric($valueStr) && $valueInt >= 2008 && $valueInt <= date('Y')) { // the first OSM surveillance entry is from 2008 + $year = $valueStr; + } + } + + // get month from URL if valid + if (array_key_exists('month', $_GET)) { + $valueStr = $_GET['month']; + $valueInt = (int) $valueStr; + if (is_numeric($valueStr) && $valueInt >= 1 && $valueInt <= 12) { + $month = $valueStr; + } + } + + // get embed mode from URL + if (array_key_exists('emb', $_GET)) { + $embedMode = $_GET['emb']; + if ($embedMode == 'wsb' || $embedMode == 'wosb') { + $embQuery = 'emb='.$embedMode; + $embQueryFirst = '?'.$embQuery; + $embQueryNth = '&'.$embQuery; + } + } + + $pieLevel = 'level'.count($colsArray); + + $decodedStatsQueryJSON = getDecodedJSON($pathToWebFolder.'json/stats-query.json'); + $levelObject = $decodedStatsQueryJSON->{$pieLevel}; + $statsKey = count($colsArray) > 0 ? $initialPie.'_'.$cols : $initialPie; + $statsQueryObject = $levelObject->{$statsKey}; + + /* Connect to database */ + $mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, MYSQL_DB); + if($mysqli->connect_errno) { + echo 'Error while connecting to DB : $mysqli->error \n' ; + exit(1); + } + $mysqli->autocommit(FALSE); + + function isValidValue($i18n, $i18nDefault, $key) { + $translated = translate($i18n, $i18nDefault, $key, [], [], []); + return strlen($translated) != 0; + } + + function getCharts($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $pieLevel, $statsQueryObject) { + + $surveillanceStatsJSON = getSurveillanceStatsJSON($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $pieLevel, $statsQueryObject); + + return getSurveillanceStatsTags($surveillanceStatsJSON); + } + + function getSurveillanceStatsJSON($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $pieLevel, $statsQueryObject) { + $objectStrings[] = getTotalStatsJSON($i18nStats, $i18nStatsDefault, $colsArray, $valsArray, $year, $month, $pieLevel, $statsQueryObject); + $objectStrings[] = getNaviStatsJSON($i18nStats, $i18nStatsDefault, $statsQueryObject, $pieType, $lineType, $colsArray, $valsArray, $year, $month); + $objectStrings[] = getPieStatsJSON($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $statsQueryObject); + + $pieStatsObject = json_decode('{'.$objectStrings[2].'}'); + $pieArray = $pieStatsObject->{'pie-chart'}->{'pie'}; + $pieLegendArray = $pieStatsObject->{'pie-chart'}->{'legend'}; + + $objectStrings[] = getTimeStatsJSON($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $pieArray, $pieLegendArray); + + return '{'.(implode(',', $objectStrings)).'}'; + } + + function getTotalStatsJSON($i18nStats, $i18nStatsDefault, $colsArray, $valsArray, $year, $month, $pieLevel, $statsQueryObject) { + global $surveillanceNodesTotal, $titleStringFilter, $titleStringTime; + + $surveillanceNodesTotal = getTotalDataFromDB($colsArray, $valsArray, $year, $month); + + $totalArray = $statsQueryObject->{'total'}; + + if ($pieLevel == 'level0') { + foreach($totalArray as $totalKey) { + $filterArray[] = translate($i18nStats, $i18nStatsDefault, $totalKey, [], [], []); + } + } else { + foreach($totalArray as $totalKey) { + $totalValue = $valsArray[array_search($totalKey, $colsArray)]; + + if ($totalKey == 'country') { + $filterArray[] = translate($i18nStats, $i18nStatsDefault, $totalKey, [], [], []).': '.$totalValue; + } elseif (substr($totalKey, -4) == '-all') { + $filterArray[] = translate($i18nStats, $i18nStatsDefault, $totalKey, [], [], []); + } else { + $filterArray[] = translate($i18nStats, $i18nStatsDefault, $totalKey, [], [], []).': '. + translate($i18nStats, $i18nStatsDefault, $totalKey.$totalValue.'-2', [], [], []); + } + } + } + + $titleStringFilter = implode(' • ', $filterArray); + + $timeArray[] = $year == 'all' ? + translate($i18nStats, $i18nStatsDefault, 'year-all', [], [], []) : + translate($i18nStats, $i18nStatsDefault, 'year', [], [], []).': '.$year; + + $timeArray[] = $month == 'all' ? + translate($i18nStats, $i18nStatsDefault, 'month-all', [], [], []) : + translate($i18nStats, $i18nStatsDefault, 'month', [], [], []).': '.translate($i18nStats, $i18nStatsDefault, date('M', strtotime('1970-'.$month)).'_', [], [], []); + + $titleStringTime = implode(' • ', $timeArray); + $labelKey = 'surv-node'.($surveillanceNodesTotal != 1 ? 's' : ''); + + return '"total": { + "no-of-nodes": '.$surveillanceNodesTotal.', + "label": "'.translate($i18nStats, $i18nStatsDefault, $labelKey, [], [], []).'", + "filter": "'.$titleStringFilter.'", + "time": "'.$titleStringTime.'" + }'; + } + + function getTotalDataFromDB($colsArray, $valsArray, $year, $month) { + global $mysqli, $whereCriteria, $whereValues, $paramTypes; + + $whereValues = $valsArray; + + if (!empty($colsArray)) { + foreach ($colsArray as $col) { + $whereCriteriaArray[] = $col.'=?'; + $paramTypes = $col == 'country' ? $paramTypes.'s' : $paramTypes.'i'; + } + } + + if (!empty($year) && $year != 'all') { + $whereCriteriaArray[] = 'year=?'; + $paramTypes = $paramTypes.'i'; + $whereValues[] = $year; + } + + if (!empty($month) && $month != 'all') { + $whereCriteriaArray[] = 'month=?'; + $paramTypes = $paramTypes.'i'; + $whereValues[] = $month; + } + + if (!empty($whereCriteriaArray)) { + $whereCriteria = ' WHERE '.implode(' AND ', $whereCriteriaArray); + } + + if (!($selectTotalStmt = $mysqli->prepare('SELECT COUNT(*) FROM statistics'.$whereCriteria))) { + echo 'Error while preparing select total statement : ' . $mysqli->error ; + exit(1); + } + + if (!empty($whereValues)) { + if (count($whereValues) == 1) { + $selectTotalStmt->bind_param($paramTypes, $whereValues[0]); + } elseif (count($whereValues) == 2) { + $selectTotalStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1]); + } elseif (count($whereValues) == 3) { + $selectTotalStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2]); + } elseif (count($whereValues) == 4) { + $selectTotalStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2], $whereValues[3]); + } else { + echo 'Error while binding where parameters to select total statement.'; + } + } + + $selectTotalStmt->bind_result($total); + + $selectTotalStmt->execute(); + while ($selectTotalStmt->fetch()) { + $result = $total; + } + $selectTotalStmt->close(); + + return $result; + } + + function getNaviStatsJSON($i18nStats, $i18nStatsDefault, $statsQueryObject, $pieType, $lineType, $colsArray, $valsArray, $year, $month) { + $naviCatsArrayString = getNaviCatsArrayString($i18nStats, $i18nStatsDefault, $statsQueryObject, $pieType, $lineType, $colsArray, $valsArray, $year, $month); + $naviYearsArrayString = getNaviYearsArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month); + $naviMonthsArrayString = getNaviMonthsArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month); + + return '"navi": { + "label": "'.translate($i18nStats, $i18nStatsDefault, 'filter', [], [], []).'", + '.$naviCatsArrayString.', + '.$naviYearsArrayString.', + '.$naviMonthsArrayString.' + }'; + } + + function getPieStatsJSON($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $statsQueryObject) { + $surveillanceNodesPerX = getPieDataFromDB($pieType); + + $pieLegendArrayStrings = getPieLegendArrayStrings($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $valsArray, $year, $month, $statsQueryObject, $surveillanceNodesPerX); + + return '"pie-chart": { + '.$pieLegendArrayStrings['pie'].', + '.$pieLegendArrayStrings['legend'].' + }'; + } + + function getPieDataFromDB($pieType) { + global $mysqli, $whereCriteria, $whereValues, $paramTypes; + + if (!($selectPieStmt = $mysqli->prepare('SELECT COUNT(*) total, '.$pieType.' FROM statistics '.$whereCriteria.' GROUP BY '.$pieType.' ORDER BY total DESC'))) { + echo 'Error while preparing select country statement : ' . $mysqli->error ; + exit(1); + } + + if (!empty($whereValues)) { + if (count($whereValues) == 1) { + $selectPieStmt->bind_param($paramTypes, $whereValues[0]); + } elseif (count($whereValues) == 2) { + $selectPieStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1]); + } elseif (count($whereValues) == 3) { + $selectPieStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2]); + } elseif (count($whereValues) == 4) { + $selectPieStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2], $whereValues[3]); + } else { + echo 'Error while binding where parameters to select country statement.'; + } + } + + $selectPieStmt->bind_result($noOfNodes, $sliceID); + + $selectPieStmt->execute(); + while ($selectPieStmt->fetch()) { + $result[$sliceID] = $noOfNodes; + } + $selectPieStmt->close(); + + return $result; + } + + function getNaviCatsArrayString($i18nStats, $i18nStatsDefault, $statsQueryObject, $pieType, $lineType, $colsArray, $valsArray, $year, $month) { + foreach($statsQueryObject->{'navi'} as $naviObject) { + $naviObjectElements = array(); + $queryStrings = array(); + + $colsQuery = ''; + $valsQuery = ''; + $colsQueryArray = array(); + $valsQueryArray = array(); + + $selectedClass = $naviObject->{'pie'} == $pieType ? 'selected' : 'unselected'; + $naviObjectElements[] = '"selected-class": "'.$selectedClass.'"'; + + $queryStrings[] = '?pie='.$naviObject->{'pie'}; + + for ($i = 0; $i < count($colsArray); $i++) { + if ($colsArray[$i] != $naviObject->{'pie'}) { + $colsQueryArray[] = $colsArray[$i]; + $valsQueryArray[] = $valsArray[$i]; + } + } + + if (!empty($colsQueryArray) && !empty($valsQueryArray)) { + $queryStrings[] = 'cols='.implode('|', $colsQueryArray); + $queryStrings[] = 'vals='.implode('|', $valsQueryArray); + } + $queryStrings[] = 'year='.$year; + $queryStrings[] = 'month='.$month; + $queryStrings[] = 'time='.$lineType; + + $naviObjectElements[] = '"url-query": "'.implode('&', $queryStrings).'"'; + $naviObjectElements[] = '"label": "'.translate($i18nStats, $i18nStatsDefault, $naviObject->{'label'}, [], [], []).'"'; + $naviObjectStrings[] = '{'.implode(',', $naviObjectElements)."}"; + } + + $naviArrayString = '"cats": ['.(implode(',', $naviObjectStrings)).']'; + + return $naviArrayString; + } + + function getPieLegendArrayStrings($i18nStats, $i18nStatsDefault, $i18nCountries, $i18nCountriesDefault, $pieType, $lineType, $valsArray, $year, $month, $statsQueryObject, $surveillanceNodesPerX) { + global $surveillanceNodesTotal, $pieRadius; + + $pieObjectStrings = []; // FIX2023 + $pieLegendObjectStrings = []; // FIX2023 + $rotateDegrees = 0; + $sumOfNodesLT1 = 0; + $sumOfPercentageLT1 = 0; + $fillColor = 1; + + foreach ($surveillanceNodesPerX as $sliceID => $noOfNodes) { + $legendTitleArray = array(); + $queryValues = array(); + $queryStrings = array(); + $urlQuery = ''; + + // The CSS file only knows 20 slice colors. Start again for every 20 slices. + if ($fillColor > 20) { + $fillColor = 1; + } + + if (strlen($sliceID) == 0) { + $sliceID = 'xxx'; + } + + $percentageValue = getPercentage($surveillanceNodesTotal, $noOfNodes); + $degrees = getDegrees($percentageValue); + + $percentageUnit = '%'; + $percentageString = $percentageValue.$percentageUnit; + $nodesUnit = 'node'.($noOfNodes != 1 ? 's' : ''); + $nodesString = $noOfNodes.' '.translate($i18nStats, $i18nStatsDefault, $nodesUnit, [], [], []); + + // Strings for the legend title + if ($pieType == 'country') { + // Countries: country ISO - translated country name + $legendTitleArray[] = $sliceID == 'xxx' ? '??' : $sliceID; + $legendTitleArray[] = translate($i18nCountries, $i18nCountriesDefault, $sliceID, [], [], []); + } else { + // Other: translated title - translated subtitle + $legendTitleArray[] = translate($i18nStats, $i18nStatsDefault, $pieType.$sliceID.'-0', [], [], []); + $legendSubtitle = translate($i18nStats, $i18nStatsDefault, $pieType.$sliceID.'-1', [], [], []); + } + + $legendTitle = implode(' • ', $legendTitleArray); + + // url query for links of pie and legend + $pieQuery = $statsQueryObject->{'query'}->{'pie'}; + if (!(empty($pieQuery) || $sliceID === 'xxx' || in_array('xxx', $valsArray))) { + $queryStrings[] = '?pie='.$pieQuery; + $queryStrings[] = 'cols='.implode ('|', $statsQueryObject->{'query'}->{'cols'}); + foreach ($valsArray as $val) { + $queryValues[] = $val; + } + $queryValues[] = $sliceID; + $queryStrings[] = 'vals='.implode ('|', $queryValues); + $queryStrings[] = 'year='.$year; + $queryStrings[] = 'month='.$month; + $queryStrings[] = 'time='.$lineType; + + $urlQuery = implode('&', $queryStrings); + } + + if ($pieType == 'country' && $percentageValue < 1) { + // Countries < 1% will be sumarized to one gray slice but displayed separately in the legend. + $sumOfNodesLT1 = $sumOfNodesLT1 + $noOfNodes; + $sumOfPercentageLT1 = $sumOfPercentageLT1 + $percentageValue; + $fillClass = 'color0'; + $bgClass = $fillClass; + } else { + // Area slices are using color classes starting with 'icon'. Others are starting with 'color'. + $fillClass = $pieType == 'area' ? 'icon'.$sliceID : 'color'.$fillColor; + $bgClass = $fillClass; + + $pieObjectStrings[] = getPieObjectString($i18nStats, $i18nStatsDefault, $pieType, $degrees, $pieRadius, $rotateDegrees, $fillClass, $sliceID, $nodesString, $percentageString, $urlQuery); + + $rotateDegrees = $rotateDegrees + $degrees; + $fillColor++; + } + + $pieLegendObjectStrings[] = getPieLegendObjectString($legendTitle, $legendSubtitle, $percentageValue, $percentageUnit, $percentageString, $noOfNodes, $nodesUnit, $nodesString, $bgClass, $sliceID, $urlQuery); + } + + // Values of the slice that represents the sum of all < 1% slices. + $percentageString = $sumOfPercentageLT1.'%'; + $nodesString = $sumOfNodesLT1.' node'.($sumOfNodesLT1 != 1 ? 's' : ''); + + if ($pieType == 'country' && $sumOfNodesLT1 > 0) { + $pieObjectStrings[] = getPieObjectString($i18nStats, $i18nStatsDefault, $pieType, (360 - $rotateDegrees), $pieRadius, $rotateDegrees, $fillClass, 'lt1', $nodesString, $percentageString, null); + } + + $pieLegendArrayStrings['pie'] = '"pie": ['.(implode(',', $pieObjectStrings)).']'; + $pieLegendArrayStrings['legend'] = '"legend": ['.(implode(',', $pieLegendObjectStrings)).']'; + + return $pieLegendArrayStrings; + } + + function getPieObjectString($i18nStats, $i18nStatsDefault, $pieType, $degrees, $pieRadius, $rotateDegrees, $fillClass, $sliceID, $nodesString, $percentageString, $urlQuery) { + $sliceClass = (empty($urlQuery) || (strlen($sliceID) == 3) && ($sliceID == 'xxx')) ? '' : 'pie-slice-link'; + $pathTextID = $sliceID; + + if ($pieType == 'country') { + if ($sliceID == 'lt1') { + $idText = '< 1%'; + $sliceClass = ''; + } elseif ($sliceID == 'xxx') { + $idText = '??'; + } elseif ($pieType == 'country') { + $idText = $sliceID; + } + + // mouseover/mouseout in set tag is not working with '--' + if ($pathTextID == '--') { + $pathTextID = 'zzz'; + } + } else { + $idText = translate($i18nStats, $i18nStatsDefault, ($pieType.$sliceID.'-2'), [], [], []); + } + + $largeArcFlag = $degrees > 180 ? '1' : '0'; + $xyCoordinates = getXYCoordinates($degrees, $pieRadius); + + $pathClassesArray = array($sliceClass, $fillClass.'-fill'); + + $pieObjectElements[] = '"id": "'.$sliceID.'"'; + $pieObjectElements[] = '"path-id": "slice'.$pathTextID.'"'; + $pieObjectElements[] = '"path-classes": "'.implode(' ', $pathClassesArray).'"'; + $pieObjectElements[] = '"path-d": "M'.$pieRadius.','.$pieRadius.' L'.$pieRadius.',0 A'.$pieRadius.','.$pieRadius.' 1 '.$largeArcFlag.',1 '.$xyCoordinates['X'].', '.$xyCoordinates['Y'].' z"'; + $pieObjectElements[] = '"has-link": '.(empty($sliceClass) ? 'false' : 'true'); + $pieObjectElements[] = '"url-query": "'.$urlQuery.'"'; + $pieObjectElements[] = '"anim-from": "0, '.$pieRadius.', '.$pieRadius.'"'; + $pieObjectElements[] = '"anim-to": "'.$rotateDegrees.', '.$pieRadius.', '.$pieRadius.'"'; + $pieObjectElements[] = '"anim-values": "0, '.$pieRadius.', '.$pieRadius.'; '.($rotateDegrees / 10).', '.$pieRadius.', '.$pieRadius.'; '.($rotateDegrees * 9 / 10).', '.$pieRadius.', '.$pieRadius.'; '.$rotateDegrees.', '.$pieRadius.', '.$pieRadius.'"'; + $pieObjectElements[] = '"text-id": "text'.$pathTextID.'"'; + $pieObjectElements[] = '"text-x": '.$pieRadius; + $pieObjectElements[] = '"text-y": '.($pieRadius - 8); + $pieObjectElements[] = '"text-label": "'.$idText.'"'; + $pieObjectElements[] = '"text-nodes-y": '.($pieRadius + 2); + $pieObjectElements[] = '"text-nodes": "'.$nodesString.'"'; + $pieObjectElements[] = '"text-percentage-y": '.($pieRadius + 12); + $pieObjectElements[] = '"text-percentage": "'.$percentageString.'"'; + + return '{'.implode(',', $pieObjectElements)."}"; + } + + function getPieLegendObjectString($legendTitle, $legendSubtitle, $percentageValue, $percentageUnit, $percentageString, $nodesValue, $nodesUnit, $nodesString, $bgClass, $sliceID, $urlQuery) { + $pieLegendObjectElements[] = '"id": "'.(strlen($sliceID) == 0 ? '??' : $sliceID).'"'; + $pieLegendObjectElements[] = '"bg-class": "'.$bgClass.'-bg"'; + $pieLegendObjectElements[] = '"title": "'.$legendTitle.'"'; + $pieLegendObjectElements[] = '"has-link": '.(empty($urlQuery) ? 'false' : 'true'); + $pieLegendObjectElements[] = '"url-query": "'.$urlQuery.'"'; + $pieLegendObjectElements[] = '"has-subtitle": '.(empty($legendSubtitle) ? 'false' : 'true'); + $pieLegendObjectElements[] = '"subtitle": "'.$legendSubtitle.'"'; + $pieLegendObjectElements[] = '"is-lt1": '.($percentageValue < 1 ? 'true' : 'false'); + $pieLegendObjectElements[] = '"percentage": { "value": '.$percentageValue.', "unit": "'.$percentageUnit.'", "string": "'.$percentageString.'"}'; + $pieLegendObjectElements[] = '"nodes": { "value": '.$nodesValue.', "unit": "'.$nodesUnit.'", "string": "'.$nodesString.'"}'; + + return '{'.implode(',', $pieLegendObjectElements)."}"; + } + + function getTimeStatsJSON($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $pieArray, $pieLegendArray) { + if ($year == 'all') { + // e.g. SELECT year period, COUNT(*) uploads FROM statistics WHERE ... GROUP BY year + $period = 'year'; + } elseif ($month == 'all') { + // e.g. SELECT month period, COUNT(*) uploads FROM statistics WHERE ... GROUP BY month + $period = 'month'; + } else { + // e.g. SELECT day period, COUNT(*) uploads FROM statistics WHERE ... GROUP BY day + $period = 'day'; + } + + $surveillanceNodesPerX = getTimeDataFromDB($pieType, $period); + + $timeNaviLinesArrayString = getNaviLinesArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month); + $timeLegendArrayStrings = getTimeLegendArrayStrings($i18nStats, $i18nStatsDefault, $pieType, $lineType, $surveillanceNodesPerX, $year, $month, $pieArray, $pieLegendArray, $period); + + return '"time-chart": { + '.$timeNaviLinesArrayString.', + '.$timeLegendArrayStrings['time'].', + '.$timeLegendArrayStrings['legend'].' + }'; + } + + function getTimeDataFromDB($pieType, $period) { + global $mysqli, $whereCriteria, $whereValues, $paramTypes; + + if (!($selectTimeStmt = $mysqli->prepare('SELECT '.$pieType.', '.$period.', COUNT(*) FROM statistics '.$whereCriteria.' GROUP BY '.$pieType.', '.$period))) { + echo 'Error while preparing select country statement : ' . $mysqli->error ; + exit(1); + } + + if (!empty($whereValues)) { + if (count($whereValues) == 1) { + $selectTimeStmt->bind_param($paramTypes, $whereValues[0]); + } elseif (count($whereValues) == 2) { + $selectTimeStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1]); + } elseif (count($whereValues) == 3) { + $selectTimeStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2]); + } elseif (count($whereValues) == 4) { + $selectTimeStmt->bind_param($paramTypes, $whereValues[0], $whereValues[1], $whereValues[2], $whereValues[3]); + } else { + echo 'Error while binding where parameters to select country statement.'; + } + } + + $selectTimeStmt->bind_result($lineID, $period, $noOfUploads); + $selectTimeStmt->execute(); + + $maxUploads = 0; + $maxSumUploads = 0; + + while ($selectTimeStmt->fetch()) { + $id = strlen($lineID) == 0 ? '??' : $lineID; + + if (empty($result[$id])) { + $result[$id] = array($period => $noOfUploads); + } else { + $result[$id][$period] = $noOfUploads; + } + + if (empty($sumResult[$period])) { + $sumResult[$period] = $noOfUploads; + } else { + $sumResult[$period] = $sumResult[$period] + $noOfUploads; + } + + $maxSumUploads = $sumResult[$period] > $maxSumUploads ? $sumResult[$period] : $maxSumUploads; + $maxUploads = $noOfUploads > $maxUploads ? $noOfUploads : $maxUploads; + } + + $selectTimeStmt->close(); + + $result['max'] = $maxUploads; + $result['max-sum'] = $maxSumUploads; + + return $result; + } + + function getNaviYearsArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month) { + // return getNaviArrayString('years', $i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, 2007, idate('Y')); + return getNaviArrayString('years', $i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, 2008, idate('Y')); + } + + function getNaviMonthsArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month) { + return getNaviArrayString('months', $i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, 1, 12); + } + + function getNaviLinesArrayString($i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month) { + return getNaviArrayString('lines', $i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, null, null); + } + + function getNaviArrayString($mode, $i18nStats, $i18nStatsDefault, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $loopStart, $loopEnd) { + if ($mode == 'lines') { + $naviObjectStrings[] = getNaviObjectString($mode, 'single', $pieType, $lineType, $colsArray, $valsArray, $year, $month, translate($i18nStats, $i18nStatsDefault, 'single', [], [], [])); + $naviObjectStrings[] = getNaviObjectString($mode, 'sum', $pieType, $lineType, $colsArray, $valsArray, $year, $month, translate($i18nStats, $i18nStatsDefault, 'total', [], [], [])); + } else { + $allIndex = 'all'; + $allLabel = translate($i18nStats, $i18nStatsDefault, $allIndex, [], [], []); + $naviObjectStrings[] = getNaviObjectString($mode, $allIndex, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $allLabel); + + for ($i = $loopStart; $i <= $loopEnd; $i++) { + $label = $mode == 'months' ? translate($i18nStats, $i18nStatsDefault, date('M', strtotime('1970-'.$i)), [], [], []) : $i; + $naviObjectStrings[] = getNaviObjectString($mode, $i, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $label); + } + } + + return '"'.$mode.'": ['.(implode(',', $naviObjectStrings)).']'; + } + + function getNaviObjectString($mode, $index, $pieType, $lineType, $colsArray, $valsArray, $year, $month, $label) { + if ($mode == 'years') { + $selectedTime = $year; + $queryYear = $index; + $queryMonth = $month; + $queryType = $lineType; + } elseif ($mode == 'months') { + $selectedTime = $month; + $queryYear = $year; + $queryMonth = $index; + $queryType = $lineType; + } else { + $selectedTime = $lineType; + $queryYear = $year; + $queryMonth = $month; + $queryType = $index; + } + + $selectedClass = $index == $selectedTime ? 'selected' : 'unselected'; + $naviObjectElements[] = '"selected-class": "'.$selectedClass.'"'; + + $queryStrings[] = '?pie='.$pieType; + if (!empty($colsArray) && !empty($valsArray)) { + $queryStrings[] = 'cols='.implode('|', $colsArray); + $queryStrings[] = 'vals='.implode('|', $valsArray); + } + $queryStrings[] = 'year='.$queryYear; + $queryStrings[] = 'month='.$queryMonth; + $queryStrings[] = 'time='.$queryType; + $naviObjectElements[] = '"url-query": "'.implode('&', $queryStrings).'"'; + + $naviObjectElements[] = '"label": "'.$label.'"'; + + return '{'.implode(',', $naviObjectElements)."}"; + } + + function getTimeLegendArrayStrings($i18nStats, $i18nStatsDefault, $pieType, $lineType, $surveillanceNodesPerX, $year, $month, $pieArray, $pieLegendArray, $period) { + global $titleStringFilter, $titleStringTime; + + $viewboxMultiplier = 80; + + if ($period == 'year') { + // $periodStart = 2007; + $periodStart = 2008; + $periodEnd = idate('Y'); + } elseif ($period == 'month') { + $periodStart = 1; + $periodEnd = 12; + } elseif ($period == 'day') { + $periodStart = 1; + $periodEnd = idate('t', strtotime($year.'-'.$month)); + } + + if ($periodStart && $periodEnd) { + for ($i = $periodStart; $i <= $periodEnd; $i++) { + $periodArray[] = $i; + } + } + + foreach ($pieArray as $pieElement) { + $pieIdArray[$pieElement->{'id'}] = $pieElement; + } + + /* 1 2 3 4 5 + +----+----+----+----+----+ + 1 |------------------------| + + + + 2 | | + + chart: 5*3 + + 3 | | + + + + 4 |------------------------| + + + + +----+----+----+----+----+ + viewbox: 5*4.5 */ + + $vbWidth = count($periodArray) * $viewboxMultiplier; + $vbHeight = $vbWidth * 4 / 5; + $chartHeight = $vbWidth * 3 / 5; + $chartPaddingTop = ($vbHeight - $chartHeight) * 1 / 5; + $chartPaddingBottom = ($vbHeight - $chartHeight) * 4 / 5; + $horizontalSegments = 4; + + $sumUploadsLT1Array = []; // FIX2023 + $periodsSumObjectElements = []; // FIX2023 + $verticalGridObjectStrings = []; // FIX2023 + $lineObjectStrings = []; // FIX2023 + + $maxUploads = $lineType == 'sum' ? $surveillanceNodesPerX['max-sum'] : $surveillanceNodesPerX['max']; + + // paths of 5 horizontal grid lines to devide the chart in 4 horizontal segments + for ($i=0; $i <= $horizontalSegments; $i++) { + $gridY = $chartPaddingTop + ($i * $chartHeight / $horizontalSegments); + $horizontalGridObjectStrings[] = '{ "path-d": "M0,'.$gridY.' L'.$vbWidth.','.$gridY.'" }'; + $horizontalTspanObjectStrings[] = '{ + "tspan-x": 0, + "tspan-y": '.($gridY - ($vbHeight / 100)).', + "label": "'.($maxUploads - ($maxUploads * $i / $horizontalSegments)).'" }'; + } + + foreach ($pieLegendArray as $i => $pieLegendObject) { + $periodsObjectElements = array(); + $pathDElements = array(); + $colorClass = substr($pieLegendObject->{'bg-class'}, 0, -3); + + foreach ($periodArray as $j => $periodValue) { + $periodStringArray = array(); + // path of a vertical grid line for the current period + $gridX = ($viewboxMultiplier / 2) + ($j * $viewboxMultiplier); + + // do this only once + if ($i == 0) { + $verticalGridObjectStrings[] = '{ "path-d": "M'.$gridX.','.$chartPaddingTop.' L'.$gridX.','.($vbHeight - $chartPaddingBottom).'" }'; + + if ($period == 'month') { + $periodStringArray[] = translate($i18nStats, $i18nStatsDefault, date('M', strtotime('1970-'.$periodValue)), [], [], []); + } elseif ($period == 'day') { + $periodStringArray[] = $periodValue; + $periodStringArray[] = translate($i18nStats, $i18nStatsDefault, substr(date('D', strtotime($year.'-'.$month.'-'.$periodValue)), 0, 2), [], [], []); + } else { + $periodStringArray[] = $periodValue; + } + + foreach ($periodStringArray as $k => $periodString) { + $verticalTspanObjectStrings[] = '{ + "tspan-x": '.$gridX.', + "tspan-y": '.($chartPaddingTop + $chartHeight + ($vbHeight / 25 * ($k + 1))).', + "label": "'.$periodString.'" }'; + } + } + + // coordinate command of the first line point starts with a M (move to), the others with a L (line to) + $dataCommand = $j == 0 ? 'M' : 'L'; + $commandX = $dataCommand.$gridX; + + // initialize the uploads sum of the current period + if (empty($sumUploadsArray[$periodValue])) { + $sumUploadsArray[$periodValue] = 0; + } + + // get uploads of the current period + $uploads = $surveillanceNodesPerX[$pieLegendObject->{'id'} == 'xxx' ? '??' : $pieLegendObject->{'id'}][$periodValue]; + $uploads = empty($uploads) ? 0 : $uploads; + + // sum the uploads of the current period + $sumUploadsArray[$periodValue] = $sumUploadsArray[$periodValue] + $uploads; + + // uploads for the line point of the current period (sum or single) + $uploadsForLine = $lineType == 'sum' ? $sumUploadsArray[$periodValue] : $uploads; + + if ($pieType == 'country' && $pieLegendObject->{'is-lt1'}) { + // Countries < 1% will be sumarized to one gray line but displayed separately in the legend. + if (empty($sumUploadsLT1Array[$commandX])) { + $sumUploadsLT1Array[$commandX] = $uploads; + } else { + $sumUploadsLT1Array[$commandX] = $sumUploadsLT1Array[$commandX] + $uploads; + } + } else { + $pathDElements[] = getPathDElement($chartPaddingTop, $chartHeight, $uploadsForLine, $maxUploads, $commandX); + } + + // collect uploads per period for the legend JSON + $periodsObjectElements[] = '{ "period": "'.(implode('
', $periodStringArray)).'", "uploads": '.$uploads.' }'; + } + + // collect line object for time JSON + if (count($pathDElements) > 0) { + $pathDString = implode(' ', $pathDElements); + $lineObjectStrings[] = getLineObjectString($colorClass, $pathDString, $pieIdArray[$pieLegendObject->{'id'}], $vbWidth, $vbHeight); + } + + // collect legend object for legend JSON + $periodsObjectArrayString = '[ '.implode(',', $periodsObjectElements).' ]'; + $timeLegendObjectStrings[] = getTimeLegendObjectString($colorClass, $pieLegendObject, $periodsObjectArrayString); + } + + // Values of the line that represents the sum of all < 1% lines. + if ($pieType == 'country' && count($sumUploadsLT1Array) > 0) { + $i = $periodStart; + + foreach ($sumUploadsLT1Array as $commandX => $sumUploadsLT1) { + $uploadsForLine = $lineType == 'sum' ? $sumUploadsArray[$i++] : $sumUploadsLT1; + $pathDElements[] = getPathDElement($chartPaddingTop, $chartHeight, $uploadsForLine, $maxUploads, $commandX); + } + + // collect line object of < 1% line for time JSON + $pathDString = implode(' ', $pathDElements); + $lineObjectStrings[] = getLineObjectString('color0', $pathDString, $pieIdArray['lt1'], $vbWidth, $vbHeight); + } + + if ($lineType == 'sum') { + $lineObjectStrings = array_reverse($lineObjectStrings); + } + + // collect sum legend object for legend JSON + foreach ($sumUploadsArray as $periodValue => $sumUploads) { + $periodsSumObjectElements[] = '{ "period": "'.$periodValue.'", "uploads": '.$sumUploads.' }'; + } + $periodsSumObjectArrayString = '[ '.implode(',', $periodsSumObjectElements).' ]'; + $timeLegendObjectStrings[] = getTimeLegendObjectString('iconxxx', null, $periodsSumObjectArrayString); + + // common label for the vertical time chart labels + if ($period == 'year' && $month != 'all') { + $verticalTspanObjectStrings[] = '{ + "tspan-x": '.($vbWidth / 2).', + "tspan-y": '.($chartPaddingTop + $chartHeight + ($vbHeight / 25 * 2)).', + "label": "'.translate($i18nStats, $i18nStatsDefault, date('M', strtotime('1970-'.$month)).'_', [], [], []).'" }'; + } elseif ($period == 'month') { + $verticalTspanObjectStrings[] = '{ + "tspan-x": '.($vbWidth / 2).', + "tspan-y": '.($chartPaddingTop + $chartHeight + ($vbHeight / 25 * 2)).', + "label": "'.$year.'" }'; + } elseif ($period == 'day') { + $verticalTspanObjectStrings[] = '{ + "tspan-x": '.($vbWidth / 2).', + "tspan-y": '.($chartPaddingTop + $chartHeight + ($vbHeight / 25 * 3)).', + "label": "'.translate($i18nStats, $i18nStatsDefault, date('M', strtotime('1970-'.$month)).'_', [], [], []).' '.$year.'" }'; + } + + $timeObjectStrings[] = '"period": "'.$period.'"'; + $timeObjectStrings[] = '"vb-width": '.$vbWidth; + $timeObjectStrings[] = '"vb-height": '.$vbHeight; + $timeObjectStrings[] = '"h-grids": ['.(implode(',', $horizontalGridObjectStrings)).']'; + $timeObjectStrings[] = '"v-grids": ['.(implode(',', $verticalGridObjectStrings)).']'; + $timeObjectStrings[] = '"h-labels": { + "text-x": 0, + "text-y": 0, + "font-size": '.($vbWidth / 50).', + "tspan": ['.(implode(',', $horizontalTspanObjectStrings)).'] + }'; + $timeObjectStrings[] = '"v-labels": { + "text-x": 0, + "text-y": '.($chartPaddingTop + $chartHeight + (2 * $vbHeight / 100)).', + "font-size": '.($vbWidth / 50).', + "tspan": ['.(implode(',', $verticalTspanObjectStrings)).'] + }'; + $timeObjectStrings[] = '"lines": ['.(implode(',', $lineObjectStrings)).']'; + + $timeLegendArrayStrings['time'] = '"time": {'.(implode(',', $timeObjectStrings)).'}'; + $timeLegendArrayStrings['legend'] = '"legend": { + "title": "'.$titleStringFilter.'
'.$titleStringTime.'", + "table": ['.(implode(',', $timeLegendObjectStrings)).'] + }'; + + return $timeLegendArrayStrings; + } + + function getPathDElement($chartPaddingTop, $chartHeight, $uploadsForLine, $maxUploads, $commandX) { + $lineY = $chartPaddingTop + ($chartHeight - ($uploadsForLine / $maxUploads * $chartHeight)); + return $commandX.','.$lineY; + } + + function getLineObjectString($colorClass, $pathDString, $pieObject, $vbWidth, $vbHeight) { + $pathClassesArray = array($colorClass.'-stroke'); + + $lineObjectElements[] = '"path-id": "line'.$pieObject->{'path-id'}.'"'; + $lineObjectElements[] = '"path-classes": "'.implode(' ', $pathClassesArray).'"'; + $lineObjectElements[] = '"path-d": "'.$pathDString.'"'; + $lineObjectElements[] = '"has-link": '.($pieObject->{'has-link'} ? 'true' : 'false'); + $lineObjectElements[] = '"url-query": "'.$pieObject->{'url-query'}.'"'; + $lineObjectElements[] = '"text-id": "'.$pieObject->{'text-id'}.'"'; + $lineObjectElements[] = '"text-x": '.($vbWidth / 2); + $lineObjectElements[] = '"text-y": '.($vbHeight * 39 / 40); + $lineObjectElements[] = '"text-label": "'.$pieObject->{'text-label'}.' • '.$pieObject->{'text-percentage'}.' • '.$pieObject->{'text-nodes'}.'"'; + $lineObjectElements[] = '"font-size": '.($vbWidth / 30); + + return '{'.implode(',', $lineObjectElements)."}"; + } + + function getTimeLegendObjectString($colorClass, $pieLegendObject, $periodsObjectArrayString) { + global $surveillanceNodesTotal; + + if (!empty($pieLegendObject)) { + $title = $pieLegendObject->{'title'}; + $hasLink = $pieLegendObject->{'has-link'} ? 'true' : 'false'; + $urlQuery = $pieLegendObject->{'url-query'}; + $percentage = $pieLegendObject->{'percentage'}->{'string'}; + $nodes = $pieLegendObject->{'nodes'}->{'string'}; + } else { + $title = 'Total'; + $hasLink = 'false'; + $urlQuery = ''; + $percentage = '100%'; + $nodes = $surveillanceNodesTotal.' node'.($surveillanceNodesTotal != 1 ? 's' : ''); + } + + $timeLegendObjectElements[] = '"color-class": "'.$colorClass.'"'; + $timeLegendObjectElements[] = '"title": "'.$title.'"'; + $timeLegendObjectElements[] = '"has-link": '.$hasLink; + $timeLegendObjectElements[] = '"url-query": "'.$urlQuery.'"'; + $timeLegendObjectElements[] = '"percentage": "'.$percentage.'"'; + $timeLegendObjectElements[] = '"nodes": "'.$nodes.'"'; + $timeLegendObjectElements[] = '"periods": '.$periodsObjectArrayString; + + return '{'.implode(',', $timeLegendObjectElements)."}"; + } + + function getSurveillanceStatsTags($surveillanceStatsJSON) { + global $pieRadius, $embQueryNth; + + $surveillanceStatsObjects = json_decode($surveillanceStatsJSON); + + $totalObject = $surveillanceStatsObjects->{'total'}; + $naviObject = $surveillanceStatsObjects->{'navi'}; + $pieChartObject = $surveillanceStatsObjects->{'pie-chart'}; + $timeChartObject = $surveillanceStatsObjects->{'time-chart'}; + + $vGridPathArray = []; // FIX2023 + $linesPathArray = []; // FIX2023 + $thArray = []; // FIX2023 + $tfArray = []; // FIX2023 + + // ######## ######## ######## TOTAL CHART ######## ######## ######## + + $totalTags = ' + + + + '.$totalObject->{'no-of-nodes'}.' + + + '.$totalObject->{'label'}.' + '.$totalObject->{'filter'}.' + '.$totalObject->{'time'}.' + + + Your browser is not able to display SVG graphics. + '; + + // ######## ######## ######## NAVI ######## ######## ######## + + $naviCatsTags = getNaviTags('cats', $naviObject, null); + $naviYearsTags = getNaviTags('years', $naviObject, null); + $naviMonthsTags = getNaviTags('months', $naviObject, null); + + $naviTags = ' + + + '; + + // ######## ######## ######## PIE CHART ######## ######## ######## + + $piePathTags = ''; + $pieUseTags = ''; + $pieLegendTagsLess = ''; + $pieLegendTagsMore = ''; + + foreach($pieChartObject->{'pie'} as $piePieObject) { + $pieAStartTag = ''; + $pieAEndTag = ''; + + if ($piePieObject->{'has-link'}) { + $pieAStartTag = ''; + $pieAEndTag = ''; + } + + if ($piePieObject->{'text-percentage'} == '100.00%') { + $pieTag = ' + '; + } else { + $pieTag = ' + + + '; + } + + $piePathTags = $piePathTags. + $pieAStartTag. + $pieTag. + $pieAEndTag.' + + '.$piePieObject->{'text-label'}.' + '.$piePieObject->{'text-nodes'}.' + '.$piePieObject->{'text-percentage'}.' + + '; + + $pieUseTags = $pieUseTags.' + '; + } + + // background colored pie center circle + $piePathTags = $piePathTags.''; + + // if the legend has more then 10 entries the legend can be toggled (show first 10 entries or show all entries) + $isToggleLegend = count($pieChartObject->{'legend'}) > 10; + + foreach($pieChartObject->{'legend'} as $i => $pieLegendObject) { + $title = $pieLegendObject->{'title'}; + $subtitle = ''; + + if ($pieLegendObject->{'has-link'}) { + $title = ''.$title.''; + } + + if ($pieLegendObject->{'has-subtitle'}) { + $subtitle = ' +
+
+
'.$pieLegendObject->{'subtitle'}.'
+
'; + } + + $currentPieLegendTags = ' +
+
+
+
+
'.$title.'
+
+ '.$subtitle.' +
+
+
'.$pieLegendObject->{'percentage'}->{'string'}.' • '.$pieLegendObject->{'nodes'}->{'string'}.'
+
+
'; + + $pieLegendTagsMore = $pieLegendTagsMore.$currentPieLegendTags; + + if ($isToggleLegend && $i < 10) { + $pieLegendTagsLess = $pieLegendTagsLess.$currentPieLegendTags; + } + } + + if ($isToggleLegend) { + $pieLegendTags = ' + +
+ '.$pieLegendTagsLess.' +
+
+ '.$pieLegendTagsMore.' +
+ + '; + } else { + $pieLegendTags = $pieLegendTagsMore; + } + + $pieTags = ' +
+
+ + + '.$piePathTags.' + + '.$pieUseTags.' + Your browser is not able to display SVG graphics. + +
+
+ '.$pieLegendTags.' +
+
'; + + $pieChartTags = $pieTags; + + // ######## ######## ######## TIME CHART ######## ######## ######## + $timeObject = $timeChartObject->{'time'}; + $legendObject = $timeChartObject->{'legend'}; + $legendTableArray = $legendObject->{'table'}; + + $timeNaviLinesTags = getNaviTags('lines', $timeChartObject, 'time'); + + $noOfColumns = count($legendTableArray[0]->{'periods'}); + + foreach($legendTableArray as $i => $timeLegendObject) { + $tdArray = array(); + $rowTitleArray = array(); + + $title = $timeLegendObject->{'title'}; + + if ($timeLegendObject->{'has-link'}) { + $title = ''.$title.''; + } + + $rowTitleArray[] = $title; // ▪◾◼■ + $rowTitleArray[] = $timeLegendObject->{'percentage'}; + $rowTitleArray[] = $timeLegendObject->{'nodes'}; + + $color = $timeLegendObject->{'color-class'}; + + foreach($timeLegendObject->{'periods'} as $j => $periodObject) { + // $evenClass = $j % 2 == 0 ? "even-bg" : ''; + + if ($i == 0) { + // $thArray[] = ''.$periodObject->{'period'}.''; + $thArray[] = ''.$periodObject->{'period'}.''; + $tfArray[] = ''.$periodObject->{'period'}.''; + } + // $tdArray[] = ''.$periodObject->{'uploads'}.''; + $tdArray[] = ''.$periodObject->{'uploads'}.''; + } + + $tbodyTrArray[] = ' '; + $tbodyTrArray[] = ''.implode(' • ', $rowTitleArray).''; + $tbodyTrArray[] = ''.implode('', $tdArray).''; + } + + foreach ($timeObject->{'h-grids'} as $vGridObject) { + $hGridPathArray[] = ''; + } + + foreach ($timeObject->{'v-grids'} as $hGridObject) { + $vGridPathArray[] = ''; + } + + foreach ($timeObject->{'lines'} as $lineObject) { + $lineAStartTag = ''; + $lineAEndTag = ''; + + if ($lineObject->{'has-link'}) { + $lineAStartTag = ''; + $lineAEndTag = ''; + } + + $lineTag = ' + + '; + + $textTag = ' + + '.$lineObject->{'text-label'}.' + + '; + + $linesPathArray[] = + $lineAStartTag. + $lineTag. + $lineAEndTag. + $textTag; + } + + $hLabelsObject = $timeObject->{'h-labels'}; + foreach ($hLabelsObject->{'tspan'} as $tspanObject) { + $hTspanArray[] = ''.$tspanObject->{'label'}.''; + } + + $vLabelsObject = $timeObject->{'v-labels'}; + foreach ($vLabelsObject->{'tspan'} as $tspanObject) { + $vTspanArray[] = ''.$tspanObject->{'label'}.''; + } + + $timePathUseTags = ' + + + '.(implode('', $hGridPathArray)).' + + + '.(implode('', $vGridPathArray)).' + + + '.(implode('', $linesPathArray)).' + + + '.(implode('', $hTspanArray)).' + + + '.(implode('', $vTspanArray)).' + + Your browser is not able to display SVG graphics. + '; + + $timeLegendTags = ' + + + + '.(implode('', $thArray)).' + + + + + '.(implode('', $tfArray)).' + + + + '.(implode('', $tbodyTrArray)).' + +
'; + + $timeTags = ' +
+
+ '.$timePathUseTags.' +
+
+
'.$legendObject->{'title'}.'
+ '.$timeLegendTags.' +
+
'; + + $timeChartTags = $timeNaviLinesTags.$timeTags; + + return $totalTags.$naviTags.$pieChartTags.$timeChartTags; + } + + function getNaviTags($mode, $naviObject, $id) { + $naviEntryObjects = $naviObject->{$mode}; + $idString = !empty($id) ? 'id="'.$id.'"' : ''; + $naviTags = ''; + } + + function getNaviElement($selectedClass, $urlQuery, $label, $vbHeight, $yText, $id) { + global $embQueryNth; + + $idLink = !empty($id) ? '#'.$id : ''; + + return ' + '; + } + + function getPercentage($total, $part) { + return number_format((($part*100)/$total), 2); + } + + function getDegrees($percentage) { + return 360*($percentage/100); + } + + /* | x + y| + (4) ---------|--------- (1) X,Y + r| z + | + --------------+-------------- + |(100,100) + | + (3) ---------|--------- (2) + | + |*/ + function getXYCoordinates($degrees, $pieRadius) { + if ($degrees <= 90) { + // Coordinate in section (1) + $angle = $degrees; + $z = calculateZ($angle, $pieRadius); + $x = calculateX($angle, $pieRadius); + $y = calculateY($z, $x); + $xyCoordinates['X'] = getCoordinateX12($x, $pieRadius); + $xyCoordinates['Y'] = $y; + } elseif ($degrees <= 180) { + // Coordinate in section (2) + $angle = 180 - $degrees; + $z = calculateZ($angle, $pieRadius); + $x = calculateX($angle, $pieRadius); + $y = calculateY($z, $x); + $xyCoordinates['X'] = getCoordinateX12($x, $pieRadius); + $xyCoordinates['Y'] = getCoordinateY23($y, $pieRadius); + } elseif ($degrees <= 270) { + // Coordinate in section (3) + $angle = $degrees - 180; + $z = calculateZ($angle, $pieRadius); + $x = calculateX($angle, $pieRadius); + $y = calculateY($z, $x); + $xyCoordinates['X'] = getCoordinateX34($x, $pieRadius); + $xyCoordinates['Y'] = getCoordinateY23($y, $pieRadius); + } else { + // Coordinate in section (4) + $angle = 360 - $degrees; + $z = calculateZ($angle, $pieRadius); + $x = calculateX($angle, $pieRadius); + $y = calculateY($z, $x); + $xyCoordinates['X'] = getCoordinateX34($x, $pieRadius); + $xyCoordinates['Y'] = $y; + } + + return $xyCoordinates; + } + + // Calculate side z with the cosine rule [ z² = r² + r² – 2*r*r*cos(α) ] + function calculateZ($angle, $pieRadius) { + $doubleRadiusPow2 = 2*pow($pieRadius, 2); + + return sqrt($doubleRadiusPow2 - ($doubleRadiusPow2 * cos(deg2rad($angle)))); + } + + // Calculate side x using the sine rule [ sin(α) = x/r ] + function calculateX($angle, $pieRadius) { + return sin(deg2rad($angle)) * $pieRadius; + } + + // Calculate side y using Mr. Pythagoras’ theorem [ x² + y² = z² ] + function calculateY($z, $x) { + return sqrt(pow($z, 2) - pow($x, 2)); + } + + // x-coordinate in section 1 or 2 + function getCoordinateX12($x, $pieRadius) { + return $pieRadius + $x; + } + + // x-coordinate in section 3 or 4 + function getCoordinateX34($x, $pieRadius) { + return $pieRadius - $x; + } + + // y-coordinate in section 2 or 3 + function getCoordinateY23($y, $pieRadius) { + return (2 *($pieRadius - $y)) + $y; + } +?> + + + + + + SunderS — Statistics + + + + + + + + + + + + +
+ Surveillance under Surveillance +
+
+ close(); + ?> + + + + + diff --git a/www/sunders/sunders.html b/www/sunders/sunders.html new file mode 100644 index 0000000..d62a3aa --- /dev/null +++ b/www/sunders/sunders.html @@ -0,0 +1,26 @@ + + + + + + Surveillance under Surveillance + + + + + + + + + + + + + +
+ + Surveillance under Surveillance + +
+ +