From 3eb09033bf6236e0e447e4ec7e5d515a51fdce17 Mon Sep 17 00:00:00 2001 From: Mateusz Idziejczak Date: Mon, 12 Apr 2021 12:26:52 +0200 Subject: [PATCH 1/6] [Strings] Update copyright date (#26) * Update copyright date * Update copyright in other languages --- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-en/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9949f2e2..3dd3dcfc 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -856,7 +856,7 @@ Open-Source-Lizenzen Datenschutzrichtlinie E-Klassenbuch - © Kuba Szczodrzyński && Kacper Ziubryniewicz\nSeptember 2018 - Februar 2021 + © Kuba Szczodrzyński && Kacper Ziubryniewicz\nSeptember 2018 - April 2021 Klicken Sie hier, um nach Aktualisierungen zu suchen Aktualisierung Version diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 64b56cdb..86911c58 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -858,7 +858,7 @@ Open-source licenses Privacy policy E-register - © Kuba Szczodrzyński && Kacper Ziubryniewicz\nSeptember 2018 - February 2021 + © Kuba Szczodrzyński && Kacper Ziubryniewicz\nSeptember 2018 - April 2021 Click to check for updates Update Version diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5f21e05..3b0ee64a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -921,7 +921,7 @@ Licencje open-source Polityka prywatności E-dziennik - © Kuba Szczodrzyński && Kacper Ziubryniewicz\nwrzesień 2018 - luty 2021 + © Kuba Szczodrzyński && Kacper Ziubryniewicz\nwrzesień 2018 - kwiecień 2021 Kliknij, aby sprawdzić aktualizacje Aktualizacja Wersja From 8b1529f2404d65027b02b711528fc6806d3d02c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 12 Apr 2021 13:13:10 +0200 Subject: [PATCH 2/6] [App] Make registerAvailability flavor-aware. --- .../edziennik/config/ConfigSync.kt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt index 068400a1..387e5cf7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt @@ -6,6 +6,7 @@ package pl.szczodrzynski.edziennik.config import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import pl.szczodrzynski.edziennik.BuildConfig import pl.szczodrzynski.edziennik.config.utils.get import pl.szczodrzynski.edziennik.config.utils.getIntList import pl.szczodrzynski.edziennik.config.utils.set @@ -123,6 +124,19 @@ class ConfigSync(private val config: Config) { private var mRegisterAvailability: Map? = null var registerAvailability: Map - get() { mRegisterAvailability = mRegisterAvailability ?: config.values.get("registerAvailability", null as String?)?.let { it -> gson.fromJson>(it, object: TypeToken>(){}.type) }; return mRegisterAvailability ?: mapOf() } - set(value) { config.setMap("registerAvailability", value); mRegisterAvailability = value } + get() { + val flavor = config.values.get("registerAvailabilityFlavor", null as String?) + if (BuildConfig.FLAVOR != flavor) + return mapOf() + + mRegisterAvailability = mRegisterAvailability ?: config.values.get("registerAvailability", null as String?)?.let { it -> + gson.fromJson(it, object: TypeToken>(){}.type) + } + return mRegisterAvailability ?: mapOf() + } + set(value) { + config.setMap("registerAvailability", value) + config.set("registerAvailabilityFlavor", BuildConfig.FLAVOR) + mRegisterAvailability = value + } } From 4647da780390b4b421b1a7c2530e98b51ae2c5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 12 Apr 2021 14:27:51 +0200 Subject: [PATCH 3/6] [IDE] Fix XML tags reordering when formatting. --- .idea/codeStyles/Project.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 29204aff..7643783a 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -15,6 +15,7 @@ xmlns:android + ^$ @@ -25,6 +26,7 @@ xmlns:.* + ^$ @@ -36,6 +38,7 @@ .*:id + http://schemas.android.com/apk/res/android @@ -46,6 +49,7 @@ .*:name + http://schemas.android.com/apk/res/android @@ -56,6 +60,7 @@ name + ^$ @@ -66,6 +71,7 @@ style + ^$ @@ -76,6 +82,7 @@ .* + ^$ @@ -87,6 +94,7 @@ .* + http://schemas.android.com/apk/res/android @@ -98,6 +106,7 @@ .* + .* From ccf0bdaf0554daa8afcc9b9e89a654e743e8eb5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 12 Apr 2021 14:34:51 +0200 Subject: [PATCH 4/6] [4.7.1] Update build.gradle, signing and changelog. --- app/src/main/assets/pl-changelog.html | 12 +++--------- app/src/main/cpp/szkolny-signing.cpp | 2 +- .../data/api/szkolny/interceptor/Signing.kt | 2 +- build.gradle | 4 ++-- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/app/src/main/assets/pl-changelog.html b/app/src/main/assets/pl-changelog.html index 2219ad8c..db18101b 100644 --- a/app/src/main/assets/pl-changelog.html +++ b/app/src/main/assets/pl-changelog.html @@ -1,13 +1,7 @@ -

Wersja 4.7, 2021-04-07

+

Wersja 4.7.1, 2021-04-12

    -
  • Szkolny.eu jest teraz open source! Zapraszamy na stronę https://szkolny.eu/ po więcej ważnych informacji.
  • -
  • Poprawiono wybieranie obrazków (tła nagłówka, tła aplikacji oraz profilu) z dowolnego źródła.
  • -
  • Ukończono tłumaczenie na język angielski. @MarcinK50
  • -
  • Dodano ekran informacji o kompilacji w Ustawieniach.
  • -
  • Zaktualizowano ekran licencji open source.
  • -
  • Naprawiono zatrzymanie aplikacji na Androidzie 4.4 i starszych.
  • -
  • Naprawiono problemy z połączeniem internetowym na Androidzie 4.4 i starszych.
  • -
  • Zoptymalizowano wielkość aplikacji.
  • +
  • Poprawiono sprawdzanie dostępności e-dziennika.
  • +
  • Zmieniono datę w informacjach o aplikacji. @Luncenok


diff --git a/app/src/main/cpp/szkolny-signing.cpp b/app/src/main/cpp/szkolny-signing.cpp index f2b1cf8a..e2311acc 100644 --- a/app/src/main/cpp/szkolny-signing.cpp +++ b/app/src/main/cpp/szkolny-signing.cpp @@ -9,7 +9,7 @@ /*secret password - removed for source code publication*/ static toys AES_IV[16] = { - 0xda, 0x9f, 0xd4, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + 0xcc, 0x64, 0xdb, 0x3a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; unsigned char *agony(unsigned int laugh, unsigned char *box, unsigned char *heat); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/interceptor/Signing.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/interceptor/Signing.kt index 819194d8..d07afeb7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/interceptor/Signing.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/interceptor/Signing.kt @@ -46,6 +46,6 @@ object Signing { /*fun provideKey(param1: String, param2: Long): ByteArray {*/ fun pleaseStopRightNow(param1: String, param2: Long): ByteArray { - return "$param1.MTIzNDU2Nzg5MDLPrcQX7M===.$param2".sha256() + return "$param1.MTIzNDU2Nzg5MDXHhAtZBW===.$param2".sha256() } } diff --git a/build.gradle b/build.gradle index cc8c8471..2e05ee75 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { kotlin_version = '1.4.31' release = [ - versionName: "4.7", - versionCode: 4070099 + versionName: "4.7.1", + versionCode: 4070199 ] setup = [ From 634ef16bc5cd2c1c1ac362ffdd598f565d46876d Mon Sep 17 00:00:00 2001 From: Mateusz Idziejczak Date: Mon, 12 Apr 2021 17:17:52 +0200 Subject: [PATCH 5/6] [UI] Add notification icons. (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add notification icons * Change color of icons * [Notifications] Update icon colors. * [Notifications] Update lucky number icon. * Add icons to Notifications List Fragment * Update notifications_list_item.xml * Move the gravity to the LinearLayout * add paddingLeft * Change IconicsImageView to View. * Rearrange XML attributes. Co-authored-by: Kuba Szczodrzyński --- .../data/api/task/PostNotifications.kt | 14 ++++++++++ .../edziennik/data/db/entity/Notification.kt | 17 ++++++++++++ .../notifications/NotificationsAdapter.kt | 6 +++++ .../res/layout/notifications_list_item.xml | 26 +++++++++++++++---- 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/PostNotifications.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/PostNotifications.kt index 843f2174..28e62d59 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/PostNotifications.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/PostNotifications.kt @@ -8,6 +8,9 @@ import android.util.SparseIntArray import androidx.core.app.NotificationCompat import androidx.core.util.forEach import androidx.core.util.set +import com.mikepenz.iconics.IconicsDrawable +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial +import com.mikepenz.iconics.utils.* import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.data.db.entity.Notification.Companion.TYPE_SERVER_MESSAGE import pl.szczodrzynski.edziennik.utils.models.Time @@ -107,6 +110,10 @@ class PostNotifications(val app: App, nList: List) { .setContentText(buildSummaryText(summaryCounts)) .setTicker(newNotificationsText) .setSmallIcon(R.drawable.ic_notification) + .setLargeIcon(IconicsDrawable(app).apply { + icon = CommunityMaterial.Icon.cmd_bell_ring_outline + colorRes = R.color.colorPrimary + }.toBitmap()) .setStyle(NotificationCompat.InboxStyle() .also { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -137,6 +144,9 @@ class PostNotifications(val app: App, nList: List) { .setSubText(if (it.type == TYPE_SERVER_MESSAGE) null else it.title) .setTicker("${it.profileName}: ${it.title}") .setSmallIcon(R.drawable.ic_notification) + .setLargeIcon(IconicsDrawable(app, it.getLargeIcon()).apply { + colorRes = R.color.colorPrimary + }.toBitmap()) .setStyle(NotificationCompat.BigTextStyle() .bigText(it.text)) .setWhen(it.addedDate) @@ -160,6 +170,10 @@ class PostNotifications(val app: App, nList: List) { .setContentText(buildSummaryText(summaryCounts)) .setTicker(newNotificationsText) .setSmallIcon(R.drawable.ic_notification) + .setLargeIcon(IconicsDrawable(app).apply { + icon = CommunityMaterial.Icon.cmd_bell_ring_outline + colorRes = R.color.colorPrimary + }.toBitmap()) .addDefaults() .setGroupSummary(true) .setContentIntent(summaryIntent) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Notification.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Notification.kt index 1e8b8e0e..6a2a787b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Notification.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/entity/Notification.kt @@ -10,6 +10,8 @@ import android.content.Intent import androidx.room.Entity import androidx.room.PrimaryKey import com.google.gson.JsonObject +import com.mikepenz.iconics.typeface.IIcon +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import pl.szczodrzynski.edziennik.MainActivity @Entity(tableName = "notifications") @@ -96,4 +98,19 @@ data class Notification( fillIntent(intent) return PendingIntent.getActivity(context, id.toInt(), intent, PendingIntent.FLAG_ONE_SHOT) } + + fun getLargeIcon(): IIcon = when (type) { + TYPE_TIMETABLE_LESSON_CHANGE -> CommunityMaterial.Icon3.cmd_timetable + TYPE_NEW_GRADE -> CommunityMaterial.Icon3.cmd_numeric_5_box_outline + TYPE_NEW_EVENT -> CommunityMaterial.Icon.cmd_calendar_outline + TYPE_NEW_HOMEWORK -> CommunityMaterial.Icon3.cmd_notebook_outline + TYPE_NEW_SHARED_EVENT -> CommunityMaterial.Icon.cmd_calendar_outline + TYPE_NEW_SHARED_HOMEWORK -> CommunityMaterial.Icon3.cmd_notebook_outline + TYPE_NEW_MESSAGE -> CommunityMaterial.Icon.cmd_email_outline + TYPE_NEW_NOTICE -> CommunityMaterial.Icon.cmd_emoticon_outline + TYPE_NEW_ATTENDANCE -> CommunityMaterial.Icon.cmd_calendar_remove_outline + TYPE_LUCKY_NUMBER -> CommunityMaterial.Icon.cmd_emoticon_excited_outline + TYPE_NEW_ANNOUNCEMENT -> CommunityMaterial.Icon.cmd_bullhorn_outline + else -> CommunityMaterial.Icon.cmd_bell_ring_outline + } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.kt index 8df33a8c..6c0fe067 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notifications/NotificationsAdapter.kt @@ -4,6 +4,8 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.RecyclerView +import com.mikepenz.iconics.IconicsDrawable +import com.mikepenz.iconics.utils.colorRes import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -43,6 +45,10 @@ class NotificationsAdapter( val date = Date.fromMillis(item.addedDate).formattedString val colorSecondary = android.R.attr.textColorSecondary.resolveAttr(activity) + b.notificationIcon.background = IconicsDrawable(app, item.getLargeIcon()).apply { + colorRes = R.color.colorPrimary + } + b.title.text = item.text b.profileDate.text = listOf( item.profileName ?: "", diff --git a/app/src/main/res/layout/notifications_list_item.xml b/app/src/main/res/layout/notifications_list_item.xml index 498f7e21..13df88d1 100644 --- a/app/src/main/res/layout/notifications_list_item.xml +++ b/app/src/main/res/layout/notifications_list_item.xml @@ -9,12 +9,28 @@ android:orientation="vertical" android:padding="8dp"> - + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + Date: Mon, 12 Apr 2021 17:18:53 +0200 Subject: [PATCH 6/6] [UI] Add eggfall. (#22) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add eggfall * Add egg.png * Add more eggs * [Gradle] Update android-snowfall to a fork. * [Eggfall] Add randomizing egg images. * [UI] Restore snowfall icon. Add separate eggfall setting. * [Eggfall] Limit eggfall to near-easter date only. Co-authored-by: GitHub Co-authored-by: Kuba Szczodrzyński --- app/build.gradle | 2 +- .../szczodrzynski/edziennik/MainActivity.kt | 20 +++-- .../edziennik/config/ConfigUI.kt | 5 ++ .../settings/cards/SettingsThemeCard.kt | 13 ++++ .../edziennik/utils/BigNightUtil.kt | 69 ++++++++++++++++++ app/src/main/res/drawable/egg1.webp | Bin 0 -> 6320 bytes app/src/main/res/drawable/egg2.webp | Bin 0 -> 5664 bytes app/src/main/res/drawable/egg3.webp | Bin 0 -> 5982 bytes app/src/main/res/drawable/egg4.webp | Bin 0 -> 7238 bytes app/src/main/res/drawable/egg5.webp | Bin 0 -> 7806 bytes app/src/main/res/drawable/egg6.webp | Bin 0 -> 2582 bytes app/src/main/res/layout/eggfall.xml | 14 ++++ app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values-en/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 15 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/utils/BigNightUtil.kt create mode 100644 app/src/main/res/drawable/egg1.webp create mode 100644 app/src/main/res/drawable/egg2.webp create mode 100644 app/src/main/res/drawable/egg3.webp create mode 100644 app/src/main/res/drawable/egg4.webp create mode 100644 app/src/main/res/drawable/egg5.webp create mode 100644 app/src/main/res/drawable/egg6.webp create mode 100644 app/src/main/res/layout/eggfall.xml diff --git a/app/build.gradle b/app/build.gradle index 72c03e94..838083cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -152,6 +152,7 @@ dependencies { implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2" // Szkolny.eu libraries/forks + implementation "eu.szkolny:android-snowfall:1ca9ea2da3" implementation "eu.szkolny:agendacalendarview:1799f8ef47" implementation "eu.szkolny:cafebar:5bf0c618de" implementation "eu.szkolny.fslogin:lib:2.0.0" @@ -180,7 +181,6 @@ dependencies { implementation "com.github.bassaer:chatmessageview:2.0.1" implementation "com.github.CanHub:Android-Image-Cropper:2.2.2" implementation "com.github.ChuckerTeam.Chucker:library:3.0.1" - implementation "com.github.jetradarmobile:android-snowfall:1.2.0" implementation "com.github.wulkanowy.uonet-request-signer:hebe-jvm:a99ca50a31" implementation("com.heinrichreimersoftware:material-intro") { version { strictly "1.5.8" } } implementation "com.hypertrack:hyperlog:0.0.10" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index 8dd83bf2..2cd4f7b7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.Observer import androidx.navigation.NavOptions import com.danimahardhika.cafebar.CafeBar import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.jetradarmobile.snowfall.SnowfallView import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import com.mikepenz.iconics.utils.colorInt @@ -81,12 +82,9 @@ import pl.szczodrzynski.edziennik.ui.modules.settings.ProfileManagerFragment import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsFragment import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment import pl.szczodrzynski.edziennik.ui.modules.webpush.WebPushFragment -import pl.szczodrzynski.edziennik.utils.SwipeRefreshLayoutNoTouch -import pl.szczodrzynski.edziennik.utils.Themes -import pl.szczodrzynski.edziennik.utils.Utils +import pl.szczodrzynski.edziennik.utils.* import pl.szczodrzynski.edziennik.utils.Utils.d import pl.szczodrzynski.edziennik.utils.Utils.dpToPx -import pl.szczodrzynski.edziennik.utils.appManagerIntentList import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.NavTarget import pl.szczodrzynski.navlib.* @@ -470,9 +468,21 @@ class MainActivity : AppCompatActivity(), CoroutineScope { // IT'S WINTER MY DUDES val today = Date.getToday() - if ((today.month == 12 || today.month == 1) && app.config.ui.snowfall) { + if ((today.month % 11 == 1) && app.config.ui.snowfall) { b.rootFrame.addView(layoutInflater.inflate(R.layout.snowfall, b.rootFrame, false)) } + else if (app.config.ui.eggfall && BigNightUtil().isDataWielkanocyNearDzisiaj()) { + val eggfall = layoutInflater.inflate(R.layout.eggfall, b.rootFrame, false) as SnowfallView + eggfall.setSnowflakeBitmaps(listOf( + BitmapFactory.decodeResource(resources, R.drawable.egg1), + BitmapFactory.decodeResource(resources, R.drawable.egg2), + BitmapFactory.decodeResource(resources, R.drawable.egg3), + BitmapFactory.decodeResource(resources, R.drawable.egg4), + BitmapFactory.decodeResource(resources, R.drawable.egg5), + BitmapFactory.decodeResource(resources, R.drawable.egg6) + )) + b.rootFrame.addView(eggfall) + } // WHAT'S NEW DIALOG if (app.config.appVersion < BuildConfig.VERSION_CODE) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt index 7b39383e..f36652a1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt @@ -49,6 +49,11 @@ class ConfigUI(private val config: Config) { get() { mSnowfall = mSnowfall ?: config.values.get("snowfall", false); return mSnowfall ?: false } set(value) { config.set("snowfall", value); mSnowfall = value } + private var mEggfall: Boolean? = null + var eggfall: Boolean + get() { mEggfall = mEggfall ?: config.values.get("eggfall", false); return mEggfall ?: false } + set(value) { config.set("eggfall", value); mEggfall = value } + private var mBottomSheetOpened: Boolean? = null var bottomSheetOpened: Boolean get() { mBottomSheetOpened = mBottomSheetOpened ?: config.values.get("bottomSheetOpened", false); return mBottomSheetOpened ?: false } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsThemeCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsThemeCard.kt index 17b108e5..a009279d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsThemeCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/cards/SettingsThemeCard.kt @@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.ui.dialogs.settings.MiniMenuConfigDialog import pl.szczodrzynski.edziennik.ui.dialogs.settings.ThemeChooserDialog import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsCard import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsUtil +import pl.szczodrzynski.edziennik.utils.BigNightUtil import pl.szczodrzynski.edziennik.utils.Themes import pl.szczodrzynski.edziennik.utils.models.Date @@ -36,6 +37,18 @@ class SettingsThemeCard(util: SettingsUtil) : SettingsCard(util) { } else null, + if (BigNightUtil().isDataWielkanocyNearDzisiaj()) // cool klasa for utility to dzień wielkanocy + util.createPropertyItem( + text = R.string.settings_theme_eggfall_text, + subText = R.string.settings_theme_eggfall_subtext, + icon = CommunityMaterial.Icon.cmd_egg_easter, + value = configGlobal.ui.eggfall + ) { _, it -> + configGlobal.ui.eggfall = it + activity.recreate() + } + else null, + util.createActionItem( text = R.string.settings_theme_theme_text, subText = Themes.getThemeNameRes(), diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/BigNightUtil.kt b/app/src/main/java/pl/szczodrzynski/edziennik/utils/BigNightUtil.kt new file mode 100644 index 00000000..c7f57ccc --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/BigNightUtil.kt @@ -0,0 +1,69 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2021-4-8. + */ + +package pl.szczodrzynski.edziennik.utils + +import pl.szczodrzynski.edziennik.utils.models.Date +import kotlin.math.absoluteValue + +// Obliczanie daty wielkanocy - algorytm Gaussa +// www.algorytm.org +// (c) 2008 by Tomasz Lubinski +// http://www.algorytm.org/przetwarzanie-dat/wyznaczanie-daty-wielkanocy-algortym-gaussa/dwg-j.html + +class BigNightUtil { + + /* Pobierz wartosc A z tabeli lat */ + private fun getA(rok: Int) = when { + rok <= 1582 -> 15 + rok <= 1699 -> 22 + rok <= 1899 -> 23 + rok <= 2199 -> 24 + rok <= 2299 -> 25 + rok <= 2399 -> 26 + rok <= 2499 -> 25 + else -> 0 + } + + /* Pobierz wartosc B z tabeli lat */ + private fun getB(rok: Int) = when { + rok <= 1582 -> 6 + rok <= 1699 -> 2 + rok <= 1799 -> 3 + rok <= 1899 -> 4 + rok <= 2099 -> 5 + rok <= 2199 -> 6 + rok <= 2299 -> 0 + rok <= 2499 -> 1 + else -> 0 + } + + /* oblicz ile dni po 22 marca przypada wielkanoc */ + private fun Oblicz_Date_wielkanocy(rok: Int): Int { + val a = rok % 19 + val b = rok % 4 + val c = rok % 7 + var d = (a * 19 + getA(rok)) % 30 + val e = (2 * b + 4 * c + 6 * d + getB(rok)) % 7 + if (d == 29 && e == 6 || d == 28 && e == 6) { + d -= 7 + } + return d + e + } + + private fun get_dataOf_bigNight(): Date { + val date = Date.getToday() + date.month = 4 + date.day = 22 + Oblicz_Date_wielkanocy(date.year) + if (date.day > 31) + date.day = date.day % 31 + else + date.month = 3 + + return date + } + + fun isDataWielkanocyNearDzisiaj() = + Date.diffDays(Date.getToday(), get_dataOf_bigNight()).absoluteValue < 7 +} diff --git a/app/src/main/res/drawable/egg1.webp b/app/src/main/res/drawable/egg1.webp new file mode 100644 index 0000000000000000000000000000000000000000..94440758e1a18ebcfeb98c0631e04a70e5517aec GIT binary patch literal 6320 zcmV;h7*FR?Nk&Gf7ytlQMM6+kP&il$0000G0001=005N$06|PpNDu@700G~lplutb z%EBM^9)gI-@Fu&WmtGdqL)xvqX(P#&(qUQ}W@cvQnPq0)9p)WM>z}{WTCW$sMD%|G z=s($__L*A`AFNNdR;nQ}iF-@oxIapR>+XX*3d-{T&7cVCTRH|oQIDjU|05?m+x|dReIz+-N+AA#fkHF zt1w8VC(h%oyZ~K0c3yAf1gGG@dHya6OxA|;{)q{Sed!dg24&5u90*9i(;3$UqcT?F zjtT;ibKumzwLvh?oZ^Kbj5^J!h5(das&a?9@OaZHe*|yAsqX|=k<@pR2hDCcfDfTf zI*2X6iZ3wiN4TCkkaMt_9LmcQP<9)Jdje|M0j-6Ub&TYLK{V^2wgbvN!?JDgEIP2= zaB|PlY+E$*4sIuytW!K2V8$KbMkw|G(Mu>D4)S#*Z!z5jQtB|DXW>`}+hP1uMcT3wDzIVzB9sW~g^#O3Xy81&U{u$O5G?8X7=k;x_CoMf*GULo>ADEPdtGq|KKv|P} z68`m&_ERInf3JO|7H9#

P2`giN`Lu*woiqW{>Y<U*WHLR8F?d= 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 mwZx-yr#SM1B2C7IQ* ze2D1(1Q151|B5?>ZBrZj2by}0AIVEuy8OKQ`U9BD`_FYUvQ-Z|CVn^Z zx00fFZQw_tg=9QvBk$9#BXX<_J&#$2yQGbsXS--q=BN&!OidqBD zX~U;EFh)`5nWicOLzxoS#>X@5U{wpa!ZuK^Bv92Bkb0*@yp4v0C7aYjj&nF9FZz_? zD>o>Xj<>a#J5E62*J?rQp~Y?`xsD<0)1vkRi^XM0#BhyjVTX)h5z-RUJg1l-tZF1$dT((o1ks-=um=LDQwhZbx$_ z*AZjM_T=)iuncR#N1*VPWH%0yY%RIU6^?&zNHjex+#jCGcI4p5Ov?6^4uOAY(!#g; zzykerNxDTJq;?;q`vxOZNvCqc!-lnK@f&?&KTMyJZ^kEqPvkpvFt{)By}1~2G{7tj zbqE?Uj35}ou#8{{0v{kaf#BXExP{=nB6x`+h^mgIZ#ZL?VX2Sf6W5Xe&b3QfOu3%p@s=Ok1H9}tc#9#LP?;;neaP3U*>&vGFf5un`y80 zWQzqiW?klxJw_LmIch#eHpz{TrX=c_EHiT%otM1^}Qbo(V_r;+MY6{_PJ zhpd$=*T2H@wOhetwVXZn5Qc||93~4cnYmSg+%A>7Bs~j3pL6|7Gx<|1$jFE(ZcuP&gnQ5&!^@M*y7x zD#!qq06vjGn@OdkqM<4r*$}W232Fe9&r%oD`H9yb&HrfH+poNvdEd`Z`p;C~sC|Pu z+xdt6#PxslY5m9j2e1e9&-A{w-}Swa|GWBw{^I&}e(HQE|8)P8`?>93>H+`%fqTP0 z%6o7BMc~h!;7_!_ty%f(&-Y&tFI{f!fG^B{qkg3SKlWUj&xbz|J(Ryxe`7u$|8L?2 z_+R;+z@Nzfp8vD^(E5%4d;bTSzuEuW|K|4v{yqHf{m=K0ZO>%?xPHQasega$P+Q5z zXcJ?^QrQ=#vKL;E#KTLOyC4O!GqubknH?ameY@|SvJV%~R$XOljy_1ve zsT;ia)++`7@xgf5O8MfaSW_ou96?>Ws!eu^^-DD|mWMFtgRA(Kg;cs_r$)tJx`Nl7 z5~M(7jb3wf+K`!@eZMf5<|5-2h81)Ia_odI;9+UYz13-@{IDE*IER}+TkUMCQv@e> z#R6yqj-+n~Cf+>qG8(wK?HxuRA~r=&CV}tlQ;;8VO0K8K_Yo>z?GQMz+>>rin|_!| zSKN>^hUt2B@6rTRTA!hw%Ik{Q6E}_TaGj-iX+FC6#7Uwk&ou^0hX)t8uUa;Y+w zH`TOett4oQGluNd+TWV|*6-N7(##-Q_u!s;-VGG5xyJ6|AWk#EvT zW3s-m?Jhr7&9~^CVtFTXJj3fB*K3v8^F3qnH$}ymFB>>k8c6T6(^uEmKOGKR-{hI7 zGYpdhYh~irmjHkCPk12J{i)ECOI)7anjkWBZ7i5wRl6WvgY5^e`J6Zt4&tMf_JV)> zYsR~zqUU1f@aC)^{sYB$Cg!E$ldblu&#y%&-i@-WtG=UHu~9|s`gUfOF@nI(hDZUT zHSrC2t0ca@#pj_O|N1fbyU{SjOjCg!TdZdeMBzU6|MDl1vM(HVKG62aG=ay8D@QXa zRA>R6p#QT00gX}e;VK&%GJ*H%_5ZN&a{j<^@cP*J>@Evy&<;v;TRR2n=j4^%v?At>x77tdy^*yg;5WZo#fIk%W8f%a-M3gmzm>U5VEhIR`c;E*);5RPx zE2ClkdNLRcEt&UCBV9t&ht}p(tjJKk8w$OYhMH#1G9ztqbT$iE{&>d4e}y3g8)*P| zU41~Y>xVt)o8{M+Kc?+DT@JQ6)KuYkg8*SPi59v|M<%C6#@eZw{_@VFyy&D zSx%zo#_QQavTbT?cW>hKSf2*!@>ul1J>^?aG)#oECOSGTf zNPZRfBjn~W%GseoF_d}0YcSHYpw&c~GxewdRS_Tf)am;NL4&LP;(cv?ng6eqkjeo; zGg-f1ZMg`tn^P23N?OgGo39-E%I?J_`Vmi8a1scV-$en%gN(4{FBg5=V+Z!{N)|)+(aN;EdY6RBl=`;t7Yg^M-g!|sYa(c4wiH!Hf z3ji8oH20OVVVvg=6t*Whp&K6dMx{H3=lh*(+dYD+^d?vFCm~FLx3=u>0Gxr8+gdxL zP8lrVU~Z&Q9q14LByS@UKdba*2_u$s1nDlw!o$%jN)%77mpV%SLYg_+R-aIB$-iqC zHrc853PhnFsau&d?ca3RXjVDaaG&oDFGeM1gW-LZt61C7u_1g8L-eLqwf^a_A{o<5 z>iNx03t;?ST$#P0aMf2!YcKpRb#UY5NSFLL3KUgl1Kn+_WUj>A2ovhBnrAMG1x zm~@P6a#?$P2Z5LHn4)AsFVsalk-2*!;DAe`h$zCpi4$&T|9{FSn(MlpA~t4g z4IJW|_|b95Yx3K-De)%PAskF$!HRFmyLq!h6JMa{CeuIu3@yhDHftt7VPR|Jep zEq_W!a7P+$%LC>9iuE~ibJIL%!R2|b49%&h*X`#_`!7z!_4;FNhJD(!n2Ns>mc z`)o+y=LK$T&Zhsh@hg&EpH)DF#I0*sVppsxEN2N$NipxR%&;!ArO7F}3>Y8 zU>10gt`>f9zYn1E7bW&wB}NqoI#xHV-rXvVAhm0>YF>5?QvNx0MaOBAGf(a;DC9v( zpR=02N;A>Out;wC?XfLC`It&Kz0`=lXwv*I7(^h+9$#}22ro(pShns33HYzs1T?hx zYdvD0>`#qQeKp(O$+5&;2!@3h%wx<<@HQRs&lnT>BGDY5{g;e1H?E(F4(-JHHQDx%NY9@y=wDZw$6 zaZwoW!~NHN`qC+UImUJ#Y1h&Kp^43-%$zsGQGnrSYdD}9%PP4dml3Ezn`cB7%7(91 zJ<-ba-eLyHCxNWo-P!y4p6!O#2JlU40ATmYy&?u;BCYlWll<2gN>o>p=&_Vq!C6)Xr*df8@1ocNS(Y{|?@N;B zFtoBfCk58CPl;!8MceeA5{F$G`k@^iU5%YXZ)>I96aSy|$5+4SAN)_6`Tt-d=|)k> zP=g&j{cncE1HOMzdYl9l z9jZkPZ}h#(nRV2Jlj&cQ*DyuggW4eC^z%ZKWg8c!Uh}lPNJKWjqCZ{&Z|%{eNJI2O z^g@~TWXBeroKA#4m^6rkSo0IHbAa>*%Pb8|l-1l=Hznc9Dd7V(^(wSYx( zvbtx8`}4rgQb4KHmC*;9CD_FHkv&>V5?5UXIi!*QMDYW8jX>mTm?M9Dq+G?_XesIn zhZ91uY4|hrwDjhQs6lYM>>S~72UoEf7n-51OMRD=}jl& zcgd#N9#!xwc6Jy4tL}Yz>O5iS)wV9H8ap1$gN>+HuR%*KuX5rRcz8{RvS;1A;fJoN z#|B?hXU?iR)_{Sf~-7Y27!@5`W_a!DD4@pO<{T;3QnqrzmKQ$fT;YVWB(pLL@ojlR{|07&AnjGrycaeE(gtYJEAOd#^6l`1gx- zgw@g=rBWoYsmMF5!tB`$idAe%Tlvhw#<(-!r*g1GVslz6FH>P?X};)}-W_@J%T?_NN#DDEQ9Z z{s^)&c{9JRHoLl^NSaiSOzB-Q(+4;RIfGCeh?uQb#8AY{UvTEQP!OkOpko3NiwMkhSLV+UinYHc93U4fK!h^ z<3>V1UPkr5Mf(yLbUvRaebFfl&vw?$ZubZ03+9#^f1d<8<+CLpxO8aDM0SJ_p=SNy zr$~7Z?Kxwm8q%C|o#LW#iF~p>N8U;PsD(M;$vivA(o`EJs)9e)RorHZ^p1FeUDnDf zq$T;pz&xo4=tr}+U2!r!=KM=fi=cJMj>0iKdzM5~vh0bB&}Z*e4q|l*#d$0}?;{4R zQ{*36myK_b5cMUtnorTOcqCX!W|>q%FahtA`+Lh4#OwAvXw%)O^>x!wj&Qu{5Lomy zonV}_3mGr7F8Kk+ZzP7G9h(koiQNTbVrK95*IUhMJytjP+zewxd>SGNk1GoaYW2a! zf7Bt-bz`}GltUrU+n~XpJe}w^wW%vhmxa~Nx)CXKj(Q+RXLZOqQ#DEfL?mldrp*X zKZ+xkK%fI~{KjeE7Lcfx^SJ;L07vFtK;lLS-`wpEsZasrkk^kx97%(23M;(6V2lsv-WiO1?f9gkNWexgCv|B-wNY<6?LQg}S%4zjJU%tO?Roz(c3ueJu=VrS@pi ze&R(O=mR6@TO*JfBkLgU{yrvN@M`)>%uuQ$Ae^8MdG4%{W+5@#KKA(E>ClL-Q{iKr zR7{02BpZ{Qu9nBCG#0+&JE%A0-?fa4u9XrgP}U+bU_;}mx)(FHvh#I#$+?F~G>3lT z1iX#g#t+}nfKF72LPf*x{7gE%zeI;OZbP!s^hkYuH*tE#)tHg@-H+t%`I&+cKZssBGs2hT_% z`ac2icg&^Rk6*oeU+wDg?aO{ERQvnC=ARxN*jtHL>>QfS9kiisPO^ApBzL@ZBueEE zeaVe}J?KU1{*W7gzfGQn_cF@fg~IF{%ScCeNfK^kyzT2rjOA}K>bEO|*gBSxk9CP~ za4w^_gO0y*nWS;&u4STEJ!|e(CVSg)b~_Wk!`RhK`nqGvUChKUGIc1EKgiPdd3x5v z(8|fo;M8h%s*%j%aLtT=l$m_Q%-PK5DOR@5^I=;UsXk>!KN}x?nbkfv_GD&_iF%Y9 zt9iJW*}cO;Pv*DX#Xxw^kXk|SSZ4V+xq6Z(tEpYfOkXCpY>q2iM(bW?yO-3edA@8F zrMsE&+k}?Pab`>CT+OUsAyZEBW+jzlnfaqc+(+(Oj>gu^eiw~i{_c@T)BH^vh5cE; zeH5NZ@R&e7CxO-Y_Gc0I;~SJ=2wgEP!(@T2D+{?5+XX4kVS6sc3uJLt3M+7J&SGxF zbzF|)xccPiMdjbg@fKAvC&#SEv?>d_8q*F*wqrUfiD9}X$rVfkk{G6El03!qP7=d3 zB8g!dmt-8%q$GyOwIyl0-+c3u7$O~)WE_6;wIpd_dM(K-Ob;Y^i0P&zhUttXXE5!R zWG|-mk{G5mFNY;eIxI&EP!Gt_kL#!$Cva_$V;wF(DaC}xr9)B-0`db=7`8?8GT0() z`b>rwfc~%yhw)W263o>2T(1Oof#4{Ky){EJE^#rycv+) z*ygNlbo3Tyw}Egy%9kymq`Udr1*BasSG_gR#WmDuvD-nB%|>LuXym#(bq6-};r_co%fM_6@lj z8eIH@+KZ*oVC|Zzp;32omXe)v&}h|&56!5qd`{=Z8fZB9CQ5DG9UP_c^?--QQxmZ{ z)$;rlKD$r?!bnVY$>m90QYc_gb+^j_*5I1Z z3XQ79U3W*DvAeqhAg;7gS0hqYzxHT01%wu*2?jWQ@{(BciZ-S~3ZDX?j;0cXQUQGtljqG+ zEP!T6=DD&mC{PY58b1~-0DTv&G|z>VmZAebLun}%v@E950&pCnCN*`~TvRpF0L;5k zswK5D#lm&YSxjY8D}$*6VVw`DDk`nP7Wi*$K?QYD6;%q}!5`*UP&gp+5&!^@N&uY! zDwY7206tM5jYK1&Ar@-}FgOJSpbcV;u<*$$-~OY?Z(aR&=EUT_usp;0-Fbxlx%GAQ zul?iHOZxx&PPRWl4woi7KL@!n2eN&ZLftLz{7SM{&; zAK*VC{#}2?{GR^}?w{(<_}`l!-9Ev;kbg4&8~u0ukNscpfB*mN{owl_{nqvo{Vn_P zO@P+q<_aX^d7a>BBbpQ1jz?bhDd&X@V4zHhBLLXUj3q$n zrOj8f4+OFgK=Zm&yk0BS4H>&EL8NpicfZZ{qyJ1bPVi9S&n~qUGij_#&plR$Wvx)h zgXw64ZLP(=NFp9UBckZ5ZyF;JJE8Glt9&8)h<6eU0$zo0%Y#vFqM1!$gD)w_v3+M06w46`~}vkWfU3ghefnXcwIm5DtluV2N3?k z%U7x7yXi^$;q%Em{B;T@IcEPyoK)ApDkeGr0RH|*g^o>%Or8Q0*gQ&7Eban`t9N+O z6}I6gH_*?eorD&f>&=e7-gA5?I?5uKjXAtz>zoiR5{G#70~OS_ay#eZ-~2Jbu4M+x zz$9PmNnH;83&0<>D?BU3@yak;r@;PAzx}+Y< z?wA;#BDe7LJ)dK?E!Ne zdL8!HVSSLM5tHcmS7H5jc_4FDNLZZ);f8sl62;j6s=boP!q1fUy;uHRhyTB$LE|lr z9+C>C%UX5zyhw7Vi(K$$Bm&_jNA)L}5^Y~OL@kV=AGDUMn?w%h)9vK-BMSVX4+&_ zjX>MM>XV9(r%$KHYxOGEn1Iiv^6Q>;S2BO1RPoa;$aQND7rh2DR_}Xba5u}{0=)-X z{E<)hO~f3%-q9-Wh{d2;)vBpeCa}2pOOH4OW1RcafgCMV_m55{8CKHMAJ|Hh>(t{O zXQ}#2+`1&_TjKCQa2*Wh5CY~4E7MXvcXIgcdnJ~Qz~VcC%SOjwZPK${JYzEpRPwF3fK)m7Yu<1p~3 zA^`=2gC_k$hbQ0Z%`BFT+OLni^EKFeLgPe%Bco1+Dg+5pOYwHU)L4F(oX$?AWfc+^ z>13A2%vd=MVowy{#{GqeC2$not9CTyr5rPqqYh}cKNX6kAnVIBg!O8=H3#o*7~){G zN0^;;#{|hYg{K1OcV`lGgn3oL#FL*_CjWDHVXnoxMh`iyT~$#=&@>i=#Px9KLW^N$ zb}VxMIUO6tyJ`?Mk`bEM6oVkI)aW2cqCnPT8G2$lYWhCCI(jw!)XM>nPzh#r1muMo^Q^VxXoCCe8S}^e74G4JmPb?1FG?0TT zQ{T;;-Rj)Yna9KP8;VVrzA!*t1UA7xuf}}iXJ_?!>#!{?0dgr!^~V_`08G>IyxSLs zis-O&VrG99riU>ZDbML>4!q`>!Qr{dCNHrzV<0fD4E+R*=T z4-@*DUF3?nDItGRTBHI#Wph#ZVGXBu(@{R=L#a>@onazv@9s)Gc^{39kt%>^I3;a5 z5H1u*io3sFyDc<>^Xz~fe;e%LA%8w&&OKD!+AdS}2Pbs-#c3;GcS{jM1ORsVr?{GGu0 z7$z|+Z`uR3x>WgKRzQJ*VBzl&mIbfNW7NZ`S^QgszM{IfJGw__CB3M_ zkpg6qtyFt82oz59cF*(b6{AF8q{W_J5k+Mx<~r?27xU3vK)0Vox0_@M_?f3#s?o~h z`zQU(K}Y!3Ewo+cU$M1Gf#bgyg>t2+O7aZ=e)fu~pmyM$`$l`9O%eW_{^BE48Uph& z=dYM?KAbv`5aS+gevm~~|10l{WZ%lK1ph%7QRX?5sP62zOxUx&^r)cLr{j68gTODI z_n}|H*_67OXy{K@M;<6td7sNwS%jS|zEvck;#965t#{^l?qMbTGIDm|E-fH=LA!{f z<#g+|VToQeR#r!k2_5)c(FkV0UF(^M(3S4l({+ zS4H5CVe}V{ik}^$V1r?_#;4O$cbJNauCu<%gq<{IY+T$OfMYznKuHA(Cp=VM z;$bI0=WjT)G73+-LJr!W<)ndtEXOOf9^lfSKRdkmaeq8vrmu_TMG(Qc2S3;g$)zeq zTlDEUL&VY#?sT5Uf~8zeG^hcTR93n7>64OwNX|vIYOXBU6zSDsKw~7C^nOtSf2q*U z{#W(bn_MpfVL{GdtfV7Em@{u#^B>Ln?{2T!xUI@K^F}+v*MuPPU`#v9pCeT@{1^*a zpc2CDTz%bWQB&t5ALa)lF)3^hqYK$9^$|SP(*+l36w||hkLIU%3RyIr_44BpKPnNH zOgEEk41sD{WJSl($c1v~@j+aHIqC)-=?QgUCa zZhvlqEoOdwczP2f=`;vo?BZ;!jc zz`)G`KnZlkg>ymOe;Y;9!Kkq=waRw+F^$-FKLSx^^gN|SDPmNE%_T;T&^Bcd(wrZ1 zPp~1H1`j&?rqM}HzpeR_GIxb28ZNn>^2^;~P$d$w)&uEapnEd5CQ`q1 zakSATu5B8{A^8Keao2dwd2Q^J*4y=}Qy!%GR%wGBElTn#xevNZR`V}vF<--WiyXgh*e{Jx__q`gt~B zZ**bvf8c|ClDa|W6U`-hYb6#5Jj~YG1#rzyTBeNRlY`($CfgzH;HiUe^}rUKo53?<_JG#N=f0o9YgWf-KFzjIfFZhb&cA{tKo4Uiz7^qxo~?{mw+nQ``qMcduKK z)DBzz*`NE~-{Ap8$1f62V}%EQ!A(ZN%xIvk8F?XBef2h1*Iam?^S}7jz$EnV6TLe) zxe`^TV*Arbe-^g2yovrN9@*7jFHQyK)bgHDC2BZ?9Q1y0Hj2yRe14g(Sw&T=ifjXo z-BB$aBOje`iN%jPIpeMQ^sVGvPF>(JaG5gIg2?{hUyv6U)E`-6g2Zg{p+dqkj=N{g zVBr0yh~4S^_Io^C*C<%akLP+~ zM)xYpw2@Pp77;8b_i?_ zHFuIP_!N?PVUQ1d*|wMB;I+5*gw1t8+^BlfVkW8JZJ%?E@v_&ml5jm!V`0-s=aF?N zbE*5!+l!3>3}q;6)ZaJfY7qpwndfhOK1!3)r9>$~N&`%;pJn}KdrvjPOf9bM9~^Lg zUpU_`*OgnXwC}#%(;wo@qS<;PNC_?1A4~;~xnz;3Wmy)4lKCPdNaHo%lF1ys<}!G? zcXA-qARAX?D)btrZEH~aXkIhOk8-~tAqj5*$H;#TqsUIV+U|?`(5R+8_)=>JPvWKV zWI+Rf8LxMkuc_CxvHwjJ0Gmw9Z_+0IuAvy>6l3nbs_EAT=+2OP438;f<^Q9^*4Rf= zA))_fV1!xFq*2=9nJ`kV{xDv4z-oeucgC*Vjb}U2PD~~KCdb_LFD{}pf2S5t@9y|? zS^b8F44t1ZNSElG|L*=#x>S)`!q@xzrhNS+Hn1tdP@OPlXaZewTL##jEqV>q%c>7r zb}-q^7D#d}pF(@MvuDJqK)H~HbdK7gBjdA(MR|4H75*Z=>dFzJ+-wl~S)R>8Fc9tb zMdCUC^Y}aE_Ail}4`M3(#SkBqW2gb=qaeG#_kIN~@uv`v*33Tr1yRtFN#WV*?di{Y z@JX*jS&eCjDlIxZNepnTrYJK(ybt#6C$U)wVTx3eb6**U@ER}*V&k%lwVaw`o=F~* zsvuciOf6u1W|z8#F(Lu+h>Q4C6|SG6sRB9d*v0lme#O$)*c+3bw` z(h9i`yJ&0j5P^BJ5&Wd*$r}#;DAt=PLm5xHnf1>+6-}gnY-=CH!hOJVMd$W89YGZe z;fml?%7F_Gf+%pY#c=r08{*c*pahCpa0I<9QxoBU^J#yc|H!k`JSJR7j>Ag#FqiSO zVoHrg5r*ut-|`uqa+LGQ6ObwZ@`DE;oH8PY#X)}{0uNH!kM2&wP!64E3>tk(VAXmq9OZ00FO~plusz zvU2=MzYroK$1Nn1J^xGI`N*Gv+O=(lBq^9#)yCMiZO>F=Y}+&KjQ{^(RPkbsCnEYk z0p{0CqS%z^a-zY%PE$KJ3wS=jqFbsc-6R(|(~ zl=Z_dr_$<|DLYo_(>s|+PV^|V?sFoF4Vr`th44kM#^BRL`YDuH`85&$x=Mwe3yC~- zS^17NiQ_Tp?AgThycNw}No=n`Fk2GiOM+cUtj~#cJTX5Z)Xu_wpG0=e0za%1XmlzG zIK5b$*4rc^+QQgdMabJ$mSaiGW1_5FkORvFX}?Q?zOUt&NTN=Pu`vm|S%~&WX+HJH z&?(}MiLkPfr&%e0dzl1==XW59e2`twluTcHxSdZzpJO&SFBJxPjVH0kSPeCDHN%{) zB*8n3`sXFX0G~5Obg-$XWJAqme-eH_m)Fw0X0kGgzmmteeB&&tS@~vb4%?H0J2>3Y z;1+}Syas5~+n!Y1PVbryAm?Uum~qrrBqdi+JE6sKYLB#dNG!~0F$Y@9lA23t9nj+d zt#LgjXuZ$_q}+lY^PbXhQgoQoT20nc+Na5WN~bhAMQK8l2}*Z0xlif2CeJ9n)dZBj zX!3>9lqR55RQ>JOXwp#nqRE%vey=roP3f^Fpmb9cP`aeaWlG01IZA1(CZM!LlO>d@ zMvtbVgg1J?kiM$NB&`E_9H6yCkHxgylonqtEnL&$x*@((3sCD>(4pz2hI=~PH{^Hf zu!~+jqrq&89xiLpF$|Yzu#^KH%J&E?H^>Jbcp}{k%Ve!|>kZfYvOTnH7B`YLOThP{ zWS0%&)(5#hw>e>hT$>ES#A`_e zYAX;a!F2Pq6emqLeWYNcHQn7kF9Eij?%EpJTnk-a_L<*@Wv1)3%hf{0zPsG+_99~| zQ;n?l&>W|^1J-11WpO?aF!GSk-C>j2yBrm=+Z`Wyyx(f_S2;pHpd6p3H+3W!f`J*( zJ~2fL$0|cIOQZqR`(Dv`wZAq*V-D+y0CvUr42791E1jY0Z4T6A0E7*l&v`yv+7Jxk z8hI;10PM*AiB}8VXx>cjTVxIC7BagQsqe<6+m2qk{@}&yHz=|`&4w6a0F3m$3MGbE0H32oR0y$z;*Gj4 zRJE&p%ak7XP3dWw;%iq|!I?kK0aj2rAnX?a01#3DodGJA0G0qgQ6P*&BcdS}Jaz~; z1q8GJYc%=bACYG&^;PO@k#wonUQN91|4;72=MSM@)W7w8!GB*mP5FTRxBaU3WB;q_ zkNZd4H^?{i&-1-!zJh*T9?C!6|Ly+lds2FUfB)c!@Q3tH$UmrlNco%MbKQRF`r6>H zt<6IIY4}g~-`)Rn{h$AV;IGOJK));gi~g(T-;R=UeM7y=`w#l>@E^4QmY&zzi};J! z1Nrat@ARIk|HS`s;`{e+_Mh*+#e4yOJO0oA1N?8~Ps*qK|CFE9J-Gc*|AX8c`B(IB z^Pk+m&41AU8UO$Om)_s8U){fA-_zf}MECSP&KKWn)KnUnCa)4tvIh;nzC<2P53PVK z_&J7f(*!Ri7r7x^H!N^TVifE{4L*{j*x17- zg7UFCo_T8j%rkyZx4q-n#&fhW#@8b`VrM=+%$JNnOOk!=dRnL?i7M^xm*)SHGSL+&LsW9`h$Wt z-7m$}P32*7h{Eu(1N9E*SH37MQ*p7;wWM<^T&B|HGw2?D!>DKb)FxH67vEXDVruaA zdm1!=)I`$wZ%NUfZqN6GzkUnIXr1IS`4^uHQ}lj42k|=Bri}ZZiJ;e=pRMq@%>)w9 z1x!}Ecos}(`2-Vs=?{+5NZv4EERyg6V&v!*!!0KiJP-$3;CQ=thb9pE)=5Mk9r^Kp z$42uSg%%eo*19Vlhd2>1D^zT+=m~i z*cR3%sQl4djki{8#0Uxa)#9(==mk;PO^TJ?sW1fszcEuqzD9-fw03jXaP-E+45JGb zt#j!n!P}he!5TedcV;m#FzgS|jg34pWc1YLMm{1#Hu#EY{)D^~ixuPMJtr%nT*nZ0 zt0=xOb`zf!WC3?dRZtzMPVqy%_O5yd3x3Tdb=@L3EU{C5xv^{6jRN1&vQ;x0?;$)} z@pgLJ>Kx&pHnhct+cR!TlgwR2Yep$Bm^-J?xiq~*cX6LU;URPH%=5Z{ z0=PxQq*q3sI&a!JniO2pa2zZ`qL_hthUv`{-)W`Wz(u z=5qAM&M1I`eRPXjk-*NUoDzN7{o7c(l*Eb-cnWe;D|yN9=hpq*&5R|=jpinK3k)=l z?6H0;$9yq< zf(RAtYre+01g{5|q;rR&3uuwhg-Qs2=>kV$Izq+4O*^h64y2d{K&%N&Jb>%?yV>!c zC8zm+NDP-rRUn8y)?{ECVSp8iIu-f}WXPF<8@PnVb(@8H4_{uBfI36##iW>oI+kc+ zmZg5fcH2qJuuI`sqsUOjZRxL48bvIutYF_uwkAojpgvd2=*pNxh&ncsYlM>IMZ$w0 z-?r=f0;8Idn{V3(Q$n@A(%(kAlB@mD#Xr#L8ST|EQ>TBFcndzh_pkZQ`*)~4L<&qF zSd&8z>Ps?zS|oztC6SS4E9$ohQO`Z4y1RqVHS`LYOPDttRmHXqk>_+m7_`Gdu6M88 zR;eo^IlEvKpX9s=vI@%sq2qKP{P*ON6YDVKu#>_&LOuCXtdYwjz&; zzYp65SjVy)UyWqEAeBi&cVWQ$5PGGZ3d?Q%OzN2>&Ci9-)YzNd9y|r}_A16XN?QOJa|B%ghCd@IQg@ccP1DGqF^2WyqI7%(>G1?VIT( zsVNUr>r48`y(EaM_;(OlE71TMlpjo2Dx~w}lgR90*y)FyRSm_9t2FgR#qH#73Kda7VDb562J!JmUDJ)#*tOt#?fpS zeaue|qspr_>}QyFNOeaYX!J4iaG{=3{iC~NeYuWs;SyP{eojs`KB$GnuwIoI(zLhu zV(BolUr=%k6(T`rs(Fo*W_=3Q@Sl}Lz@ghEF-QoX9KjM^!hn^>l>tOP^1#Jh#T_9| ztpmSKtFgP^YWnLYx9xmjJeaN!p0E9UVBg|oq!ZFvU6hTP@;Yfv0|+4M;W0T|8IeMo zwEim9`iSV%DG*BeJGscMHM@SYeFPzYrcncFx_d+~elpujAOEv(he>G!Lgn|7FqQ{W z;1f2n9+X3=i_c#gxI@)If#9%`V3mBF;p5BKY2<)sB^!^=~+2! z>ic)|Cnwt;JVJu-hCJ)#&bR@$7qgup!?L>!5TgJo@y}}~1}L*nVeG+4@(PJ5F_-u5 zCEp6xK*Xt!E<$&AkwUbuE5;OJ&I_jgPuGuX3U0o(gm+;4?$_+P0SJA_4Uxe%6$>g0 z><|r?n4IDiZOBF<+74a#QDWojUBq`FIN3H_2 zgl|xbHPn`hzOM=nhL+jhysu)txUA<0^!qB02UH^);zS* zI7Q(ZvoT)V>&@cdY?-VK9seL$hazN6_VtgSn#0|Ryk(ZB=Vj;y_}#~J_|N!0%!r3S z9q*=}bE%ZR=ND(r?z!?Z97+t^I6x&)Q!Oi)hdyL&@CC7Gg_x7)ux0BPh#P;Ejcgw>?cJ+9)zsN8kcRF&MDpqHM>2~iLym|V&Np}*M zvz3Ac^3N6Id*zrF+9dp>1~CfVCke{0lJL>`^@1vt@a;-tUUHP5P(CjLnq5ipdsc5b z{^^0r5unm64RGXs`^@D77&aQofCZ{kGs)p1jD3@>v6;-3mh|mRV)BOp1!lxOp74~?8fhlR#Wbq;0TRes=T25R1*^?+AEe>4 zaQ;>|7xYqvz6SHmPbJmBLbIz01HDd}OE~pdllu)}r+>f-$jYQxV_%mjR{+T7 z(wBEtF;Js5TPzV&18zsbGM0DD`6av^!ec;bzmt$d-?PURaclW^PrTKTd_xnEoD@f` ze{yrP_30=w~uQ(Qv)>Qi{;(0wN%nVmnQ&(UiL9VHl#((WTDSDHFwCJ8f7LjHa zxZp3O&pEa7Da8L3!$mu&aa+hMy2~GirH()S+qVog)aMkn-)C-iQ;9Mn#X9EA4k{LL z(59yrpI>doymRRVD(90*bn-$_yKEyhD=6&*cb^ksAJ*47fhrYn`k^~o;B19#+MnNx9TadP;p@Ib-F$4B@^ zn*uF$8<*?1Q{%Y#IJG;itn^}Nu}HJjgEex6&9F9&kN^Wa)#A)9(4mQQ<%XPtB$k9Y z%x$C`F!;6$rDch&xDIph+99am$l%h;4Ut0ZHi1K-DxWGs64jH3UTzizB6^)*>#teC z)X`7_jJc8U5J!ie%`c<5sqpwm`xt@4l8lC${KUkCS$uNMCcEuLTcVqe4jF!R`85;a zf4(~t(d5TA$e~qj83lkD{kd{(aIm!yKp;Mz(y%m+l6j+=a>|D3Gj5Vs?|FvTdlnqQ z1*K&a4a-+K&W)^7u^UNPJS)&c~5E_*r*xXy>HWq36K^boZI#D8=b!Iy;cskrgcD1+PUDj!-&)(5D=xrIC z$4lxpr=YtB^O#8_R=VH*MlGje`|>Nrbr5+W5M}WFGg3?9L5HLNkQBa>ihq>;KW(2w zwi*Ol5X*w7x-qC$0;*AZ;Q2hM>|0a(b4%90sd>6=yUOWvpP_=P&wDK320RKmIZ%17 zi7`YVIds!`Dk(3v?Wose6|XCL*iI&F_BlFf?&;;GP-fewE%VAr_EI$X!14kXKvNVF zCrSUJkv}(nAg_9t=1ZHup#^;#&#|=A{SeEu2RJ3tITy@);y;5Y+SRZDdurmCnjEn1 zoY1&Kg@a}n%^7l2mM34R0YW2-?<@Hh-xrsV$fNX?FM;=Ox8;n-?SCzchc!dDOL zWTyVB0Q}Ob#^#rt?;_QIVQZf_z0N^-umOeG@DheE275ygyI3xJ8`cxjD-{B_^r|&% zF}C^U>au*EQ|!${ORtCb|Ws&P#BV)K3V_5@(-dOxc!D#&K}zbn#PjO@8Jqze0% zQ~f<7fjwf3SRNfD&iA*3>68{-aXfB1IYuu3^0{e#q55ooM;UCejC~3eJY-|1uFb^%I|Bp5)nq z5E8s#*4j0(yyUlY?rck%HUg95mbUfu-Yn=6cYs1sPBdE>>jn{^uhIOM>~4n$`ij2lN)C@r@pUEAK)j$ZoG z@BaLJX`@WfE-Be|9Yk`%y1kIOQnueK7WQx2{#-Qh@m@>>_?z zt=I7H9&Y`oTu`68q^ut`t0ijBcdG5Bi9QrHmPUw<=ZRk3Z`?o4c_GqH`fld9+cp9Bx)<3U9K zCji(R_!oXf_w>5|;P?LWWM{#jLc!=!0zVzx?#ofn?mu(!8`JwOMzid>2!8v+fYHkF zCGbaI2P~C(0{G+C_4<^aBSm*TTbbcB5)CwKl6!!3-FZum+BYP9majx_8i@z0RhaRR ze5yk}YYjPmj7Vqsk*7B$n|+9EXC<=^k@2itwjWtfinW2fy%C{ik^4uxNP`|bOx1tM z9%*LR^o|0CioP<9ZV|JhD2jM(e_;rdxxDNf6mtCwP*()JS5eIVFL3YmUCAO2pDh%9m`y=OwkM0r3<}@I!~~@~WYUS! ze-!dK6c1-uz@-9o>9tt4d%W zwMQ-1iRHRlJP>O`E!}KdGiqQ9tph!Lv;unUk;-=UxF=PEdZsN({fb~IrD;uCC~asm zMCnMAX-Zd`tWkQ=WRFr*lOsYVt;snd_|W8vknuFR`$M^<s!0u{W<}gAN`;;t0U#aGp~17E2YwBFz_3+;OdbdGDBmWq z91zc~*3bQ9*$ub79QeU3Mqn?voRR|ue$rTs z0P61e92bM+)?5gOpYnI|@7VwDe}MeC`L+JD)K8cP z>eomw+@DY%v_G&O?7!~+ZT-ssPybi!0sRB~Z~rf7|NI`p-{U{-djNjg|Nr)N|E>F} z@KgP-{zvXVz>n<*{{LVP{$8LT|N6=LAN)V@!@u9_|BQZX_?-8T?f!U}f9j`EPnvz~ z{a@ur_OIGsj{Dj8)u=D!U(dhG{$>A6^-0+?Y`p-z!urSf&&KAxZD{wn*A_D9$Q z`N#DC^FNn=)4%`yKmP;$SBht*`vCtw{_Flj{AcXn_s{?TNgwI{RR5Cy|NsBu=hnaa zKh*x{eFJ|j{)7HU`+xVZ`oG%$|Nr#++V(a3&+K9PQ}?p22jl*vB}stNo9r*josNcu z>$&FYR?N#?5&feeEP4J*#y%7rEW8xMedUMGk}i6E;cH!T?ObTZ%qoY6(dRoBm+%1- z_CFhkRY4J;-;W~Z?9QB+)DMM5N3?W28*Lq>ni8;KW2^XJ(<(#$I64vQ%&0VRd&YN= zfZQfWcMr#R#ZjRxAh%_(UDBq^v8qMwC0QD%=Xq`f3H8*{^RoIb%hNuP>03Bnv@5}N z++OJ8w|W~iDdQIz81V#5B9jqkrAGlH*oO+Jw(QiZ<4ixR-Gacs#wriY%=m%j8>ic9 z*ru5If_kacqA!xKOuWo~wDjwp1viM_MU%2qo&wWH1ZnVf=pE-mxmrokzM6m%6!Au^ z)em*)CT|OIn=uYeM>@B382Uk4q0u-pv3XNvG^H(Y0@C^4Dqm<`bWW0^DTbOo_*_8f z-8?)MS$gb^Iz;7M{gtj1Sn&H)%XT?BhdoU;!LK^FuP8>=V*Iuw_IR3|89AvmbeTVB zXG;ZyOk!9(Vr3;j>Gtuq2HavansxmmPqzt327>;uc7GP~W&xvFTNsT%0RH}^I2n1~ ztm=MqhV%7os5oD^e^u+bPb--!LZ!51v z&yG*d{8&P*bf9lP^fBh5P=d!Iv=x!r&L>s_3BlIrQ{Mz%2SGud=dpp&RN$|0oppzzy`il7RLvc!!onk z8I&&SO1@B0;NKO~kNEswuP^SOeUb)3fCG)EE$Jm^IE**X=N6~YbFH6jbAvGAY`YU82lanwD6BgtIm6Ep9xurWoEuiu zx*)WHo4I+Dx-ilRQP5-y{sIu8?dXX2ThFTAvTds~+hm`da+w^$z- zE5|9f76wdkp9#xXF9Bn(x7hUV$HEq;{*rQcAg@^?zsIZ#(8$Uze6%`29PmUo@t0qe z*+#k0quLZto&W4xtt1Cm&;aFb7PrkJ|KTKtQ<(pwK+)T0!F7i{=#A*cK3V^t3g^>L z0w)};R8Sbtb^P`9#QPllGJbG^=HW;wP+dE`QtG#clH@ zm9JQNyV5X3zm@n6xevw)DIx*ZAK#e1722;K9w8(|`kb#^YdxUe>DoW@?~;>(#BVWM zC$k7CuTSIDOKLCIQboweqz^=jr2Y&Zm3;L!zkTnl+rS|7UYaAr`8T6Exv4Xgv_9IRfQ)PCTBZe4`x{*yk zgXI)^N`qS{>~!MS+O-2{!d4l(o0P0jTdhz{`w{B(h7>3$TXHTiDA{LR+J!#A>RV(& zcY0V|UDERZzfnE|E9$)eHho7V-9j z?Nb4D%j77=#LQA85hnu1THF7~WD4aP+%-BQ075min@Wg7n@nEGky0A+3ll=Pm|3N% z@)PfgU&%XYh62M#lOho4ZL&*(>H46(kZ$J2c-VDhYaB}3)C#Zg8VDO*4>eXqBbD7* z5HaX~PpG&$_)t7@AqF=bAvFa*D`S-h>Qeam?wprysBb1$MBq|u(a#)geepj5P4Z4LiMDh%SQ}645fxP=mz)+eEHdZH1QBBP#1pM z^`7ACBMFlPMFTD;E^X=oulIl|1OeQ-#a+t$pOs}qd)LPQAtrC;KcNa{qG1xR9((*4 z#B3oUgtp?F@~6W0%$k$olPlU(T)?Y5bb2=jF7_j|pdEyho*&$k`j8~}qD{dV0##|N zu^FTzrq)aW6pftqrr(!``l}>iFF4(ki z#5Q-V8H6>I3X@mASF`ShVy%vEJ#;L?ZD1djP!{`khpOo}Z#UDG;AUG!bEFkW?otM~ zDi>MOibu=jtcm){OL-0|oRxOo7D(}E^0fTrNOnBACQ^MQ*vzl^w6$2%HeS;(i=Gs;%7wF1IegoChkpTr0G!;$6=l<+A(A=Dz_Dta&}EKkiqQe-rA$YTUN3j z5r{1oJiba26^Sl-ya3Jg*e{P$PpOl^-|NUjeEI&RifE*$8(nI+&UT9Lx|Z4K&>mj_ zVqLfOGw}aObiMs5Z}QNdzyBtC()B#W4hJ}l<7dP z>@h_)htb|4D%gBMW8_h(`(}Oc!&OoM{MC#uaf6etf0j?N9hv%GUDXDYWKX3C56&-T zXfi^?Q(05|rt%0N9>L**)~1He1ABezh+(yGKIBC0Lb!_<9=Q3>R!vy$&SXf{VZ{k> ziJ&OTPfO zTQFNIPidU;{-TpS8%um&f!P2Nipp79UeuvGT77phDyv>(v8JH>zwq4~2549Er|;{e z+j}53(etw^9iJ+e;5&RW6$+Ia=U#-&WQ)!Vn^?+ddhyPE{s%MjFzQ+iTYJkk$E^gj z+HvPOiSLt*0C{?!OJS7kc1aI(&!N+QW;AjbpU>eSUXkwPYHA+hf~I|fWNWXvYLe-J zDm1FPfYl$7y!mSy8RXWekyRihnCW-{L0u7?08JxC^Ca$K^he27vbzjF;E>$eV+i%N zNS1{|qj%C=7oAczMMoC}_ev#oR58g*GoL1UNgjzaAgatM17Ibc?icYg2YWRci!Y-) zA`KuidObH#OKbdpB* zUvJFAu_>^0P?HR+dTN!YlY1|S5ZOO2w%040F}ye#Kl`lK)g{iyM2%P}+$v3lr>{;| zR2{hkJ^f7@_J;q%oFabwddL^#>wCw7M>k-gOA*OV4j`_jcz?UFI$NQ%c`R(Z$N$rP zXYCAMLG`u$EQ8`o)Cve@ak9ruhvei$x3A3>jn23bcRg+csDw|$e->D#=p(1niA--( z@Bo!PknF>F1cEF2+q5PFob8#=k@iaMCsBrt=q6-$lkT5ENaisEw(=TaFpwIwccOnG zf=0TWi!L)peB$k9$N0r$=NjWy9pkGSIQ}k z^XUQ2=a|dTlguOT4u83&;l^_jGB%w8K19 zklBia{^@jS-dR9v-sEg+^#BZhINMCJQ+oYnL~N|OfPHb0D>OiCk`7baR_yk?j0jiA zTW=pD4`S>I&rJlYZ%U>-d0fs8X6}!c+W82<5n)~nQ48Q;n+YtVI_p0dlU!?4w+LSv z3Sh?uD-5=we~f3xwfQ11(YoKULuA6{Vl1U>nHk>EAg`@p+*6`+6MN0s1?Nv-Z!e>c ziNGHvIwxixJv6S-aEdBXCcD33r&?Sg*!bZHD~HAimygCa`|pjUuOk7oecwA1l-SHq z64ajx<29I+$LS?K$*U?5iY~P%ifGTLrQ-J*zhd>;zP(M#kRJ@}b#{TeGH1KSW~Oy~ zFxA9Gp4Q#-7ARJgP6A|jYClzm+|F%pc`Rx{*MEItu}+DhHgqH9Tq5W=zf+3Fe3kKC z6?$p^|Fwugw*cUYiz8(Ho`LZR?#<-hY+Bwf>bSMX^;61TtLUP#Xn2#dhHJFGErLW* zvby9{p#U;4ZE%;+;#wbPVNUCtj+zBQmJW4tTNZr)7IIJyT856$EA$3k%famyUshG7 z-*-+^j*e<=zi$j{YE;KndFEarX+tZx3)SAP0%CHotz|(HO)Me1E9@N?uWZUnS~d;= z36554g$0=R=}+d5LVuJfi8}yy#YWDl38Xvs4vSW5Mm@Tm8;k=_y*R~$mJg}y4iY~IXx#wp8Jj-S#{ z=<8fMz}Y(1pVRfOyF}Q7cFLxc3=t=24DB1RKP_o6sG9N%c;ih*{|zC3aDtSQ6R3Tu zg+Dkr5sj3-{wce^5r>Os_VQdO!co#^1~z_OaGW;9S}zmn1IrBMTc5{S|uiHkcm(3;k%4__ND!ou4+Oo9^R=AmNISq zz%uG3Re&g}H?CgqUUkzsJx}e6RfS&PO+qP|g?#Ia5@KNv%8(}r*SLx$fD0ldOX4H% zTsOuz-!i#lN%nTnMijYf5yg}Ahh0KFA=6|lE37tHA($4xs(eVhKAElf%#oGcVIn-s7H-L)KQT1kKzM%GPH`+hLSM%TV>Y&FTJF{K^`L4m^Y~XO zffexiA2Z<5*oc0o1WEc!+?vZl@kFH(H5d>O#qL7Od*hdq-oQY03C7KR5#Wi>2Xl6P zzA$ST&gxt4k!n8J@RR1RwO)9_A!rILYK>WntOGaaVSy@oh%lq;xV zr>>8R!D`QIC-(3VW5lB?t-O1OHRuP7sXj{~XPU3^sCp*9=)R&;L}biX9zl(aTSh&L z54(k^RN5pmb9Epb4m#}BM*qe1OCxo~H>1Qajc>^PPK)=_ZOKrO{Q z*1pyLB=3Jy8!)b)v1-CJWsN|x&KfcYACRa^rDVbKkbM)hDXM1Fx^FO$Jr z6j`<=yw4P*^!+>jo*}h^5YKktv1&z|LYtls5J1x;UFL$>q#3l8%M{F?N-A`{M0c+M z{vg{zkF!2jZW+M@XS1yNv}&8*na%*!(Z4DtI`!dyVY zEu5O2%tbZ|Jwq0Y$l{hjj@X{b1athNqQohmernE#G^^@nfAbVicA4-{Kj($ADN9$+ zFT)ptgtV#F<`C(@ZHf%_lRrNJ9yy29$*z2cZV3ry@4JHl-rVdKPSF7{~zdy%(uT+i)h4m{c1zFLWa_6ig2{t<2R<1nM5f6$B$vZ1`{|! zU48vEWAo@W_*%pEaFz!r8Q2FJ>#9)(o==2A@dqVt(bQ;_L>=PKH7}fJKPLir-9Fcj zsEFFwF{8cNHjbH%xLA)@$~-zL4(O8056(buMxs=c`f~n18tmoH1|||5dZp!5;5@oT z(;}b(=jw+46~3(;j^j=wUsdC_ zrG2wj%c~Dryxvi-f{^=sZ7{5WjuupUHNDt2==L^HN+TDz-R;!c(~bscv}plYbbW+a z9B#~F0SZ`pq+Z8I)$Zw4c{Q|p_u#e_V95|$>0duI*To;N#rjm^djCxUjxuv|oBL4tpr zdy>0h@BT0~Oo}L_?B^W-!O~LKw&(^KRLw`DGi~BdQE?_C>)M<;EYMYozId~rQCHw4 zo0X#FWd_Whv;sOd8;5bymk-NoIw4uEdb0x@cXd2ME(D5(%4dKY#x#~Bm+J7p-kDkT z4p1>Kt%K0mifjN8wnG56;46a-6y(BF6kx2sQ813dTx3i$VS1KYhiN>q2%cYgq*n4B zo1A0UR(AkJBF-7m(%gJ!(d9=~3|x0lAJ-@W=qtb%)3`zE*SGum(QIOlK$E!*w!KpL z&8>4y{GrUK+CZY5f0^B!&6#lQ-V3?5L!rSyXRH!eG=VzRc;pqDjhxC%BRcn-9xOc~ z+5-^Veu48YYMgtuT^W)=~qHyO9}T6YGZkfo`ib5&gBu4g+~&Jg2#D=fO$IM?jC)L z;oqy-47!sXfvVQ|ou^+aaXmmhw>od191gUH*K#>?MZ37UT0f%KYS~_oJ4$R5O&v8j zo>q1Z;d-~LsGj{On?Q_|**uGnu2@9V|h_)9+c z)r5!i>>M-Lx4wM$udn`1?NzRWlkHr;*Ie?yi?~Q|PA-Id)qzPKzj)r{@HP4F+@!>% z6)Ra7tx`T~GpGnj3T7L-q!OMZ8)R|nZL;hN zXB&i$EKU&=X!HPpK9Md7sk=!DF&-ZOg9(9DQ{88iIII_lq+t~UaqRMX@;3Wossn)Y zK>!2CywZ9vP=)K1J(v#-j9x_uXQ@ee15mzb3P|XD{y@aOa@2{wccVo9@H|gdfW6Y6 z2J8vMLYi}+x@#@8tO2syGy+ZfXllNW)&#Arrx{!_{*%s5UGDEuwuQ~xXF~zX$&zn| zDiOR92!(=FN?e*k97`TDNA`(8TQUCfHo$)Q{CxQ-q0AKhYJ-E}(Pbp^1+@wEu5n)V zY7!bB*N6Zjo!g2`xB&nQ&$Kq8hE&@sSkvt%|KQmM)Fare`%5oyKLcSQDtoAQ@FNqn ziFjQsM5sI@BZ>Pa^KQ)eh*cju_xuID;99Ct$)ZKZk(!D@@l_Ad%%XEEQf>C{UOTub zG><-slb&p=3Os6RLNt($?*+z5E|A5^_dd8zD{IQTWbg1)pTM?uU~=+g2k#N<#LSo7 zH^+;sc2E>`k#FpfdJ`yFSCLGxEv?I}%^3ooe;JvM&IUQ#e-9BJd4%axHXT)c{NmU3 z@A*rU3rp|yaUypN;r?<8D>U@9tFUBGlMA(EN}$ejV?zBM-Y`fCKqh>z{_UI_j_8~Y z%{J7ck|y;9rZPrav@mj%aMI4$8lokL?tum^dntj+6^rI|no(ky6kq~J&%;{(-_))` zho?$$Ch~jWUsKE%-p}=U%3{lpDvFHWZj33{%32e>%aiJUYsF*p%K!Y_EPF4RWfP!0 z0275IL!GqEfJyPcpF#7=|NPu6doP(~6QDcy^dF`memj^sRzbBH!+ZEY(Mc$GZzO!P zUbvrRg0aZey}QZgB!cRt)7|XA$4by8v_K1|Ce4 QhXJgErt!G|FZ!SW01OyDFaQ7m literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/egg6.webp b/app/src/main/res/drawable/egg6.webp new file mode 100644 index 0000000000000000000000000000000000000000..9dd98d89636e0cb691e206e5e98f2f6210100da1 GIT binary patch literal 2582 zcmV+x3hDJyNk&Ev3IG6CMM6+kP&il$0000G0001y005N$06|PpNWKC900GCNpluuJ z2@tXXq{Y)P_B+nU=rwr$(CZQIyhd;EXI)f%<#+l?F1{|PYv z5Y4XX>>KE5F7^E-5=|)81dzh`-(jccUvhb(qoFF?8rB(%3m#BU6Qe{T<$UN1) zD7MO&8btMti^%h=OS*}MMER$mC-|*Rrg&yVeJo59is_SCni&C%hgkd(0-0hN7Q`V=yZuRu)7t$-bdH1F6QS zj1p)H83TQ|HN+U|WoW?t7b*% zj6>!h+U2X?Wt_9})DGVhe&ejA8;L*k(C;(O8|Xes{kFG-a^uwgriJUoFTL#!78!?k z?rhADc2oq-e~JTEP&gne2LJ$YDgd1UDv|(}06tMBkVPY+A(RU=*f<3Q zvA1roy9#)Vy6=GIyA%Js*bbe(Bi%kcz<7XrTJ!+@fa@~!0R2_;!TqTCA^pYu&i0^- zQF#NrZds;!YJN}N>-(APl2+$Ydt`a!JM?Tp@T*%Lr2vvTby>Ka(%y8Rqrlj^kR{8{ z*+Pb<8Legzq_nP=fK#h6D*LCqmmTr!L{SaAnYiRS-3@pS(iU{zl&{`tm0o!k#ZXd_ z6?fMw74F!DmrJKL9&S$$8*5saolyHm{U#5KT)|E;VzMk%gO$lpP)z*A7OtEt4?60g!QllpQXXdpS$FMtPyUe z)hzjM($%OH7I>yepCzsAr zCW?%wDH8PiIYEE`{{6J+6{^>uuNd4^4xMY|)R5}QqL=k>{~2w^5EoN{0+A5g$|$l* z(EdOa4$mXq+z_Y3?)X|-q#b4Qz|a3ogZQFRtGa)5q7!9u3S}Om#Rj;&0h-pU}bLqYl|VysKrG zFwT1xiH!dJbH@-OlilMaT+CGg@#ml=8P(+fzAu-u`b18Ihlk23nEw#yeztVp^g2F) zCjD_ERu}BLH<|hhv`Av!Z}*|#N1Pr*mAzhgq{r=ol&PTKIKyu!yE+#NhL#kzFz||f zOf$MK&&DRg%;fZ=RZTQOpf@0T!LFmc?T7Ij4CJ&VOT7unQk}cXCn=qkI=9PC8<17( z{#|**N|gQn9)RI;ZNfLARCT8%r1;VXPAk10-0@I2?I~Vn=VxOHL-(T>BJOqp=N^XW$v##;AZ~1y69}$P43-3)BR_A)bY1JXeY zD2pBQps8uF@dnrKYiLfF1CnuPULK+<%%yJ>cv;nLN5#!-6Oph1uwBlLr{g$ctu8r6Amr&wTqoeUS zNU4MRiV1~O3nn6<*&1tW^98>fy_@N|GSIVu1y2h`pK??%=LVeqMX>vLtFSqit<@j< zf}03duZE=e`jiOdQq8i+8Z~PRdpb0kr}bmA zh#UBOZh?#+U26ZW+LH6S+<()#ctHGDwC7)Fe(|uh`{UY;jZL s%_3PL?_^)MD7_8u(Bk^u&Pyhe`00000011o_h5!Hn literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/eggfall.xml b/app/src/main/res/layout/eggfall.xml new file mode 100644 index 00000000..fbc6a0fc --- /dev/null +++ b/app/src/main/res/layout/eggfall.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3dd3dcfc..3af14e8f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -967,6 +967,8 @@ Öffnen Sie das Menü mit der Zurück-Taste Schlittenfahrt im Schnee Jingle Bells, Jingle Bells + Brrrr + Bajo jajo, bajo jajo Rosa System Thema diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 86911c58..4c0c5b89 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -969,6 +969,8 @@ Back button opens drawer Jingle all the way Jingle bells, Jingle bells + Brrrr + Bajo jajo, bajo jajo Pink System Theme diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b0ee64a..a008fc94 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1034,6 +1034,8 @@ Otwieraj menu przyciskiem wstecz Dzwonią dzwonki sań Pada śnieg, pada śnieg + Brrrr + Bajo jajo, bajo jajo Różowy Systemowy Motyw