From 44821401ccce041c4b7c577ea8772eaf3f98e888 Mon Sep 17 00:00:00 2001 From: MehediMK Date: Mon, 7 Dec 2020 03:49:40 +0600 Subject: [PATCH] My ecommerce site --- EShop/__init__.py | 0 EShop/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 119 bytes EShop/__pycache__/settings.cpython-38.pyc | Bin 0 -> 2402 bytes EShop/__pycache__/urls.cpython-38.pyc | Bin 0 -> 456 bytes EShop/__pycache__/wsgi.cpython-38.pyc | Bin 0 -> 518 bytes EShop/asgi.py | 16 + EShop/settings.py | 129 + EShop/urls.py | 12 + EShop/wsgi.py | 16 + db.sqlite3 | Bin 0 -> 167936 bytes manage.py | 22 + media/products/1.PNG | Bin 0 -> 99775 bytes media/products/2.PNG | Bin 0 -> 83521 bytes media/products/3.PNG | Bin 0 -> 61325 bytes media/products/4.PNG | Bin 0 -> 71270 bytes requirement.txt | 5 + static/admin/css/autocomplete.css | 260 + static/admin/css/base.css | 966 ++ static/admin/css/changelists.css | 354 + static/admin/css/dashboard.css | 26 + static/admin/css/fonts.css | 20 + static/admin/css/forms.css | 527 + static/admin/css/login.css | 79 + static/admin/css/nav_sidebar.css | 119 + static/admin/css/responsive.css | 1004 ++ static/admin/css/responsive_rtl.css | 80 + static/admin/css/rtl.css | 249 + .../css/vendor/select2/LICENSE-SELECT2.md | 21 + static/admin/css/vendor/select2/select2.css | 481 + .../admin/css/vendor/select2/select2.min.css | 1 + static/admin/css/widgets.css | 574 + static/admin/fonts/LICENSE.txt | 202 + static/admin/fonts/README.txt | 3 + static/admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 86184 bytes static/admin/fonts/Roboto-Light-webfont.woff | Bin 0 -> 85692 bytes .../admin/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 85876 bytes static/admin/img/LICENSE | 20 + static/admin/img/README.txt | 7 + static/admin/img/calendar-icons.svg | 14 + static/admin/img/gis/move_vertex_off.svg | 1 + static/admin/img/gis/move_vertex_on.svg | 1 + static/admin/img/icon-addlink.svg | 3 + static/admin/img/icon-alert.svg | 3 + static/admin/img/icon-calendar.svg | 9 + static/admin/img/icon-changelink.svg | 3 + static/admin/img/icon-clock.svg | 9 + static/admin/img/icon-deletelink.svg | 3 + static/admin/img/icon-no.svg | 3 + static/admin/img/icon-unknown-alt.svg | 3 + static/admin/img/icon-unknown.svg | 3 + static/admin/img/icon-viewlink.svg | 3 + static/admin/img/icon-yes.svg | 3 + static/admin/img/inline-delete.svg | 3 + static/admin/img/search.svg | 3 + static/admin/img/selector-icons.svg | 34 + static/admin/img/sorting-icons.svg | 19 + static/admin/img/tooltag-add.svg | 3 + static/admin/img/tooltag-arrowright.svg | 3 + static/admin/js/SelectBox.js | 110 + static/admin/js/SelectFilter2.js | 236 + static/admin/js/actions.js | 154 + static/admin/js/actions.min.js | 7 + static/admin/js/admin/DateTimeShortcuts.js | 417 + static/admin/js/admin/RelatedObjectLookups.js | 159 + static/admin/js/autocomplete.js | 38 + static/admin/js/calendar.js | 207 + static/admin/js/cancel.js | 28 + static/admin/js/change_form.js | 16 + static/admin/js/collapse.js | 43 + static/admin/js/collapse.min.js | 2 + static/admin/js/core.js | 163 + static/admin/js/inlines.js | 348 + static/admin/js/inlines.min.js | 11 + static/admin/js/jquery.init.js | 8 + static/admin/js/nav_sidebar.js | 39 + static/admin/js/popup_response.js | 16 + static/admin/js/prepopulate.js | 43 + static/admin/js/prepopulate.min.js | 1 + static/admin/js/prepopulate_init.js | 11 + static/admin/js/urlify.js | 185 + static/admin/js/vendor/jquery/LICENSE.txt | 20 + static/admin/js/vendor/jquery/jquery.js | 10872 ++++++++++++++++ static/admin/js/vendor/jquery/jquery.min.js | 2 + static/admin/js/vendor/select2/LICENSE.md | 21 + static/admin/js/vendor/select2/i18n/af.js | 3 + static/admin/js/vendor/select2/i18n/ar.js | 3 + static/admin/js/vendor/select2/i18n/az.js | 3 + static/admin/js/vendor/select2/i18n/bg.js | 3 + static/admin/js/vendor/select2/i18n/bn.js | 3 + static/admin/js/vendor/select2/i18n/bs.js | 3 + static/admin/js/vendor/select2/i18n/ca.js | 3 + static/admin/js/vendor/select2/i18n/cs.js | 3 + static/admin/js/vendor/select2/i18n/da.js | 3 + static/admin/js/vendor/select2/i18n/de.js | 3 + static/admin/js/vendor/select2/i18n/dsb.js | 3 + static/admin/js/vendor/select2/i18n/el.js | 3 + static/admin/js/vendor/select2/i18n/en.js | 3 + static/admin/js/vendor/select2/i18n/es.js | 3 + static/admin/js/vendor/select2/i18n/et.js | 3 + static/admin/js/vendor/select2/i18n/eu.js | 3 + static/admin/js/vendor/select2/i18n/fa.js | 3 + static/admin/js/vendor/select2/i18n/fi.js | 3 + static/admin/js/vendor/select2/i18n/fr.js | 3 + static/admin/js/vendor/select2/i18n/gl.js | 3 + static/admin/js/vendor/select2/i18n/he.js | 3 + static/admin/js/vendor/select2/i18n/hi.js | 3 + static/admin/js/vendor/select2/i18n/hr.js | 3 + static/admin/js/vendor/select2/i18n/hsb.js | 3 + static/admin/js/vendor/select2/i18n/hu.js | 3 + static/admin/js/vendor/select2/i18n/hy.js | 3 + static/admin/js/vendor/select2/i18n/id.js | 3 + static/admin/js/vendor/select2/i18n/is.js | 3 + static/admin/js/vendor/select2/i18n/it.js | 3 + static/admin/js/vendor/select2/i18n/ja.js | 3 + static/admin/js/vendor/select2/i18n/ka.js | 3 + static/admin/js/vendor/select2/i18n/km.js | 3 + static/admin/js/vendor/select2/i18n/ko.js | 3 + static/admin/js/vendor/select2/i18n/lt.js | 3 + static/admin/js/vendor/select2/i18n/lv.js | 3 + static/admin/js/vendor/select2/i18n/mk.js | 3 + static/admin/js/vendor/select2/i18n/ms.js | 3 + static/admin/js/vendor/select2/i18n/nb.js | 3 + static/admin/js/vendor/select2/i18n/ne.js | 3 + static/admin/js/vendor/select2/i18n/nl.js | 3 + static/admin/js/vendor/select2/i18n/pl.js | 3 + static/admin/js/vendor/select2/i18n/ps.js | 3 + static/admin/js/vendor/select2/i18n/pt-BR.js | 3 + static/admin/js/vendor/select2/i18n/pt.js | 3 + static/admin/js/vendor/select2/i18n/ro.js | 3 + static/admin/js/vendor/select2/i18n/ru.js | 3 + static/admin/js/vendor/select2/i18n/sk.js | 3 + static/admin/js/vendor/select2/i18n/sl.js | 3 + static/admin/js/vendor/select2/i18n/sq.js | 3 + .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 + static/admin/js/vendor/select2/i18n/sr.js | 3 + static/admin/js/vendor/select2/i18n/sv.js | 3 + static/admin/js/vendor/select2/i18n/th.js | 3 + static/admin/js/vendor/select2/i18n/tk.js | 3 + static/admin/js/vendor/select2/i18n/tr.js | 3 + static/admin/js/vendor/select2/i18n/uk.js | 3 + static/admin/js/vendor/select2/i18n/vi.js | 3 + static/admin/js/vendor/select2/i18n/zh-CN.js | 3 + static/admin/js/vendor/select2/i18n/zh-TW.js | 3 + .../admin/js/vendor/select2/select2.full.js | 6820 ++++++++++ .../js/vendor/select2/select2.full.min.js | 2 + static/admin/js/vendor/xregexp/LICENSE.txt | 21 + static/admin/js/vendor/xregexp/xregexp.js | 4652 +++++++ static/admin/js/vendor/xregexp/xregexp.min.js | 160 + store/__init__.py | 0 store/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 119 bytes store/__pycache__/admin.cpython-38.pyc | Bin 0 -> 422 bytes store/__pycache__/urls.cpython-38.pyc | Bin 0 -> 507 bytes store/__pycache__/views.cpython-38.pyc | Bin 0 -> 4709 bytes store/admin.py | 11 + store/apps.py | 5 + store/migrations/0001_initial.py | 33 + store/migrations/0002_auto_20201123_2227.py | 18 + store/migrations/0003_auto_20201124_1352.py | 18 + store/migrations/0004_customer.py | 24 + store/migrations/0005_order.py | 26 + store/migrations/0006_auto_20201207_0102.py | 23 + store/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 1025 bytes .../0002_auto_20201123_2003.cpython-38.pyc | Bin 0 -> 775 bytes .../0002_auto_20201123_2227.cpython-38.pyc | Bin 0 -> 580 bytes .../0003_auto_20201124_1352.cpython-38.pyc | Bin 0 -> 573 bytes .../0003_product_category.cpython-38.pyc | Bin 0 -> 673 bytes .../0004_auto_20201123_2024.cpython-38.pyc | Bin 0 -> 711 bytes .../__pycache__/0004_customer.cpython-38.pyc | Bin 0 -> 780 bytes .../0005_auto_20201123_2024.cpython-38.pyc | Bin 0 -> 684 bytes .../__pycache__/0005_order.cpython-38.pyc | Bin 0 -> 919 bytes .../0006_auto_20201123_2028.cpython-38.pyc | Bin 0 -> 677 bytes .../0006_auto_20201207_0102.cpython-38.pyc | Bin 0 -> 611 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 130 bytes store/models/__init__.py | 4 + .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 283 bytes .../__pycache__/category.cpython-38.pyc | Bin 0 -> 684 bytes .../__pycache__/customer.cpython-38.pyc | Bin 0 -> 1214 bytes .../models/__pycache__/orders.cpython-38.pyc | Bin 0 -> 974 bytes .../models/__pycache__/product.cpython-38.pyc | Bin 0 -> 1384 bytes store/models/category.py | 13 + store/models/customer.py | 27 + store/models/orders.py | 22 + store/models/product.py | 29 + .../__pycache__/cart.cpython-38.pyc | Bin 0 -> 1078 bytes store/templatetags/cart.py | 36 + store/tests.py | 3 + store/urls.py | 11 + store/views.py | 174 + templates/base.html | 77 + templates/cart.html | 85 + templates/index.html | 63 + templates/login.html | 28 + templates/signup.html | 54 + 194 files changed, 31092 insertions(+) create mode 100644 EShop/__init__.py create mode 100644 EShop/__pycache__/__init__.cpython-38.pyc create mode 100644 EShop/__pycache__/settings.cpython-38.pyc create mode 100644 EShop/__pycache__/urls.cpython-38.pyc create mode 100644 EShop/__pycache__/wsgi.cpython-38.pyc create mode 100644 EShop/asgi.py create mode 100644 EShop/settings.py create mode 100644 EShop/urls.py create mode 100644 EShop/wsgi.py create mode 100644 db.sqlite3 create mode 100644 manage.py create mode 100644 media/products/1.PNG create mode 100644 media/products/2.PNG create mode 100644 media/products/3.PNG create mode 100644 media/products/4.PNG create mode 100644 requirement.txt create mode 100644 static/admin/css/autocomplete.css create mode 100644 static/admin/css/base.css create mode 100644 static/admin/css/changelists.css create mode 100644 static/admin/css/dashboard.css create mode 100644 static/admin/css/fonts.css create mode 100644 static/admin/css/forms.css create mode 100644 static/admin/css/login.css create mode 100644 static/admin/css/nav_sidebar.css create mode 100644 static/admin/css/responsive.css create mode 100644 static/admin/css/responsive_rtl.css create mode 100644 static/admin/css/rtl.css create mode 100644 static/admin/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 static/admin/css/vendor/select2/select2.css create mode 100644 static/admin/css/vendor/select2/select2.min.css create mode 100644 static/admin/css/widgets.css create mode 100644 static/admin/fonts/LICENSE.txt create mode 100644 static/admin/fonts/README.txt create mode 100644 static/admin/fonts/Roboto-Bold-webfont.woff create mode 100644 static/admin/fonts/Roboto-Light-webfont.woff create mode 100644 static/admin/fonts/Roboto-Regular-webfont.woff create mode 100644 static/admin/img/LICENSE create mode 100644 static/admin/img/README.txt create mode 100644 static/admin/img/calendar-icons.svg create mode 100644 static/admin/img/gis/move_vertex_off.svg create mode 100644 static/admin/img/gis/move_vertex_on.svg create mode 100644 static/admin/img/icon-addlink.svg create mode 100644 static/admin/img/icon-alert.svg create mode 100644 static/admin/img/icon-calendar.svg create mode 100644 static/admin/img/icon-changelink.svg create mode 100644 static/admin/img/icon-clock.svg create mode 100644 static/admin/img/icon-deletelink.svg create mode 100644 static/admin/img/icon-no.svg create mode 100644 static/admin/img/icon-unknown-alt.svg create mode 100644 static/admin/img/icon-unknown.svg create mode 100644 static/admin/img/icon-viewlink.svg create mode 100644 static/admin/img/icon-yes.svg create mode 100644 static/admin/img/inline-delete.svg create mode 100644 static/admin/img/search.svg create mode 100644 static/admin/img/selector-icons.svg create mode 100644 static/admin/img/sorting-icons.svg create mode 100644 static/admin/img/tooltag-add.svg create mode 100644 static/admin/img/tooltag-arrowright.svg create mode 100644 static/admin/js/SelectBox.js create mode 100644 static/admin/js/SelectFilter2.js create mode 100644 static/admin/js/actions.js create mode 100644 static/admin/js/actions.min.js create mode 100644 static/admin/js/admin/DateTimeShortcuts.js create mode 100644 static/admin/js/admin/RelatedObjectLookups.js create mode 100644 static/admin/js/autocomplete.js create mode 100644 static/admin/js/calendar.js create mode 100644 static/admin/js/cancel.js create mode 100644 static/admin/js/change_form.js create mode 100644 static/admin/js/collapse.js create mode 100644 static/admin/js/collapse.min.js create mode 100644 static/admin/js/core.js create mode 100644 static/admin/js/inlines.js create mode 100644 static/admin/js/inlines.min.js create mode 100644 static/admin/js/jquery.init.js create mode 100644 static/admin/js/nav_sidebar.js create mode 100644 static/admin/js/popup_response.js create mode 100644 static/admin/js/prepopulate.js create mode 100644 static/admin/js/prepopulate.min.js create mode 100644 static/admin/js/prepopulate_init.js create mode 100644 static/admin/js/urlify.js create mode 100644 static/admin/js/vendor/jquery/LICENSE.txt create mode 100644 static/admin/js/vendor/jquery/jquery.js create mode 100644 static/admin/js/vendor/jquery/jquery.min.js create mode 100644 static/admin/js/vendor/select2/LICENSE.md create mode 100644 static/admin/js/vendor/select2/i18n/af.js create mode 100644 static/admin/js/vendor/select2/i18n/ar.js create mode 100644 static/admin/js/vendor/select2/i18n/az.js create mode 100644 static/admin/js/vendor/select2/i18n/bg.js create mode 100644 static/admin/js/vendor/select2/i18n/bn.js create mode 100644 static/admin/js/vendor/select2/i18n/bs.js create mode 100644 static/admin/js/vendor/select2/i18n/ca.js create mode 100644 static/admin/js/vendor/select2/i18n/cs.js create mode 100644 static/admin/js/vendor/select2/i18n/da.js create mode 100644 static/admin/js/vendor/select2/i18n/de.js create mode 100644 static/admin/js/vendor/select2/i18n/dsb.js create mode 100644 static/admin/js/vendor/select2/i18n/el.js create mode 100644 static/admin/js/vendor/select2/i18n/en.js create mode 100644 static/admin/js/vendor/select2/i18n/es.js create mode 100644 static/admin/js/vendor/select2/i18n/et.js create mode 100644 static/admin/js/vendor/select2/i18n/eu.js create mode 100644 static/admin/js/vendor/select2/i18n/fa.js create mode 100644 static/admin/js/vendor/select2/i18n/fi.js create mode 100644 static/admin/js/vendor/select2/i18n/fr.js create mode 100644 static/admin/js/vendor/select2/i18n/gl.js create mode 100644 static/admin/js/vendor/select2/i18n/he.js create mode 100644 static/admin/js/vendor/select2/i18n/hi.js create mode 100644 static/admin/js/vendor/select2/i18n/hr.js create mode 100644 static/admin/js/vendor/select2/i18n/hsb.js create mode 100644 static/admin/js/vendor/select2/i18n/hu.js create mode 100644 static/admin/js/vendor/select2/i18n/hy.js create mode 100644 static/admin/js/vendor/select2/i18n/id.js create mode 100644 static/admin/js/vendor/select2/i18n/is.js create mode 100644 static/admin/js/vendor/select2/i18n/it.js create mode 100644 static/admin/js/vendor/select2/i18n/ja.js create mode 100644 static/admin/js/vendor/select2/i18n/ka.js create mode 100644 static/admin/js/vendor/select2/i18n/km.js create mode 100644 static/admin/js/vendor/select2/i18n/ko.js create mode 100644 static/admin/js/vendor/select2/i18n/lt.js create mode 100644 static/admin/js/vendor/select2/i18n/lv.js create mode 100644 static/admin/js/vendor/select2/i18n/mk.js create mode 100644 static/admin/js/vendor/select2/i18n/ms.js create mode 100644 static/admin/js/vendor/select2/i18n/nb.js create mode 100644 static/admin/js/vendor/select2/i18n/ne.js create mode 100644 static/admin/js/vendor/select2/i18n/nl.js create mode 100644 static/admin/js/vendor/select2/i18n/pl.js create mode 100644 static/admin/js/vendor/select2/i18n/ps.js create mode 100644 static/admin/js/vendor/select2/i18n/pt-BR.js create mode 100644 static/admin/js/vendor/select2/i18n/pt.js create mode 100644 static/admin/js/vendor/select2/i18n/ro.js create mode 100644 static/admin/js/vendor/select2/i18n/ru.js create mode 100644 static/admin/js/vendor/select2/i18n/sk.js create mode 100644 static/admin/js/vendor/select2/i18n/sl.js create mode 100644 static/admin/js/vendor/select2/i18n/sq.js create mode 100644 static/admin/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 static/admin/js/vendor/select2/i18n/sr.js create mode 100644 static/admin/js/vendor/select2/i18n/sv.js create mode 100644 static/admin/js/vendor/select2/i18n/th.js create mode 100644 static/admin/js/vendor/select2/i18n/tk.js create mode 100644 static/admin/js/vendor/select2/i18n/tr.js create mode 100644 static/admin/js/vendor/select2/i18n/uk.js create mode 100644 static/admin/js/vendor/select2/i18n/vi.js create mode 100644 static/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 static/admin/js/vendor/select2/i18n/zh-TW.js create mode 100644 static/admin/js/vendor/select2/select2.full.js create mode 100644 static/admin/js/vendor/select2/select2.full.min.js create mode 100644 static/admin/js/vendor/xregexp/LICENSE.txt create mode 100644 static/admin/js/vendor/xregexp/xregexp.js create mode 100644 static/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 store/__init__.py create mode 100644 store/__pycache__/__init__.cpython-38.pyc create mode 100644 store/__pycache__/admin.cpython-38.pyc create mode 100644 store/__pycache__/urls.cpython-38.pyc create mode 100644 store/__pycache__/views.cpython-38.pyc create mode 100644 store/admin.py create mode 100644 store/apps.py create mode 100644 store/migrations/0001_initial.py create mode 100644 store/migrations/0002_auto_20201123_2227.py create mode 100644 store/migrations/0003_auto_20201124_1352.py create mode 100644 store/migrations/0004_customer.py create mode 100644 store/migrations/0005_order.py create mode 100644 store/migrations/0006_auto_20201207_0102.py create mode 100644 store/migrations/__init__.py create mode 100644 store/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0002_auto_20201123_2003.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0002_auto_20201123_2227.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0003_auto_20201124_1352.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0003_product_category.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0004_auto_20201123_2024.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0004_customer.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0005_auto_20201123_2024.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0005_order.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0006_auto_20201123_2028.cpython-38.pyc create mode 100644 store/migrations/__pycache__/0006_auto_20201207_0102.cpython-38.pyc create mode 100644 store/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 store/models/__init__.py create mode 100644 store/models/__pycache__/__init__.cpython-38.pyc create mode 100644 store/models/__pycache__/category.cpython-38.pyc create mode 100644 store/models/__pycache__/customer.cpython-38.pyc create mode 100644 store/models/__pycache__/orders.cpython-38.pyc create mode 100644 store/models/__pycache__/product.cpython-38.pyc create mode 100644 store/models/category.py create mode 100644 store/models/customer.py create mode 100644 store/models/orders.py create mode 100644 store/models/product.py create mode 100644 store/templatetags/__pycache__/cart.cpython-38.pyc create mode 100644 store/templatetags/cart.py create mode 100644 store/tests.py create mode 100644 store/urls.py create mode 100644 store/views.py create mode 100644 templates/base.html create mode 100644 templates/cart.html create mode 100644 templates/index.html create mode 100644 templates/login.html create mode 100644 templates/signup.html diff --git a/EShop/__init__.py b/EShop/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/EShop/__pycache__/__init__.cpython-38.pyc b/EShop/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82c0d65a32ec0e9337640d24a1fdf6d9669ee372 GIT binary patch literal 119 zcmWIL<>g`kf+tIN$Ajp{AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUSUH>;R{qWrAX oH<8_drh`WIZtQjRSM924 zbj1v>(F?fb3Ao`EcmZ9)6)(U{nGWShvJ;Qf8G>c4cF&&gJ7>?Hv)d^Y@*Mnr`{h^T zT7l#KhzFCu91I@9OMiz3aXN>1Bv`yH=mO7S0nhxv|0w>%4QGe5dIrttStRPYKBv#2 zS(HIpltXhUkLLSXJ&zVp0i8mp(IPs7&VpnfE$IvB9L}Kg%UqvFBD#PsqD$y9y3!X3 zkCtDFeO@o1tNJPQ9=Zm4?=N#mdLrfO4=KQ?~D2(`dB}MZt7>j zmnC@5!FwLv(k}o*ahcOE!uNJ;QNM)l=$B!17o=CvipCXX^ES_M`O46A`mRJVW5nrG zY1j27RU5dT<$;O&p0b(`O^in^Hi5LmE-8%d7G_ zpf`chc6}@n2gq%c5!aF6&jtj{5ewf1>o`AP%%k^9CFJ&~oZ1+B&~xn)c1l24Vy;Je zv@~|Nl+v>SmUaWnk}N`*?%Hr;(Cf1=R@a8Xr%rdnx&CtP-bR08-TUf}OV<2{d-sgJ@66Rz!)b@-(q+j# z*I_>C%1H>rrDLC&OUqgMN7X1e!j64zRX@HE!pBo?C&}ZPll4adA9NHC#V@a8jl^aflt*HSF}+;0XWqN%3i|v_?K25j;F8K_jrSPkP50 zX0fvpP<^J;E{C}i9PUswB|VdNqWScj92;S_WMf3kl0KV!8^z@)YZ!2P8%C7%;Ec3L z*B2ndQO+=8NG$g;b*&dT%6M?TI84tyQZzN*?kKORoaP(Og@tw`xjT)uP26 zZL1pV*Q#YDPN!(DqO_IRtQK8TI_<|sOVPBQ=61z+s?@45*@P@C)Re|nN7+)1awrk7$0>j~$B^)4^u7rfO+&&(+mR zRY^4SX*X8H%*a0DsC=wD-)Y8SORE5}W6FG6^I0Icf^CA2L3%}u& ziC;hhVW&v+q&vO4dw1{bSri4p7=M3ToI(ITY;tI>NiK}n)C3ABbcr9+$& z6WrzwcT10WEylc4`oxETIn-sa=oY~a8SF7kJ3F{TE5v-}6+Po2^xWgS}d%D$llF%Rbg%8`MfjmNb&vendsq zl&n$N_x_4@N;;+@@nP9;m(uc>Jh)rfD9en5^noAO}{Q6syiHneIxOk-_fGulRE|8nfJ*g(}#>)@+z9 zZN;kEt|0eG9FIMNua$M+m|p_hTo+o4FB+I|Ot8|*OARkItU9MvZcXibqO^uVlDZB2;rp@fCF)IL1k u;`>4BW{7S2_x$8=cD6Bh*3!)yq@=nI{kIz<-{G8z>tpIZ>eDB5pFRM3rk`E_ literal 0 HcmV?d00001 diff --git a/EShop/asgi.py b/EShop/asgi.py new file mode 100644 index 0000000..cd69c2c --- /dev/null +++ b/EShop/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for EShop project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'EShop.settings') + +application = get_asgi_application() diff --git a/EShop/settings.py b/EShop/settings.py new file mode 100644 index 0000000..5be3a06 --- /dev/null +++ b/EShop/settings.py @@ -0,0 +1,129 @@ +""" +Django settings for EShop project. + +Generated by 'django-admin startproject' using Django 3.1.3. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.1/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '(7z_ato2j7hcgt912ju5nb7n!x247g73p=+oi2r@k4_k^a11_n' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'store', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'EShop.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR/'templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'EShop.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/3.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.1/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = BASE_DIR/'static' + +STATICFILES_DIRS = [ + BASE_DIR / "staticfiles", +] + +MEDIA_URL = '/media/' +MEDIA_ROOT = BASE_DIR/'media' \ No newline at end of file diff --git a/EShop/urls.py b/EShop/urls.py new file mode 100644 index 0000000..088d42d --- /dev/null +++ b/EShop/urls.py @@ -0,0 +1,12 @@ + +from django.contrib import admin +from django.urls import path,include +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path('admin/', admin.site.urls), + path('',include('store.urls')), +]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + + diff --git a/EShop/wsgi.py b/EShop/wsgi.py new file mode 100644 index 0000000..2007c27 --- /dev/null +++ b/EShop/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for EShop project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'EShop.settings') + +application = get_wsgi_application() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..86e27c8fc91ab1f3762f2c6286ae2afdfb0a97cc GIT binary patch literal 167936 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%0AS9vkfaotlW?dwNUWO&8sSOtDn7bvfb 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 ZeF26WxWS>+af1K=002ovPDHLkV1n46S33Xz literal 0 HcmV?d00001 diff --git a/media/products/2.PNG b/media/products/2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..816dcd985eda82e415adbf8a6d9d08ab173ce2b7 GIT binary patch literal 83521 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

YB=}QBQXGq0_~I(Sg$=bc3?!I^en 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 literal 0 HcmV?d00001 diff --git a/media/products/3.PNG b/media/products/3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6a781a36ccef5ec01fd11f74e68217cbffdbb03a GIT binary patch literal 61325 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

?xfIp1B7P>{c8GTPp1?mZKapjG?vt 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

A@2$=(LY2 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

8xvwS$B+VFQc;>h8c0_$&4R%GylkxSdR zS!H5Vn}^$-Ua_iZ+t%mI8(rU3X|Pxjekr?nX*iO!zx_x553lk4_J?yU z>Z;@URZ*Lpd~B-(WBMY_Bw!_9Au<<`=6tLmq#1)Y=h9il^65{1W^W%nTz|La>w-hk2fT;oB^aM#I8>vCbfmW6Q2k}6w~f%ko%p}P)e z7Qf}`?Be;_sR;{Bn^whPR+4TbZC0Su{K&cHf(j5QjbPF~bq(a4NGpq{_U_Sav2Z)N z@?XgVpwg%Tt5DNOMR($Y?)4pmRV6WV+;3z9je(kb;>hRt+8~xEKJm%JO*h@tKsu{{ z%JciEM?I<-v7~IRU zt_s4BNe4K(Q<;hck`NL`nvSrl#R)yIiUUp>(mm}bT@?W|GnYxGTt+q#JjLD7x-}81Jo44PQ{Pu!@wBgNc~NerzO{UT(bTwQ=dNlSQrUUjijx4k zZR^fq@9xWnOZHw-Cit$l3=Pk(^F6yS9ro_ItX*>onY4gsDi}Otz4*3o$&dfgx{?e; zIio7ps&L5zt4JG_mBsY!Bh{wC%DKccF|Rj62(z{?kP2f82e617M(!e$Lf?#h2B`A% z3%~G7!@vB?O|xrVUx&$djm%I&P6k?6 zdO!eF*Ffrh1Tfzd0*8=UEHCnaR1Ci3o_A=+owTS-;Q}g;tpW3GirSfHmT;fn#=c&4 z)iuNAmt9qWId`8XT~Ma+;)RPUuF6o~rcD7=-ck_(i9z$eBcIxc;*?kZW@W82TA z&44o?q;F-nH z_xE`>%Jc1hl_!-E!7~HIutWENI6(G(d1zya3qZgF#I{E~dCAGeQ+=gOZd+xnZ(h(1 zz*3rP-MY=gRaahH0NyklTf&>REG=y1hOHM}+{WnkmF`RM>slCk44*3W8 zCtn;`eZoXfD%L6?>XIWGJRDusZjS$Yo^FKXQ)T z4@GXJ=iqwS!yYmG(?9)l1L>>->QkQbl*V{%R2nsmP{4pwoG?rghB48wVTgCAiKW3@ z=1kiJsLbDSEgGU#jmCNMlb<~7+_|#=Fx^ks1+aJEI~Nx%8?Dhn*Ma6*nrN43K_oq) z?f3eqo`4>RlP;i7`&>C_5^d*hd334vzCa>C2GwYGUfH*dOl z*mBX1;a=C=r?vg&96PspiTgf4RUs6pnz^hAP{5&?Gcrlpq9`(!mhDyP^t?LYs(kZ|4A@2@f`gc0t!rSpb5zm=q5I!@vo4dNd);6GSSbt%Y zk)w~EUU85-04UPme#|j*n$`tO6ekiH3vkIASroc<-+AOR}uatd-*IQee@SEE1ur9?ZJBWRo6Dh z)A9OS=gqHn>WO6nFKXLiHV0IN+PgGvo9Q$KP~VQ#0E7XP{D_l}4xYX#)V{J!4W3XL z2-`WTvUvv2oTmavW$2y?!gbTs^*!f!IOeUc7=8eIzoK}If$f;1`_ep!JamBe6$q`F z#O#g93y6q}<$MgvnX(w*B5{#lp?~+l2R^s~b$@`=v0vM$FMQ#P+Rx~w-n1zj4e310 zL8;{uA7&v;@g5pAX`A_5KqbWES`=8LQ8`#%^P1NT&wJkUO8EL}ei5pGl6GKHGOx4& zWBR2w_e_MR3v93TqcsCq=R!g*1UhNlPnt&677Iv)-MQ98ZOP}jRxEWe;RZD=`LivT69+6FfiiRX;c?+IWu zp**J?^6p(iq|C}8Z%Eqk6Tk3~Ic>?7EZyS$8Svm)VZi5E-w6-HPw!RMG5>&8Uicbl zReh*kt9ECSA%rw4IY0n94br)#O&2uNSLF_@V{py{B!90_@@d-3`}ct1l83an$GZrZeIc=x;C zJ^aOA{6+ort`+?B5FwMt@u~v=8?!TlB8*TG(g@TTSjf4Bvy#SCw-y$)kvH`&qmz`c z4Wpa-*;Xsy)dWiKL@_CShej4hqb*u^(s0*PPajs4M!jg$hGEO*^~076*A3gYT{!I8 zwY~CQW@EJz&p&U&u&cBxPy#6}$Gl~d>i=ro#bxq%fJ$y6cjRj31Lh^al$Yq8r5^n{4FysL+@hl1gN~e*Ijqr@X1ep za`^kd|N9171G`PWCIG$0?zKE%5(L^5xsEnz!ZIbGc`gD5m_JCoh0=8Dlg9~QwaE*# zLiZ7;3U4t7i+i4JeWXR6Yl8~vd-A8t#QRwg20YjjarKH7!}>Mn4Xc))GhBDCE6XH2 zyUf6K)lOYod^b91Lo*q zO-G}4ux0DYb@zc5YYp=@->ML0C0+$xP8^3`{!vun5t!;YI zgbX-%>jta>P9y13eoiOLpCcSI#i`ULv!+3w0J6)^xC0Y!+uxh^* zCw}>tf4PL>E~S+g)ei?y;3Ft~o+Dw3MnP(R*90rV6@eqnV?k@e3y3AWcP(?4=8suR zzzCh17d34(C6vwq5LnY3@SH9S9!?Gv`H1INyUQ^f+^!SctEMb5bB9{pxi=NH%;*tD4 zk0}szkai80ibr`>O0?m)4IeGr@?OvRm;O!usrM%D zz}i5&q61P{!bcThcrHF#*G5{jGp*Y8!l??OUDvt(cmw$#_jA8Eyz`y!9$x+G|5NWe zqbla3N}JAYz%&R(do|}gy+BG%RP2$h05CE~mQt1g*1d%8$A^-4B%Oc!vp@T|QU?Dr zJAwMQfBUz?&Yio9Nqt5~7=s~UO5y^(Tw}nv=988nm+N(eFGe1-2~cGib!Se<;dr9El>64dint{l!=v2s|s zY}s(e={6PCPVC!U?AmonYujq`rEKy#25Ryq?fCjWi5M@YafIj{=DNon1 zWu8v~J%IHtW$VE0rnY;gvNbEF;=^}oR89|n`2QOI}A8(zy9?GQhCz9`|WRkyJ^|?zyJNi4L95{JmVS97#{J6 zpBk>Y=GtNV_MJ^A2om852$`D!YBYlD2!97DKo;<)M$Yt=_q#9y1V=~*CgHSvDnRyh z0ZatnIn$4ZnFdVXb)p-? zviGnCSOxI`#Je8g;we5`eugh$^XARNPyh5!4=;Mri-r$;;Dha-`FDWeU%urnZ>jH` zQI&Jw#=__$K%HsoMt&kQV>yaUMjmr71d!rr)3HV#168~HcYpWAZB>(53Dg^J{M_)9 zKY8C`-U+SHK&7w>mjXL?ZzfQ~Fz22N6UR)KJ`N?syBD{7#{a&2YTruv2>~nMT7?3L zt?K{9FMg@j)F1oU#|pq79NzfGH`TK@49|Y{Z?w+ri!a{Rz{o30JDE;Ki>n}PNJVP_ z5Md{@FlN?`FjJtO28h+`Qerb5!>t5F!fHoUr z5&2h|FaBMC`sO#kxxIJp+nZhjOJX$o*gh43rp=SElPnln}Y1*kK ziyQxIirYKi`Ofx(1JE#XOw-`KrKQDiQDzfn>Jr_ z^RTW$EA&O%2Y@u9cSRcln2MtV*Vx-WBW2mtH~Ur>XSecL;lgw}Wm17~cJ<+Z-E>wV zXj59%(RWO5W3I1Tw{F<5VZ*Rv$Iju}Yp-o{l^^q%$23sl;|pH!+ryjQ^rqp%AO3LL zTNgNK&s+OvIo|&Ex7WAsQ5E#@O~$$$7_By~QOO!Pi>#5MfR+5@Iw9Ul>zu6Na}x4rFctqn{g{Lvr%(eQ_V_=jy|lu=qwdeW2H2q_x+zW2S~aL;?*Yq;#PD@u#( z9=2?`xZ0o>l%`=~>fg0VlHI`j(lOQzrln|JP8xB#e*nyMHsCZk{hR_8z|myPUOSu9 zR{C{;NTtwB*HvrUEFapC=_WmgP5)Nkdxs+kkmZN-%FLW?+qPBnV0+8+l~-OpJm3Kj z8XoeHhZgW2-kJ|T|MR~vJmVS99G?5!-x_}Fx1Qeyy}asGuPzJajg9cXf&E8jS+J?&y%ra0zW_ije8WWto0R_9#=@x0SN-K|*;Fhy8 zJ20-m(DrsXU-hhz;we+AsRWyr8Q@%l>@&LOs(Bzl0dY~QOCigEcMUD3^>iw)m!Q{A_lJwe*v`2O z5k#W2F7f-b5qU~YaBo@h!g^<^-&^L0`$2irtinO_wBXeT*NVNe|GYr_g6+L^-qAHY zSSsBw;=u`U%Co|C^>gPekqjEuRg2GWbInEmAApX@X3L)WH2T5f?nNl0Yu}1o zuse`rANS38DmUte;TK6Pe}R`EL=4csO|C&;O}=RSliwS`*%iep?CTTu$4K2LaZ9S( z;QEk5=Uxcwi0HNks=cr@dpg~d_utKdhflJn5Ze$eSpe3Bs?ZFU01BEvo@s@&07Uo; zj_6V+W*JZNQj$QE^jFMnrs*!T>cE|6C-X{KMY>>Jw7Vj}gJ}GcJz%YUVl6nE4N8in zD!XMf^s{$9>YY#^C4JnjzE3~xAQLdcD7eT8iCF6nh(__OtTxq6ZjD@7)}MuKz9*?` zF{TIn6p)*rlcMS?`bms99Y_B4x#7D918?@9IR^jE4Wk%uEDBmKB+Pn_kP8)YK&Ma(y(8ESxsk#p@L5PD`{2AbTh1Uwv zVS&{va=w0hdjm#mp3E-l_Lwu}Ah8?o$dg`My|_Bmz(6Qu?)&n;69y#NJ)9--^IEz_HC;q04>9S(!&D= zN8Q=vkujn0$&HeL!hak=fY4wG?f011dc^woR8O0B7XDSf14&!mXK2v&%^B}Z=@AM$ z=Ro1u(>3D>eH#ibUoANv`+6lAyneyoj{M#WX_L~~_MvZMrbThfkJ@{?*y{A>)DQN5 zrnt_`89TwBTxQkMcY`XUkN!oHKltYHx@)sP?1rT5ln&M8JKNOiYDB%nkC0Wi989j; z_PsGWZg(6c7BSkCL9nVmDF<5uOMd9Y!CLu*poJwYtt#qJ61Eq!q|{nzxRvtyR24&M0Oyk@c})8;s#$VkIZm# zS{(%2wI7n^Ir~LIVmO?t4Zuax$mNsflI>ZDi6oJelhGTW9Qv=kIjDp(W$nP6G`9xh z`u(i{IZb|PxFFa<39Rt~aNedxjunTG)4eO=_2TM5_O?VKf~JY2GfX?-?}9qs#vdnb z|12Rs7eC(zVk*x;M?04=TxE~!6P5noszs*+9QkrJ!C$~c?DO$tr9kR4x!N!tz4>tE z%v?ciN{9sk-3Z;%ZYtgDDBUwVP22n5dU|g|>CyCif1KTIC9Ns&7VzLT85L1M~|E0-EEjX@0KP<6PWh$wuE(_h&W z1IY>FwYo8UScU~KRK8OicDsM=eb4CN*gDP=%S@QX#4oa8a}1av`rSqr#fQ^`9oc=8 zZ^q{$9rZe_aNEaHQ3YWpdvEYVqtN&a^dhk>d)}bt@y_t_{@zx%uQJNBwj_x|vKp1c}M&#$}p0iLA{csg4310Y&wv^K)~e>lWLf@xJO z&q_f6S1Ge}4XEDo(;!_=pm!RxzX8L9Zg*4mO1|GapHqJ=<>h-d{^dgf+=%WH)s=Gz zCoL6n_}Y{eRr&1nXz#@FII^Cm=y}jElw#l%3Z!#p9yXONTmZWNoMIDgA!7~Q(^w6FR}pN0$OV#DNl8JFQYEy z@~A9SlyY*0t0EPtC=%~$6*f0@uhGrm-UvEsp;f)P9`FM%iC=uT4OYvWHuGqB3Y^IT z7SGqZ?Kc}$yNz_cgGM|dvFk{g9qm*TyqKAx!C;mLTjaNM>P^5YhGB4p7as#4KI-FU zc17Y0+AioYbx;oWaQ&Rk@nA=(tJ6{Ekpe#S^u)V@2L7>VW`f_&4w2ezO2^^B- z#s7QXe;KBFhWg0rG)!X)Uo*oaeF>t1?E32d6Nr>cv*+{b*>TD7m5^OR<_^c0a4{mC zmvXRAl7u(to#P;Tec`|#n<=#|&4EDEK!8x+T41`W_UfS*0jq9gz{PhD_!fZX98WyLn>1T^o z7w1(Ex_Yjqa8A7JvI5Sp-43|E+JinL96Q{-fd4z&2EE(A>*2Igqax|^cPpA@lpT;N z{a?M*_dz4C0O-rZH=id}9!tWe?f6lyON^&@`{2?|#ap9+MND->>f$Z>!;!i}&)pFt z2o)4yIm_88v+%cgJZ^R%jlVCKXUNAB_@^7ztzv&Qf;>pRuiE-Os;{8ds;@kovr=hy zg23#qe=*DN3|to#TM6R(sro1A#8lyIypP^!h#nXpAP!f2X~L$QZ~S#pok!zkTIDHAvlaPtWyGhv z;1d_7WiCO-zPokIeyszI+>V%N5L6JD8Kuj-77a+G7C99ciT1M$e}w_`$bI4XWATM^ zKDUv#@^SsXhD7TaryDHD%a17`L-v)o&Uus(Dr>mTjQrjcj2z)cxzAk3>n3ok+@N!< zF6YHf*CVM`$E-4Wk&S0gd14{Xk~8hD{{Y47D96j{*bIUIlsX0QwK=+RG91p$*f5sH z_gx$y+@BR?7j<9l&MSjkIg>Tu0{s`t1XfLAg+>_ycd8haq3O@b0D7m|Bp%c%cQlfW z(kDsA&u+^8a!%?`PV-*1E`RsS%O+0&YgL?jT2d}OBoUC7r9@8|9+s&^ME^OiK&g!f z4Sl9yi->|QqU8glRrda5q5+ber>fHrr_Wak^W6+A6a>4Dj&!b8$PxdeLtCr(yH{pH z{en*+sqC2lL4`|(%iS`UM=dv8iS^z!zf||G5$Fs=P z9$lwS;yyEgw17RUDR$USUjoCfe0v2LhGkks!bT7>Wz68ovxXVJX!Pj#1_%F*$qP+r z|K+E6b>ZV=HQ(sq-a+DSOggym;%SOh<)ZS)GwSIoUiH=Znj|2;1#PFTiW#Ra(Del64NqCzp)) z2Kjs=RGVkQ?$$dS2nkTaHFqZnsEhMVI7n?zovU`4A(B*so%)Q+Jv7taS zY(h$-r|9+0J2zONtTm|j^4MO!&bVKvd6c`VmT8TdA9|SoTS=gAdZW{G*N^0)Rms4~ zhNz2fJKaVJ+#7dEJSR5(c>NSV+B?*;7H{!#Ej{)?(XH?mL<{X)@TFQv3sKp29eT zFj@cVX{RPSXOe!rJR7!0F6Gdt3-hA7)hnKsM{)ncr(dHN?TZWDntuyzTg69mld_Vl zwqjbKw4FeK1n!O?tuc}~s4x6wudo+7%M$}B#i2-7uXqurJ=(_IQaEO?hFvKe_?9RI z5Ez>2hVkE?|5|aO1y}uVa!{C=!BW?9@+02iZevVU%xF;BaK*PpVkY@9{6vTA(zPbe zzm&zMpXX*oC$Pu|jX?Q6NiAdh*mm+l25QV>uBWta%@nO% z&V9y>=3i%5P4I4}kntv7!l|}m((;^zRs)pnPX-KB@X|AA4*^mXgae%Dyb5v0Hg_yF z?LMW)nQo-_g0lBFNveO^m~u*W;*)1k}yYHMen%(C=38}&}Xp>b(H=B$d@ zTe)&3Kn5-i)CUL^WF6cKBE{-Qw1hNH?gr1YAh6_CKJM_G6?l3u`;3*6eoUz+?@&7! za`!u!XNiiJE1&w?jZLEKy}#p8Y1K6O+vH16NjV9EZDKoEI8o3}wUvtJ|6e;nU61}> g)%U7k@zV#uFDJfa$QOSZ0C3BH7i`aevVcGOKT>z;1ONa4 literal 0 HcmV?d00001 diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000..8c68ff9 --- /dev/null +++ b/requirement.txt @@ -0,0 +1,5 @@ +asgiref==3.3.1 +Django==3.1.3 +Pillow==8.0.1 +pytz==2020.4 +sqlparse==0.4.1 diff --git a/static/admin/css/autocomplete.css b/static/admin/css/autocomplete.css new file mode 100644 index 0000000..3ef95d1 --- /dev/null +++ b/static/admin/css/autocomplete.css @@ -0,0 +1,260 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: #999; + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: #fff; + border: 1px solid #ccc; + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: #999; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: white; + border: 1px solid #ccc; + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #ccc; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid #999 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + border: 1px solid #ccc; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: #999; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: #ddd; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: #79aec8; + color: white; +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/static/admin/css/base.css b/static/admin/css/base.css new file mode 100644 index 0000000..c428519 --- /dev/null +++ b/static/admin/css/base.css @@ -0,0 +1,966 @@ +/* + DJANGO Admin styles +*/ + +@import url(fonts.css); + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 14px; + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; + color: #333; + background: #fff; +} + +/* LINKS */ + +a:link, a:visited { + color: #447e9b; + text-decoration: none; +} + +a:focus, a:hover { + color: #036; +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: #fff; + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 20px; + color: #666; +} + +h2 { + font-size: 16px; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 14px; + margin: .8em 0 .3em 0; + color: #666; + font-weight: bold; +} + +h4 { + font-size: 12px; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 10px; + margin: 1.5em 0 .5em 0; + color: #666; + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 13px; + line-height: 20px; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid #eee; +} + +blockquote { + font-size: 11px; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; + color: #666; + font-size: 12px; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: #eee; + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: #eee; + background-color: #eee; + height: 1px; + border: none; + margin: 0; + padding: 0; + font-size: 1px; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 11px; +} + +.mini { + font-size: 10px; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 11px; + color: #999; +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: #999; + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: #ccc; +} + +td, th { + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #eee; + vertical-align: top; + padding: 8px; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: #666; + padding: 5px 10px; + font-size: 11px; + background: #fff; + border: none; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +tfoot td { + border-bottom: none; + border-top: 1px solid #eee; +} + +thead th.required { + color: #000; +} + +tr.alt { + background: #f6f6f6; +} + +tr:nth-child(odd), .row-form-errors { + background: #fff; +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: #f9f9f9; +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: #f6f6f6; +} + +thead th a:link, thead th a:visited { + color: #666; +} + +thead th.sorted { + background: #eee; +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: #eee; +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 18px; + color: #999; +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: #447e9b; +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + font-size: 13px; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: #999; +} + +select { + height: 30px; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: #79aec8; + padding: 10px 15px; + border: none; + border-radius: 4px; + color: #fff; + cursor: pointer; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: #609ab6; +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + float: right; + border: none; + font-weight: 400; + background: #417690; +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: #205067; +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: #fff; +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 13px; + text-align: left; + background: #79aec8; + color: #fff; +} + +.module caption, +.inline-group h2 { + font-size: 12px; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 13px; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: #333; +} + +ul.messagelist li.warning { + background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 14px; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: #ba2121; + border: 1px solid #ba2121; + border-radius: 4px; + background-color: #fff; + background-position: 5px 12px; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: #ba2121; + background: #fff; +} + +ul.errorlist li { + font-size: 13px; + display: block; + margin-bottom: 4px; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid #eee; + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid #ba2121; +} + +.description { + font-size: 12px; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: #79aec8; + padding: 10px 40px; + border: none; + font-size: 14px; + color: #c4dce8; + text-align: left; +} + +div.breadcrumbs a { + color: #fff; +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: #c4dce8; +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 10px; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.form-row .object-tools { + margin-top: 5px; + margin-bottom: 5px; + float: none; + height: 2em; + padding-left: 3.5em; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 16px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: #999; + font-weight: 400; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #fff; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: #417690; +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink, .object-tools a.golink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +table#change-history { + width: 100%; +} + +table#change-history tbody th { + width: 16em; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: #417690; + color: #ffc; + overflow: hidden; +} + +#header a:link, #header a:visited { + color: #fff; +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + float: left; +} + +#branding h1 { + padding: 0; + margin: 0 20px 0 0; + font-weight: 300; + font-size: 24px; + color: #f5dd5d; +} + +#branding h1, #branding h1 a:link, #branding h1 a:visited { + color: #f5dd5d; +} + +#branding h2 { + padding: 0 10px; + font-size: 14px; + margin: -8px 0 8px 0; + font-weight: normal; + color: #ffc; +} + +#branding a:hover { + text-decoration: none; +} + +#user-tools { + float: right; + padding: 0; + margin: 0 0 0 20px; + font-weight: 300; + font-size: 11px; + letter-spacing: 0.5px; + text-transform: uppercase; + text-align: right; +} + +#user-tools a { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover { + text-decoration: none; + border-bottom-color: #79aec8; + color: #79aec8; +} + +/* SIDEBAR */ + +#content-related { + background: #f8f8f8; +} + +#content-related .module { + background: none; +} + +#content-related h3 { + font-size: 14px; + color: #666; + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 13px; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid #eaeaea; + font-size: 18px; + color: #333; +} + +.delete-confirmation form input[type="submit"] { + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + color: #fff; +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: #a41515; +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 15px; + line-height: 15px; + background: #ddd; + border-radius: 4px; + padding: 10px 15px; + color: #333; + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: #ccc; +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} diff --git a/static/admin/css/changelists.css b/static/admin/css/changelists.css new file mode 100644 index 0000000..7b8b9c7 --- /dev/null +++ b/static/admin/css/changelists.css @@ -0,0 +1,354 @@ +/* CHANGELISTS */ + +#changelist { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +#changelist .changelist-form-container { + flex: 1 1 auto; + min-width: 0; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid #ddd; +} + +#changelist .paginator { + color: #666; + border-bottom: 1px solid #eee; + background: #fff; + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: #666; +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; + background: #f8f8f8; + color: #666; +} + +#toolbar form input { + border-radius: 4px; + font-size: 14px; + padding: 5px; + color: #333; +} + +#toolbar #searchbar { + height: 19px; + border: 1px solid #ccc; + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 13px; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: #999; +} + +#toolbar form input[type="submit"] { + border: 1px solid #ccc; + font-size: 13px; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: #333; +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: #999; +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +/* FILTER COLUMN */ + +#changelist-filter { + order: 1; + width: 240px; + background: #f8f8f8; + border-left: none; + margin: 0 0 0 30px; +} + +#changelist-filter h2 { + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3 { + font-weight: 400; + font-size: 14px; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid #eaeaea; +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: #999; + text-overflow: ellipsis; + overflow-x: hidden; +} + +#changelist-filter li.selected { + border-left: 5px solid #eaeaea; + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: #5b80b2; +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: #036; +} + +#changelist-filter #changelist-filter-clear a { + font-size: 13px; + padding-bottom: 10px; + border-bottom: 1px solid #eaeaea; +} + +/* DATE DRILLDOWN */ + +.change-list ul.toplinks { + display: block; + float: left; + padding: 0; + margin: 0; + width: 100%; +} + +.change-list ul.toplinks li { + padding: 3px 6px; + font-weight: bold; + list-style-type: none; + display: inline-block; +} + +.change-list ul.toplinks .date-back a { + color: #999; +} + +.change-list ul.toplinks .date-back a:focus, +.change-list ul.toplinks .date-back a:hover { + color: #036; +} + +/* PAGINATOR */ + +.paginator { + font-size: 13px; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid #ddd; + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: #79aec8; + text-decoration: none; + color: #fff; +} + +.paginator a.showall { + border: none; + background: none; + color: #5b80b2; +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: #036; +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 13px; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: #036; +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +#changelist table tbody tr.selected { + background-color: #FFFFCC; +} + +#changelist .actions { + padding: 10px; + background: #fff; + border-top: none; + border-bottom: none; + line-height: 24px; + color: #999; + width: 100%; +} + +#changelist .actions.selected { + background: #fffccf; + border-top: 1px solid #fffee8; + border-bottom: 1px solid #edecd6; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 13px; + margin: 0 0.5em; + display: none; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 24px; + background: none; + color: #000; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: #999; +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +#changelist .actions .button { + font-size: 13px; + border: 1px solid #ccc; + border-radius: 4px; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 24px; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: #333; +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: #999; +} diff --git a/static/admin/css/dashboard.css b/static/admin/css/dashboard.css new file mode 100644 index 0000000..91d6efd --- /dev/null +++ b/static/admin/css/dashboard.css @@ -0,0 +1,26 @@ +/* DASHBOARD */ + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/static/admin/css/fonts.css b/static/admin/css/fonts.css new file mode 100644 index 0000000..c837e01 --- /dev/null +++ b/static/admin/css/fonts.css @@ -0,0 +1,20 @@ +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Bold-webfont.woff'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Regular-webfont.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Light-webfont.woff'); + font-weight: 300; + font-style: normal; +} diff --git a/static/admin/css/forms.css b/static/admin/css/forms.css new file mode 100644 index 0000000..89d5748 --- /dev/null +++ b/static/admin/css/forms.css @@ -0,0 +1,527 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 13px; + border-bottom: 1px solid #eee; +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.hidden { + display: none; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: #666; + font-size: 13px; +} + +.required label, label.required { + font-weight: bold; + color: #333; +} + +/* RADIO BUTTONS */ + +form ul.radiolist li { + list-style-type: none; +} + +form ul.radiolist label { + float: none; + display: inline; +} + +form ul.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + float: left; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 26px; +} + +.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 170px; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + clear: left; + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned label + p.help, +form .aligned label + div.help { + margin-left: 0; + padding-left: 0; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +.checkbox-row p.help, +.checkbox-row div.help { + margin-left: 0; + padding-left: 0; +} + +fieldset .fieldBox { + float: left; + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 38px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid #eee; + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: #f8f8f8; + color: #666; +} + +fieldset .collapse-toggle { + color: #fff; +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: #447e9b; +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px; + margin: 0 0 20px; + background: #f8f8f8; + border: 1px solid #eee; + border-radius: 4px; + text-align: right; + overflow: hidden; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 35px; + line-height: 15px; + margin: 0 0 0 5px; +} + +.submit-row input.default { + margin: 0 0 0 8px; + text-transform: uppercase; +} + +.submit-row p { + margin: 0.3em; +} + +.submit-row p.deletelink-box { + float: left; + margin: 0; +} + +.submit-row a.deletelink { + display: block; + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + color: #fff; +} + +.submit-row a.closelink { + display: inline-block; + background: #bbbbbb; + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + color: #fff; +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: #a41515; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: #aaaaaa; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: #666; + padding: 5px; + font-size: 13px; + background: #f8f8f8; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 11px; +} + +.inline-related fieldset { + margin: 0; + background: #fff; + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 11px; + text-align: left; + font-weight: bold; + background: #bcd; + color: #fff; +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 9px; + font-weight: bold; + color: #666; + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: #666; + background: #f8f8f8; + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 12px; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 16px; + height: 16px; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/static/admin/css/login.css b/static/admin/css/login.css new file mode 100644 index 0000000..062b36e --- /dev/null +++ b/static/admin/css/login.css @@ -0,0 +1,79 @@ +/* LOGIN FORM */ + +.login { + background: #f8f8f8; + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 18px; +} + +.login #header h1 a { + color: #fff; +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: #fff; + border: 1px solid #eaeaea; + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login #content-main { + width: 100%; +} + +.login .form-row { + padding: 4px 0; + float: left; + width: 100%; + border-bottom: none; +} + +.login .form-row label { + padding-right: 0.5em; + line-height: 2em; + font-size: 1em; + clear: both; + color: #333; +} + +.login .form-row #id_username, .login .form-row #id_password { + clear: both; + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login span.help { + font-size: 10px; + display: block; +} + +.login .submit-row { + clear: both; + padding: 1em 0 0 9.4em; + margin: 0; + border: none; + background: none; + text-align: left; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/static/admin/css/nav_sidebar.css b/static/admin/css/nav_sidebar.css new file mode 100644 index 0000000..784d087 --- /dev/null +++ b/static/admin/css/nav_sidebar.css @@ -0,0 +1,119 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border-right: 1px solid #eaeaea; + background-color: #ffffff; + cursor: pointer; + font-size: 20px; + color: #447e9b; + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid #eaeaea; + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: #f6f6f6; +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid #eaeaea; + background-color: #ffffff; + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid #eaeaea; + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main.shifted > #nav-sidebar { + left: 24px; + margin-left: 0; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + left: 0; + right: 24px; + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: #ffc; + font-weight: bold; +} + +#nav-sidebar .current-model { + background: #ffc; +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} diff --git a/static/admin/css/responsive.css b/static/admin/css/responsive.css new file mode 100644 index 0000000..ef968c2 --- /dev/null +++ b/static/admin/css/responsive.css @@ -0,0 +1,1004 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 14px; + } + + .small { + font-size: 12px; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 20px 30px 30px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #branding h1 { + margin: 0 0 8px; + font-size: 20px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 13px; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 22px; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 22px; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions.selected { + border: none; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: #fff; + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 11px; + margin: 0 10px 0 0; + } + + #changelist-filter { + width: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: #eee; + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 14px; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 36px; + font-size: 14px; + } + + .form-row select { + height: 36px; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox { + float: none; + margin: 0 -10px; + padding: 0 10px; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid #eee; + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned ul.radiolist { + margin-left: 2px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + form .form-row p.datetime { + width: 100%; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 13px; + } + + .datetime .timezonewarning { + display: block; + font-size: 11px; + color: #999; + } + + .datetimeshortcuts { + color: #ccc; + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 16px; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + display: flex; + flex-wrap: wrap; + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + margin-left: 0; + font-size: 13px; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 13px; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul { + margin-left: 0; + padding-left: 0; + } + + form .aligned ul.radiolist { + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned ul.radiolist li + li { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 2px solid #eee; + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related + .inline-related { + margin-top: 30px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child { + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid #eee; + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px 10px 0; + margin: 0 0 15px; + display: flex; + flex-direction: column; + } + + .submit-row > * { + width: 100%; + } + + .submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink { + float: none; + margin: 0 0 10px; + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + } + + .submit-row p.deletelink-box { + order: 4; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + display: block; + margin: 0 0 5px; + padding: 0; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br, .login .submit-row label { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 13px; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 12px; + line-height: 12px; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: #fff; + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 13px; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 13px; + word-break: break-word; + } +} diff --git a/static/admin/css/responsive_rtl.css b/static/admin/css/responsive_rtl.css new file mode 100644 index 0000000..66d3c2f --- /dev/null +++ b/static/admin/css/responsive_rtl.css @@ -0,0 +1,80 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions, + [dir="rtl"] #changelist-filter { + margin-left: 0; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul { + margin-right: 0; + } + + [dir="rtl"] #changelist-filter { + margin-left: 0; + margin-right: 0; + } +} diff --git a/static/admin/css/rtl.css b/static/admin/css/rtl.css new file mode 100644 index 0000000..a40aad0 --- /dev/null +++ b/static/admin/css/rtl.css @@ -0,0 +1,249 @@ +body { + direction: rtl; +} + +/* LOGIN */ + +.login .form-row { + float: right; +} + +.login .form-row label { + float: right; + padding-left: 0.5em; + padding-right: 0; + text-align: left; +} + +.login .submit-row { + clear: both; + padding: 1em 9.4em 0 0; +} + +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid #eaeaea; + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; + float: right; +} + +.submit-row { + text-align: left +} + +.submit-row p.deletelink-box { + float: right; +} + +.submit-row input.default { + margin-left: 0; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned p.help, form .aligned div.help { + clear: right; +} + +form .aligned ul { + margin-right: 163px; + margin-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +input[type=submit].default, .submit-row input.default { + float: left; +} + +fieldset .fieldBox { + float: right; + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} diff --git a/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/static/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000..8cb8a2b --- /dev/null +++ b/static/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/static/admin/css/vendor/select2/select2.css b/static/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000..750b320 --- /dev/null +++ b/static/admin/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/static/admin/css/vendor/select2/select2.min.css b/static/admin/css/vendor/select2/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/static/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/static/admin/css/widgets.css b/static/admin/css/widgets.css new file mode 100644 index 0000000..14ef12d --- /dev/null +++ b/static/admin/css/widgets.css @@ -0,0 +1,574 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; +} + +.selector select { + width: 380px; + height: 17.2em; +} + +.selector-available, .selector-chosen { + float: left; + width: 380px; + text-align: center; + margin-bottom: 5px; +} + +.selector-chosen select { + border-top: none; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid #ccc; + border-radius: 4px 4px 0 0; +} + +.selector-chosen h2 { + background: #79aec8; + color: #fff; +} + +.selector .selector-available h2 { + background: #f8f8f8; + color: #666; +} + +.selector .selector-filter { + background: white; + border: 1px solid #ccc; + border-width: 0 1px; + padding: 8px; + color: #999; + font-size: 10px; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; +} + +.selector .selector-available input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + float: left; + width: 22px; + background-color: #eee; + border-radius: 10px; + margin: 10em 5px 0 5px; + padding: 0; +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.3; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: #666; + text-decoration: none; + opacity: 0.3; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: #447e9b; +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -32px; + cursor: pointer; +} + +.stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 0px; + cursor: pointer; +} + +.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 18px; + width: 18px; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 11px; + color: #ccc; +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 11px; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 11px; + color: #999; +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.aligned p.file-upload { + margin-left: 170px; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: #333; + font-size: 11px; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 12px; + width: 19em; + text-align: center; + background: white; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + background: #f5dd5d; + font-weight: 700; + font-size: 12px; + color: #333; +} + +.calendar th { + padding: 8px 5px; + background: #f8f8f8; + border-bottom: 1px solid #ddd; + font-weight: 400; + font-size: 12px; + text-align: center; + color: #666; +} + +.calendar td { + font-weight: 400; + font-size: 12px; + text-align: center; + padding: 0; + border-top: 1px solid #eee; + border-bottom: none; +} + +.calendar td.selected a { + background: #79aec8; + color: #fff; +} + +.calendar td.nonday { + background: #f8f8f8; +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: #444; +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: #79aec8; + color: white; +} + +.calendar td a:active, .timelist a:active { + background: #417690; + color: white; +} + +.calendarnav { + font-size: 10px; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: #999; +} + +.calendar-shortcuts { + background: white; + font-size: 11px; + line-height: 11px; + border-top: 1px solid #eee; + padding: 8px 0; + color: #ccc; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 12px; + background: #eee; + border-top: 1px solid #ddd; + color: #333; +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} diff --git a/static/admin/fonts/LICENSE.txt b/static/admin/fonts/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/static/admin/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/static/admin/fonts/README.txt b/static/admin/fonts/README.txt new file mode 100644 index 0000000..b247bef --- /dev/null +++ b/static/admin/fonts/README.txt @@ -0,0 +1,3 @@ +Roboto webfont source: https://www.google.com/fonts/specimen/Roboto +WOFF files extracted using https://github.com/majodev/google-webfonts-helper +Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/static/admin/fonts/Roboto-Bold-webfont.woff b/static/admin/fonts/Roboto-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e0f56267035c2321ca6b590adcfc0fc93b7dc51 GIT binary patch literal 86184 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 z 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

qKeC=lP*lYeHehI6Q)MS6&+vP#n675bfQ1FhUtH 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 I3*a(Q$S^tF@Bjb+ literal 0 HcmV?d00001 diff --git a/static/admin/fonts/Roboto-Light-webfont.woff b/static/admin/fonts/Roboto-Light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..b9e99185c8300c786fa77a0490fefdd26ab2e99e GIT binary patch literal 85692 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ŐfpB|})B55Bx+ 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

, because it just gets in the way. + from_box.parentNode.removeChild(p); + } else if (p.classList.contains("help")) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); + } + } + + //

or
+ const selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + //
+ const selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + const choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + //
    + const selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + //
    + const selector_chosen = quickElement('div', selector_div); + selector_chosen.className = 'selector-chosen'; + const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); + to_box.className = 'filtered'; + const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.name = from_box.name + '_old'; + + // Set up the JavaScript event handlers for the select box filter interface + const move_selection = function(e, elem, move_func, from, to) { + if (elem.classList.contains('active')) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + from_box.closest('form').addEventListener('submit', function() { + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + if (!is_stacked) { + // In horizontal mode, give the same height to the two boxes. + const j_from_box = document.getElementById(field_id + '_from'); + const j_to_box = document.getElementById(field_id + '_to'); + let height = filter_p.offsetHeight + j_from_box.offsetHeight; + + const j_to_box_style = window.getComputedStyle(j_to_box); + if (j_to_box_style.getPropertyValue('box-sizing') === 'border-box') { + // Add the padding and border to the final height. + height += parseInt(j_to_box_style.getPropertyValue('padding-top'), 10) + + parseInt(j_to_box_style.getPropertyValue('padding-bottom'), 10) + + parseInt(j_to_box_style.getPropertyValue('border-top-width'), 10) + + parseInt(j_to_box_style.getPropertyValue('border-bottom-width'), 10); + } + + j_to_box.style.height = height + 'px'; + } + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + // Temporarily add the required attribute and check validity. + field.required = true; + const any_selected = field.checkValidity(); + field.required = false; + return any_selected; + }, + refresh_icons: function(field_id) { + const from = document.getElementById(field_id + '_from'); + const to = document.getElementById(field_id + '_to'); + // Active if at least one item is selected + document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from)); + document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to)); + // Active if the corresponding box isn't empty + document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); + document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); + }, + filter_key_press: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + from.selectedIndex = 0; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = 0; + event.preventDefault(); + } + }, + filter_key_up: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + const temp = from.selectedIndex; + SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); + from.selectedIndex = temp; + }, + filter_key_down: function(event, field_id) { + const from = document.getElementById(field_id + '_from'); + // right arrow -- move across + if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { + const old_index = from.selectedIndex; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; + return; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; + } + } + }; + + window.addEventListener('load', function(e) { + document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { + const data = el.dataset; + SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); + }); + }); +} diff --git a/static/admin/js/actions.js b/static/admin/js/actions.js new file mode 100644 index 0000000..dae6992 --- /dev/null +++ b/static/admin/js/actions.js @@ -0,0 +1,154 @@ +/*global gettext, interpolate, ngettext*/ +'use strict'; +{ + const $ = django.jQuery; + let lastChecked; + + $.fn.actions = function(opts) { + const options = $.extend({}, $.fn.actions.defaults, opts); + const actionCheckboxes = $(this); + let list_editable_changed = false; + const showQuestion = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).show(); + $(options.allContainer).hide(); + }, + showClear = function() { + $(options.acrossClears).show(); + $(options.acrossQuestions).hide(); + $(options.actionContainer).toggleClass(options.selectedClass); + $(options.allContainer).show(); + $(options.counterContainer).hide(); + }, + reset = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).hide(); + $(options.allContainer).hide(); + $(options.counterContainer).show(); + }, + clearAcross = function() { + reset(); + $(options.acrossInput).val(0); + $(options.actionContainer).removeClass(options.selectedClass); + }, + checker = function(checked) { + if (checked) { + showQuestion(); + } else { + reset(); + } + $(actionCheckboxes).prop("checked", checked) + .parent().parent().toggleClass(options.selectedClass, checked); + }, + updateCounter = function() { + const sel = $(actionCheckboxes).filter(":checked").length; + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + const actions_icnt = $('.action-counter').data('actionsIcnt'); + $(options.counterContainer).html(interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true)); + $(options.allToggle).prop("checked", function() { + let value; + if (sel === actionCheckboxes.length) { + value = true; + showQuestion(); + } else { + value = false; + clearAcross(); + } + return value; + }); + }; + // Show counter by default + $(options.counterContainer).show(); + // Check state of checkboxes and reinit state if needed + $(this).filter(":checked").each(function(i) { + $(this).parent().parent().toggleClass(options.selectedClass); + updateCounter(); + if ($(options.acrossInput).val() === 1) { + showClear(); + } + }); + $(options.allToggle).show().on('click', function() { + checker($(this).prop("checked")); + updateCounter(); + }); + $("a", options.acrossQuestions).on('click', function(event) { + event.preventDefault(); + $(options.acrossInput).val(1); + showClear(); + }); + $("a", options.acrossClears).on('click', function(event) { + event.preventDefault(); + $(options.allToggle).prop("checked", false); + clearAcross(); + checker(0); + updateCounter(); + }); + lastChecked = null; + $(actionCheckboxes).on('click', function(event) { + if (!event) { event = window.event; } + const target = event.target ? event.target : event.srcElement; + if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { + let inrange = false; + $(lastChecked).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + $(actionCheckboxes).each(function() { + if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { + inrange = (inrange) ? false : true; + } + if (inrange) { + $(this).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + } + }); + } + $(target).parent().parent().toggleClass(options.selectedClass, target.checked); + lastChecked = target; + updateCounter(); + }); + $('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() { + list_editable_changed = true; + }); + $('form#changelist-form button[name="index"]').on('click', function(event) { + if (list_editable_changed) { + return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + } + }); + $('form#changelist-form input[name="_save"]').on('click', function(event) { + let action_changed = false; + $('select option:selected', options.actionContainer).each(function() { + if ($(this).val()) { + action_changed = true; + } + }); + if (action_changed) { + if (list_editable_changed) { + return confirm(gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")); + } else { + return confirm(gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button.")); + } + } + }); + }; + /* Setup plugin defaults */ + $.fn.actions.defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggle: "#action-toggle", + selectedClass: "selected" + }; + $(document).ready(function() { + const $actionsEls = $('tr input.action-select'); + if ($actionsEls.length > 0) { + $actionsEls.actions(); + } + }); +} diff --git a/static/admin/js/actions.min.js b/static/admin/js/actions.min.js new file mode 100644 index 0000000..29fd0d8 --- /dev/null +++ b/static/admin/js/actions.min.js @@ -0,0 +1,7 @@ +'use strict';{const a=django.jQuery;let e;a.fn.actions=function(g){const b=a.extend({},a.fn.actions.defaults,g),f=a(this);let k=!1;const l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()}, +p=function(){n();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(f).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){const c=a(f).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){let a;c===f.length?(a=!0,l()):(a=!1,p());return a})}; +a(b.counterContainer).show();a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});e=null;a(f).on("click",function(c){c||(c=window.event); +const d=c.target?c.target:c.srcElement;if(e&&a.data(e)!==a.data(d)&&!0===c.shiftKey){let c=!1;a(e).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(f).each(function(){if(a.data(this)===a.data(e)||a.data(this)===a.data(d))c=c?!1:!0;c&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);e=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input", +function(){k=!0});a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){let d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.")): +confirm(gettext("You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){const g= +a("tr input.action-select");0 +// +'use strict'; +{ + const DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar
    that gets toggled + calendarDivName2: 'calendarin', // name of
    that contains calendar + calendarLinkName: 'calendarlink', // name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock
    that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + const body = document.getElementsByTagName('body')[0]; + const serverOffset = body.dataset.adminUtcOffset; + if (serverOffset) { + const localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + for (const inp of document.getElementsByTagName('input')) { + if (inp.type === 'text' && inp.classList.contains('vTimeField')) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.type === 'text' && inp.classList.contains('vDateField')) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + const body = document.getElementsByTagName('body')[0]; + const serverOffset = body.dataset.adminUtcOffset; + if (serverOffset) { + const localNow = new Date(); + const localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + const warningClass = DateTimeShortcuts.timezoneWarningClass; + let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + return; + } + + let message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + const warning = document.createElement('span'); + warning.className = warningClass; + warning.textContent = message; + inp.parentNode.appendChild(document.createElement('br')); + inp.parentNode.appendChild(warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + const num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const now_link = document.createElement('a'); + now_link.href = "#"; + now_link.textContent = gettext('Now'); + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + const clock_link = document.createElement('a'); + clock_link.href = '#'; + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + // + + const clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.id = DateTimeShortcuts.clockDivName + num; + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + const time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the . + const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + const cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + let d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + const num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const today_link = document.createElement('a'); + today_link.href = '#'; + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + const cal_link = document.createElement('a'); + cal_link.href = '#'; + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + //
    + //

    + // + // February 2003 + //

    + //
    + // + //
    + //
    + // Yesterday | Today | Tomorrow + //
    + //

    Cancel

    + //
    + const cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.id = DateTimeShortcuts.calendarDivName1 + num; + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + const cal_nav = quickElement('div', cal_box); + const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + const shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + const cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + const inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + const selected = inp.value.strptime(format); + const year = selected.getUTCFullYear(); + const month = selected.getUTCMonth() + 1; + const re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + let format = get_format('DATE_INPUT_FORMATS')[0]; + // the format needs to be escaped a little + format = format.replace('\\', '\\\\') + .replace('\r', '\\r') + .replace('\n', '\\n') + .replace('\t', '\\t') + .replace("'", "\\'"); + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + const d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +} diff --git a/static/admin/js/admin/RelatedObjectLookups.js b/static/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..8c95df7 --- /dev/null +++ b/static/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,159 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. +'use strict'; +{ + const $ = django.jQuery; + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + const name = triggeringLink.id.replace(name_regexp, ''); + let href = triggeringLink.href; + if (add_popup) { + if (href.indexOf('?') === -1) { + href += '?_popup=1'; + } else { + href += '&_popup=1'; + } + } + const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + const name = win.name; + const elem = document.getElementById(name); + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + const $this = $(triggeringLink); + const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + const value = $this.val(); + if (value) { + siblings.each(function() { + const elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + const name = win.name; + const elem = document.getElementById(name); + if (elem) { + const elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + } else if (elemName === 'INPUT') { + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + const toId = name + "_to"; + const o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + const id = win.name.replace(/^edit_/, ''); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + const id = win.name.replace(/^delete_/, ''); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + win.close(); + } + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + $(document).ready(function() { + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link', function(e) { + e.preventDefault(); + if (this.href) { + const event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + const event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + const event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); +} diff --git a/static/admin/js/autocomplete.js b/static/admin/js/autocomplete.js new file mode 100644 index 0000000..c922b30 --- /dev/null +++ b/static/admin/js/autocomplete.js @@ -0,0 +1,38 @@ +'use strict'; +{ + const $ = django.jQuery; + const init = function($element, options) { + const settings = $.extend({ + ajax: { + data: function(params) { + return { + term: params.term, + page: params.page + }; + } + } + }, options); + $element.select2(settings); + }; + + $.fn.djangoAdminSelect2 = function(options) { + const settings = $.extend({}, options); + $.each(this, function(i, element) { + const $element = $(element); + init($element, settings); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + $(document).on('formset:added', (function() { + return function(event, $newFormset) { + return $newFormset.find('.admin-autocomplete').djangoAdminSelect2(); + }; + })(this)); +} diff --git a/static/admin/js/calendar.js b/static/admin/js/calendar.js new file mode 100644 index 0000000..64598bb --- /dev/null +++ b/static/admin/js/calendar.js @@ -0,0 +1,207 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ +'use strict'; +{ + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + const CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + daysOfWeek: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + let days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + const today = new Date(); + const todayDay = today.getDate(); + const todayMonth = today.getMonth() + 1; + const todayYear = today.getFullYear(); + let todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + let isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + const calDiv = document.getElementById(div_id); + removeChildren(calDiv); + const calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + const tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + let tableRow = quickElement('tr', tableBody); + for (let i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + const days = CalendarNamespace.getDaysInMonth(month, year); + + let nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (let i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + let currentDay = 1; + for (let i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + const cell = quickElement('td', tableRow, '', 'class', todayClass); + const link = quickElement('a', cell, currentDay, 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +} diff --git a/static/admin/js/cancel.js b/static/admin/js/cancel.js new file mode 100644 index 0000000..cfe06c2 --- /dev/null +++ b/static/admin/js/cancel.js @@ -0,0 +1,28 @@ +'use strict'; +{ + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + function handleClick(event) { + event.preventDefault(); + if (window.location.search.indexOf('&_popup=1') === -1) { + window.history.back(); // Go back if not a popup. + } else { + window.close(); // Otherwise, close the popup. + } + } + + document.querySelectorAll('.cancel-link').forEach(function(el) { + el.addEventListener('click', handleClick); + }); + }); +} diff --git a/static/admin/js/change_form.js b/static/admin/js/change_form.js new file mode 100644 index 0000000..96a4c62 --- /dev/null +++ b/static/admin/js/change_form.js @@ -0,0 +1,16 @@ +'use strict'; +{ + const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + const form = document.getElementById(modelName + '_form'); + for (const element of form.elements) { + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } + } + } +} diff --git a/static/admin/js/collapse.js b/static/admin/js/collapse.js new file mode 100644 index 0000000..c6c7b0f --- /dev/null +++ b/static/admin/js/collapse.js @@ -0,0 +1,43 @@ +/*global gettext*/ +'use strict'; +{ + window.addEventListener('load', function() { + // Add anchor tag for Show/Hide link + const fieldsets = document.querySelectorAll('fieldset.collapse'); + for (const [i, elem] of fieldsets.entries()) { + // Don't hide if fields in this fieldset have errors + if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) { + elem.classList.add('collapsed'); + const h2 = elem.querySelector('h2'); + const link = document.createElement('a'); + link.id = 'fieldsetcollapser' + i; + link.className = 'collapse-toggle'; + link.href = '#'; + link.textContent = gettext('Show'); + h2.appendChild(document.createTextNode(' (')); + h2.appendChild(link); + h2.appendChild(document.createTextNode(')')); + } + } + // Add toggle to hide/show anchor tag + const toggleFunc = function(ev) { + if (ev.target.matches('.collapse-toggle')) { + ev.preventDefault(); + ev.stopPropagation(); + const fieldset = ev.target.closest('fieldset'); + if (fieldset.classList.contains('collapsed')) { + // Show + ev.target.textContent = gettext('Hide'); + fieldset.classList.remove('collapsed'); + } else { + // Hide + ev.target.textContent = gettext('Show'); + fieldset.classList.add('collapsed'); + } + } + }; + document.querySelectorAll('fieldset.module').forEach(function(el) { + el.addEventListener('click', toggleFunc); + }); + }); +} diff --git a/static/admin/js/collapse.min.js b/static/admin/js/collapse.min.js new file mode 100644 index 0000000..06201c5 --- /dev/null +++ b/static/admin/js/collapse.min.js @@ -0,0 +1,2 @@ +'use strict';window.addEventListener("load",function(){var c=document.querySelectorAll("fieldset.collapse");for(const [a,b]of c.entries())if(0===b.querySelectorAll("div.errors, ul.errorlist").length){b.classList.add("collapsed");c=b.querySelector("h2");const d=document.createElement("a");d.id="fieldsetcollapser"+a;d.className="collapse-toggle";d.href="#";d.textContent=gettext("Show");c.appendChild(document.createTextNode(" ("));c.appendChild(d);c.appendChild(document.createTextNode(")"))}const e= +function(a){if(a.target.matches(".collapse-toggle")){a.preventDefault();a.stopPropagation();const b=a.target.closest("fieldset");b.classList.contains("collapsed")?(a.target.textContent=gettext("Hide"),b.classList.remove("collapsed")):(a.target.textContent=gettext("Show"),b.classList.add("collapsed"))}};document.querySelectorAll("fieldset.module").forEach(function(a){a.addEventListener("click",e)})}); diff --git a/static/admin/js/core.js b/static/admin/js/core.js new file mode 100644 index 0000000..8ef27b3 --- /dev/null +++ b/static/admin/js/core.js @@ -0,0 +1,163 @@ +// Core javascript helper functions +'use strict'; + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + const obj = document.createElement(arguments[0]); + if (arguments[2]) { + const textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + const len = arguments.length; + for (let i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + let curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - obj.scrollLeft; + obj = obj.offsetParent; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + let curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - obj.scrollTop; + obj = obj.offsetParent; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +{ + Date.prototype.getTwelveHours = function() { + return this.getHours() % 12 || 12; + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + const fields = { + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + let result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result = result + fields[format.charAt(i + 1)]; + ++i; + } + else { + result = result + format.charAt(i); + } + ++i; + } + return result; + }; + + // ---------------------------------------------------------------------------- + // String object extensions + // ---------------------------------------------------------------------------- + String.prototype.strptime = function(format) { + const split_format = format.split(/[.\-/]/); + const date = this.split(/[.\-/]/); + let i = 0; + let day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + // A %y value in the range of [00, 68] is in the current + // century, while [69, 99] is in the previous century, + // according to the Open Group Specification. + if (parseInt(date[i], 10) >= 69) { + year = date[i]; + } else { + year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; + } + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; +} diff --git a/static/admin/js/inlines.js b/static/admin/js/inlines.js new file mode 100644 index 0000000..82ec027 --- /dev/null +++ b/static/admin/js/inlines.js @@ -0,0 +1,348 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +'use strict'; +{ + const $ = django.jQuery; + $.fn.formset = function(opts) { + const options = $.extend({}, $.fn.formset.defaults, opts); + const $this = $(this); + const $parent = $this.parent(); + const updateElementIndex = function(el, prefix, ndx) { + const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + const replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + let nextIndex = parseInt(totalForms.val(), 10); + const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); + let addButton; + + /** + * The "Add another MyModel" button below the inline forms. + */ + const addInlineAddButton = function() { + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + const numCols = $this.eq(-1).children().length; + $parent.append('' + options.addText + ""); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', addInlineClickHandler); + }; + + const addInlineClickHandler = function(e) { + e.preventDefault(); + const template = $("#" + options.prefix + "-empty"); + const row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + addInlineDeleteButton(row); + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited. + row.insertBefore($(template)); + // Update number of total forms. + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide the add button if there's a limit and it's been reached. + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // Show the remove buttons if there are more than min_num. + toggleDeleteButtonVisibility(row.closest('.inline-group')); + + // Pass the new form to the post-add callback, if provided. + if (options.added) { + options.added(row); + } + $(document).trigger('formset:added', [row, options.prefix]); + }; + + /** + * The "X" button that is part of every unsaved inline. + * (When saved, it is replaced with a "Delete" checkbox.) + */ + const addInlineDeleteButton = function(row) { + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an
  • after the last list item: + row.append('
  • ' + options.deleteText + "
  • "); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('' + options.deleteText + ""); + } + // Add delete handler for each row. + row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); + }; + + const inlineDeleteHandler = function(e1) { + e1.preventDefault(); + const deleteButton = $(e1.target); + const row = deleteButton.closest('.' + options.formCssClass); + const inlineGroup = row.closest('.inline-group'); + // Remove the parent form containing this button, + // and also remove the relevant row with non-field errors: + const prevRow = row.prev(); + if (prevRow.length && prevRow.hasClass('row-form-errors')) { + prevRow.remove(); + } + row.remove(); + nextIndex -= 1; + // Pass the deleted form to the post-delete callback, if provided. + if (options.removed) { + options.removed(row); + } + $(document).trigger('formset:removed', [row, options.prefix]); + // Update the TOTAL_FORMS form count. + const forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once below maximum number. + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Hide the remove buttons if at min_num. + toggleDeleteButtonVisibility(inlineGroup); + // Also, update names and ids for all remaining form controls so + // they remain in sequence: + let i, formCount; + const updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }; + + const toggleDeleteButtonVisibility = function(inlineGroup) { + if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { + inlineGroup.find('.inline-deletelink').hide(); + } else { + inlineGroup.find('.inline-deletelink').show(); + } + }; + + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + + // Create the delete buttons for all unsaved inlines: + $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { + addInlineDeleteButton($(this)); + }); + toggleDeleteButtonVisibility($this); + + // Create the add button, initially hidden. + addButton = options.addButton; + addInlineAddButton(); + + // Show the add button if allowed to add more items. + // Note that max_num = None translates to a blank string. + const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + if ($this.length && showAddButton) { + addButton.parent().show(); + } else { + addButton.parent().hide(); + } + + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + const $rows = $(this); + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + const namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $('.selectfilterstacked').each(function(index, value) { + const namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + const $rows = $(this); + const updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + const count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + const namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $(".selectfilterstacked").each(function(index, value) { + const namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + const data = $(this).data(), + inlineOptions = data.inlineFormset; + let selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +} diff --git a/static/admin/js/inlines.min.js b/static/admin/js/inlines.min.js new file mode 100644 index 0000000..fc6dddc --- /dev/null +++ b/static/admin/js/inlines.min.js @@ -0,0 +1,11 @@ +'use strict';{const b=django.jQuery;b.fn.formset=function(c){const a=b.extend({},b.fn.formset.defaults,c),e=b(this),l=e.parent(),m=function(a,d,h){const g=new RegExp("("+d+"-(\\d+|__prefix__))");d=d+"-"+h;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(g,d));a.id&&(a.id=a.id.replace(g,d));a.name&&(a.name=a.name.replace(g,d))},f=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off");let n=parseInt(f.val(),10);const h=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),q= +b("#id_"+a.prefix+"-MIN_NUM_FORMS").prop("autocomplete","off");let k;const t=function(g){g.preventDefault();g=b("#"+a.prefix+"-empty");const d=g.clone(!0);d.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+n);r(d);d.find("*").each(function(){m(this,a.prefix,f.val())});d.insertBefore(b(g));b(f).val(parseInt(f.val(),10)+1);n+=1;""!==h.val()&&0>=h.val()-f.val()&&k.parent().hide();p(d.closest(".inline-group"));a.added&&a.added(d);b(document).trigger("formset:added",[d,a.prefix])}, +r=function(b){b.is("tr")?b.children(":last").append('"):b.is("ul")||b.is("ol")?b.append('
  • '+a.deleteText+"
  • "):b.children(":first").append(''+a.deleteText+"");b.find("a."+a.deleteCssClass).on("click",u.bind(this))},u=function(g){g.preventDefault();var d=b(g.target).closest("."+a.formCssClass);g=d.closest(".inline-group"); +var f=d.prev();f.length&&f.hasClass("row-form-errors")&&f.remove();d.remove();--n;a.removed&&a.removed(d);b(document).trigger("formset:removed",[d,a.prefix]);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(""===h.val()||0'+a.addText+"");k=l.find("tr:last a")}else e.filter(":last").after('"), +k=e.filter(":last").next().find("a");k.on("click",t)})();c=""===h.val()||0 tr.form-row",b(c).tabularFormset(c,a.options)}})})}; diff --git a/static/admin/js/jquery.init.js b/static/admin/js/jquery.init.js new file mode 100644 index 0000000..f40b27f --- /dev/null +++ b/static/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global jQuery:false*/ +'use strict'; +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/static/admin/js/nav_sidebar.js b/static/admin/js/nav_sidebar.js new file mode 100644 index 0000000..efaa721 --- /dev/null +++ b/static/admin/js/nav_sidebar.js @@ -0,0 +1,39 @@ +'use strict'; +{ + const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); + if (toggleNavSidebar !== null) { + const navLinks = document.querySelectorAll('#nav-sidebar a'); + function disableNavLinkTabbing() { + for (const navLink of navLinks) { + navLink.tabIndex = -1; + } + } + function enableNavLinkTabbing() { + for (const navLink of navLinks) { + navLink.tabIndex = 0; + } + } + + const main = document.getElementById('main'); + let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); + if (navSidebarIsOpen === null) { + navSidebarIsOpen = 'true'; + } + if (navSidebarIsOpen === 'false') { + disableNavLinkTabbing(); + } + main.classList.toggle('shifted', navSidebarIsOpen === 'true'); + + toggleNavSidebar.addEventListener('click', function() { + if (navSidebarIsOpen === 'true') { + navSidebarIsOpen = 'false'; + disableNavLinkTabbing(); + } else { + navSidebarIsOpen = 'true'; + enableNavLinkTabbing(); + } + localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); + main.classList.toggle('shifted'); + }); + } +} diff --git a/static/admin/js/popup_response.js b/static/admin/js/popup_response.js new file mode 100644 index 0000000..2b1d3dd --- /dev/null +++ b/static/admin/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +'use strict'; +{ + const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +} diff --git a/static/admin/js/prepopulate.js b/static/admin/js/prepopulate.js new file mode 100644 index 0000000..89e95ab --- /dev/null +++ b/static/admin/js/prepopulate.js @@ -0,0 +1,43 @@ +/*global URLify*/ +'use strict'; +{ + const $ = django.jQuery; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + const prepopulatedField = $(this); + + const populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + const values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +} diff --git a/static/admin/js/prepopulate.min.js b/static/admin/js/prepopulate.min.js new file mode 100644 index 0000000..11ead49 --- /dev/null +++ b/static/admin/js/prepopulate.min.js @@ -0,0 +1 @@ +'use strict';{const b=django.jQuery;b.fn.prepopulate=function(d,f,g){return this.each(function(){const a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);0 elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + \ No newline at end of file diff --git a/templates/cart.html b/templates/cart.html new file mode 100644 index 0000000..919bb7f --- /dev/null +++ b/templates/cart.html @@ -0,0 +1,85 @@ +{% extends 'base.html' %} +{% load cart %} +{% block content %} +
    + +
    +

    Cart List

    + + + + + + + + + + + + + + + {% for product in products %} + + + + + + + + + + {% endfor %} + + + + + + + + + +
    Sno.ImageNameCategoryPriceQuantityTotal Price
    {{ forloop.counter }}{{ product.name}}{{ product.category}}{{ product.price|currency }}{{ product|cart_quantity:request.session.cart}}{{ product|price_total:request.session.cart|currency }}
    Total= {{ products|total_cart_price:request.session.cart|currency }}
    + +
    + Check Out +
    + +
    + +
    + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..3bfad3b --- /dev/null +++ b/templates/index.html @@ -0,0 +1,63 @@ +{% extends 'base.html' %} +{% block content %} +{% load cart %} + +
    +
    + +
    +
    + All + {% for category in categorys %} + {{ category.name }} + {% endfor %} +
    +
    + + +
    +
    + {% for product in products %} +
    +
    + +
    +

    {{product.name}}

    +

    {{product.price|currency}}

    +
    + +
    +
    + {% endfor %} +
    +
    +
    +
    + +{% endblock %} diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..4dc4274 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,28 @@ +{% extends 'base.html' %} + +{% block content %} +
    +
    +

    Login

    + {% if error %} + {{error}} + {% endif %} +
    + {% csrf_token %} + +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/signup.html b/templates/signup.html new file mode 100644 index 0000000..de9507b --- /dev/null +++ b/templates/signup.html @@ -0,0 +1,54 @@ +{% extends 'base.html' %} + +{% block content %} +
    +
    +

    Create account

    + {% if error %} + {{error.register}} + {% endif %} +
    + {% csrf_token %} +
    + + + {% if error %} + {{error.fname}} + {% endif %} +
    +
    + + + {% if error %} + {{error.lname}} + {% endif %} +
    +
    + + + {% if error %} + {{error.phone}} + {% endif %} +
    +
    + + + {% if error %} + {{error.email}} + {% endif %} +
    +
    + + + {% if error %} + {{error.password}} + {% endif %} +
    +
    + +
    +
    +
    +
    + +{% endblock %} \ No newline at end of file

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 literal 0 HcmV?d00001 diff --git a/static/admin/fonts/Roboto-Regular-webfont.woff b/static/admin/fonts/Roboto-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..96c1986f01459bc3b7ca8e18fc06785e5e35dc45 GIT binary patch literal 85876 zcmce-WmsHGvoJcrg9dj9?(QC3gS)#A?i$=(Cs=TI7#xBG3-0dj?sD1tJ?Gr-Ip1^t z-kGU2t81#KyQ{0KYgKi*D@aHHJ^=uLPYNyow2yCy?97kyKbZgPB`GE@@j;mU0nQ(U z#tkAhfs%>}DgXc^8~{LX3IOPhyyKzGORA`e002z3004py0Du{P9Jr&Upu)ro0Pr4s z{HgK>7^Vf*mY4vI8~^}5egNR}cK`rQ;*+~3k%^njR{%gP`h!OGAD}CN%`$he0Dj;$ zKHBB@fOhu>!*UBF=a0G)I3F~K{{kEU-NM$>`~yc00Gy8kJ{{Upwj$hEngTsOs@;6l zO9cR+an!sFy)4a)OaY&`{%M2rA9%5z^0NFue&G5(%3nW#9KIF4$`a`EQI~560DzAJ z05G_#oZ`}K?M*)DL|i`lJoJGl`r-cG1~l?;0DO}B_Fr|s!U{ruwle~nec%i~_yh|8 zKvC`$U`9CDJG%fr$y=6Of3SvH<8w zZ};^ktz|H98H_v6*@LG9glRnGECVj5%Q+dxRQy_}kcQ{MoRL{n)mP_e9OyQUp|qjb zLLdAoH>WziXE z>a4F%N!$adq8fa15H9pY^|D^dQaNobVbNbPR&=m3M%ES{W$cJOz{(hvqKj$MOgZN$ zV7nu+FvC!rwQOSH-d}YVDX@y}-Ntn1?oV(K&^)Vy*)i&k;WOuMDs%zqbC~w9RDGG$ zH7MMTBicvYgYuyA0R0Z{zxhr=QG{H|Vlf!uDMB=YePz_G2*nr7$W6ZTd)cv!pm^X< zGrL{is3YuIB=&_&d*J+*UOO@IR?-860Y&eQsVOVk0J({y59=o?3Kd6lC%kdW@k_I- zPeK$qyXSrnXI!Ab0t1TOl-st{X?Shva?3{bjQz1Qg1XLWLxwrL%F8+X9!RThfX5O> z7^I!pCk*lN=f+B5&1Ep=oDs0i2y;$fGRAC%Gfi2xb~(h&aQJq`j+M$g@V>kf$2k<|OI#$AwHE{|Mdi(EL7 zT(pi{623qxvQW9q^gAL{caS60hnUqo+v+WYS7R0b5i2hWq=30^VVaI;zae|Pc(Ku{I!_hnlsTG>_Mt@@kU}H16ozJEk zb?%7-yl>B@wqS~wkE+VUoM68Uf@W@BT%V?6EUn< zO@|VSza^lV(W;iJm+R-7zrrBmvD)^PIHFU22XUIrWqKlDF=&B}XMeila{?E^CiB_8 zu*ifwZd)@TXKY5j7PsxOAS$LcpNGiE7@64NXzQq>*rT}Em{^nql9!x`L~K%@kdiN? zZ`2f!gPeKHvE#V{4Lb9oW(cJ~J%;k!j{7s;^Ut)j06=JoF>-I810{TTIQJLSKMsJe z)Nt13d%r=Sey{9-WI51V#?;3B zzpIs%@pv{LXUcQ7$Jnz^Ro{qV7#SGYfz`rDLAI2pXMU8T5=b<8*WLy$?Tt(sJ_1Ej z`#O-IkixOvtInq-+pF{Vl#(^&a63-b z*Xiy?6=Pg57j|)ru3jjGrmJu~4&Npws(&=<+{x=goipgJ`_Er@48k=Y_HO+e$w{UA zgU}qDY@5NX0pSe3u^m;6y3)NLWgcL*CFcZay@XHOQ9ws?e#gS<+a3?E?t2R3BJ7DF zk^CB6@fts@<=Vq<5i_CX84zV;w%iv0KG8J{hG58jcCem@*&svxhA=ZiGxHefJS#!i;8jBH? zb5m`9)3VKr0l_R}4Ta1XsL2Y@c;km+{hv=v8~F6JDXSZ~961*H#jIN>6;2+GV6(DI zN{aOjdCBX!h!UM-$XJ{lza>IU7#=k!4}%PgqJldayrrB9-BgbT&9#nJ_A-} z9+4R$r^95coT)G)vsxHYXRTWu?vZy(ND(-p;Ctqgl1Fxq&?&Mg-Mrd+pWemuOij<^#05>58jq*7^esJw9Ggc>LXL^NDhal@`q zH~m+P=9|5mBJ@*PBJJe3X{m_+tRe%974O<^xx9X;LVZN#WPV;`$- znZdby@tm`nkbon`&2da@sn=7*iWpn22vXN2Y{lv=TiJe1brtbW z7+p5;t_AIoedMsP^oJ#qcY1=qi^p-q#R}sX59Au*6e3x6v-p^46NgTnm+qeG7n$qV zvGa!C#4o}KuYU|0EVt$xJU(E?pRi&V*|k}nXUb9g7>dfeBPpvWX3Vh)%)9=$bS8pr z9TufmlvU-Db=TUB#Cw9(bQIpUQfP8^`774DFP}H&n+2#xRnL@?%@wpbGKslYr`)79 zYVB*ruzVBad!hnI#Z#=v=pa0)yIE%3+>P|dF={z-pV2*K(D#fkB8*>+b=*0_xPJ?_acO8cpqO#^*57WX}Zvh(&u+LB^smP(oiWZWn>ZL97!T&+JodO zz@7Mfw@7Mb*xlsvB+8#N;s^{!=9x#iIexdXO>S?NlLeWM*wI*4-8l7kgxP8-2M8Yi zX0#0GWKbBU5WEWr)Pbx7ebHa@z8c3FXM`fYYTDH+?g~yvvBRQz64j8*kx_-RlZe5< zeF>XbhEe{3@pRC7j)dZV(bAD4wDvNm-R9$6t=HKxkL}cJpi(*XHL2%f{ze5Oood-N zYd7+*OGo4PhPb*!wtR4`hdHgJn;A@f`d_b8{KvrWN3%-mWhB-aM7`XU%prNybb37& za~a`dpR@9Pl_V_j&76#y`C7Niw^^f$0$^CfjS%tR75gTS3RmbYa(g;OKSUyF%%IJZ>wj`omhoWf)x+*aT}g#13+5(gSe2gD zQiH2V*YTzkh?a?~sAO!qE|N4qSAMfD_rE?@f&s4)Rw_WP( zn_Ck0U)i0)D^|~zb`gD=>O_sdHm2^2qWW~+Ptp1---w^4;@);x!@F0y6+>Avy_@4; z2e*xgHft5L`~q_>*d$mZC!-q`wn2j`RV^T}Q7SOqq{Wk-d7ShS2D%74qdNJjhF?$E zRg=gyt_lS|f6Yk2MYJU5DY#N8#LH|U-IDl@+-peJI&UtbwZyfKkF9r3^|*#5MVK;6 z6i6$nqfr&1UEDeyWYZFxtvhaLw~uU|?vCY5(-3<*SDV1JP*BNxBFzz8dB_rN0-+ER zb4XM74J$<85KR!F@$jm|wKedl#C2wJjlP!4_0F_XK+9Mmbs?!$j0uFFy71Hp_LHU! zl5?7AV-3<8DO7x>)FM2x{j+p~)6Wu6+>>~Nq4hONB&)I{suNoe6@GB@lzu7kJM367x@>RvO+LST?k=q4dNgYuRzqZ6o}W_D^Y)u101~&)f#|Z}&YLI6 ztfC;=nuV^Rr`cT&j z3o?UdB7@xEl;nDzVJV;yU#%CzE!4h2AbI7Xl!BKdr0;>O&{NW1U;b}Iam-=j?M7Yi zB&~lu`F;c-8gqA9Q2y1F#vKp=l8RF~HAkTG_Y5j#_@q3x_e1DYUQ>2$#LVW0A`Z}Pxo{Tg{EE?yqi3NcYOIJ7?Y z6>+JwT?*0*m}()BVsz`lt7iUJA|d;A+1MTl(sJhJnmI3uej`+!f1G-rR5gmI z$K$(_>vv8R6MoVOsWK_A6|~E?2oos@RrySD>C&ne@C}XaOr%5|^i$~eW9t6lxG|K| z%pn?pDq^1Qba6&d-lDJxlh8Ft{q87$T~Y7aX{5{~aY~%u0O4 zk`p{zO7oJ4viQeQK6Lg_-i0!(N>_}Fag()bgSILcmJKLNN_&Zv9j*Q-A#gObgYJIE z@UQOA9h>FD#iGq`+i?Kihg6>7@#XXTRSPC9E~O6n0CS$q861KUMh$iZa=8h@WqLOc z>T8&^t+H9wLspeq%mh*VBhMNio6Xoh0?5 zg>7?VVpO*TjI(ZpTvwuYQ=D?h`$R;h!C*-oTrjzTnP7G8k9jQuywzp8B>O8Y`)g#` zp1GYi`dxuF6uuGjC3yXh!j zuf*+@Gcliw0RN-%W#yPSUfFIjoeI4`p2NHQN5>_K)yBn66}~wYO4Vvr#Y#NE42MwC zD`C^?g=QskP3q(ET1FPF42zle+LEUNhkuZ6a+zKa6c~f(xzhP?hM7a1QSL!+08jpk zw{V{k^aJ#l;2f4jrD*etal&!2x5jaQ5Kk(|ViCHCN!c$5rNLjU_E9D)|9$D+Ky4;a zClmCsaK45*8*uL+uA}W2iQ)5Tk8uIuSF0KvAI=JN`5o}NKY+gBRcMhcD zuojwBp#N5QsuYxLDOPeQYGZx9L;q?a3u*4;|7@jWKT!s`D*yN9NlM_RPAK!=yX97R zm+_O&Zpd)d4t}zwjx-4Dq(xG`Kv4FNDyZm?(5bBWhbg@uOwmr-rEZ|eh&}p0*l>UO zG4vjjO~t3rem&zjL(~#%bG!p=2|RmxzkmroLB_zs*u|LGhxQWarclUOhYm7byj>O@ z9s{fv`^SD)RU5+5u~_pCGR-5YQQ7~f?mZsb+aY(YVefWg8Nw9h4xJopN$;_IGVF;z z4UbN_y5#G>MdnC<3gTp{$J)Fer%r*x5ir5{!ctj_u~ID z`P$pO4sqY1K{?ft{zSImKn$6SCGbP`?kN6C_J)f8FJ7Iy<}AJIt~uY4;gqarNs^ z*JQF`tp{wLdzB6;yJPLR=3&+*TMTdb_TdcZNuXi&qIyB=l#-q5wRbL0qIKJ-Ca;V& zIvWw;JoOfNPLQA2qlf8B#(7Aqsrd{osBlI2(fYh+RkYjxGG@9&@#_297I1CzwM6_1 z@-1ymg2#yP!(77Yj?~8Krj>FnhMjjJ6llrTU%PsCW@~u~*J)<3PQkN%I$i1h0u*gY zGFlmjegDCb``)9t z!P+^#?1&MioZ^nhn9L7xNe&CV!6PHL$yYyw-vv5R%?{r#WpEp>>;?1VHd=SWXIdn@ zMH6j(mF(RTL)o7lwUpKSP;o|>k_;I|Bkh&+i-tomvYg~z4s1uI|ESc8ElW$OVj4F4 zSU!7|>qO6~45ehI%I;P0;Ynk2IcG~bXJM;DLUEFvZjZ<vx(b2YEL8oysxSFR~@n^i~p++)il$>A7Iu$d&hu)6OfL1&I?)1syg?3Yuw4r z@+}%A4(GJeDk7#k4byPn8QBB zl`{WXH0m5(k_^blH(r@9KVWt#W1Z+L*g`cDhQFepYsSiC9?@D%y!aK~?+<(K=~*tp zj-`rRV_7lHf&*Dk%lXxOs@h}WZ@;IOCT8@O&0vA+ryG1#!;oTaS6*W0sN>j)H$@MV z$+o9QgdoBzEV9WOloxjx=s7MHZW3&o=(xT|-Ld;MZ_EjM{r z_wpl-nz@qNR_eoS6-(v4Tg{}&;U&vN+EK~Xmp(ZlLRuyq;+4FN&)3{8@%?#F$)K@@ zh0IPIqGS|CBv=rJayY4=f@?Y@?n@FfY*rUYYi-$3to5OTYNIVk6+#rIp)u&vma;p+ z%x;Y5&Wv1QzB@s=f@Krx(kWoz=C5m4e~fZs_ESsE zqfT6O$f4=Gc(CN?d$WM=RD+UHrL#p&N5n^yiTP_OxFg13I@hX~-_*9bhvG-&{E)yY z_3x094TMOyv6Xb1*(S+%x=WLSC+>*%g##bfEkTk+!*?Y{MaD#myW8D^9%{0ufR480 zGu^+pMv^lbf=1pqc~9papu#<0g-#|qIfLqU;TC02m1Inynq6nz>~S;%S4j>WADUHu z%laICr77Q{{<3Es8TN&*m(?+qb0Hl&%QxiYrr~ag%n^8a;bE*%!^%{Zvoo zS8Ok@h9{i-{!XSuA!7jKqx(|!wx|AvI3){+rs)0W`h||)z&QvPOeMtrY9hFq)95?w z6sai-jbF0EP4%d=a6Wh@Wfm_jzmR=2yt`D4W9273rubfXm6L2iGrlW&>vOw{p>3B0 z)>|q|Ic^{<5?*!$QsqaxAV}6@0v%?H_<{)!<(K%9L^T-m@Y5V{H5@SKCxUbsyz!gZ zg85pa+FH_{J>$c0y3=a}1Y$q)W4f`gf6h)(nX%Ab&l$aDfnJKFb|lip&%(ybRJt82 zDLRm7?-0X0!tY5aQC7EFE^B9C=XE~HBK#h4cB6d8u1_7tEJ!u-G*^<3w;_EFwQN%xDS zUIbOALok{6T6$*h*qySKRs0$8QI?#!wbgk49w%3HU*YG z`=|FFeokXx$1$*UF~4lqcFXa3e}vBtzF$72sg8jl9IxHC;E?F<=y5gTja36VL9}syi1@ld zpO|4F*jk`T(*9KbLpEZ)G|ZW!7LBU)m$p~b=1H*1yv+xtk{$%HyNYk@h)z7vwy#@8PGqGxk+nr3MVKN zPVO{wP0AUlj8^4#C$YO(*>!J06n+(S7kT%K>ln?*gZx>E2?Sw;MbGUt{0xw7M$dF zK1Kzn$ZCEaF`uCGV9Iga+X&edZyc3Y`MW&{zroR^(4ozh-XQ*h(Pn8U79@7ZWRq;R zJ*8oI^_CVN&*vxT%V6uI^mChnQGP(6G>i+co!SC4@Y>AgQ z+4t(JF5ad4#&>~3aeq6?G-5{tQJmo{#BD#K4dE-CKTJ5IbYqdwPAn2I3h%@b^#9m3 zV??huZ|h$UpB{;EAD_=(y8728p)=kMM8}M>uRy3>9K*NlM(_En{qEZ03^i_&p3>|; z0#?d^@$3+%QcRD}IB{2UsgwNuWE#O-1h2bFpsRhOd>gk~?`giVV2TKg!;7&)1JdaG z%ya(Zg39{KOaf1I(eK10#G5SF{M}N!EK5|l=b#bQB9^T8>FsaznMn1ZUS0jo@sVw{ z_d=F`y+ki*ey`kY5;qBEZxLoY8BPD&P7AE}KYU2z(r+ku)JWO8Bt49D1~XZ`ahMg_ z60s$|Ta65|>MV?%?a>(x9XgU}Ddb;$J}riOi=q%t+%r%%4SiX9NB|>b4y_j>U|&Hp z?kO|w%TyKd%}-6Ub~FbF-V_qQ4()b5mPZ|;#7kaRGhUrs7HM^>6#=uYKJ4a~>R6se zyG}Ciq{!G-yjvMk)J9vs{G&>KKo>Pv7jBI5-Cfez#&izH`Njd3N%{X6qaO|@CG6X~ z&x?Xa?k;k#V%(`x9R4zHc}XL=O*S`_Jii-s1Tc{}fWc2>(Wa^kr_=RG)e;Oz*Pb!Z z?ec=q7|L=qbkzBovlT{!$BTp5{pkO?HPBUL1xTzx|JtfOwJws2N&n+?aw0~FA0Xqm zY2k4~wO_br%Lj(#^Me%hxMyA(Hnk`ciack&8?28g-i8%eq*upuzWVl^UicgJjjDWl z&q8fFXv;>V&Br=RNJ{@_x>j8qK@7HB<4uGu3j9nJmoD{-33yv@qu=?>+p^)1Vn=|Z z$GpaR*`)tc3wS6SA}o(ipWeKWvIQG$wj5+%93OmgUq89f&0~I9$~tS=`Hw5`v;3u* z2jgwb#qmtj12Ti^4TfNrH1!HpQC~(u4${kh38hw=-|-w70>f+`xSzO_*`8~7LI^)4kB#EJa~TT zsIszu30ZUblMSCC5VitX-AGsi?wE7?{qf63;q-g889v`5it0~D2MXaYq26Qv331S8 z0-viKz`%a6LhWdp>hNMq_1!Lpg@sqE|B2}M&atYxY;xXQ>!74QO^*Sw8uywKM3Ax^ zH#BL`q+9J+QF#Il$1b{_qPIEsbxyge`8`Gd3i_=HhyM}6u7L4RdGSr+GL&@_7r681 zPV`d=CUPx?gez;1=esYL_t#C;oWV{d3*+RnVurr3BkaV!bCg=JRm`M%KAtm2yy9>{6s6^x0(f1D%RDY8pi$g>;*P!0(fQ zn4&z#5q%M%lzNqRjaG3p;i&}l>0`4hL5gDp0@JiwojZK6lUP&Awii7CeP~eq)-Srq zsDz$aW6?`yv`ypS2RzW01x9!mDts)>1~oFVn;|X(DD+cmnW+JEHhi9|8gmMi3iMg% z@XUN1-xlsdSx_bM0AEpVD^pOur-; zWr+ch1rgl=;Cf{nCkrMohc#+F(>?i?xn1^o$j=u+RsNR~l-jQaRy%?9O~%-Yjc8iN znsfR65mEn7Mzq$?zua)Fy-TJ`@T+_kCt#spFCqf+TAZay3MgesM5@Q1uX zz&CdXa4p#7{Wh&Rh05T15)Wj+=HSc^<+7H8nx@e`lnnKukyb^P(=w!qvqV7L>HbDr zFH%5FT|b!7|3csbK11*$rHn}@FsAP-z;?4@tLRirDWvywz)z4@J(gJE!*~{6vDjMs zCBs~s-M5yftXqMu*{i{@@7-}1aB0geRn$YyEtRlU;Sz^efH7DuTcir> z2ysjv$o;9{@@q_fAXIndfsEQn76soBJXtRA^{M5_7`!;(V{nT__puJBaX z!iNzCeGC#cL2P{w4_KaDo7=uSenD~W+uObm9(;mpNG9G!Cuq?jo7=As4`_mG-(&1A zSrCu(zIFx99UHQKX16iAhOiYJ7~s2f6tBr-^09qD^v~HmXIs)4zfgx!%G@xL5XD6@ zV^5xBiSA8p(K!CZbuz77Ox374vJlyqO2(PB0AHlvMeHi`TY*$}!y04Lm7DA^+7zvc z7<)PlT^}`yt~~TgXw~>867|oD3r*-0(MyV~Dx*@1?z^~+!0%xvXa}5k>!voHP$X-p zMncXK6OIxf?7zWD0fS}p%-6M{l_Ar!Hmazwb@KPxI1xStDX{S?1K3n_;pvoc+?>me zqFQX&&Ra^!wA0uxL*TCNM{mK2D=43w00MSs;V@~VLX>`ko*SK2>&{@HV+fmMA@R5L zh1&(4{~cH4x6eL7zlGZ4eyd|SBu1kbv@dNg+&w*VtMTxr#U|CDEW}b%(dts%xuN=r zu4cyQ&Dv27af>5mQudT;kGrt`Z3YfLgwvG_=1TEY2Kl=2T2==^-7S9`eIfFRNM2tA ziVjK`+_1en_3hIrUorSM{{0Ll-TW%%FsbncDCuOd<(+3MW%KQ)O~27| zB7qs51G!BLI8Xj=5e1nqGc{12c6e!|vir{lDQyk@(Z1AAn~}+tTf84=EYPfL%C#_I zH!>DOM`c}!HRvZ~+r+!oKvN==(yrOEk#jiRVem%s{G)~EjIpNdBGm4Ew=Dlsue2vC zk09U;BK85@qwPI$`}vX6YW0N=KfK17k_BEiq1*c|w>KUQE{rJAE`uAErOI(EALIG>Zr#I2_j1?)Y*Y#s|*sbQ>hyc)P%`w{uhvPV4r z2#jX@bFZeCA4piQ;Z6GclhPPT02{d@kxc2}p9b@v_2MJ!bYpFUbxYwq zaYitWxHX~^aAMH-|D^mCE%_by5F#|)rOPm~Yi+`!A;~MRXS;V~fjhGO?tP0b^j0dM+RNy@(5ciq&3#GJBI{m9*C^0ML^``=9$}Vu@NGW|qMhCHk1%aJ_$Ni9Nr3`4o>Mhx5(+SPlZQh+ ze%b;&+~2CHP+-lz666IahV;&!eHv43gJnlQAld-0Kqh%_3<yJLqqXP^|*-Y3tA^9dSSfWK#72Tm*Ia<*y<*TfOV!IqL25eQQYcAi-48=C?t8* zsBd-iuIom^9)Ix5UB`^@B-yn_cCOn_3)b6|@Fc~xMq#eoPYV{-@XQaYSx&4)j@%(c zY71Uz71FyUp?`BxwSo zgl!m6vzh_C&cZI6Qt8|SS;j?~q2Bab4q`awQF!660@tda;Xqfz3Z z82;(9(d1^TqCA5-5F5P{hqo(nc`R8^L*t~zx@vO9f+3?Z`~83t!fsj2GUeF zN0C|42UEsX^2B<$_hfC%UvtE^FB0yQ@_8P~SG1y6pOKgI$*(#d$rH3)Q%7?ym`D|& z++nIH(fRexnqUe+Nh0gIE)%L8It%g%UdPXwuT0V!H zKzRb>x^Iu+Xf3Nj_D1WhezuM2;?|Jrr&f!wSUULRA+AlG-?=SnTVd!rx zbcql2z8jIJsx7VL0D*<((-$m&wCg&9k<&rAgys}sVS&^S5s3_ zn^jfgkXMUQQQKCX4KKq}QX?y~7E_BUDMMA`$WUVtiPkv5B$LCg40bQoh!m?Hp%WEp z?M9P&9wFjrolX3xRTgRHF`Tb$`PUiixPx!j-g_l zX}$!JZqy%`ZZc*_RQL&jUK25jKGHXWBFYrE14~`A)?-d{`hoX2^*3b(ZPTK9%ipS- z^V;G?Uu61NlUTKECt691OzBOYedG2Gk)^6;v^_%i)INdxrQ4n;jLs|CJFd0hyRo)@ zp~vJUrp|($FyhUZE4oafx0$zn10V{Kk=Lbmd`|CpDVh-d%J}$zp&lIv09x^j?{5gm z0>iITA+YXSRo_>x@h9IcGWd!+Rz<>{f=|VRr4}~RP40t}YQ|}bNhFdjxi_NOe8*Zk zH$)7aN~@dUmvx;9@0vFy)}6}Fo2Tzrj$w&hqSO6$l!Pt|ay;jl+7C4JZ}IJ)vfN+0 z!`^mO{4Wc;9_NH!4h;NmiT!!yb*ZEd$cJiVBa?}z3tU5^#}a3GoOl)Vv8fM8#r5(E z{wBMIL{=%!a#**@>v35gP>$A!N2xF5e%En7IAGLU%`bkwx&0A9#5zMJ;WeVEkbXd; zB4AQf2{kVR7pD37EYmZ*#t;=*vu=h?-D_0ae&N6$=9nZGf*O#2@qT2wyk=JQ-BgZM z!gHp6Zo1tWI3kFYU<6(m=3Tb6AfiC!-uPNh;B?TOJqYmX(HkIumFJd*Ek3Xtm@C{ZLP^XC`4N<_; zM6(82&Iv|vW7PK2AC4soe42;euJ@%QhymBH;duv#XMN0$tQbV0ulARsGqgij8)45b zF}tkGa{!hN;uo$1F8oEMGen4-a5%32|s!%WdqP9y`k%}zl{a%_V&k_HLy~vc!-3wPM z@)9SKC5@BX@RLjmebyY)#lcW|5PtHPUo+X#XpLe63riOK9>15CCR<|z^7G%vhxbob zy#Azgc)QFR^4pizV;EMKn{3Qktn|C_HQhmEolh7YI@b~Oz7GX`W0T>ekQ}pyIi;q7 zP#ht>{;6L*8LEYM2rPCzzuFRz(KM}R{v9&g2fYb;%&=oQK&r|Li~mF~c_?>Cs=>k6 z*xKK)G$4j_X0xy@(^sBF`0JCY=!i2zeD?-gP;elR`9b%}h>w>AzfJnhFcxE@^2@Fl zzH}`FMhC;@uO={z4Mq$WIrPe5;Xw|fm+sP+apL&+f>vbs%jAM-ob21pd@2kYFJHAO zs(yn#NEOZfZ7ufMUnqZsLXC&NUKmC;FOi2I_hwFVWPQ=V`eMHT;(HxpxINW^;N_zi zdZ4ReGge*?7+b4cx~5|K2KV5xlsxfC3{nXP_TpV<9z3_y;k|5)&k7|nR|aiZ76I;; z!?9dlDp=-R7WoDT$sGUtn;{zO7dZ0x5BQ8o4t0F}IjBGLxx;(?^}KC72(W<$3+8MX z6=RKx_tb9sLOY8Rhgx?v3J=cx^xF^s{q1+?=Q8fienkEW5~FY32*fYxe+W`H!uP>F z9_xdqLt>Of5{xPGp_9uo=OL5B1u8e0qbCzOXUBv`#}8d>7QUidd}hV{G751iZZUEw z3IaUFM?Y|Z>6RJhEum3?uBsx%ilwQJY8Ct6T}tC6<2p=;D~6?U71U=NE_yoa>{Y9_ z>tzt0IM57Y>a=+0zUKGHSHW?$&|+FygXkY4>U35 z9N{@)ayb${xN$KnHtws(H@lB>*#NhuigOTfnbT(3 zZhe)qNG^lLW~?1LDwSTR)_SxRDFbY~Tx&Dl2^khkz~^{0(t?myrQ7CsJk|jlm(A~e zc{JLFlGEw)e0gl|v}2$sr75N=rz@f?qb;E>uP@BPoLf*)mRD4j``_Kh!9j;YfkA}& z1o$1Pd%s@(;U#(^$J&}=t#i79kCYjvEwett`>DOe+v@cM6DrY9S!BL<*%eZl(il^j z)e)4RR3BBYBLzbeoZMENrXVIGz!B~V^9>{0eQ$ZeoN&1esKYf2wEgFNt=rtkWvz1g zCG462TzgePFlU0E(aL#i7_Vmwo+8xFM_S4wT*`;!%|qwSM`+E%Z_S7G%ER``M|sL4 zelh{T7=M8=feSUp$sR!PK<(P#8u?8>(r--P3t!RmIkS%@vmZC}4^QR*v~Dn)?gl(p zb1!7}MIe{Y27=H786W^ogjwWEBy%tsL_#=ghnx`GZ$wtn5$5Yi&(U_HHI{SG{pkE2 ze*Ks&3*RV_{0_PNCcFGT;@A%T*dD>yF8|m*1mg}V;~pC0E-T|ceANzZ)gE5eE^pO7 zO!ls){*IacuIt(kaBbIDuz=z8P|BipDl7Y@i0Kt~&@hxa8a3J&aXbAtc@c9AXvCcH z8d@pUx+L|eBpa_J;b#d*yCh|)BrAJD#YEq}sjcGN03`9()iUdz2n~94vp7EPot5c9c1G9LRW-$aoxCb@a39IMi-f z-0mtqZ7Ze3w7f`d-P-zlt+}={(0Xa6igX>Dh2YXZ`r0B^`P_K>$V@~g1v^cLzN0}O z-NrLHvdQOro-{pUvz(usWA*OV_fJYwz`B&X{j2iqEd{2D#7dq!|F)b*gB>C8vryT6 zgO5yd+7YAgH8<3}p+k!i4PsT$fmD{d^wS=bOGhKTs}F z1^cNUFmg7XeFB&+F+2OY9D6TZ>li_&LoHTEh`(-Vu_^ z5uwQu*4+{1=4yj$X) zJ%4;0?h5k^mh_As@C>B#j4bvH-S-Gc^9Y&u2x{^OyMOo*XDJEGI~ihk^9$SeU;qHa zlDrvh%5H)?F7|P*<#5Cp`C9WU*^mT>nvScQ0n)7I_gP(rS#98~zQU1}KzZy@Mb%MN z_EH&esfuu^aCIraW2yL+_g4^aL2ql}a%+BDYw@$!uP`rioy8%2WT)h$%w1Y{&taX< zGRl!=724{MlN$z{$rJ$?k@hv%?kz^Y%Ih3-2F{YKW$mXxm7i@ z*exGhEM2_x3e3*4Xf~>fa~6eD&iiVe#{px)N$`%CTk|CnJ%Y6fhfZ)RazOhs_R{gu z^w06YK-RN*do!lL<)7(+0awWImeW4{Z@cP`8~yJcEDK)_$q5VUT@qsL(By^tldgtb zHgXqBU!^dW(aczIbZUvIV!GbcrPaK)!>X*?wM*p7g`g8vXk{x#I6Ju+iFY-qnht$D zsiu6Eiue$+X2+CzAC;b6%=9$wXOeD}eOGyB=s>;BfgwWX^|{Yp|_V$E|M&eC6O#tY6#b0!)x2$e_4|m^Wys&N+oh0S~BfL z<=oxQHl&l<&NisCwmpkE)E3$<5^F}Job4@F(ZGcYZZR!a0P~oZ%cfKhfn#lvd)fuO zgdRKd>VkHzEOzkCJ5BbO*;F@t$e)!Ybj7|>Op(z!{blNVmw0hxD%bF6Gz-wc%#}jk zQvC8qNj)bxXceX_+%{pRHC{Wv)b(?t9h}Pz#&gLg8^2Y8*4ynGpJ5|g1$d~FQIhT4 zqN`|kW(M>#RY^rdAt~wSPq1dOV@e8>_vN=;ixuD1zuXE39&NJa z>4bwPbWSLH(kK*RiY7$Hc9c$aHt9nWX5}q>ux*X8!|JfDjbs~L&Z+Nr7fbFGJ#8WF zyMt|@cFdA8G|zb$k44<7J5S9jyoIVs*n_}ot;6`N1bfh9Hi&F4!pHd3r4TD=6wMUlzkA(=29Gn9&LJ9{6~jx@Q`# zD_4*dR#JeFLQs%scO#ESyJ+pXk9Vy1`D)DhtW(&X|NBN({s^-19Y;&pMRKUt+K}uB z!-K*A%}&RDnUtX#cMa`uik=BCwm9hRv6Audwzz{)grVgEg z6V*}`QGVl;j^VX5Z2uC1V=6-M6Yp-%GH4~!6W%zn1+yQ+nJ(~fPaUIvq!MQjq~lo8 zhnM_Y)R_+bfl~!8;G6JBJ2BAK369Jm8 zLQ#$xyeO~<;Y!&iCiHUV2+jfNp+^KzNJH3GBnUrkgIkVH6eo@lp%QfU0)J6xV0U9` zX&ZtnTBszh1=%wxPgCE# zq!bP*Itt@%Qv4LdH>xK@s6$xav^e22bs0k8xTg$Y1_An#kYdvIbUGNNg^dkqsZ(;= zQqERnl?7Q1Dcljs)DfvT5#kc2sgzSl5HT}@5K``k$T^6~0S_YM)3T_jBPD6W-_Uca zu@6GL5?tn^Zqa%%=~zP9#+c2LDMQ)NjO|R>XP0}iM~oX9>XRE;%e2XoUTreF{-}tO zaB#q2$YvI6v@X-~BS~1*$fL&$;AF`@bd}u{iBLM3vtUjg6uPKLI76~#WU!`eeJzqe z4_5MQE}cUv4IJ}D!$^(@c`%9f$2&pzl12m}$)G0t$@Tl{k3`!<*d=96TtQb+J&k!e z%C?>O%tToySt5i4RKe27Nu0o309|OzeojO}wg7zO3}%i)HmrX8@?#UU>RC1FVsHI_q!VTA)PkR#rg@4v z_cEFK-vD2QB71dSn(v`62w-*=;Q`sA#23NHKIC8NZvuI0Ak=&8xS@(kaEJo%dridT z!XsFaQU{h6aJ-G|31YS#7^}Jm4#F2m>q}_e!h5$$nrX77la-$aFIYPXC?y9SovL)n znuhbQlKH8altg5{LzlA8=FiQfz)ad|%h*`qXXX7hokT#n3Ex1~5@l%ORP@dhm|p9n zEA>gvi7d&Z{eDPWE0aG}Zc7_R`-`_^%{oB4NWG-dI%DbZ%0b*s-1)FdtV*>?yLCd~ z_QH!?Ahqgn=$6!ru*0aw1m(})*Ym+sZtyn1r$Sv%n~Z%Fy3^DUr?h+^RHqf_MyW!zA`E>d#%lp+bO=xr&I zYd#5kSn4G2l6>(Y{NuDN$|kB3BtzPqWJbQgY_>B8wE?EExcX#@^5+)btl_5?uTJfP zROegu#_f!wBjR#0Keg2#=4#Rw}w5@cozo+7jxF z?A4Xp(yuG@pj|mK{P_C*%Tsta$O}3Y>K5+Ese(v@$_FHBt!%OR{=95b zk&V6H9Cf0+S%}$RW`Fe<{>a7tMg1_g>Iw$V`_IMJ0ml{`H~K#PK5iY_Ob8F!L=PqrU=l1|!(8t5%W~6ZufG+dZz8WDbRd9V+ENQpgn_eC};|iA38;GL~H2<)6TNcYl5@ z2MRaMzU!FQnx*O(nf+o^B({W$);4S8nA0}QrATERXpf;^Fs)~xuQM$Ng6nO=vY<}u zGU5e-PbrLZUd0H%N~{Qn5xDg!4G_2o2CK*?x%^i;sl`0*-NOBt7INnHgeSJHO9WXg z56eLZi9C|Cc^~zDfAdBn-8Q51X=Hg-%UNiKonvq1^4Y~8`gnW#Mhe&3_p5Fy1D}ko zfd*W^(JPBF*z0$w?nYtAkIeJQmlY%Q4S_RGsIxIR#m&@>DV18(zSQux8PB+1Z}D%K zN~$b!2$hj^rBJ|z>CJd$nQ3Y4)f?*kimPFk-(N)$pA%3ea7{8lhrRZZtH`nC2S$#t z4)7!R-9^dJKKG=Rl^khwJqC!U`s{nps%iw8scV|W{FCwfSEJKBgU~Go5?LFpvocKd z+<95)y*ltIjKJ~4-QQu$&);bnm!#+I4qHfYpKHRlmFUNfWe+vHyMq5e5gp*N1kJ}~ zG3MX<{_HY7A@I?Vr?U;Gt^|9#*n-*3)$9AY)WsWB;y4M-6UmRSmtGTw6(R@~Sk+W| zK^>NHzT6{gIYgI8eM*^T#1i8X^BLI#m}i$av{go5sQs8LiH_;%1W904W5-aMv&Y1$o=93+vzS=o zT|P}T3=aDSnWM9%noAPhg|SzsJF*i;)(I8=QOxw^X9#dQIk)muHO!Hs%fox-(kA3s zpql<^+4C00Db8l1E4D;X*_=N$XW7fak9+FLw{J`%DwY zfJ5dhyFdV&X6SYEZ@*N1)Lty+Eg~g4JC55v-Cy!6cz9o&6GBBa?;6<&NNWu8Q2zk) z68Z#+68->-l=^fFmHq&8C;N2sCsBiZ>0)U1cw;E+_+nz3Pq-}k9r-MM9PzCnSemRv z$Su~TRlZU@6aJK0`ScS{YvFvdVhef7c5vt|a1YHrd{09Ej*C5~xtCoCzP774OuW3(luV^m}pFcuTpGtxFn9)4DkNy-q2Z? z%bttQ!+Z=u5SFv&qbsnI=ikv)SdH#jgSG4*=sK*&Fl+#CceVuG>FbYO*v(#%?!jL4 z#Xj)1=04GbIKeZO=}DYIPn^aX_S*C;uJZg>dQEIydfjJn!)I_4cj4h4?(=*-`T(C1 z24C_nO!IgD{PX+Gp&4Ea+p&XtKHY`g`g$T+D6tD^46%!7Y_W@J za3)Bt1vP5@c}hX7yzRsb{tJOI1^vH*?%!~g&Q6#ifU6at$7AOj%) z3j{g<6a*LBr4cmQpwXAXuAWE)=b62>C=!7jecrys4?(yq^k>FN|)PZ%tH25cUU>KOV$t8uOtw8 zxh(4w)-v*nV~x11CA+oNfF)wd2EjTZ^8>^Bi5UO@000310ssgA0{{O24|v+Fdk0)o zSNs3-oI8>*GYCOMAw-F*MF{~%>uT*D?)h4+t1s@o_e9aU0T*^F*w!RYv{iWPUd26X zUDel7TDu*P!~dKcFuBnBU%!v$-kh7{-tY6AXMCUM96*A8074zf1p>&RgAfRZ5uOme z!C-9S3emfuh#zI;s8f!iMc{%qU0o!xx|`H&-c1<*8-THSH;+hw{n8`(P8#1ytDM|H zA%A#6d{;u1lZ)uxVIhAsY-F_>tbzg2fPxjBXcg*spCkKH=+AT)hTJ3qrAWM9$@TaX zN#mVD#+4Yzc<(#popkaJ5cr_%Pn@Jk5CRSV23#;31T%1MS#kx{?`pkJ{f}-QlnF!7 zuo2n>hmf3-6d57MCt!~aq5nCYI=FG;!Kt`LG(Z00ndhJH-mDn_fppPGY%+kzv{VgT zLZXKR35pPjE=`e3(7Uun>~@09Tw1*=Lit)`kqh*$DCJ5`E`gPyw>hmQD|;r%> zw5*|Mkk>+eNb||BV}j`_M2=^JcrGQ0*Kq~w^sbO1e$?}$+k}3Jm;qG_7{=>eu|@ot zz>n^_{*Rbk$qDv^1ZQ$es?%YPj5OPl6KwIaIU-VIg9uq;wmI3yj)+J{Qi{-Z#;UX5 z?A@?(!U8nPx&7GBrffi+t8Wb$(7yEKtlW(mFVD)| zkRiX_zi+44-tO18e$v;A=O=^jqRID_YQ9sXp&D02jNToKennYh4T_C1_4%(Vs!HY7!WG7? zLxU;IHZ&HSU1rLwB_*Yzh8vF%VM$F%@u{l+m`~qry>DaYzHY+?;fpVBm{fG--PaDj zca~B-zkDKHXWg(We(cy6llr~UzBkTGbB!6h9JSkKPx3r1I#)!18$GHP676(o(tvuL8mx zT92%h2Y~@};0jB0iOTdFjj0xy2pYX9(xOSQlQ|Q9nUSz;w+$*Pn+4skhHdpC;^s`q-jKyCuG42$mVa>K9UZr`oA0Wh#cZE)p3&J4IH}fK!Us0L) zqG~LyM7ebAtV@hykE)$2u~=Q(BAGOTV8_?!sb}$7-Krq0`z$?vVDhf5Q-t%~vxZ|= z`ti{09`x6DFpl2t!I8fO%fw`HI|M^@U^jDt5=dkW@G>RxnXLw!fyF(8gXCZ)9k`1Q z#LQhn=w_OX$2MawzgG=<1(V@B&_Wcyms|8F6@Fjfinc33CPJQ@_Kvu%FTL{0tc(py z`yT;>+9Z~QlI9Su)qL<;y_ zD$ieLp1_tg8QHAa$R_VLY}vBmv(20Hdl<`R33??vnt-7TOpolR78^R;>q+mNDe^Ns z%Z*~*7{t6WlxeD&@0mgD%R%hR{=mh3F-Y$=pgKyaM9~vlJQ19Fqa(>^vMc_fF(`p0 zRSddPeD|7o<)G)Yzdw`A&zL_)AVcVGx(}V`cz~_2F+EKWg#LK`+!cDE`1+Zf zfRG13E=oHH#ft0b#PB7+ zBp<#|1}U@xUo|$U#$|_4CB{Lb=Uc#@p7nquJc;~WFTjzmP_@m6DwGcN?t}n6nGzIc zR!#4UDPl)=tZG&rOcK3Mkc!C2v!@tW%a=L1oOT<|&6t&0Hhyuw_nQ; zTDB{5>fHC&F3%8>$lQ?#^GAGf>(YOEc^V|RrtSOhmF=SzESxnhop3930*Gyy%?3dj zyr#|w{vg5SMV-jeVxpV)adQ5Hod0;VaGMBg{Q=WS2LMEZpy% zf%_xzZWjF#+Yb?bEp0-M)ZxCfnt8)B3`Y&<=R<+)!N^efr-1tc>fK_13N@j~L1_}* z(E(Q_O*Fg8m2N2FGZ7I0Si_S#iyI~ufdr;lqd9`G6m54za-Ax+qtTprjokBYX)q}L z;Jx2375-t^Y*;dO#`5*EC$woqE|GJa=%^O-(Y5Q;d+zHg(_Cwoxt&Y~0<)P6F_If1 zzzXfaZ_bsa;D&%IDWF^mv&v@NF)E8N+hkGm1Tr|CdZ;ZhUpH5ngYb6zg))d3b#TuQ zf1Wr=OR)=fIMwTe*pDVmS-ezouM;0$pH2TbbDjQ%t-LSeGR&2{!$)?0aqH!sD>L)? zEW8OI)@HLHgG252{wd-3CB4ewq1@pSZ9J}uwY{JIhjc3~7A{DyJl-iqWrG02nQp=q zueU<|ia9p38=BeO{bt84&8{8+Il)_Y3JgU#gIb}tsyfa3=JG{8C;HRuLkF%D~nz@4B8!~Usl{pK< zucA)8oQ@a!@R*eFI*`7aN_Fhhwm>IqvwqtHh=z=g+QQRS()%qk+c@{ z0DoCjA*YEAOk7UE#9f9H3=oueCbg-m1HCJ_a)jXYNRf%#gu$!_$>wBHqc)5C&I-mY zG;jK0@2R^73_F&7;SqJwFKXFu{Y8K7xvo~ugo!H_lj&_bPQISL?A~PhHNBfcyU+>J zTJiSdksV*#eslM#m4#(xFqdVxaW0LH%nH7v_L5JrJMAT~zx^v1qfm*wkD?3;G> zovXqqltCW?pby~T$~OVw75GM&D82?VL)xg=e8;Mkkt4OGcKSU{P$gcOOn# zh7gU2f z;j;L;g2tb;IU1?RC2=$g7N=0%J4onUnnxC(u!qiFM&}d&f!E9a6vndojsh!m_?wIt z#|Cjcqg9szT&B978?vZ}f6i*)%W5p8rKUc~YAL>Cpkb8QUrYBVNpH^TI5cg*@;NCBoX{EugDc6$ zTC@zaR;iPUJmE=NjxjvZBWc6=JFVW`gao)uI|6W%iDTIu6l`XTfoI|y}Kn* znJ)`scEyHMQ;b|Hiy(8(VgzfvNHnrhLzbZZWcO{))oy+~?J>>X5)yI+C*OaB z{k|;uEv#MF=Z4k7XB)R1vkL$Ejo#VVsl%P)pQ5m$ehcrp+t;?@9LzpQ)Bk!%mlrm$ zjj|_Q#|>B=O}OL!HQJpnc|UtVFC9Lp@iW(C41iQaa)Abdpra=!IE3peNY5GtYPwyu z*C4Zj%p-zUB#MGnrtAq)uKL;q=s+7g3&*`V^AC^)8_6^Ky>H_Ehd7zeW=)&6B%0)c z0J#8Sy2AA%Ar`u-Gpd@ySwKmlmPB`Wz%#YsoNn<%r4KMntQ3MA2CJW$$Tnm{Mp~@3 zt-efZ&Be<<-5=d=?0kBM9>nM8uAw(*0me_wTDX|rlwA7?2CS=Z&7Z#S8p-wkkuec9 ztEUbgKLilQv21aH`BV(Ntd5{+X3Y94;YBPweC=b(E*3F9+95 z+`6~sw>3%6t>HCe`Kd+Cx7o>EBM?_@S>!><&KMY*HH(c{ znicy~KS#{qO3X>rRgl3)-yFVrRtPREIeGE7g84JYEl0^!^5|sol|xe&X3i_un51ZI zw3@s6%lS%XsP0*NfN&by((oE|hk-B=7QkxAgI%EQ>1o0XJ6R(9b5n}^lH6GyAdi*j z%9-+K@^)F*lR?!e%0maDja2tA<;}a}{e}$uFZnc|MlcmNBt_mSrKih%B!(fCpzc$A z#0@Hw<8I)%c;%8=C|Zu;wLQaq>_Fm{l#qWdhcNdD8PPo@P-G2xNE5= z#ScVnJ(XP7LnKg8DJO1N$kmKK6SWl+?Xoqme7Z;&*@*w$ubQ7d@}|w*;}-G`$^$+ z{;p#J$vsC4H|AoK6KSWg^`>09_bfpH&Gg5=29?n3819Ag+)<#^-X?h46BJ=CXAB`l zs@Ao-`0@k`ST%g}Xl7L5H`sVaVGRRYc{;XRF|B}9yN}`Y!2_C$-By3{$zr;eH1)Fl z^~d2ex7ID4KXa`B1csCaNix%+8R8i(t*w@i^|`8*<1#QP2GtxY<&0Ko?;6zUmyyM| zN_y2un%eR|={An37UxbtaTY!PO4}#;bus-G9N)9;q;L{PbN!yC-*!GW;Sb{z9p}-) zvxtZmuH(n_TDgul0*HqdAF)7Rj})aeZ6v-H^Ay)pRqGzTkCo}wtSne@5N8YD?l^uANIilH|<{A@^2Hp0@gNG_9riF)B2X_=xn$mj;aNK@0AoV5lIauFb!D`&bQ4{HOe2nl5MlIHPdms`uAt;h^JvY4Pn$%EHn&A7_7*N#?)&ZT9EaM<1Io zJ8R0YZj%N~`ec~(e7aTAYZh&=mp&s7 zkc^LimW(-ETML=C^4MLC@VrMdMKH0|AyL)YQso_YnA&e-&}ibp&SJT*uVN7Mkd|F` z+^09mo-aTA_zTHZ8h?U5))OQ*glnYf3peoD( z3QBydtq^<%VXJwkyf^c_w@#Lc?#FF?G4*)>`6orjZt4J`3Z{M+Rk4K%vkqs2a3$Ug zK|Hd`zEh}jV)9#3(ZLQTj>E3uVDN{Sx)}EnR;v?xqmZuOOwU*>^zdf-K>;2u_(FJC zs&(xXZa!`+)*d#jVO=WrG5Gkd9KyXg-rMiwu8vhZ~3M9 z@+vu3&X?IG0c4I{CxZ{Wl6;l_4l)~i-k`~N{w7^bvwy$~)Nx&yNuKpS>y0Oky@$vZ za*FFToFU!KkZPfk8mS+T3aKBQ?|D2aI!J$2_#-nxJwmZb^V03bk2 zz-_8fEQz;=vP%aGE3&e<4U3oXlFWZ)1NIb8IAYHyOJ%6{b*i?8lUPDH{o{|nw4Tzd z>}Ls}WYJ>bp7<8jggP+UW2swDDYNyixbnVJo}p7j=K-%E2yu0EiNW z<79v^s0IT(#^~xCo>9-*NWkKgpKnI1<6osVh@=%13L2tJa7dN%-l8THypN>e+&d-C zXs|0Cd;^c%V%*JwO1BtM4H>6rXbv$H4%e_eHo zqwmSk|IV~*W_lj%(JFd&Y5j~$0T^A`6{5AkzZcEQ^XPA*Nzcm76n)^rn(w>XO4Lk> z2j`P+xivD<*IvYUSz~4UQOKK@Y4N1*XPmz0wTW96^htM&NT(NvXB$aPZF&S+e~bUn zyO`di-Zwwk-?nwvlfsdYmxnD{1Ay=x068L?nMD0P;gQ@W10;zHH1+7f^juj+u5?sW z=TKGjbeW2nf$?4uYxFB?85WJtkoaob?M<6@<+W@Pl<4f<=k{%3)8b)Y?lENQ()x^C zT-pf;^roGK-nNVnMoyakPe$Dh}n;=B+*xGDn};5AQ>(WK0c zK2g=>SFu555XJ^!{+0mGV?nBzlj4Zu<*?$$O5KlbChf;ALO!Mq>z@&@qcYlr>W!YZ(I(B1E41q`<(=1WG)drTv;2(l9o94jAABzjT!Ea7<>m?OS z)?4H4P9HxOxFz~hx zz>tjzD8!hvsAIrWx;0v*8)I$?mHRbEAc(QW@{g-FYYxak{&r2Ok23BWouA(q+g+zU z@Z3fGa{`?$Lus#Z*pEKvT>uDc0kD${mHJ+Bf8Y0Flfma3Ap<}jujG^Q9?_pq)Sgx~ z+^O8ILhcAQh^QD;XM^erhu12r?viqHY1Q5OC{BwkJW8aL+iP-#y(Zh@`3aj!&q_F`@1$Q zT=ZG)!ucDCeLY=3Pteeul7*O5s@r<$`-7hEFL7o>dy6#{bkQ)}WAf!}6Yuq?J<(sM zs&p4oxnPt+R2=E)+1tmFxWRLCP?MyZHwyQU$j{Y{IQ-2I`D@cRcI>ce&N^avKu=Ba zK9DYrUq~;}$KsANE4?KvPAlw#_7?7!OEN^wKAxUOe5M|unt{qZwt`yPOJc<@~@C9SJPUg3I?laE(@I*g~@EHQL@Pf2+`ALrRRWLbJvTV$&&0!vIiW zZ@byEd0$88>+7f{U9}O@Bg9l}%ndDKN0oyM>K0~<-eoOfM|Z7Cn{jJB*D$*g@4U5ZMxXv82cr4&4tMfr9vYD^WsFRlhOw`Ac&_8Xyh0Sz zTVS**dHIGOBM)l^&UlpRH!HObXG8{^cjQP)tGLFmwwXM2|9+_@eZ1KFZmU)ynGu-_ z$oj=71425}{$&;~^n8uhU{rV2RKO~yAAc#}+x|uVjv3VEXq4U&gU0EyP-pPTFScR+ zp))V#y9P}=yq^?!+x(Rym`V-+f)zm6#nAk1$4F&*(N#J|lB#2bzhcPObn+rP{_7H< zMacnQq^=Jjon~)CptnZ~4O8D=W#_7-^Yrozf(0e%_)bB=4BYROIMZ&%}Ndk$)(4{rlseEdVo+DKsds%1w#ilD1VPA`sqEQAf-B%l~a{o zkclUDLEyb0eDKQ!nu9~mJ$`&1htQmJWHV-X?|Q$-m2?oX5epzh($@tSLle$;BIpfO zH09@os%eSfIKp@cQ0?FV?yf!%#AdfUEqu=c1M+j}0s3bD%eFR2@1(`orBjb!xKO_& zmi{J$W{Pk0A1Xe}XRRxMu!Uh!_l%9YpP-e->-IdOyQ`iP~qlJuj zZ#i>@Y~GS^a>EAU1YMSN>#KvmFa51($92c37wCVF{LroYtrPU8)_|~?{)R99vV0euIcqOAj!D~rjTc}eRW<9Go zBH5C=!yM0ZyvB4?vu)eS1h)szoY}Uyq!k8TzTL6?-J=-&!lw9Xu;f0cqo3B@X)N`ftsOW7ULA} z@1Fn4^xW6#z18u5U*?d{ONym8D(VS@w6b8~k(2;d7Cj-} z#^v_2)9A|WW=)Z*NfM+qNg{X<=f^01bXTv^Dv^DEAVQc;8I?aEQT0n+>&N;f@_{A! zTMiv@=VunkzIMr)SrfWVJsf@aUOdKJww=Km)*DwXXEH0ACI~$ML|%JYVVWnVGV;nx z0-o3irS6MO^z@3wk)Fk|IKs0x7JI7XQSX9e(z>)oKF@c>>RsXgBqUlQG*%63d@^To z+F9NbRJqy2oU~BeoP3WZ58telM6{oNp!@UCo-2E&4NIG;!xm)d<<&jbt<%lwt^Ix- ziU)r_;~q45^%PpV4hWl{TT&14SEvs4pp}QzZ{W*OE_)HEbD6$~SHVQxIAonGd*x(i z*Vt1Nn7i0h6=IWW(eT}877a#3MkXnntvPC0e0%-LZ`aSAnep%8%V#dn`DWkxm9w*k z4p=<9wD+ieH};Jfv48l8eWQlYo|!&x(b^*?KF&(d96up@{_2m9?pwbkolKf^X5ysN zlO~>?F#b$MSH70yf=C$Q0ZUZXl@xU;7>vpqG4d+Nza3B_s_lR}|Bz3SMwuc>u|`2@ ztspOTeO-O4S^1|dH!1(nL8@c&S-KSe7k7Uh*whvGkK^Z@dv8*2(k4xfy5I$B3~OO| z{bI=jvQf`3cYFJJ_O0KbWu4Y~L*M!x zhtj#|EB=9gmo5O}7z6=;hD4BL<1lBdfo%ygBLz;C@Pa3ORVd{?jJ;Dhc$pn#HP zr;2e52oQA;IO&|o3vMj?Fb>h^T4SSY$@6v6^kZxU*t#AYMgo)5&!#e!i z#trz@`Vq%qQ#chiId%{qx_AK}I*i(_+W7V1Vdk&5tmxft-h{NV^V;^Eu?Iicwhe~w z*#$$kZ^aLHU4@-5UBcV0UcfuPx&=G3or4Yt?rc26L5l1a5lQ>zMuGc0Y+M#2j7t6q zjRzso$bu#8focOr5)8Ky|9WTk3kviQxL`>TH%0})k~kVHp#v1D3>OKND3KDnq|qQ3 zO|z+ErfuIdWMciKjeF+KT3$$X=p!5e5pd~8476}5te1}g1XJJ`;iM1*B+_%*DM-$wC?1%{bRmXg zKAB^kASA#s&|xD0BIr!k;Bzu&Ze)GOfSO>h99JtrSrcS^)2k=DhT3CGxU^kQJ{!`{ zCe1O3>G=fBEQcsaxe&5GLv$fzeZ~fbs2Px_VhPp^#Oh*+gFet^eU=W4Wgpg=qjJqr zQ8Z(;CgLo6Zn?!9DERmDYLpnJf(jn0u9=LX5iyYwk&)3#vQKDd`-L}xEX@rYp&=^^ zzhX-ho=%5`RXeAShx#RMf^LL)ZKIAY`piT3>{j0;x;l5lkUhI$FkPMR@IIl{^hpzH zS6N-NeS|K|qVFM2MRnpD*Q8Qvq2wi0l(qr^_{dPC8Usr-13Ek0xlqyC18tDJ76AmN z38&FSGEdIH3smN(f~MZOL~(M8qI&poVr!A@V^e`E%HTC^#h?MpmJJxVGC!_KleqY% zO~um#)~*>iXyr<;hF?@`nlz*dK%gf8!aMOV@|WE~Bbrag+u)A6VsrJ(t~{hfa-$mK zL1)QNLdkq0AIqtm3y0w4+wm0m<#t#*?}SiSXrF<5!F3rh>yv9H9kn`W4caXoBmHkL zJJ`r}W?XS#FfXzqy%3)U=H{gw2H6fazi?wINCq#e_Oc;|g?M?EY-?~w!DzR2CoDfS zu}0H|S=*t*>cMTza1mNF1p4-?U%6(pFNQClGHk%$q$L1?T4*s^OddG;xS|MdI=~Vd`Qi%n6GOg^q2TG)idjMboU!6X&jNP-n%iIWxAcORC$T@!F1J zznYaQREsXtYr?nz@m+k%EE+Uv^56|+r~#hD4)!2TmI)ymoKn7nIQE8-Nk&fdH>QwaKWam4J#xSYh=R2Kjtkzwr0 z$%tX{!M{TfWe6M;n4z8=LsX>+)}vW%f5QJjr=OrJa=_nxoBy#T{oZA0FdQc|29Cfa z3k=`LEG-Ax^1FTymA$H_iY`-9MbSN)D;kxMKtDecH;20bjg;4sC3hV^Rvvb)--Di- zPz^a~p++&r3;u{1Dt?AwWf?>&8d*Fn<+5tSB5hKK#9l!$eoK3%4UUN_UzT8LC}J9| zfv*{|qP7gR4m>WC-+g?7C$dlQWRgfr5<_(SGv>A9kFQ>H{20D|a&ynNZMyet)2as&d#^ip zW?Pf>XU}fc^cg;)Z;Rf;hxJsXZl*9+I0Pc#GFJe!a2Xr~=CZOeeAgq$}(*%fTz)z&`sO%7j{YK?q=<;qYecGbsQ_ze&f~ z_h-=0pdg_N08onpL1nb2;4{JGGr{aL0D*dViZGVg_1+)^5OlFt^%|h~aZ1Qakez{=$-tulc!}kq0cv)zKoV%E!1822Fj&xb$V+#(Ucd2!kSZLp zHaDOa)}vnN%*XxkavJK=>s$H z{1{H96psoGqu-PrVGo05@S6AtmOI1ZFIq28$zY-p52Tf1BB9r3K=khEJr^!MNfEo> zE$^ScelE%@-wVa`+eU!Vg0ZUgL6>ob=;+pKUYv#l+EDE7q^g8pGFd&Yz>DqxrY|T2B|N^9_Xt4XtYE`ro$^c<#ccN172^o+^drACp zkj4X)1%u__a^?AxHOMaclNUQqo)VoNH_20p3UWEGLCP;f*)OTnskB|zMu9G1Gz1`{ zilk7pnW=HE=nQ&T&vGm0;DxD8kGH>exYePEa+PPt4o+)wqQm?F9q)@Ba$g=;Kj~Wi z=G+Qs1_g@oKzFX^<9?Ryn>U67Zx54-U5I~FkSDJ}p3(~__P!n905wkF;Qcy9M zUcV>~*;b0&l;S}R_TDyBim5#=l8MDK3B z8fCCeEH*_@46_`L9S?lei_7E@+jXu|&$b+srmqKkwW2+bG3U9pBXR0*@3-vO6 z;WM#9p0Dteb%Ua)DOc3-D6Gabwpz9FFr)cMNMPQc@dRgZl;PJRKwnv87J^x%hbp~> z@^}Lt^I(h2l!HS>CXSh#SmfNqvX7s;N)8c}s~{27qgT(Shn>it$|0+;l=VU z{P?(a5bv@nz)i+72m|vfM;oKzX8?n^=ePo)q-aX~9y(Z#=M5=9Q;J`GieflQH;Sr+ zQbuNG-p&F@B_it(NHp8mlk|6}O(3dBijF}^;5HDkXkgE%4rz~AH4BWOOk$A>t88o$F911GJ^&&cz*eY@w=c);&jEOJaNTDxE z3x=#)m$P_rj?lN}gql__v^jo4Jo0Q80JqZoGiskk1WF;<~aY2nQs#BmyeT)YcWQD2Z zl5+ep!YZv}o>?Bg2`_;2@urEpga$OboMxJTT9DRn=#af<(K+Kv=)N1q?t%IY14%f~ zvgY}@i3{DI-@=!^ehCE7GyjzqkQodDY8bBSnLWon zSUC4e&D!TvZ~bbmqTMp<_}C_M-_5>}Q0vmHhxol^!~D4$HqM*9NvzO&r5AFWiy}AR zxug2@8-ZVr+;w5dR z|B@xek0C|byD|X3(j>d^xa4=iU0+06W3@qqGn~|7yOATsz{~IJ@lyeCqHzC_Mpv8G4zcKo3yJbCK`ORPS1P4OJ;fVFP*xeaUYS)-jk10Sfl z=Wh`r=v9zh?F%7L@xVDE#Sny&UU@2~q9;8S`7?kgWzvYA>WSf!%Uj~CSHVT`!AfVe zUiL6yW%E*%{MMX?i7Rh4COY|J{Km39eg5{H^XKhgiugQ-K2!0d=y^N6h%yeNKM}<6 z1B>p^{rhT8tEQ9&0bkHucCnF19;C4zTn4Z`!$lExm)-u##X9*C&hrxav{waFDY=V_fe+{@Ygx`0_!qDzr=Jz^ z0~j6H*c)k(LDsMv71Pd>dQoMXgIOADp;*a%*#@)t8EjdvUMX?$!DV9JFy=@&{xw%j!ry!dTk$>};$KGYxIARiti0GQbE#;c zJPzVBL8Ae{0mLZTq(t{4;UI0GmZ-~;NF543W{GA*lDH5gkD`vn>DX@=X&o_DV+pgd zX4T3StNuo+u6sN{!OP}K|iH`2NKwXqBK_@2D2ov%8FdaoD(}R<%rM0LO)D-;`xtC)iC{7D z*huD*3qZ{GRBJ-lGBtXZ^Dk3v;<)6{sy(6u%Y7j|95TyL%Qd00cJKm2HII4~00P~_ zT%o*_&rn#^6)Ne}l#joHQTQw7 znZtwOxA})yR6mCHIMEphIw44?BqRz_vcklZ=vc`y(Xpjt4@Z$KZ%3F+<-4F`DSalJ zz&^oN6{vob`!s3Tt4HHzy*k7+s8lI5yvm;qdiH48Ah}!pP;whqB?iE}?c#mhh(&D! z=*llSMHx3*kMUEMq71Dm;{AMG!6y;7|B8lsaixM#Z+?E>eDPj>3o^f2ur*Hy0D#tR z;yt`vGZMIgih$yV-2qHytC)0~o)%Hs1g)4%23Cd&P}>!#Cq!f%UB&S#`LlH-Y}%kp zQ|*e?Et*5|-YO}eMdYCV?P|7kZU|6br1&gfEB(%9GoJ6QI(y309d_3QYN9kkvH}I9 zb1RZJimWrC%3NZ!6W{zE=CAzwruYmx;lH61=|@$(347*`1`aA~u-0}%O9dO+T2SB*b8+wLb!NQ{+6?!@a0J( z=N~z1y?RzYcv{$bMm~5-{70DgaqYT~bH)ApMHuzR^4}YiBu#6`(aWOXC|*5u=&G3a zk9duaac9y~x{|yBk$q~$27jFJTT}JK6p8G5i7cM$#ZFi+K0}`QLy2ia?E(!;9F1VM zjTh-rwBWUN-cm!dblUbk-7Vcr<8iI^MX!x=v$7?BKKw_(s1hz_^KDietnUz>DQU1hPB`b6{bPEN`)S zksB}Hk~rhc4m=UGlP9%PWFvbpyYNfS)1JRrU*PmoLnAtt-DwjO5q?K4Jl#!|nk*8Uu;#{eYtH_2Iq>B1A8D-` zJXLHiou~RW7$O4}k!L<9cb>_H&qgf`7#&9GC@z4k2`|k8^e)UN1&a7O`HtCgqOy<{ z@e@Eb_u8wFx;>UWLCI%c_Ubrc`iC2b#^#K_1^dq#JY*#-zqs41)eDBMY&UkYbpFA< zE}0c8oSSyzb$1*qWe+(%7*FUod*R@`b1?}Uz8t+($Q(oWS4G@IctY%12bxLf=)`AC z*kSK@8&?KedpaX0=zRju%)v8GK!XtRDIZ6|r@}|dAwgtpq{bfvkTLBk8TJj-P?K$Ni$ROFP?)B8xZi^bj@_7X~6iRR;@83?h+e&%zvp5Y3}&`{&O> z857(0g~x75qaQ4Jj6WP-40{i*wQ=s84Lc{z*&@E1vp#-9^+vUZtipetk6iWFOc?p6 z>sIIxDn%}^_BLO;dU4JJpBr>6dov!G<{%slmxYK(-oIy`<;3Lx09in$zd2FUfnGz% z#wOw~glG|`$b}30x`(pLDLzK}U^dzl52`>cg9^kdlDivCVs083uxxbN8cY7g>+f%L z?DgVm&Iik)!Kt&~o`3o)tkk^MuvTj<*~@b3gpF^!eA|JA4f=LzvSGP~_H8KsQaDG> z;XvY3a$tVgA{!#R6d&+31~I?|G6J=|TAR-J1EXr_Lk5a4naH{)hi@dsW`~hkqLW25 zBHh=$bd6%~!I$Mx^BbP6nGoi3Tj;&vOK&+OdOr;&HZ7WMbUwT*38 zpaqQ89YmQP+aJMpn}H+mrP z$o+q>5F!N^lpCUcp&-J3?D6W!gWtthPaeM%t-&aK{+wA0P`LHMQYfY)G!>u1dtoye za|70dE%0%CqkR02Z{GZPEAsirKYj!doXdZUnzBeN?@8m8m2A<@lU8u}>-BJAd}5_Y z*r4$Ta-`o$NOZ~Ygb_jzU9I8yuf^)b-tz^mWnF;>G>Q-87Ag)bJD*>j1?Vp}8^E49 zicB{o=dt3{h=>$mD5L-v>NS&kjSYso4HZHoG+||%x2RR>C;Y=rIIo8(wn7vvEB)TG z`={N}kwT_Rc>9*9Ro**MdRet1TId2G=!?e)JIRWu07!06#VFQhlhWpLq?zUD4nww7 z+ZD?xiW?W!3{YMT;0eFN9Tj{sRE~mRdK4(>{3a%IBI7COODw2%Kwa&^@EJYRH^AmI zS028!7`jgkN*d5;@E4Vv{j_sT?JX-uPlxE)l2pkdtbe-)nP~0i)U4X!hROpIx7Tc& zSff^C#ppT%SEVeuRe>X3^X0wL~G zg$u-k<-?W`#N}X9j?6#7QICNl4p$G8$$$!Fyzn_@XGAS;y>%vZ&*z5cq}`a&X7}us zOJ_}MXwLz`SLom6l<$1}khffyqes(IqY{#hwA*1*JBy;`E)O?pLDZqWYK z`!RRK7T+EmHvPeYAe`4bqEwHT3EOM6i>uL~TshAe2){0y`Dw1I6-*#2LJvxT7B-At z#@rJ4)66<W9(`{CO3YioVcz`p z8|TkmFKk?nU+WjVoCBlsT{Hij1Fd(C+_`sc&&}%qf>uPn-(wsQO*sw-wodI2F0(t= zPMRSj7PDxX%fnC@#bqg4_i*~aa+S+A8#HMY#9M_q!WQemnZDCvmMulgXxw!XX~*9z zU!tb$RwQ47hqCa-h8=~YUPp%{LWuU#>j3-nurhj3ce5@nbY3AK;f?PU*YR>Cm=$Y16)+h9Bck7R#>l z($;Bp^d=G^+X1y5W-fTQ_qi{+K5$a{`xSrTJ4PIh`guLxvh!|h#;}4*OLbYFh;pmO zqg?rY#C422zIb{d$Wvjtvn*jotfY@C9C3+RntIjJ6#RFelg6JNO~TB7Tk`Rz9JFl{ z5o|5IpUXc(zgJ}VtvJ_+zkpYKVI1^?KVi4C&wPYzpzzsid`QbfK^NICESz5vd`tOy zRLV^Nxd|XQJP8B{U^+&w?C0sDNDri<{aK4YFP(yd97wN=hv(;MhYuQ(b_}Ks9yDA# z@7(NL$Ny+oX3Lo4w`Pmg@blN#e%!kaR=_v6?E2yQYhr=nU-57F*6*Xn!OEmlfiG!{ zgPaTFq>CUBlm=;lFrJj8Xi-Fm|!nOL6>G9d+0iG zY$&K+eY_gpRNNdan=>w+IXdW~6UWtPgPvc$_D{}&i6f`o!+#xJxn53aWL>^#p0sQ^ z8ewwW_Vw@o+<^@dHZNMUG;>=Z^u4#?*aaDHlssYUnI{6^fQ#n=%)bwSI7~VYd?|;B zpFi*8uyGD&?qL%HL^h%zHC_Cus?9lC@%O%G?g+w~>c-BBCJ%htAx$b3TYmF_nn0O-9Az{eYD2p<_ zU{PxP<|H29{iaQuKX#o+94UQ;vDhT#i|!Bbwhybv)YylCkMFJe;U(`Qli z(%p+PT#yS70_Dt7YRLrtTNM>8~iXEH@Elndhph%)bI- zw`1$`J?rqBU$c->P6Z&!4(?E$%~miNBReV{Do5%M<--NMF2Ngkz@Y%W$j_OMXOe}y z8{dNpJw@rz2YXTGd@U_Jf{=y;u;Xi?cu!c67eZn^10O>T#*eLEW8mxFY0u(>(#d^d zoCAb0u=|2dS@R^b^_uXPLqAa8x{Oe!nthIvm^tu^S*CN{AY|`K6 zjMLi>%#@*`sWPfh9_zso;&56u@4o`bT`fx}x*%ogvV3Z_+D}!C=Cfa5I6bPl- zaX1{^JPil^03ptQV*T1$<;)pjA?&_zL*_i;3j)?#C;V{Y)Gs1hYwbfu09xNI96xe_ z0BBAv0Ma+i)7_n82V+j666e!wu-lRb2c=(}?-#IA%bw~6R4sYi-M7v9$A=RgZ;^{#1q0bZ&CO)#>YhON8C4$2Nb6yA zA-r7NvG(*<+~*JYE3WY)oWAw+Iyn6YTm%048f97s&>sOHvvm#{%YItrvBx^e`LH=Ks&!@Zcy2q%Hia4IaqVVW(WpsZIyR9@6RqXC!zZkBB6 z#aRsuQK5_}1k~ulS&>3v`OZ~S_nw~eY~EV}OG<$dKYY97w;87oFUUHE&mBClbfs8k znC%3E@o&-+ zJxG#84^Lii=L50!+ZXVY;Al^Vst@Ibkofm$>)*B_hqk4tkYUw4Nwnu0YgJRORjeUA z;=XA81?K&5wsl);b%kL9H$-u8rYZ>tMx!j4^u%h7={&AWl9#5-z-XTcthQ2zU9LCIfZJ5BK;2x9}cLS05C ze!C?!$A3G1osj|c+x>ICJO1GQDc>CbQ+Mv1lLBBSez$cS{xbueKc5L*U<>Gyc@wXB zapUH5p?}`0msc0{R#UeNP#IzQed{mezj>-Y^6%LAYMK*aL=$0OmJ>Kd4Uxf>=IzQ z`viWCt7OiKLx-u%1VD2~k(qoGI5+~gEqU)SA6sWb0NDsAKQIlxI|ctd{o$T61nftx zieknawS!oGc{{p%{@b7D&99<=o*=epvJ>Lk!DgedEz3N%ez4j!=LL3x-AOwT&;cMF zRpoe388WG;P&M#_!$kj^&N|fN>YlnOX zYRWlK1I_`GNRh)W`oek#YSt;QQnSv1nswyDsaT#|rzjlWogqP33O`YkV-Ssfg~kC^ zmP_ShiiBBx1zFFbnzwRRZudE3g5E!yq4T1J*t+9){JkH%d2k7I`(xd2(6Dyj zb0}=b*RCwNg0FA=^n%XI5#n*U&+PaFXUMo$GqwJ9}^bTl)t!Qi@<5_(}aa>_`?c^ zuTG!N6&6FM;w!;zfMqYyIH$GGO&DKnIXDD50U-8KPmSKP&da2#icVYvvBY9|dMA}M zgG*nOppybB;w!|_(;^gx=^4unb%v1_2H6c~{E;$utU!;B3O)mjb^&AAdwYxKYmlqMb)f2MU(E@}r`3pU6eZwEXaR6ErK zJXk)hhmtnMjQ4DRJ~9w$7j`MkwIDIgcr}?pOTrp)CY8~SZBNwy`n%DO7L(|J^`8a3 zGSeo`+q%_f+5R~jHqM>5VWW_TUq8{WdNUJ-zUvIz!KLMW8YN6xP%1FevU*qMkxjaN z*RG#mWdQ=n0zfPyR%6w4{lOC1Tfy^tQ-CeKdgXFh3;P1QkWGq-IAKh;Or)addeeRr zB3so&)}_0NY~UzU0)0KjG{uC5|F<%{e*a?`-k8wv=pbEWXcpXd_eJN9y~aGajB{a? zkt2S`-x9g-HzCc>SlV=4kZD%(igoY-&S~Fb({flzQgUmBhNQnd=F|7TVLpY1*fj_3 z6*lH|r;>Hk`_P`%F9c}uogs16`^_}%A#xb4$o3KZ04kD;`(T3xUONL~C7us|uUKoWt85JAx zU{rWQI3gg~@LTj@efa)xas;P@PYFlE324g6j&4HMg@h~67pG#OFC~+kQC*!HkLbzB zzP+X&eU*Lkn~tqc{B-)*Uq{mi4w^P}gyqT!!J}EHe)ZE2Zq8^tJ}mM0ihW1cCZ+Xi z(IsiE1e7`+B4o_k^-H2AE5TyaBE~Y#9&9Z`p^?RcT`h!#jL@7L^InpO&#&rVRP)rw z{y)f5m-Ff6mIkKL+cYk1Jw*eD|A(~oN3(Ns#=#*^aa)-C(k5;Fz4az-Z+QSjf%2eJ zOID{ZHUh<4vaAohCCfv7c}tcVvLuk}DGE7wv6n~2mL{>CTR0ooz-`2X@h^W!n?2rSq=CkMW># zA)pX^GyC=`cHdrdRZp{IQ`l25;}sUXmPX3+x(ZuX0s-{FJ*0se0DM6>s06;0wUw)= zoG?L55|p#6dB)8I7cu35V0;9dop1qss36qlwoI-$fUq1Xdowa@J%?Gh~wx*fg!)sdd{Ep^%*{z`1NU_wGvg}M{x<_(=TzFJh-n&W36N9YdY zO2J#WTqwSZAHK#v1>tsZM=9w0&i(rLhP*fW)AHft9)ezfpUoydB~D}Oum+=KDL#eK z_kZJOSepa?w0!BYE$=otypn~@L^_s+wE+bE0T51z)q##yOHuF=-08)ECwS$@#T_V| zPT8W}Ix6%sunbP&M9%oB*SDkorIdD!;?rB&TANex~`KoJIdP;lC`4_m2&mZFd zTmM3PxWEGE=X^Y_be;Yb)X-RhPicm-6R{apSpM^$FTuaySe#p-snUc@k8K|xs;wxT z1Vxhy06;uNo|foW@cn=3S5Op6Tfag8{0M!He)lj3$Kg}tx#xi4DSgNxGant_xaqt= z*c~(kEUgtA~3tJxz zxfoXaf(}^3GC4V)?kIgg7g!Id7$Rtyw*|dGv=;(VmQ|mE)?if6A6LHh|9hVT-$s2g z?c-Wz+bRh95bV%Xu>}YOGgUqXeoyj8odX{uD&?S4AQlIsN+pz{`dg`6^kIFe{iUe> zR%%KqqQ40aG#DuxbkriVCkZNLPf9=)H?Ce*VbT6znv9GbdM`1LK0oMdD2=%@@8BQi zh5g2?cEN+-a<`Sj;mPfjclE`${thI7vZveo%|E&^b7?jmd*U~!M0#l;{oEkCvVKy3 zj?p$RhCA^%<-BNgRBupb<=`oB3(y{e{ea3@K;t4h|U{JUa4fgxL#I!FD0Gas} z#p&}}p&+lpv#7=v3K;}FUMO@CT*|?}pqcU0D4LOQl-03C2Cy)VSqe$`$ zr|u#ju^84Jk%tw+0$8D*)tFQB`N_sBM138Rs54t~L0x&XT!*KLC*CA`1Vo-MOCb&i`IXRuL-V=SR|U z{Q~{a@PnuPZu!ym>bKty5mnLei633Iesom)=(6=opubM>n?l|!pYnsl$-ea~X5ad8 zHdhJNX(_71%L_Fk^=Zx0*z?04W9z89v_7rbVbOqTtDWF-Jj7`gsZ!f*M{igff`Ik^ z%%W9lv$HZc?4{Bw5&+FCvRb{!C`^(a*(gvXhp7Y(1P<9y0+Pd>v;57F@1uh~PFEFV z+F;HADU=Ap6Buy#>#vXCGI+nquy$+hxOUB5P3SoE>^o|BZzA0K2#1z0J1!9Oq%(f` z3=#8W``3sN$Kpi;+qdcgX>Zq(-fm}@DnBrp!*Ot=X1wQsxAgd~>z&oEi;RNH_1^&; z&cy>b3PiV_7k<<(2s!xGy%RW&nh9u^(o3`vuEM>=?3EeEkdu|5Qf+z%^Q~$XRUa@x zc2NTG^S^;*|iMV!Ee@a_&QgB zbp4WD*t;=n=UNlg3k#fKd_b?WfooEY)x(S&((CyJq;9!;7vcaj(a zD5nOgHL;iUCxG-q6Bxwzf`ia_sb6u66WCQi&4_ zwumTg8?F^Mb?*Db7%k6FLO^~dz-ISBzsA}qgY zHb@sh1ehlWM3yd|*FA#VLi4woFeGO-I{&a7zDE* zeB8eP1*26UA#+W^v6rM}P_ySJ=;KZCf(MCHE5Q20MS1g1|I-D4!b=2dmUsq6tjh;K z6VTwNA2NIiXmFXVzzGf34oWn572zVm-NU}_rn|qw zZbdXj_gn5nv?jPGxl_sO{)9fby9c@>;-+!mPwrU!Np^Rqa@akAzB$Ex3i&ll%XVkq zBl4z~JMYl<=T30hn#Z^j;}9$jfcT6>@ZCU%f6wzT0rV!jIv|C<$ljUl=74Pc z*8(FPfWd+=ch~WCnHP}jZX{l?u7}Gm!Na%-{b3-3&Zsd!tP)r_JE?VCyL|r_?LrP} zyCB~#_u|_XsYSnyvP>Lv0_LoTCr)A?7&X<~8F&52DT5(_~vW+M-kbD{<`#q@h2Q7wAHSWVQPcq&pqSb+23Y#2)i zcqJR`b@;%UGpIfpYt%{T@UdmVh{L0}kz~%>#m4+N0Mauu=AOVCOy$%Un_l_;AA1FK z9*PM@g7Vbiz*XU5=@kYFA(u@a#deG>cQ#3IG<1goouTn;w#I!$oSs*dxjKW!ky%n_ z43@@sX>kyB&Xxh7Ng#7p3Iv0(a)5#`4xobxJ|6*mML^!2!^cKs=<2U%YCP7Mb;Xxm z16VYl=Lji8s78iTJtk7sXNU$K&3YUx*7ke*N;m^2uAXT;<2q;EH1V|X>aVhRtSDR8 z>!7dom{9hcyLcKLyLcK3wPv8vUK7&sL^%2GH)xi1Jp35|L=i#~&CT=!fnb#Eujt_Z zbci`8EtgitN3D4K+25dH-@vp|e@c(Uont1tDtSa8T&R^&5&0hMYCr*OL94D{H zMqOb8fWTn@9EOv*3;_{fg&d(|GDOf3FLH$OAV_{vZ}QTDia)in=;i=TBm+voyJ!o7%y>x9RN2k_X!x%WElHk-^nGO{U$ zV-F0p4k0*#iD-s(eBtzmTUVh`COZ8>Su*j6aw==9lX(vY;UH5Eh=^3zcz7;XP}XK# zN?_>cJu1AZPRjoRrGyKYH7>9ucvqI1<5iFl?`&6@IylyLXzUk=MqMCi7HWV=%nE%~ zWSKObnW8R}{d))C8bm(|fsgIh3YxlXKU*vSftI*|uuD4&lmS(UmQ*%6hPJ#cjp75+ zAyS_2bEmljoOW8`BcP=vk78&dT*BD`^xy~~WcP|NnbhK=X%-(6|p9@0=)^VQ{yQBB`=@2d- z2OXqLVXI1|N5`lc8KcpfN^FeQ%N5xe(Z&bTd_aDTIBT}pG14nzBuAB|p{~-mN>dL; z>HVdtkFoTW(r9>bqo?O1F(nUNBptZISh4-M(Ii*9f!jVM6<>joSAXx<<<4K1tB_G^ zN?;+I;)d5vz(22=13m94!zMV^ZG%?rn%{U#Se^aL_bbB|zoRD^HdLu%qfJ7lP)Z#( z8}2DR@CJckfh;N~t;nobk!7!x0Bv%$%i3`jm8>1bX1=9b&uY$2cQ1-{^6F00d1xk& zS>zG1UiLxtB1}|}YT^+{polLo5AkDB4l3*6!?~hh5N{qneAOZEmBZI)XAvGM9`i z`%>lFmnzr3RJry|ps(NZeL`Nh_skl22Z@(GQLBw-HdYGuB3@Zmzat`oGPE+6tisPK z_*>VzZh>ecemH59JL=}KnGv-Xcx9tM)mw8k2aP+lEQ4iidI2CllFpGnH|>IK}d*2!QA;HV1mz5*6)T{9d)sCYGV(rq-5mvTKQ_ntQ0W1wJtOWHsN@Fx2Q; zDzJtQ-$}>QPrw>|`k=r+y_Y*ws*rb(Srh&9M~ELaF~Acg2lEzToW{D|?7mgo2lgl;b^ zKS1Hss&vb;&0CgQ7GtRDy?vizpLfAe`HY7DA2;Y6A zyNmCZ8ayNrMn1&j0&nbIk{i^kXK?P;rPo6G0U!{M)Jsi@wiPH35io`H;4gsIB}uu0SA%1*8Z#f!p|)N;p>9At21$RTRbn9H*g*;RARRij8<(Ci8} z6&<5==9pY_OjLFan-{C<%=L0fi_DFq6j}q`!$n|2MiPbM{alJ?-_xjYh#JY@DI}th za-FdRl?TV}-8+^l$HbUZEqBGcCwiw*SJ;_pBYLN%^chgD<+P(Q-f2^(3@hE})F7N# zN66|@UE2T0ch-yF{L!vs$96y8Kux}Rvo33{_56Z0b0@+*xb67)YZstubJoMNQ$kw0 zq`HR<8=`ORhZnc3F|c2iQ9(celZgjym-Ggd0|~Sir|j6ciRvA%kxQ?QI6f|Wd&-lI zx(ge1N0)+{Q3n1z_x3i}fCy#ZS)MU(vKl?lD;9%!AB16Y=8-bI107 z`FsCSb0)#yiF4qkDM78BQ|P#RwDiZbS|ki$a{Rby)cx8ol4{lerpS1cyL{xT=%@9N|%PBPKfAsJ|bpZaw)0?+UC@AJA0xE?_FR;Xp3p?Q&uy{7!t&5T|i5|4{^p<&&bB42l*Er|#nS z3nAF>4-7(Q(4mbRZd}Nkh-bhd{;+-i+iV!L9>0IOZV%4;=IvGdNu-f|JdH;7|Fw<2 z|FwEVP0BWnZl-Yw+4%L?8rs2stR0XaT0+Gu^#ygEE2 zdDR}dU;=RX=!eh4!_t0MLp2h_f;u1xbOnRJ6kx6&Wo{E??h!@ACg*X?cC?|>t4|dv za?Nh$%=u^9P)7y1W_PxEoovz`L@>~6c7L1Ks}Rww%T93SFuHM{*AL{F={yVXiu{WI zRPkTIeFOcK)nUZRk*U#@Dn`S{Ba^$2N{g*nKDyDUCja4(Q*matwLq*slM8wv}VzD_TF$-_mFJ znex8)ijuGLjDKId{>op^3J~lE#aISM5%&SjNb`##ryrkv zR+vBKZ@ZffbQeh`vWJ97vVCB@WDF;JC{}{;;U)=crO0q0QXr9Qlc!d|QO@IgG^pl6 zE~u0%Y>u~m8s&-)z|O*21QYAw2YG)Xe7Zi2D5qau`=Zc8zr4=*8g6(m>?v+?gRSuf ztaq8%t6_C|f%|l;>RrxTs9#n8GJ1w!gZlW}ydM!h))1DX?9kbGjdVck10ujf07&mP z!pg7?)B>G2CI1BQv~#w(KCD!kerhdVBOa2@kx%`hdnfd};S7U-eU;V{>UN zHaCWg&2iO?xa`#usikD(!bj+w|Cix8vX}ouc#dS$-B!YLl6U5rGkKc|f^z_Y9RP@T zSf0EeXfKNjIzXgYh!O~!WiJ6LjsUJVj-Y_Q&|nYNVLl|SNlSz&WR0b%f$@>?aNrr_ z^9p+QpFDK_=pE1}eCrat0e0+Ff7mce%psZoyq1$Xum7re=vTYTv@B%3P-FlNdJ4rq<#~sl460<{jm#dY6V7)=-7KH9EES;Kk$3}V%fQC*S@j#l*|l8 z`&>9l(Lj_nP_6p!6vgS8e1Tk}U0aP#N?WO-Z9V=(1vK%G+4CmeHb$OO?Y4ECXOLpK=Vl{GZ`QcUCX{6N=;64CAi&|-VvP$7b zyh>A(^dSQLuDmY!v)5&uA=RVrN9C2*#n61r&c9XSm+bv-l-GqGfX>@ymAAkEdV_zV zBDPmVd9%ZvSQk-+iH*q|yDn5}JW7Q%8XZw6WI6D3`zZfG@itC{C*I&qEtd~Cb7sKu z=CCdaDzva7wD9d)>u~aX3IzE8eW_MjoWl4XC-O!Dhrr|-$h&nE{nU+QuoQ5d(q}5e zslsb2r?|o49RDSBbW^+GR%|y|`Ao4h-Ur9L#4oEX@0*j;cX?ST5IX={FT)#W&nlTM z-+l|P(lM_GfMz~Bfrs)Ax)PLsj-kszgOmhZmR`%!Z@G9fU#d}dfevbHSxIduNY+|x zK7+&2+LbWxwe=g+{uNqChTA*SIvGu~CRp_5`^gysXsVw>+bCkOXM?Z(5w-{Us$E0#b+C^ri-i0E$EiC0NG+3qRW z4RZiccf%&O8{VqB;Y+p~c95GHtWstVE`rYOh7#iYN}&un3PM`6gbU9>d)KN`bx=)~ zfdkQFp{8~EX=?}xywyU(Ge7=J>ys+y6#&vehPBPIX%!D{DzQ}>o!YPzNP{2n7NmJT zkmmWoCy?g(K$_jm1AYl`GJg3DnA<)p9>vFy+TAu zZrLE3h)aA(u%>bH&bbxKpV_-;fjl*-Cw5=oPiQ>00d)DI&I;(U zz1j`vwr=mzs%QRi-URjCPQUzcv)7MVM!564kt1?OOH?-l$o|@Jz|Ttmkc3{y64zHU29_Rfw`R_SKZ>Iqjsj$QWwVn#%Zhbp8YUGiR#D*1X%o=8TNIw*~1~WCT|dDc7Hk z?DwjaYrsafKN;EXVs-NR2X(}WJh$QMF@ct{=N~6F!Z?6Cz_}Y%j2nCA%Q?vc85Hms7v~ z)fy@un71z_Z4SPdn(2W89Of8c@W)d7W-Y5U?aDCxE4DV@aA9f3uY{|cm${{{p|%(P zPP{JBs<7QMIb37~`Ef~0#dU@TOBB7O8`+1gm=E~LEkX5?JSoC3*^90#dZLv0rkLGim zlc(G#=P$7YJgFr>FXS1q1UzqfQcHloaErX4oY*`+jy++dmzQEwGrv+HqX3$6?q;7o zsg>UE-73>^`178kK7l_ROujJDbLkg9&0C5J_yy?M7)88@JJ^}|2mnC6ha>Y(kk`u- zKj9H3js8?#7pCW*VE&D!B4+-LovMGMWO6ap18A@pPpqDv+#S*0(n}zM1b~F5Ae5$- zcT;L44wqjes)Ex?61}i0aQh2N!N~~-4yWp)E3X^qizI?@bz-Tu2#2HVr+2TdL5tAW zZe)!)L#BHeTB??z@81=DYn?(ms@9-?$7Xw@?8IifgoJ0l&z$P6^f{%lf*ox=wLQ=i zL~Rd5Z4a~`A+?k4O2^fnDucuN>c;og<6rw~G8J@|8X=b5nKfeE^)(E28WB@OAt6v| zsYh(gpT<7I|IE z-v5{SJztYG#8)2gsZ_jST-V+u@d@*lc=i99TE>^XrX!*j8xOTBLJkXxk54VAHqI9z zhrvqqap`YubAcS4E(?#*_rv0dBfSBK*S!8FCk~Ow7RoSyZ0!w`M<8L89eS6h2R$lSL?H9W4xoc<{Yn@Lx}7Js5p@?S#3Tx2;PjjJlI>fZL0U z=YAe|a@z3KOUGs{%m5G!#G}O0WVU=kvh1udrIQA8cJ}|i(cS{rXkWh3_9Uc&i*=6B z7vkaH{EXi|o^fY<&bmqITkw?)#GNr3>vi8>IQOF8sp)C!SB!%p4jFWj4mfB6cSNEouw?V47cbvU69m75FNN{dUhnNPkQ9LkA!O4J1^eOeb$Dx!LICZH4Ws zPTo}Xx6#SlqCzyK6fn7zRJOM!g~I>q0Hgt3~w zZDG^i_Rb4rC+IpyPmT9OKOm|mT zS*z?WE!|ywNQjrBS_hygwDt;+Q?9I2cAnNQ#Lik67EjL`n!6bn8Ex_+R(WVRZ8B*w zYWN)g1L2Qw(3y@Y!v!%h$16$@pP$38@rH%#GH1TMa`88Tbm1jLODAmFUN2+Vxu3I8 z)eO8|RO;fr&}EMIOZF{afgurf=CZap`Jm!XUvF~bT_k%*61)}bo?}qevsYzb z<(C3SIcN6g400Qy5sgv6o7mzJdbXq0MsY6Tz`0qOI@`6GiYsC$dK8KPMGfPWc; z#@(CyXNw^ZPCrAJT5p`ae94^cZ6xGKi{wp5%|F%dJ{IMk$hiyqUFx^v8h&k#{o7^9J`q5Rh9F96n`fB zEfVyW-EI2FTrYMINxou})-90Eqp5VDLhQyl3j#SXpB!#5DI7x@wKraD-D)Bt3D6)k zlJ=Uyza!Odo6rl?J$1Ao);U6L58}<^$Wh_9tL` zcr*iTlvfJ<+sxS5IQD9@Oo@ zDjqmelvDcCo*pA_96x=V9viRleGim#5I~SX5Tw;uu1Q~YrE%UkzA_E(Fn8g5r{N1( z1#qgD>=odm^v*ViU+tWFOt>KmA`>d(V>W60`#UEMnLy7)uSxNxPvCE`MU z?N9XX?*7y=p_f2^YMJ;?@u!xF|1I($ucz-wqL+O7j{Wo!MJ@;3{R91p$&%ntA~{C; z;(ENuh=?qt2NQouZZd1RDAqaVR}P^GcjxUsA#a00jEGAO2IhkpHuvPYB*!~hI?YJ}{K3c`f!pkXIYMW?pX{l|ZrM8Lo ziI&gpP<%7i%mQ z_|ej}`H+cZdB{|T{B&&l0SAQ?k5VUEgZqp^hj#Dzs!jH|U-299$T0xHXrg`7OzRNP zST=@+@v^aqH_DMWp#bM3kp0v!n?w^d^b9~~(yH)5FPkR2A!ONt->*Q+q0`ofv#ZbA zwC7GQb6WaJL5R(X@Puf>W8)g=y%*~C!+@-g^Xg%I8&Cgs6k0WF^{oS4y3DyUl-8Ha ze<@rNTYv!2K=up_vaj67+YMawU2;}Y#yqGnoHQ_oh&1iz0&Qvsn4cT9>d_e)WPd20 z-}?~%G5WjtmLBDM&zrtx+cea&)A->l+ppRQtNas?@nJ!o#nm1j2;BVuKoFY$LTbn= zz$D2Mi}Uc-4Ikt|MG567ww#M4yCJGGt3KXfWi5EvYz~NVxHuL2cWpLnxkH^Czj6ZA zpLQK_Am+=uyhc5Sqg*(QZ3?O^9XU?VhX(mCsLz76(#yV;zW=9I8j*b~d4&P)!K;P& zctyA7X=8|nE0^_y;?I^{2OJ1f-b(AC-Xl@g+>Cvb7SzanEm|zp=S=*0`DCS*0mJ36 zvgK$S`CuP6-^G-IaP}%v3L?Um%`>9-QV@I{ThjO-qP&N*f|Mj#OU3swLxa_?gdK00 z*IYl7j$Ic&Vu1kv+Ui1GiR1=Kf8DH`SaO_;L@>6Ge=H8+5h>4{PvZ$^*#Tf zZ_cRxi{^|TH3_XllNIk$Q)$m{Uu!jE?dEgQ??a#+WR&%xGR zCbX;G{TThL;V2NfqQgJ~^q{!=&1k-uE`)#vaQ{8f>_#GeZ3&t$T~S_}0s8ezq^)$t zgN2O%unPPRK$ehDjx7=P9|*JUF9&23?mu#L952#*@4^n3RNf;^kHlHBB5< zk2uZm(P$YeAG!@n7LNARcs81{Y|hAjmjMKoL@(G-0}8%}KkMoD07p?VFsb6i5d9j> zs)5PE5!h4oYBX)};%R*@0SLnIb66c5BHt5O@I5SvR^lQvHs4~V45%DI zg;z~s!KPrfy=t3TP*9A)gL3c)m`;Ck;7UA*{PchuG6W~qfmL~b(>}~YCKMuE1Fpa% zJGoKd6JQWA8>Lv z&Y=aUuZuSeUyo$3v)>CH0kg6Yg5}Y-WCnd?!Npbm``M0?eHC++$+&e~TwK+vw;F`xQtr2VbN)Ny3%U|yOw6xICgE!*HPpV4>a^5 z6r5=uDg?{y!+2AJqU10SAC?jnB}e$MROSf!uIzFmhpek&b6ZYl{vy|0MQ2XTrG`gC zk<-6gh#W|q>H(hzK9UVS-On0wr`y=Z5JFk09_hzpktFp?K?DX*a=?i*qA* z%x^e-=h(5^=L-|2@7gt|(U-fn&(HI(BMz^V7oXI(ce^G@eR{WTlGL|fYx1m58}w_7 zzP;KtZqcuA8#>oRz$z3Z90D4k1LXLWkyc{!L(d@?3S(h341g#d--D6qD1xlp8J=(^ zfS?n|L~iQmD11ZEvIAJ4M;BQM=zB&x3Yp#6^XtETFyM**%<#$QDC(Oeau`~S1GSqrg z2m%mv0YDr;{PJbMYB`wcCMDGbEu&QbEW>AV@R&6kl4F5Jy41^1A2GceiJld8*xeXt zj4}$z*&fJt)tXBYZZVFTgQg{hv63ed>?AcAw813sNL8`eNCE|CKU|iAiJVuaV8Mv9 zg<9wl{Pezg=_*LrwN2cVrFnPxs(9dJclq+=nTPXUtf#VjJIU-5 zBr~fuyG;&NGW$YxMAC3Nugws0t_gbtD<4b?_@C;Qv$Az^uz~5z!BJdpK>%B3rJ~GU z9E^yoZ%&KUQpO90E+eo6mEB*-I0%*S)wtTBF|cuiiIW!@UR=6jf#a_JW>}PS^;56Y z^XJc=aZT85?OD6F%Syw_d1(ES6Ua)+ew{uHHTWZ5nx2ul5Rr3YNB%1Z9n+8Fm<;P6 zwquWh07%#A$T8_t4paiMpc=sP7u9Rf-h4q5hUhhfT_f4G9J^Lv*XUf%J}Zg)#{tom zQlP-GMJV!^9G*0u<+U+A!GX~NX&9S`NaG7s{`s=!{_J@GdruI1PY8P+#-2y8=cU>6 zvh>?XtK~|_r7+1^j#X|%Dpln#*bQC8B>#piVlDX*l>gM-FOc7OlDUZwmFN$7O^6RQ znZoG>Mn^_!h3&s~Jkxjfjxt}p>36jK^NvURzq(##^R&LFyS!I-9$A3j|LdV34sz=t?2^K2##fIrY5@|3;;ALd;>OaI}uPMX`dHQH(!kp+Q)fl+}( z76c)Vt|^ewRCw7(bc4ML_9zh4v&;h&csUrOU9iv!PZbYt9of$?cI?8mgLHY8XsA48n9_L198NS3-v!Kyqp+`ukG4QbDC?_c=-hb1?aR zFiay(cDuTjK{_fCN~vWi6xJtm7)zuIqa#aS@nCOY!iEgl=To1Ovrr@7ME8*<7)FxO zqGMJC29ux%+2jc~>o@gD4RwP(=!A^UupHP#w>+lYmr6g3! z=$7$zMruZt@)>`_BQf1FI>G1d0j=;1fIv}>zF;7)MDRzE4WE zsx)(68dpa*6&O!CrX^=~C^Uw`NU9(N$CJWV`JnZ@3mP~H4(__{qywuW8I=FK=*zOR7Xz*WDbL~Tsh5~D zE{f)JnxbT2g2`OZd~#J?$i&V|XIje6o*}@POSgtA>!k;kUbL?g2gi~F6at?BW@&4X zNK>%1vGK9whsI%zS|j<<$9d>uMPIZS|Fgg4khkRD=}+X}$t!};=Qh5y%>#8#kyBQY zAJ_@!kB~>KB0tv02Y$!JH$$0KIMfAaAGF{;O2{VlGWy> z2qvIsL>jDM10&V&pwuBK{{@sRXx%c)qV>okKosym$bax7LLdjg46-j4g(#k~U ziKCMu9kErb3QGSOgQ1$B7>x38_NiOsAM*JXdf*R#l5;l+XT#2GHtkr1H$YGP8}wW^ zHw)eS{o1!L;9MB7bitG?2!II26Mlf{#1i#mcIX%2nCxGzx|;I`*iJ9au2qYxNfu6S z!qtQyW_-$SPSjL5T-L3cTN5`SndPYS2Bx=Y;|v$5d+1=CUjssAErRlB+r~mt;c~b3~&7f{O)a=-f^LEWEursk{Ai6YA3>da}$J~a~b}vb(*1TWq#x43b zt7au;CbKoS&({>%m47jN4Iql%5e8{!oyB0#U-nc`mY!6nu~|q#_LvEc3n;pfsK5ez z_N0b>QIRDhk%7>VjP`gv%l~KCeL56E0d!xBuAjZ#Ygk%$m^E{3#?9S>Qy+BdUn!!$ zVEpx^zd00z$rtx73qOMw4eqr%9rbSaZbD@1W?uo3W=?7^N~eJUbRdA~-hqnl9Z2(E z=v8Fb0zEvEbSRQrF??lCo{^6ajVe_aRA`$H(F81k!(tf(E>!CG`Bn}N4`SI5LE(i? zc6AZ3WumTvcy$%1wSb6bqupX%h5B1Z<-n@PENj>0Z0_E^Z8GfMu5EXG{JM3&x z1g>3(YOXnXY;$r}&asVBufc+ctg86Pv7#Nh}%Ki|qm_9l8bcsbbymss8e%Ri|?$pM2| zx-TTogxHarW$Ws9J&e*RyJYvH5A z#tUV~!A}4{EeaD10013No6Hbfee&OF+DHdM zBnku(XgU21+^T-&ApHy<&S#(LO+M3D+Cn}P3>?rR_L=GGXLixg@Zc@>nNFl_R`!`t z5U748Nc~K=;@Sof7(}9xRiszI50nMnWTR41*{CqOxJL0zrNGsw)?5?-d*;dq+<}f$ z8jU<0ooW4)$%g_OqZOc|8ukM=Wfx;32}-+0^0sPj1Gn|~a*eL?$PB23fny(&I*jij zc(!2u`gsf2i~bt~+`Qg`d*iBS7%SlxcvzL=_`9tz^l!I^P?vdZgKpQY4-aa(cOJxI z@#VzlWZ!5(Xf^t}-E0@eQ)eyj zco(?up;0LO9cICIh$Ik z*iG%%U{ne2K4JYK{hb9?hyLPnk^?f57JCG}hzI(b*n+gLJg5QEWNpn_?2DKct)*OC zpaeCHVa%!4=@TVuSrrc1tFRbH5DzLZV{==HI+BS~nUNHJra@AZ&d6$0%E?H|(HtL3 z7oWx$u2kyK8UqkrZ`x~KczhJVd^2u}7HW*Z2ohxEW#Vx>96FGMN4Thmn_X6+R0t3! z99ac1b0h4#W!)FmJSqmS$=+C_t#^3b;lZ1B7?!wZOFp|!8W%c000{Jj-lDVcmb9T9 zSR(r?NJW1ZqoNv@y8x4^jC746yPeMrHw&uDNuF>HDp%D@N}sSvRG67$5DJqyD$au7 z0eQkD4~8lfoz$UCW-QKRq6f8+_AoL+OQ-7dtESJd_Nz3#PU|L_bz02o*MDYg$Tv4y(%zlu*n%Sf^c~zJhT@8h{2%LIyXkeQ_RIkSK=;|o6dGOQ|Ljzlc zl6$&aGQk?*zW6Qhq}(f>_9Wy~!_u-VOP=SFs2o_Tk~4GolEaN`6k4;$lNznWS{3eF ze_Pmn$Uf-20{4J;RrfLH@RQ~65M1=Ox@ANDMyRQNZDT%_Ewum=z7%VMezd+rBKTr8 z)WZGwE3IQdDV~av1Dh*cDKh~S9*Ql=XG6eUa7^+BsqOV3cHPS>aO zbXYY#9gTx$Z~{C-XSQp8ch~{E1`Z&|CWfr|5DzAbEk%@E5JWDFyvf|Vp)`# zA**C0a*P3dCW%rkhSfQVX4YMd4VH$w(`i1@)!n;qok-msI4Nz+z(*l<=Ws%Fmp4&`_uS_dhk+^$K|QICQIWatz(T-4N`hu zOZrfu(!^$$U%asF-VIM@_l4ywQg6fU!K8Jhv7`4Mt@*Ju9d{b~tfDb8pYwVflbpSGjP@A{gkeg^xb< zAU#jrd-99&c%I_T*0j~=K{Iee_G;duP*-S3deJbbxSE+w$xYLOn?!PxSnMV(Pj1T7 zo2J}pV(dZ?1NU^*r^t?Apm{G zb%`ulP|3LQQqzRO$PHUt%7YhKPMV~vW5@tEuQPha@#Fn^b?h1#9+2~8ufD?vLF1k_ zKU=0!owe0q_D{@Nn(#(mvn{e8~=r z2Q@)m&=@3v_MkK926_<*JO~UUYjZr945oouU>;ZqFUq<_i`AMefQ3i>*tHV7)?n9K z?Am}`o3Lw3cJ08fUD&lJyY^<+{_HxGT~pb047*NX*D35egI(va>jEN=YAV`)1F{Ah zP~X7h#zHxH`~-5DHilfLR3jIsnhg|2e#Hr=0zaHo#Yb+*U^3>GQQ0Y48ymc3imI;% zXgLR6xYjm5nMQoekgue*a0wTDc8tw$YwEIVIN9Es2j`MblHSsxsi89u$u$qiHTTIi zC*+dFX0DxUZlE*w$TfG(HFwN4H_gp%V)OCNx#n)U=3Zn86S`lWxdltNZN)Vvd$i5% z7&chrb>^A5<_T=bChN>|bInuez?rA%%<0U`U{;2@#Xa>5m%}LcLm}@UjMf)a9%r}u zXma=kQzke))CZIJc6cmhhJ!|;z{f;-QbSPvfi}-Q>2FDX94v6wlAmy!=fW3X_UShj zO&-v9Dyn8CM^9F%1veQ~0(Cc+# zxdWo!pIn{vCb67ZWU+C7rC>*J6os1l2MFcN;RVWJuugUNxdOGgkQ^9*l$?6P2_;A| z1S6}~*VK|Aj54Dd0?P|dA0NEiS7YmO}cJhv3LWzhN_kOqH1!NsH<16 zHWfuAikjAWmGdeKx878%<{de^$<&PbQ=(%MW4hOn`l=fjWILbrh?ek^c^52|*NT2O7x&i_=hxQfKS`^DavL zm90bEd15mn_WLoCGOrq`bU|5}>GRjZHS^OmQP#Yf;`|vRtiNgBo(&5(@7t55J$>-N z*+T$pMdcp2h@Vh;AfU)sC^ais$i*|T9np_iB< z+@JK_z3=+-oQqE}fvc1Wh0E_GO%IqcaKMy_@YS$8=7Z1h4+;1TJ}qTx;n<|aIy2TS z8ZvY~5I~RoKZL!c?M4s`%7eZ(Kzx6Dsb4mi=(X~bvNS)0Tx=5~WudGOV^Z{?K6k1E z1oG~daIQOQeGyF%tB=71a*&t6I-?wXh0n>;#l7408u2rp@k?5-c0Im>z3#7_K4dWA zK_5CbU}SQ)VJRn5h0g6~M?@^^m2v36s@_W@BWATz-2=rBID>DC;m#q!#&jBCk4W~oN4sJl@c#|CHPUR}wx!LnlQtY}`Idarc zlMVz6S2KP_$0l(K#Rfl2@f&%|_A0lcN`=B`uDJ+q^2?QDO$7_ST+ zMKy(wFITSwI!Fj!tqi8xBax6|%d|r5{{1=DqXMdP&UyyU^o3a&_#@Pe5DZow%!>jL zv>>Cpp6s~@ut*MyEX|+Y{`QrPpqq~xcR5Ar*!IIykYr^&fv+K{K@td~AS&c&bK?zU zH|A)AygqFRrzb84I^n~F9epEK=)Lt&5cqrV)I+G~pCrvu0D_wDlSFK15t zYMDMHbqao!hSv0M+ongC<_iw)Uz;>HJn^g5IR{oI_3qW>9H4y%K)6c!?oH&DqmM6N zk=Wl}ZkZq_w*(zflwU4Pt)u7~*$dD~RpnOEPCx>O$XgG0_fH<#ZQRV9cjpd&*Lw{< ziY8BoS>5K>Zapw{@Yb6-D_ZT_h<{PMcmQRIi-88z{+E-2=VOr+F~)5GB+yrxD3gdN zLs>ca5Paz??C-sPD?KZElXbA0jD;)krm~EVMp0SjUz{xCc}KnY!buJWP?g z&=5U4Q}x2`yVtJVNB6E?yCdYh{B`{BU*Mbf_#Y^}J^TSm7{7Lhjq!o+x9@;$00a#I z5T249;|LnqlkLQ)znX93HOl2%DPX0ZyUnnt1Qy#6TDnkJ0R$e1XMT{Vu5 zxGMmnKlzIepfZ2R@PD4$p#Z8|5JuBLDU3!2STz^7w&0Grs0pfTb;1MTCiIeie*^$x zW%B*bpbh{1+*otp&*i|Xe@xaW4+7B82S*JkYyk{q|3{ z0lE(lSWj9H!DF~SYKrQx%x?gsH>5=#poi?{Np&$B7G||Aye7dseO!}^7Hk%rSSytW zSN5Qk(24e>7t+E=rH0OaXZQD8-@3Y7Jc_^Dhw~uBZ};LmM_@$DL}5(ctm-X=zMn=2 zDH;(}4UPncBpBC64_5Mtogce-``jw-1RDzec30Ar^IigsDfj5IPRuZ-4Hu zQ|CWe(#NIEngFYs+y8ax7Ji+xdcovrux!hYP0IB;ut>hVw%6cJEo*md*>_HtWjn8J z>NmU#J+J1m8mQ@N-G9bf#bUgYZB&jQGJ6g=cM+)^ZGg*0E+|fGEXp~}EGY_ZE1-En zo$)Ugxa->&FJaI{>$AT{&7C#*59*~C({pw`>x2WG5HVN#45Pdt`Egb9=?G;XfEEqWodWz?$?*p@%Cd{ zizjKllft;-M5P_S{dkkgSz&8;=7zX1*2dGcv-J^P0N8?cE%58>fByO%{u%mCoHJ(( z{+`xk71J;6*mW{nv=tzQ!qHy3#^nK6xgAG9_$T+l8YDZqn_#s8L?NB_pHYd&Cap znG0yfe-Agd+?R5&Zy6v5CZ&+lE2JjMYgwXvydq1#TV}CLgXurwU!6g%}FcVL7XhvXA;>dZ(;f1UV zN49k9HyQXoVt^0x#o4r;%E6t+FsDkq1$)n*MkgSMPh;dG7?G8kn?K;`#DA~(F{ z&5p$AMt0PGh13FKM~ig}S(IHZ@K5YUM#_o=0I7~C#)?^_)xBgVX2F%POXX4wC`mEe zuBGT7E=Jij@io_d1r91jPs2#Ii)o?o!c81cvxLRiI=^K6j-Mjv{O9FA{f;<^WS<1`sYui?AzW7;)pWC@2=Lsjor|r?*dtf{}=d&Q6 zwoUi__nv2$Q(+F7Mf{qqiy+Y3rm&vBz0T{dHK_91P2_OH+9Ek`28Q@FP}ddbst;5W z*u2yPw)l9KyB1-is+dULS}B|grK)H-%$wnq#^A{HHV zg=xDi@5g~nuEZjk0>kM;>dj$!_>clKXyyf(Ate=_yad0pp2y#Oi{A*)1OINpzte{Y z_?t_pIZCuH7^kf__R*uUO~;{;KwaN6*@+x2LyeZtZ}heE~5dT@yh8N6~4pZ4_;(}^uLsB1R>1W=1y znzH%P0%y=q7Fou&iXar3SL)y81J3~Fq%zpar?lkg6Zt^212>h_L?J((^s#B)UxI60 z>lie*E`62>CuG9Ls|qAmJ!S_b%Fw})uOnMx|BGNBgA1^a^>VBPZjhs{PlhKHE;H?+ zzN~Sji-L2S^D-$L{_k**CbSudea92F`?lebGc4T$|h5TsPac|%bI&RtevGdTMrF*c%2zrJy>OgWt=p>S$ zCJ~LBpx_1FPf&+{`_b|%{tM~|aKQm4tllcbZOhEuCVIJkymlkcb=WXh>(%RduA{Ao z@LfF`?zl2@)e1-JLZ_7gK-wGeFzJnv=B;>{iuWQg_W-@&j(RSW%~Nnx(|G{P(sAaF zchZqCJUo`#glCcnTib0l6vS$ezsE zfm>FEq&x+_@z?^dxIPrl!)t}PczMR!Z+>|GG=0jXsaY#6#0{|u->IB?{^ZGwp<}0y zt75$gAUm@wkr@a8Q)MAAi04=@q7%A13(TIhD-O`ahl)kMzl_Hfi7~ zTwC0@WOlj%jyrY}Mna+6mJf5jJ~nOSx&4{)*_7!3AP@8EqJ z9PZ}s+&p7Kb+KZPR!#=N4Thb0YOM~9!)Ht%0f%k9goL-a?{9yPf?J_@5;`J(Vw9h$ zfIE%q-91(D6KEZoAJGpikRh|k8H|sY_q+>{?ys6lC=9i;D$>)A^1OPP_?^dTdtCN>2|G_!1he(U?=vOCSlwguaTeWU%Qk%TSj?F;C2M7l zy2GxLlqA?^HrrrSisCh5U1s;SEaYQBQU4bUkSDDvWT{bYzPk8J3!Y*@4J~*L>`P2m zXW?Cer_O;%SR?2u3v8Us0(CF)JDm^kI@^^xb1p2)#?QJ?OqIea1(OU_XOdo6VciGy zH-CC|0hbe;@i{uT_=)fjetLfEmdl7XmQ5<|L|a@D?-5@xTb{}>Po>44%(qAy$oX%$ zmCMsoDha2wpQ_%jr>Z;e`HEKw8>5v9I-bFFf1;UX8aC9r3ED-Lyqp{eE228MkBdID za(nAtxGK*X8(>?!7rqp_;>&myfGqR!C0mC}W$0z%+4s1}D8KPIjh?3$;g_qdb3|+x z>gX=i(Gymeszb^4eAJ#gpbQo5x=w|UGaxLBML7lc9%a5qVI8 zZVw&ktk`)3O=K9fBvpiD#h8c!LhjyGfQD~zxA2y`B3c?WT`M;Z!u`HOmBylP^XfNV z;tU;@NtLS$>)ENlM|{Ih{RXn*e>nB|gC5vX2vH3-TKIg{*V{`90JS7%eNHAljnu;) zf|>vbPuK`F$2pL=e-mqPXps8;3q?A%%y!E+dke<+G9H>tWgL!03d#+M$3At7(FVLjJbS3o!3C^ zqUTOpp#Vh7sh{+uH58+0#xhat1r_ZwSTBC}>^v@u%@mh8 z3jKwRkETs8R3AhKsyJAv27y~Dx&v!9Iggs0$1@952MC%HYsQaRGm|)Lh6AzrksCke z|MR0egp*Q^o_>Ws_6?5ouyjmyq^1llR>_{Haoj+jTogfeXCEh>P)rsw1&R?9%CZJc zL`1R81Vuyo?DS1qTpOO0HfK&w_po^WbNw0AOJjdnaSIb$W_rpoOXmJ_Bc~nv8b5hE zYV(KLH;>V=&;LVXRAZRwvKSJ|TQdCCF3yCruPNf7X!owv4dOV55q{}%*J8Qr1`YR%3*h+(94u5iD8h*V0%rh(7p%RlWvKE%7B8}unNYFB z_I8OYCAldoBGvRJJqyU8**{pm{~mp^p8P>k*fNN76K?=iHzlWG2=h+tQS->SmBKrL zINuA0=i@*oyk28+@@8wuM7NBIE*?{=38@ch992KiGF4vUvqZEELFaDLsx0J;8-S@t zp~Wb#Vs99+YWsM6z8D1-b;dQY7i?Rc4ofvEB9mK?vCx5OGFb>JGbXoJI0qTGc=%4c zI+nO`9Be!7;99iPd=FX2P;Hp9ZpT2JrfOZNHLj<2Mpe9ksuj{zWdP%3XSN4;pKJ-3 zU9NH}(0j5D06J@cwj87aq&}q4g$KBBpX{L67A|yhluF0Z5ZaVKhV@!5uK{N~#W6%# z#A&scwCslI5ZVlv+oQ!(r9qdGrc zBh1AsPyi&E+Pkv3R)_D=#U#E+bF%;A6jPx0 zz!k@@2$uc>R`l;njDcY1i|3rKn(r)%Kt+eEM@_J5JpyHXBsUn6ZPr0 ziyQqm>|uVU--w?noy=6K>{}|p&VnqtmRy0GMRKMOloMI6JmdY*_Ox>T5(Qk_7H8v~ zNvxzCI$%96R7H4a_E&j#I_<78-XhH%F=y$#SyRbA9F5oLF3jJ4vO>kq>pJxrFsS>W zt-vNGPPJA)Fxmzq=ax&a#*&b7T#&)XNr|%fP(5F?Qpb?cG{c1WVZvF=eVmVvJU$nKWIKJj5)XGz;PS&NF9%!~$#zp!r6`d%BLrIyb3xY{6$Lq$0aA*yy01 zJMO_`u64md!PMU?a@$kjc}1Psf#h0{WA8zS(<90w!6V6o4yOkhPIsFxFmhXf@=N-h5{h6C>1#c3K`mV{}+Zfe_Mt&-tqb$7}{K; zl&sBz0O=6=U(vKhsx)npO7cSSG;Og(Y1)QazeW|TOOL~t6DKoPo!Z>3L)&gW+qCY9 z4;5fWPb@^jikzcsT4o+TvR3LeXkgdYod@*qmUqYoOp0inOYA46GiJwGGGG-Ad1}5Q z=A@SkVs7&y=A;)hC%xEWaV87I-8s-X$~nPVBz2FRZ#na}3*AJ{D&He-?uS#Dle#bp z13t#!a5a<}jJ9B$bDI2vw=Vqp<4ODoB8*88bNY-_{OiGk2QxcmqL$ZpY`rFSdNa0H zpYZ^KS|pouwGad%z(_uQl}~{JK5hku%i*bDG1vfvWR~oNY%%0owHkhe&8vn8D#}@& zlg+E8BIxY?$8@L2Q0UmUNuz`YUo_3yJaO*Y26a~KnloeDx}>@d8n5jLuhpznp;~mA zUK7R*i0|T4X3?NYlLwP}3ejl@Aj)u!jtNGVchsCZT4FhC;w}^q~2Y zF(X%R%ZSc>CgEY_gF@Q2OPbgWKu`?;w3TH(NAsD_yj?4i(MGn(rJ`+eDcXuRZ-dFW zIvR|QS?i-^(|`by$Y`u5yTy~8pOb93dA;om6@+Q@3K{d^Ctbq8VxZ?OLop%7qQgAB+G&&{B?Zkdj10B$1c#TK9phzIq+a-}s9qyZ7Wwq~+{+(fAK zBH2K&afNwBs43ZQ4$KSf7Ikp3+XgoxJmYO`ig?DX5abY{MzAaK##MEj+X!8D9p1m| zr5aa}WT}~m6{6e~Y%%hqFxLb_4PA=`Wf?wKuOUlR)Mr$KDd)x}HI5m7;J1?Q}*hEMN(ljECo8s4l)ZG^VAnJ~ViM~AUvJF|MlFU5{zRCT}~ z^tO?2zP9Hx$HrQeE*m*AKMq4X*b^Z*+S#AsD45h7rcSOP&-iG;GZfOkd&aVei!f~n z{`2&+AI?L^AtB~LX=dxFrL(_oAR07)w685!#*Hu8Swj1?O2|ZOpFgNA+7x(w zYEI5%Sp5N>1@}FG@36B5V!`vaGQ`Oj#oi^e-|6x@qlt(JnwZXk>78bBi%DG@eA^Bnjr3f`d&ORnY4%maFu zfnY&jU?JM7Tg5n1% zA+YJp*ra%9Dv!aWw+x3}Jkr!?_&1#CcDO#H7>Mb$6N66NA`nx7$+p)lra@1Q!6gir zYy#@pAfKYavOrT54VFDIy(SN~a9`QModwGPpLGT846#D%%ZpuANM&faYOc(KE5CZ& zy<_i@_pji8pk~DQm-zj!Lnc1|O-$dsrq$$N?-hO5?Ssez&+OIie0sY!J0yUBCjeq9 z!~Hvfh9#t+@M@-`lFsXBw;e@PP$8M6LXbzHf%W~c6Y$A4c=x#VB3yC_n(!|a(*yS@ zF|PIELby^>U8$@H6jDvDG-SEK)dfpiP4zatQ|3%-zL&1uFU2S5sb(H<1$xi}6jqr_ zbamGTYNND@j-*LuCBkfcAO*ew)o-MaQW(h+-QC>--J{$S+>_k9yQjEolPQ*5M>HlK zE4#^Ah2hbrQ1o=i>^VC!lNvWn!rNA-_La=thY#-_Uo#>0{zZWDwur~^bOj=aMS1r{5_qAVdD2^%utPBhJgd-giAF~r}EL}~JTC%9f!djXM zLoV#xbx{bpd?j7_8Gl&69v;M2fbzSEw}b|oY4+_A$+w8)4*~KBlt0KEkgT8#`GcB3 zO_YY%M@Y~xnavQD4zxW!W-WQYgE}{dX{n4TCxL{t)YeFZ-b-k3Vb`wnFeDQ%T5$Q2 zcx&A{sA&fg9iM^XGvSry7HN+WjG*mdLqont3Y4NG@)t!$l2FjP!iLF+0cc1ACejAj zuWN--kG$#@=oaOc;Fjdp-AzMTmt_Yn4L{2UH&rYutt6bZ^q7cO&JL~6VAq8UJE89Q zNm#pjx-@lGlNwNbMudfC;&jnBxNg^ujjPwu)==BuK=Tc0zb}|g+iyE=iH^#^C1^z2 z5sghpWTau|USW-q1g9h?r0_!1cDn|;M!6=qCb@QZCGB=%fL&b_^UR5yW7}kNYhdJ= zN}s}`_Ia&t4J(%NOz731f`38& zopc^(L9{FspYK#ciW7`hQk>9r3r)eRBb~>UXp+-<5#|6A+W@>9wZ*~PXsk1@5czLUOP%?KLJ|a1`R?Rs5MA5rc_0}!wRH?45MPkh@ zQ98_G{Jnag>=*SvTs#0d6W71x=DrIJ|RVnHFx{&YN&fXVH-&bs1g!be; zyQRbAJt69M@wCV+0SySHwc%q~ zZFr!lPlzxJc`*G+^7qCMe$U3=Z-QCSPyP)?`JC}Sm38{pVV5UuH2cDvPjKEr*zj7t zuVIq|_~Vb8ci?Ln#}m5p#aTPmb_bAM7y?pdm(Z}1+b!z^7bSFEa@*w)7j}Gxkb@^A zDTHWT?jeEXfk%~xYebu#iE7WZTD5017%v6X#Xp*l;qP_`YoPz3H!wKlbU@D9L$93R z*so^}KSc4B?k9T=Cq2Af;Q?%M`1$=63-H4~8|=YG=8=HFo2tTZBz8WY0bryovSZQd&W8zQKDspBwj= zOAc&svD$Um^5ijWz6m!&xM*?y+UUX_L9hV;bcOL0M*pvA$3F9oU9sTB$SF|RHh%}J zUOpWFF-Y9NbFXokDJ5{Pk@d=eHhM30)ExPwOP2!9(D?Ymh>A*s3WLRh zZ~O|&*xQqjeSZPZLSv`HDDezVu}TD$D4)6r1##`=kFZF;Q+EB zpZ-!9^EW&5Mw7%L8DwvhR2b|xvS2@;l`m`p{m-l;h2eOr`~$w8fAx0E*6f3KET?O* zDE|=ezYl!C_xsQ9cy;UUt^MhmtA!7X8&pQYW?bq|3HDMp;5?ZH8ZsR`65Byas8MAT zj8)kLA6&SQV=aZgyJW3_ocvd2;3Kf{P%${q5#_}K2>Rj;q9iT=esru{c_>x32#X8n zcynxw43_T7S6634aqr*%UP>R|N~ zc8H-Lmq`hkbPlGA_t0%kE^r0GVDkUn{!^Ly|#awjVRD7^8*A1wsOB zZvAwmXr;Yw<5`SWif(V5HGAXACXE_4N$=61+L-bomD=>EUy0gP(!TDaM|Y1)OpJq0 zO$IhCFs=Xu{qZUo3|1+T15u4;E7~{n^N=NylY>_wpztzjhBBOZDX?BP1_Y{DCnuic zlE;a2Yn9vo_UJ@VK-?YZP7K&5$=CTmdluFm4L_gG}H8N~`-?6}==v!5zJ>^z7WRj`GOEY81=O9J z`EG~VBg^&dFI1DPjyF?|J*Yv=$^)R|K~_vN9YIbMPjLZxM+-N;K3Ks!Ldn@TlYK|? z=Ky#DK8evq)mg_-U$3}Fd`|%To}}`8Rk4D1#FO|!BXJ{nN8eNQ zFY%a5cl9q#COKeUQZ^*^=|@mRD>tg|>Q2^$Kl`pWkLbJjWf7#lE0uhgn{*y(fIk4h z#|ExLzsoO|?x+y;y`)=0DSDcb;;`gC{~(#OzG5|?0c$}q_W+wfWWQhy0Fac{fEthv z__6m@`kVg|cY>YCCnDH8G+@hRr_Y}Q%I6@-2ze!ZV5p*gJe-J&tgxFvauaCJ8sZaZ zWS|I=kLeTTLkx0)qmR>zMCcb!aF8&#Z;GZD$fse^gj-0hdMu*p|&PJ#P z{uN($&;(Yn-n= z_}wmCe)nCaBGN1318)IJfu=GD2;?(OxFS(Sk#}*0O+Z&Lq(UGeU<2*Hj1m>!y{t2L?Vso%Ep;J&~Y~M*1SK z-_ai6_97tT><1#i6ge=mw2GT^wvA8nrLAlQy}^!zM3w~a;y68&SG_q)j_$HBzH1(& zXYrH@hIEXG8zuV88Jw=pVM?OP&cp zfqOO+p{lW+r~bJ35%it>eCeVezeJY(=?nK|r_bMyBG=|Gz}G*yW#uiH^I^4<`SH{9 z`=35$Rqk;Qu?lOGA4rvbls)UC>{))p^2JEi4Qt@G^8a!7((s;%?p~ADX7^SZcKOQ- zX_ocwBd?zM-RbDgMLXKI*}Y&F(yz;#Kgs%!bbrzk{L8PA<_9aRpO!xXY*qCT@=0IZ zfiD;;d;9sTQE#E-RaLO14fZ%+NpN9tNcLdwnDH)l4Tb89tebzXpHFckXHd?ikCt5v zwzcoLY2hvu{tm{>8vZc?iDO~x-`agomLdJ3CjfzDasvHD`e0!7U>(@rRoL#kH z>=)DV?;|qxC}^$$ntp7t=G{Du{}`Edx$~6a!qp8ceWtHw+B^m4mXh-lQI`3b%*P1lZcd8O~i)bXD77S*-_wo@x^cO9zUPEnySls_kHXAwd2Px zS}`}}^vRbwE9UHP-EP<1l_>lpj9NA&Px>{#LYaAux38-<6;}D^aOmp|@b@*jR2%95 z0GcHop;3{&00^KziTo~MOqCI!3Ro?dkB(u5pO~Y$yq!0y*c2;Ya^p)oU)I%^s#CR*ZtIurXElvW8ZczU@|CHJQ)2LsBeR}vyWKNwRZ|$;EPH% zn#a^{03ZM=qpK_EDFY?r^xruKWLMFtAmbEqbdGi?E65PT+FaGTaLiR0z$9j=DP{M= zQFHt^<%FF#&jOv$l6JUD214a0l}B#4d^>=EqsngX4m`jdS@L9KDN&QVgcjPduQ`cD z*`n>*D(jUu>7)46Dn3cu!%0-#Kg_2=1JmTuGgt~1q&Ya&4MkWZoN>R+7tuvsEUG^5RRzaI%G$AnN&O5k;}NThiV|;tN;^bclwNV z%8@si?Q)%r(TZ|SkiMRJ73($6a^d{TU%xwOu^gT{V-DdOz9wGSw)5mGp)Bq^q!;C9 zrr9T#NcPEL(z*Z;2?og;mY-qPP@fLHhUN067$4F1)@#@fU=LGOEva+ z6<&Iy4lwO9K7twd^bmmt6O2&m77+`7aK-;Ob2Vt=%c)t-|@WXc|hx)RU{BV*<7JTlBXMTR#x(s{Y*tA)}YIYYgRVWYs;y z17t>ME&Ftvnm`5~E^lKVm5gfeRDkrJWUf4UG@@)&er4nsGt7X6ianX_*$|`FgwLEk<3fTZE*%Y|3{fBxP(T|L~Rz3bRF1u_NnS z7a19hd}M@6m*kE_Ly`1tyQ&N>POM&!lZ&z~3fu;29s@o41yhX}*U-c{q@6TvVHa*n zoCxPy34;r=6h8UxJV4Iza1@AK(P5+kdd3x@1wecznSnbf1qSjK)4zDH6) z1AqDMX&zdgfu`)hSFa@B#8FT0<3sX$niLiI|5ts1`9IJK2O0o;Xf;n0XZG-p z1O5z-GLf#h(~D7OQr14#1(+)%oya=R9l7*K^j5Y2snSka$`!;_;bw?N-9AmY06Pd4 zI54I2oCwS1%a%{#ZTvg~PqN0M>!VV8w8*oHw=*&_lv){L2Ahc%T%?!V$5djV;v@#k zanj`Sq^Q(YWy`9-vTmb=T`x|3_Z_Yv_QU002=RGWg!l|tZ{0e4oQ&by{8uPdN+hdc zw2fbktHY}V?bNby(7qU^;_{b)WLFbg&yO8bV9gR^R2Eq^Y^b8x^fdK@{3y&k#?R$1 zX&2z^t5<*dC9ZZ*)yDNFPQHKt!UZW2e_WK4fn~K!C~T3Dvj}Ra{^d`xqS`nV0m5mv zHmC=Ch1)>x7`o#BCwy7CM^Ra()Op+4iHOj4pxI5}nZm zozmDk?skd07WsR5vb&EmzxQIPCoGbt8o(ImLzh8+MzaTPjqRb`ZzX!T4_)CN8^Rs4 zJ@m&CJtG=rbctI^vis4AQg-sRP_?yUs5$*ebM}kDdb^Y6Tnj!S5fBoHc1EyN)gsbsm}nr7Co59ZfY|9m1Vq`_T4&Mwh@|dRzVIwo>*^ zBzsE$a~1L*Mbg~D{OlxAlSI;-BlrK`*&xxw=*^Q_q|m$@ZYR;*6Erk&&kjNN2u0ga zac&4!_^?(zW2;I`4cjw-UBgn8$TkGXXoAicd#eYjHepGo@e|A7XGqeX=qX!qK;Vg) z_ymq%GV=$Sf08paQg4ox`6FlqI|fHEw4-2MM^QVj;g(?|N=+8FjE*i7CxoC6)6rf# z&IrK@AJ$sK%q1|7+QyIWBHN}njbCp{+!>ZDpO}m6L+84I5k}!Hl4JpZQRu^#wRZz! zm%`c})_q@MdoosyUAeB#91|XTl|&D6P0&fAaqPN7#qL0j8SiP#$)+Yt zYigBg-bsPPPN3eA(go&Ih3=RTjxG~3LeQBy+UuP&L$H21ta`>)%{Db`Rsg$(r6_@g z)RTU6C)pxBsYPy)eZLtcnL@RE%afbUr|O9mlv_uaiHVG6Gi*(&j`nIfOJkPGK`7`(ggoh`p27 zFQxF7I2ux$-0*3(+4tsKD|jR-Jv&BN9x1B3Z}zWqS}^lcIXV|=%*_ML8;Mz=?+2lA z_fTjspo3F{cahSet=c>B6}!wppj-Wh4ef2!Id|0O@-E0(qgI+A>7rGt|4cJIt>L^) zS>O26@P`+ou}A(f_87f#2cJJS|M2F+r%pNJ@tflnx4vogTqbt^W>xPi?lo=V$aa_Y zJagh*XNwD+8?5RBCC1~b9_Khkk?+j0&K%--T@W}f%gytu+PR>h@iw~`DJLzXb(8kU zQ?3e~4pRoo&Ml+YKE32!A-;X)qVrF^sqVrx7q8l2=4LlG(k+u7>U6iW{Gw>?u$!K} z{qa>No_yi#5#!1yuX@;Nao^!B!CY^%k{_?%w7@efn$n-9}DJDUh?;200 z8YO7{Rwsz{_~witbOFCPe2hpliOyXCAB1t+Iyb)aM};s8KXY4Vt`sYDW?GREv-LVL zD|EXMsXL2ssTadnVzS1aeGsV^j~5zqj%Zx%zlrPXuEbm+hG=W0_QX6>t|NQc2IRs> zg%)*@4OXiBckP}maY1cXmaAdEijQrw2#d_ocFepKUJ*ky z=9U5Gjl`_bw}Q~Pvjf~Fb61MjJ%$-yI*l1kTS@MR@<9s%T=oh?wtA zb@vqf;%#?%3fKMp?(!5aGZ30aYI!5Ji-&E8LGk?F+tGq1^~!DV8c1o?@EHm3bS^hH z^3{k7MPp4*+2s6u#g=Q=e;4m$K7HFMw-h+9mo7{(GGn*AbnXDI_}NoUk-a;6Y5Y#< zC=x$@$(rK77)zJk+hXp65VAX843CQ;n(nl+!&kzKFBDBRhu`hX<*2b4M~xmd*1fHd zNW7!O^Fw4F3o!R#=B4nHm<*{w=IR`JJCGUQr7?uQhTkRTuFg|v=5EW} zm7*#{>O9jYHNHz@2;C2KxqCLq9skALY_0aVL5^QylT*%hzqf(KI9&9A$(n?;<{_Jb z>am{GuK(n>ov;0pJ%v{3(c>iguY~R>j)Me1w^5JLeICHLJldP>7FF(%Vz_1#iF$Q* z7fJLi>pR*hD0B`OTAic9L%$=@XWP4(yVO0JM^v_nR9hrTtwfKvo+NIC?hJMS-Oh)u zm*^qUcFeuhog;>5+)+Y*B+=chPl;Qh#{p>EgoZZGWO1ogjoj$Twktt$?01U9nb?EJ zd%0_=N5leB+{AZyDD*aZfnu2}SJk7f)gZYsf2{Z?=J%Hx zd0n)>Wbf_uptw@>CwBG{tVzTEMxQ-n5Ni8FwCgKyH)^|z6q4m}XR>8sE&Gs0&Ub!C zS%#U-@NF!j{8r8`nZHy;$c*-t`T1l$%N2b!OJ|JMM)v|3hesDkbTOgZhy?*nIgIzK zN|pq(1Im(5WuEOkq0ZTz1aYDb$b$LqewmN0F7Y)ai^6|wz7EMj%M3EhmM~V}x}lhm z6RlMF@7k=GS~A4cmF8HVm|QJ96_YE6KCxqB#s#(8V&a15X2#BoT^);D@XY(MZ3<8n zQ;P`oL{V&JOf4c5#U2Ue^@FbtP$^!FuOSJR*q|h!{DJZ3_+1{r_P;XmvltKo%u7YO7^E@h1eiAxvqVc>78-X}fV+^n9}#mx?3=lc7ET;IANmCw^Z{Awe zlmVm>r=mtoa1xAi)Rc+z=KU)3by*fmT`AOL=}4M#s+8qjk_9#86QN0xB0OxdY?lkr z3SCIGoGS)uI@m47`+>+RWS&Imaa2o=#6!+_)Z@7Q!ru**V_40B40l zvPmum&trR7WEHmGB+8%e{-*G8m+@YEmpMxmKK_dzk8fsqh~$f5xfrBL-s2#WFD?~L zC1e+f$b&{#giD|-b@!!eJrSLjitC+buRlWPnyn>laXT%80mbU5?g=LvrF!NH_ zEef@pzv%(yjf$Djw}a5Q(*oRgGxstvMjWS|Q>5Eum1B$IH0EChUqg~+B}_AE4B|5S za~Y3_p?DUeowLXTUoOLJX1QF(Bd{IEInBmdok2H%?{Ka#pRlUoFgVfoS;b6!XGRg@ z)y}L;)TZBGZDrd{HeAshz!1^s+|$Z@Lfm%!gAH4(qV(O)m&VI0 zmo8f&Eo#~Gzc}K8S>Cql zU*JvRoh7GTy>^Z9YJAu)6_M2aZ@R8Jy|RD6clQWdcdiiwv|Rz6lc^nzwH`;EX@u^~ zV=;%(lD0xbYiDE?a8KA78FBlq(>NA)VP>{Br}>%f{mfhfual1YS5(O+>!_NQ%*#=h zqiGhonPuVq6tBT114N!iS!NJATeI;?G|f54ZU4sHmEznG?pCIc8+Vg42ptRIZiO|~ zh>f)PaW&l+gI8`qHiMf<$&CN zrLQ?Qq2VlenY7qnBhlAW`+X~}3D^e}cTeJ;=3Y)`JGTygQk&~&ItSL7Tbh1sB4evcax~r+h7W7)R9HR- z&V-C6%qa%@Y7qNn>Ipsv?xsD#o-F*tmG}gm14AO(Oh&6XTQa{dtwb(z<1!y3Hey}7 zQae5dnE~D9meJ9uUxcRjg5=TA*pA2P%*mz?Ywcug$@$zej7^m-(*f&=S|?^IZm|>b zLvLhmzB+D^9PxKAQN=vnCYRPmgpmu)Pyc^#{$dE z=p=(rfieEtWTh`+E3L!sgB-oRNnjiA0pv+5JU;>D-NDotcH`d~dzbH%rrjcK&hETE}Bu=`pMWGy?FM8DW26?9#Kd zw9%qv%+I@>u&RDIc4?!iM5Cv95yt9m4_Eq5szSAePpZ=JQbBte6rjBd3edhu?A|p0 zDHWov5B}w|Dh}{_l>e;iAHHC}zOyPX?r+GPvv{J`UVJ)ps_fzZ3M;i`DKuFXikw9}S19?uq!IcqZMNkZ)V&YD z@Me~sbk5KYaotU4)!F!eZ)XE z>(k?ffnMB7QlDxORdsYbhOg}0T($J zsmLZxEMI|dvmM0pWufIueNZIf4=rCRPGN9f%E|Rxz7j7zuix1XQ`6LUe>b1M^TzA% zl$WJ`y1XvG>$LISKqII#D!Yp=c{(u}OU)<3bIKc>;`2+(&V8KiN(^(A>V z>7z$;Ki1mG*phR&4H=tkuq{V<97VPx_ea{=RUexWZEa_?@`BRmqgJF{K5p`B%F?ib z8zJ^FbpOJJm8P0?x+z}^%RDPjE$82>*-;?sM0Ym013)UsJva0u@{F^|? z{9SInVh4HNl!p0kALNk!G9HW=DRaEk97ImhJcFl&1i;svVtr-h$~|P7lX)H((1JrjG{pV8C=wOh2#ciRoVa zyM^gK4QYEkru#N|z8~=Uo3&b|3%LAO@%O_UPa!Zp5ZFT>(??-?kW9aa=_3LD^gWIw zzQ^$|SRL`p1DDu?8ThmXsYv9^CEK;w1;!` zC>mUFW6PyA88d4mW~y>qO-VH|+XUyDt_NSn|!%tOD7)YJlznx0Wm7)6tM zM995hZYTNCz}Ht!zRz9dEZKC_&~_vHwCOVK(xWS#uUCuf9~(7is2FOFdevEBnDIVN zi)$iQMavmCi3{SdM3Tkz&s+0bDlPj;w)?qO4YzyAHT96uq}|hGTXv*Y#I{HLIuCyd zbqy@TXJh7t|tRr-e%X+~4ts6bC?6!7}M8D^ujS22f4V^0v zKpFA@{=-sT>KZtrT(&4-$91npwhJsBe&7BaioprEB_yA=PN|MeshslLC4E6YaRMq zZKXBSCi1uP2Ptj6`OnM})W?{v(Ps_%-Nn*2d!>oKR2q+|WLNm(IijaNM^H-${QWs? z&R{Qa#OLXAh&E@?-2xobh5>u1Xa0Mr?JC_LG>=}ajXpwR)SgUCp8ySU ztLiCkRq}r!ZdI$0xK&5XxK&SC7q2;Yi?jct&*saxRZqq4JZtWQ56HMx(;u5H@&sg6 z{Bny5T($1iPOJXG_eyXi$CZfc*~mXIeGXGH`QdBcEh0E#?z_ zI?3c6igx}w)aV&<{+bpGKYtx6ZV&PJX@PR++-1h95O1Q^Iya%)g`MsCx$XVTU4lMs z8BOGF$2TU4AGKf_J#hkS0n6^63$^p(q40Z%-&|r$J3l7$9iX2ew<7t^FtZ^p(KaLj z+Ih?rqZ6iWOfPYNj@*X+n-;FhEkjB}o|nh?JTDi!Bi+yR`&=|9=9}qagklvp0*_x< zqrTL}_fw7hV|y#A(d`m_Db{Elp;zdhfPCwugEI$5V!90ukBY0kG0T~w#w@yHDf88R zwL`oOPUAG9H`oJ#U@4td0w=*Vo ztQ?tf)df+QZr zG(X9qS~%KhX3}{V9_FTeC1P}+EJF7`+;9SYFIx?#B8@-^Z)87_z7Igmqa_@`#>kHVp3o( zP-Wzs+zT+-{UNd(`)#+kFPZ@X>#ZuGw=AL1x3_TZ-8^2E3R8^M)|E-Bop}VhpGF`X zO3U_YK6r$skub{4C1L=z4>MC_k9HsU*=rO#)%H=hUR(dP67Ykl`))L>rRf7BDm!{JM6pd}433qm=qj5!S%m_MBIMf@}RKjsw!Xu&&mEiZEON)_pnM(N3a;XIQ1XO`uM!KBI zQs{{V0Os3RiyhPh30wxhiGg+8832)&P@8}EYB9S$U?XpO>%11g&W}bR7k0G-$b(+y z3slm2D#`D=nk7r>N>45Vu&%ahpoH(ZghBAOXs^|wSu@gQs>2lfSuSDFIlHtHy2tpvr4lxA34>)F?9dWg2V#j- zaS4OZ{xGzJ0>Ueu;OI|~=S6=Kq#NN;ph#ml+6v^VXe)yBM(gojfgXRJ>vAM~Cwl4q z5pA+cv9D95&=YsMzv(@~^P^ry|AUs%K`(=zI9M5j{bj_Cpp4dBMzJho*q^A!HZG%BmeKN$>Onov0`-+*yw0UB1;FbY0^V^E-X0;sC zh}|fhOkkD27-c`pB@CLrODiEume57vx&3!>34>)FQbJ2e=Mq#Ms}cR7t8lK0rLxJc5egTF1-?0 zw6sf?HChCXH~C&fJW69Fi;-Gfv)(a(FnrYUIFt^FfRl zcZclJCvYqoMEO4={uVjrZ8p`p=@iNz2aUJi>J*;p`K=hP#SKi2`QvrnpjZffBejZt zmj}7+jyO6$Kz+Y~ZK&SKC0bS*xviGiDi0D``Uhyf1052=xrd5j#O=Se*FondP1!)) zev3`}0QZ~B{iGEU<2AXv`MK><=6=$=$339Q-8IlAy_vfTHi_Yy+?l3d?v2DPHRY^5 z8gs`6X6FIBqirBFX^Q)s*Yj3O^Df0fJ%6+3FCsN%6>7>+l)nnRJ++0WTXIiLJRRIq z`E;UA;i;a_i{Y9@JRxv8af4zZ^k_)dPA8HBH|KJgyGpI6w3~CyOdq#Z&vu2XY%_rM zpGeGf-Zhuo;6+!0JR?^uHAcu1hQMNXHpHN|PbS^H?d#m{zXfcJGmZg3AHMskJ$~`> z#haMFK;qv<{0_o9o*hZzUowwS_5#BHjQKSZpO5$&FQ0A`KOpfVkiVYtKgRrHoD;2= zEV*wMfA#Vsw)>*%x?7zo=Ba9y7spe%!hO{jyTAs8H{1;XW{p)1DbOBf2TlWmLC9;3 z#Fi8UzeP&}UGDnG!@1}INRdu-+%wrAAS%s?_7NUT(kK9B44gv^POoHm#`;WbyxGs5Mkn{>MT z$s~U(1OL@37?mjrKib>ke=EO$i026a&7s)$j%cy5o5u|A;}5l$HxD}MV{9f2kR6lG z`2k5Oc)jO;Z(QyC^xDdmk*ni>5zUR|@e_>Y<;FP`jyiIaBM~U=l2VLmVsj6d;$ITr zQfG5rMTN1#X)Zd8ZBDk>RxVcG?|dxF{}sUMD_bEAuF+e;-=Qo_&>6J0MT~T^woeOr zo8f)=$KSiPQSbL?F!p~GqyC%t4bK$Of&;$mMt4)fQe-5=K@nd;F*`s9B{da?bQ zy05>k`~35(#1Wr6H;I*>i=Uk&^R@EF9xIQ(E0#N{@u!t8(s>!QfJwE9Eme_PXOQ(% z(@)!LU%QY0O9kpP@`?0=dbLq)fAQncDef3N&n5$Twyo1+`=EJT(_A*zsg`S%WYA~?KB-JEH;RK& zg8afPrd0!qPO3+JBCdW|to+h>z*)FcJhkL*XU+~WQ%wKDnX|yCh@WB%jK6JElp9yX zKQem9Z&bZZekdrh)_P>n|6_?;gi73^iNq>R5=SB=acZiP_{gWlai8ql_o+DUi3;bF zPkz|5(fQ<2vBSv{_sQnnQ7&G0%Eax?(a_-iDbIp!cm-5C1;Ffs^J90M*K*zKovW4K zr*XTrHj)Fw#Zx!H>8Bryb^?hlK!25Ve0GN9`W@35nC>rsFUB*>Hr^a7SGm0~-4@de zWjf!g0UO$-sq_sponx(*=?<8l?YfcQFx?UHH_P8MF`XuV*Q3CdiI>Boz{RvEaD*NM zA#vam5UoWl8Y)f~12kJkk{&(DL&G~E+^GqE%j{un=U;A~BlPs$0<$-IUb_%NRvZ7^)1-dxH1VZlc6} zhh_Bgo-lS|8CrCFsjv8ivq$1Su)b9m8G2%^yB{+2h}851?b&fnT0m0WDGt~7>^@6H zf!ecUJtoi-&9EL?JZL^EI#I}vw-Ol+0!2Ae(@joCR{VZs(&)tIW zbS~{N>L3yKD)*a*q1Fzk{3qRC3I8VIyHfrOh@UBUuX_+blJZ|7{shK*_r6YZo=~fL zXo#pYGw%AIl!&vOC0(_lEY4M$<~S=MiImWz`SUrbiQu`(a=_ISkir5b*O z`M1mbOVLU=j`BZgz;k3ZFTXRl2t`)o{bM4(AG_G5HNZ*|6QFw&pPEjaYp?Dk<45dP ze~Q$fKJpK`Ej0M2;x7JhYNsnhzFUz_t&0Al)~^zM0-^79f7LwpI&%E42S9Pvj7 z-ulUs|7pa}p!`!*zSB=?Qjyd`sY%0SzBoVr1~lHR??6#9)D54_&K5Zao(dr6q%4rP zhmXX3XSuUo=3gW6^Q{gbZ{kw^TEyP~Am&<`GJhxKzw2yMp6Bi!b2j3)BzpXrh;J`> zCS(43!q3M1AJNylz0CiK@P*Fi206{ShOOkJJEpra-H+2NG2IpTK9@?1kAS01VERi; zmjj4#nBK|1Pr~$$hO~7FrnfbDek<@zQFD<@Z{gqD8wfa&#^&XwuD znBD+z=Qj1GR_FC;Q@bZm8V(>&&OJ-yzn+2ke>?Zux*uL#|Kqu5 zTzvkzr|OnH_kwl(Ww+epxQiaz9VtFx`sAW{&px(b;@obX@0oVTQz_0g@o3tLTPDt$ zHTgAbp@lIZ?l<@0H#=v79LWq~ zrDaF{zrfsAw-moLc+v}%&i&#H^(90Z10-%l4m1N0YGp1vvzH%H@)iPFhsH*U&0@bB?HEI61qD zs;{r3%1OO-H*~DCI~`_TGYshD)Y%;b&f?Nt!me|iXLs{y_~wL^1QH-bm0iI>KxQ4d zM}+|aa?-z~1BzTKM?&8E7j-6FQbX~m3-Sn=pj8U(x8J`$_*8E^68TJd_*B15D4{5t z7V-J(D<1TfJh4L{SG)2dZ}ldB$pyf=guJQzZMcY~wu0rVU;#8h(!c;!cmdZ7a!UwR zMRu-8HC4NUpmM%Ipms`R7la+~v)r+R|L9NkCjaR{?ud{9B?1P9Z{9(b*n%HXyQ0`Y zYs?NAus{eFBbOqfDgcQiHv~loW(EOLKLMrU8JGY70096100JWtihpoOUk^O>02v4X z00000#PAU=00000)d5oU`WyY#2`~tA0000900IC200000c-muNWME*=`NzY+!0Gu* z`kxo40Z;@5u<`)_ZP91Goh%(1_j5t_j)?>;tp zPf^ETN+sLI;7~S|y;jurDw63Bq=eQl6KBOFFoW3@l z-PV}R{*w#{H({=8tF!;*jBCXz*M&2dD(0)djJ57I&UlTu)8^93nZ^fmCdkv=Z6bk{ zuFy4Ipx95_gABDNXy%%d>dI0nT%JzOXlE}_)Sh9qSCwqPFZHAa{IPWP_ha4~&5zgq z4WwFACR#Ev)`>~plXTQrtj#7h^fPIpuOkmy5$VtD5BsFpT&>S!!nJ*=#CW$$t4R+~ zz~->k|A^{=PqhCh_5G(QBOR+XT|>WeNm|k^AzAGdiKw;(UQW0!ce-+nQ~ghoj|cn-^8Ga$2h}KT#TaV`*>A(eVH&z0Iba9W)|mem_1yF5 zz3Pu+R$z{mO%bYaUA}sC>jO@xMJTcF2&(0a@w}3o~Cis z&(xdV)tpoP9i?J0h0@B;RlAG*t^mhO-<}|qo-SGWh;YW<)|+1BwDOP@)l7c>Mwa_Q zweczoct-TDpm~;T>cR$MetBOJO zqWqn)?{voy&IFw~;PgAN)65og>`vON-aEL)x~Hq^>kq~Rxr~$F(}U5pcF{DmehjxT zYr+rHGgv{F@V`3e2$@>D(ke5qnm#W6g5mY&{B=8JLuF*l^`-lOE zYQco4R!qF{9bGGiT2V%cSkc{zuvD5Lnu@_U*e#~1=KEMQg>58tg3`+4EK1pWmRlX_ zSv7iCf41Abihm+fo%bo*15ZBQrv6Cji$sUMVwY*$&NIz_R;qp0f~Niv3j3GT*O}M$ zO8sqm;|tpNBVF7qV&zq=YGH+2N*&!B8}3G3)!=rwT=ze(z2nrbMdP5L-rq&Bey6d) zq}apMwW`!`_0*qBr(l@kIQL-&T^Lnohm2RSBD4#?AaS|c#xV%~D{~DRByv^}{ z6Y|hMM52F?L{GW>ue)6$aqgnX;i~&c`YCb#>l{{nCEHkv+Kcjjo@%Wz{dHGzD2rLa zam8>qNuj*R9Traqu}stytHestM#PC2u~_`(1(Dl4`+q0q04rA%MbSI>3~Sp_?KVyk zr?wrVifY@o8`QRKH>hp9r)SNdlf2yK6+g+&9=*$hy+<}{f1VflCSPIpk>cC{z5BWe zEm1||cAECz@rs46O?-lWHs7^Hlb}ap16|AbRo7GF$Z0>%h<&#Ba+QcB^c?yurM*i7 z@sV;DO%z=q@6lOdKzpIP0#My0w^e(sSAL?nVw%ebdMgO@7Mdy)=q&aVK;)|&Rh=D`#n=k%05v@b=F@p+ zDAp=Y>RM72qv-?m1I_25^acaJ2mU(gD+c;S5S)v_*6)K}#hw5?%#g^J@lqjWv((gB zt)DVo9;Q^0+$lXY_h-pG^JwG&_hY_{nDzY_vBACKy{H?!MvJ4r(M;%Wv^AcB*u=Zw zm+(qD*8{%ea~R#toM?VxkvSQYoS`=`Kib;X$M5((x;wZo`~hnt?^z#fqdt(+=w9YC z4@g|H7QRD&6aV-X>JmN>{mpMImVLI^#y=-~by2sN{6=T7Cj6t-CtItn1Mh<0$kNdA zExomCo6*?yWAEsHt6R*0ui-rK8u$ZV`}NOq$m$pR6h8*+IUAdGum)qR9j5Dz@hNx- z&YgYwjK9Hy;A`+6cxrE59?MC4pI!cY{g&79`m!_Zd(IA@tGrC_dPGPag&W2v%i+-P z&Hw(5y}D?A`EP8o^&2nAs?qpBJAZP4_%#nhUrI@l%Rs-2#oEgElv?sBUQYH|Jdqc~ zKDnwMG$%g6|8GavKU=l_aOG~wqpbH?A4=XyZ9QB5OR1pwni=`}^L6r!s%r0P9^E42 zvi7d|vhwFua+mz09}_Re)=#ZB8Yg?>NXsXi+iH-GWxZ~w-^1+xA!?4X<*xOfl%qeZ zB6%hZ21iTF@c0p}J3XaP{JXs5JG2|Mp883hM$c2r(fL-l(f`zA^9uAHUh^FK zl)BAxd~Uq}eQx9Po5UQ?y>ZnGFg87i@fjQ4&G&r99O!YLW4wfC*yd)T8F`+0=>-OU z@8=S0U~bKe5x)Q{826t5c-lO{18^Gv006+)w(8in>)6h0+qP}nwr$(CZ6Eg!008R$ zKMAlMXa=qUIYE~|FTqr>1Ka^T4ZIb62K){Jhr}TRAs3+@=osibSQyp^_7R?iw}TIc zFM^+fzeIQtZ;?9WWaJB!64e2<98E*lNB2Un#XvAZOc%@sECL(D?!eJ;1959`@9@R= z&iE7f9|R2{MQBTyOxQ)ZO881_PdrEBk_M7qksah66ad9U8A7>D`9^I-T}%B#Ye+jx z2h-cq4=|7n6Jsdj43on2GsiF&Gas{Ltop1yY!!Pl`zwdW+0A)XFsTqyNGOySJ}Uwh zIf@1rT`CS0w=3RJ{GWm0rOeWvrT5AT%Vw0l<<{dB^TzQW^5gu? z0;yo6V2R+1&?W3EJSUQh){A}O-r`3RpJc0)A#Ei+BK<7O$cD*Q$#%$|$YFAayt90V z{Ix=&s8KXlv{B4gTu{7GqLcw;M%iDvRwY%XRkKy6)JSz7^)-!4vsEkC*4JLrxpi}O zFZ3<-)Ab(>4Go)(1Y;}XArr#nF>Nvv&E3rJEESfWR=Rb94Q1{)rCs;X*#)sN~(^^EEV zHIAA#H8X1YwYl2awKqM*o^GC-UcPs_uh`ei_u1do|0a+R91a45je>_m^3aBGAUq@d zJQ9l>jGCg$W4hSBcqINh(Jt{KsYrHCK1g}e(DeR{E3-dK&eqRP$!^HL$N_S++>3lZ z-z`5e|GUmVzTg46kput$=-Rez+qP|0aT%6DZO69RsoPOzGJ9IvwrxH8{y%u^#IYY? z6T$>x=fiG?JrDaF-X{ETI26%4f*m1@D2%umxgt^*`726KT1Z+;+DS5!9+KXYev-G5 z)#RI$9h4w-FjYh?qRMH#XazJW%}Ddo8tG%`+4S4=SB%z-?u@|B-=nao+v$>H|kdU?xvn-eD|mL_#gawqplE=+!qvNN@HDkH5$ z+Of1?+V!-L{2u&Cd^I2Ae-{i8Y!%!VjuQHWuSMNNQ$%DDOQaUTqJPupq~~Vz$;iz3 zn2BX#*}Uw#IkR$(<=AuEy`4#ziL9c?%1*rvi;gG^Dg$0E*MMH|X zMdyo$7qg4q#Xm|$mXJ!6B{d}*+50z8oZuuj{Lb07uzN}fO zk!h!BmultO2fEohuI{0JliqI_X{a$SHl8)DHPx6toA;W1=IfS&mU_!6>s)J!ZLBTd z_QJl@o@vJ&?Ht=2CTAz-CMU@WxF)y~T=nh&?i@GZY2}IZ@H_<`wa4!Xdaih0csF{R zd>wo=-x=R`{|>*=|1hvLKnh$4JgbVYI$QM<=njkkW&>-0y#NhJ1xf%j;0CIJX5a*H z8Ms}&p;}gr*Nm-6s<~3Tr&e3nrjAngPyOop&Gio(W;f^>UNzDhFE)+;b9$4c>09%m zW)0XH90bk;H-KSa5?BsuKnI9`m%x`$duSLm7uo`mp){xxazZF{8F~YEfQQ5L;O#I4 z=EGvx2_x_o_$~Ys>4c0#79iUYD#Ax95hsEnSCH3edvqu|8{L9Np($t?>Oc|nGWsgm zHaH|WJ1E1ZW9zV^7zZoB3|KvO3VVQk$EV_J@IyEg&%Tu8UjP-LQjbnM1Nu$ zv6eVO&NTStl%D-M7BkDeTgAXM31E*WO?sv+vm2 z{_ezcQaJ^k8csWBm@~&&=NxtJIokQ^CU^6>Ro!;(P+Fs47I>Sz zQy%p0dtd$J{v>~izstYqyT0Z=OJPpsn^Y9|P3~$Q&@u_?T-_Nh|kU!)v`A7aU>>o}KSBHnfn_(D! zijqVVq8ZWJXlt}Lx)PB{Mo*$Q(HD_Sq!ZahK2c1R6V*gL(M+@x-NaZiRm>HE(Bhf+ zFEh%VvY@Ob8_Aw>yj&!A$_vtwFI8NXMU_^SRc+N=^;5&tT(v>%Q705o_tiI@LTAu9 zbVc1tchiIPI6X@*((Cj#y-y$0ceT<_^`F>+-~qsq7ytm^+qP}nwr$(CZQHhO+cuX` zukogD+>DjVDs0uUnpkbD!PYEmv$fm0V!gGv9pBDwm$RGLeeG%Xdi#WZ!Mv;+geEU*cj1{ zgZMZ;i!bAw_+fsY-{#Lb;y*+jkwRn<1w;L5I{(oKxUU^ zWlh;sc9ebPNI6w5lxyWqc~oAMcjZg@RYJ*RME+HARZ^8!WmS1qQB_t|RdrQU)lW@R z>(o(oR$W!^l%*m%u}-Zs>)g7quB994R=Sh!r3dLzdXk(R7lWI@(*Oj&Oe~Yk zWHR|oDO1ffGVM$+Gt5jf^UNx<%^Wi4q5;WUsowwq0003100j;Jj{p_`Q~(740RR91 z000gE00IC4Bmf2g0eIR>$N>fdK^TVN_n+NnZ96+?0||jeXhDRe8w3ed=mcFL5P*OL zpfhxk4ig9@_%OiZ0YUfz}P=n!Q`d zk*&M`+aQD0=3yWRe~+>c(8zIm2(+hQLJ5Q(TG&%nTd^}B?aA@iw+;+-HHre{&^FiQIbj2_`V{txJ$LE*hW^z*D8Tle$>F7xaJGPV) zgeUxjjsb&k!qK1*4h$27`e!O;W{4O9pBP#cHJ&#-37^%DD+8LqYxYGf9+!72O77Y7 z_|ss&n%}GwR+?aQ1C5XfXj%-H?E66QytDp|TCug#;JHxI6LN0CqI1i)x$%}5%=VxL$ZW2FpYanz*;SW1CdoFT4eYG6~i$`ZWIWI-(M<`h4OI-Z-Gx{_@` zEM5@-9!@q8i_gYLT}BYZ;&(97lm+V*2yleBieZxwH#^V+3a+)85-xy><(LXU7zTjo zs{-~8DGn+j5|9uH8GyMGDuwrA1Sv=;x#drHp|zZ0Fre3R#Q_cz9$3(7xkJHVz$U!# YL6htZCcLmfC1Z!aXXnWeQyf*20Ac;`*Z=?k literal 0 HcmV?d00001 diff --git a/static/admin/img/LICENSE b/static/admin/img/LICENSE new file mode 100644 index 0000000..a4faaa1 --- /dev/null +++ b/static/admin/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/static/admin/img/README.txt b/static/admin/img/README.txt new file mode 100644 index 0000000..4eb2e49 --- /dev/null +++ b/static/admin/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- https://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/static/admin/img/calendar-icons.svg b/static/admin/img/calendar-icons.svg new file mode 100644 index 0000000..dbf21c3 --- /dev/null +++ b/static/admin/img/calendar-icons.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/admin/img/gis/move_vertex_off.svg b/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/admin/img/gis/move_vertex_on.svg b/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/admin/img/icon-addlink.svg b/static/admin/img/icon-addlink.svg new file mode 100644 index 0000000..e004fb1 --- /dev/null +++ b/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-alert.svg b/static/admin/img/icon-alert.svg new file mode 100644 index 0000000..e51ea83 --- /dev/null +++ b/static/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-calendar.svg b/static/admin/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/admin/img/icon-changelink.svg b/static/admin/img/icon-changelink.svg new file mode 100644 index 0000000..bbb137a --- /dev/null +++ b/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-clock.svg b/static/admin/img/icon-clock.svg new file mode 100644 index 0000000..bf9985d --- /dev/null +++ b/static/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/admin/img/icon-deletelink.svg b/static/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-no.svg b/static/admin/img/icon-no.svg new file mode 100644 index 0000000..2e0d383 --- /dev/null +++ b/static/admin/img/icon-no.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-unknown-alt.svg b/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-unknown.svg b/static/admin/img/icon-unknown.svg new file mode 100644 index 0000000..50b4f97 --- /dev/null +++ b/static/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-viewlink.svg b/static/admin/img/icon-viewlink.svg new file mode 100644 index 0000000..a1ca1d3 --- /dev/null +++ b/static/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-yes.svg b/static/admin/img/icon-yes.svg new file mode 100644 index 0000000..5883d87 --- /dev/null +++ b/static/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/inline-delete.svg b/static/admin/img/inline-delete.svg new file mode 100644 index 0000000..17d1ad6 --- /dev/null +++ b/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/search.svg b/static/admin/img/search.svg new file mode 100644 index 0000000..c8c69b2 --- /dev/null +++ b/static/admin/img/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/selector-icons.svg b/static/admin/img/selector-icons.svg new file mode 100644 index 0000000..926b8e2 --- /dev/null +++ b/static/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/admin/img/sorting-icons.svg b/static/admin/img/sorting-icons.svg new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/static/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/admin/img/tooltag-add.svg b/static/admin/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/tooltag-arrowright.svg b/static/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000..b664d61 --- /dev/null +++ b/static/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/js/SelectBox.js b/static/admin/js/SelectBox.js new file mode 100644 index 0000000..1927b4c --- /dev/null +++ b/static/admin/js/SelectBox.js @@ -0,0 +1,110 @@ +'use strict'; +{ + const SelectBox = { + cache: {}, + init: function(id) { + const box = document.getElementById(id); + SelectBox.cache[id] = []; + const cache = SelectBox.cache[id]; + for (const node of box.options) { + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + const box = document.getElementById(id); + box.innerHTML = ''; + for (const node of SelectBox.cache[id]) { + if (node.displayed) { + const new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.title = node.text; + box.appendChild(new_option); + } + } + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + const tokens = text.toLowerCase().split(/\s+/); + for (const node of SelectBox.cache[id]) { + node.displayed = 1; + const node_text = node.text.toLowerCase(); + for (const token of tokens) { + if (node_text.indexOf(token) === -1) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + delete_from_cache: function(id, value) { + let delete_index = null; + const cache = SelectBox.cache[id]; + for (const [i, node] of cache.entries()) { + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + for (const node of SelectBox.cache[id]) { + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } ); + }, + select_all: function(id) { + const box = document.getElementById(id); + for (const option of box.options) { + option.selected = true; + } + } + }; + window.SelectBox = SelectBox; +} diff --git a/static/admin/js/SelectFilter2.js b/static/admin/js/SelectFilter2.js new file mode 100644 index 0000000..6c709a0 --- /dev/null +++ b/static/admin/js/SelectFilter2.js @@ -0,0 +1,236 @@ +/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js and SelectBox.js. +*/ +'use strict'; +{ + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + const from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + for (const p of from_box.parentNode.getElementsByTagName('p')) { + if (p.classList.contains("info")) { + // Remove

hQVO%yNCE{ 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