From 2ab6addd7a28e7fa5ebce95c459655102d9e2c1b Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Thu, 6 Apr 2017 10:55:40 +0300 Subject: [PATCH 01/84] Add copy of English strings as a base --- app/src/main/res/values-tr/strings.xml | 129 +++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 app/src/main/res/values-tr/strings.xml diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml new file mode 100644 index 000000000..24fd9ca9b --- /dev/null +++ b/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,129 @@ + + + An error occurred. + Invalid domain entered + Failed authenticating with that instance. + Couldn\'t find a web browser to use. + An unidentified authorization error occurred. + Authorization was denied. + Failed getting a login token. + The status is too long! + The file must be less than 4MB. + That type of file cannot be uploaded. + That file could not be opened. + Permission to read media is required. + Images and videos cannot both be attached to the same status. + The upload failed. + At least one status must be reported. + + Home + Notifications + Local + Federated + Thread + #%s + Posts + Follows + Followers + Favourites + Blocked users + + \@%s + %s boosted + Sensitive Media + Click to view + Show More + Show Less + + end of the statuses + end of the notifications + end of the accounts + + %s boosted your toot + %s favourited your toot + %s followed you + + Report @%s + Additional comments? + + Compose + Login with Mastodon + Log Out + Follow + Unfollow + Block + Unblock + Report + Delete + TOOT + TOOT! + Retry + Mark media sensitive + Hide text behind warning + Ok + Cancel + Close + Back + Profile + Preferences + Favourites + Blocked users + Open in browser + Submit + Add media + Share + Mute + Unmute + Mention + NSFW + + Share toot URL to… + + Search accounts… + + Toot! + Sent! + + Which instance? + What\'s happening? + Content warning + + What\'s an instance? + + The address or domain of any instance can be entered + here, such as mastodon.social, icosahedron.website, social.tchncs.de, and + more! + \n\nIf you don\'t yet have an account, you can enter the name of the instance you\'d like to + join and create an account there.\n\nAn instance is a single place where your account is + hosted, but you can easily communicate with and follow folks on other instances as though + you were on the same site. + \n\nMore info can be found at mastodon.social. + + Finishing Media Upload + Uploading… + + Everyone can see + Everyone can see, but not on public timelines + Only followers and mentions can see + + Notifications + Push notifications + Alerts + Notify with a sound + Notify with vibration + Notify with light + Notify me when + mentioned + followed + my posts are boosted + my posts are favourited + Appearance + Use the Light Theme + + %s mentioned you + %1$s, %2$s, %3$s and %4$d others + %1$s, %2$s, and %3$s + %1$s and %2$s + %d new interactions + + From b932fb1a13486ea4e956129084c37c526ac94bdd Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Thu, 6 Apr 2017 11:16:46 +0300 Subject: [PATCH 02/84] Begin Turkish translation --- app/src/main/res/values-tr/strings.xml | 140 ++++++++++++------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 24fd9ca9b..59618767d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,10 +1,10 @@ - An error occurred. - Invalid domain entered - Failed authenticating with that instance. - Couldn\'t find a web browser to use. - An unidentified authorization error occurred. + Bir hata oluştu. + Girilen etki alanı geçersiz. + Kimliği bu sunucuda doğrulayamadı. + Kullanılabilecek tarayıcı bulunmadı. + Açıklanmayan kimlik doğrulama hata oluştu. Authorization was denied. Failed getting a login token. The status is too long! @@ -16,79 +16,79 @@ The upload failed. At least one status must be reported. - Home - Notifications + Ana sayfa + Bildirimler Local Federated Thread #%s Posts - Follows - Followers - Favourites - Blocked users + Takip edilenler + Takipçiler + Favoriler + Engellenmiş kullanıcılar \@%s - %s boosted - Sensitive Media - Click to view - Show More - Show Less + %s yükseltti + Hasas Medya + Görmek için taklayın + Daha Fazla Göster + Daha Az Göster end of the statuses end of the notifications end of the accounts - %s boosted your toot - %s favourited your toot - %s followed you + %s tootunu yükseltti + %s tootunu favori etti + %s seni takip etti - Report @%s - Additional comments? + @%s bildirin + Daha fazla yorum? - Compose - Login with Mastodon - Log Out - Follow - Unfollow - Block + Oluştur + Mastodon ile giriş yap + Çıkış Yap + Takip et + Takibi bırak + Engele Unblock - Report - Delete + Bildir + Sil TOOT TOOT! - Retry - Mark media sensitive - Hide text behind warning - Ok - Cancel - Close - Back - Profile - Preferences - Favourites - Blocked users - Open in browser - Submit + Tekrar dene + Medyayı hassas olarak etiketleyin + Metini uyarı ile sakla + Tamam + İptal + Kapat + Geri + Profil + Ayarlar + Favoriler + Engellenmiş kullanıcılar + Tarayıcıda aç + Gönder Add media - Share - Mute + Paylaş + Sesize al Unmute - Mention + Bahset NSFW Share toot URL to… - Search accounts… + Hesaplarda ara… Toot! - Sent! + Gönderildi! - Which instance? + Hangi sunucu? What\'s happening? - Content warning + İçerik uyarı - What\'s an instance? + Sunucu nedir? The address or domain of any instance can be entered here, such as mastodon.social, icosahedron.website, social.tchncs.de, and @@ -100,30 +100,30 @@ \n\nMore info can be found at mastodon.social. Finishing Media Upload - Uploading… + Yükleniyor… - Everyone can see - Everyone can see, but not on public timelines - Only followers and mentions can see + Herkese açık + Kerkese açık ancak sosyal çizelgesinde çıkmaz + Sadece takipçiler ve bahsedilenlere açık - Notifications - Push notifications - Alerts - Notify with a sound - Notify with vibration - Notify with light - Notify me when - mentioned - followed + Bildirimler + Anlık bildirimler + Uyarılar + Sesle bildirin + Titremeyle bildirin + Işığıyla bildirin + Beni bildirin + bahsedilince + takip edilince my posts are boosted my posts are favourited - Appearance - Use the Light Theme + Görünüş + Açık renkli temayı kullan - %s mentioned you - %1$s, %2$s, %3$s and %4$d others - %1$s, %2$s, and %3$s - %1$s and %2$s - %d new interactions + %s senden bahsetti + %1$s, %2$s, %3$s ve %4$d daha + %1$s, %2$s ve %3$s + %1$s ve %2$s + %d yeni etkileşim From 57f829e58e62b3171a9ed73e1fa505b5303b075a Mon Sep 17 00:00:00 2001 From: ntngrtltr Date: Fri, 7 Apr 2017 12:12:26 +0200 Subject: [PATCH 03/84] download images by tap an hold --- app/src/main/AndroidManifest.xml | 1 + .../tusky/ViewMediaFragment.java | 41 ++++++++++++++++++- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 62955811e..5ff4b9557 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + Ein Fehler ist Aufgetreten. Kein Webbrowser gefunden. Es konnte kein Login-Token abgerufen werden. + Herunterladen diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 24fd9ca9b..78b161887 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,4 +126,5 @@ %1$s and %2$s %d new interactions + Download From 2c94ee9c2ec0f1dc90e45840a3508f4bbb6aa640 Mon Sep 17 00:00:00 2001 From: ntngrtltr Date: Fri, 7 Apr 2017 13:11:31 +0200 Subject: [PATCH 04/84] add support for runtime-permissions (fix needed) --- .../tusky/ViewMediaFragment.java | 95 ++++++++++++++++--- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 + 3 files changed, 85 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java index d3a7aed15..93e4d5766 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java @@ -15,15 +15,23 @@ package com.keylesspalace.tusky; +import android.*; import android.app.AlertDialog; import android.app.DownloadManager; import android.content.Context; import android.content.DialogInterface; +import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.design.widget.Snackbar; +import android.support.v13.app.ActivityCompat; import android.support.v4.app.DialogFragment; +import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -34,6 +42,7 @@ import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import java.io.File; +import java.security.Permission; import butterknife.BindView; import butterknife.ButterKnife; @@ -44,6 +53,9 @@ public class ViewMediaFragment extends DialogFragment { private PhotoViewAttacher attacher; private DownloadManager downloadManager; + + private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1; + @BindView(R.id.view_media_image) PhotoView photoView; public static ViewMediaFragment newInstance(String url) { @@ -118,19 +130,7 @@ public class ViewMediaFragment extends DialogFragment { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - String url = getArguments().getString("url"); - Uri uri = Uri.parse(url); - - String filename = new File(url).getName(); - - downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); - - DownloadManager.Request request = new DownloadManager.Request(uri); - request.allowScanningByMediaScanner(); - request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, getString(R.string.app_name) + "/" + filename); - - downloadManager.enqueue(request); - System.out.println(url); + downloadImage(); } }); downloadDialog.show(); @@ -160,4 +160,73 @@ public class ViewMediaFragment extends DialogFragment { attacher.cleanup(); super.onDestroyView(); } + + /** + * Check permissions and download the thing at getArguments().getString("url") as image, listed in the systems gallery. + * This works in general, but when the permission is granted at runtime, the download button ha to be pressed again (see comment further down) + */ + private void downloadImage(){ + + //Permission stuff + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && + ContextCompat.checkSelfPermission(this.getContext(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + android.support.v4.app.ActivityCompat.requestPermissions(getActivity(), + new String[] { android.Manifest.permission.WRITE_EXTERNAL_STORAGE }, + PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); + } else { + + + //download stuff + String url = getArguments().getString("url"); + Uri uri = Uri.parse(url); + + String filename = new File(url).getName(); + + downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); + + DownloadManager.Request request = new DownloadManager.Request(uri); + request.allowScanningByMediaScanner(); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, getString(R.string.app_name) + "/" + filename); + + downloadManager.enqueue(request); + } + } + + /* + * took this from ComposeActivity.java (Media upload) to handle permission requests. + * However, onRequestPermissionResult seems not to be called. + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], + @NonNull int[] grantResults) { + System.out.println("Requestcode: " + requestCode); + switch (requestCode) { + case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + downloadImage(); + } else { + System.out.println("not granted\n"); + doErrorDialog(R.string.error_media_download_permission, R.string.action_retry, + new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadImage(); + } + }); + } + break; + } + } + } + + private void doErrorDialog(@StringRes int descriptionId, @StringRes int actionId, + View.OnClickListener listener) { + Snackbar bar = Snackbar.make(getActivity().findViewById(R.id.view_media_image), getString(descriptionId), + Snackbar.LENGTH_SHORT); + bar.setAction(actionId, listener); + bar.show(); + } } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e9c178f3a..b097a1deb 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -122,5 +122,6 @@ Kein Webbrowser gefunden. Es konnte kein Login-Token abgerufen werden. Herunterladen + Eine Berechtigung wird zum Speichern des Mediums benötigt. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 78b161887..c0179be7c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,8 @@ That type of file cannot be uploaded. That file could not be opened. Permission to read media is required. + Permission to store media is required. + Images and videos cannot both be attached to the same status. The upload failed. At least one status must be reported. From cd7ddf6a1f6ca1cb5419fa63ab794b5aa0de3252 Mon Sep 17 00:00:00 2001 From: daycode Date: Sun, 9 Apr 2017 21:27:05 +0200 Subject: [PATCH 05/84] Replace launch icon --- app/src/main/res/drawable/ic_launcher.svg | 109 ++++++++++++++++++ app/src/main/res/drawable/web_hi_res_512.png | Bin 0 -> 49933 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 5099 -> 5976 bytes app/src/main/res/mipmap-ldpi/ic_launcher.png | Bin 0 -> 2405 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3145 -> 3559 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 7457 -> 8605 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 12894 -> 14415 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 19027 -> 20904 bytes 8 files changed, 109 insertions(+) create mode 100644 app/src/main/res/drawable/ic_launcher.svg create mode 100644 app/src/main/res/drawable/web_hi_res_512.png create mode 100644 app/src/main/res/mipmap-ldpi/ic_launcher.png diff --git a/app/src/main/res/drawable/ic_launcher.svg b/app/src/main/res/drawable/ic_launcher.svg new file mode 100644 index 000000000..266cd3d4c --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/web_hi_res_512.png b/app/src/main/res/drawable/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..d807e96b2e699139734b79af63228859055b5f4c GIT binary patch literal 49933 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 N002ovPDHLkV1ngZR9FB2 diff --git a/app/src/main/res/mipmap-ldpi/ic_launcher.png b/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c62b447fc95e73974bcbf34b897c8f415670a8 GIT binary patch literal 2405 zcmV-r37YnaP)~ z)JbijGi@n@AXGuIKxZfpZTX|E4pBO_Iy$Y=QK{n487WFj3$4Y`2;&3f5ilkMjO4{` zvb)*MV_$cl_ny-~mR)mAf}nJ!znPuAbMHCl`?DhLLcr0u8eFqxc~5T&D^qk_s%odo6ZS=7-QuA4cj(2o&9?h@Wxp2 zLPSdM1{1`Ix{PalGyr4gaftn&Lg0CM&g{yaFFd#V#fhNC1!9bm`_^yW(bw=KVIjKp23HleeUOz(rtX;&W%t_ z_HP6O0IJE3#N-O-y&c@3$FsPt{gVIm$@kATHa1=#=%LL!=JfPB|E`EuF|c4mDqwGs zG0}{qy%dK2Pq_h)cZtjG{^)qq+gC@o;WQl>c$*HtSY$(0u5i;(;Ta78$KleYuAf}F za>bIqpYf1yBz~{M>E0%nErVh!)^yG@^Vs{tLcG)NL8m7GPz6LMqAx^InJeHAE6Wjy zMA70&;6{z$7-_TkBNaWqF>6j$|udXV_zEe(|>-7Tw zsFDDU1_1#3J_+H8V_n$UP>i{`T2Ye@D3($Zl1OmZRK4bTIxIRq@A?sAjAVcqVGVQ!+7fZWgzijrp<4bO~#uKR)WT5tf(;K zl{GVvD}3R_cy1XOr-OHJxTd?iTgm{PKYu zhhn=CD{i+zmHprWEUU1?A4!5Gq8JE7!E*$4#TL-GoEm`FL$T%~9FnIclSx|!=*WMX zN>r7Ks?nwqTs+MHy}+T%Cyxs>8mifqK+j+V8}BLvqY9Qz<&b04;k?5S5Q2eV3;>WP zi2zkW6RFLY8tqUi70+I1Ey@7JqSOWeR4{17rbs#ffJ(2Q+E66{H5$a>Rv%_gv7oLb z2ahhvM)QDUh zNV$30j2qj_+#_L}>>9?LLMwDS9h&>2NKgQTpsFDCsd0xA03jfR13Ijvk3kSf($KNv2P-&4H^GvFZ5FUV~ z?Fa-xkXNtz-cv%{&xE@>+UHCVpf6ol7- zfB=jF9CzJm(hpsM)O-NE5>*$~)$ZB)$ogk0Dk=hF#vJ$c0h~B-!qD{onH?W|csCT;xE#Y6<9d2}3XlBj-G&cM=Dm9xmK={nBHh*1)i-nkxaoowV~q6n_KK9! z$%K&XGtHkA#$pL809Yh*XnxJCzGN~P1mG(xD+}Fh;p%Hw&_<8JSW5F+j`g)FXKDK{ XBUs8;BkQ7@00000NkvXXu0mjfH^Oi_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 521ed67f4fe175c87f95153f4b17afbda9bd12d7..da9600f6384e7d0b80b4ce4d09d2e822cab4ca25 100644 GIT binary patch delta 3558 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 delta 3141 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 4cdc3f45a0626ef8f37d7ceef35866ff3f114070..1779977e668666f88174678e708eebe489dfca59 100644 GIT binary patch literal 8605 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 literal 7457 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index b2bb4633af872e153e909b521e6ed0d8106dd36b..fdbf26ba97ca6fe4259743e053ffb2c4709acfb6 100644 GIT binary patch literal 14415 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 literal 12894 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index c31b376148929203568d1a04934eb3a177f5a8c5..4f004bdfba87e302666ada44ec44e7bbf42a4345 100644 GIT binary patch literal 20904 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 From 9ebf4ddb1540c0e79e4bb1d22f78a237ddb0001d Mon Sep 17 00:00:00 2001 From: daycode Date: Sun, 9 Apr 2017 21:41:12 +0200 Subject: [PATCH 06/84] Replace Tusky logo in README.md --- README.md | 2 +- app/src/main/res/drawable/tusky-logo.png | Bin 0 -> 9033 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/tusky-logo.png diff --git a/README.md b/README.md index f92d5dc8a..76508379d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Tusky -![](https://lh3.googleusercontent.com/6Ctl3PXaQi19qMaipWwzHAoKS9M9zy328cuulNZNAmRbjsPkSXs2xJ2OcyQNpOy23hI=w100) +![](app/src/main/res/drawable/tusky-logo.png) Tusky is a beautiful Android client for [Mastodon](https://github.com/tootsuite/mastodon). Mastodon is a GNU social-compatible federated social network. That means not one entity controls the whole network, rather, like e-mail, volunteers and organisations operate their own independent servers, users from which can all interact with each other seamlessly. diff --git a/app/src/main/res/drawable/tusky-logo.png b/app/src/main/res/drawable/tusky-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cdeaf33281e5117b6534aaa688a26d013d32f7 GIT binary patch literal 9033 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 literal 0 HcmV?d00001 From 440d28030c5a3d765590d96c99bfcc041014f4c3 Mon Sep 17 00:00:00 2001 From: daycode Date: Sun, 9 Apr 2017 23:13:39 +0200 Subject: [PATCH 07/84] replace the ic_launcher-web --- app/src/main/ic_launcher-web.png | Bin 73889 -> 49933 bytes app/src/main/res/drawable/web_hi_res_512.png | Bin 49933 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/src/main/res/drawable/web_hi_res_512.png diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png index 2289649f548d40ad9dabdcd073bc741ef4981d5b..d807e96b2e699139734b79af63228859055b5f4c 100644 GIT binary patch literal 49933 zcmcG#g;P}T`#*dZ7FfDNIu((WmRdqWMMP4hyHmQB?ober4ke|eyE_Hx?(WWg&inJ7 z-=FX>%j~i<=f1CeT}jx7_j0&clvn@&;3~+=d;|a#@FNNULkHi^-TvKzZ%`*G1yvaM z;{`Jg1^>phm;dAh0C=7M{X)LKz@q}ceDdYB<`)$^(=V6HFS{Tbwlswt0$r>yc}EmZ2(DvhU_tk2CX_=dKja~_eT~f z0?(+A-cO?*trPp(;y%!azLZ2k&=2N~j_6cxY0R1lrATxAn~4*mhoKf!a^d^uvz*>| z?T9^_IwHMuE9l+GbUkwuf1eQuk&Fk30H`u0mUI8jt4AqlyKSdT7RhSmnYXR@mOKT4 zOc(&Ao1JxzkKMUKqqs2^7L~1j*{Llklups#mpBU3%P}k9c*W7O?JE_=EaO_1%wQ z($k8?hj-N`9@MX5h-DO|z(-!JvxN@0n(Bl)jkur!oIOV-lqw^+@2c~bMqD_*YX|w< z2zfR2ycB-?*Yl5hq;E^h{2Uk&bR#TZUQB=_&dSj@j$gEDnUrmi0l8}?N zeA?f=`o`Rbqte8)x#HT(&T{ssNI1Pz@cq-zA7g$DOKv&%=WEFW1XZ%)?n5dZ>*;C9twc*q)p^OZ*+L;_)(cy zB}~SejS^E&TPsz(ft$A+u^-)(bk{(L-sqqV>BuTMCp`j5@uDfTRT%F6-|I3Zhg^e&m7ZxPQ`A$y^ z`G&QUEVx-(LnYcHTH+z;fRY(KR16hVX!3ONxYEd+8TQbg@NMLlR}@EccXu@EH)|S_ z*A}r`LE_!Dc-ODM>CK1B z^E#}BC?c3nPbdAZZv(qDwaqk;J`U(*!E$_!G3H4@e;}_6$u^{iz*SL#hA$)1R?a?e zxwo`TP?;ap&KOoKv128Ce$qqv26-C#Msob$hK%TAg}wPhdEX0ipUOWkDaKpF>RdjfMO#(HF}c% z=pGXrguwOt21+;iT8ib>2<>&5cgiwTI^{1x>E^h=GkJy>IIny*tD~ znHIAiqGayY-rgGxiNon$?6mk@WeYQT5q{brWmvE*r~g>ZHV0XiRS8{F$~f6_yuZK9 zVZOwRp_~75n{Y>Aa{Psv>ExRtEZZn+Xa@orcevEqT~P34smR0Q z*9SSB_amtO%u9*`=P;(fs?N_TBfNZV+#mm9o9W#=A&4=`>lk6d!BQZkKcF6?WeU}i zMnSOh*PY%KTvd>sn*7)au(RB?#H#$#qEJ1vI7~5RI6uGu^X5}ai;5fH?_`U3b!qb&wYZ7H z4}M2wlCnlaZKT-UOzl4{R+!5v!<6NlmQs8Ay`bPsqg(}QOpF#pf``Hk4P^u|Xg^^= z$VY4|LttR3kxK#Z?b7k}f$QB zcs)fgDJdWiBWMVO0?MpiLXVZXq9UmhM^@Gad)pKqiPq&!5rx-bT5y$#U-oVf1BqN| zk4r@n6>obvq31Gi@g2y2EYO22NaWXE|S8lI>pC1l>Sj3jr9i z-izH=SlRclu+E4*q5QNF;^lu{UMX!UNnAnC(cphr9Ga_8>L{^)Ej@#QK&k#R=$M{D@b6MCWT{hL#*K?8Z49HQYG!PGCd1b!mMg$ae$|J;#fn{SY}Ozn_t(KHw~ zAcHe1@PP4Frh2%mZPlR6jX;|Z#z~7#j%|~M?H3W$*5$8%QYP#hNhzx`QMcUPk92(; ztU#tRLa_)@XA%fdM1p`YgcuGcz^Ksd{`hY1%9#e)+S?{LOMQs%NIhlRUzGn*^)J@M zZjj-bR8?(eA0BJeyMF3HY0gq?y&7| zPGn6*Uiz(sMS-8S6#dj9swy4aIsgiMeKC?zpktT&qy>;)?R{jr5>9K50pp7!eS9xTeNYxGT(kh~ne+npL!3n(hbiBvAJhj!Td=4j9Q_B;a zOhB&e7vwcl#`MI|psTz_q|^6SzILcKY-47IUJ@_^mjXAzcNIg|!a)0^w}UaV{Ep`R zlAS&Elu7@K{12)T#Nkb}m}X2Q8pK4y9<0&m=JT}n=M9JmTf|aQK$$p(feq#TE%kMj zd!fp-lp1m3lt#ki$@~wqmS0Rz$6pwKiYWnBjxsX_NSR>Yv-ymIRwc7;d>`Zc=_b6y zD?y>?Bi;>CRf1%Crb7$4_POxd8k+E;Cx!CGIN`Et^uI@>H0#hEZYVo9ik2CRHmVDM z=NCHqxI0|h4X1l-hK!O!x@4dL5sD`m@;&jJKKXjoN=!L6uSaGaZ7&Lrj{bXekR*ut zVdQh8%rVRnvJ_pL_XJbpMXNG4D(`YO6@hvlJ-eP?r59=YE^{W^hQPoVqLXPSCti(a z`;FBC-d=W;u`YzJS=&0{s1kN8EZ;yL*r#zJK2*xMct+E*Y-fGp`UTfl{@d@P-xuiO zg+mdVI$W!doSk9^A2@~`Q)H~$h?HS3hzSx);aWoY2F_TcmyshMbN(LZByu(0lfOM1 zcbeY0zpzAmc|n+2*-9G-ZC#`v|1A-BwlrCc{~QJWjrw$Sd&PBbzeEqi2=7eS-`zYl zG_VHuq@K2OxBja=f8rc7qmrg5)Z&DwGYC6&bHqR5H~3x0Up^bA%JSQot@jcS5*;h{ zum*CJx^Soh^dAK?V3{Ii_VC2)9=P`N7NoxNpz?`v(2fz_ObIbOV>~=sbi8e<-`fb= z4OmJF5xrsq4<<Dm4{(ZZFFj z_nnp$pQ$Oe|3zr(Q+(az$#=ZJ`q4S(;C!I~|Fq zcij*J8xALJFrTZ-Tb$IQ0zSXO!tuA*D!v|v=OeT|@3%^8Ea}H-Q9)8AK~nK%QhgU! zd|D)y_x9m5_1RWaGg{6(FxPS>#sG)lhDrG6uf zc-`WAII;C;ZDU~zxkaJZ@P=16p?!>zA(ceQyzL`9owC}DTWsPIJ|maCr1NauIeqZ# z7AjS!P9%xqVfNAqt)!E!bb#seH@*7GO(8CX@4kwr`79kZBBNw7yb-^I}fJM5hme7Ls_0Kg{)rf}q zO#*&&72^LyyRlnAkjSa#o#7`Vdb|F8!0hph?e6J+!KJwfO&+Q$%nTI9d0{>L5k{^n zQj56FiCDj%I^yPT00~8pma8-%_p0j z6hGFCKchqT6gQ!r5~9p_{AXf?c(;?k#j$=|DO7{f-B(jZJKcY-$tBi2<6ZVffqC`WGtTszf9L02FF?0`SxlB`4*xEV zl3Cw7b+czXjS7d-M@G_lri~vU`HX&Bdd#x9NH8AA3DO{Sr(Y%JQwDx7D%15K8ry$f z#`X^1Jef>OPv>?oeik7Wh)8f`Cj4L$3*_VdIao|A7`2n@UDBCaKiH!~#i#N1Nk@g=UEucCPA@KzF(MdI%Vxk-&p5OQ2k>Y=-4H`2}tt3JYumaa5_t&|wayJ_{?;7XD}$+6pBo=~$V zW&q^HC9fcgYFnmer4K8=D!4>Zy|*$HVISUP_R~W?%#aYDk^``B%%3i4YA==){yeO_ zS*lW6laZOlXPEcKDconP5r!(0ybF^~cf+g3mVl7!yr>Zl$_(nD(i6U!S3@#Rd0ARR(o7yB-e}goV1ty2qwqrVHk4+vYO|5Pl&5R3R_>^ zpjdA;>!}g?$uK%>?*8JNfvIB+<1RCc>+C@MomR!hC1Sf*r$BZ_kwx~%`mfaU#n|uBJcmbRr10W zL4%jfBEB#H+pdJn{h*ciXK%;0EZDl@L@k^uDE|>P&s{-lqsWfxfL$&rP@NKZ;^lVg zH=Xjall!7@(sI@ayAwtQ(h6U!5@$ro2nfXL{3pC{P7O6Qp=*WEzIi;KX|8pS|JKv?m8k}*RsR^hc8$l2JCYdKfVOw% zi?>peQs9R#35>cCI{1<^9)z^2f`QBU^+>N!^qFT9?$syu=!mxw<0_*W`9BxGt)Km2 zyZJT6&J6S`iFf&kBwQGb-$VdEA3~1YrdLYtjJh?u+||`w7=%t=S>s3m6K}k4F%2;q zL*2Z&R&i061F)AnUTjpeGDY&tY}zj!l-iM*<~`M&O`SiozuoDfNql}RYCv#~!Nui4 zN73Zc+_(E^LkQF~3@->eu2*EUF4z=KxM!X)w$ljG&wHX!a($np_RpvMSyy47`lw-_ zwc(iZ?YkTM>2;mTh?j@6v&EC!9mG1129*IK9CZNYHPA0tKR%Kd(~{Ka`~@HP%SDuL z7LQ6eB%`5s=T4nvO_%{ zyWL%Vc^U)!%)X*dPD+M)i=@OX9(wO^c#lWicgCmiiMpJjI^)_Pe>i-fnBZEmZM$uA zr3c+0S+lMPA2WN^fSM>>UFLI7n;`>?%4wrop1fPAW!{9AHc{9W z8W|te_$~BvCxEV8%uphbQfimA`_hqn8`>DpFZYuzL@YNKxmsyxihme|&H;bvE9Ke@ z`a#4==v@PW4Rv6x02=2XUE2s3`tXmw(wRm}yQlYSCvJS@&K`mTDB}!-`T#Q!nMbk3 z#n11|e}zwbOT-l__pa&{_TN_6Bwh=ZgWl_EYWmP***KceO4>k62TAQlXs(+2SNaib z4(F(1K{>{iXB}--|59IzR{=ObG$64sRvz$7mbkN#YUiViAHEt#)AmkVtrGUsOQ3B% z`A|&zo6e1@U92bT#1M?pp-tFE^0g_1Hk4>|sTg_&Z_$OL&)gsUM1-T8%Bug^1i`;q zOPD#GGo!qLVFGKtoA*wfXH?U!=Q7^XdrL37`GpkSTqCv7(FzCyzQUN;Svu-`J3Dx)$FcWZizT<{;yqg8Ag5bSb#NM zC**-e;m^K=#}!@QpN)gf4TI6ClW#pM&I zsu~{AcK0f>(igW0aFS%qgm2F^3x(T1;>}I3%r(=0uWQIy#nM06_WXKWnJ|vyPmd!* zTpU_`h(W%9C=<~6@1REd%YTB^E<+>l#7YV=`8To*sfEK3DD;prPnU!H1D6Kx^W|cs zGRd!oL4J1;F#r2a>+y_lM)^H2%%2;zn`u%AHnHkoY2VCvNxY0!UeR1`WAAQo`z%bR zQB@H~9=eW+iC9pMJadiQZ#l4oDmPAO$EoO3OQE_l2z{Xoy2mt(`D!o7q&|gau_CI; zsBY`jiY;ZOV>EC)cHbF86b20gh_mdF?a!a?+tG-*?df4=yG7JJZ3$+ZDRbFQ3$2b! z9Dw@M_eWYfFwOpXSA|Ds#ErOED;l}^ZU%1mbF6n&gyk#Wp}zzV}By84g>w#rW--B^MV zK7{T5s6DfX;-hIn%++X`&6o7oC?Ya9PpeN z>tPAckQS=L+oUc-&zc=FRG`PmXnzRix~Q43g6W@6tC~Vy9xT~=X4XdZ_0KG0_?W(q zcZ8Mc?ila$yb9q{?FwHa$Sd%qp~Ex~r^T(yXMHEWL_qShNv%SBA?3k-jyOsLGNjoG zE;7kI3>(L-X>{t4n>cyEndAC& zFucS!HLnPgP$bw$j_K+o9Q+KHoxJi|=Cf>D2pNO*VB!SHr)t{s>)kc5hSh5u{^Y{| z=HN~W(4TM=dR`Awqyk}U-a_@zy&Qg;Tgbx74YdE*^lk0ua*uQJEG;opd_@A8;#Rj# z$`A;!I=1mAnQ@?6+9lD|$H8{h%de&I7foC&Y#M|+@w$XNlhhl096I66%Sj|g{E8hF zHjdH3XhZ&327T!2%&e9sF-I&JSNsG~(S%P9>*wL$?88s*DE5kBz3a!$rJr8z6;coZ zx7!;JPQt$B6|Qcz&E;z?+}*!Tsi*3I4!O;N?llK zey#RBZ)z$bq2E|$NOIBe*-UE7Vs$ekz(cTYZLvdr?-}jjQ-K>@Nz>NdEco}O1n9Gp z4g!oTmi~O6=1=thGIwuW3^KC3=AzCu z4_xe*!VmAZuFlDyVIrn_^HzO(2KBx%4;(+P`EtVA3F8i4=iiY9q95{jYWmY(vKB7H z1lFLQ?pttIsoq_Zp!YcVw6y%P^VvMbAJ;-R(_)EzOS1oo5RRfB=f(DTF?sv;4u9za z;~RU*+-f2Z6yxZ1?UjH^2n);~42NKJpdU$P`#c5LCD8J|7;@%~OH3bi7t$f&PU|r@ z0ptPZzW6Jp%j>1`3Oc~zzL(}mu<0+p(KJOp-PhricQgs$05QzcfpKvZ-{O)l>0>%a z&}-#gSI=Fkvx=$rW^UoSGKihjrHWW!TBoapkI!Ws^?l+|9JjKtWh8^pEt$+L-Vc6e zNrFJmLSwn#KKd0;Gv6`7t2JXZZK~hC#pdlhz)>-~4r0fKUh0$RmtrHlT&}=uNu)mH zc8_wdxwqB$jNJql-3a+QiJFV6Kmh%UtN4duk{fWZ*JecU6b(76Fn)FOGV*q3u~07z zv$%3PV6DxQY1JhIX2KuG8tyT{EF^niwRY&oy-35N4QvZ`jir zg3_ZPKJP#5{E(CZ)Q6A+jm;LS7}=Kvv0m8_&l1*HDEu2#gzlmmZWe9 zyK5ZBB3JZ3Ipe({8z>rxsEB)>H~wD(ljAZO=zVt7(s3hLbLA|+@A^>uL+mk!gd7Oh`MUBMdAy<}ztbzd zu9-WCZf=wI9S~|BVrR-x%+aLtj7^o0Bv1y3YcMwOf>^8qW}NxsD!zWgBau>CR7uT?E+W={&&v^DT)=o+5ZcBNE@y zrK|~M)Nm3c{b;<7s|;~bA^uRoTi#hn|o>|d1GTruh$)ZY_PGCU3OF5*9>B#SC z(v&WO9@fsf+Wg-BFMVLu^YI=sXnD`!=`h!@qBi_c6<*RU$^RVXG8~tu;k%BR+6&@&+@3K{^O*>jh3=9%q@1_f%``hZvSm z8?{A!uPRpYK=ZpfN6%Nd^aoh^j=0`@TbLE}+O`vlw&Ur5N0FELtS`t5p_<}=nlhk` zWB^0G`wDgKcJPc5wr!%_(*AjsoGO17W5wA>9$w~VHc-V0xQuVn?g)N8K0+n`3H{e>-3t`G__MQs!t#lhRAy)6`>(oB z+gvx}#Av;aEl=}JAerR1N~O0;>L*8M{I^>5=*Sm6N#i)EOa~!^yDj69S>QH9e>8{_ zAgG$$G7nzlMb6NaNLvj!#dI5fHHI;!jE_8pT0X`4P=rGNd0P)2Jc{fE0gw^4>cfi@ zIdx@VbkCr*r$o@1E>(4xg-Irly`@N#$TPfoDNy}hN%#8iWWl=v#5*0-8l7QoX~mzD zXz=P$Wc3Vk+i%UTVm9?iutR8Kw{7>UtMnSn|CE%^3RY>yUrAwByt&aYV1^+bE6Jad zGU{U;Uu77!CR-D!g3bhzV%O9%J^N}@XX@W=BF> z*6wcq*IA{fN|OfE^)aaHiK@zw(*jiaU%NSgb{#G&&kxGSpR&MMAcC3S_458XYDJ2{ za(6FPti50g4~Zm!Ojq`Q=Qh$Lo6nNH0D$hKsvN6zBLuzS)=%z>1TEg&EfoYCIi!jV z(kpoG>wPKVbDVJ1Pj(kzN05f?6Cd89WG;{TIyq^0>SR7(n|`^A@YE_7eIzlT&cFKg4CQo2vCJ|Ds9KG3A-oM49TUFB>`odoUsIh?pt>i3 zN*dGub3!S<^-<|Dj-09Ykn_c!83%R>5dXFvC-P7%yO?$^Zbv9@muisHDa8U?cQ`eX zYhY5jl_f-lOBYTL%VsmcIk^>==gn*F>d3_%IFpK)*i6;bN_u1aDTxECEM?e_RFOjl z7&Ai_TshA@dhDg_QFAWI4RLc$`;xCVl>{{{o4-#LmNIg z&{%c@O9@4)IG(2>3qD7K>s>uH?^(=lJyI|rw-t};b%nQoN=YHH7Tqm5YfG)oOf@3Z zi%Wd7+-jAE551n5VPrWW|B>`$HC-TdK%*^WXii*{p=m=z9tBlfelg`FiS52n-2OK$VaMja1P4`8`}fU6VP*MUnE!(12<%k zIvSSQ<`wk|7j!(cWwm*@g#CA*PsGOu7Cp&IC(e!jv^08KM&J9=ksMXsSyI0W6QO#3 ziWHG)9lid0#T_kJO^n~eBy=llUb&b7vb-KxAH%d_&TS)_zBP9ng5Uf^LpECR{K*gt<~R|B0oC87jru*D#LxbXJ~F7)7T) zJ{-M1WQA9IAi{ICpz!L2$1$@1{4FLUJG=Ax+o z+c%q*A~v?(_YAOD<3TU^m4h_cCP|W(z>RH$s1ac1qeC)lDjC69lh&o{_(CH+?aMLN ziB*|0zXK#ox!??MQC>v9AqQrXADKOoc6T9Q zv%NWEE69f_DqJ9newN#O9W*Nf8FaqB;N@1a+^8OGL$jsP>*DE8KvE10FbY$>Gew|&MvP>=mb|4Mi*<89|b#$Lk< zOADu2;Vjq)W_OM|;@8TK^`b|DV+0ecQu%wP|0keR=0gkVO80-2CymYBSD?fgJvrbL zG7vT}U8-0a5n$l1J?gG`87=rlQP=*M7LgeFKdrDLmRlEcy}6u3m*y9Imu7lOO&K70bw`eVMdL%YR%^P(ZV1B@)3>Cv1Py>uqFtv3oD;u$60vsE{h0M|#fXH# zyJR8YL(F}AcS~fDvKecEhK`2;SxO=sTEVK>cu@1bbYSYjV_##jCfsy!^vz_(U(q+- zqDWs1@oB@*nn4CD`h-buhhKUsEmEcC;b!|s(5sO{I#yF+dctmO-ITL1SNv++)K zSdalMJzLa|y;bX6PjtTmp-re5w)XXn!TgWPEK~xQEu_nAJ4!ODRB5!3H3&8yy3Cha zw`n(AGCx0_;93;(4S`sCOB_WPgkDBK8IRqyCiTdaQ>3S@vxxz13fSG(R?#<<@n(WaywMpF0b7tE9Ccq zJzD==mj|=ocYBmQWi%^gw6_eTTZzPO7M#J~L$wYQ;RI@O`A06j6?wprn*`XG!J7@hwg!xcN zY&y0ASHkqyJA6Lp7IO4SF0djB=+Dc|y37X~kwSE@$1t_jWbCy7L5$I*_=ZoIM!?9K`RS|Cb?0UHsa9cl z*9B~N#Af;45J#e!x_gb7keTfyh*;(a=EWkO`zx&vN0W%^gqIyyDh|U)cMa)p! zRxdyLJgaXcs^4XY)fO)cd8g$SQl`I>2pK^xW9cU0_}6$s)C>5FQz~ajy>3gM&d)Ew z)cqNMxrzEkIPD3wP_(HK8+aYOBlrppgZRs@dhHa&KGWkiVCDd`dI|Td?%gpIgb;!i zF+IuSE>V45vP2oPk)!TJHu!N4|o6Q|Ca1D)NC6>|Ah$yv;W|W-SMaY zP`KMnodUN^OPT`*yAWVa)H=+Huuu&Llp0SaF0%NCx?&2SgS zs`kgHPw1L{;nBUC44u1uFh9{^z?@l%POcW-Lk8HT_eit|;qxCz>)Zq^9i_GH zDYg%?+C$V!g{gaX-d?M#(Z|j~ERsvYo0RTh_GYibN32j1%B|a4FvFexss$n55@=dl z%>3MsnM?t$(S%xaA>_c^8er5~gbnVRHG!pZz{M_aa7+h9ML*fi=~(+Y>Ap64QZq9* z|GHjvqmD2d-11tF3#CjN_;L~b$k}ri+_}Xs*?oH*0Bk(sW{oqgy4n@@bO;I>>J?Fu zJ#T5L$h8o1x54ziw;WYXE=cuDPw_&E zls-dJYgLtuLJxiD8@V`Z0`;e0#}Jq9ErD^*d1ug(B$yOD$I7f>9wlLu1dOqf5q(CP zzZ%B%md@w6w_}KR8vj<3ee=ZpVRn6B)EY(QEFgwS;E=XAp-2Ss+tft0wl<}OjY)G{uYCby^gpQup{uP#_hrRlj_wDvY`1Y|# zt3&rR`?2UP%KQ0gc6|?y@S>th>)3o75;?K;KJr$Um*j+rDBVel1RG}q5xi4nPB$64 z%)qqtbA(qo@?!^5%4})-=$LxRHjoEgLJDk%dE&4mhK73FmZN)r83x>@XrqnXu3@4r z`8W{KJtkIY;(c%aP@F6S7b0q_8DY=<+dZmd7oxek+Nw&qpiXU5F7?%LG8k=Lg#!fcv;m5oIQ69W*N!lr*}&NR*Fq3&cBn(w z@e$SgKhpx6;1n;==R_}84T1=>04mVn9@i4%V=cugtge@MNCu<9Sg3dH7L@<-x&K_f z_4VL_B8APxe&N@l!8b79hk%IdQYFfzUoXB}5<|Ag+uaNtadRM4l=H!SZS&M|JYOb6 zcyuvDU7m+>e@7$W54F5V8l#Yp?QC72c&mr{hYWRd7sq@%QMC?=ShV$(npNDVoA-?a z6Vp6~1bb0|?nRU+aJx}!pwXl^EG8Y6S>)q7Yi%kVI^unW(tLmK6~-|T1K#Yk=WxH? z{<0fIU0MUijb3?6Ls4vWeew%8u)vN$*~t7G?&|96;}tdOo)wBMeQHkw8xtS08!ik! zej@!`VD$6dh_vrb1`NKx{lpubEp*6I5aaGkSDMU+zMT@Kt8a_IpQnbeahm0*yrsGx zm*ZNtdKPsw_&o}|+KLcuNu(ig#RJpku{}|POe$g|+MqP}C__(9wRpY-UveM4TS&el z50_4kAaHyC--cPNx3K5z(tBAg`pmMKHEKx4!|vY)9^Nh{ddqw(2;KIloHv} za$daZXJ+~=OSkpGm&s|Ox0KY&?rUGXQkMM6J@A%9YW$Pb51Tq**)sOj*S(a16AIEH z29clIY7;dQx6EQa`QeUFzuiCK7Q)q^eD-Q-vSlhpM=YnM9eXvCuv-Q!qYwAESI77< zM<^bThtV4k;Hbt9t|=@Wpv_N7)CT%`*p_roeh&s!P?)>oX_mPB-R}`GKB^1h5XbOH zrKA;Zz>4|`qqjuuT7CJ8;sZ(G_Taybysy5vfc{6yR%=LX^QDCI<%rRXE3g)_vNA(H zdt&rU@2XSicZ?WJk@dIWgKiMy`aJEz&E9vdB<&q5WzW*%^|zgg$Dofki~!){WkAZP ziX$lO0`6f(_aUNRJ@b;nk!Y;NlNB)~;zv9cc{f9cAn)q_5r(Zd!N)P>2p>;`CO-%M z6eE>h`9cuWyl%_t4GT$=E#<8QjK$si&s8J5Rs-qqNmuTP!~K1IHYp$X?>2v*aV1!i zK$LVoNsFepnpY4{qReq^VfXNy3kVTlW1QTphROiSyz)+^lpfyQNkJ#~1rxvOER6Ax zFM6qQxp8=*@T?Wz@*=Z!4R^_X!S$&%k7Sl;FTAw(XTYQB+zo7 zeBSQI{^;ehI~Ld5#0AeCMj#*{lxRSVBcS$xkaA@om^4~;E*Bbuqt+hKrKpc2_PZMJ z_z&xs@qu(9!H^j52b6fWJ&w;&MX12?QAT>3@9kff-_WSJ{hw_%9U({CQl(6gp=Cui zSi3o&t`xhze8G&sZ}mG4QLeY6dbqLaluB1|!3L&K`iw>7$D>idIUAQLswi$|aN1lR z3}NEbQE9Xo_0y9eL(Dbby$TyA9=JZ%(Cu<0b^TT_DG!tuP*^!g5=Gs(-KCM8-ctx{S^8a1@UWPiWqqAOQ1}^a`Ti4 zN7>{Vk*>50Ny(G?CX~nJOWDeagXRfqKH44$Q6F3hp_Y$Q1O0MU;RrA?ur=SG^LG+= zuM0dea$9gCUKG`mV?^ZJ3eld(t}%6xMI3Ou2q6EyMcuyXXJ#QqF_i;8`o3=--Sdqt zSzI9mmp=*7J5f4D*@WUh+gdYr7@pmen86|U|U12sm|%+0DZ79*<3$k#fUrlOrYlSoW25BE?*F|y>n)=ekl!X2O%$Z zAwr2gt`VRJlOvHB8ZU5K=@upsIXYbyrHQ4S%S*_;t}zNV1JxYZ2Yy^S z?mb+$<37)ZHmCp0v8wZ4Y?OIz99XQ+W$OI^#DJ~JLM^mR^6F8i$0;VrH|vHOn6zpH zHYUE!T}s$eZC^+O`fm8Fw&{QI#AoZJI@84G^TY_y*Zu|uFFo!Gi~9D}UJlgY@~;N; zXaNZDjx>AfY+UJJe4{F1JO=3ps`GJFkKq<$sZ4D`1dT5c^K2RXH@nO{1Xs`7fD-iL7g;9X75KvuT_31hkVDwDLRN!FITE+V2YYN;6aj!4 zrI0Wh!uccME$7su{l+s>sd!D24aty>gH9`P?zl5S78L#Um#x+lj|Fd$0x8Jzm<5}v z*(1L8*wIn%4;&36HdAbh?;#n@6@&*qa)-~%R>GVruCE2TGW!$m$X{1+5NgA^%W0!m z%tPj4ZT;RC1)4sKu}jsS*KUXp^*a&eApC6~?K*wDlCpPvOeo>AQ$}}0eYK2>`kvY{ zp`752zNyjCKD0nntW4XJ>>ZEo1r89sR)-A^UNy>`cJy*N{en5r_}&6P!x1!1NJuD+ zj&w^ewxM1@6gcYwXUWCeT)U2~PB_SwMOo^@Q&Q)&urA#D#i zxtCkh7Vy5*JxNc6G3m}gO2=9$0;68Tthx_BwV!CanVy0GwSP{!eT4hL5u*R^8Sm6- z3ym^FIo=KwpQg9oYhTI4h?x2H4i4|GDj9V(Ts>b0%F@BWH^yqtU*BOI2KcO=hL)|iO+-Mp}_5HO^PuK|aI#;4? zsV@1omJ=W^MkE7*FY^5hE`*xB#UmpIHj3k(*u_hfQ8drCFqCJI$1uaQd8xYe#z_&FV;ZW5zkW#^o!j%ve+y2by=r^(I=S+iwbs7Y}kJHGKgw zOACHW_lZtZBNO#7ec>2YE?7r@9OV6dmV>c7CGGfBS=437jj)wB7|i)Y zsp?%bF0HQS3?|yIcP6+s(c~J!gJNvp+I-a+m}_pf9;^4RC&_0TW6>U-C_f_**%Gy; z=aAlnyRF~qML}Dyr4x`{d$=>owU%{xQ_&6RO|N}d^pbTtwtVbCQ=h<_sFpd7X>meR zN>AZ6jy%Dm6L*{&o}8=tBXjJHq2qS-SJsWDLCGqVF(w4BW;rdOVab74Pu%Ta#G1GB zYn^~C;YI^d#Dh3mvQ|S8s^QaXT;+IlcU`iqCG6J9V7Tc8q?Z{*GqcGqkZ0d#u8#e~ zBa%OrC`3t^Flvts8kMI48+F(gSb7&k-a6`!M=<4E) zPmv4Za)PiZ-!53yEIP~?6CS;yM(E72`kCBb7gOs>>_4yH!~iH41iZH0UQ`~l@%<8r zKp~Ds&rewW__IzwQo%1_nAZ3(Hbns%Pm%+Lm(2K{nk}vz$ABBbY$CDtd=w5lh3iH= z57SdxUR;5RC7dgzbaQh-zIFLe36Jj^gXP{2Q~c3`dp2RWI5#|^YfrGF_!#_)E@8AX z|F~myx~ySqjv(SQMJ=v5aLURF#cduFp55zdrH0h~zg>XOvU{1qQ)*8T7wyJg`(lTGc7?{GG~89i@v%T`$Qq_7qvMnomxt z+dU1H?HyF(VAuCbiN~v?Mp|e~vw9&NHn+onC|?6Th?G~Ff0(*=YrwC$@&L^FpJ0aGdE)3zzUWK%3Az+X*)AjC zVN3!krtwarUi;&kGd&TC!=vZg$MretewGkFnr!9(A6NzJeK!kQOcVTzI}XSMBMNO@ zeCyg4Id0wM(1WwvfVp>fPmuz2e#XGBL+kb%OO0Z;Vp>Xj_CLnf(3sz9WG9>DQ;&I7 zPf=9=`qws`5B>SLA~dYBG(8(R?~W`i1ZU*Pk@<8F>2@ThXVde~BI>U=-V@qUUn009 zPe#rX$xoCLu=?P17m+Z*jI%j(qBa|Ol=4SyDV8P zefmWLDG%g1`u}LU%CM-qwtHsiZs}B7K)PWN0ZBo+kxpqCLS_JINu^Uzy1R!4=@gI# zDQQWm`Q~}A>-#f5&z!yYz1O;Poi;QVGoiM|M+T!K1u&`E!)@~0%}cDeGeFB908Xj| z8r1+f2e{YH$=LR-aD-tS5Yp}@C>c*bG6+8dZ?5|E z;{9O#kz$6G;Gmpmh7NG<`h+EN!e?`R+nJgWQ@v;H%sIb4O{%l@0_`UWSTagybrk9| zrwjjB`#7%6Nx4kXpMTW3zxXSGZ$J^bp~uJ2Dei05@K&MgNSfC`wfahy%v}K~tyPXK zCe0X@PqmeBhen7me0-my)$0^~H6x0qUMp8aU8^wWjV@>JDHh1PS2XN-2`X+T|6g+l zBPe226P~F{&6f_Ftq4Sm`-3ktUo{ zLEvMNr%C@fWV%(}t$; zre&R4Y=h`x=zT4J_C98YH1x(GXl{;z6}xI5y{5zZ&8l#Eo=`oXduGx2<5_}>3V)d*FuX=sqx?|YGn5^|CkI_&ucoztz z4+>gTfR}FO$RU^yke@lCqq$Z8xm0w}l2lvg0rqZ7Zb*y9dZ){1p#M06i#qd`gtZ3G zP;X>kO0R|!kXESO3Nx(G;2u2t2SfWEHGub8td38()FvosG_0m^+KY2Wh+x8m-{+09 z|qKA$$s>)$rm?w!UJT+av(7WA}@0mk) z`=0)wM~m73BxK_*$4-F|R{Ky}xLJrzZv4jRqr*S~u6worZf3MbX+9m~wXvn$B z?~BY#Sqal|LsQHmvC~XqXlpmLlSEt#F_k$xRc7*DmGY4iUw;X#%pf$MpZpm<>W5U@ zK;{<->~T9mE9w=JCYGo81&!Dbn8OgS%jaVP&Y^w=mP&Hvo6 zs)wSM&qb2=Ujt6>#)S`yFUaC{Lcz)l7t%xsNh%M=hJVCC7OQ*&H5V+IC8Z#`Y;TZ@ z++Xhau#(xp4C0J^s$>K0l>TV%+mVGkA+QNG)Wyng{yIazt4h1|wp#P!!nhK;i9wtd zb39A$%JlD=t-`q30V~6M?c^xbqsdek9Zz1RW=*2Xrht@+0r~Fp;k>p(Uri2|9#WjIO=&$dds%!G&^5`Z08cY>6VDB{}cE zvRzB($u}ccYy@lMES-fwbNC+gK75jMKU4>u?l7}EW031?Z}tQd*By{Q^06mB13wPN zl%*N*KCsCFFQ#{T1LBV>-RAL0s%0(Y%&i=Z9PJ9y7XMxHnX%^RqEoeyq6CU~as2L{ zT^YTz=#K#g@+4^R>0gq68~<%TR0Wz8!Sj`@)T)3Ba;4qg{`4OZb1lKrtzfVZG5Is1 zC)FWC60xLuhv6M0qceR#(pK>HRhNlo_sGmZJG)ri#yE%(`rdc#U3fI0-hZI7Ho81Ppbw^^HySxu2_zgnv({iEHdm+`V=+>dkXBpttbyPj}Cn-!468L8ikL6o89T z5^p;s1FV3511X(>gw3a6c~?$*bErPkk@9wEv7Ub#{onukPPj6qych^RJUQL!{?f6H z*Uv$cH_$`%UZC-Y2zc_d7rOJuzk6+mIyYAi{dxGO*gtcUtV1v3^b_BCW~-RfTZF^T zequ=^ihs!YaYord+Vu&$tC5n~_$a(yPvx-t6w$^1NivQ^J3Hwg9#gKBh!AjRJ{L=0=KEOYo`UC+GniU1~OqV1zjXNryi=| z1I$zbXukNSYu;nyoT$j^5zzGAIu@2RTAqwJk@)(iMWIVyqw<}w_2^x%Ey?L*@TP3< zca(LrgeS7u9kZvvFD6VxND`XP-z2esD=P+S$c1gKDkGNQ7!zI|IZNK)_jJ-neO(GZjYGAHy(oA{Hu6$VM4`*^ zRlmx@LNX8(VATDa*LEzUQ1=`5Yq8jD>%aGx*pSKu*bhB0)f6^|(`v}pO_CBoUWR2c zAo8bJXjNhp^0}!#QwP<^pe;D?{F+5YNnD|8g6-2j4gfGjV4O&pWE67uN5iqM|E;@I zwO!Eywt6AZ!=#|Opi=CGhVwW1Yzf#EmU9-Mb&VrTgI7aRoM0{oZ@44Rzs&}hQ>iuV z4@%}!Wq?PAQdJBnV(G;CQ?gWLp^@r5dXW*8OG39w)@LJv{?q42kNOl}RMGEeMx4^j z_}{1RZ4mO&(0w=bX)-3sE5TLFh^>0Wf=7LK`)SyM`TJUYVpqI0WShY1Y2f>^1cbC- zo+7thltqt)Y_Hh3O@l;IUF*x2k2YnX*X&M}J-bdE&e!o$T32a++X!7a`1^@QV>LrJ zzA#WqGt3Nr@)Fl9M}${pR&TeDZ$-29XIUEw=tu+u4TLgrz~dMg0w6QBlC$kuM?0Q+ zy#qm=*-ySca8_Bq_ar}_X*gR2hAEto3kA?>j+Q>q{Mzh z>Z&dTzcjefMLRAFFy~)}Je*Q{GR(cJc{oPr(cxjTACIs+<*q$c!V3iBvdafSEE%Un*{u zC-N+SEk~V-Wqr-X1`G(N#3mWAXvDr5NGHfzve|77q z{q$eiu{C}_sC7mG52|6(~c1pIv;!Y+s@Llm`e$89HrNCE^ z2>EWex|)%WB$JG_E{be&$WPb5->?_L&avR!s_%+1CA4yOC-o6+d&V67vwxI!6 z+-E<2U_+8jPz%+8C$@nKSM2~M?12kFvwSDef;;$uK&tgmZ2DI!Q)V@)m~@u)gQ9to zPgLwwL_W7}`9&AG2PQ1**;_K&JxIXK!QJjg7U^J8Y4=Aq$Xh%*GB~zVEbb10QkjE3 zoA=wf)6?Bm94C8`_L@-qS^qPBjzk>+POTqCPA((v59Ru89_>k0M{OxChJ;2DPHV~5 zBWA2zN=cUE;sg<7{AtucXjU6-ws!v=)?}LE*V5L>4;tPQh+T*LDUPgLO!V6i6TY42 z^cR>bOOG-E)ME`!r4C^GHzKCIO}dx><^*?$B8kP>xjIn}Wn|OA3{+GnUXZiRXg#h2 zbknhfM5~kUS4t8njnigZ-!mcH<+wt}zLmP!%iQz277_$y6|SqdWjj0;IQ&Yd zFAdPQmHe8Ng?aTN;gZtQOrs=$Ka}ihaLn~*-^svu%P(f5Opm-YHU$MhO$4p()=h$o zeQqo(R$hDjs%7vh|ypP2!3gR=nzDude9({~Jo`Vxx*M>`V{lOTD-tWOiIEbnF z;Wl&DHIt9Y6f01-^(dsb@C+dUqQR8hFPAGR4afM2QT@)X2R(3C2cO&Be;4g=4|lWa z{i?2C&J217&P~h6(uViUkIH>&Qx!|`77;SOH}`nX1*XJ$3?~~XcXOBRap(x&TN6y#4Uqur(JlxOv5pXUWdVY|`o_bzG2gQ!1s~siW#oimd{MWxr z$?ojcxtMm1G2Y?Pw>l&v;E^BlYf#;>--KFYU=lRVisT_qJK{g{iV!c@3>V; zz>vI`WROxKxXeQpatJ3RQv)+EDh2SzrcbhbrDwU1RE$W$fjU3O(8^Dhb|ktz&8;e` zV}P;XRe3 zQcP1V!?_~1R77{2>VW?kx^+o9d|wkcJ}V~89HPTf_8CO{aV+E{?S|4+X$0NA9WMjo z%7O`mjF>Ke>KV^~E%w9fX+bW5zfF0$Fd;5UtZ=k!UazKUAz(J#c9!a!I=mEQm$G+- zzA!%@_huP#{G|(=>wl-QCrZr`{c;Tb6HieBiF(j+U)XfBp(a-qeA68uh6Zi52Rou5 zz>y7JyMxW^`>tiV{B+{5!A0JmHt(?^mdQ`ff*Ow7+`5L98gq|d41ak}AFSn>AOez= z`V0}W`B3k|>P8pQM9+js+#ByT4UgEGd;!WRd}qz+aIfI_vP2X_N9yPI;4MK;=uuvH zL#g@w`57x;a_vqtdTJ0Q{IMYU#&v{v@;Uf<;BNr3&PfHth5mu)+VV`25f>i;zyc{m z@Z~i6C&gEPq(PO7Gf_=PPxV#X5layoh>?qf=zONnKS-D8t20J79|bom%=37^V31Y& zsB=}ll_t?#Z^cKQnQ^TCwbTI&+|SkqI))z<>1{zSQuAGjRatIR(it@=_Gi<= z63@{l+Y2lSbgQob; z_*%oa5=i%d0$*|-B)K0kUZ(@GC<)CiwT5Yxn-Kw!kgm;Vob@geSG4l8@r$EM4Dgbe zMQHZ|?=v+BOO<7s2miXo8}6W^vE*E?$D)(Py6-m=xQ2R(8b!>?+v)IRD2=Q{jmLhN zW27u#PxID~0=K{8@6T-JvZs$2I^y~*IP2V^d3tViC&B-SO7p1^3~xUGDu{tZQGj@_ zu-_@_h@qy%bh&Zb=aXXiN0jZeU_@=oc*bqH&2$o;QvB>~w}LG-&aBs#GbM9PpnrPa z$4B3&%X4O~^hNhIdDDY^Ax8Kd1qwz!fPb4PAhx)at~=7UntOcs#@FBdt61uwJkskj znIhY4ROa>u6w&0)A>@Ety4Q)N5M^=(JVI%PO1R96y-zqm!tL(s-@E9Qpkn%poWDV9 zc*3AsXT(_|s`XB!F6XhT_6E)AQbwrhfrcG$gxtqye#cdVLqyTws+e7;WeSYks zE2|JSi@Q#88C6a?#Gq{?iSWmco{Ycze^&eLHMsaewWaT%>Bj=_`J;gqeecwV2N-n8 zLII0PIq8!Qm&+3RsM7S!##wR(3K(_fk)Q(qd>T?@KL4;VsGdECO&HLV1XMn}$Bkuy z)Zs;zHT-&|3e;;~@CH)@1FWdW%Svay5>UOi$UeCC%B%YHb3t-RdXGS_lZI1SV0vGO z{JWQa$3_@czPRMd^4JOz=#0Twc?TNg{H z0@>%|!y!vRH4P9R=b_&9<2#+=lm8%NaW4AJa`VGE=}iuI}0N ztEg2ZkVT5@F%bF;q@vWKcpjbXmqb7`Z~Qh(f+H@Sb6?*w=C$GFQE6Byz-@X#6qM4* zJ!6gl73LQwa2(&{5l)wT*Vvsz)1~hQ2|C>&TU!`+E@h%hdS-T1GWxNg<6|98M8CNp z-^|nQUw>7kBVoZV8Ne_#;1=HM+`ygZoCTfV{fU$hqGj5495s?dQ(%KG4-XtOq3i440Pz6`D82m_t+~;F-`$vVimz|x;0;u8wO44xVk8i=u zn$!mhswJy7HVe-0>-gJ0yBM1AeChWaym#W~H7mi8NBM zk>4PIs{!C2Ywa`W#zAxV9BaIfrnc@)3rC=N+AqdUtS0>4w|T~;eEZ`Bm$0PQa!2R66DCu+}N); zn)`p^3WFgt*a2cK*D+AL1lwWY8z)MUdXJ}|2DiYk#tLkfGq$<` zfC(B6iWW(j)?QJ=HH`{8!F$6%8Gmgq zhxltwH0XZwYihg4?mKUzVEzj2QX8RH{1bg$f^!_&vJP+7$JBu-YaGp?37eQHp|Nof zaT5MK8$f6etmE(;B&3CD0Tste-xNOpCK*mQGfd@5uPual_1MFdHiLqS^Hp>!NHC=x2kJmeP>R{wdZzME$_LM#YJUD{;nW;ECHRlp0`YrvlbNulINHCK9e0l*1CKrR4ey@Dxfsg@gj|B1~%I}=idX+RGYcwDfp$M(~W z^Rkt!i4vdo9u)>!moem^L`ubM9xrK7M7FSUtf-%0HaKCuYT>i|dXorF=BeYWTC$@G z^v&028G$Et2>RkNx5yLy^$U$G+1Ns^Y75s62HN-pPf7xTpD=YHMi7oW2>>OajW zejs#IyBCj>hjFiK=B2I(+lVb&S7hxdgcU}wINrDCNdRXX zAx)Nsn2=Ee${0Ij7lMFfo6%|T(}9jT>Q5e=Y4AbCEn?Q&%jafQlxBP@&r#ztH`A(k z#t6+&lzn#aTm&(o+-+uNk$MyhFii_rN7v{*nYcM}bXB(J0XgHmO8h3a5dgC1MFW7D z?-|a-@GY@+zvArM4^(3jnCoXVo>Yc;2z;PC9SGj6Oo5v9Ki$pGG%wdWyKeKlXqp-U zhH693nZdg3Q&YKRd?>0OVs~nW0XgVJThQCuf8r*}{ z3#BXE+V;|K?G<}U4at}!XPZ$5he&)ZN(B>pE^e|wq=gr84RWvMi#QV|3Jo#g04h?Q z<$BOaq#NAe2{1Iaz@*>VVu_o0rE2~f$l2Yv{yYXg1xEx#JWVw#c1OXJbarR-U;|4Q zsn(S{kvG#LTu^m<(fL=o*|?hBrFk8}z6RVD z^8nR%WW}eh#yme7i;V(IVBbrsz=6rEdtf`$>A&nPy()8d0dio`%56X*R4$rbu|P~( z-p0%#a_uC7Nhb%q>qjUnPG;ydtc!&@l_vZKOLJG%{w?F0x8sJa-v8wnqUvMx8`?Q+ z@dTwl%pvA9;I+lGs1O)fCND26>1zVx8t$$_9K&Wt#6Lx3@ym!FIu!W_i52)w39WBO z6Vg-?T7`@)ph4@AEO7n*&c!Q;enE4KvSpT#hob1 z>r~<NHnq=sMZB-YX_r-YvU z70{4q#_w`p_K)cL89a}5^8=JML;GR8&Y>M?w3X`Ss#JZGpD=BMHN3Rh|x!9 zJ3I(Iin83kG$^L@QBXNKa&GXIQ6<=-dVTU(l}+;9>xA`xnxL*`qK#c6q}3F>3j0Rc z{&}#BKO_9}IVWAFS0TSo>7r7Rs;SNO&Q)a{T~7}7s(UrPlFyXufiyi& zVt0urY6st0DW%@GvIp$E z!r@alx_735+=J}cGSaWgn&}a_L}VBCES+x z#gvE#y`PkDIRl^%8F$RR^Npn9%1LtFee_*q_t5W~<^ZsQ= z%w0XTl&7?>?m_UPb_`;GbV~CbPM3=6m?PNYZw9B35$M2t4f<^+>Pw-69y@)qLLDy% z=xTa1P)+4sNSn{()_nITsQzw$oP%oY2TJX#XQ=%gHqvb|>E*;U;R$^w5WM|u@vX5- zv@CF+nt3}luW@pk3qG%rdR74L!X$+OZdy6^rKL$jw%X!pcx}mhsmU05HRu-m20FUT zW>`$WH{m;nqhIw5RJg^CCQ%^~9i9E4-SNWK!UNSp{r(rPzr)}1QcBq%>7_Kp zU5jbZ^JaN#hV8?Eqdw|#6Row7g|1XkthJG&81ebH5r_zi;kTH+T^L{dVBvo2ev3Gr z8phr$85Zd}ng!X{KA%PjgOHx^>xfFZ^M`8JjeBb!I9_hS+CLC2gO{ERF^vT9o+wtU zaH~0CVVeHplVup+YKc*V>7zp6|42)c_n`7-)d!ok7HV0)XE&R-Iq|~}y9IrY22duA zQ5cQ8(f6i=(__7*YsUp@zZ6*l%OyL)01e!ZukdTihbOyNe&@kv_uVd`aVzmtH}}6X zu}=4|=^$^Ei2q5QdG%ec;hx8 zXijfL)k>7{wM5GMXOLTtYn`x%CsY z>@n05M6aEA`G6#NjsoiZEK~)~M4|;geehsQ4KJkxJ*mc*qA{W=aC?KT%q1QECp@cs zV?PE*39tB85_}UX89w>PrU*k|co*6Fff#v|jRLF973kQ(C4{`}Gse0f!~F4nw|S>) z@gDxCUzAAEBm8x%`RiU*v6(V?UEQp-H^S{GFDJpIM$&EZ)l+WmgEy*CvNbkG|BU!&ndBrK7Qjq-_sBPn%}#MK5mXbd_f9P#bOVFU{{^Y_XA5; z`Td9%o+>8ngzY~zASnhA;xt9>{yc&Rm5Zz6_!^D+MghesY>hvXKHKZf1Gg=IO84h* zVN(A;#`hq|>#1yu($dFRTu& zZcX{|J_?9K(ZFBSz}%j&;gi@>C$52&-`*%pOt#YcG%A^ifel@`xirRfUy{2u9i+O9 zkJ&xDW|WG|MYt0)#Q*!N)!+oerK3LV+m(f4JYLGu_voTw#(I}>Jo4uBQm)E=T&kig z77IV}kV8DU;t?=C0yidfSxHR+pKFQxmxWX)Z<7Vkmcnh>Av5cqEzc>?CP$4yc-E{0 zM5d9Ft8cyY1S2Qf0~mdL#k4<+7QYE$0GZz|FbAIAuDH<(txnaYU<^qTrwhyF;+?cO zVs-viRXQbNT#o0yosWf3^dnZ-*Hsx;;)zV!W_GB4zqUPxTJ$-xHu3i{avTDAs=S#Q zytlK?f1Q(Es#Hkw<{D)SB5)z9{ZD_V0szV`CGij9Tyr9~`pVCDpVF<)MIn%ra`krx zWflW^w?@l1!-GUyruvJN&*g~oN=vs^Kx2EZ*IT`!hXeDn?&!$BQ=!m<)!~ezFWe#e zgg0kZjFOR(ark1qs0ijAXV|-$tsz>a|I8!oaQPd{+o(PAPhqR0*u*7h|8vZ?Qk0-J zwqW3FIfuIjUBi0^x@@GVCmeWUjlZAeIau}tI?^q3Kcht0vujy|DZpEU7>wWxI(+fI zr5v^tvVHz9VMJFJPgCtpCgTZgM&o{okD=RF#$7yUYwW{mThq0qc^q~tIw9h&5fpf~ z%jX$5hDb|ft-F9(MacrqTb@3ydb}#nghYt~IAI0PA&bXpeUCijzq_ksKjz2t0wK>w zmdCq8Pd5B=_Sif$w3#nWG3N%a3gZ=DnXK#%1e@)ahT!2})?1iI(8ik^2s;!E+p`^u z%?2Yn?}#fIxT+-S2i-NvF{CE+Z5o}zmRK!(^@&kE{9)Iot8oWDja^UO(jtFb%%wWD zu?%^3MN}R4su}4sBs>yBr6lk8slFPx&Y}b()Sfz|1|0A;gXFJ}122F^-sA(^@R?lF6k^ zS9=l+&(*ZH-tc3%hI7s>PhENtIX+|%1`Mj#`=U(4Mt%5#6 z!fmUQ7rH!WZq`dE(e;Qvj)@wm=p{c^qUdDqm4{qWmPC>A`?mWBr{Z!Z8Ypbo^Y z6~2`O=>Vl1JM2=cT`u2TkK@Lf+D`PQdw;TSk>JFeMQ(|@5{k)qlA;qbHoq4YBfPnI zpkyu^^E0xl+awhWyy^%z+c@xjx+l20(`35*p7NP;$dbCPlu@&(RORwY6t}PM=CLTj z`lbiz=fvmZd_`x6{bIb8JL>8+U7ibT+x+_q zl$(;>(Q-A*-+$#nSn!nwWVD^$GXe-Rp5}ea{?knLxW@XF1!H5($~~bxhgYSZw88)F zbJ^Vo=m=^O{$%W&ZWVU){**4_&6+G`q767Bgx}Fj}ri3YZ7Np+G?n(N@lKMIOD{EE^Kf};c2W%)hx)fOAffwHgi}=FNQRM>f zBbi~~0n}Z~WDDikG+WjAxSELU>v+`e%~+l_{lWoOuD@WQB2%{e{t4Z^x76I{+Pxhg zLi>_4C-R3qlR;cF&y6oooM<|K{IYE=Z0&BJ%F=KbkBoZU zeV4-YW>zx74NB?fNmR~*@!O+Cz36HVk8Y58?|MC9EmU5zlwRF0D=Wr|%gBCwcHuuZ z-oxK+`BoT~TB!7{!*iUAR+B{NKR-wG0gIJ%>SI2K&R_0Is)u@YY1HUFVSKiE#V%mEErWQ@`?kTd}7dyA@&ckt&sJx;9%|u-Y+fl??p~ey} z{N9frgSpO86ke-o?Z=j_@$8-J{&FcQgSz~ro{RRd+|)iPjj_<(bAl@w4eKC-ubp^c z>W96qRr5O--{bXQW!KVmoheOh-$o}>=WUGs`uzKq_)5K71%H{`rc$1e%;a-C_hny^ za9d)SMMYkg$Ul>-`&;die80~V+~JC-IvOibU;_w$R@dSODi^%=V>0lyP*sE$V%w+R zfB8;tN3Uex^e9z!!C*_gdWBlMD7t&o@qzO3h_b40iHL~U^n@>L{-B~|6^I?LS$t+q z+t411;*)iEiwD`yQMnOkNq(Fg^Rj$+zf^&+`0#Ny8Z#;Nn@0d(rU$X>>hC!wdVZDa z^kw;!rL*FF^B4!nc;5xxpDXdoPv%of75IoxZuKHy_b+6;2j%dubbb<4(S5vp>YDxD zZ>3xMOis-;5nK8W;WIW^UKSS`TmXgRpF0SkALTykA~?R zZ~x6$x^Tj6Kw0a_QDQG04q9UrNnvKgJ;^3{tz`1La|S}~&G_dmvXU5ZijKq?G5n!o zVofB`;*Ckt-(3jE7y4TOrT!ct>kV! zJu>gWMP6p#l?fb(TDs^1f*_%ELe{gYDx--q1&_ z!bQIBU0ZfOCQt6fBqut4tTvL-pz60Z0qoy}z(C69IYJCza^=rpRi`&&=f9|@&0EAB zxE_jrbjNt>s>pqh`y-{wzRNp*Cr6n7SLy2Kb%GH4JO`Sb_Uh>VZ~toF6`)uLN|y%N z5y1HX%1hi^I>OL=^6cCtRdkg*F>Yg?q_-zhWo{U>rLO2g$SpJ z)(!W0+m7%NR;JXE-ffS$FX9g9iaS;}1rfH)>2%JMk*JgA*<}D#MK)IPMQndBIbkE4 z!XCXtQp!f7e$+skU#aun0k{)*o336j5}Y1d5;R!J+OFts#88!0)$*GqW?zCthQ@bk z(aH%n)bmI9UB*vck7eTVQcvs$kFb7C&2J9;`1j1ZOk0<#Zy&e$G+puv6`C{3zx^csYmhx;*)Xu1}-i*^j299v-Y#$4X=% zr&wIC+B3Xv*3EU`Ku|7Zm#=&?fIZeJj7IlA)1hhNH?xUM5-a7%M@8MR+XmRv4ZgeB z#4E|p#hd~41KJj~TW?=lKeY9@ad@hS=1Tcp76tOu61{?ffw7~K=>1m_0Z`Yk%+W+? zQ?d3kvJ;u*SUcX2XAScy3CRmT`I7##C{fqdsLX3$OMPD#@@tn=JUp$y+eaLzN!RWg z4A4KcZFrXK<}MzL@bm9Jb&CBj28sHleWI15Jou(uR=DhbZB|g}nuO`a9o7&kN*?eA z!Y*KE=dr9Pt?$9D|#1wgy|i3r({Kg17%8+PzYS`*BIEGs&itL4v#1sVBv&)aS`BYO=bJfu}4Q ze74nDUruk;!1|W~{F)miePb$I+?(b(*}YD6w@+cT=J(>_@hP71n(vWl&qw26PqU*H zYJ?xEfP`vqYKSW?0A_<1f;fWGo`Ar_q-U=K=X2y4e~aY=GHP{W)gV1Kdqrqafn$-t z!Wt&sUWGInP~P$HqW+)zm<9W)ryqOe-ucs{l5?_zw}~uDLl8$5ldsDVsq{XRp-Mk zE~#H5z1kbs7+OX|C6VZ{LvNyK_MW55C)S!pH&WR7-ZQhDU#;2RGQ67zq&+$EuNHwQ z{h<}?QN(X&8CT|db~9x@Qx27-`H4JVyue9w{U>MyW?BV`fmn>So^r(LvNL;E;d6+w zQqvlvJ*!#GAgAAJX{@iehVK&SbqJu2ETJ70UBNk!u?#ratO+i?!qdDB5e+(y<~3=n z!vGP*@6VZNpD--UZ}(OqY_Nj1c2MqsOTcN)Q%TfnjOObeEDL*;10NG{q@)={JJ`4# zpdLcey({lgPV%g^URes%N+4vd14d(L+KaR$ffaKZMZhr43fdmTT3atZ+gm$4$(%vj zN&?YMNNQcA{so(U1%6kGDF{!{s>;{rL`OU>(353i+VFLD=(h+L18d!0M(NHFRA3#d zf7zpr^>8a5*Sp#&a(Lv_i&eQ2^(H(?43X7SvoCfmOQt9_zmOiBr_?1$Sii+1eh^jTDr!p#ea{m9s-uAi7iGG%F< zI*DH8S7kpMo_s^4fkUM$XgdyI|DI5sCkhqn3mQc3)=*7s^qG(rQBDh|v$~y0`S?QJ zjwqxtFoq z)+8mJ(l#9`zA=8FHhOEH5xzTKwLU{M&a&F)fCT59iisuq-!e{}PUEDB-f}kJ=M~xd zf&gPd01`DkxL6WH>2uuje85xc?EIZ{Om7#3FWAJhGfHoGYs+D@&-(t~5liLTy!Me> zBnvj!$E(3YX@1A^sStstE{36&A`3S&`|ywomq$```8OtRF3pAp(V4)hmJ4xZj0q6K z{I3%lEJ8C%qByj`_Y6TzK&~--VyyRobdvglY2Dj}&bha_&si+23Ly{?5XaN&V}3;{ z+gsIM`!Nj4fPmc*hx;GYooTT?t7Bo1stZB*d%RPPN7|yIr_<-Lnroc-rH;<-L6#m5 z+Qy$PL$NfssNt3ui*V8<25W`k-MHxm!l4-IX8j^2?-O=uuNgO)tU*_#GY-r<;-jzW z)cmPa30;#dp%JP__WpA5Sy7I-IK{x441cWX&RZtdM+^q4C`(SxjfvGJN_`Qn`L3vK z^iCfyYFV*{)@`RTuE+M$t~QVERVYQm$oEzFKP`mbraAr;`Li)!w+A1{2W_T;0Z3qV z13`C6oUc~YYd85rEA?P5<|=!rvlN=#u%&rwe8qQx$j?7iq4$TRkL#;3X(nUA^*59T zuOp$4miPfn82COIwEhtgjil4je=lSny70|79W!+D4EuA@uzc;wJO63V*12wcUvwSJ z|Egf%`XIOjE;h$3UX%eaE>?g`wyt7EAU9G$UJ~mXmbN9fsm;qwEAO*bQO-#WisOx> zGB@d8^`X4|g?6Yk%+#~@5+8ZD=y2aF=s7gPWgi6#wl?eT-OYEC@6H+jB}S9^ETeGa z&;;My&jDl(^>H5&k0IlDMRnih3o?kT#+7#l3N1y zWHW>@e?f~&LslQ9<$0TSna<$kI39ycUo1rTzh)-wKRew!74Sh9LM@mkNEt2{U(T^n zQa5rFdN<(aRXDjAUy17c5L%y0Cm-keUemM^7EB0RnYXm3c|oDFS;U@trbINc+4pkb zwAGdprZHZyeTcR$)VdpOE%;;i$u4_bzSnu~CRXwzvR~{S5S@FF3S6WE3~=JpCN3Tq z`jbM^FD%Tcwm2GjQC61S0V_LwV)bt|Z7Z?IKX)q1ZNCgISkjpX1<{y89UJ%H>~?)H zm&gYGolQR}51D8g*$7ndedD+Xb#6mlz^LSB3}SU5vO)GVZ$7cBNm`1uq4KJ}8|3XH zyT!Df$^9h(n>DATyiu^PNZ5wfAAl)uTmXQ3)5C)}EuPXQsJ(hAiAfZcfI6;<(T}5C z9&N7h9ZLn%Z|lou_!I1>dy6*s=+MJIr@dRYi$J(=NqHo@Qp#!i-Qd|@9d~`%T~r?w zs&wG-JbWsd{1z;Q`Rl=3iXuIcQ6iCY z=neto4;_oF7g=vh$I$O*QUbLh{RT8>a-z3O2eQe-O!1|TVj?61vQomae4Q`iXA8ae z|3ty~XQreWs0LrPj zRIxuv%ReBU*givT9fJN+HRe3pHC(ys-0P=O!#8*P>tOF69>d}@qd^ayd9%|$6#^xh zfYU_|4|&lVOGuB~dz6}p7~)IMM7aFvUz%IvWqUkmDLqYrVw#EadRx`l#v8_rKKs{e z<4q!{7V}bfv6h7H4|Xg=zh6PcC^{-~N*j$+C@8eQK8w>(I1Akxxfx;KaYHV0DE9i< ziv$I!-Sd&8K?#rhLOKF;x`umZMaj;Fa8)Rg$_nNMtC&=I4}1tOq7Rn{cmo6adm!gB zqG@jfWU`vM`sgXU>Gw58QS+?np5_1tf+L*yk!u$OUt4Sj!s4V6=6OE48g-a6oZgxaSy3NIj;9sGaOfcx`_N%Z&l(=EeOwpNT zD{uU$5%VyfzEis&Q(E*VC>q*>UNJHciPO4&i7(}vnm2>~ZUVl)s7w9HxOw}uDuBH6 zeIq_(7F$er+tP~{-gy>WxhJRR(K4zU3^`a?9G7zZ|6Twg@ZT{8J4`rfJAz^eT$(iq z6^nWEa06a-x4=OJ&G0SrhQI*M%U3C9bjhOBe=!?xy;f0KDeQvmQjMT zUw+rh{v7vaLD;m}QHdDK|9)YH9x}OGGDM6Tl+w}Yc_|e056XadCZ(t+0QHxOnk&~O zvSxeSDWEdnGGhp5vO8KS0t=+ij-Ui2mX)dkZbM|Bb{8dq+-gS~W;Y4t* zaAb5y`8SsI&m?2R2I?aQW3Q=*?D%VwdQD6|mIkM33Y@J)!>*b;?sSG6?KfBr4ouHH z|5U&(#X2VXRqmUl3fXwG{;ajQrc-_l+Dt6QZO1E0SP8&8`%3M!r;dtaWTokQI_zFT zPqwpfCg(mhZ(9)k0y{h8X=&ooamJYa+Jd6VlT& zu2!Sv)4ETPmHbkgaJz!$-DJc2vrug@{@mKMOSD*)N1w_O?q37)jWe#{Q80xq15_dd zoy`m`DdKbzM1exUV?3UTxUS|~^PZi{$CseIsYfK(y9qB3o_I=03%4Yzb`XV^|4wNO z@PU2dzJxX4Lpjk}tV9p+UsDT`0e~P1T^OR)FH5NI+oPWl#p}UroJ#O_QO%?5g*`Vv zoz8C#d&$HkGD93I?(Nym)3RW>!Omlx@q7E$ z@R6fh(3b^Q$A+L5lbwaxe!+Mv_4ct0WEyG&TjD+fR|7Tp@o3VYF_gMM00=)Jke(H- z{=de)JD%S$QKb+v@07{; zG9D_tCR>8lxxex@VsuIErVy)LnB%1f>b%Rm8E8YeDo1$dNS2>(=l5kZdOZ0G`ELvA zw4~VVfIamfwgEp2!xJUTm$Oje(SRE0zydV9`WRr@NN0^AV0!+ z_AyB%m5OlsekM1o!!`qv!{kz<-GSrUuYGXo9ITaWia2T$gjnUkZkYaV_aUvUW>gB? z$Rzxb9o<{zz1)L;K7~gpfGn$lV6MR$NIJz!|EYnixLR~(vAuM04fWVWP|8X)3Rk;Z z+!oKP)-7ePA_4*(H71nG+*t@!jxrdl<;xr4FBttQ2%Dxh6JiFy!<1;(>A9-<#i39k zd$K@&mOP~I{}A&SC^^cSJdI?VEUT+avk*96K3YBYc%yzc?oO#$1TIdPr2Y`XWENDb z!S6fl5t&f(;rZzSmLeCftj5`mN(;G?#+&Cb2o&o^0z1K78A{b4`6TjK9cvTU^s$YV zRhT^dZEhsh(1vh+LGsE30DI7}11NwafWb(so2SG>U8GQT?)m$1a24tJ?)AizgU1Yc z^1*)C#5QBm=+RZkBar(WaJ}+*tHU`6xSfQi62fE-s$9uzi|!<^RbDv>s;gi~^EqLc zCPxh2rF>4WA_smDHOYv-%p?VACR%lqr#xTz{n(p*hswV48f>XW^Kt(A18>JFF8ypq zV8{DS$4wBR<>jA~a9BLF>_5b4fUwu>S^|+&4Cu3riNjSYLk0W|{KEA=$lGMaoXIf7 zMgOLj?(a<9wQgJxXn-908VzD%pb%QgNmLJ$S$$JOU+ zi`jvz)!ZLv=l2Je3PAueT|V34UcYw}xL4t9TDDw}BS}oe58=!1^!Cbz-&XR{iFH|w z{VHTgF3luUm(2v^RDjYDDO`=`8!Tr@1U{3#xr79U<%;qfwpCi)_i}O&5 z;%dX^uB$ln9Jf!SeTaz@c)vwczKsvjh>g%w+z)3Z$?|(Ba+`T&Xr{hqn8XzXj&hyM zr}&oYS0YZ4;+*NfwLvs%2G_n`t-~}2`F^#hu3egV85zJ!_FHw!2klV2NSA6`S>qL1 zQhD21FN*PD)O~?o56XA%;{g0;muqOx&!5Q?6%YOMUzDvj-2!q?Z}93wLTeKS%zAGc zUfiqc4%vVJVKKIk*Voa!57!kP+jWFUHX0ydu$VI#=`M%6uK(k4TwS ziD2U#Z^^TKwOSfg6FJ`R1Z|~@y?DjGbNo(bOFtG7odUbc9igE7>gjXR@RX}0Cbn-! zH-$M?oO#|^@T9+qyKSheDD3F0l-y+GA$G0ob0oU$f*B6WOuV}j`!>4SIT++2kGr5TktCX(WY zZeMYFCzkbEpz*aQS}h+4W`0sA1?m_xvEx3-?YiD}-!I3fjC`318ku*$t=3E6WsC?` z;>2eA9#2skvjMl3SC6r&r@UPUmt5qc_v^d+H`5W}YO;~sckk0ydlP-Qz3!4EHe62j zE{C-aRtuw6(^3d%4Q(i0e8r0VjkM6W=my8RxI|3~urdj(Dsc?oVFp>+6=`HZxz367LF9x_?(%U z+tza#3qb{4`jjzn0l69#wDL1A1I_757bg2`3p*{*I(w140aP1vgI_Mz)=p34iU{7d zhdv>?7TbQ0KPWrK2&w@-YMZJ_&y3bfV~8+l0yUfcan2-_I$yZ~n)>l`FV&rlB_DX# znmf@{u=~Qcr>TqPt^KM`FiWmt4)!gn&UMx=K;wujVT|4;F9P&S&3i8g)V(sNVfL7~ z7_sZ#!u`YdhP~^~LcLJ@raS3CJO|b-z8i1d9q&G z%xFP>nKd?hF??AyA^8^pO#VMEfoePvDwU-%81($lfGjcEq=UllduCUf7K#;^RP)C>4N|IGwzVQ6E zS(u!$9QAU_Xm9J5vF)80HO`5Dk=C?2zR5^o+~v6GD4_e*NaH8>xl_5hz8*|p1XTH& zvXTWLZIENz1g8G6F^lxG@7^uF^i6j%HbsI^ah$AA&#XwY^S^}g@Go4TPE|SS`XGAL z+c!JJW)^bd(~2^+oc!MG3Zj}-612}~f9>)x!5|xMBy(N8NYj2*FR#`9jh0{zNCcl{ zl^*{p9{x}&%F)jbw}?^-${PE9MkWyTU;|owJ%MJo1uktke*VN!tu2cNHkYM&N%#BM z57j$V!J?N}#_=9{Bz!o>K58rVy}0n-iYJNxAxmPw?53; zD^Xq-nP%$Til(b&mh`VCP|ZrF&jd}pB)v+rPOV z#>CKj(;q?3+{EqKZ{z%c!kWpJkWeK@Z1$AZehq^{4-{s&c)WB?TPkZh6f3F-rq<7$ z%Aov*;b-l{X%v|X_^#YhLFke^%n}h9xCzd%eCm2W+fo5mWL zigSW$#9$v^WXDfrNE$ifNk;k3!l)w6H@U7mg-$j8o49!RHC3v*SJ6;M^-$NN)x)c^ z-)d#w)Z!)a)^eT`AZDi*x6>Yq!-zCzX@|g9(-e-G4AoZLE%zu#^e3d}_ZM+DV zS6+1|uLreFfm@UO(Lq|O?fEZrHG0vH;4XUQb3m(tFeb6QKgnibdPzS&n~;~?B6>a7;?Gv=HB_Rg%m-I7Z;wPW4l`zk|f2wd*EzsJKlqGYj62fET_2TSe z+gU8~r`}e7|JDnc3vy4uH#uFSws$9zpn>~o?6da#u=tc84&qV~t1PdI`L_^&iWID* zIvqbtqYQ|F`C%TfM&Qvc_C%=PAGn?Wj_U~>NV}Q19_)r{!1nB_KLZ7s+?TDBr1$jL z|6Jgj7A8UI%k{ptQx+hUer%uAf;7*tS^fFGU5kX{D#ZLh5z`0*1dbeo-TI~`LRs_> zL6Y-f-awx3t{y}>*v^a0Gvb79%9IQ=i%)^k8pz)Y*313 z@Sk1=7_sQS?x(`@8^zTDWc=Fd*-G-^s69%ryK7fJV&1Y4ruzZ?rX#jrFHV@TJ{|_0 zm(xgtUOWvsz6leVOt#P)uHt=_fd+(M$(8pnXI(7`w8%*xNku*H8{>=mvA!Mee_DJj zG+B9O+JI$K?_G8pHKQXdW^WpUJ&5L@0=WeHJrm6^RMk|`@udO^*)wz(TAxe||mzG}r>uTLO%GDwBQ6+)C6!1S>)p z_j-1VD(*F;FX4MmeYrMEIX#UIuKGp%Wj89j|mgFBmsVtxm!2;2o&n;5^^2gM2 zdiG4FE==q7Q7}6-JYv4c;@GBvq4I4mG%`d6)cp&=H@57gwbu%q5ZaBnm1!1>b5gW) zW(L$3PJ7&b9Qy8D#T}8L1>65u*r?)0ZNBIFow`W8G&iN8Z8QnI&7Rjrv6g`s@?r@O zmoJuZBWQ+;gPCW?w6t93<=!;-4-_(@=VrDHYDzHcblhs)FU>guvWWkIG62$fK{lqB zB-$dLZc>ix{&Q=9XXs4&d5LdrI)JdP(oI!>uYdEjEskjamPLrX?^FT*;KBK#eQ0yi zT?J3-X6-fpPW3H*X0>irJWpyeB?A-kPp1=QN*l5UiW}cAF zs+v_e5#}?AnP$=X4BXX%xPBYsC7Uiv2=-Fg3kU?K#P!=Xluwv&FaO;~+F(0<$d<<2FWI|;G?7Ra`~xf#Y^?wm%^r7)Z4U|P$X-)a*oQ5yP~PqYPR?yS z0CC2>q|~hH)dY4z{r|y>Q(0L5gt(T{Q%&E`>W25HN3dsWMdL0Rci4HweT4A=RD_+F z5CstI>>h0U1AI$~4mRxiI#;t^j+LTiQCrR0Bw9r^1vjPuCVBzy;Un2RsWo98aTNv9 zUWxw!8dc&z2>CUs5$X2g`xs1@QhYo-*df4+B ze|3G019VdmWW7fLG+H^@1yJ_t8rhzlp7r3*E&0Uj>FrR$0s;@Es@mz8V z4Vj6C_RCg-uVdtf%RnZRvUf)40t4t28|Bg_ErP7Zbbzw4yla{l0W>cGv2OMit&v)s zM4_&LN;B}B0vJd! z1Mp~u&yDWAvu}coHaT1S^NYLBLa*FQVFPs=J^Z}tPakMU>x+pn*75fnBC(z#`C)kR zgj2Dnd1-1y9WaZlvGLGtYv5qBR|E5xZ5eljd3cr3N2d1SX8Gp7ArK70w~9cN{1o(| z>uCiKELETN?#T(=;vluQLVu6~eWM>mF2#HN&7lqtX|A=OtXjlOnxUhR`>ifOsIij2 z!bJGl5Ck;z4Mz{`(-?9+WFCkyRX-(&CI~p~?m<;{@w82wh&X*Y5Darq6Sb+Inp}4? zp~OXch-tA?#b;A-%s|N%1iQ)dGA&taPi4edv%tZfC|?xY>oC^Ne41iDFU#F`98jRnxG4{j58WoO))Os$I?~**m6tW+Bs?!(KqdajW$KFWJh&Q zeSw?T5x%JH*D(X)0HF~;69mYXM$6sfBn;7A2vh@h#y%a)_8r&&6~<0A&s5n;Q<(oI zF=M`8@ZS@RzT2N|?WuZQ5E-8_?2>YY7mB|+s~W0cb2{@D^j9Fcr0!(Ipd3lC^(Y=w z5{>M`>zz;t9xwncm z6nnRi3GE&ZRv~6G$odoAbj=R?5$JJAMbQ>p1zlh9O}SNqiN{C-}*WLrZrQ zH7Kv#<=Vhqs00I@fxSAqRTMYbdM+*xqBUt^2NfUJb-J9xvFUgFGwdMt>a#yj0;G{4 zCx=l3#aQLyPqd1EUk<%h0@vhCP*#zc3G^WJT* zMdkuQdb`5TA3%lpNtfUY!l^{__l3 z&hUZbVET?`CO?MD_o#)2C?^k;w+d7ifqGmX15g>>n8^7Ew^%a?#07ERdt+nW7K5A8 zKKV+h1>hjNNqJ?wdM;EUiqAfUHGA%q(ibK8B}9nrmvx!X)F0Tgt8 zkfYvFT6exd^a^Ba3}ae_2TXsVl&bn4-PEI%zyogacM6m||6akz2oRsqYG3aCaYC|K z0%KAlo@zA0&=RNMy#v>5;skZ$88uNev`>hc_3p_G^<4#A1>!p@EY0wf$mdn`GJ2>v zC31vhiY0%TSab1&Up>aj+bSsOf8wcxr!VSMqEK&sXh-f04AM*2*^Gr;CVGkHzQmxq z9`NR3>%P)-|Jr;2nHRuE8%Si2-6;vGE^SB30~fCKl{R;0T1Ta&XzsbWkxyOCUtU@| z0F~bQ&Qj?3A6`AiZJL&1j!olprk_p7imS+}OByHOl>;v+>EE*z8)iEU;D!WV2gwh;o}#$(S3_ z7|6@HMpzYPoPiEM)W}wd-o3M`Z??~`?CW8aBv2{MmACB9_|lyJPY%d&KU|J>IaoS6 zvh2X}T;S?g-~?p-K>)!dzx>^w1wo2OVPj*(vJ<_-Xh#4>+E%b-*<8JOVRfO$jS`G8jn6w3mWha2(Mf-NBPKJ_=uv&bHLZ_vyK#g zOL-5|L|JWoQ&zrM#+=phb9>!TR3b;NdR*Uce@CKR(4|&N1Y}b^$uHRdV(`Ct+p?3s zqVb9!5yw10q0}CYVJ46XZQmU0c*fgOcu-M4VJMX>YnAUS>T`SMqo~R%jNbxU(E+ZjtY|(^l7qozv-S5+t2;&sQPr@m?G z{;DY6P%z_EOeHhD%jen6LFt}@MRL0#@sO&c*7QDjIa<~Rw>Igt)qz&e@fghiRJ-m! z&%4kTjFAi&C~=m?>vcly#tDO|7b^V3-PhcOx+RriKp|2?SLB+YjZlba)CsBnuo&N$ zBd=>pQj9+OOmU*Ki6q!D_?7#(VG9qU+qfsnraJwImb9=V>gTHX;Eam1eX~I~jW&go z9%!TYB=<>Oz(~<+yec1Ycg1gOB_DPWD93yLLF*Ksi7Zr!3;bRiwne_AGmff zT0(z zqB)T_K_kGIDN+nxg?t+)NyE-OFVs(fhMkKjBg1${u7A(3KVYVAdwc5h_^kCy?d~BD znoSrN&wBPQ3CcSN!V2zeqf`70$Ubj2cu(5dC3vB zEMzN9W);8=$KQy#$m0ODhMH`8yur%UM2)p;=sM!QX0ap5VcHQFYwZek_=~g(m zjKaIv1+J6Kp7bsx?skTMt#TKOc(=j&fU?QBZv%-mX4%s)NTh5A8&7x3fs?JL>%558 zC4?rJ83{HLe*(?I4kVO)BIrE*j5eHU`P)0snp6~O@onC3527^cg7J2gP>VG<)mFAT zd)G>MYIw&c4G1Xk^LcT4MYO?sb((YDipjO1hhB)B6JF??F%3+SvM1@Dwyp)TA5NU4yT5&4 zEHH<1mC4MWV-=`bi~C^uZVJlU!usUFeG1B)>irR#!<(!Y*}w6sOqzceQGgr*%n=X1 zcN#%c_9k1&ytIC1h82!JJZR>9r;MUg{^NuEg6V1qh@sJZ5p`pX+_?Mu&%H^YnNT>_ zIGoa?cD`m~hM}mF_~tZS(t>a!4$oc#7mP#+{W#KIAA+f*_7SCj~1e;ucs<2hb}oJ>FIRbwaH~CG&=FwwJ<0Q|AE&&3VPQFs2WlW#mWK=-uZw@I&sz$_%|Lea(YC%iCqMyb%AE zZTujd3|}3g)p&UarxOz~`lR$Xz9s{{=+1z?}Cfz6P9nzR> z!7gSZl(Xg6)G`UbJ@BBxH>AD&yH7pLWdb(nT&+c-R7%oeHRo&K!ru3_0~ zlfkLR*(7EzfyQ{uYI<&bCiLG+Yyb@6AEh#83L#FZ? zHW8fUO7)44B^_3M_gmq);^nOYfe`azfjxe?`+Y(dcIL2sWM& zl@*%LP5@Wy>3*&pBAF6>(=MWUV5GGw=}#|1D>P8Y7k(ORM)mRj)WFcm$v0EvBj92( zWB%_x$ zdkP@o2+QRG$vsJ%_1Hc*7_gb5dX^t@CcYbfVythC%fBETlk~K^9$3EFB?A`JV@%s? z_*|j=P84w$CB4w@bZHCxFkc8CL0%PY@?L}R1PEP9IfWU)PG1|mRp3&ms~W0M*#Oea zwabHgc;zON2OY?E2CxsfQG7?|#|p@8$dIgvFtuBg*c2UhkWpKRA5JIg`Kc^iQjD^wIL~wGln6M9?7e4|66T@5(5id^N6al4*?VpygkpZ zM^KQZoR4X4?!tA3w$|bTOD(3%bN8;vOsBFP1xipGuOfgu-KTgbtPrN_E``LP2U)I# z*OS5vclN?FZn4t+?hffS=AI}Uh?7u@Oy`NpbkAi-6dVRKb>pb9QG)msbdWx!&|Uw* zKFE!yrE941v~!$K@w&q0_>8XC@b{51)yoa^K&v|J^9)iLf8YQsroKqS#!_&=zR~N? z%%Eq2{heHHw0C061Ch(ZmX;UVpY1BI_tUI4wZ3y(7(FSrzkpb5$uoCbHY#8 z?ij4{N;`u%V}Uk!ahDqy;p^+I=$nc6d7oow0zMgbf)sX6q*o^uie0np1Fo1~!bE!C z9Q_90Wm?AFsRSO_gewh};pjY>P;UARL-D5RU1(xms{z}_oYc2o0cf^BpGTLj676lI zNK^z_eMX}o4vatG5cb7^8hr4bJ$F8=W0+t){_i_q@}MO2#pUc*p^fnR5{ z!5vhZ`}-Q|VJEmhP@ed262Ay7o|@)nssS8r{%}&6xnp6v6rmRLDDTYB5}KqN^=hIN zF*ZxtH`J%8=52Ag54FQWXyQ?+#ar`uqz}Vi|H)>G#1BmWX$!VEIbY1Y%vXaF!>;(L zK?BDjLUy(aybjh&$15D_m}spn7=CeiWj`!P}?qvM4rCJ$zjD1@Xly z@&Ishn38%pB8U*-N5x2p0c@x(t^}O0TPMN<(p0+@g8zw{$R_AoHm{r`9wbYVg)h6T zL(Wa!d@+@8mouQ6|G}LO+8e!6f3>0B6aXWpD652reHFEWw=f*mH;{xb)?V4E@=S=Kz}m%M9M` zy$V;7l06?tYOq*DiV2N4OHx%VX|1f=)=y`RJW;inb){_4>B}F!NT96ZQ|TWEi=sH1dD`P62>aWmZ>{Pj2Z8sTv$5@LC_l-KHOslwK6rc@*qz(?HL>L& zEv4eAQtG^lfe)d<$!#2h&$ulcQFRc=D)2xyx_7(PT=7iUTGqd~_Kium-E7eu^hIv`g=5x7P zN{WZL)50&tn$&Ud*S30It~Bv;^JX^BU#N3<&5!wf5XVoKUMNIR7}8t$em_8KQ%k0ujyq1D-9F(3ND3g#HXj?M1;f_~uf4 zFKYODQkO{+`3}rG7xwTsqG$HNG=P}(%-UeE!TxOXqrcjuzB5js! zp?KDT#t);@f98cC1pT~Fe@;jTrDt*%u42kJ` zdfpKSK7~Cyn(DVoEehK%x=|g_F?MPd_`#Wu>MKOkZ=E)$D$-SqOQiMK^b6b^+IG zJ_!0mm()ZnEws$S;0re(E!HiK?*nWSA0oPl357XFVp#`n(`xfZkoK?D_3rV>n6aob zfkFutof4~%C8ROUo82=Rsac6dbHiZW>_WaTSo(%(H`t3HT`2kdpjRyclR>VqG=m9a z=n1{FBkLB&l@w|y+LlBE(zKhB7BXAP${_08A*~$q$IupXaj1o(cn6q<0(ZlpwEbIL zF%f%~fHYroP$YQw$SaCyCUA!CN4y|X+;p(F4`EIJb1hC%Rr9$wjy?f@C8WVO(DkUN zm2I=4q8o{6XFFOMMP_ef?hnF80XvBx;b8QY6csXLJRYIGPDm~c|C6XQaF_6|Tu*;D zG%+^bDux74fm>G27nDEHznz9BZ$2H z%lBolol-PTPlNrARG7vO5K)RlrmhJ^x3MnY&t79&8Jt1CnF=X=)mc9Z^KmjR>k-M$ zgtF{ONIXASeGA#&<~}F8|7J{i$q8*wm2|-LgIrP*sX;9mZhS8%g|CHnUiy*4nP>*) z*m{skW17Wxk5zm!;aW%xPxBx#$EtG062SI z3+}mZ(oFfXQNR1Ke$Y6@^XJF!$L+!{cdIOBkb4IjpR7?5Tg01YJ8G})A+LW>oaXd( zdP`=HtmWx$Xw(c_%Cy$wl-YS)FGNK*?XQV3qm zPbi+exQ(5smj>;pTFJs%JL*HNHK#64tNA{kDoBMLt#54`LD`dqBR)p7&e~WvFelYA zu&b5+2sLnco&x&*?nLw6Y*rgY&etd3uEg351ca6OI4@%Wsc1QSQ>E_<3S&dJLRRp{ zeWgA?Qt585$^ufZ74f(gA&x(&jQsQEismZfR~lH6>u|#;SeW7{hP0!EsDq@3*mZg2 zY#6e`tBOjM6@OO#G;pqD)`mv^loAMOB~vm~O}mO80MI+?d8MVfJuXc=`@<$benc7o zHvn{u0i6EUZyIJbrl+CvG+(bLOOBgfj>n@C{37f=Yuv6wgy*Y#MQ}W%w?qq~d}Ibe zToTSPB(y-DgomlbQCAlXaQp%4!bS5(s%ukS8ap zVLFq);b~^>*QrLP_>zwKlBT3aQq*&Xc&y_OzAEi@HwG}042yJ2zhiAJUY9T4n0e=t z6@YJH>oM+}`{;eg_-oE%+XBKwVntwWo@;-JnpWtg05M}%UsdGoWB2;Lslxu=wgQ?S4HS?o9u0;e)5TVS+()OgXEaE`^C>kXgW zt0Pcok}dnLvC$sBl^)!^45g*~j3#CW=~W*sN1xSbCHE$Y*c-gA zFS#?DF0{8b=5+Hlth0SQK?p=PYfL(I9ag|aDn<78#=>o48Ct0)t(B%#^=RIH`R;(4 z%Ue3+lm2GM3u7&BUfuitYFnxP9*^M-@^ZI#Z+=62@?D*5HopHlKQaY27n@ONz(Tef#mHjTf6M>I25mGyO$*4Q*^yV0aY3?uj@(sJVc2V+D-7XP3c!KTp z#AaZ5p8+bXraJ*U@~^N)yHdv)Qilptd_fbRJflxZ&JXw4!fqo>g(l&VI(BApd;#_Q zj{F)eiVCRGx$TP7?+tAkGS{a#OZzXDiMzY{I8Q zN$ANAydV`YS~4P!sKWtV!SRF3wvdB9lZllxGG**w?0yCOP-VMz31P`x)-DlfLQmV* z_#ye@=rlnEgX=-KHeKa79GG*7(umti^gO-)xoGwk4QRzukA9ZTJy%ytlBqk9LUH_s zJyy%o^2Pd8^vwCWK^JS{HTVeon;*!0zMUBF-Tu{1Omj5ESRIP3^4J-x3X537HTFVG zQV};7=*Ik40U^My3(ANsTbiV`9@l3x99CZsvZpAi2`u(;UdQ=Vw1>dUD|hU<4+{9S zdm2YDzy|31-uh%wU7dv3!9mvcKDzN@IP(lgqH#O5sQ0pu#~DPS(D;=|T8_jy88)vg zHSo(%&5}bcbmbX@FgUXs-=_j9eXmurJuCm=wcTg<t^ot_lsJGlo$7RZJV!PA1$34TNUguLw{ETvB|;^qr_q*{(=otxS1%6-8b_u9 z!oJS2r9xY}x;`ZtrqljjtJBB2Fydf_E99F>etmqznn5esyxlTjyGil_%2yFOMECST zW|`^tHzhF`x^UriW5Sn`O0|^;5|V~gm)u>T3B`7cLrt|dZ}nnVIlu)2UoU)UkS_@I<|6W z1v8MfxVTV7?|n?h{CP4d$&;j{jnj0wS5UNdfjKV#4h6J}_t-TkHCCuOKmrsF9N=7j zqB@UP>iWf89EyQet%TXS3=Y1Rj&l!Ma>kby7%m5#Qp6%O7bZ{h#x^q-d7Zr=@@=V6 zMTgNeAah#j_?N1Jz*?nUVW&J3hp=G^Se2)Rir+bIcd=6k`E89GuI~z4c6hiE@-D5j zxuNB`x9jS}V=GgL{0Nd|=aeyGDGgNj3_|~xd0Kl~WUxxsIbE&XT;hYmt|ZE|AqGWz zlJ8KR0eypubJLE@t=o{4Z;o{!W9nTU{@>*DF)p0vy6V|&ZH>}UCx?wQMeIw_o4D!Y zbG?D19pbb@rgz%FkeS8$nih|L6x`(dPJU>}{M?lPSe6JxZz9AvU@!*%HNAN8KsEim zq@?n4B}`2BrsLeNa=Sr|L9dUC`9%={YHt_6A9M)`;yOx{1tv}z34Bf$LO9(;K+;js zNem!tCTV9mV@NL11WH|oT$HBA?rLgszS`uZ3a(#Q^ip4zQ-uzI;`_;ur!cFN3jrG^ zJ4bu_K$U6y5p~MP?8A%r2znG7_qF-?Yb)2Z0k$&8H|oQ#eYZ0Q*DZh_3NE`4iIxyo zS9@N*5)@oi`^v_|U1c<3y~<)aP3CzCi#vCC_)Gteq^jh4W2$`X177iQcu@In2xaC& z)Kl|6@wG);?WB)HK1gOvZOUZ=lB1xN2I+P#b3`6xDd=`zh0}SGz0@bc#ZZX;UYMRn z%xK6yyOn#;#hfZE>6t#r0h>6jypvPjP|1c)MbGWWUfo5f{)LP^<1gt1`^K4|xrLox zafmZ^zLje`G?%^%m~X=rZ(19h$Z;dE8Tyx@$|ctweke#UF9bY)UQQls0J;18{dgZE zcZERu)(y*KuK7+@2A*<4d+cGzDXe2zCA#R^xqP31 z1Y@w|#HrC1)8Z>8#t4DugCP3RZb{Sbwp0aIBpY`c3v}rNxNb|+Ovcy#?cLKCCp0t# z3DyjXtSRnQ(l)yHLhJQ~ZXJ58r(Hh! zEIuoW1~fr6$R2t0;Eg07r|97@zkQ`FNyjOP9FeL{cj(9k&F9q830<*?^aEodm3!&# z9XDAM%PhoyS5>EfD)+cyIsKFB{-nJbi{8F{QkA{f7<*!`0}uO~>rQcs8ou-TLosD4 z0b4EJyY>4oz30naav#o0nanS=&I{l|pd&B3943}PHMmZvs0SpBO1QwS z*kKx$xC6c81*AWN8XLp0isVhh2uBgYlLK$Lm&lp1t25JKe@}QIvQ9gZ++_8iftg2jxccrFNDu9GpZpLFDf(pUz?T zYshk!YOG8VrnrLf#S&4*Q1eQ}I4CH-!|PYX4|=#eua+z+V6`eM!cQYyyW7TVvL%?r z)089z>tTZ=gPdSVCi;`WM?!~Vo6^0KR4C%5-rbqCY&qf*Gj$~HK>qa>Q!Eki`}TVu zIS!fZ)0NWZ&O2N4H0myvy@QLAjo-jxA+t8}pCC&Keay>=A1enWWj2s*^tvTT;bVbU zYo~Mcx<-H}Riq)2BmN_9>OMR{1V50d{S3VRtNphYAdD!zI}zXl)AG}rna)FXy1Mai zbnqoFaejO;)UJegO6v2tpl8OGoo*3by!ylgfE!n?PUl4){St3U*nLr$Hq&VO0Q)Kj zyyRxS8@OnM)w8YRfr_spg?F^R?Ys2bO$~2`^N>u)|NWs15N%pbAHejW4pF!#4A3RD zqrzcldJfO)3IoNzb%&dn$8=>MCZ4oG1mjv_Xh41zht$#JawG?vS~M>aei1XP z&385;mYc@oiw@)aq~j>lSoS?rm>v(;?01Bse;d$y({g}TuM3<5*$|?jiy)%?u)Wic zUo#yoCE?2*2j3*8_JxZDh`Z<6PWULutA_78s}BMSIZNC5Ov^4gO&a?7u?Wm>hC6kho0fBzex zQ)0^X5b!%u8d|iG2!D=@<-kYcGj(L ztppFX2Jnj{l$kT0^t~Yx7o1vL!N4H8`-5Sr&Y|m#+IGWTHff`2b^WS`Cqr>clQS-ncB`8(2=t=&6|11UwlvD;~s5~9lbl(96H~; z^<#RYa_W9-Vj?+_e3SHb`}@Y8UwQZKt&VC%kzhz|R9M2+;*?K*(ej&@(=W&Qua}jt zUOuhNKYtw6IQc|$*{^@oByWzw9*kFs{Quwnzpgm{yyDR^eBNZG73Oe9?TkA0 z_Vv5)g2v-k%HLgGdfqmp_gL0yP6{{6s*Wb4I>;QXU%t$Vq)9M%CzZ%y1y$TLE-D2F z$klAUH}@X1PK_+D&Da^WSKcVk*}f&n($amrA@1>*IjzZqXd22NqgK*IW_!DeIiqzq zV}oZubEW!-VY?M&>jG_0uloW`r@wpFQiEO5h6xj|S6{+h%N29n9(poSYGRuwMojs! zM(2WTr9)#a@+9G{RHd@NH>g%OHdZ%aL_J$|*`QQbk)D#^V)>|~--JG;R% zX!7f|-9OpfN9P7yw00jsbK6sY2|mz@pV5>{unM|)d5B=VF85@~ftxE0;o5uOopjIE zic@LsNK*6D2p!%g5xdhNJ0!V=y{y69Z}x=#Y+B~Q{2~~zU2+PfA=C% z+Ea_Kk0vliyCi5i3!EdAuC=NSbuKaPMjGRoMhnFt=+QdQ8<^c!Nqe}SsRk0ok9v*P zH9bzMv%1`zVe>S&IsH)$t$A}-qJgRer`}g}sQA%g@$`|V$8|0EVZx$nQP4=a3s()9Q03*+E_soExku`f&pi+gs=e#ZTq zeg3pwe{D_BWijZrJQjb*sC{PNz+v9b5R97!=dSBLuHGW6d3S(hy%D?m*oP|Rk%*&W zw1|Aj-7<=2k@Rrv5Giug&_O%)Ath4eGgw8?pDK;zm~s!BXJ6k)w2wz)r%^QVnQC@T z0P&8LCuueuAvTGK!i#`R#!hOG$hbJV^XXHyslyAbnLq3Gc}2SlP91-MgsnIBh< z>#V$yzEXlfUb6ZV#BLV84*MJ5?%>)Z?h5643ez0VQIB2!QB- zdb{E{nCgb|zjWhhE{Cy2lsvTvj2h9jp(W~Uru^eFL6b}0wi}vdmB01Py16u*!n@kB z^u&EnOx8n*RL3AaDm!uPbNZn@NN?T$S zJo)L?$+%18Bc#84XS8av9Jfsr#t!rs^!E0%jGZYqbddXE1+!?*4&}J)+9k)r8wD%H)M|uEs*bZ9%w*qX%7-Ag* zpu!i+@Q3UuG(%jUbI#mMBjV59b;dW}Kh?eQ$}s&jjh%n<>VEOD_`dQ>`~|#dmLK1> z^{LS({wy1Ufu0TXNrkW`1gP|XGBC~EP=*!;+B0%;QiJ2|M`sG5llRdwVPE<$gPkQ3oTbj<*t(KRzh)+4~sxruAxb0>yIBX!FXS zlcp}!=w>qYu>xr^H~T6nZE`y?_tHBl=5c_Rgwoe6nfWrm%pbMMhVHs>arm=a?YLiziCK;JuW zo|MU^1Vya*UAD~rsP6v9HPwhS==yQ;)p9C+@XXz*OsP@fNEzSK!X1m~GA= zzPnAaNtIdu6qHneo0{;mI~O5;)@%9#rBMMhajxk|4d;#vyC`S6G1;h{a`|Ksrf1gX zI4An!%2eKht8_$#m6N7ce9b9(n z@NRRv&W>HydnU!o?h!6??`82ALjg&5vpQ=(+r8FZ7Py`_5HP5Mi}I5rPX3X}7KGm~ z<5Pl&{<$jT>Jvoj5Nv;kNWE->;$&Eats&-P#iZ$Nag#C&mU1EL=fnIKHO5o(E$o}w=u>;+l6=&kFBc4X#Z)Q@EP*$9g-TN3l) z1zfDkWl+v0D(KLx?ZTS{DHq+OH!KRc#`$z2HH&I~I5BPPTVv{EY z?ZKIwmx2S=a65O3BMdoG`j2S}^1*AqK@r46irrvIZ(F0| zqKTXQV*#wo1u4TJd>e{dpBIXTEs)o{HPQKJNT(~@KMC94Cx)6~H^4B&6q@mkr)<{c zh^~KUvX0jC$p#kL&Wl|iew4<(^5^kB&Nio|!lIR$LxI2Gv{6}_>VcERx(O>>P{&2nPxrU2DM*fc5JGqNfViPlzEQvh!kM2pCo3jLy zFQfRcMydsOb%`d`Xxvt6ygEw*E4x`hrw{{cxhwt(2DbkGI%%GI=)X+3|GRJkAA^b> z`Dl0@TAOg|7rBp{kRMqK_Nt5+YBih)LD*9yPBTfc6X7SrJ0`H|H$`tEJU&TB>+ECE z{+t=un7?u~4N{|ujI_mkM$p`UV{{)>sNy(0bFCi;f1Op;;g>#p=2{{3kFY)#`b=Ve z5|Q0Xq6QnbO-7O5pO1QQ5fbzXgaVHr!n2Qti`GTB{M+Fif;rPm8$a)18*rWN+Pv~7 zWGPcR!lbV1do@)A??gr4sw2|a`?26;3DNP6a6yn^+vZB}bWt8Y{#}U0v89qhXi)Eg zJAd7eZsU(NI-}C=ae5;+Plxs_m}X)!D7NSA86xgoKUARzb(tgSyEU0=*pwAV)U^SY z+lMtSSMGiyM9LPPJ$?Ek?#(p*%Zzh}n5zt}6{y`=u|h@E>4(l%@TC(cERrkv-`_8PS6~S3o_p>*D(1vF zdumm8UD%ImrhpB(y&nWCV0x|*I`uEYeGY>DWkRgOTUnRZsnb_B1XnU@7T zxLY^YQDiF^4<61Ik;1=6eMoia79gaYAa{R5jc| ze*ao-c6DnA{9ia6_f}dCsc^P4w0ehH53`RZam_NYcCu7AWn!mz8$@>)#l{F?OM7s( z)KazXcS6*zFqUF`CNx(Ge(V6UI~MD+zJ*ghA7i-2P<~;v)TFwH1iJ~4!$}FauSA8c zMZ6;eU>_wRMVus*XAST7!G{MJ5Wr5rIz4yBb9t-On#20Vo7E^@xLXhozKy*fgSG`i zo(+ffkn8&^!2u)8y-gVZATfEMxQ_RZJigXG6=_{Fv*By&yrilC=B7FGupiT#4&t7o zzwEVe-8y8Gk5>nqn$8g;8_7iqPYf*CR3&0 zZ^qb|Q6G?Q9aISd^AjbMVlj<=)B7fUbZr9sSS;kE48J!8%u1 zM3)%2;F67#VZODC@;NGe%4RE>044ybaHv&nLd=PMHi64^P&P!#ScEA+)Q5o~ncQv% zEi_W~Pz67McQ1sQ9sOFMTbmnqZ!PK_$8tCO0%^_m(+LHVJ`URZ9oE?k2U{>D6v)g! zUlGkl*ye{Pxe<^vKN$k&kVAm#G2&PC)6Za{#Fef6V+tZZkwR^0f^X;@I|1S&|B zof46qA~C%wVCe-gT7>WP2$7Dd(-%YFg5x619sNYmc5X#Ma>&o`nTpF~g`zOeo=OqE z)GG$Bvx6_GGPxgta|Y~E4&HCW-0r<(M+M-{Z&ZjnABTv7+Ys5RjwU6nT=+|R|L{=Lw8QYcie@4U6LaYgvn9me>_Fp`deUdD}aJ|9C`Z!EkuY>8AU_n zHfhBS&0N|cTyP1q?-us{B{*t~kZmtmz);oaXPn&4_`ont&>|EyS*dpCRfQZNo?3g} ztID04mY_KcQg-JUiQs+gu;$U=b0MluY8w(I`iE^~I>=;ydsdH}eg=74Fvnc^Gv4I_ zWT%E0DX-Z@(vk6XKgG%V82CULwC*0}DuSx-r=NZfE6NKgp4Ub0FX*BXCQ!47cyq@t zS&;p8F{9Hnf6C9UQ^l&`;M1HLw4&b3Tfaa7pAv<}{sihIQu`(36^__F0kDQ`@u>Y2 z&i}&J>=qg9j<-??7_c7b>u|5UPNd1#H)q{qXMSPZ1jNk<$`aonWNHwNN3f;Y+HGI? zTvQVtalK3QABzMVT2S1VNi6l9RKlw(ZJ;0{X=%oN?s@vs_o5Y>vazk&GR8RQffPCW z>Sk>BTNN_E7W~2acjJgXuJBa10JYJPe9;TMnYIRKA=~xkYK0r;kIR})O!1Ef|KzPy z7#sCRBwGObbCZl(Q<%9Ip+0?aR!s}q9s`2M9%62i+BO zi2i_#d>8RAP^8*W(9OE2kS3g03Klk9=oR*^HAHk;&H}+e_Kq&@&T&$^ZHa1|v@ZHxonCRgT#{)a$K34-m6d1WQ1V}n z&D~<|)E7?lTh4`#{7kTBo>VPJw5S)+-?BmWrX=&FwtxN}BJq(F%T^CPo`Jm@Yk*v@ zcthO2OSB0>l|h^Azl*LTeh8njzR9_4G(76)(D=cBsX<|Uj}y^m(@_ut>of* zB;^y>ODq_UL+-gkJ3y%l@XlKiQJqUYrOQ1XJMc8hPaf}vhYeN9=@QuPuVRQa+?;~j z$=?U%uJ8jLj8wd}9Cc@<0dQW2!}UWSSD zLd!&NLPKs&_=2;W^_@c=1M1nqg9=I$1HL~7a@m=0S6?Soot>LHq4)lU z`N&cVoWh{KF}OR}Jk1>387>S!WNt#G<%ck!;x*0a6gMx1k$Gcw*;w%%mH#_3iC7Q= ztnH%QzLJcc+<-|i-2GOn>6a6dk&hc0_r(G?P3{H=eLvM&H(j!kvrAWmkM2^$wmT$$ zIV`qZk2&rO_!&>w27b^jz^Zd3H~JBpy(s@hQVHl!tdy8@{`}xp6B$Qe4aAW0Ps{3L zGevFC4OpGW08%|FSn#Ku>ZDFjbUKcHYSY4$dTz?T(h2kVD;9{J=9wolMBY=D@&lGNX{YSAUmWbUowc+d6#juM#bQfA4JSW(PT3D$#HPz3e;C6$((zQ z3RpwTYX<0?HFGpt8>9d8zb6(3_N`nK*`vJ2RvbPBlNYL%!23XuASrE|Aes3-5hSV8 z^MYXwgFqgigj>Ol|)~nB**}%C} z_tSvnf`e>SncX;x+k2rrJ>kM2HS{z;2Yd(3fSDph+IyaUypuqss_>5!6)^Yy^>giF zqz}>33fb{-V-vN^6GHl=6a^NZm|dWumFtKqxPg-GnBKSY-Pbn^aKBCrL&z%^>i z%Ds!vE|=DywIDAqLZuhg`JzD`q;(Gc>}4DQE+^_&N~-6b6CVd%pYf9FtR@?i^#9=7 zqR`)>mPiwyN0qJD?>0alh((ZjeX6Y>HF%~1Pt*@R9FKmeH#TJufi zSq~4|8AOX4QdxPV0`Sc@aXL#l{V1?Omua?B7kr*VMJKTdZ?9n8^GepgZYOuHn=xJ{rm%VOnUTfIB|cF&$os5;OM!+EOc z10hoVOVzX^Tgk5;fcL4G&O&XB4zc43q_qSUxCofm{(MC*D_1a{{>|4rRyopQAe8gxtdPKyosDXy0w9`3?5H0(cex zh$5ii#+vH|&SPEfuD{6)h1h|O*bj{oaGoLVo;I%Zk{a4^fS(xXJ|03oS5(lCSJBg- zL4fZxhI&Pt^uG*tZ8B>+C@A0_*WmifM8^5@L4C|?WmAyVLp&(B1X(*QQ8mQ{zA9j4eA>hD;?GQRQLJ97n{4S^25BbHU$ z%(6S`>&Nct$#KN2CefP`?qpY7(|l;M?bSS``w`nLQ%N=L#TjwvCHjjS`$eolGcz05}&7F@7+JB+$h%Ig5=`xtR zmGZ`BHx;0x7-TyEoCeHx?iu}MihTXRJ6n~l;-}5|6_L=$$apKFeG*0B<8%hrtX0?W_PPjmwifXL7({%F9oU~X+m_xNpubQ0 zuh%DlWf&<>@8=n2@`O+E%(rpxe&|TO$IfhG4|EBbP?`EfEDSEpiOJMc0@r_;Urvsi zk!C049gtEgL}>0CtZ(~Sd1^6v{e=;Q3`WOD+FTWAgTlb7-7)ZIf~|K z-iy{X!dJFT?!-XT4V9v!3@7|%t{JEDu?1^j(@?Ianwha$97NQ|;@*W}-a+K>VyRuT zB`uoSzbEw-D^s9cL!FdOJq*dAeC?G=+sV}2M_mg$ zR7F2my?4fA){&{3Es3*2AU<)45j3!$JzX&a$6cEB%Zgl3>Z8qz^hL}{`HE8Fk}+a~ ztfwcMO#GF;*&VE=bS*O{R3@XHor0KkUPSN>XUt3^4MG?J!JSR{bw`^f?W>uQdQxnZ zX{LwOLYUXi0wX?~>L9Ql-D2jz;NrfYg2q2IK(m1W*vg-+BIpj{70In_O<&tuz!mA@ ztR+U~J5NflE{Y|7Rc~+ktr{T;nX^~jN&0T0`dIkpUYM&07Q1gMmBPz5%FNn$G3mLn zuj&U)BRO~K(lrmV{(OHvJK3|9J(B5X8@@VKB8a4YX{$Zc7CEAuH*iH@-7n>MMtBcq zzy={*uac=ol4bA)hehcGK`Ys&$-@XLgWY)xWJhv~#xVXr%)q(`&~6PWVL_!eGlt49 z^#XF%X0UGFeNom5^7t{TsTGZoiER+N z`O3B0yN5Cczc9&t4BCJ{-*`u3utE}Ksxi}^Oc8q+j(P6)GrsaUo|Rs{FgvoMeCJ)B zbj|l;b%;KiLp~lzJVj1ZwSJ~2Y=s|>e(T1UFN*rP#mtmdun4F*$_28yH9)(3g zju@Eg1k}5(fQ&7q-D2AvjbzJjsgN-ls;%E`toLS$o)z9HMEluJcp*J{VwIcOcKL*? z@6RhRW;v^d75&_Q=If!*S+=%m_`I+(B?6ynpJEz@uXN_0(98oL-B5&t$YF&o`Cu+; zQFBebtvx^@OzZ*uyt8k0%p`2LO|8Ic4r z(oEXFmxS$ym7=5jpR*?aeAaKHbs1oDF+9#}t3(D#gUlTLSmc*8Iz-CrzbN|5$4ppn zv)_7hHVS=|vqw=Gyjq02%*N{_uf)jx8sN#bVrxVY=%3cZdGhPCI|(2IMwjLow$A~R zI?CWpQWCCHI(}Zsuh$b`r2UD{ACDtSF}U-@yfgxV$BNvRng~q~jLv$BaAi^pnGi@3wjznD9>I^>?+g;kM$ zSG)XeBegHe;7(eVv%fM2LJ(OhfL=xtF3SN7!v2II6~7eX&hIvw>{c&@MqAxut1B#< z5oB7_wi44V$9%&q`>}i?sQxUw#b%YN7PS$^ypRxXGS3!K`#SMa1{MbIM9$OucL~_f zv}qvQRB)H349KED7|MPy1e0X|z^xA4V81HjZnJ2*z#ZGxKRbH0ku}_~$$w}Bqp>o; zeB78isQL++xr+6eY52>FwR0Y%&IEW*jK^-iwK|xk(rID!%{SDyiZm?o8TVh6H`1KB z5i5%WA92Ryx}=ENPxm4UHs%wK^`_Q-tP=8H?Nk~ek?H7%Gprwe4E2_152NF#k=gFn zLon1rgb)9wUlN8a@=*ysPJVS`kPFk%{1j--ABzd0_{G0` zrtY7&tm9T0_<6Cl#U~L|z--gi5fkH}lh~?Uidg>ZbFs5e4M@yuAjuXBUzal=HBFM# zEZ2_BFO++>6PxhhUi1g~(&~fi)JhY1=;%JUR1_rb0RF)L#2PIY1E|IS4hrvK*M6J| zwm9U`e1$ORm${lf+jgOJc}&hUVnukG5=y#RKa;s6R=xY?l8SM=O$={1YJ2GBV&R9G z&M8(5Y{SPo-j0JeC5gn^{z;eIvzF-f2Bg1(8Kw)O(7Xe8(t1SmPqo*U59yBeX{HGE zI!M@8!1L~O`gP5;;#CdK;#zRNI;!Rv1te}LkaxoOsIQmgPlj(v>;I1_qIglz4rSM= zf~HZR9}K8j(SS5rPq|r0J9;wv@Ti!KU$Ky8NKZ&@ew8VlWq6!kv?jKPz>6k`Z5Ckg zXH2<#&G6sv&P&zp2hUMG0~2jHPn)x1_HnZ8r1-McaXlUN*Z4JPM#{!u%+1jqGE4$o z=Z?wz&mzF?dtcFi1+}#GbrLjvbOiVYi>`=i>i^BAmoK5 zuxF9LDZXOc4DP(CxFPlFln4Y#=JLRfoUqzV7dv>Rlzm@AXNv-{pp22$45&;F;fP*3| zF8JVETDmI#VeX?@0>6=}9Fib5sgf)EzpJwrR@D7Td^My9#$cu|-^)6K2ZB35$_3zG z3Z>Pvv%dDwvMMGj``1n-w#ro6w_Qx`vp&-?p5e+h^6ihav^hZfOgZT)`QbyZ?8D4t z1Del2JuUHAT8Z;weTs)5Z^+}%)z~8zJ6N?R8&sJELjF3XBJ{|}&ZIT4NmPqWRy2Xe zt|Z*c5KHfxrhkfaH;$Y%?JM6w{c#gz?1EdX{;ks$GmUw2|M6`2PF(>anWTLSXZucj z74xklzdBeC>ko*YQfb@3;j6nqLJ$lB`Rr5y{4G-edAd9Yk7GqI8xKun#T0Vy?$8`u z+^o9r_-%e)Ae$3LdN+*u?c(tn(0sjw(T)Aaex0Yk*3f z7o9+m)NcYVZ&lR%FJ`-lhWZ{*=7jFq68>;Npr3G{=6AADF8%INBe0BT?V)!b!pu$- z6XDzK=|551tUb_XqW1!3^Z>+kj|bU5RY9)uNnn3U4s7@eqkj~EER0;?J4VARynB{= zKYK{=5^f!z9p))U&8u5H9;m#&+Fqw(v^p3@o8Y>$%ik%vyB>pwN7ikeSWDbE*d@t3 zb@{Mh4gnH+75fk^Zse4L#{K*fyRP83P#vc|BvuftM#Nr9BH4=!4=;Sp41jdp2e3** zRp9vw{NyJ%5yA}dUuhsV_XNvs7z$)c2t)hTuuTYgzbJH)03O+F1iNy(B!ia0OwYKxO^ceIyhTCIcI@(E6S?wgv3AZBn#7< zjj_=1P$0FF_7~Z|Aa49M}pleJxl`ny*PfUJF5*wF)0v}1(Vg-j_Fy>oVQIMihs*49=CbKL*K9m%1nrr z5jEkwsGud%0~f6XMtBt^prnee={zn}#jyRxmW@Mye+op^b(K5h}vw*uhvKA0Jp9s=%ELi*h}_F37`d(CNhtkNm1;@7OV0yMA{;(FX<5;H(&hu2rQAqBoym z{V%c_o(auXdbPmVCkdpqjqzY+o;+XPGTWs`RrHQSN^kFl4!R8h*Zt) zt>8N(1}MWs#uV_o2#?&5L=kG)7(RRSj4an|NQguv6Zy@bD%0mQorOFq!ajc;LHcA+ zRp235>@~AHbbZmsk{$Lku%R3Mt1w9Rh7gheOTxyWX_Dq(|H1Ry=058ZPs)>NGeSwc z%H_^~-z3n?l9ilQe-)|rp#!`?*^IPa1B&#{SLtb2+I>sj<$jsx=dMw|-xmtly zgwf?wUh;QOS^_?AhzVq3ze%EGYOv@BeFo^9^o~`J|H6El+@-XcU`v{v{b)3MWNk<2 zmddXa*ibSx-^T-~5QclhRsV}PpC54eX!;1U_g%I7eA<2_wUNX99x8{Qp~MZI2%GTQ zV#R9au?B|=s@`GT4{kQE(evVl4S9UABYv!RmBs0Kby&q?D_s-&&~y#|{=HjF##Rzm=Z%ae_Fm|R zz{es~5gE|iumNaP;J`);3^>hKAb_+NP`$ABpOn{cIy$M9YBhIxLHg!D$`fBnkNTm3 zD~j)rOhk02&Q}P`n!Qh%dW)LeK#==Q6o!WndXWx)EfNb=Cw8|LFO1=ctWeM`!@C~+2!jMX3p-|z**4nn{#>2Yv*Bh4U;1fz z-A7IrzoV|pv96i+<`^eLa&DOb;_5wwKw4nlhY(s#;dT$AzXY%kg%AQ< z7}LNMNIqvuB5l_s{B%3CXPRUjG^8dhDr({`DqFfN`%Ung`LCg!Ls%=_v-al5D+ySG zWZNb1A0;*Bs{z>s!1{OJW$U_<)xnC9Lwj5KAWCSz!27X=dGdqi>ZQps6iJK-S1$XS zn!q#lm{WP)J+B!v66Wz3kP{gmAh#0&zXwbnB50f>%Mc{2SDG2lcMxro;1i5pSpg@r z0aS*CxrL7u$NwtFe%I99;V$~0%yz3-C2{9^%o1D5q7qXJ;8Kgwo+c@?sz*Oh{?v+`U{qxsIgWIt(l#c^g z_$Afi^ee5uqT8Sqz*Ozn-sCI3SRVTah+!uebcEzn?Y5i>^4H~TIBE3jh*C^?qaHK6 zcA3Cee+s#~0wp6qe2`P~-$C6|xgBf!D64ba08PCXZpwNc$ z@!%HwJjArvqK{<-G6{`+7$8VA9*ae# zNW4eqgV@>K+tjcLPx-3fF7wuYx*+iW4fIErfo+t>FNOc6nR0g*C~O_xr|;OOz)L=O zh1K?3RaRVKX)KYq%Q$ER7Uz{v5VgduwEHK%+^S==Z{l(RNTvh>i4I`@LJUB${3ZhD ze*`pkJU31t)QXf`?g|j6={bbCcL(;8wklOsmmqaRLd0E(Q_*ao)%P8vxuR=)jKA&J zTmGxJ4ZY8vIT7$$0(Q*2X#yvdmarjEMfCOo$XlaJ5U|P7VXN`W7LUb&)KDtJeT>Na z*w}CX^@>oO%~%qz^2#zl$8BnB3y}S}MoOl=c{!|-NcqAYo!P#DOXnYoD7Id^1kD4; z>K%aC05w!f>lqP(4#0p8dM;XCqDdu3=>rmxq<|R}B%u$`fh3au%CGgZf&M#LAJaAc zIpg}AKf}QT&zMgOcbmUZ1G%c`08Sr24cjL<FVR47PX*?Etf%QELIvq(j}q3HVDn z`#Z9`FH#zBqioNR8u?VLP{0_K)p-3Xmfvo4aX#iKudH-f!t*31|`%Wasuc<9yj$H*$qKhCH5b=01Fgo;z`nNw5)4 zpcMd?AGQsEylDrsGfv9(7EFT^Ht3}gl+PW-`I{PXXi+u3xFXSaF;|h_Yh5=HGw6SgoNz*>2Xbb zf??IfU8|sI)dG%^)`f2E;fH+8i^sqDawN3| zXOAFG87w%IpY_KCnCekQ7g+~Ce?D<=LA*4Sd+#I(U4`BVr!Z%nj4VRum2*@OcR`o( zt|E2BL9h)2XhT`$&MLss1wz(jF{nWVXcOlp79QXw-k7x;QrWaS$FKRuBc=@Yw6x%( zHv$l!#{uweD;{0r^W@b4$B8AwwW;WV$Vg)O7cqk|HiPiI)jj53r{(P9^|qYhz?(rd zEEv`Y&ELg&IIoRBD|*g$vT^kXly+)yK8tT#y+~j*jIKLkY3wT;&dZJX%ex1L@}n$q zSle_+7WkifXCb>HwZ}d28gJU)Pbwge?w9cMAv7^To;3M{eCG zw?$!?-u#{*5&@m&2g~rvo*~}&mDLk7FH9bGd@vliqvuvG*s*!nY{R^x183ob2{)0Q zK^&Tq0l&P!9?s`oK;Nu;J+iOP!}6C16Y7zijm$4v;&sSJsLqdG$AWXjw1fQVgI(|a z7#_H#%{GG#OOcDFfp|D>niAJOH8xG|6Q2c2@6$O`_&2T@cf=t@TYYX*Yj_F&l2MY0bu9! zy6B*HXohi#x|g#XFy$`Eu7tA-gU!3I`hajo7as#GnSugv`KkT%8B|KWS zvX^|0%sL;jq1H_L+(93@h8i$0p0(eb-iRZU(mp|m065lDwRdsU&OsXkw)o&cF*`$T zPEU2{AOMN96fLe^oitN#T}Jhp^_6WAF`Ik=1GOG_x|8cD3ZBo-Y*M1jmC2K`MJxDy+8DrZ(%vFKRREXHhXf@LsT6&Xe0i-;t@v1P z5ASMbNzU6MnV(0K3+GFH@|RMJcxCG&>pWnz-;95t9dIC#3o!}U8#)QJ!p{2?ueprP z;%W+*7QUhXgBK5<;m!900~sa;Iyw|e4x1j1go?r(g$TVO)>~v%H*RTFpu)O9Y z6wYA_wEuOB>RPwX+{H&UMo&xAnRw+d#`Y=TH(knEg6zCy8_m6*sTQAR_fT{6Y*Zvq zy6>n9ePqG;K*TI)fZSOev=yY00BFC<^Ksyu5$fbDrru+<-Hp^(91y2BI`2&vxsj?Y zZeMpzoGVS>vWw2NHg)wYhZB>#O4P1flk_jh)HSCeWE%ze^h)&qR8sCuNc7GG#wACJ z*YtapET2eosy{00SulCV--- zwB1j)6S14PA9d;(pPV`A^|YBsyNGZv&Y>g}SKzhkA<0*CX&t|n#Q3)nupDES5>#}N zh&^od_kT4oN^8nZ*jm|)zNoZHt;zEtWh=1!2Jtj1naf8~|h^0JR3^qI!O)#;=b( z^JN@;@#9*}j>Q_L)2^TiUf=F+r>_Ef>qjoza3%PECe*{gg0P`fPfnBppGun}v4X%5 z`QKri`-nfcVm36h8q_`1CCxiEIH0}8tFhgYopEiAaSsN0lTNz^Vn!dIu_ON>kjP*e z8#CCryH9*}^!IQ3@8Q@t9+khFd{H5z_`&De>-G62{rrr84R3qlMt;+wgQt}pDO;2K zqB;f0^Bs6`X8nc?@CQOQhh^kB?#JCQev$2hn*^^R9o4V=|NM>cjHg`rD`HxGbRk`{ z?npIbh?1U4SzRakpaR3|=_k;RbtKe%5QdN)iHYZk*?3S<39?B%i7l)At0`i3+k%4-KibzN~CB@Jmjv404TNXl^x9I5eC4xov8J>_sKOLzxRdx zwO7~MG$3>G-}AM&D+`?$yl2b=Y3>e!tt~&-yDqtENYXBkGTyT%FvwkJ&QsfYN#zqA zNuQWGn>g?4RcvBO4+9ZB%qpW%kx!1PW#Hy966s-Y3cv1V9dMbnMUyZR?kKccai9j_ z9be5CvA#Rdb;L&1XXJn^<-ANx&gdyDYze{lBFIcrV94h;VS<3%&Uu`Uozqkgx8IRYrG3E+czAx9}@v|C|g&rJI8`7-Fa?q_Caws@z*6b+nwloTudT(LeY% z4($KZQdQweA-9uLNU=d(W@`ny)}=!xvRAUfilUQvss4dnm>X)a8q$FiliC z#DT0zCPvbf)RyZHKhg*|m>%;mZmm@wr2Idct~?&9FYKRtXNDQ;SjSezPS#46RC8@b zB~qfO85M0RRERRyQlV_AB#QQw>{&uHwrHiz64@(d8zlxabKm=W-_QF$pP4h~oM-ti z&)EW6n>iBtdR~qFofX_kq4&W1x)#GS_C_moh>&48X`i?&`{Q8D7SA>!) zvEd=f0b4d0@aBKNO@bcFqsqk5q^NVybkRK%kr&j&`A7rzY6!u$=;wJOYfSaMNcQlR zYqc_{EOEcYA{1;y*GLRdi53j~Y2D8~KO_vEeXG=CF4NF)>PyT;-r>Cvj0UMN>}U-? zMs#qqTdQ939R;og@Hq}y!r=8=?DR~|COkHoeOs#K7UI+NbPG(O25T<8o%=89Tpdq7 za_v6ybwhiu9|gQN1!%ayT>r)P03oeG@`S`-V?!g4H@$6B7Dw4>Z`G@>Uu7~L95bL& zK7n0Uu{yz>pb-9;r6ZIOp z)4q)Wp8aEz8NS=a9u~=5?vquPe6V0P)7bX&r~S;xQ8FBcH_LutjhW$pxon>jSlu-T z5kn#TD0~sl)i-^=$vY$@Rjssi5Ry{Msz3cSYuIqwu;*fro~5YydsI`uINrybH$}Kj zd)I*PkVBLNR}$85W@M%F%`NGoKexa*vA{Oy#NS*Q5a9=ui2IYaK@#MHILE5KmJvG8 zKjr1H_(Gw=oYHV7_{Udzt%bEaigw$=M3*fnSz;JRJmd`;&n|6D1pVzgfF~>@q!H%fk5KCIHr`sbp^wtyLJ3q-$5J-60bb%z*NV zM$kU~mdxUcAzF)bmcrZPSliU9#uCZOtdxKuP7O9`@m6rsT>gmeM~X{+YW7h_g2uogWRajNAk*C8yPZ%e*nbmC67X$po|!ApSaZ zT>0zdYvu5}eNP93D?^{Iuk17F-h#E=oD}|I9H?6h z)(sV{l6fR9wi=;scSmDv*~UXf2c^czxI{b<^HzN;It%jNNP=5?&@kL~;&garym{dT ziy1%u9#5_D$Da{tiapkoCl0tEzpDI{ML^ZZEb5)05RrLrJZ+gzweJ$Eox|-$o z&$eo9>&wYTb*#esWW$lF>Ej({mxY^#rhFG^)?h&)+LTPL5=Yzx#wV>wo;dmUdZ-8w zF6_4WOUenzonvPv%(LWO zH8Ef9xkBEbWBA1DcbkffA&Ds;16!G>6VY(#^D3+W*ict53Gzq zRX$Lz+w6`Byp@X%6;&Fb*ZAHm3bGCcCgJ z0ErZxUcd7Tm0krRI@awyq!0pYe>g#(ej;WQBGA6nWut^1?KKw84IF>+VK}DAC`dUB z3S9%JDYt6UU2N`pmivK+zcFe3-`J|9AVEu#z3kQM{`bS3L5n+?HMW4^{{F(FUv{Jt z+}5K8V#~2QFmP0KG3%BZt zRUBv`pn1E|?;iuL{25UrE3_7wooD3EPnMjP^Q((iNct^{DBhaS)q5{|VuyXt;*2l! z^A-NXv8ORS8sh4BPIR2=V*0J$e|HU*qYwMED8^5}3 zggOhmd?mQq<9~eJ8{>D{In(Ik4X&zrTuDgsNbP;pg9LW|)qF2vB1Kuggjv&lzd3fq zse*j8^^mXD;U8wVPn*}P0mI+e9iiq*W7!vGV*x7$M`X1Z-}lE(wRK6QA1{h~6mI2s zY40+wB#w6nwnBJagWxQjZyI3z-No9epj;wqw(eyY*h$6BEw#w1ez_=$O1X8uvfo&t zfSo_f*xgds04UOmGzp`)8Lzl_FKGZ{x+>v6Vc8~-%?gt)DfUX8{ zul?Tl*&t^Ic2|G9Sf!@jzaX!T{afY4DLaRtsgf4B(Rd^j1mmRWKZyPf0v4qTNZn;6 zA;#R*4PC9X&NB6@4jWbuGIPXo=Uw>w&b`M%_Rcb74qy~Lm^cdI#mb{*#(*~c)Rmny zHo@OVkfFL?^ms}~N;o%|b@Wc_C!fV5`iq?~PS>q=b!6#A)=|k^?q&TdAh+qa|Ip=K zF8yC21NS`@)wF@-is3ouTq)HSkiCf+Azp#ps({zYnTVFon;V~hB)$FpSIY4In^-LWqCLp#;_#nnadY{`2tAFTnO{heIpfRnkd9f8r|VL_ z!J-^nUTMF;V$EGQYFNz??6)hpDv9Q1;K18zC%i~NTelN|ku>#1l}z;YowC(Yk%RAV zYWeO))x+1bI({ZwXemPg?hYmq6%(i)@KzTO3en_CEVwYvUJKF=U`?Wy&gpB8UY)kS zT9O3r*PJj};IyURek1guOtSSD_$J0h^?)7-%3pWb7>|DsJEs~nX+ILoxT_Nu=EM@R zYTu2)34neTA`Z5F2Lros^h2EW$r9;^zW*;(#Nh}YNq%)N%l=#Ug#pGkejS*P5Beyu zmZ|ek$&Q2aT4})JQl|pjmZ*Yb^xqv+l-Z`#Vn>0HZ09_!X`aYPxhL^witK(o-5z!8 z=4=INbYucHDZIdQe#UD{ooy)DM+@4ma4D1U1xFyfX(JRf6o!M1^3txr!S0CSg7x~S z2ZUY^%vuaYOff1jc6EXB^DTbQmVkAyui}M=IM6=uolb7upv~MU4$>YK8r$vnl|>&m zEnfp4snGhy1-y<<>c66YWY|hVI_A@TPgDv7dH@tv!0E&;2z}Q{7<&$ee(H`fLbKYB z-h8&Gn32r>*o(bdNgH_QRWn$fWykUhl7Z1R6XQ$>;DdM?sd-{Ctfu}mJL!3RgF{a> zW(`D2xYPy)Fyu9|Vkrb0z7vY?!xq;trvHX&p6-j%LVmz5b$|@tQSNNGmed$L9LafV z#^nh&SO_yBKS~b7;82TUEP06d`Ct{0F#!^HAPcolZ0mz1bEm}pYC~GWfKM4=?fb*v zdY1H7d7{gA9Gh#CE{A=7f!f?U*~zbGJ}5?uu2klrQ*J#8c>Y62E3F-7YOR%lp0!{cu{#w7CC)FHZr4EYd=Rfe=B{^%0%HEBqs?$x1)232^W42NK!WM|#kQRZ?6wDPV>m9Lw*g zqmNX9LwzOO1U>0{TD;ULYsZ%QvI?um{8ckf?@1Vf>9?@%J_k@vGw9yaU+ ztyFMtf~^90{QjtO7ZT__H?;1yEI)dd0HbbS0h$em*y5UnSaCG}$Sn6uc6g9D`YH2R zBQtYE3-Bc%?rI`Xr>oTfdE(|bGE0G>6$k}nWuRe7P&o;e&OWIqJeBqpYkBtb)y;1O z9Z|Pz*%Z9t)(gbC$>5Lw8Zk7233y6uC8CNd;j=X3NbCd^)6Goc)EXeM;LXr+?ZwQe zVkv)OK(8bnLOV&^`>3nYv*Nv-(N#giK6xW>6Z;EMq5W?p+$Tv-CPnJQP9QA@;C_Z@ zqRxIL?iC2}$GjWnl)dc3KDp{IA}7r$j;f~xEne#Yb=ArX31KrPgWgQCMJOdr9*Cks zC^_rcjU7{|O>q~}1c#)Z>gKQFpIQf|SmZA46tRr~sGlkr`MLt)LU{6S@0I9sg>Z~K zRk8A^aQg4DQCkMLV3r*oOn$sew$YvTGpZDu4k5(~HO&(kl-<*`ebH3Bl~3YujG#I_ z`yyW3{ohk2w zPS>Zia(iy(UZArw0q7#(O&AeSnyE3s>hM-+=S9x)R!MXQAc5G$e^~$iFZOMR7Mn}3 z_f&z-T|8_g@QvdTv|P7U9K1f$35;KY6NAn(KC4dMDi=mIeF8O)WgVr$@E(dANyK$! zR`xUdrJx$t$CGj(5LW~Q7{_V1Z zC3|O6_XH2S{>`;sq%|=mmWZ>WjdZ3v)s$u`OCP88js?sJKm-Dy?N{ifB^JROMb=GTuuO{qt%@__ij%rpB3)@Pn+jK=lfr#09FVHx8L_i>T;0W6YAFTxff=<$%|=n(zi z(HI90Iri?sqIS^~KDuPydQ)=D(-&0M{b_St_=Ho_hPEJW52{>3%S#_8am~0#R8Qf2 ztVUVrHO?ONL1X4%b9MDH8gf@F4S)ruwJomhc%Z)F=YbW;jbT@*tBN!}hK1c7VReQ1 z*M`<ZGR`=T042H-s2U?9@#Wm*%uYQ?syWB)R~mTgu)GugW&-mOM1 zC~cfsj{PKm!;;3C5^m)78^FUJm7DG)p?~PON8|-xU1Hy+Xp@T^#ap3h@-z0SM-Vaz z(?NpYvPqK9cJXw>vOO75;8Mv_f}6&ANJeysb_co-6MmB!z@3sgvbMN@__dMaU)y!V7W_c zg>C;$eDTQ=EB+`oDhrz0(w}pxrWniaDy=KDZJCKazUK0m-Y?>9EqC8))*0;uD(+U8 zEASXG7D-SImjm$U2r8Yx(I}cqD4=$vu+`1bj)@u9wCK=9F;kp@%BbayrrVfEA z5mxkMA*esi!1?F~O($)TaO1fb5%kL;Yk|jV2nT<+5P{&?%24{zeNUbirYk-){}#(J zeHGVg&Efe`bs^;Kej=E94Zs|MPNv7cj}Qmq;1d`Sqp@=Fl=|aQ34gJJn>rPV`4{U$2qd;^k} z$W;mt>@)rG4=1Fz2uu%PyFmM7ovxwRI4NyCJneSo;w<<5?>)Z#?IGsecQrZ|!=EDE z&5^3FBo{+ZHzHp6ipAgrV%S%#kA!?AA^l80=~dro8ggt6?3HusuMsyjFyJouTmFzh zCMrg40*67`0-%Do_*}ulo?2>xiL1Iwd~Tg-^aAeW7q8sD!EEKI~xU$OoCBNZyd?tjPNe>e;O+~w?d3F+p zM`X&EiB=EllI{&IBFy?VRA@>tx97JU^0QG7<1e!?P0CX1-iefF$ zo(2nloA%T^zxee%@_Bss9vY%Xxn$165nFAX-%anLaQ6mf3ybP7O!LTGL;4BpC34tc z)Er$jEKy3JOY{>*yP<)i+1#H8Rv@wH8eNgz3owvHY}JwBGFQGHXw838!RGKUm%E3y zpO|-31!?O5e!fTEy#N-@v1pJ4D85KQy+GbD?4d@v;)oK#$duCI2PHj`gOe6LZ%4zh zB|a~nK>-dutel9ynzw{_W)=hX4v30;xE7qi2|UC)naI9=>w6nc1K`W7lGOBFG*QDo zcXMEP1V?szq^i6-qUq! ze^7}CKd8SA6Kx6^pV8yLDb-f7b}YuujcXE+7;~T!j~1W4zXEvRg^!-Sli+@E3Ex0f z4wDcTFuJyKSk3*P6g-Ts5XM_Ys{s8q0o;)+F5js_@$+=|L$5opN_+N1^4PcM`)VYM z?^nob2PS3`-zgVSQoJ3J5<~t91A4vs)>lzM1TZhcGA}=2HQrkHV@ggm^fkGM7v-mr zxgJc*=k4t7001H?FC_Z#&*DZ`z?B>wd%eru_RreNnVh)Xm$#?po|?B#py}9UfG4mn z?OB*Uom=~j0PYzD|CYg6%k?fb^Mcoy9uaY6gdrYu@IzCoe9t zJbT0TVyUU`w92sI;Q)}9_Y?3PfE@d@Asq=8n^}ZEZ$Xu*Hgr5$IU|FW&Vm4@BR%h2 zDSz>mC}0t|xPZJ81#n!f$&B02I2fz*u&|r`;mwyCUjMHetxEts=~f)6o!3>V>LCX1 zE%%UtOvc%5BKC2@fcwY8EG%&>CFo`2hwvW~f@MYr-lt`x8!y;K`S;EowOATp4+EDW zb8!^xL$!(g1P)BxxCRW+;Mim2&+=HP&#l|3o-Hig>RWp41gWv(-r5#S2(m@ zaKDvD0Qv8zMm-eX>yNv-N`5|inhk~Y)?n0i%O+!5eR{>|4&0nI-GSV_@=1ZnD>)a# ztyW@t$v$rn3XArNn2#{*^r<+VG4}mOL1S^9LzQ>OH6iZI#C|~=_D55(q}qY6gaxe_ zbC156?)Fkdoc4whsfFG}J3Ig2*65$ZeXWED<2s-{0(cc_pn{@h47mXGHtVAz1vZ4Z ziZZz1ivC3sjPFKq6G2|1@1pzhbBr?|NxL5&Uv98CW__$ad;fe}7!lO4*6hTx&8>hk zQA^b9GP0?u9R}S$E#JUmP0S;w(5%B$ufMZ0`(zb z$4OG*Vs?q>J4ov`iaPsf0qEkXjY3UnI??yssw!lxa6-NBxqE*+)5KJ6H<*4rU~@>f z*aaVLu`=(WuE(gGH1EUA3$Wek;R%-0tF=T`<2Ov0RFccq0qhOoUVDzn=fd}Kj-R~sE<}m%{WJxF28^ecy9TJbvJxx^vQ8q z%^W8JQGntZJ&k)I3j#ai2gjK@<>t~WDqUKOM&F!UYlMu>k~}Je!m~@KDBSNrzk`iK zVBe(a03CtHV>AzRGz`AjRFMg-U%Dptp0w#uAc7BZ0aWjSCmC(4knvGm-@R}T7G=IKFe{-JNxUF2gF~CLWE2W>|#a_Cf20si+S=9q$I^SPmz5} zMJd{#iSafFhmpjxI4?Wn_o?qWEB$QYF|(|jqYugx+fGb*(n}Qpgb-mgVdSt6GrDV5 z&pcu+?{--w{qXFT?!EMUS$xd$bn~7uJe5v2-)h@17`S#>H^)YlS>T5)js=_wo_&3^ zWgPPrhO-7~tEkI&hEduJf|wxfBD)~>CBvPNXN9X>uirA=3?%>_yl`VvXUBYR>A>yUWY7jmj#ul_{;KGVC07bZps>JKP|JRRqjl-=I>=g!ewCK4I11YJ} zHj(&b@3~8+$<&lGcD`sT3$)5wh#qQ*)=@oz00@g}G$&U%3K|Q}XE!nA#6@LYD%YL6 z7nlzs-(LjuD^*_=htUR4y1yF8g!<<1kqY-}{A+L@`1{=gELc&V+@VYSnzC!Bi5k@VaF5;y?dFh8-@4CQ5>eS@`5(M|Av1 z@hUavKE-VRQ}af?zaza1`_KQ<+|f{_x|c8z6asTU5g#!`v>y~xGXCQxhN&WEqTfDw zv;bY7B#w82@o4;{6LP2IET07s`Wj5X?p%I;!=DtLLFUTmh`u-kr@ke3NR}5PdDHXozW^9y>P6~vy z43_c!&ez0K&|eK=NHY;B5Ci-KcA+_VOWpSXM})gJxc3+#K;(5&{KoV5tN+yXFI71o zOacXeWx=*f5UzkW`B5K;Z3_&BxP4^S^)nya{NKM%rcqt{M%4P5KDNp)v>?+uhUORW#clm#^7r zuOf!-91?<%--#e!ir%L@>Mm%;HGI*{{RzTc-E1tENn!haAupyfPwki5l63iHBX#Ae zG8>5g86$yqdA2PWd89^q*2L(P1U}fZP;ip>Z3XF94=ryBoaqNFR} zPM;?Zqi1goN_T@=>Bt6wftzwHIWldQAr4l8fe|Nk@1`3EFW#|k{FNR}z z*}BcVRwZ=>rdlOV_q`6dLsJBNpdWb?9`(KOoFo5^WM7YqWh6kn$7W(g9x{C76w%rw zJ%(?vQwa-wp2hJK+{ZKSy2uXpgHRfBg;?|JvLro)VCHoV>RWiEnvz@N&yMSC+)(V_ zw)MJ=0dC!eSa^Zb?;MBo65?>B$0`{8(gy@@uq1;DWA{%A$ zT1d|2%H3-pLk3SSD4pc=njg4Hj<30K8Sx-uMcMU?Ig*q}c z`VSYJw<5sep~@W#qOMnVDPDsz0ZRL@ue|ViYVG-(^6cJws+hm6)0RGyUWon$JCLLY z+!k?V#fhuk3^}$c9soVA;wg6E+dGSZfNGt7tev+u;=oRvMd@2myEDC!wT8k=8Q+26 zzsOb?br4MF;%DfpU?&7YzcCH)7Dnha)XOn1$Yj~F-Ng>ID>_9nwVm1tW?SNbw9E=@b=teZ?e~4Q|+UWMJew)KY<^Q_vm)?^CtierfcMknxEr zWT;GgL+C?s#7hhTy!9Kkq-0ZVVB|@K za|w7dWsSmy0BMcw+u14IxiC@kudr|Q0w++*-#{Am6f)caYU@eJgQg8`>xr6QJ^(*R z1h6HE6H|(|Y{c`z_t`Gd;pq(wNBPSNtcqXm+XP?CkS7JQc{{~Gm6V4xr}go>mwE zx(({CLWXA;DfmkNB&IPzLT;6C{0JcJDUN3GYR-|!>&K^*>RrD+_(-5mr?zQH%t81( z6i56>EfZzn$pwZMy7Aj@3|P;#+Q*&k8(MTe*(FG;ofBbO4TpDa3(N7@6t*VD{Zlrj}5y%)+hL2+lb5MBF)RE=z&o z0Bk8hn8qDg<>%bc@jsev8fV_fB}9bZEfD2Shy$nT&Rsy4A}r_y0M)qwkk2?MSs@4b zUt;}iLOMiSk=ir)k3^5~L;f)s^nDv50DP2`M-ryU9-0#7F#o&j1kfG^t*EWM>zs%; zf1mZc+;?DK_Z?Vb6RG^toi>J*beAe|OO4P7T&I2SF!*dtP|+Y+;;@xz%-1`|odnXB zq{E5qJL@fI7(Eg$NMab7W8iB2w5ixyd;Zo~xJ&4Wu#^HHLLkxWcr5g?zf;xcy6z(hLyVHJ%a4CuksAxzX z3bP-6@hL^1@pzXzq6>i#Mc&cw74%;_5LIw6P*l2^`FB`Fs_)xxP22$I0RuZNq=I@5 zfXF!EtH(P=D?{=(1T1d7En;kY0eMh>|MPAL+ zL%BY3HbHL$Z{nWJ8|5t<|tS-JEXCFYBCa zVC?Wd9SJq;J6FOb+k&^aQ;yPH`jV^7*kYe9Lo}RVA6o3s`L{UmG1)E!=05EaS_F9I zdtjM8SkeMV1{VVMAD=akr-9OQ@@OxF3@yCAG?BLLY*%`&qg#tB5qva5i%vq^a=rqf zHj2Yxc+a;K%-$dZi5h6dNH>QkmN3E2nKyaI2<*APv@3vbQIu>0h65)RA>=Xk^Gy?T zX-pGS8jc)`iBl2(OrD>J=?g(N4owYHZA?Uo_SZfgj*;|88{x4$l{rl}d}rrHC#JBnk=_#tT3 zLhz1iwI2LySPg%Aqek%a+`Wxmp5Y&7SH1de6Fn;-Sgz;374r@Pm%QAd(L|0Wp!bN* z09Gaq@C@nloj=p7qPL>qP!~g@s~EG~ETFxR^B{s15>;DONLL`7XUBQ$`TS@ut5obi z`Kp9Ccn(+>B=Z2cJ#Q{i_v@-=@f56hCb6X;)!11a*#+hN3;_+65TbN~03jvslLkEZ z4WsLua^t7Z+dC7-CCR#??~`(v)A=FyJ2?V|wyQ1oF+Yk1%ZYD3WsZ7?J<^89Z?;KQG8v>R#ehFTsUgNueIYi!mk)wv6`|AL` zuL5%7!IZ{H#r(5Y^+$|%$<0!pF*epF7c?&jbm_(8xeze&}BfPCj@xOIK0+dGRjK^(_&td+#y z*&B$9;Et1W#z|=6P!M*{$oJ|H!waW@@mLFO3k&`)4w^0i76l&B@u-^YCU3Jo*;svK z_RGJ*Z&lKq%|>X*$_isZmpXurzB4iD%i}NN1o8xWf1wjrmuDMoR88QV3$b^0<=)|| zzY-{{YGOln)0yxb(J629w_1Lb0py~Jj>8A1QwV#>X%(=(m!o2A%De9uH00Kd!zY(= zWR{n>2$al#7|4>OyAfS3#;nn1YS=7dSht;Qg<)F(gxxfJD|M~>TTocWyU9RK#o9zY zIB6zjZQX&g5QSvZWgnwdBe&f^>n<*lOYgI9zBWF8YqsO`*vX7nr*29T2-*RYi#b1Y z{vasSTMhiN7hskdxYlaAFBWT1RI?xbr(9@&RQ_`RHHYZq!|RBsomf{y znxE{YCtz#;v&Ji_$6l!Cz7W67T*Y;mS(J}w(c+^Z>SzKn;UUzN4c&}q%&qo4oQ$J5 zMHQA@?r6FDVCrzgvmRb&csoa35`>G~*Mq-b-e8A$smhJHyZ_=RP>a8eC4WZ;=mU!H zm_P1tbXr@vfj)lMQypxv&*%NJfk#@AAw~OdJE+;A+zJ=F;4HW~FL7QSfPd zgDT(nny`5woFE8*sqv+rlKDg%0$UHF&Oz;GLA|Dblzbf)Y$vt(dS3Ng3^xj`ttNR zm}*8tH~Ta!gP`Zxav<{w5K|`B6`h=PZCg|Q7wdd6iq1}I6{QYaxxAXIFo=mSN97O2UENQPPG@+5auM{&_ZZs_!KQEL>Nf zsX4f*F!pChr$Y~^zfaKOCOcs`iAPVTC{VDGm%1aCvmFq5#`U=p;5Z|~p9eGxNtnq}(OwF<{aXQu z7&aU@n-797x)%if?e2f^D^`?lR3wr=&~fv;b4a&927H%566t`l>@4KE{sDAyJ>=Cv zU^HHk5(RD$Po5!NkL7$!N1iR`Kl~L>;XOGZ`citCBff%N0(epIF6mo~#$>cgc3_FW z4qXmS_5o_GmdH#>qlJaV4|V>x+zWGM&*>@@ut%zC72!`0WDBKTB3^rPjlXJ8li3g{ znUqdeY^u816Fuyb*g17aK}YkSjO9etC$0 zDo94dmi=aonOc%~$cOVZg^V7ZKUVydDv7LC06D@Fz90Z*=`YH9zZW&j<<)$G+b8!s z=5^l%C7|5i;&qNgxMtiT^F0xLNF@4LihymRG0v=ztB^~JLvkK1q+1$IkPAsdLb2u##vW6vcMUWh^z zPTs2fo{?UJ`$3Sg>S!OeTyrw|F_JaE1&t4l(^5t~wSn?X)FH=d`$+ZPNzFgiVCLJ> zc&5SrG7^%dyBKbWoybcy3SGCDIy7KTL;ad1xMgyx?O_WKIyp--wv`p1-azniC7}wS zmr(4^1QC4PTpX+eQy&2v12AbLVPOK@ED-d+4`0nb#u@qYmt7k)+W0oir`ReZ$YwYd z7xf?|VuDTQbRfrpPF2!LibyOTp@|~r#J8&+6x-gj)TQy;PEKey=PO^JdkYOb zeHZv0TjLL<+4C8N5~vb$gGPm>%u>$azoJ*4-qI(=4&kzaN%^LU_cAss9N$!Mwkz_X!Yy?bL=0sXG?s`LrXm(DgXB);Wd&IARNN@1ma2 zqhD1+XQAsi<7C4$@gI0eHMO;3uXWds2`?I$PG%3TmPQ}nmco(1Drd092)ff!*R%cy z_B30zp}p%~X4}(1)~6TB>7X5ttyn|ER!!88IJ1LrVvc09T!MeeF#ZsD=4`(X-{z6R z(330)(INeT+-0u?O7%rBwq5p`@H>yTiTgwOEEM6c3-0U##>&8tG(bXUA>zXhZpWRB zb;jq~-hR8#CYj>sv0bJ{6HpK-UkN8=LgJ)2UPu~{Vd~pVOmfg#edFzm0oahu**~@3 zsRZ6a|BvC!!MQ`H9p;&4U^)JfK!Oc!KAv9z<@JE4NAAHMeP1Vp#&|eQ&rdeF=|A*u>Ts}SEi z>jDGoQqzYbd6^P`VgmU9D=nzYNgXmB`<)IxH)Jzc;RdBDcOqaa^qzb!8+~=h+d|5E zn7Z3ANKDZi;v2`j!9UJZv|(?_{9>TZ$5XHELHsb7+79zd21QACc|nTSSSkqw45s@L zSm_~9f~OpMPz@GHDiTp&@f;m_Ff$*2-_d@URAhZ&Xj9g@AtGu5e|5_Sj@3qZ8RUN$ z&J$xR+>OEOoHB5IT--t*8t+)SuJN`s`Xp=#9_*)zUpACXE;{ly@7Fg6k|Dnsg+AJ# zmdsNEG-vK1e$UM#z_N!r3fT7#LH&*F+p7GB3sjMjiHly|PH|Bz=o*31{>)WyXbWgN z{y1(nW9_;uF|Hl-^1-A7ze7J#iaS9Zup<0{Jp%ujfvt0l1sl#Drr2q(4N8ONg+wXo z$UX4+^)LO0QzBQ3X!WnL2*_hUl#Q8Reu}Ni5*jz)+di)b2ZLGfTeAx#eh3V^}lyW)J6c6&v;%RT(9TMygS@`K~~e@{p~l@cw<10 zwR>Rp3(3iN7P!ZY*I#MIO=)NgjXJbh$jXEf-k^LZhnGzjf@YZOh4WFLGuEMAzP@=s zJBp8|K$HC!((|KuXB_ZHtFj#@#q+YEi%#CeC&|QX`I*?OMdkXxubO#B_tEV2XkP#Y;A1Fu>)IdK!f!G_%P3$gT?Ozzanw@k`HA(t6qTBISkYWX&{zlZ0Z zuNVpQvR-Hlst^8Tn?Lpas@no~gi0ZcAo}mIwcAhm{f#6gU)+$ov_2|pw+kqB)kC*K zd*i=w@hrxw=2kRmsJ3@s;6#g3$ z{kaQ4lmis=T9k`%VhhU4ggy)q=>)5(W77+5v5!HmsWK|H1hSC8g1q?R|GTf;t>{7u zIQGTJ^r$Cvkhqw>RI{KcC$@a;h0i4V?f7%&iFB^{Np*qOq)dbwKGLOJpUX+hlwfi> zuYtgLH_C{zi*${I6$jZq{F@nMlECwu2FOmKPVXsUp!axo@HkM39RevBt8_v0ci=1bQ%9%Jw_! zlRZWUuKkvm3(qjgXh3&(EGYOa2i*SKxJO(D9hga?G+mT4dBqCsg&wW$8xuZpGkEAP zoO_o7qqnM*UzX^g@$#qSSiH;&ee1wJp1F0{p|qAacy0X(w9JLe3eJ5zo7OmA2k~pj z(M65SUIkPa5k)z&bDdzWD=+}rkAP1aAU^!e&1Npe$>a5BDim0(AmxsrqkCJx9d-Eo zCm`bm{{7%E?_ERA{xxd+&i+1(%2}VPZnIxZe8YRwwOJQb3EbPTr!wE!ILzea4(@!1 z^9XElh*eMIz9h0HGM}weL?`x3QTxe;N+>}MPCJSKsRsOHvLv{*AmXV!*KD<%B=@}7 zqqV<;k|z2O0$IZ^0!t-)c0q>9M0ARfmWbb2C1(T|lSB;^on@m=GM54|BZ=Ezbw|zk zb}7F|wmJPra{di-7|pFeJr3bSVPQR^nZhq4uh*nG?v`Mu170$E^rQ~`2(dirC3JLj z-}VZ>KUv^y8-xB1-NX}ut*5EFSz^>FVwyL!{~de(6nnYP)>+Q?Mdi^^o9~K(YVMJ^ z3+LDS6%sEcyK}v}O^XeOfIQHJ3IxY5?)`>oL*&GcM8o+pL%|YUhRWUo@TZo!kk4$) zlEAt(TTf-WK|Xye41s?nuWbj7sKnm}wMvoEO>l9uv=Ho)N33#6E^fg$SVv2s~rGQFCu%5F0N>d(Hl@T)2$>#QbmQAB-NV`)vJJ9 zZcqL5)p0kmpK0T{G*l%H&V$(bKyev27w@m|lPpIZXv^OCDsWxyC8*RHaRNJn;bNvU zD3!i~Deb|_AU!D&1X-AXr>o(C7`K>OP(H1Lb|g!;2fti|E!-yIgI?ERyd5tTFb{7e zDktb75`qHlmQ@?k$DkY!-lGJ3c_N-a0e82x zgnOalvi{o^{K-jg?b8j$NQT!WK;;xuga0o?kCkk!eV2W~t_`p9{MO2Fzhe&yFY;Q- z&lJZGQ&5wulWama$MI1;{|YY^`SQ1@qf>7sZtsH{{v1b(E=(Ch0zsR zX>QW(CoB5J7oQv$th;2T52`;dM?R8$?mU;|ULqS>la~2uT=9E9^boLHwyvSDt_~bO zXj+7~gV*EPNh^6pCzps`UA1h_y)TbPNYjtYfV%jZV~)}zt9HkCXW42lA-rwOQr96T zR8w^|DOa{b8#PF1y(V*U(IJ$wzbn<|?CjKJfPKccPdv9h#wHClnD>ccc7dRcNY_1o z&WLXufbHU$-{W;EqEZp2)!Z={*#S+-QMjR|P-`H}8c{*i4)Zec%c+pJ6FPWm(vYi4 z86f3d?T3oV6z=U4eKd6E{#nia6@SAa7UW|n2R=B^Z-yY=gB*{4??H(o-?y9Nsi%k* ziDQ;J?;;QLiY!UdnS;4QTKp4(9uyYmg6}Tp3{W6Z9Ft6V@FiBMj`_7uMn&xwZ>Q2g zpTIF<_>$mfnB$chCP|K$fGh=wc2WC{buQdtV8?mz=$t`BRv#$=bCZj>G z)WJl>DI(Pi8dB6n8H?ty`hu{>>*M#&qq!fr>V)YK6yJl?U#m}%qUADNiQLB?qRw}s zeOK_t9q91PEp!2AliAF3usLH4RnG?|85G3O0Az^~=^K`a2Gw|(&gkTNBC8CqT%Qm% zevr8O@}TE@aVYqHLnQ#?l+! zv0tN^^^EoEA}x9T8zTL=hcD39APumsuSDzy4;~yCytzbr8BFgZwo=fBg#Oq z7aqW?HX%IVz(BWBs1)=n1r0d6bM3k@ z+9q_r&VatZM*HPmo7RQ(rdX+{-uy3J^xeGR9-11XxABY=Ugst8m!ao+B&qHjuv=~> z=Zj9rHh$1Ku*U3vNV@VssNS#t+&haIyRl}S>>(5)+YF^_MP;inTC``67R3Qxw=X|yUY&r^STXpHB0vfo^y0{6E zy(Bt(Xg2E>c-l%R@^%6--0@T(7znESObCgOBCZN69UyQX$IEp2jVY2rDM-Cbf`jD& zDZU4uE-upRhld&r+Z?1O|CFUwq}NWdm&N*z42~!K-F;;4w+8?9oOXb0zLdm`$!wrN zI=vWR1}z7+JTH?=L<*L+7Ch~j6c|tGxELE9`8Ku`0uX6zCBE^Irg9mP(GmFN!I+sR z`px!BuFY?xg5~E=C+*WIGMD0gf39kCtn71!9rE*f)d>*%{4>7%^+$LK9?(1jm)6g^ zNqw+lO|^Ej{dRFHUR}d}{aUhb)Lw?|)|zuk6gdq)06W+4s!Pb2w%{z8-gWz9FavM7 zauuOu`$0Ss&_w1W;ul~)Kuu&!>g)Y5AKb+Q$t%uSkk;SriO#qzPQImR$zBa`M}Nnpk5ws6)F=x$@wai-GVQ|MrV{~(1>Euvk4d8czsK78jYzQ zv2E5SqGU^-8**~tNz({wZf=iEF#NE88%#i5 z44(dwwC|D4{F_bbG&69HXVA^0gI+55b{=d5j~|lIibl=5=l=13ygab`5Jgy1?BfJ7 zeegv-su0hVcR$<0SXKda^A4suA+C`t;GC=XLvO;zx{2l@BfRvA=QXi~Z=jaJG@rW` za1w91TAV{P0T36FnyvFYd^la0*ms`@&nNF8BZaCD{)1T*z*;H5lbaPMWIui&`NgiI zCSmGLdnGlHEL;BA;Y5j;GtKl;jHoAI%e4cOT1iX@ZwMnT>rZ zpQ|svHKO~J4eX>6MY2;T9$S^;&czh|B@3QalcHWAHK$gxr&a0|3S8PmM?adr60Ujp zN@Nd_H**{_?S;`s!Z3+`lo+4$b@1N^R{l@A=~Z0jWzb2ahayFAGuG6&A@De}TeNer zZulbm-pT=M4=fPs38OVGsyF_=@V2m7C}$U|2cs`a4rNeN9q|2%^of zA0ydG-M^WnaQ{x{vAQ5dK83G_+%)EWmRfjW+`@iG6`W1o1p64WFjjSV2#9De=Rzft z_>r6s2S`q$$61wG&BI;)y}1kG#^1E8nqNXX=W_?8(!W;}^*y2`c#|JxY~-8F$Mve% zNXB{B*Ogwg6!mYPK6FrS_llUvX{}AAZ=he*48KjK)CbAdgbS!xsRA2%<8trN=%Soc@Ya8DuHH-cQlBctX{OMU zHBTvgULz;i2CuTL;F7ygzfHKAZvicrPFYo4caDCy4cE3zrbs+@VUikHziQY5;rL>^ z{L{H{Y93n^=^rFdt_3Yjw|KeuoNi)J5Jdj?r}65mBc+Ae$pxZ!a=WXBAJrY2dZYhF zc!>+;?k>;!%MC!zPNcOMAzYwJX{Ge#XQ-o1mobNNB(%aL zWtrT=3vB?jcM?osieHBC$IHsYGknJfZyvHOy!g>=S}Wh|kI*0X zWQ)~BTfUo#uomPIY5^ETv!$&HKi3Nr9Al|%nv6Why1*wCKPt6wJ zL+RpMfP{jF$h4VpSfTSUT+5uq?o_x#ig)1Ot~j4qxrBf4k8x)TJ4xr1f&n+Hi50j* zQqXa3c8Te{|H&JHMqt8_(kZ(ANe+?K!f~@|UnE{Jc{CBKSoAYMCg5fzb>Cs79BkHEZF`Z z6|U|C%@$N$0eE`q$$roI>xuh;F(FKUB~P`X|SqNR7^CoR&7vw=5sGtfb@i5+M+bqjgO zWd&X*tP6(iby;3HFJgdr0_00IeLynH%%T$idyXn2n-22`7*s@@*ATxj245KgooXB z00IXvuR)+*4Mu+$f|af19V@dJj9Va5w1>bcrBFvLswZGLR@hct0mFgRh zJmeHUBq;?LW~|_sdLk-m%o{n^fHj9!>ul%Q!a7la@C?+Fm}wjH8r6l0rY*FtLOo_4 z*GwLQkQ}p|i{CSWsc8HA-(4%{iuIMn>3{GwBNpVEIHqQ-Kg)&tDw(1Gqq$75XWu~w zRO8Q!>s15z5;TIsHAXlq|ITi-GdbnDcaZr-psda28{BG@;>E3;&x%q21+G9?)2OnM zv4r?9r&cCJYpJZHj zo@Ki_fe-!RrN>%9g_uvn<)^OEW*3D_9xJK9tTxJ4>vS!MS%vhVQqbl19>Re@j5-1ag z+t$L}=zCwdwHn>aD7Kk5C=gZR5iST57rLnOtn(MvNBR?uN%YhTLZ{L-WLb|)Q|INl z@Z_g6()IH}4h>=02^;mlw8$_qm>3^saZU zbEToWJ|f9sNGCe*4MsS$XKs9h)i~x3RVrj^48LdNi&&qjQ_*Uk(*&R9?;qS-%V{I; z3qj42h}}DhSFT9QBl}i=Apg0)es&l5BEela1*HJiR286U!5%c7mH{kZ{X_!~fyj|^gsN?oQY*voG5xkS*uSQxaWb9rWW2It| zKIk^$y*a-K@NOhyaf?6K&ks4-6Wz7<>#L(PGkJvdO_U38DApoFsf%H5x~X8pNz7sf zXG6j?1^-e&uyJ4#yUkizHHldq$u~F%-&kM%h=YE&2Jd!O|0*1XOhvs-Nnoy9s`+5t z)|8O;$4V+1`Mmv#|BHd2Xja^JU|+`16phYLQK`PjIeEnUH-YyM&t+Sb79qi2&u_;3 z`e9#40x9fHf&V^Pp^LpB$aKNuTdvtb^uO(3&8JQsOcwv4{O`GUZ#~ScH?iyYlpn%p zi-TZPR}oB{WZcpb_!6+jU=NUsUu>Is>G+55xOmXF|D6A2ZHS3l9Zyy*;BD0j`SU=H zcZl*z;F17zzdyYMRGU9?I#QP)Bn~TsS!r+7-UPXa&KiB^3DkxOr-Kx$SA&Bi>~AVzaZyE?>Q@-A#*=q?Vy437qY|Snf|9-k5bU z@6cM?+UdMH{tKn$9YP63WAIqzFn>fG^P3*0ifQws6=ByZ>&Xf#Ak5$GfN3MQ_U?FF zsUd9#lpZX{PPeRFi)Oo-&Gh5x(lDBvCu2=qq=rT=>JcW0a|DSkgx?_e}Z1;`{)hi1<{83t8C|~W3P?4*3A28u~)=gB& zInB)?P)}Qe#%q2g<*=i)q$d`Z(n`I+RUgEzAyF_Fei%cF3{ry-hHb)-t9XVfh^&pE=Xn1eZAF zIMMDDp4YUcpf;opdrIM~L*2}P5_ZSFGK&_vU8i@6`pmCISqu01_IP|m1=$N9(Ewi5 z`w?L0KIcK;wkU#MnIS>^47YyR5^h05Hlw|tlsnyxK>;4& zw0UfvhMQzJ^&K(lQ&mr~;;Ufy3BjBonS0w2!xj4A$^dqJ26wU61US7szElyZ=Fr>} zUWTQzkFMQR93}T3KKA2gwi5gxBQNK+{$%|}U`p`{lG%mg^c${V?Ruo?-V#|YgsV0i zyump6+`#8}h+T-&_0bMSlKwl1&Jr6rZix{P+I+OSFDrCRcCeeTK3^-c--evb-7DJ6 zIoQ-!GTO&^%h6U30Q|qS*TPykj#<>XY<-V#rrFG;m>dm2L5>#4V=+d^j)!D#U*N+n z*99IQDw%J4pej`lG-d-6_-|s4tHzL!5ll4aqEmbA^WFqtXxzQ&m};m;%yM&oLV(H( zU24Zx{>WLeT=EXv$r%g2K}l*ImnBf((7FqFd1OG7^CmV00G=bjuM8xRoUxX?iTHv( z^7}1Sj^(K5hK+0Nl7-iANtbWLbDzL(Asy?UcwmagagfIWjCM;Y_3$fxKOlC+3FNGzuzi!}F8?Rk08lpy7!`r#p2x4WJ zF3`eJ5q|mW;)svyORJwHoj}SMb#7OX{fb3x12BE%JL~Rmzmp3O!M*{v4374c$a&hUUyG8{at_=9CR;C%t1}X!V^k+1^IZWnD|&$nP0YNE z?5zv_66wBt4+33IxFc#2St1}2dH9E_cZd%w9KiB=5Rd}`w%nywPh9n4T_mo%9rBM| z5VF)CIoXdd^43MP<>*_L$hYzI!*1UBBh|!84b0pia=G$Mmba+6sG~l0&*a zNo?B>e~28$_45;Ia+tVvb6?oX$v8<5v_Xw73yw?5p2_IlIa-t>2Qnk$I)M!2^Cyp;NAw$nNhpA1}(PHYi+sIpvqL-X*M z8)k3?H%Ou5i}JMy56en*{4d}7b2uY^Yu_b<$mn-vcP&EBx^!=r43enlK+M$FSr=D! zh^!kCH}Sn_trv$;f4nP z>x-eT82MBq+f+lL#sSK#HtW<)znGd+EY(M%q>?U;rHG^(WLe@lw$`XW*Ln*PAa&Z zu?YX_g5dMeq0!}8jfDMI2Y7{`oEadtrsbxi1F32aH zr>{%Azev~g43v5;Q=2w{Z3AHAD{-o%1czbntIeAYHqUCVh6KpU*ZPOZn>aL^?5*V}Y%G)Br z&U{&vC%h;3O0;y-p=nr0M@aOCjexXB4`%H~WpfO!fFiVlZ|$-<#e8?dWR_5vWiJLkp21i_7EA&4v(du(52ruqZxZWIX@7cM^N|g=!R2j#uM7mty(H}*r7r&w^vGBmsx#dg2_fRJz9z#`C z1!rjrbmR4qsRsgGP^)l9`W}=DPCuF--AOeq`*)U;X*RNBhmR@#!7fnmyTJ{@r^UwU z1p40focH3)kJpg8Wqh&H=Dsqi#325Nx|T}EoWsT0I!R{T0PF&QED~W)ByB4ooM=1O z^y9zr#U9pCH*{2|&;Yu{R?S%AHEG9{?v`$Moer1kTdyPv(CNC*)SX{np0`^h$$RjH zXB|IXKD{aj7&fzD`$m8UG0rOyYjs}Tgr$x47~O3gVF{M?JYvk`+ovG6Qp&(Dy81fDdTRa?-yRetakA`?>z)f+D&$Cz3nK?wk>8lv6O$eoL zwj$;VTQMUU#^g)1=-02U{CKV7-x8zMg3yP_g`x`{SeFvr3h_>3yHA&YRF=J>_rLK| z9BXpNPUsb-tsD@po09mdkcg|s+C4oVB&h+V2Mx6RVT@hILuj;hO+FGrm= zHZgAR$bRYMeIxjyhqLYS5HR*+AYBuq#l0_l&-1^dVk05cCFGk+iK1Y+DU+Wf!JBnY z9K%y>h-4tlUx)IX<28SLzLvC1D+`~ghMHYvJ0C}Mjgt%O4FIj|$*r{Zh3(A|(=6%7 zq#fhzOS?tuxZ`W5%V$?P@Fh?>m+j{xWNZir@ecP@h%fduBofS*;RykBr@@96CUYj z4T8l1RU7E*avVHTh6nDc73fJMnY{F^nC?mGjP9xSa<7VxjwlYlYKenF`^O3=p`t$) zdZ1$M9e6TP+UiSxiwlm-;o4(F2CEUK1Fw$6JiUo;Kso^~>VYi$yIojFlw|grE67XN zkTwGA%=r=xf@JTKf=tCUilI#6>#| z`WZje1*gCdV{yEr~71YwKt2QxX!_piC%}Y`TT)l=!uW zbH|>v^EFlwr=h6qn-A%YH*$iF`(~6 zdWIfd8_5ous|r{?@1M-9Q5SY+F5cHVJjdG$yFjUMGeUX|i_Ti2P!8zim3yh8?t6{b zxan=3r0CA5$1=g&{GD$jJI`#u?Q3Q%mlVe|M^jv`f0W>=tkb+nWKQfFz1y!U_}Zmh zL`;xr>NDY|$hULYfqJj_q>bEZL}3!eNT8-X~52+=qDtM-xS zGzjWBnuM4GGdON_UQYoxe59(oTZF`pXnjkf+RbMj`CQ8u;g-g`!70 zB6kk_Zn^^1Dzy~tMh84@jgBL8rK(DP>T5CE{gVpPj~szNw|u*z;R-2Hh*uM1CUPv5 zT`-T5I)gCwfjz-vdwF}&?2`mo1S4-m(oK-JuIP=wR26?jyOLW_FRij9pC3kxG!Qr>*!{TznFyaDu< z-0BvMZ#jK^QlP=I6h%&SR9kt1Sn)Vm*SM;{q8O$Vj4~f=n=U7cB328keEVU!SqFb5 znRDC(5cN1WKLUNwyN(`fQKVNao>==peB)L2*yNGo-Hx;GH27bY>bwcrW@7IO(FjGM z?WLrrn~(4fF8;z8CgkV0$-Oe7sKV;i-O3>fkWckr-j-L|!kBp87De2mZXL|t6 z`L#|PmFDcXvp_J|-Wunl77-J%<$iD}x>`M!!$#Zb|tqdXAA^Jg9& zs(7ge`o4J)sH51xEUjShe{bl0{HJ8*zFR)P8Ha`hf*NyOWNb`gU#=^x{sG<2)Pt%G zD*GZ25JnAY(gX4r9F?#-a|a8t@!hd+$M#QbqTjo>)co722!g=GvcG)Ex_NRv0!s>q zad3aOlHiYiKch@8il0}vL^w#~GCKB(bibz=VR}mISI7YgCCu=+WQFA_vBuXU*u=y# zwk#NXPVbfJj2=+RCuMsQ?zn>BxvKtB?SLnHv;zFJfW%876!Xh8u{p1cnQ=`FeIPfB z3UpHcilT?-Kg87MnQZ*~ab|Z^6ft;PLxu@BFV1n)1&0U~0nj$JcNvUwok3i=tosQ3 z;6n41W;Tfa2<8Gti2W*H99MC};0KRs-Sp@i!eVXsesB2IpGe4A1o#m;4-lVj(#?e2 z4o(!ce@oFae$PkP5o++a+Y_OnGW+DNBm#I@nl^?0$T@{^PnrY>b2K&<*8Q?ZIsb6n z?YMGA1N<%=ULF(?V1nG!0%D2t*Uq@}*HBOsI&a*{~sdK9^#gN;#d0} zpVTrHmCrpS{?xMnyMI>neXytE=xp3OMUE#>Dz~K`1pisjEca8uOcsuCw((?+q{0^z zX53m(xYIhwW2x*ZL|u0tu9Q;YevG?YRR7Puy`y7JaBAOyJxZ}Ytc+|v>PImAkWZ3b zE}7|nl4T)SZTJK)idxS%cHD>)xWxwX#MDr>JkLw^(qF0NGs~<4rp+!`f+$MJS+iXf zjuCj^BJGPkd%K#KFd=vO+LeFCP^FIL;e*B+JLZr(cy1zeqe75lW})ZLS=o6v#{g&c zdS2g~O3|V73q6vdqOf%4!%ckUlkTGLAK9zpr$zSXAFjK&Fn?g0b^2=NF4@XayDy+7 zFkZ;+dw^t1JR4<*Ou;fimDM7T2qT<*7}x~SX`v9waLwL@N%cA|&dTREBdoz#PV43I zf(yJ&oZ{`fDn{Fgi@)?T$?%=Dn<8EFxh{vsEmv>4JJbg!x%}Ul_|#xN^ZX~nYtnrA zA3U?q=}c5i6t#=zWsZpOgB9Ol*O`N9Ul-?C;mTeoGwT`B4Gy?OJrKBs3+eIx-foYF zT9_3f>Jm0L7u%H+jF_z(OW~St6TYw$xed|gX53%}b^g^SDL5U&WkB1>j%ikpV11Q{ z&(unN@au%*YvDvR_r(d-U$e9@@B@!s6umzyfqmK*qQjH%O^4?is0h5=IqNjYA;w9E zhodWQS#?6v`su=FuMzHOaWMO+_LaI5GVXR|EfOVqhqUP>;vuLo^Ln4Gipjw_3!-SV zGB-R>wpW6Asd_@|1xfJeTN#0g*VFhA+A$Tn@rOr$1&Pd-l+JJYWfMgR7ijkhx2%aMN{o&BVI z%|m7Suk%!8Zh5Usb_!eeD9UM#L~_K&CazpxN+f^TLKsV7OY^0g`oc_n9QOwCCV|=K z3}&+PP-AJ3uyQMexbwC^ITbKK2!a(Dfy}9%)rgq?Bs+U-#(>Pt#Ya-GEL_B{5V!pf z_vTm1B!$Z0)8NtaaIRowS_d<#M@tEFRz%D<&&}8i^tx%^X5sbDvUtKB6RctF5!pN` z|JTy@E-D+0VzMTn4I-rNWPsArMcSKmsAizl3QslJjuTdn(k!8sK%A~K?2d_*BCoVL z8&GZ}hbUA5w5973dhiJg!cDnPcb!rWKigug_NOAdSD{sdpm1DCSaVt}Pw3Lr;t*`+ zF6o|}q=RoMWTyo&xl^sKkn~z#epCBDS0m;;>3*|3S ziN09|l|=Wty@wejyClsS|OdpEZj=wg;*`Nl8-ot zjJY>{L>(Qc8&ApbU)&F^v9vW`B{lNi?yda(q!=^s>W=I12E;X$dmCl0mfXrp)}N|1 zmtYp|;jDGw=Rr!b2?B^mSB}If31LgBPUtMA!+@~Z6B1Y1j$k2Z>s`C6P z7{@3i8Vy;8divw8{*sZk#$}#EIxkH3IhLkPU&!0h;nkrBJBPSF6+vwDY7L1qp$p&u zrN|IB_X2Gq>p>^PbvbW2{`Uybuz9$N-QM*O`*K60akN|*H=N9n5pLu9Lw)F;1tphZ zV>kK|dGHB`ac6!GNk!DgDWtDow`1QvmAQE_?x*`b5&zs}dY`Q3=0U?3%8TI$S`56q zBc&2qSF-Tb!ZV_+vh?Kw0TW@)v#97jGc0Wt?-GHIiuM_B%f07@R7KweMdHUZ_Oz1z zqs8ApF~5FCce=e1kd_CYz!|0@m?}XL;gBH-Lk0gTMV*`=&_Tx5qGvL(+qz&JEqVc* zEvSXWfYfXCY|~-vdd>>=afyZ#O9(8wkxGDR=j9p>+-9A8vCv1U)7di z){`LX)kk{3RI};A7LlJt&&YhI!FLFp{&aL)Aj-MFg3pPqO za7H2@;Lmt|%_vmd+yC*%vlxOoq_l2gt{c(RivDi^Ka_pP`I4HT7td6$3}ZgZVSnD7 zdA)LyXg}L8#x`7-v<7|}>$^p<8B$n1T*qn!UM=zfQ3%95Z-L#!FkDOlu+c-t!YKBx ztKg(pk+X*$NVuc#i^)!{4emTjNl#zD@KYJ5<<_fyHMRB6Ym#u?Ej07U8bx7bvF)av zcdmOgv_F*MV0lXFZ14T^<#h&>Tt*UFIKv)O=bqhll{#`3a`|j(uUCqx=*{=&O zT-dS}L@0(FJ(}u+%*~C_Wkv{)M4vv0$o6TNi-yTppR7Weq6*a}>#SbXRSzSSlDcl( z0o=T$SG2ubB`}=8ih!L(?p~Yq_`D#reIT2;t*kj^y;m#y8Kbf6sN(#s`@SIwDe~A? zIHFg`IQwmaxWzLVI}WnXEQFG~*{XsTg)+Wx8uONd@On}YD3ryB(0!|Umw2eN1U-r8 zJTB8bRPrb!)EBE3ZIu}^{fgyp6>alBesDKYIOTS~Q+J_4O?iIyQdd%cNa{{7*q z0?k)*g(=KsChHhIQex+t?)NXbTv(uU@bTU~dtRo#{_)>K@ra=gY6%)xcU-=V@n;h5 zAwBRqsW*qy-mpIVV+=Vr!7qb*&EPJvv%*EG!Z1bw5nEy?inTy1js|1k= z%Y2SZXTRyuS|@zE!qSo`D#&hPiF)87#ZfI7C4n++mx~5wnceSL&&rxZnQi57H*&8vtUyil^9xxwW54RhflG`5DHfzWG{ZkxADGFRd z%Dp6HY4WS|UH0x6r^*d>WT*(quXczF&(AEgFaWnW<2(3O8ersIRx_tdy(F;z=EK$c zNT6cK&g4?`%wJ!uz&bpq0ko_cNHhcAb&xN)m8FN_+ zEGwBV{GojuTAPg^bWs3*l>(Ueh|sNGsVM=mYo8RWTFRke^75ZO`ZkGUcNw9&{OJ5E zwGzkf`}Zr4yh^P@cS65#8e2Brf|_op)tJo8mz*m;*DuaH(jV?4zP3=9$uqN%Vy-t= zLu!XA6ZiIu0y8xn+wG)M4x@&+z_NQnR!`Sph%!vELu0|R{}w= z3DV(%TV=Bf=YAKI)QEe#tSn`eRj)ZdxJgA_bE1@yTgO-aIhNoWUXMRbk?q_<1&~#BJ{_@vDt#Mc!@X(3(Q_om04S2fgEC+`jim2d6KZ3v094e}0^6b8Y5U z)-qN1^2f`P@mwR2yC~CQk!n69;D}>IeYG%;Pn9g2CGq|5Toz3z21RTw%Cj%}Mc+zd z6p~y^NU0G{yQwU4lH_zHslROMtoN(AXp%s5V%L&ULp$92xc!sg*JzE;`k%Iodrtj* zlX8Ax3lcIUsu8@g2I7!BSWK-H7pY6}_txTJ&vjW2n4WRR-hTvpjnVH$be*nuzxOFp zOOowt@6X-UG!1T)es3XsbO*oJzbbC1|9$fX+2o~V(F(F>JVZCR^T^JxWM+dM(OpU$ zmOlAcz49GXxCjioH11644>#L1UhOL^m+ZSO3%_=}cXLKvJrRVTW3-sA>(_k!vOnP!ngya0D~WJyYc6c`N#OXc#|+d2^EHF zim{&!Cu<3R!~bU*^Bw8z-Z4(YY)0nIs+~y0DB<#tQjn6;0;MrMJz{xg|LA@9n{ICe zKj44^Nt9W+J!1~3)01)Bg)=(5+cS5${%+4Ibd9pykOVjFm0pIwN|Tsp73OSmZ_J#q zDpsLXSJOW~bJE?F)!MfqS7r9?9oFVq+U@Tu_A}F_R~F2A^lU|aUIn7&r-RI~SBx<~ zwtAX5U~WOPFeJXjOU5DaaunF z@u}lB0pGtw<9VB_Sr;AG%j;US@}PHH$dEVrr1vSSK<{C*by*7wPd1-im|5DjDN$)- zutt(rqCjTWZrFh+vryLUrFnDLmWqiH_lo)lg*4F%7`=-5_M%0Sj`IdXqVL8DAGuok z8En64R;bGVds_d6c%t@H^wv4T@O-Buwk{(W8`}JeTUy@|@#yxO@x)`p7k&q+Tzeum zA``QeZ1`P|dU>s!R=h8038H+j$(tN#0Dp}*09LeGxUNl#zYs;Wa6naBdnZ7W zW%9qSDf_@DR!GJh8M@zq9^Z0E|fGTg`4 z<}>|2=}nO~(s7b=+$$5#z`cvgpAXrmfZ*v211`P|ZQHM+`R|RK-qlST+Iut1JUTev z|D%x34MKr~nDDRnm!;gXc4*I|yoez1-Fg10)g6rpPAXkmFL5=0Lrb3rHx3c90~zF= z(kE_iC&tRUSNQ!i0@don(zS*sO~rmUM&QzkFA^yzm8Q+fem;22b{$`<@mO}uZ<;Xa z>eqo1)UD{VL;Mu(m|fykULx&$*5I2V!GSiWxY4g^+OxkRqsKyPpBSOmPf4g$;D(#d z!&iJi5^)oM^d1drC!WX`X_D#7yUv$3T?yFu>B_B9dy=wQA6Bwo)a#dSQ5>m@uoSL3 zFS$ZR;uqDaaVtNBsmHWVIgpsI2hg*6YoHRZ9GAF-XEu5KQ#hQpe~4&WR`eYwWLA%} z+ls>cz=ykFV8B@sWD%yP-wo39OdSiQlJ?9KDrC7gQOT&Q&vxC3ZgSETOH^yP&RenM z*NH2Y2^oJy!+72JbBRi;5pET8>ntl!c)YofKg@Zkon9;oGW2JM-cm@d6q zo1+_2=uN1gAa|%XOO|qyvLr7ipP2XR?>j#2Y$h;0K%;;_AvE-|h1Nk&=4n3h zW8-&$4SBJs$YMTv2yd_4K8hO<)=lgzQmxQ?e+tU4k50mG%Wr!LotwhC`;z6s3H;#| zKI(tc@~r*n-kv!TM=DeWyB4UES=M9-Ipx_}Z-fW{+2(AjzMv3c)+%sKF~$;M@m(G> zG+Ju(UM)UuNUJFUPxXKE<6|z)?FCvpNM8^*AU9hEXli8s>Zd<`SdO+HPTA`}_M?hf zdT5?ON*5W4i=Jij-ozrpt?4g>PkD^F>7+$_9H@51tX=4L(9WCS?OJgBd;F>r1;>tk zNzq?FFN|FS$E-pUg-b6U`I<^=WVGqhODG{f_HpijJO9v&Dk*Hc=3hFZa zgoGV%8sr@5WBVuy&hgAXw$DMW?bnxym#^K-zins4fHQ=qg!(`p?rl0p4KA2De7P`R zf-`AAaj+I!`nzQ(p7}{oz0(@*&NUVFSBjq5%nz0QmAW8?OQ?|+w8U`3%@^t|mE+ti=M%)4-ab37kJ$Rqow46y=I1(kcBUr)5%7>FTLx<}yFlSAWu zECY?6f|XfKlO>^&0s=G`ODJ>4Nn<egVLDwne@x>&n5gkcld^iF(2L2 zV)Sn(GM%?F|4sBnh?;i&tr|GB!oGNr{`V%lfLvAdmjhzm|Gjp^>)EBIq|S3W{p2pe z_<`8zH;086j)+ck*{T1_W7#9xS{5qOUVP?@Afg{97vV-6p6AIUB~!QPWlJO6c9P?- zeI?#D3tT$rA<}&0gK1b7f(DnbVNAiwy=Potg{#{u_ zx6#+T-O-Ere;QMKCAzVg;o$3za+dV6hxh)S57p!6or?+UV*=%{4V=t!nWh`5JCBf$e&L!O*GLO1apVQTQgwo> z1;1~_VQHfCKUPM4>WdEpd&V864!E@KTSJXg;QS%hM4#v?&+0?3=PYD-a;Dprh|I7_ ztu~>*HlJN6eR_q!pS)M(q3$=g=OBmXffH`D6y87I46y-yJSO2w=8YTx3AB}R)G}0; zydEMhcf?igI-D6I?v@7+Bx!HI=MOyiHD6KsSS|Q#;Idx*VItqoxi^L9pJIBPxu!Et zTv(jBLt5C|cTh=qfK{y|cvLB*@W*9FcC0^QE$Q_&Lrmt^R6aQdB$AR(kk6#(6Sy@$! zUAF=E!`a9h5m(M`gf;nk;$o9jQj9g7)(yiYC7v9gRce1tyoFx7rJ`1-+s%%ckWm6V zrkQfd#!0kHy?ay8K-s^pQe-l-TNDm2>@jFcRshxhxL!ZGeU=|2WSjl)J+6vHSHZ}$ zi#xln^qte?uJqivf#y4L5XldwLYNG4@Q0Ln- zNNPqFrx%5*3lA{!%V)$4@YGMKiW1kZquf4$k0V6hzHez&9+K z`B}(n4?<`eRibk@{kgCI)jkx6lEIr5ncQ@pb0YgA3SA5oh6j)?6d5rw=L~Z0c$zol~ zt5egI!C9yk7;ry^L~02>-jz5W%G{+WUd3Zv^&!gj^b{2}h}{}<{Ls+whM`OU^C~3K zh$}b(FSBl^3{T-HuhT{_Pq#4H)|f&9-Sg~2GIHQoH#w_`LURzUmNf!$yCOn43q+ zK*H}v^~~%N^N;7yA9cvnJi^!dQ@7DD`V2wW>VgH*Iu{A$=uK&p4!q-sY&8~i21Q^0 z6KKIG!ApVDEGLdva?h8cm4YCxc?lBs9;KcKd+#D0ni4fZ_|$ZIBZX=!Ua=FS29yc! z5~Yt6{+rix+9qMk8`M4;PXF_=r{ciK(xaUF;&mU-oqPf#Cv${Ydy4;#f7bUabW1+aESNVpB#)&suNq!`CGaT3 z*naP|&lbNNl&z}5Wy+il`VxVi9-1gpVavrC8>>kFS)y=GjAji}`#$*tTU4tMO1spT?{kdo4IjTv06 zz2-55CXIaB3D2vNbGQ1-Kg4<8wfI-0Ly8Q1zmsfVuvuEo;+)guEJEhL6lUCZb^dn? zeJYVm6#I2H$-jJ>KHo1NG4~^M*kB$(JOAAt%8nj7PW=N7X_be>0{VKdUsyPe$1<3= zh=QuG+ZXSxHJ)?f1$s>hj=lVIKpQz^4VeDW4`!15EHaIku+>1F_Fig@&P}fbvW!0g zp6Qw0TyjjXYWk0cpxp_kh*-qP(gDnX}iw7XJCMK(tvIs4?uwMC8`Th8IV?f35c`v-Qs zUeD*_^*kQW$8-J9+%}&`=a%1!#-LEudkoSI`lX|z>mW7P+rRWh4KL@duHviUprnRA z2imuVMSb(ba>Q!%H=zEeXX3E82$8o1?ax*2z9qr>zC_jn31S&=%s0DDhUvd};sr!a zUJT+bP8&!kE|^0%Zw(6Wd%$m3VR`AfEfjfq=st`!U0|^9%2DCD#;TT)k#?uqt|HED zrItC=diF%pm+$Oqb2bue9Uw9!(z{Nl5?b&q)*osFFK3m~cvjUxP}ig^xJ_m~WRz3# zu{$KlEBVeUJzdakh4V7A<%%LNO_NHc=__Dkp$^x^F8wahM#e45yEA9&z0SW?Y#tv* z7JiK8$%8g8?T|~74E^6&4a)rXiq30AlXp|VD_Z>oMj&8j0t2aFiPwC&qqC0OO3%d| z{6_xOr3a2g$DwPUbjJJLjD$kJ@+l zglALpG_ch9^`rN~*KuDbPqL~+u6CB&HxpSTY}R+uz!ZOS6@(hprY!F9*qkegvQJr!55{oK)kn?6cW z0zN%tW93C5hA?VUv<;@+-| zEt@Zd=O;TQn;zaLE2-EFW%!}33{GVjjEWnzP~7(byGLMCu}q_=cCgKT^_R0?)u;13 zFL$%4&0nS!4`%-jL_%L1=C9h$bER^k~`H(rBsV26h%A6qm>K4cjkV(q=j9eIk3SF zeGy=e^4Ieu(R1ID!|M&U>nAALHA5Qu5nM43%dnZRNT7CI5LjM2#@hJ8A8G#nxEk-* z-%&?&Fe#sofl-eptV~lgiYepEN-Jl^JW#widDgyJ37`KcVMrh$Bzj5r_*AT2O{`#y zZa3E?_+uOQmgnDjv}}Byf1@&`f`{`_SzcQ!LY(PMww_Y}yWg^?_^3ZW=<*~qqvR2gT0<4UCkXD!G-^;JPpX*w>e!di`W3Cu~>KXc7sE7!gRvo)< z^NF2?UV`O~r37rSc4GR@8EY6U0_@o#_>Mg;Uq1Tkb`_FDFqPky=w(|q#BvpYDQOzR zeW&j%k-~8NccUJVhi1|t-v@||KA02sus@?0pf_XGaZUS09U4rY&I-nAzu06=-`!jJ|<86)Dqh^q@1wl$j6k@SBraNGHd9G6OWi!bQ$By<(GUk zytcqj6l~G`v@tJX=ZGMHZE|zmWDrh=N~fDfb@pTw?moBkKwF_BR;D+)S&P)na|qn8 z$dWsB!ukyF$oX;pDh+=elON8l-@-A+qER!b^|tRVHAfPx^|P2fGaGeGcJ;4M&H>jO zA@#e-Fub?O$~HFak7gjtO`Tu0Mq!~{14`W%i-K_Qwv|(-S z%oKNiKo$N4-I+>XVyEb*;nEy`b-c;49H1+)>e)x1mV=@@F}HKpC4rTRJ(0d)Qoz+% z-lqG0DgJqX;gmwhgJ_rh8#!cFH27MA%EKKg2%fu3zoVPhVKQU?C*susjZhn&kJ_TpzeKiUJ?tb94 z6$L20SK|xI#FnNelVHBUW9{jVQgCc0kGCLId(}V|Tu8asy?;#G9o9cxKsgUfY5YhZ z>Y>)*BHUOZvxL=lsmQtFtM1?QcE#H8=XNywK~rrqxu69CzAoDNXX*dt@ydu7y zjy!lDnG3Ie0s-l(kr>c5&YA<)tx!ukjKnt*bM^%i#?PBN`eLS!3!&xv2U)6v?y1Fe zW=%1gyM{JEM1)03_paZu8vASkYGB&ZGPcBHT%r)>`;B=SzGQGBBg^vZq;BfOO<5Ju zr^7L04%6}qL29nG?v0-wy&5<%@}2kPZdU6KPX}${VIK4LUyl*j+hUtW7nN(b-fQgA z_uUmgnw8?FJ{`!x&WA;<&Y-rB{=LAz9`?*=MXUwoQ!+c$aq_t3R=!ezStz3UXg@Ne z?Zy|1e7sw1c4>1qaiTQ=E3bVmtiM}fbugVXm3}e!bFj#?8b+}UTa{?_dhR70z9JOj zIIWk=%~hRX(j#sn?=(_(5J{Bf*Ar!7+*q|WweOqNShSl>)BQUB zx5Ep4x04THDlHN9WYUbYFJbrLtb0ckE$W;GWw_zt(IdihdKaviSONJum)140XfYrc zk~3=#CpfS4S?BoE@WmM_*@;r@(d3K%-r`;sIJ%lw*Pn2A_FKiDrXT6EnWiK$3z=*` zW&x%4c~#5oYZvCPiV1Pnm@KgH0UOU9TWIYhH?1=ySpKr{lrqRGB$9XoO8cd;AGYzp z1+<)bU;becOch)*p4XoG>;6&JI#qc!F+~P(;`ni1$ge;QGHev}!Ok!Fi(s)bxk&8d zbJ_2POMUCVzc;&Xy-aZ6V!-G`tfJV7y1KR6l3p7p%(=9C#e*OePk?`As)n7$%-hbc zU7A*h*jNi!!ja-$LK7n0lRBhlLu(=BjWT;Rp7Y?N^A2RTFZ}s!K0n`tl&8E&%&AYT z!6tE)uFUFP2P9fRUh_IF`07lbJxjim18VEsfrz4BY?i?9i<6?3Lmc3L%JV^PP>v~& zyE>-8fm(axc23hL;XOZ{@-9FlCr$cMN~vT=FpX~8D2@$T|Btt`8l6lD{B~)MjpRHQ z&=$_WLrA@0W zTzt@r`_@rj?eqC03b1M~qQuNNfkQ0MurhQ;(jfL90}y0(f@9qm^GHXGI&q(#z@Mh7 zVNR<-8_t{UvB#a&)z0cl$|t+xrs;-0$3?ez;Sbtjf6rv6b=fzBEbQq5>VGT6Pqizb zsv7Sx+D+@*ea*Uq_GKT2gD0%4&0Gx36SD?`HK5mrkum(m*axdXcSLDP(kq-b|Q?R$V$2WcpXGzJruRi0sfyB z)U`=RzvLvJ``;UouL0V*Cd}Opo9fCL{cr^=--O%soQy=6oC78qcr-`x5j2D6< z4+dbi*(&rEIV32i?89a`qhmY=fBX>Q{v3u=&VAz3j-+tUmt7}xm7xo^Q+}OFAQT_~ zGyT=MFH2x~YDFAUl}@ZQprwocH{fLoV?Kf^ceQ?k9=-^hufb?T_0)g2?M4^d;USX> zsd`wH9S##`pc;4Pd&uu7Jrd!fiw58wrt3a6X+uM|`*Owu3D$eb+vh(sZK-p-I29;w zJluLVO${R-cpUbMei>y9DX#m`@)s0<|Cw(tD_4Sy$!2R|0k0V=kPiQEh^4L^+|4pWu5?0Q-9{J4-0@uAiGH{in+aj9^#R9oyhX z@w#0*^)nC=S1_^0l(B`z%DKEyhMI`Bs!{jm5!LCt%A9UZgT0YZXcc!8ET4z3>Fz{K ztLApgM0dpyj-BQM%ntEM>x{L~D2{v_zJS>(IDv9>3rsrsc&XpTPfb6C->*X6mnNNk z?SRvH4X-wX4q2P#6CXGE>E4GF7?_Fr{HG1MhdX*9 zBla2nT%S(p5dP-8aeK^ZScc`5A*W(?;#!z5lZr@0~dP^D&2WwlTj zb?WNo#YnULGR@srG;CoF-($lg0sk|%+a}mn3Em+KzfKt6STeZhs+iK?)a^A8${)8_ zY&x3X>{&|=Zv$WadFVzBMHgUS8zb-eM+5ZyWJrd2+4JzLsf)ZqK^pY`J~;lX1}!`kCaQ}%wVABy-*p}D3!Q1d z-MKF~g%H?l;eq|sX*;=OOUs^PsfH~SHOq3+VW-+H?P2pixK3_;#3bW}f`18NWizg! z(Vy{Q-FE4mS}GNDI=AcGSoCH(6qAdP5Z#x4&${Y&$Rft0PW$z%c0p0<40M0Gxcc1! zsaHO{TFwP-9yNFK+oFDNtgJ0fPJiT|F#9p_W5Q+PhnX4meBW9u2A0qQN0OaBZMYti zhN?i0!y6nR$pd!-2Xcs4-l-WTxk~!=`wo+>x5l@$qgMXYn$H}bvLVL+qW~}0pJE$K z*;a~@6X>fV-{zfQXPlWg9aglxromi%oAi1^Pg$K1WrOW_MQ*IYGrv(DY6IT;*a?tC zF`{c4wRc97=jspW^kLJU5@Oz$P)J0e{)a$qlind?{Zu>LR-{<$_M&=}#k~|X_x(*B zsPRw9yROW8{m#ni`zTj4`2wLh}I966q~Q!hrBI@$=m{Hn_@yUrOOQoaQ53Ry~6?a}mQ<><8@6gMp?fJlgz-T0^c8!-~SiL#7|ZuqfzFl9|C$V>eiJI`n;dx%gQ@6V2&&j$i`cQZHQLZ9ks zZ4W<~034We>cm5cThol?5`7<{E9^czJo9cj2W08WMX64tH zeI2kJkjSQ_g64E{y?2c9q|ZEvB4LW{V03k$W78*N=d9KT1%gZc$#HV*KW}CF>0^YX z=7{h1;gj={IvWu=9t13cz%|eI;0hLRh!odyjOq9+2)AtLCf83m9+D_c>{RK$XdtT1 zJ040cSMxEUHN02D_3@YfAhx}jwyaaDHpXTgvE8I&U#K6v%`!hH6uC1h)4v$pBy=J^ zXNa-LojJ2USQ*^!!8H>x%hYY8%N~hXluY7YZjq+!1+E=yyZ8hZ=gTsxgiQFofamP0 zGL5_)aA)8z;6C<#uN@#B;_e1V(_AmOTTeBt7=K)wJhRRklOYoldP}}HAH-Ei%^Yan z9^2}#)T7w+9mUWH>jQHG>yPnef3>puoe9t1J}39G4gg(uD0xIeP7mvKC8wf)ZktgC;}ErV;Fp8!-0vmo=`&V z5?)+^v3T5)+1D;Y5QSWUHYnQL;~WbRm&Hl_1|fHo4kPyTkj}z7yGZp>kIn zmLiWLWrIHbLH^lGGjik<&8o+ku0EY%xHHg3H1x=Vo&doxEPONA_aUBNUyb;bs9x%& zjXH(ecNtV?zL6+Fy5uS}FZ;mSKf9-N*-g=kZ;!}hKBXw(M^S%#*BAXS9;^DadN^us zS)_lL5qtcSf-MD-#AaZhmvSLo1r_vDEa@8)wbUg@PF&Yj*d5IasNrCeIjDDW{zXa? zjt+n#J6dRdT2PjT_MtJ>;aL2t-s2MO3?Xo3FUyxU6@QbfUru-c6@~CZ^`EFfm90yE z8pgIdzBgxbEkO1-QCjr6Eh)F@F6UM>uCd)tvIQSec=}dS^jQm&9QK=I6yeHlO8R5G zVK38&Msbniq{Pssw7I70RB@;Z^oiQWGl(Q8zOD|N)rC3>QCq~T;ccP5m-cMLUK5Uu z7=AQAl;`9uhGD8>;uf}z_T76a*|cH4!+O%UuYv0YP*@#U&Omx?pc99{{&b*NV~#;d zf;z3F%={>vEUS$U-HRP9_kxjUEVNa>hlxC9Oh&>ofeGdH-x+=ba;m$<699r)*k9C) zV((>{rU)`c))s-lx~UV`0zp>c1ha1;o^X7Zo#Owb4Gk(HLT)i({kke4DmPVdw~+cM z+DYN@xOcasFeNrRt%k3@GXoa|+~G&wB7q)X^>>W^PxH;TC66=X`^>ofW>}(*5Tpq+ zum><_F;%q-s|LE=^KNqFE4NDZ@CH`u;bIe$b4@wfVMF-(o}JOR&3owB8+M{3I1{G- zwE%wPg9A<`Ncf-)^%dfqKB`nj-$o1e$k@?#?*M-JMQIg2ns34^WOc>AKUT!t*8dm0 z*C#^}TIbNYm6OBJNLf9)Ilnd^7ekI<|C0PT-TVC1?*iL?C*kp=FM8N`(7_4{Hlh(* zd#>&5T|dEGqhfLBu(|$wxd{g)fyjcXpj(>~wDTZyv->bB!=Jq-4T?~N6)hJV!cYlI((P_TJ4vyKb3P(GS>?w$#57j_@H)XL3Uu{d9KzE&iVIRmh%gjzV&a`IB*qoBpEF$qhr{&9{E+ zH*K-A|JCoR)1DKI~!w7y+G0b^{f9A24EB{^570I~>)r6_Z z4jNAwYcaXSb9YWYd4Jx&zp$>b-%U@q*31z1o2V-TC=1eeN9P|OY(SGteG zhl7*};QmX;ofYfX;W3rCOL~;04)rd?4XZyxjvuor%}a%tnCVA|>U>>#QhUHa%Uh*d zfZInA5Q?c!7glH%nb@G^&A-(kTRB~pi(IY`9?%lzNGRwD-tc^#{ZQ|3u?)Wa#}huZ zS<=;duK0z}<9C<-B4PY?#neN~Q9ObZCeFmR)3VXo zQjd}M#ff=F5h&Ws*MrC5f^wY?3~&{&z%*jZE&iKwj&R8@dmk=*8%MIo&7)aW(Jiq# zf!_^>8JXEbeOG&#rfCn2iBpFRuJy1Qdk)2h)sgo%Ql0$Rj$tbE0yJ{v{D&rnUDN{( z4ie6f+hdI@7HoG>3`vJ>eQ-R1qPFxUXrrpHLZnH{^?StiGyN~~1sw7k(BD@5)KP&9 z_rLYzG2=&n=8wiJ+0?3%sI1i0B5fD$R8)=u#SWq_CYXXi0sj1H$|Mn;{ zF`oPIul>8okop^Us%}3(mn_^3rMw-Yw0}&^_E?cwUfwF&a8lrhQ-nAYmuSJylqI2# zFn+&Cv4HDx;h^r5Z|QfqPSP8b#V-c>N9~hJ1-c<@V_OV=a0wPPt%3_xNTMe zKa$S8`*2Tj*8A3$Q%xu#>(Oj|yXKbs?#?4c4(WHC1|YJK#Jw-U0Tm;Y%A?;|v}r1&*66gJS+$$ztL z{98#%^R_H+`}uUB@65Sm7T@ zlCduhp7A&An*-#w@P&uS@E}u5$G1=AGJwa|)2ZfG@LNy5??lkY6AS#e$}-+G%SmOM zr>?}!?>{FM*&47%&4uJ-zAg9$XRKER*@`|ltHH<088u%J`>@#ZJiv`G6`?#>WB#HoF0U`vEat8jV=QnX6`2su=rC)$J5+p_9|MO*` zrFyA1-+f=CzmDAeVZUF3gWr$cA^2Ng`qh78cp=l{C@I>nKx?kJHpcswQ`}zm==gNC zl1R~pJgv{wL!0ULfM!G|N3>Gz(!Nn7(LhQo_@-jsK@z1%t}eXc0;HASu;)kxe@7T7 z;jfe6lL9fhnh!=#V)vi=j@igr!R_V_i;+kd0>q?AhPGQzNR-OQ*ZdgP8Vo}GCMstX z^OC=5{cG@*E3EHMSStb~vTh@gydDE=zK)nT5rYHPEIX}}3HDI_uH6U1H#p(R?FUndYAj#fHF*TbwH7Z5^d#dV!o1GFS$i$ER&hqs zBqdFV-^kC~A_zUlT!G~GQanFftL0*{rLxCZE!*$cF;0gvIFO|ef#k~$9YkW!GfhmxZ$GM|F zFFV4Yxo6|P%uAH=)mQsjfRWINi*px@(~iZRvgH%z#`p5u+usl5s<2^t&A^eJiD-2H zG~RvzT*=;Kc1E{@OfCtrm|ki+R<>=m{}`F;FJC$ z46gd?hsLeQ;sCz;}tn+=1843!CT=%?Cor%IsZqAsE7eyI1+e?~wcPYo` zFEuk@qi%or-zjvt3|i$pwe#l0wl8eZkjY6wpY9|IK85eFVp*&_rvXz&vs0y!Q_1Ci z0y1Nqo|j!pE?BWFV)W6m&4_irP4}MIz%QT-HN9@V=s8PDmSx&;b#sMtV{NsOpH}#2 z+euA`@Erc%awBiUZ<3NW>|oLZvuE&`2QH-RHAitYJguFIh~fiuNcuFVGgmqFhuW(8 z`K=?~Tm^4>_b8M*=$ZK$Mv!H>{h(EC+@Bgc$o~5;|5k>y806q=aP@*}D!dh;A+4Vd zdg%%TQj(M?KM$O1C3O0mh~0mtQk|+T5)uo0ep+rMC`i>a(bvo7y53GPMW@V>5GC28 z6ie*Ipw8NLzPj5>|I)$&uK-UNMpJ z<;~GMy;BEH^!=$X#WwUEp2lDP#wwJhX$ZwBB3OlYT$dMtH$kz`6LFeMvT-{J593VN zFoW%=Qy#q4+{TVhXF-DD39%P@#83U^ET;y2pl%22n&?%7-rP5QCtFI@RZRIhNtUiIr547Nj&-4q#!u&W8dS@x6l4Z>R(1Y)L-jR2W5F-mX~NbDZH~1 z-w``AV#^z>TyApYSnTT(Q8vgOQ)9dva1l`52gLq z6UGnT2d3iE(jcQp>@IKed&yx6LoWEZA{u;Q&Wi3nXA#oV4^NMz7)(_?VKB^2?jo|L zc8#N0fBlQ4;?KOYWP-W+fS+Y($=>v0uECD!#XHxGh{FNqz;)AIWm4$in#Fe8WIp%@nYjKQLA~&$?pRub$I4U{4 z6+}Pf0Q-Dm_TM$IzWV5*U1~aHS!7@BjAH@PJs(<$_qy8!88*b#rJa_W?@;OQ^YKzI zAXTkAwE562KcCLlIJGfiH6J(KuPhFG^_(0FHQN=@8#oz$hTnW=Uc$I!DpxfV- zUGy(Gj_G_-;l++xpzzgRb8!`q%xRG)3{c~hbCD~QJ}3#Pfm8K( zWUJ8#}tIXpDaLf%v0L zVnYIC&Y9Q9zvdnji=Ey%KQQ^_(|iFLn;v(IE8&WU=E7>ial)!clKkJ#s2zcs4YqG8 zOY<14u?5?5bX31(KjK>&tRjD(vyR$p_g$%IBJY{QD$tcBP?H?o%k1KfwDaK3g3!3w z9r2`9Dy9E}MBa<&NTWY$yBmB<{r=Z>kKHDFRwqAn!(RTjZeK(uQiv_t{=1LH1E+*J z$uTbpl_IQi8dd|v{lKDO{|FJ}Svst-T}Yq{RFAd$xk}Tkcjp4rNDHbh2wWi&KD=iR zzg?MP2=|-SK-#roAJs4@v4AvD@J*3$gqTo2OG3{ej@SiSdTEQveu8C$@nz;AMn_=< z$WwA7-r5pNk58TRd1y!tRXz9aH{zW7NQejOLgbI0`E(wQ{x?6(UPSF$NrnJ}Q2YVR zweh}b5B)2k;9oJL-_NS%eWqu57BvqEdx?2^LfFpMoCIjNUp5Eky?5?+d2961e-BSS zb;&vN?h*qX*te@J2#hhdr5>2CLMEP2*nd>#ui^C`OO3`Jd!NK(KKjw9(}FNhgvL7m zG6EZ*uQZ--7S+ZI0~h>?2;Yo97AmA^jg6w=oU{+Pf9cHuIhN7ocr4{0rrx^xV1Ng) zb!t3xe*7kcIUF{U9kD?66^G*-AiAwYBZ&;8buI~Mne$Y#U6=16{Lb(TWKOoCPdx;+ zEa9~vt7GH~;qiH^%;Qt+zV^<-RjO3u%YdlzNVlbY-?wJcg?A3PMB+o!ev7QVy(>0z zClqk_W}iJlfNRmkpcPHQPrqJ^3<}>;y5kp6OMf}HaD4l}Fug(bq`4A85-fiyg23CB zf3PEWV|D7&F7(lbykryDW#@AmGEHfr;|I1U39VZed;Z$xslGhhw9DZOH%Xwf^M|LN z8g5TDG5PalR%N@q)zxEaP04+qM6j7(>&;T%lzfo5u%4$HFm2TR?kQnYw&*v5P7Hq7 zZ|ks|ptf?8t?pA7Y=Pz>dyY+xe6fA32cw++!!UT#^hFOvXbIw>>%oDCTYsB1ndpra zLbfO%&Wu12o%of!>V2E3_^BW40(E{cxekHlAjIzL8HlDx=I|si(YH0Bo=5DyRDfHA zD-FETai|Q)sLiRTb1lV|xN@%oD71{`ljaOU1;R#~X_mvLBlO_cel>MJ|}!6c3`zB7YJs2ty-rKd~)Q z`|o@)lVHhiDh}l~MUO7TxLzSIPDb>sk3NW-+joBQtrg|iR(*tAZ7d=#Y-sA#)Sw28 z;KSpUO!jSc!8k*2euP!cwtCj=NvJuXp?_P@RKZx6!_2U7BwodK!6dKd+^I zP9AUQA&Z)!MxUk?ai}BWOOarIIqCH2HLu(t^b?`P+CcONW%zN#vj8qG<@A1cpGI?1 zY`3!6oz6S^5j@XitFz(vpU-WU{g65NxGFAII*4Z;;>mu&@vm=F`g^d^l8TMHZjxW%Uqz1Y+__nu%l}_jSL)U@Lw(R_hW`1ly_~5Pyw8PX(YxDM zNdw+qxcrA+BPQ_`Rs|kv1<`Um^*QN&;$6|8W-i|?BpkM&LCjjTy{)- z!4@#NHV2Qr*fUo@f{I?-cQLeULX3yy5iNnf(AQTuzc_Ivf2(rbKKADMA~K0$@pu&e z7DW&;j8o!BDATcTU<5s;QM@C^l4Ybu$LD#j1?Tln0BFhH@B>{eI96*4&}mTdq;dCWcyUdQ#0hw$zwC=~>3X*LLOn?vQ)1(&p=T zzwORTfBo#bS*w2c4s=IwaY!RGx<~&8SVZX_FECTu`LTChhh@|foZlHlD-8NC58Pu+ zpJFCa#$RC}oF_UDx98$%_$$FIzBk)_Y6uV*I$@$tHkg91xbYw0!w~RDp*jqvAg(`q zXFv1{#kS|H;!Ag8sGi)tSLHl|j@8CS-CZr=hN`cgdx@FVM1K959Pr3K$HdF7HSW6o zr7E2vVcy#P16PlaU-QYf-2BPtxW(JK9a&&ba??q)5HI~|m0aK(y=13(fn=K6Fz<$WC3F~EX1(GpCh*h08U zc-Am@A8Wi=Dt_%F*DFSm`z8aXBWtB*!$>XQI{%B{l2b11F!5`i4GWhpMT;#fnbG zs*SE_7%-$xoRg$aogxxc<5=06RKhzKW>vX7=jG^%jPIsiG8RdE1qo~mncAxbJ#9^^ zOI67Um19c9M}8*i^4&3tp)&5U56_excr;EieYJ)dvE7R}v439F9xBDNmoFnIKS3oT z=IvXZ+%HXUS_G4Hcviw|<#IiThVu7&@4cS=L2ZD3eA8=<6WaStR%72DZf~D^%Ko>K zAN;!RLT@9Yv|N8DnkElBwEY=pv@*-+m+X}*AzZuK*p32=E3CfJN{JdK`b;7>Kom&u zV}Ar~pGY_X;~XLqS{K2R_E%Vl98nj6+ice3+ROs`iu1~6uQGf*6_g|0LrnV!S1h_Oja0Ag-VMDA^Gc!kupFSAdZ~-TcNCGX+?IeJKVzwC)XMl%bv4$S zQab}2Gbw?Uy0KML%pJ!0)<@6v(s^(5M^3;0g>U-{I#FkqNvY||QFSMA&a?_E1y11y zI;Il|5SFccD>$bFC_dk`NhY)!a>oG@g_Ffi5Tg-@h-Lx~6c>sHNpZaRt9q*{}z_N1;PBq@6S_e!n0 z&j{F+{t|mRT3E=UVNRdk+2A2{WyJ7OHan!mN~tIeeSeyl`!}S26W*)|*gRj~ZpHJm zZsM6+_y0mDvYhwxOuct7PCl`Q^6eFY)Iz}g%irFiaDpnO9*CJr9(#U^Yvt4mc)Ktm z7n#~l>`qkuGFROHT40(pd5k(uAO1ZTQ+m-~8S7t0FWSoz*^bBW;aCP3-A$kftiA^S zvETn3T_Blo(GUoO5EMHAL<{(UH$pWP%P2S4lDH@qNFXi6bK&Pt z&fnwbo4HXXTTKo*28l7(-S0J}p}81sf#>HacwL~mk+_j?R@igFuWgja5N?zN=SjLD z_p~0%k$6D^ShH`X7!YXKd%|EPrjwtVRF64?va@o*y!k`iyFXPMwbM@0=naKhn%`_TbH%tVX2_6~IO+8Pgf9uFJ~)_(Yid;26tI;^DU2uLR2A-{#NK zZFr{+&=*fa?JALK7@mQ|(j;e0Zs`QH4&G{J&)V(z^@-j`tAG*2N_k36XL-3FRmGXv z7>osNScIU#T5O>e##8vl1rDK@wn>zdB5q9`iSS<$_xLv^nO}(eyLc-BVhvIhx_JaH zAhOC&!LIvy2}=@Psi5qU$hmqMDjwZW0O2RKmw3Fct6Dh8(GY9r3{kDhUSwoz8HK(GN+;-9Gj9S6^%zsxo4qM+OZQmo;;6oLhu`#=r22I1Zo;?f4e6Tb^l zu+Ubv!MWLB-W!NsKt|nCQ|G<9@Nr(++obd=MXg%jrR!M>lj&Ac)JO})nQH^vT3e{n z;A3)}@vURgSz!)as&IlkEBh-I+}szB1{TGcRlIE!Q5m3emD%^XdQyZb@_t1GR;md( ze*oyQ&L`Qqkl;zU49Nh=!~z$wYIvaOuaBMC!Ym`br)?LGcW8uqtvg&$fg z2n0>}d#V^~10DaVx5hjBI!Os5 z5wruREL7Ei+ohFMJOY3+^&(p+Zy;O@vrmRqD6<#f`vtxjI7w)A8dXQ<6>|O!|2qfd zIaP#%I7yud8%1nY7_FDXaR`n9c;q)Enk{IBA2LM%#cMMc%3e^X7&q+BS|0UZZDxuf zD2g0&5K0Kjeyq7^5<#B{1{>0C1YRT&0S$41XT5Vr{1S)RA4qi(c0OfKWdxsrm9=7x z2WV4FuDQ&J8SNE6!Oh#V#}3YNJeo`e2UwX|FK!2qTU~zo4=pGHoSVELcOHy!c)5e6 z9uye>+=C(p9+5EDHE8Yot)}4URuDSsApx)Xzp2XEc_M$w@PSI>fAXZMc=vN#;KpAy zIwSsSPi_vgFh;O>)leEjp!fYe|icg>x_$66$E z)6GR8_Rt2o{f@Xl)|l&Zr$pn=W{^A|#f|peg|JTBM*M_F!Dzuf{WWxq#%JgiDZpiW46R#hno1 zn6qK4A=0tU(uTn87srTPcW~dICUXlv$Sm0&HoLX2^V_Bi9X~8^ZGX)w1cEtbZ*6gw zYYEn=)#-XXoO56U6n1o(iN0uO$mMYck>ivU#QaJgbUB~onql#+we-N|Z{oT65y(o> zM= zsh5(#waYld{w~PnMAAfHqBam`E!Yhgz8Igp3sfEdj>aB9s+;qq>_4@~ z6-YuT#V`CU`dC{lIXXs#nf;OoI#iqQCyT^M7jpSO20@o&)da1N3{>=*T*MkTb-8N;mSoKkPlAooO zfEVI)%V7RLxf9TWtvMhh+r7qsbHbv%;};+sFv9yHHBgj0eOQPKVe++-Kiw*c|HaEW zK$at5{`blAM8cuHEVt<-Lfyl7KP;##xOz)#H+X;tG))hvYzGxBV~y%RCl1Rj;05jlBkDgi~P>X=V7&(vOj z!~`MfykrcWEP^5k1J2C8?p83z7X`ZSGMzlS2<{ypIAEriGP1}hn*4-;IKaSbFtU{- z-O3>y6tJlDZDEHs)+_ndax9a+$nO}yMBBdM|Esp8%kgp!9e8E?q;=}Tfxj_#ROX9w z5d8iw9`h3zyX#SRN@(c3q-N_?F&cS}j?YgZn4e_HXU2J4U^>0% z#=jgD0e7~8SNaa3U|AwwdLG2jcxx><2C0JbVpb$;vmIM0IAmfA9e9z={UFE% z9mCFw?Ptng`)xt%+tm|7g6AT@twm5VsjR z*)55X)PmLEBbc((>Ew-giZ;j?!ylIezMHP$l|pAhhdl>Tv%&dSQJV@$NoRDx6d;Bc z40X-1rsK;|(Ol;gF?;iqyF;He9RpZyY&uz{g|e5AAWzj=Wj?QWOC;zDvkDKjQ6v>P zZTf36g`6LLpf~06;tBK%{&s39x|se)4*Tkq}zimMsABNB?7 z_$sM8EOT@3AUr(oImGS|%f;*$PwZN_nH+1*suhb?nDQV%fKlF2Vb_`F@e)z%(qd1BjB$i4>0v{x=>dxDyP(;>w zXj9AagcA_%gVws{t9C56-?V>iYjIUTk+zjY_-x!pP^N+{BCM)NoCj;GzI2IV;t7_0 zK}%uE4P)RE2hJky7Qh}W5HZ$ykVnidP8=e}{4||0Fno%cR(K~QA89%w#FR0HGLs00 zjN|$XNfb1TO$)9R-ABb1LV(&h=J4pen?rCH)|I7kU`<4vXoi7=!t_%T#Y-zSMQwe- z3Li!imIE_ErNRguTRY>2_WaoJ6rmz2(N2Dy?GGJ~&z(+i+hN(A3C%YW?tmPnO z*3#-ngX8XjUEit^IIMIZq}N(3zU@IGZ8ktE{#`2REbpaehc+>7Xc)pytH+qGB>9>t zgG@eq$PyCm53jEO{3DZLv{v=AkQertkw|b6=G@l!hiY3NPly6xnzX7BKQ`xoUwA^C zqcgu6tPa#a4V!iP_q2FGVnB5wWcvk0B$%)YknUohT1cy*(OVBccFZm1Lp+$*NQBSn z4Xv13I2|;iIbI@OnBx-hv_(&@?-}(flI3`n)$6LE(O04)SiSyIbh zi7{r4G5VtSx9}3kV-0ltl`kS3(j1*nAyaEq2E$9hGoxFkAPwN!yimeP1g9oPPtJZn zt6XxfYzcA3=s{EB)iE#j=fpos2yFgJWZZ!R zjb=7w73w845P8H|TF!;-8;dB=K;MW%V$rO*vo!qMJ{AuhpN8P(s_kL>eWy&4^#M0E z5T8NDZ2+d=zBSGsA*`;#(}jYjlFq4@egpk8Y?}xrXCDO`V;|#D$&_uwa$27)4B+*c z@4g_J(n6^a=6Xu9-0smSXZQRw&_YQX{%RNteO#2oSJpz&i~GkJ5P*>P8R!r1kvmlY zdn+4|o6ujTk8Zc%Y~Rc_5-bJjCHdtA2p>Ay95!OAsw`H*G~%V!f2dLsL(k7ua8l-3 z1&iI<70f;t&%Y@Y$W9G&j;<&J7G?zN2;dg@QwSz{5fYw8JSlfy z!?N^*@GtRHxRT7)p77}@G5%XZ%zA1-!tJ6AII#AE#&Q*or=j1KSCt{S5BXRw^u7eV z6z4;_3edfBGY-#k1OJM68#ebn=Qe_?vuv`a@&6{Iq*B_bnd2ZAkSnRCiTvAo;qZjF z5Q;fQUqU&`Gu1&DPyplc^D2qVdL=RvJQSu|lmD(k$K20SJqYC>5bMW?qZu*4j6Z*# z>BdWl&y4%|fbIOYN6*XQY^(ZP2k{ue?tg%pt=KuV6Z3l~bt*SEUH(@yP4A`A_U8+$*_ETg z`d?oWIIV=w$3!6}(0z$wkVh(_g@Ry;0hB{#sB?!}C<3?k688&8|IkyIW8(keA}>cAvc*F<{Q2K6f0kd%xpG3C`&5`U5ZzRz4O;3`-qI}h zJ^LOAs_ld4KE;&D28bnw4EFQCb+6C~t+MKKzaY#(czz>92%H(nqn7iC0X-eAVhI!s zPt51Y6@;jTn>eR#tgDs0Tk=W}=)TU%X0=depd9C>-yCo=s_H%9kP`FB;k9hO|5f{_ z8Wn=y-scJih{un#W0X$YiT|lskh?ZgyrW>~aQ+^>Y9CUGx|K|+HBd$o$b+}{vBL7> zL%>*;Nb&xnC&aCR04l6q5|$sxczt0pIEBp)`d53lgHh9{0p}`U_FZ5X+|HVR)fuw**arF1|tHN`U`nl^b(sjfC)#Q>rA(C{ViU?{^q@u)NAZ!Ci)JF!`4Y8;G<}i z%hS4|kWaAxYwueBp<3VmoMOhI8H13+454jnH$@W3AadGLcBO2LM6@M`NI9*UA%_l9 zDkU08M=~;06oX0!iBjy4nMpF`v_xiQX4d+xe$Vsn`4^t`YF@0*XV!Jy*Wr8L_xHLk zF@@tc;O^q8Qm^K!{xl4m?Tz8=zGYwv=}LIB`Q*8C62`-`T59kxDOv3l{Up0ys}^?n8y(GaB$*G2z;nkG=#Go1S?z@K9Dx_1}%EA3n=o1$JM&MR=C- z!37Jq+rf1zkgCYi84~dS_=^kd(t<5KpqQ01>+XfY>d&IOy~2q9$>BejsvObu(B>S{ z;!?sXRrFU;2|eJs!6u@AMJp3nmeh`%x#U#j%MYZVG&JLkyez8 z9MeR*AQ4)rocisH23&{%)+(_}+hPW@fE)VtSzW_0adGCyVTRziJ=gVff zwTluA*O&Shjx-U=a)B3yipyZ}P)!sbc=I>rQ|MUWB-rmb z-rqRPG|1=^?wU;n{`?i3tS|}NRqBtU(}d}kR?(_k^OO$9S>s`(Eo@Z&2?{E9HGQju zr^yyF=6uog6b7xIVp`*YQg{K*tnQzIw6Qlf!9&7)|d>Wgng?=R6;r!_BXanFRh+eN) zAEloQz?e?^`nMD`32Zbu*AAlyx2aMOHWAUBX74`+E~+bRKs^`WNghMtI}CQ;Y-c@l z1YV88+e{{wsl)h^y~?jy|7%KC_@Mhs?zySCdExT7J05giia^8wxTOx)*FGAHAkMn{TO<2$>$^%74(6K?}Gpqm>$jPiHu( z>Jctm)m#>vxwVke_=jbL>}(-vzSQ6BF;93Z5A0rWMK_pT{4}me8@7mpqR`-=vDqBd z+Y>bAA9jaXla+C{Uq1MYzwbz3YjYwUJ?OL>#QNKgl&u}8F?iJl68?$vqZbLKd{E%4OD$=uCh9RzFoKagu-PY<;_k zEA!Ha(pWp}^?wQb*Uq#yp*{|N!DY#-0eZ(K;m-TeKIaeoz=Hyw*?-du+lUY#p>8J( zY*+bGq_YClpEi!w&~ag!K!&YjS4psrI5X-?Rn9{)0Limh8UXeQzKx}Ug^xOq^ZtDB zS>y)AZ9!f8hdmqf{KV)k1=I81r$Tm~TjBAo#PGp?^aCg^)F52Sd9kcY6@kB^cw_#w zq}w^_&et^K%i2Vw;s@rI=^*FWWxhD$wkErebCyhjZk^5*` zS7UrvTK!`lzGV^o8_4is3-u3shp-^I9X@;&qe~}C!Zac%cPX#I=55RiX5h2;qYS(8 zQ(w8xSNh~1!Q~EVBlnR-(v_=U8$ho;=Qp%(^(e3KAW)036z&nVbl2y*oly5+x8TB_ zf@7^y>PkAKHn{}%>$j^{)M!+^D@fLb!CZvR|ihb&IqW_zNiFm^PIe!z?#iMYWMU_kuu0w zucmjrZ7INKR2xPUS8?#Vl~V1xUXeN+RgG8$HS8PoMgQvV?dkUQ{;fk67fI15Ij6pXV zI+=}|5jw=nY&$8P&;)Y(_P?CKHTj-sXx>;{+Kc$rJK2te9)I@-&U=M!eHFzk-)$h< z75sN#GK+VG)wiJg zP@&ye-d)o(u5?m#KM>!L4xKCx!|D%VlZy4n*J|Dg`WOf)<|G@qdn+$Q(u->~Ua6Y0 z-Bp}L{^82d!aXSsZKCyWl)Fc9zTAANd zk*S@Rl!t!_r5QcCK)Y(!+z2d$$00{tQZAaXPbz`NdnwY3wyONkK4(V7^_7m4A|1lo zrCjs+4dO_uIo7S*aapKy;Q(`*lum}!9lt4QJTjEKE4@?c3epNLyyLJU`*{1&9%m?q z?w2ROQpD9J&gV>*H#BGY^QVj#)XN{9zyud6X)*SiI|5@(o&nqT8pRYfxzj5(>Vt?b zYHvfDQgEzi@<|J9OV1d_8VYrQx_zD?wZ_P^u?-_BkA*i?kVAMNC`x(PZlNJYAo2?k zz>X&~*hrT4gd9+)uD}fT%`ZkccKFoE^o`(u-k~X@5LrY?Bo*fSW^)_tMkX(B#_y;u%4$BpjW43?nFC3DT z#ukpoD6Oo1dS)XA<9yeuwINQfXVKQF}c_zswHAkC3-|^N5uJ zDnY*yu!;2Lqy%4gh*!4qfiF(vkF(h=p~X91X3Tk@l;Mv;8_E0bRaJ`tf2nUfvq9{? zv4}TuE$#0&(&EftmXRziJz0GE1Ji62>0}5MOx%0jXL@p#?)LdPMwMJmI(H>xg8XmZ zKS{@3+zp~VP4nm)b*H%v`vZ^?t4BzMh<7@G2wm! z@>Mb?1@PLhV1Lke|FCAJjlz2jIpsCRyr@Jv2Zmqylpo2PdCxCE0u?w|L$&N-L4iw<@Kc*}!W~)e{`tSPh?!{FatpHEkYR=fRM&MXYseoo9$e=mRgj0` z!iq(uACZu|glsBW_fr1e4GmF2|BkJJL${DFtTrP7=l)2VLmCXMu(he$PE}OFH<0$J zm8nBjTrrfdIlIvC7^t)G%gj%Lo+V!f_Lsrokl-z1AN>{Zo9^)(PtApwmLL@eNE5~- zPpIH@mHd13sCav@Roy#FoAO;mGjHs3SF^(I?Q_DhH3g!o)8VTW*B(lvoXk+=&2W(| zZ#L{9+s^viLA|2SsusX@h;{1q02m^eLs06H3b}fGQaSB1b8|WVz>B02y*cB6fZa-r z{o%8A$!f0DfGq_iYE$GDV~YxETzE#e4v@QP!Y}Fj$s}9qjA##k5xg;-Al|_NDtb;m zZ1mSvB$P^Ms*vm+>jjen+xMu$)gR8<`XbZmcT>vMrFX^`Fqd*H!Q%_vf8sX1G1%B| z2$bvm%Gr751d_MwMB*y)ndfPgnUtrBjK{*kM9`jnOAT<{w*hUqDJGMUD@(GNUz6c` zA>(9+asQcAp~Ecmpi);KKB5gHk80xLHE!NXNS}=PiQKyvC#LUGqcgtWZb_(51izt! zgg;d+u6NT2q7x_0b#A5myKArovE%8aCvZQ&$>C)rAWAgX>E#>0UlRm&v4OT zY>>1WN$EKz$xx#fx<}GA|7(8FJ-N;Jg@P3g=5!3qK^IFRVNMWp;>;m3x|6tTgM_t< z$?L~OXIiV74JR{SRLl6mfSqH?$mUn&yR~6+|JFso8L6t&aOX+ZL~#j2vC1)}^C{}a zhPqW)??B?3=dSzD)bqf0_Yn`UgzAGAq>*ZoKKBWt@IGo+K@O($~7Z3hr(CV`J3`pH|*0d(H%9 z-KA~#ocS0EXRS7hFI=mxnR;}mRGzDqRS_Upp1&8A=E_{5*ig)zctC8_9Ynd$*2-M`av5HvCe(imLJoM^(y|!ud4dhns1ydAHV3p{q9c{U|rVA?i_pSX0 z^me9jP#&O(jK6vLBk+pAKK)YMobBxN;V%gI(@>63qlbPcNsT8~9a2>YlwAg!suu3O zh1s?${EeMoX^u6%j#gHAev88kvyalr%e*bG%bY-&U;ISePN=gzR2R-N?_GgjpJV|( z<)XKC@S5t`8)<#Cz0Jr8^_r`H%b%YBeq3KY7R3Dc&9h0_EpmFK|J%@~kJyOLr%l70 z1jY47-u_{A&09Zvb!e@?>s1IAgr_3KsZH*+>4%SbyKag)iW` zlnEp@8p?!$u-E+AOM?piC>6Di9Zc!G|8ZjBKdnuES@Idfx%?470SW8iB^~N2t~huv z-O#sfGC1J>hu>c6z7cRf zCzc4DX7NoaJflHhA9>{^x|1EVuqnQ7odYofzFur@So+R+e$@-NCBd6;T;$8c&V^7@qsHW}FKvvX zm|jfeVEIyX@`#+(_hawt&_Vlce-Ew)Z8Gu9;&g#2g-EEYopl)PxZd{dS5gc**9Avi z_;Fv-Y6eDC`WA)ymd8ae7T&$#qC!XC{geau*rFJ2Es;UACoEN{~ZHZe_2}bvxGq4ElI`Y<9143*-I=1>CeJ diff --git a/app/src/main/res/drawable/web_hi_res_512.png b/app/src/main/res/drawable/web_hi_res_512.png deleted file mode 100644 index d807e96b2e699139734b79af63228859055b5f4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49933 zcmcG#g;P}T`#*dZ7FfDNIu((WmRdqWMMP4hyHmQB?ober4ke|eyE_Hx?(WWg&inJ7 z-=FX>%j~i<=f1CeT}jx7_j0&clvn@&;3~+=d;|a#@FNNULkHi^-TvKzZ%`*G1yvaM z;{`Jg1^>phm;dAh0C=7M{X)LKz@q}ceDdYB<`)$^(=V6HFS{Tbwlswt0$r>yc}EmZ2(DvhU_tk2CX_=dKja~_eT~f z0?(+A-cO?*trPp(;y%!azLZ2k&=2N~j_6cxY0R1lrATxAn~4*mhoKf!a^d^uvz*>| z?T9^_IwHMuE9l+GbUkwuf1eQuk&Fk30H`u0mUI8jt4AqlyKSdT7RhSmnYXR@mOKT4 zOc(&Ao1JxzkKMUKqqs2^7L~1j*{Llklups#mpBU3%P}k9c*W7O?JE_=EaO_1%wQ z($k8?hj-N`9@MX5h-DO|z(-!JvxN@0n(Bl)jkur!oIOV-lqw^+@2c~bMqD_*YX|w< z2zfR2ycB-?*Yl5hq;E^h{2Uk&bR#TZUQB=_&dSj@j$gEDnUrmi0l8}?N zeA?f=`o`Rbqte8)x#HT(&T{ssNI1Pz@cq-zA7g$DOKv&%=WEFW1XZ%)?n5dZ>*;C9twc*q)p^OZ*+L;_)(cy zB}~SejS^E&TPsz(ft$A+u^-)(bk{(L-sqqV>BuTMCp`j5@uDfTRT%F6-|I3Zhg^e&m7ZxPQ`A$y^ z`G&QUEVx-(LnYcHTH+z;fRY(KR16hVX!3ONxYEd+8TQbg@NMLlR}@EccXu@EH)|S_ z*A}r`LE_!Dc-ODM>CK1B z^E#}BC?c3nPbdAZZv(qDwaqk;J`U(*!E$_!G3H4@e;}_6$u^{iz*SL#hA$)1R?a?e zxwo`TP?;ap&KOoKv128Ce$qqv26-C#Msob$hK%TAg}wPhdEX0ipUOWkDaKpF>RdjfMO#(HF}c% z=pGXrguwOt21+;iT8ib>2<>&5cgiwTI^{1x>E^h=GkJy>IIny*tD~ znHIAiqGayY-rgGxiNon$?6mk@WeYQT5q{brWmvE*r~g>ZHV0XiRS8{F$~f6_yuZK9 zVZOwRp_~75n{Y>Aa{Psv>ExRtEZZn+Xa@orcevEqT~P34smR0Q z*9SSB_amtO%u9*`=P;(fs?N_TBfNZV+#mm9o9W#=A&4=`>lk6d!BQZkKcF6?WeU}i zMnSOh*PY%KTvd>sn*7)au(RB?#H#$#qEJ1vI7~5RI6uGu^X5}ai;5fH?_`U3b!qb&wYZ7H z4}M2wlCnlaZKT-UOzl4{R+!5v!<6NlmQs8Ay`bPsqg(}QOpF#pf``Hk4P^u|Xg^^= z$VY4|LttR3kxK#Z?b7k}f$QB zcs)fgDJdWiBWMVO0?MpiLXVZXq9UmhM^@Gad)pKqiPq&!5rx-bT5y$#U-oVf1BqN| zk4r@n6>obvq31Gi@g2y2EYO22NaWXE|S8lI>pC1l>Sj3jr9i z-izH=SlRclu+E4*q5QNF;^lu{UMX!UNnAnC(cphr9Ga_8>L{^)Ej@#QK&k#R=$M{D@b6MCWT{hL#*K?8Z49HQYG!PGCd1b!mMg$ae$|J;#fn{SY}Ozn_t(KHw~ zAcHe1@PP4Frh2%mZPlR6jX;|Z#z~7#j%|~M?H3W$*5$8%QYP#hNhzx`QMcUPk92(; ztU#tRLa_)@XA%fdM1p`YgcuGcz^Ksd{`hY1%9#e)+S?{LOMQs%NIhlRUzGn*^)J@M zZjj-bR8?(eA0BJeyMF3HY0gq?y&7| zPGn6*Uiz(sMS-8S6#dj9swy4aIsgiMeKC?zpktT&qy>;)?R{jr5>9K50pp7!eS9xTeNYxGT(kh~ne+npL!3n(hbiBvAJhj!Td=4j9Q_B;a zOhB&e7vwcl#`MI|psTz_q|^6SzILcKY-47IUJ@_^mjXAzcNIg|!a)0^w}UaV{Ep`R zlAS&Elu7@K{12)T#Nkb}m}X2Q8pK4y9<0&m=JT}n=M9JmTf|aQK$$p(feq#TE%kMj zd!fp-lp1m3lt#ki$@~wqmS0Rz$6pwKiYWnBjxsX_NSR>Yv-ymIRwc7;d>`Zc=_b6y zD?y>?Bi;>CRf1%Crb7$4_POxd8k+E;Cx!CGIN`Et^uI@>H0#hEZYVo9ik2CRHmVDM z=NCHqxI0|h4X1l-hK!O!x@4dL5sD`m@;&jJKKXjoN=!L6uSaGaZ7&Lrj{bXekR*ut zVdQh8%rVRnvJ_pL_XJbpMXNG4D(`YO6@hvlJ-eP?r59=YE^{W^hQPoVqLXPSCti(a z`;FBC-d=W;u`YzJS=&0{s1kN8EZ;yL*r#zJK2*xMct+E*Y-fGp`UTfl{@d@P-xuiO zg+mdVI$W!doSk9^A2@~`Q)H~$h?HS3hzSx);aWoY2F_TcmyshMbN(LZByu(0lfOM1 zcbeY0zpzAmc|n+2*-9G-ZC#`v|1A-BwlrCc{~QJWjrw$Sd&PBbzeEqi2=7eS-`zYl zG_VHuq@K2OxBja=f8rc7qmrg5)Z&DwGYC6&bHqR5H~3x0Up^bA%JSQot@jcS5*;h{ zum*CJx^Soh^dAK?V3{Ii_VC2)9=P`N7NoxNpz?`v(2fz_ObIbOV>~=sbi8e<-`fb= z4OmJF5xrsq4<<Dm4{(ZZFFj z_nnp$pQ$Oe|3zr(Q+(az$#=ZJ`q4S(;C!I~|Fq zcij*J8xALJFrTZ-Tb$IQ0zSXO!tuA*D!v|v=OeT|@3%^8Ea}H-Q9)8AK~nK%QhgU! zd|D)y_x9m5_1RWaGg{6(FxPS>#sG)lhDrG6uf zc-`WAII;C;ZDU~zxkaJZ@P=16p?!>zA(ceQyzL`9owC}DTWsPIJ|maCr1NauIeqZ# z7AjS!P9%xqVfNAqt)!E!bb#seH@*7GO(8CX@4kwr`79kZBBNw7yb-^I}fJM5hme7Ls_0Kg{)rf}q zO#*&&72^LyyRlnAkjSa#o#7`Vdb|F8!0hph?e6J+!KJwfO&+Q$%nTI9d0{>L5k{^n zQj56FiCDj%I^yPT00~8pma8-%_p0j z6hGFCKchqT6gQ!r5~9p_{AXf?c(;?k#j$=|DO7{f-B(jZJKcY-$tBi2<6ZVffqC`WGtTszf9L02FF?0`SxlB`4*xEV zl3Cw7b+czXjS7d-M@G_lri~vU`HX&Bdd#x9NH8AA3DO{Sr(Y%JQwDx7D%15K8ry$f z#`X^1Jef>OPv>?oeik7Wh)8f`Cj4L$3*_VdIao|A7`2n@UDBCaKiH!~#i#N1Nk@g=UEucCPA@KzF(MdI%Vxk-&p5OQ2k>Y=-4H`2}tt3JYumaa5_t&|wayJ_{?;7XD}$+6pBo=~$V zW&q^HC9fcgYFnmer4K8=D!4>Zy|*$HVISUP_R~W?%#aYDk^``B%%3i4YA==){yeO_ zS*lW6laZOlXPEcKDconP5r!(0ybF^~cf+g3mVl7!yr>Zl$_(nD(i6U!S3@#Rd0ARR(o7yB-e}goV1ty2qwqrVHk4+vYO|5Pl&5R3R_>^ zpjdA;>!}g?$uK%>?*8JNfvIB+<1RCc>+C@MomR!hC1Sf*r$BZ_kwx~%`mfaU#n|uBJcmbRr10W zL4%jfBEB#H+pdJn{h*ciXK%;0EZDl@L@k^uDE|>P&s{-lqsWfxfL$&rP@NKZ;^lVg zH=Xjall!7@(sI@ayAwtQ(h6U!5@$ro2nfXL{3pC{P7O6Qp=*WEzIi;KX|8pS|JKv?m8k}*RsR^hc8$l2JCYdKfVOw% zi?>peQs9R#35>cCI{1<^9)z^2f`QBU^+>N!^qFT9?$syu=!mxw<0_*W`9BxGt)Km2 zyZJT6&J6S`iFf&kBwQGb-$VdEA3~1YrdLYtjJh?u+||`w7=%t=S>s3m6K}k4F%2;q zL*2Z&R&i061F)AnUTjpeGDY&tY}zj!l-iM*<~`M&O`SiozuoDfNql}RYCv#~!Nui4 zN73Zc+_(E^LkQF~3@->eu2*EUF4z=KxM!X)w$ljG&wHX!a($np_RpvMSyy47`lw-_ zwc(iZ?YkTM>2;mTh?j@6v&EC!9mG1129*IK9CZNYHPA0tKR%Kd(~{Ka`~@HP%SDuL z7LQ6eB%`5s=T4nvO_%{ zyWL%Vc^U)!%)X*dPD+M)i=@OX9(wO^c#lWicgCmiiMpJjI^)_Pe>i-fnBZEmZM$uA zr3c+0S+lMPA2WN^fSM>>UFLI7n;`>?%4wrop1fPAW!{9AHc{9W z8W|te_$~BvCxEV8%uphbQfimA`_hqn8`>DpFZYuzL@YNKxmsyxihme|&H;bvE9Ke@ z`a#4==v@PW4Rv6x02=2XUE2s3`tXmw(wRm}yQlYSCvJS@&K`mTDB}!-`T#Q!nMbk3 z#n11|e}zwbOT-l__pa&{_TN_6Bwh=ZgWl_EYWmP***KceO4>k62TAQlXs(+2SNaib z4(F(1K{>{iXB}--|59IzR{=ObG$64sRvz$7mbkN#YUiViAHEt#)AmkVtrGUsOQ3B% z`A|&zo6e1@U92bT#1M?pp-tFE^0g_1Hk4>|sTg_&Z_$OL&)gsUM1-T8%Bug^1i`;q zOPD#GGo!qLVFGKtoA*wfXH?U!=Q7^XdrL37`GpkSTqCv7(FzCyzQUN;Svu-`J3Dx)$FcWZizT<{;yqg8Ag5bSb#NM zC**-e;m^K=#}!@QpN)gf4TI6ClW#pM&I zsu~{AcK0f>(igW0aFS%qgm2F^3x(T1;>}I3%r(=0uWQIy#nM06_WXKWnJ|vyPmd!* zTpU_`h(W%9C=<~6@1REd%YTB^E<+>l#7YV=`8To*sfEK3DD;prPnU!H1D6Kx^W|cs zGRd!oL4J1;F#r2a>+y_lM)^H2%%2;zn`u%AHnHkoY2VCvNxY0!UeR1`WAAQo`z%bR zQB@H~9=eW+iC9pMJadiQZ#l4oDmPAO$EoO3OQE_l2z{Xoy2mt(`D!o7q&|gau_CI; zsBY`jiY;ZOV>EC)cHbF86b20gh_mdF?a!a?+tG-*?df4=yG7JJZ3$+ZDRbFQ3$2b! z9Dw@M_eWYfFwOpXSA|Ds#ErOED;l}^ZU%1mbF6n&gyk#Wp}zzV}By84g>w#rW--B^MV zK7{T5s6DfX;-hIn%++X`&6o7oC?Ya9PpeN z>tPAckQS=L+oUc-&zc=FRG`PmXnzRix~Q43g6W@6tC~Vy9xT~=X4XdZ_0KG0_?W(q zcZ8Mc?ila$yb9q{?FwHa$Sd%qp~Ex~r^T(yXMHEWL_qShNv%SBA?3k-jyOsLGNjoG zE;7kI3>(L-X>{t4n>cyEndAC& zFucS!HLnPgP$bw$j_K+o9Q+KHoxJi|=Cf>D2pNO*VB!SHr)t{s>)kc5hSh5u{^Y{| z=HN~W(4TM=dR`Awqyk}U-a_@zy&Qg;Tgbx74YdE*^lk0ua*uQJEG;opd_@A8;#Rj# z$`A;!I=1mAnQ@?6+9lD|$H8{h%de&I7foC&Y#M|+@w$XNlhhl096I66%Sj|g{E8hF zHjdH3XhZ&327T!2%&e9sF-I&JSNsG~(S%P9>*wL$?88s*DE5kBz3a!$rJr8z6;coZ zx7!;JPQt$B6|Qcz&E;z?+}*!Tsi*3I4!O;N?llK zey#RBZ)z$bq2E|$NOIBe*-UE7Vs$ekz(cTYZLvdr?-}jjQ-K>@Nz>NdEco}O1n9Gp z4g!oTmi~O6=1=thGIwuW3^KC3=AzCu z4_xe*!VmAZuFlDyVIrn_^HzO(2KBx%4;(+P`EtVA3F8i4=iiY9q95{jYWmY(vKB7H z1lFLQ?pttIsoq_Zp!YcVw6y%P^VvMbAJ;-R(_)EzOS1oo5RRfB=f(DTF?sv;4u9za z;~RU*+-f2Z6yxZ1?UjH^2n);~42NKJpdU$P`#c5LCD8J|7;@%~OH3bi7t$f&PU|r@ z0ptPZzW6Jp%j>1`3Oc~zzL(}mu<0+p(KJOp-PhricQgs$05QzcfpKvZ-{O)l>0>%a z&}-#gSI=Fkvx=$rW^UoSGKihjrHWW!TBoapkI!Ws^?l+|9JjKtWh8^pEt$+L-Vc6e zNrFJmLSwn#KKd0;Gv6`7t2JXZZK~hC#pdlhz)>-~4r0fKUh0$RmtrHlT&}=uNu)mH zc8_wdxwqB$jNJql-3a+QiJFV6Kmh%UtN4duk{fWZ*JecU6b(76Fn)FOGV*q3u~07z zv$%3PV6DxQY1JhIX2KuG8tyT{EF^niwRY&oy-35N4QvZ`jir zg3_ZPKJP#5{E(CZ)Q6A+jm;LS7}=Kvv0m8_&l1*HDEu2#gzlmmZWe9 zyK5ZBB3JZ3Ipe({8z>rxsEB)>H~wD(ljAZO=zVt7(s3hLbLA|+@A^>uL+mk!gd7Oh`MUBMdAy<}ztbzd zu9-WCZf=wI9S~|BVrR-x%+aLtj7^o0Bv1y3YcMwOf>^8qW}NxsD!zWgBau>CR7uT?E+W={&&v^DT)=o+5ZcBNE@y zrK|~M)Nm3c{b;<7s|;~bA^uRoTi#hn|o>|d1GTruh$)ZY_PGCU3OF5*9>B#SC z(v&WO9@fsf+Wg-BFMVLu^YI=sXnD`!=`h!@qBi_c6<*RU$^RVXG8~tu;k%BR+6&@&+@3K{^O*>jh3=9%q@1_f%``hZvSm z8?{A!uPRpYK=ZpfN6%Nd^aoh^j=0`@TbLE}+O`vlw&Ur5N0FELtS`t5p_<}=nlhk` zWB^0G`wDgKcJPc5wr!%_(*AjsoGO17W5wA>9$w~VHc-V0xQuVn?g)N8K0+n`3H{e>-3t`G__MQs!t#lhRAy)6`>(oB z+gvx}#Av;aEl=}JAerR1N~O0;>L*8M{I^>5=*Sm6N#i)EOa~!^yDj69S>QH9e>8{_ zAgG$$G7nzlMb6NaNLvj!#dI5fHHI;!jE_8pT0X`4P=rGNd0P)2Jc{fE0gw^4>cfi@ zIdx@VbkCr*r$o@1E>(4xg-Irly`@N#$TPfoDNy}hN%#8iWWl=v#5*0-8l7QoX~mzD zXz=P$Wc3Vk+i%UTVm9?iutR8Kw{7>UtMnSn|CE%^3RY>yUrAwByt&aYV1^+bE6Jad zGU{U;Uu77!CR-D!g3bhzV%O9%J^N}@XX@W=BF> z*6wcq*IA{fN|OfE^)aaHiK@zw(*jiaU%NSgb{#G&&kxGSpR&MMAcC3S_458XYDJ2{ za(6FPti50g4~Zm!Ojq`Q=Qh$Lo6nNH0D$hKsvN6zBLuzS)=%z>1TEg&EfoYCIi!jV z(kpoG>wPKVbDVJ1Pj(kzN05f?6Cd89WG;{TIyq^0>SR7(n|`^A@YE_7eIzlT&cFKg4CQo2vCJ|Ds9KG3A-oM49TUFB>`odoUsIh?pt>i3 zN*dGub3!S<^-<|Dj-09Ykn_c!83%R>5dXFvC-P7%yO?$^Zbv9@muisHDa8U?cQ`eX zYhY5jl_f-lOBYTL%VsmcIk^>==gn*F>d3_%IFpK)*i6;bN_u1aDTxECEM?e_RFOjl z7&Ai_TshA@dhDg_QFAWI4RLc$`;xCVl>{{{o4-#LmNIg z&{%c@O9@4)IG(2>3qD7K>s>uH?^(=lJyI|rw-t};b%nQoN=YHH7Tqm5YfG)oOf@3Z zi%Wd7+-jAE551n5VPrWW|B>`$HC-TdK%*^WXii*{p=m=z9tBlfelg`FiS52n-2OK$VaMja1P4`8`}fU6VP*MUnE!(12<%k zIvSSQ<`wk|7j!(cWwm*@g#CA*PsGOu7Cp&IC(e!jv^08KM&J9=ksMXsSyI0W6QO#3 ziWHG)9lid0#T_kJO^n~eBy=llUb&b7vb-KxAH%d_&TS)_zBP9ng5Uf^LpECR{K*gt<~R|B0oC87jru*D#LxbXJ~F7)7T) zJ{-M1WQA9IAi{ICpz!L2$1$@1{4FLUJG=Ax+o z+c%q*A~v?(_YAOD<3TU^m4h_cCP|W(z>RH$s1ac1qeC)lDjC69lh&o{_(CH+?aMLN ziB*|0zXK#ox!??MQC>v9AqQrXADKOoc6T9Q zv%NWEE69f_DqJ9newN#O9W*Nf8FaqB;N@1a+^8OGL$jsP>*DE8KvE10FbY$>Gew|&MvP>=mb|4Mi*<89|b#$Lk< zOADu2;Vjq)W_OM|;@8TK^`b|DV+0ecQu%wP|0keR=0gkVO80-2CymYBSD?fgJvrbL zG7vT}U8-0a5n$l1J?gG`87=rlQP=*M7LgeFKdrDLmRlEcy}6u3m*y9Imu7lOO&K70bw`eVMdL%YR%^P(ZV1B@)3>Cv1Py>uqFtv3oD;u$60vsE{h0M|#fXH# zyJR8YL(F}AcS~fDvKecEhK`2;SxO=sTEVK>cu@1bbYSYjV_##jCfsy!^vz_(U(q+- zqDWs1@oB@*nn4CD`h-buhhKUsEmEcC;b!|s(5sO{I#yF+dctmO-ITL1SNv++)K zSdalMJzLa|y;bX6PjtTmp-re5w)XXn!TgWPEK~xQEu_nAJ4!ODRB5!3H3&8yy3Cha zw`n(AGCx0_;93;(4S`sCOB_WPgkDBK8IRqyCiTdaQ>3S@vxxz13fSG(R?#<<@n(WaywMpF0b7tE9Ccq zJzD==mj|=ocYBmQWi%^gw6_eTTZzPO7M#J~L$wYQ;RI@O`A06j6?wprn*`XG!J7@hwg!xcN zY&y0ASHkqyJA6Lp7IO4SF0djB=+Dc|y37X~kwSE@$1t_jWbCy7L5$I*_=ZoIM!?9K`RS|Cb?0UHsa9cl z*9B~N#Af;45J#e!x_gb7keTfyh*;(a=EWkO`zx&vN0W%^gqIyyDh|U)cMa)p! zRxdyLJgaXcs^4XY)fO)cd8g$SQl`I>2pK^xW9cU0_}6$s)C>5FQz~ajy>3gM&d)Ew z)cqNMxrzEkIPD3wP_(HK8+aYOBlrppgZRs@dhHa&KGWkiVCDd`dI|Td?%gpIgb;!i zF+IuSE>V45vP2oPk)!TJHu!N4|o6Q|Ca1D)NC6>|Ah$yv;W|W-SMaY zP`KMnodUN^OPT`*yAWVa)H=+Huuu&Llp0SaF0%NCx?&2SgS zs`kgHPw1L{;nBUC44u1uFh9{^z?@l%POcW-Lk8HT_eit|;qxCz>)Zq^9i_GH zDYg%?+C$V!g{gaX-d?M#(Z|j~ERsvYo0RTh_GYibN32j1%B|a4FvFexss$n55@=dl z%>3MsnM?t$(S%xaA>_c^8er5~gbnVRHG!pZz{M_aa7+h9ML*fi=~(+Y>Ap64QZq9* z|GHjvqmD2d-11tF3#CjN_;L~b$k}ri+_}Xs*?oH*0Bk(sW{oqgy4n@@bO;I>>J?Fu zJ#T5L$h8o1x54ziw;WYXE=cuDPw_&E zls-dJYgLtuLJxiD8@V`Z0`;e0#}Jq9ErD^*d1ug(B$yOD$I7f>9wlLu1dOqf5q(CP zzZ%B%md@w6w_}KR8vj<3ee=ZpVRn6B)EY(QEFgwS;E=XAp-2Ss+tft0wl<}OjY)G{uYCby^gpQup{uP#_hrRlj_wDvY`1Y|# zt3&rR`?2UP%KQ0gc6|?y@S>th>)3o75;?K;KJr$Um*j+rDBVel1RG}q5xi4nPB$64 z%)qqtbA(qo@?!^5%4})-=$LxRHjoEgLJDk%dE&4mhK73FmZN)r83x>@XrqnXu3@4r z`8W{KJtkIY;(c%aP@F6S7b0q_8DY=<+dZmd7oxek+Nw&qpiXU5F7?%LG8k=Lg#!fcv;m5oIQ69W*N!lr*}&NR*Fq3&cBn(w z@e$SgKhpx6;1n;==R_}84T1=>04mVn9@i4%V=cugtge@MNCu<9Sg3dH7L@<-x&K_f z_4VL_B8APxe&N@l!8b79hk%IdQYFfzUoXB}5<|Ag+uaNtadRM4l=H!SZS&M|JYOb6 zcyuvDU7m+>e@7$W54F5V8l#Yp?QC72c&mr{hYWRd7sq@%QMC?=ShV$(npNDVoA-?a z6Vp6~1bb0|?nRU+aJx}!pwXl^EG8Y6S>)q7Yi%kVI^unW(tLmK6~-|T1K#Yk=WxH? z{<0fIU0MUijb3?6Ls4vWeew%8u)vN$*~t7G?&|96;}tdOo)wBMeQHkw8xtS08!ik! zej@!`VD$6dh_vrb1`NKx{lpubEp*6I5aaGkSDMU+zMT@Kt8a_IpQnbeahm0*yrsGx zm*ZNtdKPsw_&o}|+KLcuNu(ig#RJpku{}|POe$g|+MqP}C__(9wRpY-UveM4TS&el z50_4kAaHyC--cPNx3K5z(tBAg`pmMKHEKx4!|vY)9^Nh{ddqw(2;KIloHv} za$daZXJ+~=OSkpGm&s|Ox0KY&?rUGXQkMM6J@A%9YW$Pb51Tq**)sOj*S(a16AIEH z29clIY7;dQx6EQa`QeUFzuiCK7Q)q^eD-Q-vSlhpM=YnM9eXvCuv-Q!qYwAESI77< zM<^bThtV4k;Hbt9t|=@Wpv_N7)CT%`*p_roeh&s!P?)>oX_mPB-R}`GKB^1h5XbOH zrKA;Zz>4|`qqjuuT7CJ8;sZ(G_Taybysy5vfc{6yR%=LX^QDCI<%rRXE3g)_vNA(H zdt&rU@2XSicZ?WJk@dIWgKiMy`aJEz&E9vdB<&q5WzW*%^|zgg$Dofki~!){WkAZP ziX$lO0`6f(_aUNRJ@b;nk!Y;NlNB)~;zv9cc{f9cAn)q_5r(Zd!N)P>2p>;`CO-%M z6eE>h`9cuWyl%_t4GT$=E#<8QjK$si&s8J5Rs-qqNmuTP!~K1IHYp$X?>2v*aV1!i zK$LVoNsFepnpY4{qReq^VfXNy3kVTlW1QTphROiSyz)+^lpfyQNkJ#~1rxvOER6Ax zFM6qQxp8=*@T?Wz@*=Z!4R^_X!S$&%k7Sl;FTAw(XTYQB+zo7 zeBSQI{^;ehI~Ld5#0AeCMj#*{lxRSVBcS$xkaA@om^4~;E*Bbuqt+hKrKpc2_PZMJ z_z&xs@qu(9!H^j52b6fWJ&w;&MX12?QAT>3@9kff-_WSJ{hw_%9U({CQl(6gp=Cui zSi3o&t`xhze8G&sZ}mG4QLeY6dbqLaluB1|!3L&K`iw>7$D>idIUAQLswi$|aN1lR z3}NEbQE9Xo_0y9eL(Dbby$TyA9=JZ%(Cu<0b^TT_DG!tuP*^!g5=Gs(-KCM8-ctx{S^8a1@UWPiWqqAOQ1}^a`Ti4 zN7>{Vk*>50Ny(G?CX~nJOWDeagXRfqKH44$Q6F3hp_Y$Q1O0MU;RrA?ur=SG^LG+= zuM0dea$9gCUKG`mV?^ZJ3eld(t}%6xMI3Ou2q6EyMcuyXXJ#QqF_i;8`o3=--Sdqt zSzI9mmp=*7J5f4D*@WUh+gdYr7@pmen86|U|U12sm|%+0DZ79*<3$k#fUrlOrYlSoW25BE?*F|y>n)=ekl!X2O%$Z zAwr2gt`VRJlOvHB8ZU5K=@upsIXYbyrHQ4S%S*_;t}zNV1JxYZ2Yy^S z?mb+$<37)ZHmCp0v8wZ4Y?OIz99XQ+W$OI^#DJ~JLM^mR^6F8i$0;VrH|vHOn6zpH zHYUE!T}s$eZC^+O`fm8Fw&{QI#AoZJI@84G^TY_y*Zu|uFFo!Gi~9D}UJlgY@~;N; zXaNZDjx>AfY+UJJe4{F1JO=3ps`GJFkKq<$sZ4D`1dT5c^K2RXH@nO{1Xs`7fD-iL7g;9X75KvuT_31hkVDwDLRN!FITE+V2YYN;6aj!4 zrI0Wh!uccME$7su{l+s>sd!D24aty>gH9`P?zl5S78L#Um#x+lj|Fd$0x8Jzm<5}v z*(1L8*wIn%4;&36HdAbh?;#n@6@&*qa)-~%R>GVruCE2TGW!$m$X{1+5NgA^%W0!m z%tPj4ZT;RC1)4sKu}jsS*KUXp^*a&eApC6~?K*wDlCpPvOeo>AQ$}}0eYK2>`kvY{ zp`752zNyjCKD0nntW4XJ>>ZEo1r89sR)-A^UNy>`cJy*N{en5r_}&6P!x1!1NJuD+ zj&w^ewxM1@6gcYwXUWCeT)U2~PB_SwMOo^@Q&Q)&urA#D#i zxtCkh7Vy5*JxNc6G3m}gO2=9$0;68Tthx_BwV!CanVy0GwSP{!eT4hL5u*R^8Sm6- z3ym^FIo=KwpQg9oYhTI4h?x2H4i4|GDj9V(Ts>b0%F@BWH^yqtU*BOI2KcO=hL)|iO+-Mp}_5HO^PuK|aI#;4? zsV@1omJ=W^MkE7*FY^5hE`*xB#UmpIHj3k(*u_hfQ8drCFqCJI$1uaQd8xYe#z_&FV;ZW5zkW#^o!j%ve+y2by=r^(I=S+iwbs7Y}kJHGKgw zOACHW_lZtZBNO#7ec>2YE?7r@9OV6dmV>c7CGGfBS=437jj)wB7|i)Y zsp?%bF0HQS3?|yIcP6+s(c~J!gJNvp+I-a+m}_pf9;^4RC&_0TW6>U-C_f_**%Gy; z=aAlnyRF~qML}Dyr4x`{d$=>owU%{xQ_&6RO|N}d^pbTtwtVbCQ=h<_sFpd7X>meR zN>AZ6jy%Dm6L*{&o}8=tBXjJHq2qS-SJsWDLCGqVF(w4BW;rdOVab74Pu%Ta#G1GB zYn^~C;YI^d#Dh3mvQ|S8s^QaXT;+IlcU`iqCG6J9V7Tc8q?Z{*GqcGqkZ0d#u8#e~ zBa%OrC`3t^Flvts8kMI48+F(gSb7&k-a6`!M=<4E) zPmv4Za)PiZ-!53yEIP~?6CS;yM(E72`kCBb7gOs>>_4yH!~iH41iZH0UQ`~l@%<8r zKp~Ds&rewW__IzwQo%1_nAZ3(Hbns%Pm%+Lm(2K{nk}vz$ABBbY$CDtd=w5lh3iH= z57SdxUR;5RC7dgzbaQh-zIFLe36Jj^gXP{2Q~c3`dp2RWI5#|^YfrGF_!#_)E@8AX z|F~myx~ySqjv(SQMJ=v5aLURF#cduFp55zdrH0h~zg>XOvU{1qQ)*8T7wyJg`(lTGc7?{GG~89i@v%T`$Qq_7qvMnomxt z+dU1H?HyF(VAuCbiN~v?Mp|e~vw9&NHn+onC|?6Th?G~Ff0(*=YrwC$@&L^FpJ0aGdE)3zzUWK%3Az+X*)AjC zVN3!krtwarUi;&kGd&TC!=vZg$MretewGkFnr!9(A6NzJeK!kQOcVTzI}XSMBMNO@ zeCyg4Id0wM(1WwvfVp>fPmuz2e#XGBL+kb%OO0Z;Vp>Xj_CLnf(3sz9WG9>DQ;&I7 zPf=9=`qws`5B>SLA~dYBG(8(R?~W`i1ZU*Pk@<8F>2@ThXVde~BI>U=-V@qUUn009 zPe#rX$xoCLu=?P17m+Z*jI%j(qBa|Ol=4SyDV8P zefmWLDG%g1`u}LU%CM-qwtHsiZs}B7K)PWN0ZBo+kxpqCLS_JINu^Uzy1R!4=@gI# zDQQWm`Q~}A>-#f5&z!yYz1O;Poi;QVGoiM|M+T!K1u&`E!)@~0%}cDeGeFB908Xj| z8r1+f2e{YH$=LR-aD-tS5Yp}@C>c*bG6+8dZ?5|E z;{9O#kz$6G;Gmpmh7NG<`h+EN!e?`R+nJgWQ@v;H%sIb4O{%l@0_`UWSTagybrk9| zrwjjB`#7%6Nx4kXpMTW3zxXSGZ$J^bp~uJ2Dei05@K&MgNSfC`wfahy%v}K~tyPXK zCe0X@PqmeBhen7me0-my)$0^~H6x0qUMp8aU8^wWjV@>JDHh1PS2XN-2`X+T|6g+l zBPe226P~F{&6f_Ftq4Sm`-3ktUo{ zLEvMNr%C@fWV%(}t$; zre&R4Y=h`x=zT4J_C98YH1x(GXl{;z6}xI5y{5zZ&8l#Eo=`oXduGx2<5_}>3V)d*FuX=sqx?|YGn5^|CkI_&ucoztz z4+>gTfR}FO$RU^yke@lCqq$Z8xm0w}l2lvg0rqZ7Zb*y9dZ){1p#M06i#qd`gtZ3G zP;X>kO0R|!kXESO3Nx(G;2u2t2SfWEHGub8td38()FvosG_0m^+KY2Wh+x8m-{+09 z|qKA$$s>)$rm?w!UJT+av(7WA}@0mk) z`=0)wM~m73BxK_*$4-F|R{Ky}xLJrzZv4jRqr*S~u6worZf3MbX+9m~wXvn$B z?~BY#Sqal|LsQHmvC~XqXlpmLlSEt#F_k$xRc7*DmGY4iUw;X#%pf$MpZpm<>W5U@ zK;{<->~T9mE9w=JCYGo81&!Dbn8OgS%jaVP&Y^w=mP&Hvo6 zs)wSM&qb2=Ujt6>#)S`yFUaC{Lcz)l7t%xsNh%M=hJVCC7OQ*&H5V+IC8Z#`Y;TZ@ z++Xhau#(xp4C0J^s$>K0l>TV%+mVGkA+QNG)Wyng{yIazt4h1|wp#P!!nhK;i9wtd zb39A$%JlD=t-`q30V~6M?c^xbqsdek9Zz1RW=*2Xrht@+0r~Fp;k>p(Uri2|9#WjIO=&$dds%!G&^5`Z08cY>6VDB{}cE zvRzB($u}ccYy@lMES-fwbNC+gK75jMKU4>u?l7}EW031?Z}tQd*By{Q^06mB13wPN zl%*N*KCsCFFQ#{T1LBV>-RAL0s%0(Y%&i=Z9PJ9y7XMxHnX%^RqEoeyq6CU~as2L{ zT^YTz=#K#g@+4^R>0gq68~<%TR0Wz8!Sj`@)T)3Ba;4qg{`4OZb1lKrtzfVZG5Is1 zC)FWC60xLuhv6M0qceR#(pK>HRhNlo_sGmZJG)ri#yE%(`rdc#U3fI0-hZI7Ho81Ppbw^^HySxu2_zgnv({iEHdm+`V=+>dkXBpttbyPj}Cn-!468L8ikL6o89T z5^p;s1FV3511X(>gw3a6c~?$*bErPkk@9wEv7Ub#{onukPPj6qych^RJUQL!{?f6H z*Uv$cH_$`%UZC-Y2zc_d7rOJuzk6+mIyYAi{dxGO*gtcUtV1v3^b_BCW~-RfTZF^T zequ=^ihs!YaYord+Vu&$tC5n~_$a(yPvx-t6w$^1NivQ^J3Hwg9#gKBh!AjRJ{L=0=KEOYo`UC+GniU1~OqV1zjXNryi=| z1I$zbXukNSYu;nyoT$j^5zzGAIu@2RTAqwJk@)(iMWIVyqw<}w_2^x%Ey?L*@TP3< zca(LrgeS7u9kZvvFD6VxND`XP-z2esD=P+S$c1gKDkGNQ7!zI|IZNK)_jJ-neO(GZjYGAHy(oA{Hu6$VM4`*^ zRlmx@LNX8(VATDa*LEzUQ1=`5Yq8jD>%aGx*pSKu*bhB0)f6^|(`v}pO_CBoUWR2c zAo8bJXjNhp^0}!#QwP<^pe;D?{F+5YNnD|8g6-2j4gfGjV4O&pWE67uN5iqM|E;@I zwO!Eywt6AZ!=#|Opi=CGhVwW1Yzf#EmU9-Mb&VrTgI7aRoM0{oZ@44Rzs&}hQ>iuV z4@%}!Wq?PAQdJBnV(G;CQ?gWLp^@r5dXW*8OG39w)@LJv{?q42kNOl}RMGEeMx4^j z_}{1RZ4mO&(0w=bX)-3sE5TLFh^>0Wf=7LK`)SyM`TJUYVpqI0WShY1Y2f>^1cbC- zo+7thltqt)Y_Hh3O@l;IUF*x2k2YnX*X&M}J-bdE&e!o$T32a++X!7a`1^@QV>LrJ zzA#WqGt3Nr@)Fl9M}${pR&TeDZ$-29XIUEw=tu+u4TLgrz~dMg0w6QBlC$kuM?0Q+ zy#qm=*-ySca8_Bq_ar}_X*gR2hAEto3kA?>j+Q>q{Mzh z>Z&dTzcjefMLRAFFy~)}Je*Q{GR(cJc{oPr(cxjTACIs+<*q$c!V3iBvdafSEE%Un*{u zC-N+SEk~V-Wqr-X1`G(N#3mWAXvDr5NGHfzve|77q z{q$eiu{C}_sC7mG52|6(~c1pIv;!Y+s@Llm`e$89HrNCE^ z2>EWex|)%WB$JG_E{be&$WPb5->?_L&avR!s_%+1CA4yOC-o6+d&V67vwxI!6 z+-E<2U_+8jPz%+8C$@nKSM2~M?12kFvwSDef;;$uK&tgmZ2DI!Q)V@)m~@u)gQ9to zPgLwwL_W7}`9&AG2PQ1**;_K&JxIXK!QJjg7U^J8Y4=Aq$Xh%*GB~zVEbb10QkjE3 zoA=wf)6?Bm94C8`_L@-qS^qPBjzk>+POTqCPA((v59Ru89_>k0M{OxChJ;2DPHV~5 zBWA2zN=cUE;sg<7{AtucXjU6-ws!v=)?}LE*V5L>4;tPQh+T*LDUPgLO!V6i6TY42 z^cR>bOOG-E)ME`!r4C^GHzKCIO}dx><^*?$B8kP>xjIn}Wn|OA3{+GnUXZiRXg#h2 zbknhfM5~kUS4t8njnigZ-!mcH<+wt}zLmP!%iQz277_$y6|SqdWjj0;IQ&Yd zFAdPQmHe8Ng?aTN;gZtQOrs=$Ka}ihaLn~*-^svu%P(f5Opm-YHU$MhO$4p()=h$o zeQqo(R$hDjs%7vh|ypP2!3gR=nzDude9({~Jo`Vxx*M>`V{lOTD-tWOiIEbnF z;Wl&DHIt9Y6f01-^(dsb@C+dUqQR8hFPAGR4afM2QT@)X2R(3C2cO&Be;4g=4|lWa z{i?2C&J217&P~h6(uViUkIH>&Qx!|`77;SOH}`nX1*XJ$3?~~XcXOBRap(x&TN6y#4Uqur(JlxOv5pXUWdVY|`o_bzG2gQ!1s~siW#oimd{MWxr z$?ojcxtMm1G2Y?Pw>l&v;E^BlYf#;>--KFYU=lRVisT_qJK{g{iV!c@3>V; zz>vI`WROxKxXeQpatJ3RQv)+EDh2SzrcbhbrDwU1RE$W$fjU3O(8^Dhb|ktz&8;e` zV}P;XRe3 zQcP1V!?_~1R77{2>VW?kx^+o9d|wkcJ}V~89HPTf_8CO{aV+E{?S|4+X$0NA9WMjo z%7O`mjF>Ke>KV^~E%w9fX+bW5zfF0$Fd;5UtZ=k!UazKUAz(J#c9!a!I=mEQm$G+- zzA!%@_huP#{G|(=>wl-QCrZr`{c;Tb6HieBiF(j+U)XfBp(a-qeA68uh6Zi52Rou5 zz>y7JyMxW^`>tiV{B+{5!A0JmHt(?^mdQ`ff*Ow7+`5L98gq|d41ak}AFSn>AOez= z`V0}W`B3k|>P8pQM9+js+#ByT4UgEGd;!WRd}qz+aIfI_vP2X_N9yPI;4MK;=uuvH zL#g@w`57x;a_vqtdTJ0Q{IMYU#&v{v@;Uf<;BNr3&PfHth5mu)+VV`25f>i;zyc{m z@Z~i6C&gEPq(PO7Gf_=PPxV#X5layoh>?qf=zONnKS-D8t20J79|bom%=37^V31Y& zsB=}ll_t?#Z^cKQnQ^TCwbTI&+|SkqI))z<>1{zSQuAGjRatIR(it@=_Gi<= z63@{l+Y2lSbgQob; z_*%oa5=i%d0$*|-B)K0kUZ(@GC<)CiwT5Yxn-Kw!kgm;Vob@geSG4l8@r$EM4Dgbe zMQHZ|?=v+BOO<7s2miXo8}6W^vE*E?$D)(Py6-m=xQ2R(8b!>?+v)IRD2=Q{jmLhN zW27u#PxID~0=K{8@6T-JvZs$2I^y~*IP2V^d3tViC&B-SO7p1^3~xUGDu{tZQGj@_ zu-_@_h@qy%bh&Zb=aXXiN0jZeU_@=oc*bqH&2$o;QvB>~w}LG-&aBs#GbM9PpnrPa z$4B3&%X4O~^hNhIdDDY^Ax8Kd1qwz!fPb4PAhx)at~=7UntOcs#@FBdt61uwJkskj znIhY4ROa>u6w&0)A>@Ety4Q)N5M^=(JVI%PO1R96y-zqm!tL(s-@E9Qpkn%poWDV9 zc*3AsXT(_|s`XB!F6XhT_6E)AQbwrhfrcG$gxtqye#cdVLqyTws+e7;WeSYks zE2|JSi@Q#88C6a?#Gq{?iSWmco{Ycze^&eLHMsaewWaT%>Bj=_`J;gqeecwV2N-n8 zLII0PIq8!Qm&+3RsM7S!##wR(3K(_fk)Q(qd>T?@KL4;VsGdECO&HLV1XMn}$Bkuy z)Zs;zHT-&|3e;;~@CH)@1FWdW%Svay5>UOi$UeCC%B%YHb3t-RdXGS_lZI1SV0vGO z{JWQa$3_@czPRMd^4JOz=#0Twc?TNg{H z0@>%|!y!vRH4P9R=b_&9<2#+=lm8%NaW4AJa`VGE=}iuI}0N ztEg2ZkVT5@F%bF;q@vWKcpjbXmqb7`Z~Qh(f+H@Sb6?*w=C$GFQE6Byz-@X#6qM4* zJ!6gl73LQwa2(&{5l)wT*Vvsz)1~hQ2|C>&TU!`+E@h%hdS-T1GWxNg<6|98M8CNp z-^|nQUw>7kBVoZV8Ne_#;1=HM+`ygZoCTfV{fU$hqGj5495s?dQ(%KG4-XtOq3i440Pz6`D82m_t+~;F-`$vVimz|x;0;u8wO44xVk8i=u zn$!mhswJy7HVe-0>-gJ0yBM1AeChWaym#W~H7mi8NBM zk>4PIs{!C2Ywa`W#zAxV9BaIfrnc@)3rC=N+AqdUtS0>4w|T~;eEZ`Bm$0PQa!2R66DCu+}N); zn)`p^3WFgt*a2cK*D+AL1lwWY8z)MUdXJ}|2DiYk#tLkfGq$<` zfC(B6iWW(j)?QJ=HH`{8!F$6%8Gmgq zhxltwH0XZwYihg4?mKUzVEzj2QX8RH{1bg$f^!_&vJP+7$JBu-YaGp?37eQHp|Nof zaT5MK8$f6etmE(;B&3CD0Tste-xNOpCK*mQGfd@5uPual_1MFdHiLqS^Hp>!NHC=x2kJmeP>R{wdZzME$_LM#YJUD{;nW;ECHRlp0`YrvlbNulINHCK9e0l*1CKrR4ey@Dxfsg@gj|B1~%I}=idX+RGYcwDfp$M(~W z^Rkt!i4vdo9u)>!moem^L`ubM9xrK7M7FSUtf-%0HaKCuYT>i|dXorF=BeYWTC$@G z^v&028G$Et2>RkNx5yLy^$U$G+1Ns^Y75s62HN-pPf7xTpD=YHMi7oW2>>OajW zejs#IyBCj>hjFiK=B2I(+lVb&S7hxdgcU}wINrDCNdRXX zAx)Nsn2=Ee${0Ij7lMFfo6%|T(}9jT>Q5e=Y4AbCEn?Q&%jafQlxBP@&r#ztH`A(k z#t6+&lzn#aTm&(o+-+uNk$MyhFii_rN7v{*nYcM}bXB(J0XgHmO8h3a5dgC1MFW7D z?-|a-@GY@+zvArM4^(3jnCoXVo>Yc;2z;PC9SGj6Oo5v9Ki$pGG%wdWyKeKlXqp-U zhH693nZdg3Q&YKRd?>0OVs~nW0XgVJThQCuf8r*}{ z3#BXE+V;|K?G<}U4at}!XPZ$5he&)ZN(B>pE^e|wq=gr84RWvMi#QV|3Jo#g04h?Q z<$BOaq#NAe2{1Iaz@*>VVu_o0rE2~f$l2Yv{yYXg1xEx#JWVw#c1OXJbarR-U;|4Q zsn(S{kvG#LTu^m<(fL=o*|?hBrFk8}z6RVD z^8nR%WW}eh#yme7i;V(IVBbrsz=6rEdtf`$>A&nPy()8d0dio`%56X*R4$rbu|P~( z-p0%#a_uC7Nhb%q>qjUnPG;ydtc!&@l_vZKOLJG%{w?F0x8sJa-v8wnqUvMx8`?Q+ z@dTwl%pvA9;I+lGs1O)fCND26>1zVx8t$$_9K&Wt#6Lx3@ym!FIu!W_i52)w39WBO z6Vg-?T7`@)ph4@AEO7n*&c!Q;enE4KvSpT#hob1 z>r~<NHnq=sMZB-YX_r-YvU z70{4q#_w`p_K)cL89a}5^8=JML;GR8&Y>M?w3X`Ss#JZGpD=BMHN3Rh|x!9 zJ3I(Iin83kG$^L@QBXNKa&GXIQ6<=-dVTU(l}+;9>xA`xnxL*`qK#c6q}3F>3j0Rc z{&}#BKO_9}IVWAFS0TSo>7r7Rs;SNO&Q)a{T~7}7s(UrPlFyXufiyi& zVt0urY6st0DW%@GvIp$E z!r@alx_735+=J}cGSaWgn&}a_L}VBCES+x z#gvE#y`PkDIRl^%8F$RR^Npn9%1LtFee_*q_t5W~<^ZsQ= z%w0XTl&7?>?m_UPb_`;GbV~CbPM3=6m?PNYZw9B35$M2t4f<^+>Pw-69y@)qLLDy% z=xTa1P)+4sNSn{()_nITsQzw$oP%oY2TJX#XQ=%gHqvb|>E*;U;R$^w5WM|u@vX5- zv@CF+nt3}luW@pk3qG%rdR74L!X$+OZdy6^rKL$jw%X!pcx}mhsmU05HRu-m20FUT zW>`$WH{m;nqhIw5RJg^CCQ%^~9i9E4-SNWK!UNSp{r(rPzr)}1QcBq%>7_Kp zU5jbZ^JaN#hV8?Eqdw|#6Row7g|1XkthJG&81ebH5r_zi;kTH+T^L{dVBvo2ev3Gr z8phr$85Zd}ng!X{KA%PjgOHx^>xfFZ^M`8JjeBb!I9_hS+CLC2gO{ERF^vT9o+wtU zaH~0CVVeHplVup+YKc*V>7zp6|42)c_n`7-)d!ok7HV0)XE&R-Iq|~}y9IrY22duA zQ5cQ8(f6i=(__7*YsUp@zZ6*l%OyL)01e!ZukdTihbOyNe&@kv_uVd`aVzmtH}}6X zu}=4|=^$^Ei2q5QdG%ec;hx8 zXijfL)k>7{wM5GMXOLTtYn`x%CsY z>@n05M6aEA`G6#NjsoiZEK~)~M4|;geehsQ4KJkxJ*mc*qA{W=aC?KT%q1QECp@cs zV?PE*39tB85_}UX89w>PrU*k|co*6Fff#v|jRLF973kQ(C4{`}Gse0f!~F4nw|S>) z@gDxCUzAAEBm8x%`RiU*v6(V?UEQp-H^S{GFDJpIM$&EZ)l+WmgEy*CvNbkG|BU!&ndBrK7Qjq-_sBPn%}#MK5mXbd_f9P#bOVFU{{^Y_XA5; z`Td9%o+>8ngzY~zASnhA;xt9>{yc&Rm5Zz6_!^D+MghesY>hvXKHKZf1Gg=IO84h* zVN(A;#`hq|>#1yu($dFRTu& zZcX{|J_?9K(ZFBSz}%j&;gi@>C$52&-`*%pOt#YcG%A^ifel@`xirRfUy{2u9i+O9 zkJ&xDW|WG|MYt0)#Q*!N)!+oerK3LV+m(f4JYLGu_voTw#(I}>Jo4uBQm)E=T&kig z77IV}kV8DU;t?=C0yidfSxHR+pKFQxmxWX)Z<7Vkmcnh>Av5cqEzc>?CP$4yc-E{0 zM5d9Ft8cyY1S2Qf0~mdL#k4<+7QYE$0GZz|FbAIAuDH<(txnaYU<^qTrwhyF;+?cO zVs-viRXQbNT#o0yosWf3^dnZ-*Hsx;;)zV!W_GB4zqUPxTJ$-xHu3i{avTDAs=S#Q zytlK?f1Q(Es#Hkw<{D)SB5)z9{ZD_V0szV`CGij9Tyr9~`pVCDpVF<)MIn%ra`krx zWflW^w?@l1!-GUyruvJN&*g~oN=vs^Kx2EZ*IT`!hXeDn?&!$BQ=!m<)!~ezFWe#e zgg0kZjFOR(ark1qs0ijAXV|-$tsz>a|I8!oaQPd{+o(PAPhqR0*u*7h|8vZ?Qk0-J zwqW3FIfuIjUBi0^x@@GVCmeWUjlZAeIau}tI?^q3Kcht0vujy|DZpEU7>wWxI(+fI zr5v^tvVHz9VMJFJPgCtpCgTZgM&o{okD=RF#$7yUYwW{mThq0qc^q~tIw9h&5fpf~ z%jX$5hDb|ft-F9(MacrqTb@3ydb}#nghYt~IAI0PA&bXpeUCijzq_ksKjz2t0wK>w zmdCq8Pd5B=_Sif$w3#nWG3N%a3gZ=DnXK#%1e@)ahT!2})?1iI(8ik^2s;!E+p`^u z%?2Yn?}#fIxT+-S2i-NvF{CE+Z5o}zmRK!(^@&kE{9)Iot8oWDja^UO(jtFb%%wWD zu?%^3MN}R4su}4sBs>yBr6lk8slFPx&Y}b()Sfz|1|0A;gXFJ}122F^-sA(^@R?lF6k^ zS9=l+&(*ZH-tc3%hI7s>PhENtIX+|%1`Mj#`=U(4Mt%5#6 z!fmUQ7rH!WZq`dE(e;Qvj)@wm=p{c^qUdDqm4{qWmPC>A`?mWBr{Z!Z8Ypbo^Y z6~2`O=>Vl1JM2=cT`u2TkK@Lf+D`PQdw;TSk>JFeMQ(|@5{k)qlA;qbHoq4YBfPnI zpkyu^^E0xl+awhWyy^%z+c@xjx+l20(`35*p7NP;$dbCPlu@&(RORwY6t}PM=CLTj z`lbiz=fvmZd_`x6{bIb8JL>8+U7ibT+x+_q zl$(;>(Q-A*-+$#nSn!nwWVD^$GXe-Rp5}ea{?knLxW@XF1!H5($~~bxhgYSZw88)F zbJ^Vo=m=^O{$%W&ZWVU){**4_&6+G`q767Bgx}Fj}ri3YZ7Np+G?n(N@lKMIOD{EE^Kf};c2W%)hx)fOAffwHgi}=FNQRM>f zBbi~~0n}Z~WDDikG+WjAxSELU>v+`e%~+l_{lWoOuD@WQB2%{e{t4Z^x76I{+Pxhg zLi>_4C-R3qlR;cF&y6oooM<|K{IYE=Z0&BJ%F=KbkBoZU zeV4-YW>zx74NB?fNmR~*@!O+Cz36HVk8Y58?|MC9EmU5zlwRF0D=Wr|%gBCwcHuuZ z-oxK+`BoT~TB!7{!*iUAR+B{NKR-wG0gIJ%>SI2K&R_0Is)u@YY1HUFVSKiE#V%mEErWQ@`?kTd}7dyA@&ckt&sJx;9%|u-Y+fl??p~ey} z{N9frgSpO86ke-o?Z=j_@$8-J{&FcQgSz~ro{RRd+|)iPjj_<(bAl@w4eKC-ubp^c z>W96qRr5O--{bXQW!KVmoheOh-$o}>=WUGs`uzKq_)5K71%H{`rc$1e%;a-C_hny^ za9d)SMMYkg$Ul>-`&;die80~V+~JC-IvOibU;_w$R@dSODi^%=V>0lyP*sE$V%w+R zfB8;tN3Uex^e9z!!C*_gdWBlMD7t&o@qzO3h_b40iHL~U^n@>L{-B~|6^I?LS$t+q z+t411;*)iEiwD`yQMnOkNq(Fg^Rj$+zf^&+`0#Ny8Z#;Nn@0d(rU$X>>hC!wdVZDa z^kw;!rL*FF^B4!nc;5xxpDXdoPv%of75IoxZuKHy_b+6;2j%dubbb<4(S5vp>YDxD zZ>3xMOis-;5nK8W;WIW^UKSS`TmXgRpF0SkALTykA~?R zZ~x6$x^Tj6Kw0a_QDQG04q9UrNnvKgJ;^3{tz`1La|S}~&G_dmvXU5ZijKq?G5n!o zVofB`;*Ckt-(3jE7y4TOrT!ct>kV! zJu>gWMP6p#l?fb(TDs^1f*_%ELe{gYDx--q1&_ z!bQIBU0ZfOCQt6fBqut4tTvL-pz60Z0qoy}z(C69IYJCza^=rpRi`&&=f9|@&0EAB zxE_jrbjNt>s>pqh`y-{wzRNp*Cr6n7SLy2Kb%GH4JO`Sb_Uh>VZ~toF6`)uLN|y%N z5y1HX%1hi^I>OL=^6cCtRdkg*F>Yg?q_-zhWo{U>rLO2g$SpJ z)(!W0+m7%NR;JXE-ffS$FX9g9iaS;}1rfH)>2%JMk*JgA*<}D#MK)IPMQndBIbkE4 z!XCXtQp!f7e$+skU#aun0k{)*o336j5}Y1d5;R!J+OFts#88!0)$*GqW?zCthQ@bk z(aH%n)bmI9UB*vck7eTVQcvs$kFb7C&2J9;`1j1ZOk0<#Zy&e$G+puv6`C{3zx^csYmhx;*)Xu1}-i*^j299v-Y#$4X=% zr&wIC+B3Xv*3EU`Ku|7Zm#=&?fIZeJj7IlA)1hhNH?xUM5-a7%M@8MR+XmRv4ZgeB z#4E|p#hd~41KJj~TW?=lKeY9@ad@hS=1Tcp76tOu61{?ffw7~K=>1m_0Z`Yk%+W+? zQ?d3kvJ;u*SUcX2XAScy3CRmT`I7##C{fqdsLX3$OMPD#@@tn=JUp$y+eaLzN!RWg z4A4KcZFrXK<}MzL@bm9Jb&CBj28sHleWI15Jou(uR=DhbZB|g}nuO`a9o7&kN*?eA z!Y*KE=dr9Pt?$9D|#1wgy|i3r({Kg17%8+PzYS`*BIEGs&itL4v#1sVBv&)aS`BYO=bJfu}4Q ze74nDUruk;!1|W~{F)miePb$I+?(b(*}YD6w@+cT=J(>_@hP71n(vWl&qw26PqU*H zYJ?xEfP`vqYKSW?0A_<1f;fWGo`Ar_q-U=K=X2y4e~aY=GHP{W)gV1Kdqrqafn$-t z!Wt&sUWGInP~P$HqW+)zm<9W)ryqOe-ucs{l5?_zw}~uDLl8$5ldsDVsq{XRp-Mk zE~#H5z1kbs7+OX|C6VZ{LvNyK_MW55C)S!pH&WR7-ZQhDU#;2RGQ67zq&+$EuNHwQ z{h<}?QN(X&8CT|db~9x@Qx27-`H4JVyue9w{U>MyW?BV`fmn>So^r(LvNL;E;d6+w zQqvlvJ*!#GAgAAJX{@iehVK&SbqJu2ETJ70UBNk!u?#ratO+i?!qdDB5e+(y<~3=n z!vGP*@6VZNpD--UZ}(OqY_Nj1c2MqsOTcN)Q%TfnjOObeEDL*;10NG{q@)={JJ`4# zpdLcey({lgPV%g^URes%N+4vd14d(L+KaR$ffaKZMZhr43fdmTT3atZ+gm$4$(%vj zN&?YMNNQcA{so(U1%6kGDF{!{s>;{rL`OU>(353i+VFLD=(h+L18d!0M(NHFRA3#d zf7zpr^>8a5*Sp#&a(Lv_i&eQ2^(H(?43X7SvoCfmOQt9_zmOiBr_?1$Sii+1eh^jTDr!p#ea{m9s-uAi7iGG%F< zI*DH8S7kpMo_s^4fkUM$XgdyI|DI5sCkhqn3mQc3)=*7s^qG(rQBDh|v$~y0`S?QJ zjwqxtFoq z)+8mJ(l#9`zA=8FHhOEH5xzTKwLU{M&a&F)fCT59iisuq-!e{}PUEDB-f}kJ=M~xd zf&gPd01`DkxL6WH>2uuje85xc?EIZ{Om7#3FWAJhGfHoGYs+D@&-(t~5liLTy!Me> zBnvj!$E(3YX@1A^sStstE{36&A`3S&`|ywomq$```8OtRF3pAp(V4)hmJ4xZj0q6K z{I3%lEJ8C%qByj`_Y6TzK&~--VyyRobdvglY2Dj}&bha_&si+23Ly{?5XaN&V}3;{ z+gsIM`!Nj4fPmc*hx;GYooTT?t7Bo1stZB*d%RPPN7|yIr_<-Lnroc-rH;<-L6#m5 z+Qy$PL$NfssNt3ui*V8<25W`k-MHxm!l4-IX8j^2?-O=uuNgO)tU*_#GY-r<;-jzW z)cmPa30;#dp%JP__WpA5Sy7I-IK{x441cWX&RZtdM+^q4C`(SxjfvGJN_`Qn`L3vK z^iCfyYFV*{)@`RTuE+M$t~QVERVYQm$oEzFKP`mbraAr;`Li)!w+A1{2W_T;0Z3qV z13`C6oUc~YYd85rEA?P5<|=!rvlN=#u%&rwe8qQx$j?7iq4$TRkL#;3X(nUA^*59T zuOp$4miPfn82COIwEhtgjil4je=lSny70|79W!+D4EuA@uzc;wJO63V*12wcUvwSJ z|Egf%`XIOjE;h$3UX%eaE>?g`wyt7EAU9G$UJ~mXmbN9fsm;qwEAO*bQO-#WisOx> zGB@d8^`X4|g?6Yk%+#~@5+8ZD=y2aF=s7gPWgi6#wl?eT-OYEC@6H+jB}S9^ETeGa z&;;My&jDl(^>H5&k0IlDMRnih3o?kT#+7#l3N1y zWHW>@e?f~&LslQ9<$0TSna<$kI39ycUo1rTzh)-wKRew!74Sh9LM@mkNEt2{U(T^n zQa5rFdN<(aRXDjAUy17c5L%y0Cm-keUemM^7EB0RnYXm3c|oDFS;U@trbINc+4pkb zwAGdprZHZyeTcR$)VdpOE%;;i$u4_bzSnu~CRXwzvR~{S5S@FF3S6WE3~=JpCN3Tq z`jbM^FD%Tcwm2GjQC61S0V_LwV)bt|Z7Z?IKX)q1ZNCgISkjpX1<{y89UJ%H>~?)H zm&gYGolQR}51D8g*$7ndedD+Xb#6mlz^LSB3}SU5vO)GVZ$7cBNm`1uq4KJ}8|3XH zyT!Df$^9h(n>DATyiu^PNZ5wfAAl)uTmXQ3)5C)}EuPXQsJ(hAiAfZcfI6;<(T}5C z9&N7h9ZLn%Z|lou_!I1>dy6*s=+MJIr@dRYi$J(=NqHo@Qp#!i-Qd|@9d~`%T~r?w zs&wG-JbWsd{1z;Q`Rl=3iXuIcQ6iCY z=neto4;_oF7g=vh$I$O*QUbLh{RT8>a-z3O2eQe-O!1|TVj?61vQomae4Q`iXA8ae z|3ty~XQreWs0LrPj zRIxuv%ReBU*givT9fJN+HRe3pHC(ys-0P=O!#8*P>tOF69>d}@qd^ayd9%|$6#^xh zfYU_|4|&lVOGuB~dz6}p7~)IMM7aFvUz%IvWqUkmDLqYrVw#EadRx`l#v8_rKKs{e z<4q!{7V}bfv6h7H4|Xg=zh6PcC^{-~N*j$+C@8eQK8w>(I1Akxxfx;KaYHV0DE9i< ziv$I!-Sd&8K?#rhLOKF;x`umZMaj;Fa8)Rg$_nNMtC&=I4}1tOq7Rn{cmo6adm!gB zqG@jfWU`vM`sgXU>Gw58QS+?np5_1tf+L*yk!u$OUt4Sj!s4V6=6OE48g-a6oZgxaSy3NIj;9sGaOfcx`_N%Z&l(=EeOwpNT zD{uU$5%VyfzEis&Q(E*VC>q*>UNJHciPO4&i7(}vnm2>~ZUVl)s7w9HxOw}uDuBH6 zeIq_(7F$er+tP~{-gy>WxhJRR(K4zU3^`a?9G7zZ|6Twg@ZT{8J4`rfJAz^eT$(iq z6^nWEa06a-x4=OJ&G0SrhQI*M%U3C9bjhOBe=!?xy;f0KDeQvmQjMT zUw+rh{v7vaLD;m}QHdDK|9)YH9x}OGGDM6Tl+w}Yc_|e056XadCZ(t+0QHxOnk&~O zvSxeSDWEdnGGhp5vO8KS0t=+ij-Ui2mX)dkZbM|Bb{8dq+-gS~W;Y4t* zaAb5y`8SsI&m?2R2I?aQW3Q=*?D%VwdQD6|mIkM33Y@J)!>*b;?sSG6?KfBr4ouHH z|5U&(#X2VXRqmUl3fXwG{;ajQrc-_l+Dt6QZO1E0SP8&8`%3M!r;dtaWTokQI_zFT zPqwpfCg(mhZ(9)k0y{h8X=&ooamJYa+Jd6VlT& zu2!Sv)4ETPmHbkgaJz!$-DJc2vrug@{@mKMOSD*)N1w_O?q37)jWe#{Q80xq15_dd zoy`m`DdKbzM1exUV?3UTxUS|~^PZi{$CseIsYfK(y9qB3o_I=03%4Yzb`XV^|4wNO z@PU2dzJxX4Lpjk}tV9p+UsDT`0e~P1T^OR)FH5NI+oPWl#p}UroJ#O_QO%?5g*`Vv zoz8C#d&$HkGD93I?(Nym)3RW>!Omlx@q7E$ z@R6fh(3b^Q$A+L5lbwaxe!+Mv_4ct0WEyG&TjD+fR|7Tp@o3VYF_gMM00=)Jke(H- z{=de)JD%S$QKb+v@07{; zG9D_tCR>8lxxex@VsuIErVy)LnB%1f>b%Rm8E8YeDo1$dNS2>(=l5kZdOZ0G`ELvA zw4~VVfIamfwgEp2!xJUTm$Oje(SRE0zydV9`WRr@NN0^AV0!+ z_AyB%m5OlsekM1o!!`qv!{kz<-GSrUuYGXo9ITaWia2T$gjnUkZkYaV_aUvUW>gB? z$Rzxb9o<{zz1)L;K7~gpfGn$lV6MR$NIJz!|EYnixLR~(vAuM04fWVWP|8X)3Rk;Z z+!oKP)-7ePA_4*(H71nG+*t@!jxrdl<;xr4FBttQ2%Dxh6JiFy!<1;(>A9-<#i39k zd$K@&mOP~I{}A&SC^^cSJdI?VEUT+avk*96K3YBYc%yzc?oO#$1TIdPr2Y`XWENDb z!S6fl5t&f(;rZzSmLeCftj5`mN(;G?#+&Cb2o&o^0z1K78A{b4`6TjK9cvTU^s$YV zRhT^dZEhsh(1vh+LGsE30DI7}11NwafWb(so2SG>U8GQT?)m$1a24tJ?)AizgU1Yc z^1*)C#5QBm=+RZkBar(WaJ}+*tHU`6xSfQi62fE-s$9uzi|!<^RbDv>s;gi~^EqLc zCPxh2rF>4WA_smDHOYv-%p?VACR%lqr#xTz{n(p*hswV48f>XW^Kt(A18>JFF8ypq zV8{DS$4wBR<>jA~a9BLF>_5b4fUwu>S^|+&4Cu3riNjSYLk0W|{KEA=$lGMaoXIf7 zMgOLj?(a<9wQgJxXn-908VzD%pb%QgNmLJ$S$$JOU+ zi`jvz)!ZLv=l2Je3PAueT|V34UcYw}xL4t9TDDw}BS}oe58=!1^!Cbz-&XR{iFH|w z{VHTgF3luUm(2v^RDjYDDO`=`8!Tr@1U{3#xr79U<%;qfwpCi)_i}O&5 z;%dX^uB$ln9Jf!SeTaz@c)vwczKsvjh>g%w+z)3Z$?|(Ba+`T&Xr{hqn8XzXj&hyM zr}&oYS0YZ4;+*NfwLvs%2G_n`t-~}2`F^#hu3egV85zJ!_FHw!2klV2NSA6`S>qL1 zQhD21FN*PD)O~?o56XA%;{g0;muqOx&!5Q?6%YOMUzDvj-2!q?Z}93wLTeKS%zAGc zUfiqc4%vVJVKKIk*Voa!57!kP+jWFUHX0ydu$VI#=`M%6uK(k4TwS ziD2U#Z^^TKwOSfg6FJ`R1Z|~@y?DjGbNo(bOFtG7odUbc9igE7>gjXR@RX}0Cbn-! zH-$M?oO#|^@T9+qyKSheDD3F0l-y+GA$G0ob0oU$f*B6WOuV}j`!>4SIT++2kGr5TktCX(WY zZeMYFCzkbEpz*aQS}h+4W`0sA1?m_xvEx3-?YiD}-!I3fjC`318ku*$t=3E6WsC?` z;>2eA9#2skvjMl3SC6r&r@UPUmt5qc_v^d+H`5W}YO;~sckk0ydlP-Qz3!4EHe62j zE{C-aRtuw6(^3d%4Q(i0e8r0VjkM6W=my8RxI|3~urdj(Dsc?oVFp>+6=`HZxz367LF9x_?(%U z+tza#3qb{4`jjzn0l69#wDL1A1I_757bg2`3p*{*I(w140aP1vgI_Mz)=p34iU{7d zhdv>?7TbQ0KPWrK2&w@-YMZJ_&y3bfV~8+l0yUfcan2-_I$yZ~n)>l`FV&rlB_DX# znmf@{u=~Qcr>TqPt^KM`FiWmt4)!gn&UMx=K;wujVT|4;F9P&S&3i8g)V(sNVfL7~ z7_sZ#!u`YdhP~^~LcLJ@raS3CJO|b-z8i1d9q&G z%xFP>nKd?hF??AyA^8^pO#VMEfoePvDwU-%81($lfGjcEq=UllduCUf7K#;^RP)C>4N|IGwzVQ6E zS(u!$9QAU_Xm9J5vF)80HO`5Dk=C?2zR5^o+~v6GD4_e*NaH8>xl_5hz8*|p1XTH& zvXTWLZIENz1g8G6F^lxG@7^uF^i6j%HbsI^ah$AA&#XwY^S^}g@Go4TPE|SS`XGAL z+c!JJW)^bd(~2^+oc!MG3Zj}-612}~f9>)x!5|xMBy(N8NYj2*FR#`9jh0{zNCcl{ zl^*{p9{x}&%F)jbw}?^-${PE9MkWyTU;|owJ%MJo1uktke*VN!tu2cNHkYM&N%#BM z57j$V!J?N}#_=9{Bz!o>K58rVy}0n-iYJNxAxmPw?53; zD^Xq-nP%$Til(b&mh`VCP|ZrF&jd}pB)v+rPOV z#>CKj(;q?3+{EqKZ{z%c!kWpJkWeK@Z1$AZehq^{4-{s&c)WB?TPkZh6f3F-rq<7$ z%Aov*;b-l{X%v|X_^#YhLFke^%n}h9xCzd%eCm2W+fo5mWL zigSW$#9$v^WXDfrNE$ifNk;k3!l)w6H@U7mg-$j8o49!RHC3v*SJ6;M^-$NN)x)c^ z-)d#w)Z!)a)^eT`AZDi*x6>Yq!-zCzX@|g9(-e-G4AoZLE%zu#^e3d}_ZM+DV zS6+1|uLreFfm@UO(Lq|O?fEZrHG0vH;4XUQb3m(tFeb6QKgnibdPzS&n~;~?B6>a7;?Gv=HB_Rg%m-I7Z;wPW4l`zk|f2wd*EzsJKlqGYj62fET_2TSe z+gU8~r`}e7|JDnc3vy4uH#uFSws$9zpn>~o?6da#u=tc84&qV~t1PdI`L_^&iWID* zIvqbtqYQ|F`C%TfM&Qvc_C%=PAGn?Wj_U~>NV}Q19_)r{!1nB_KLZ7s+?TDBr1$jL z|6Jgj7A8UI%k{ptQx+hUer%uAf;7*tS^fFGU5kX{D#ZLh5z`0*1dbeo-TI~`LRs_> zL6Y-f-awx3t{y}>*v^a0Gvb79%9IQ=i%)^k8pz)Y*313 z@Sk1=7_sQS?x(`@8^zTDWc=Fd*-G-^s69%ryK7fJV&1Y4ruzZ?rX#jrFHV@TJ{|_0 zm(xgtUOWvsz6leVOt#P)uHt=_fd+(M$(8pnXI(7`w8%*xNku*H8{>=mvA!Mee_DJj zG+B9O+JI$K?_G8pHKQXdW^WpUJ&5L@0=WeHJrm6^RMk|`@udO^*)wz(TAxe||mzG}r>uTLO%GDwBQ6+)C6!1S>)p z_j-1VD(*F;FX4MmeYrMEIX#UIuKGp%Wj89j|mgFBmsVtxm!2;2o&n;5^^2gM2 zdiG4FE==q7Q7}6-JYv4c;@GBvq4I4mG%`d6)cp&=H@57gwbu%q5ZaBnm1!1>b5gW) zW(L$3PJ7&b9Qy8D#T}8L1>65u*r?)0ZNBIFow`W8G&iN8Z8QnI&7Rjrv6g`s@?r@O zmoJuZBWQ+;gPCW?w6t93<=!;-4-_(@=VrDHYDzHcblhs)FU>guvWWkIG62$fK{lqB zB-$dLZc>ix{&Q=9XXs4&d5LdrI)JdP(oI!>uYdEjEskjamPLrX?^FT*;KBK#eQ0yi zT?J3-X6-fpPW3H*X0>irJWpyeB?A-kPp1=QN*l5UiW}cAF zs+v_e5#}?AnP$=X4BXX%xPBYsC7Uiv2=-Fg3kU?K#P!=Xluwv&FaO;~+F(0<$d<<2FWI|;G?7Ra`~xf#Y^?wm%^r7)Z4U|P$X-)a*oQ5yP~PqYPR?yS z0CC2>q|~hH)dY4z{r|y>Q(0L5gt(T{Q%&E`>W25HN3dsWMdL0Rci4HweT4A=RD_+F z5CstI>>h0U1AI$~4mRxiI#;t^j+LTiQCrR0Bw9r^1vjPuCVBzy;Un2RsWo98aTNv9 zUWxw!8dc&z2>CUs5$X2g`xs1@QhYo-*df4+B ze|3G019VdmWW7fLG+H^@1yJ_t8rhzlp7r3*E&0Uj>FrR$0s;@Es@mz8V z4Vj6C_RCg-uVdtf%RnZRvUf)40t4t28|Bg_ErP7Zbbzw4yla{l0W>cGv2OMit&v)s zM4_&LN;B}B0vJd! z1Mp~u&yDWAvu}coHaT1S^NYLBLa*FQVFPs=J^Z}tPakMU>x+pn*75fnBC(z#`C)kR zgj2Dnd1-1y9WaZlvGLGtYv5qBR|E5xZ5eljd3cr3N2d1SX8Gp7ArK70w~9cN{1o(| z>uCiKELETN?#T(=;vluQLVu6~eWM>mF2#HN&7lqtX|A=OtXjlOnxUhR`>ifOsIij2 z!bJGl5Ck;z4Mz{`(-?9+WFCkyRX-(&CI~p~?m<;{@w82wh&X*Y5Darq6Sb+Inp}4? zp~OXch-tA?#b;A-%s|N%1iQ)dGA&taPi4edv%tZfC|?xY>oC^Ne41iDFU#F`98jRnxG4{j58WoO))Os$I?~**m6tW+Bs?!(KqdajW$KFWJh&Q zeSw?T5x%JH*D(X)0HF~;69mYXM$6sfBn;7A2vh@h#y%a)_8r&&6~<0A&s5n;Q<(oI zF=M`8@ZS@RzT2N|?WuZQ5E-8_?2>YY7mB|+s~W0cb2{@D^j9Fcr0!(Ipd3lC^(Y=w z5{>M`>zz;t9xwncm z6nnRi3GE&ZRv~6G$odoAbj=R?5$JJAMbQ>p1zlh9O}SNqiN{C-}*WLrZrQ zH7Kv#<=Vhqs00I@fxSAqRTMYbdM+*xqBUt^2NfUJb-J9xvFUgFGwdMt>a#yj0;G{4 zCx=l3#aQLyPqd1EUk<%h0@vhCP*#zc3G^WJT* zMdkuQdb`5TA3%lpNtfUY!l^{__l3 z&hUZbVET?`CO?MD_o#)2C?^k;w+d7ifqGmX15g>>n8^7Ew^%a?#07ERdt+nW7K5A8 zKKV+h1>hjNNqJ?wdM;EUiqAfUHGA%q(ibK8B}9nrmvx!X)F0Tgt8 zkfYvFT6exd^a^Ba3}ae_2TXsVl&bn4-PEI%zyogacM6m||6akz2oRsqYG3aCaYC|K z0%KAlo@zA0&=RNMy#v>5;skZ$88uNev`>hc_3p_G^<4#A1>!p@EY0wf$mdn`GJ2>v zC31vhiY0%TSab1&Up>aj+bSsOf8wcxr!VSMqEK&sXh-f04AM*2*^Gr;CVGkHzQmxq z9`NR3>%P)-|Jr;2nHRuE8%Si2-6;vGE^SB30~fCKl{R;0T1Ta&XzsbWkxyOCUtU@| z0F~bQ&Qj?3A6`AiZJL&1j!olprk_p7imS+}OByHOl>;v+>EE*z8)iEU;D!WV2gwh;o}#$(S3_ z7|6@HMpzYPoPiEM)W}wd-o3M`Z??~`?CW8aBv2{MmACB9_|lyJPY%d&KU|J>IaoS6 zvh2X}T;S?g-~?p-K>)!dzx>^w1wo2OVPj*(vJ<_-Xh#4>+E%b-*<8JOVRfO$jS`G8jn6w3mWha2(Mf-NBPKJ_=uv&bHLZ_vyK#g zOL-5|L|JWoQ&zrM#+=phb9>!TR3b;NdR*Uce@CKR(4|&N1Y}b^$uHRdV(`Ct+p?3s zqVb9!5yw10q0}CYVJ46XZQmU0c*fgOcu-M4VJMX>YnAUS>T`SMqo~R%jNbxU(E+ZjtY|(^l7qozv-S5+t2;&sQPr@m?G z{;DY6P%z_EOeHhD%jen6LFt}@MRL0#@sO&c*7QDjIa<~Rw>Igt)qz&e@fghiRJ-m! z&%4kTjFAi&C~=m?>vcly#tDO|7b^V3-PhcOx+RriKp|2?SLB+YjZlba)CsBnuo&N$ zBd=>pQj9+OOmU*Ki6q!D_?7#(VG9qU+qfsnraJwImb9=V>gTHX;Eam1eX~I~jW&go z9%!TYB=<>Oz(~<+yec1Ycg1gOB_DPWD93yLLF*Ksi7Zr!3;bRiwne_AGmff zT0(z zqB)T_K_kGIDN+nxg?t+)NyE-OFVs(fhMkKjBg1${u7A(3KVYVAdwc5h_^kCy?d~BD znoSrN&wBPQ3CcSN!V2zeqf`70$Ubj2cu(5dC3vB zEMzN9W);8=$KQy#$m0ODhMH`8yur%UM2)p;=sM!QX0ap5VcHQFYwZek_=~g(m zjKaIv1+J6Kp7bsx?skTMt#TKOc(=j&fU?QBZv%-mX4%s)NTh5A8&7x3fs?JL>%558 zC4?rJ83{HLe*(?I4kVO)BIrE*j5eHU`P)0snp6~O@onC3527^cg7J2gP>VG<)mFAT zd)G>MYIw&c4G1Xk^LcT4MYO?sb((YDipjO1hhB)B6JF??F%3+SvM1@Dwyp)TA5NU4yT5&4 zEHH<1mC4MWV-=`bi~C^uZVJlU!usUFeG1B)>irR#!<(!Y*}w6sOqzceQGgr*%n=X1 zcN#%c_9k1&ytIC1h82!JJZR>9r;MUg{^NuEg6V1qh@sJZ5p`pX+_?Mu&%H^YnNT>_ zIGoa?cD`m~hM}mF_~tZS(t>a!4$oc#7mP#+{W#KIAA+f*_7SCj~1e;ucs<2hb}oJ>FIRbwaH~CG&=FwwJ<0Q|AE&&3VPQFs2WlW#mWK=-uZw@I&sz$_%|Lea(YC%iCqMyb%AE zZTujd3|}3g)p&UarxOz~`lR$Xz9s{{=+1z?}Cfz6P9nzR> z!7gSZl(Xg6)G`UbJ@BBxH>AD&yH7pLWdb(nT&+c-R7%oeHRo&K!ru3_0~ zlfkLR*(7EzfyQ{uYI<&bCiLG+Yyb@6AEh#83L#FZ? zHW8fUO7)44B^_3M_gmq);^nOYfe`azfjxe?`+Y(dcIL2sWM& zl@*%LP5@Wy>3*&pBAF6>(=MWUV5GGw=}#|1D>P8Y7k(ORM)mRj)WFcm$v0EvBj92( zWB%_x$ zdkP@o2+QRG$vsJ%_1Hc*7_gb5dX^t@CcYbfVythC%fBETlk~K^9$3EFB?A`JV@%s? z_*|j=P84w$CB4w@bZHCxFkc8CL0%PY@?L}R1PEP9IfWU)PG1|mRp3&ms~W0M*#Oea zwabHgc;zON2OY?E2CxsfQG7?|#|p@8$dIgvFtuBg*c2UhkWpKRA5JIg`Kc^iQjD^wIL~wGln6M9?7e4|66T@5(5id^N6al4*?VpygkpZ zM^KQZoR4X4?!tA3w$|bTOD(3%bN8;vOsBFP1xipGuOfgu-KTgbtPrN_E``LP2U)I# z*OS5vclN?FZn4t+?hffS=AI}Uh?7u@Oy`NpbkAi-6dVRKb>pb9QG)msbdWx!&|Uw* zKFE!yrE941v~!$K@w&q0_>8XC@b{51)yoa^K&v|J^9)iLf8YQsroKqS#!_&=zR~N? z%%Eq2{heHHw0C061Ch(ZmX;UVpY1BI_tUI4wZ3y(7(FSrzkpb5$uoCbHY#8 z?ij4{N;`u%V}Uk!ahDqy;p^+I=$nc6d7oow0zMgbf)sX6q*o^uie0np1Fo1~!bE!C z9Q_90Wm?AFsRSO_gewh};pjY>P;UARL-D5RU1(xms{z}_oYc2o0cf^BpGTLj676lI zNK^z_eMX}o4vatG5cb7^8hr4bJ$F8=W0+t){_i_q@}MO2#pUc*p^fnR5{ z!5vhZ`}-Q|VJEmhP@ed262Ay7o|@)nssS8r{%}&6xnp6v6rmRLDDTYB5}KqN^=hIN zF*ZxtH`J%8=52Ag54FQWXyQ?+#ar`uqz}Vi|H)>G#1BmWX$!VEIbY1Y%vXaF!>;(L zK?BDjLUy(aybjh&$15D_m}spn7=CeiWj`!P}?qvM4rCJ$zjD1@Xly z@&Ishn38%pB8U*-N5x2p0c@x(t^}O0TPMN<(p0+@g8zw{$R_AoHm{r`9wbYVg)h6T zL(Wa!d@+@8mouQ6|G}LO+8e!6f3>0B6aXWpD652reHFEWw=f*mH;{xb)?V4E@=S=Kz}m%M9M` zy$V;7l06?tYOq*DiV2N4OHx%VX|1f=)=y`RJW;inb){_4>B}F!NT96ZQ|TWEi=sH1dD`P62>aWmZ>{Pj2Z8sTv$5@LC_l-KHOslwK6rc@*qz(?HL>L& zEv4eAQtG^lfe)d<$!#2h&$ulcQFRc=D)2xyx_7(PT=7iUTGqd~_Kium-E7eu^hIv`g=5x7P zN{WZL)50&tn$&Ud*S30It~Bv;^JX^BU#N3<&5!wf5XVoKUMNIR7}8t$em_8KQ%k0ujyq1D-9F(3ND3g#HXj?M1;f_~uf4 zFKYODQkO{+`3}rG7xwTsqG$HNG=P}(%-UeE!TxOXqrcjuzB5js! zp?KDT#t);@f98cC1pT~Fe@;jTrDt*%u42kJ` zdfpKSK7~Cyn(DVoEehK%x=|g_F?MPd_`#Wu>MKOkZ=E)$D$-SqOQiMK^b6b^+IG zJ_!0mm()ZnEws$S;0re(E!HiK?*nWSA0oPl357XFVp#`n(`xfZkoK?D_3rV>n6aob zfkFutof4~%C8ROUo82=Rsac6dbHiZW>_WaTSo(%(H`t3HT`2kdpjRyclR>VqG=m9a z=n1{FBkLB&l@w|y+LlBE(zKhB7BXAP${_08A*~$q$IupXaj1o(cn6q<0(ZlpwEbIL zF%f%~fHYroP$YQw$SaCyCUA!CN4y|X+;p(F4`EIJb1hC%Rr9$wjy?f@C8WVO(DkUN zm2I=4q8o{6XFFOMMP_ef?hnF80XvBx;b8QY6csXLJRYIGPDm~c|C6XQaF_6|Tu*;D zG%+^bDux74fm>G27nDEHznz9BZ$2H z%lBolol-PTPlNrARG7vO5K)RlrmhJ^x3MnY&t79&8Jt1CnF=X=)mc9Z^KmjR>k-M$ zgtF{ONIXASeGA#&<~}F8|7J{i$q8*wm2|-LgIrP*sX;9mZhS8%g|CHnUiy*4nP>*) z*m{skW17Wxk5zm!;aW%xPxBx#$EtG062SI z3+}mZ(oFfXQNR1Ke$Y6@^XJF!$L+!{cdIOBkb4IjpR7?5Tg01YJ8G})A+LW>oaXd( zdP`=HtmWx$Xw(c_%Cy$wl-YS)FGNK*?XQV3qm zPbi+exQ(5smj>;pTFJs%JL*HNHK#64tNA{kDoBMLt#54`LD`dqBR)p7&e~WvFelYA zu&b5+2sLnco&x&*?nLw6Y*rgY&etd3uEg351ca6OI4@%Wsc1QSQ>E_<3S&dJLRRp{ zeWgA?Qt585$^ufZ74f(gA&x(&jQsQEismZfR~lH6>u|#;SeW7{hP0!EsDq@3*mZg2 zY#6e`tBOjM6@OO#G;pqD)`mv^loAMOB~vm~O}mO80MI+?d8MVfJuXc=`@<$benc7o zHvn{u0i6EUZyIJbrl+CvG+(bLOOBgfj>n@C{37f=Yuv6wgy*Y#MQ}W%w?qq~d}Ibe zToTSPB(y-DgomlbQCAlXaQp%4!bS5(s%ukS8ap zVLFq);b~^>*QrLP_>zwKlBT3aQq*&Xc&y_OzAEi@HwG}042yJ2zhiAJUY9T4n0e=t z6@YJH>oM+}`{;eg_-oE%+XBKwVntwWo@;-JnpWtg05M}%UsdGoWB2;Lslxu=wgQ?S4HS?o9u0;e)5TVS+()OgXEaE`^C>kXgW zt0Pcok}dnLvC$sBl^)!^45g*~j3#CW=~W*sN1xSbCHE$Y*c-gA zFS#?DF0{8b=5+Hlth0SQK?p=PYfL(I9ag|aDn<78#=>o48Ct0)t(B%#^=RIH`R;(4 z%Ue3+lm2GM3u7&BUfuitYFnxP9*^M-@^ZI#Z+=62@?D*5HopHlKQaY27n@ONz(Tef#mHjTf6M>I25mGyO$*4Q*^yV0aY3?uj@(sJVc2V+D-7XP3c!KTp z#AaZ5p8+bXraJ*U@~^N)yHdv)Qilptd_fbRJflxZ&JXw4!fqo>g(l&VI(BApd;#_Q zj{F)eiVCRGx$TP7?+tAkGS{a#OZzXDiMzY{I8Q zN$ANAydV`YS~4P!sKWtV!SRF3wvdB9lZllxGG**w?0yCOP-VMz31P`x)-DlfLQmV* z_#ye@=rlnEgX=-KHeKa79GG*7(umti^gO-)xoGwk4QRzukA9ZTJy%ytlBqk9LUH_s zJyy%o^2Pd8^vwCWK^JS{HTVeon;*!0zMUBF-Tu{1Omj5ESRIP3^4J-x3X537HTFVG zQV};7=*Ik40U^My3(ANsTbiV`9@l3x99CZsvZpAi2`u(;UdQ=Vw1>dUD|hU<4+{9S zdm2YDzy|31-uh%wU7dv3!9mvcKDzN@IP(lgqH#O5sQ0pu#~DPS(D;=|T8_jy88)vg zHSo(%&5}bcbmbX@FgUXs-=_j9eXmurJuCm=wcTg<t^ot_lsJGlo$7RZJV!PA1$34TNUguLw{ETvB|;^qr_q*{(=otxS1%6-8b_u9 z!oJS2r9xY}x;`ZtrqljjtJBB2Fydf_E99F>etmqznn5esyxlTjyGil_%2yFOMECST zW|`^tHzhF`x^UriW5Sn`O0|^;5|V~gm)u>T3B`7cLrt|dZ}nnVIlu)2UoU)UkS_@I<|6W z1v8MfxVTV7?|n?h{CP4d$&;j{jnj0wS5UNdfjKV#4h6J}_t-TkHCCuOKmrsF9N=7j zqB@UP>iWf89EyQet%TXS3=Y1Rj&l!Ma>kby7%m5#Qp6%O7bZ{h#x^q-d7Zr=@@=V6 zMTgNeAah#j_?N1Jz*?nUVW&J3hp=G^Se2)Rir+bIcd=6k`E89GuI~z4c6hiE@-D5j zxuNB`x9jS}V=GgL{0Nd|=aeyGDGgNj3_|~xd0Kl~WUxxsIbE&XT;hYmt|ZE|AqGWz zlJ8KR0eypubJLE@t=o{4Z;o{!W9nTU{@>*DF)p0vy6V|&ZH>}UCx?wQMeIw_o4D!Y zbG?D19pbb@rgz%FkeS8$nih|L6x`(dPJU>}{M?lPSe6JxZz9AvU@!*%HNAN8KsEim zq@?n4B}`2BrsLeNa=Sr|L9dUC`9%={YHt_6A9M)`;yOx{1tv}z34Bf$LO9(;K+;js zNem!tCTV9mV@NL11WH|oT$HBA?rLgszS`uZ3a(#Q^ip4zQ-uzI;`_;ur!cFN3jrG^ zJ4bu_K$U6y5p~MP?8A%r2znG7_qF-?Yb)2Z0k$&8H|oQ#eYZ0Q*DZh_3NE`4iIxyo zS9@N*5)@oi`^v_|U1c<3y~<)aP3CzCi#vCC_)Gteq^jh4W2$`X177iQcu@In2xaC& z)Kl|6@wG);?WB)HK1gOvZOUZ=lB1xN2I+P#b3`6xDd=`zh0}SGz0@bc#ZZX;UYMRn z%xK6yyOn#;#hfZE>6t#r0h>6jypvPjP|1c)MbGWWUfo5f{)LP^<1gt1`^K4|xrLox zafmZ^zLje`G?%^%m~X=rZ(19h$Z;dE8Tyx@$|ctweke#UF9bY)UQQls0J;18{dgZE zcZERu)(y*KuK7+@2A*<4d+cGzDXe2zCA#R^xqP31 z1Y@w|#HrC1)8Z>8#t4DugCP3RZb{Sbwp0aIBpY`c3v}rNxNb|+Ovcy#?cLKCCp0t# z3DyjXtSRnQ(l)yHLhJQ~ZXJ58r(Hh! zEIuoW1~fr6$R2t0;Eg07r|97@zkQ`FNyjOP9FeL{cj(9k&F9q830<*?^aEodm3!&# z9XDAM%PhoyS5>EfD)+cyIsKFB{-nJbi{8F{QkA{f7<*!`0}uO~>rQcs8ou-TLosD4 z0b4EJyY>4oz30naav#o0nanS=&I{l|pd&B3943}PHMmZvs0SpBO1QwS z*kKx$xC6c81*AWN8XLp0isVhh2uBgYlLK$Lm&lp1t25JKe@}QIvQ9gZ++_8iftg2jxccrFNDu9GpZpLFDf(pUz?T zYshk!YOG8VrnrLf#S&4*Q1eQ}I4CH-!|PYX4|=#eua+z+V6`eM!cQYyyW7TVvL%?r z)089z>tTZ=gPdSVCi;`WM?!~Vo6^0KR4C%5-rbqCY&qf*Gj$~HK>qa>Q!Eki`}TVu zIS!fZ)0NWZ&O2N4H0myvy@QLAjo-jxA+t8}pCC&Keay>=A1enWWj2s*^tvTT;bVbU zYo~Mcx<-H}Riq)2BmN_9>OMR{1V50d{S3VRtNphYAdD!zI}zXl)AG}rna)FXy1Mai zbnqoFaejO;)UJegO6v2tpl8OGoo*3by!ylgfE!n?PUl4){St3U*nLr$Hq&VO0Q)Kj zyyRxS8@OnM)w8YRfr_spg?F^R?Ys2bO$~2`^N>u)|NWs15N%pbAHejW4pF!#4A3RD zqrzcldJfO)3IoNzb%&dn$8=>MCZ4oG1mjv_Xh41zht$#JawG?vS~M>aei1XP z&385;mYc@oiw@)aq~j>lSoS?rm>v(;?01Bse;d$y({g}TuM3<5*$|?jiy)%?u)Wic zUo#yoCE?2*2j3*8_JxZDh`Z<6PWULutA_78s}BMSIZNC5Ov^4gO&a?7u?Wm>hC6kho0fBzex zQ)0^X5b!%u8d|iG2!D=@<-kYcGj(L ztppFX2Jnj{l$kT0^t~Yx7o1vL!N4H8`-5Sr&Y|m#+IGWTHff`2b^WS`Cqr>clQS-ncB`8(2=t=&6|11Uw Date: Mon, 10 Apr 2017 01:07:25 +0200 Subject: [PATCH 08/84] fix few errors --- app/src/main/{res/drawable => }/ic_launcher.svg | 0 app/src/main/res/drawable/tusky-logo.png | Bin 9033 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename app/src/main/{res/drawable => }/ic_launcher.svg (100%) delete mode 100644 app/src/main/res/drawable/tusky-logo.png diff --git a/app/src/main/res/drawable/ic_launcher.svg b/app/src/main/ic_launcher.svg similarity index 100% rename from app/src/main/res/drawable/ic_launcher.svg rename to app/src/main/ic_launcher.svg diff --git a/app/src/main/res/drawable/tusky-logo.png b/app/src/main/res/drawable/tusky-logo.png deleted file mode 100644 index a4cdeaf33281e5117b6534aaa688a26d013d32f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9033 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 From 618001d163114a7b503b77f1d6e8f728d19d506c Mon Sep 17 00:00:00 2001 From: daycode Date: Mon, 10 Apr 2017 20:28:36 +0200 Subject: [PATCH 09/84] fix dark shadow --- README.md | 2 +- app/src/main/ic_launcher-web.png | Bin 49933 -> 49586 bytes app/src/main/ic_launcher.svg | 29 ++++++++++-------- app/src/main/res/drawable/tusky_logo.png | Bin 0 -> 7786 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 5976 -> 5442 bytes app/src/main/res/mipmap-ldpi/ic_launcher.png | Bin 2405 -> 2344 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3559 -> 3349 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 8605 -> 7524 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 14415 -> 11689 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 20904 -> 16118 bytes 10 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/drawable/tusky_logo.png diff --git a/README.md b/README.md index 76508379d..0a4bfef24 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Tusky -![](app/src/main/res/drawable/tusky-logo.png) +![](app/src/main/res/drawable/tusky_logo.png) Tusky is a beautiful Android client for [Mastodon](https://github.com/tootsuite/mastodon). Mastodon is a GNU social-compatible federated social network. That means not one entity controls the whole network, rather, like e-mail, volunteers and organisations operate their own independent servers, users from which can all interact with each other seamlessly. diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png index d807e96b2e699139734b79af63228859055b5f4c..cbb0f714d2b971cbda41d905cf85bd3a63382eca 100644 GIT binary patch literal 49586 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 + + + + + @@ -69,10 +73,7 @@ - - - - + @@ -81,21 +82,23 @@ - + - - - - - - + + + + + + + + - + diff --git a/app/src/main/res/drawable/tusky_logo.png b/app/src/main/res/drawable/tusky_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..742f3e4386854a67a2c520ef5bcc96497e2a596e GIT binary patch literal 7786 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index fdbf26ba97ca6fe4259743e053ffb2c4709acfb6..bc375927c346c0b1ab03033996c15617dd851ed3 100644 GIT binary patch delta 11678 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4f004bdfba87e302666ada44ec44e7bbf42a4345..234b850baf1be8b3065005408538195752944f26 100644 GIT binary patch literal 16118 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 literal 20904 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 Date: Tue, 11 Apr 2017 19:39:30 +0200 Subject: [PATCH 10/84] fix permission requests --- .../com/keylesspalace/tusky/MainActivity.java | 13 +++++++++++++ .../keylesspalace/tusky/ViewMediaFragment.java | 15 +-------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index dd651af5c..ca4130ebe 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -24,8 +24,10 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.PersistableBundle; +import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -437,4 +439,15 @@ public class MainActivity extends BaseActivity { viewPager.setCurrentItem(pageHistory.peek()); } } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + List fragments = getSupportFragmentManager().getFragments(); + if (fragments != null) { + for (Fragment fragment : fragments) { + fragment.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java index 93e4d5766..9b80a1cb2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java @@ -15,7 +15,6 @@ package com.keylesspalace.tusky; -import android.*; import android.app.AlertDialog; import android.app.DownloadManager; import android.content.Context; @@ -29,7 +28,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; -import android.support.v13.app.ActivityCompat; import android.support.v4.app.DialogFragment; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; @@ -42,7 +40,6 @@ import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import java.io.File; -import java.security.Permission; import butterknife.BindView; import butterknife.ButterKnife; @@ -161,10 +158,6 @@ public class ViewMediaFragment extends DialogFragment { super.onDestroyView(); } - /** - * Check permissions and download the thing at getArguments().getString("url") as image, listed in the systems gallery. - * This works in general, but when the permission is granted at runtime, the download button ha to be pressed again (see comment further down) - */ private void downloadImage(){ //Permission stuff @@ -194,21 +187,15 @@ public class ViewMediaFragment extends DialogFragment { } } - /* - * took this from ComposeActivity.java (Media upload) to handle permission requests. - * However, onRequestPermissionResult seems not to be called. - */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { - System.out.println("Requestcode: " + requestCode); switch (requestCode) { case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { downloadImage(); } else { - System.out.println("not granted\n"); doErrorDialog(R.string.error_media_download_permission, R.string.action_retry, new View.OnClickListener() { @Override @@ -224,7 +211,7 @@ public class ViewMediaFragment extends DialogFragment { private void doErrorDialog(@StringRes int descriptionId, @StringRes int actionId, View.OnClickListener listener) { - Snackbar bar = Snackbar.make(getActivity().findViewById(R.id.view_media_image), getString(descriptionId), + Snackbar bar = Snackbar.make(getView(), getString(descriptionId), Snackbar.LENGTH_SHORT); bar.setAction(actionId, listener); bar.show(); From 52343b6ab2bacd5034059b52dadf3ed62ca2030e Mon Sep 17 00:00:00 2001 From: Zachary Epps Date: Wed, 12 Apr 2017 16:21:48 -0400 Subject: [PATCH 11/84] changed the share button menu to allow for sharing either the link, or the actual content of the post added values into @string file to accommodate for the change added the new share submenu into the status_more layout xml --- .../com/keylesspalace/tusky/SFragment.java | 21 +++++++++++++++---- app/src/main/res/menu/status_more.xml | 11 +++++++++- app/src/main/res/values/strings.xml | 5 ++++- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index f18f07f04..45217324c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -182,8 +182,8 @@ public class SFragment extends BaseFragment { callList.add(call); } - protected void more(Status status, View view, final AdapterItemRemover adapter, - final int position) { + protected void more(final Status status, View view, final AdapterItemRemover adapter, + final int position) { final String id = status.getActionableId(); final String accountId = status.getActionableStatus().account.id; final String accountUsename = status.getActionableStatus().account.username; @@ -201,12 +201,25 @@ public class SFragment extends BaseFragment { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { - case R.id.status_share: { + case R.id.status_share_content: { + StringBuilder sb = new StringBuilder(); + sb.append(status.account.username); + sb.append(" - "); + sb.append(status.content.toString()); + + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, sb.toString()); + sendIntent.setType("text/plain"); + startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_content_to))); + return true; + } + case R.id.status_share_link: { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, statusUrl); sendIntent.setType("text/plain"); - startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_to))); + startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_link_to))); return true; } case R.id.status_block: { diff --git a/app/src/main/res/menu/status_more.xml b/app/src/main/res/menu/status_more.xml index 33617c9d6..48159d7bf 100644 --- a/app/src/main/res/menu/status_more.xml +++ b/app/src/main/res/menu/status_more.xml @@ -2,7 +2,16 @@ \ No newline at end of file From fdd92f25a6861f696de649cd9e27ca82f3399c74 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 21 Apr 2017 01:08:38 -0400 Subject: [PATCH 52/84] fix build issues --- app/src/main/AndroidManifest.xml | 4 +- app/src/main/res/layout/activity_compose.xml | 53 ++++++++++---------- app/src/main/res/values-tr/strings.xml | 2 +- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8ac0d8740..c96bc01c3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,8 +7,6 @@ - + android:resource="@xml/file_paths" /> diff --git a/app/src/main/res/layout/activity_compose.xml b/app/src/main/res/layout/activity_compose.xml index fb5232611..d4905c0d6 100644 --- a/app/src/main/res/layout/activity_compose.xml +++ b/app/src/main/res/layout/activity_compose.xml @@ -19,6 +19,33 @@ android:background="@android:color/transparent" android:elevation="4dp" /> + + + + + + + + - - - - - - - %s iletini favori etti %s seni takip etti - @%s bildir + \@%s bildir Daha fazla yorum? Yanıtla From 681c70d0565b6877d0770a2d2d9ed1d5426b96e5 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 21 Apr 2017 01:50:59 -0400 Subject: [PATCH 53/84] Changes the icon for the visibility menu in the composer to match the current visibility. Also, fixes build errors with the dutch translation file. --- .../keylesspalace/tusky/ComposeActivity.java | 72 +++++++++++-------- .../values-nl/{strings.xmp => strings.xml} | 2 +- 2 files changed, 44 insertions(+), 30 deletions(-) rename app/src/main/res/values-nl/{strings.xmp => strings.xml} (99%) diff --git a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java index 3ca529f30..3fa42f995 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java @@ -18,7 +18,6 @@ package com.keylesspalace.tusky; import android.Manifest; import android.app.ProgressDialog; import android.content.ContentResolver; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -108,7 +107,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag private static final int PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1; private static final int MEDIA_SIZE_UNKNOWN = -1; private static final int COMPOSE_SUCCESS = -1; - private static final int THUMBNAIL_SIZE = 128; + private static final int THUMBNAIL_SIZE = 128; // pixels private String inReplyToId; private EditText textEditor; @@ -346,8 +345,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag actionBar.setHomeAsUpIndicator(closeIcon); } - SharedPreferences preferences = getSharedPreferences( - getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + SharedPreferences preferences = getPrivatePreferences(); floatingBtn = (Button) findViewById(R.id.floating_btn); pickBtn = (ImageButton) findViewById(R.id.compose_photo_pick); @@ -595,26 +593,53 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag floatingBtn.setEnabled(true); } + private void addLockToSendButton() { + floatingBtn.setText(R.string.action_send); + Drawable lock = AppCompatResources.getDrawable(this, R.drawable.send_private); + if (lock != null) { + lock.setBounds(0, 0, lock.getIntrinsicWidth(), lock.getIntrinsicHeight()); + floatingBtn.setCompoundDrawables(null, null, lock, null); + } + } + private void setStatusVisibility(String visibility) { statusVisibility = visibility; switch (visibility) { case "public": { floatingBtn.setText(R.string.action_send_public); floatingBtn.setCompoundDrawables(null, null, null, null); - break; - } - case "private": { - floatingBtn.setText(R.string.action_send); - Drawable lock = AppCompatResources.getDrawable(this, R.drawable.send_private); - if (lock != null) { - lock.setBounds(0, 0, lock.getIntrinsicWidth(), lock.getIntrinsicHeight()); - floatingBtn.setCompoundDrawables(null, null, lock, null); + Drawable globe = AppCompatResources.getDrawable(this, R.drawable.ic_public_24dp); + if (globe != null) { + visibilityBtn.setImageDrawable(globe); } break; } + case "private": { + addLockToSendButton(); + Drawable lock = AppCompatResources.getDrawable(this, + R.drawable.ic_lock_outline_24dp); + if (lock != null) { + visibilityBtn.setImageDrawable(lock); + } + break; + } + case "direct": { + addLockToSendButton(); + Drawable envelope = AppCompatResources.getDrawable(this, R.drawable.ic_email_24dp); + if (envelope != null) { + visibilityBtn.setImageDrawable(envelope); + } + break; + } + case "unlisted": default: { floatingBtn.setText(R.string.action_send); floatingBtn.setCompoundDrawables(null, null, null, null); + Drawable openLock = AppCompatResources.getDrawable(this, + R.drawable.ic_lock_open_24dp); + if (openLock != null) { + visibilityBtn.setImageDrawable(openLock); + } break; } } @@ -728,11 +753,9 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag * the status they reply to and that behaviour needs to be kept separate. */ return; } - SharedPreferences preferences = getSharedPreferences( - getString(R.string.preferences_file_key), Context.MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putString("rememberedVisibility", statusVisibility); - editor.apply(); + getPrivatePreferences().edit() + .putString("rememberedVisibility", statusVisibility) + .apply(); } private EditText createEditText(String[] contentMimeTypes) { @@ -967,12 +990,11 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date()); String imageFileName = "Tusky_" + timeStamp + "_"; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); - File image = File.createTempFile( + return File.createTempFile( imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); - return image; } private void initiateCameraApp() { @@ -1250,19 +1272,11 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag long mediaSize = getMediaSize(getContentResolver(), uri); pickMedia(uri, mediaSize); } else if (requestCode == MEDIA_TAKE_PHOTO_RESULT && resultCode == RESULT_OK) { - queueCameraResult(); + long mediaSize = getMediaSize(getContentResolver(), photoUploadUri); + pickMedia(photoUploadUri, mediaSize); } } - private void queueCameraResult() { - ContentResolver contentResolver = getContentResolver(); - - Cursor returnCursor = contentResolver.query(photoUploadUri, null, null, null, null); - int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); - returnCursor.moveToFirst(); - pickMedia(photoUploadUri, returnCursor.getLong(sizeIndex)); - } - private void pickMedia(Uri uri, long mediaSize) { ContentResolver contentResolver = getContentResolver(); if (mediaSize == MEDIA_SIZE_UNKNOWN) { diff --git a/app/src/main/res/values-nl/strings.xmp b/app/src/main/res/values-nl/strings.xml similarity index 99% rename from app/src/main/res/values-nl/strings.xmp rename to app/src/main/res/values-nl/strings.xml index 323010bdb..1d7474780 100644 --- a/app/src/main/res/values-nl/strings.xmp +++ b/app/src/main/res/values-nl/strings.xml @@ -13,7 +13,7 @@ Bestandstype kan niet worden geüpload. Bestand kan niet worden geopend. Toestemming nodig om media te kunnen lezen. - Afbeeldingen en video's kunnen niet allebei aan dezelfde toot worden toegevoegd. + Afbeeldingen en video\'s kunnen niet allebei aan dezelfde toot worden toegevoegd. Uploaden mislukt. Tenminste één toot moet worden gerapporteerd. From c4ca7a386b2f7fe764c28d161a6722b5146b16d3 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 10:54:27 +0300 Subject: [PATCH 54/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20TR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-tr/strings.xml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 16ba3b6c9..9625d745f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -13,6 +13,8 @@ O biçim dosya yüklenmez. O dosya açılamadı. Medya okuma izni gerekiyor. + Permission to store media is required. + Aynı iletiye kem video hem resim eklenemez. Yükleme başarsız. Her bildirme en azından bir iletiyi işaret etmeli. @@ -79,6 +81,7 @@ Tarayıcıda aç Gönder Medya ekle + Take photo Paylaş Sesize al Sesizden kaldır @@ -87,6 +90,8 @@ Seçenekler Çekmece aç Temizle + Save + Edit profile İletinin adresini paylaş… İletiyi paylaş… @@ -99,10 +104,15 @@ Hangi sunucu? Neler oluyor? İçerik uyarı + Display name + Bio + + Avatar + Header Sunucu nedir? - Burada her hangi bir Mastodon sunucusunun adresi + Burada her hangi bir Mastodon sunucusunun adresi (mastodon.social, icosahedron.website, social.tchncs.de, ve daha fazla!) girilebiliri. \n\nEğer hesabınız henüz yok ise katılmak istediğiniz sunucunun adresini girerek hesap yaratabilirsin. @@ -112,10 +122,12 @@ Medya Yükleme Bittiriliyor Yükleniyor… + Download Herkese açık Kerkese açık ancak sosyal çizelgesinde çıkmaz Sadece takipçiler ve bahsedilenlere açık + Direct: Post to mentioned users only Bildirimler Bildirimleri düzelt @@ -144,5 +156,4 @@ Kitli Hesap İletinin içeriğini paylaş İletinin adresini paylaş - From 2d913a1cefded797d19dfe4da607b8c257167076 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:01:18 +0300 Subject: [PATCH 55/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20FR=20and=20re-order=20to=20match?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-fr/strings.xml | 32 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 2e67ba499..0a0a6ec5b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,6 +1,7 @@ Une erreur s’est produite. + This cannot be empty. Le domaine est invalide L’application n’a pu s’authentifier avec l’instance. Impossible de trouver un navigateur web. @@ -12,6 +13,8 @@ Ce type de fichier n’est pas accepté. Le fichier ne peut être ouvert. Une permission pour lire ce média est requise pour le mettre en ligne. + Permission to store media is required. + Impossible de mettre une vidéo et une image sur le même pouet. Ce média ne peut être mis en ligne. Au moins un pouet a été reporté. @@ -38,6 +41,7 @@ fin du pouet fin des notifications fin des comptes + There are no toots here so far. Pull down to refresh! %s a boosté votre pouet %s a ajouté votre pouet dans ses favoris @@ -46,10 +50,13 @@ Signaler @%s Davantage de commentaires ? + Répondre + Booster + Favori + Plus Répondre Se connecter avec Mastodon Déconnexion - Suivre Ne plus suivre Bloquer @@ -69,24 +76,25 @@ Préferences Favoris Utilisateurs bloqués + Thread + Media Ouvrir avec votre navigateur Envoyer Ajouter un média + Take photo Partager Rendre muet Redonner la parole Mention NSFW - Ouvrir le menu - Plus - Répondre - Media - Favori Option + Ouvrir le menu Nettoyer - Booster + Save + Edit profile - Partager l’URL de votre pouet avec… + Partager l’URL de votre pouet avec… + Share toot to… Rechercher un compte… @@ -96,6 +104,11 @@ Quelle instance ? Quoi de neuf ? Contenu sensible + Display name + Bio + + Avatar + Header Qu’est ce qu’une instance ? @@ -108,6 +121,7 @@ Média mis en ligne avec succès Mise en ligne… + Download Public: Afficher dans les fils publics Non-listé: Ne pas afficher dans les fils publics @@ -139,4 +153,6 @@ %d nouvelles interactions Compte bloqué + Share content of toot + Share link to toot From 852c484d689795b3aa71259d416547b56ae87fda Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 21 Apr 2017 19:02:04 -0400 Subject: [PATCH 56/84] Adds a list of muted users. --- .../tusky/AccountActionListener.java | 1 + .../keylesspalace/tusky/AccountFragment.java | 60 ++++++++- .../keylesspalace/tusky/BlocksActivity.java | 27 +++- .../com/keylesspalace/tusky/MainActivity.java | 21 +++- .../com/keylesspalace/tusky/MutesAdapter.java | 118 ++++++++++++++++++ app/src/main/res/drawable/ic_mute_24dp.xml | 11 ++ app/src/main/res/drawable/ic_unmute_24dp.xml | 19 +++ app/src/main/res/layout/item_muted_user.xml | 61 +++++++++ app/src/main/res/values/strings.xml | 2 + 9 files changed, 310 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java create mode 100644 app/src/main/res/drawable/ic_mute_24dp.xml create mode 100644 app/src/main/res/drawable/ic_unmute_24dp.xml create mode 100644 app/src/main/res/layout/item_muted_user.xml diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java b/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java index 020a504d7..5c3e49508 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java @@ -17,5 +17,6 @@ package com.keylesspalace.tusky; interface AccountActionListener { void onViewAccount(String id); + void onMute(final boolean mute, final String id, final int position); void onBlock(final boolean block, final String id, final int position); } diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java index 67b6ed7d8..6375bba7e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java @@ -61,7 +61,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen public static AccountFragment newInstance(Type type) { Bundle arguments = new Bundle(); AccountFragment fragment = new AccountFragment(); - arguments.putString("type", type.name()); + arguments.putSerializable("type", type); fragment.setArguments(arguments); return fragment; } @@ -69,7 +69,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen public static AccountFragment newInstance(Type type, String accountId) { Bundle arguments = new Bundle(); AccountFragment fragment = new AccountFragment(); - arguments.putString("type", type.name()); + arguments.putSerializable("type", type); arguments.putString("accountId", accountId); fragment.setArguments(arguments); return fragment; @@ -79,7 +79,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle arguments = getArguments(); - type = Type.valueOf(arguments.getString("type")); + type = (Type) arguments.getSerializable("type"); accountId = arguments.getString("accountId"); api = null; } @@ -105,6 +105,8 @@ public class AccountFragment extends BaseFragment implements AccountActionListen scrollListener = null; if (type == Type.BLOCKS) { adapter = new BlocksAdapter(this); + } else if (type == Type.MUTES) { + adapter = new MutesAdapter(this); } else { adapter = new FollowAdapter(this); } @@ -242,6 +244,56 @@ public class AccountFragment extends BaseFragment implements AccountActionListen startActivity(intent); } + public void onMute(final boolean mute, final String id, final int position) { + if (api == null) { + /* If somehow an unmute button is clicked after onCreateView but before + * onActivityCreated, then this would get called with a null api object, so this eats + * that input. */ + Log.d(TAG, "MastodonAPI isn't initialised so this mute can't occur."); + return; + } + + Callback callback = new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + onMuteSuccess(mute, position); + } else { + onMuteFailure(mute, id); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + onMuteFailure(mute, id); + } + }; + + Call call; + if (!mute) { + call = api.unblockAccount(id); + } else { + call = api.blockAccount(id); + } + callList.add(call); + call.enqueue(callback); + } + + private void onMuteSuccess(boolean muted, int position) { + MutesAdapter mutesAdapter = (MutesAdapter) adapter; + mutesAdapter.setMuted(muted, position); + } + + private void onMuteFailure(boolean mute, String id) { + String verb; + if (mute) { + verb = "mute"; + } else { + verb = "unmute"; + } + Log.e(TAG, String.format("Failed to %s account id %s", verb, id)); + } + public void onBlock(final boolean block, final String id, final int position) { if (api == null) { /* If somehow an unblock button is clicked after onCreateView but before @@ -293,7 +345,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen } private boolean jumpToTopAllowed() { - return type != Type.BLOCKS; + return type == Type.FOLLOWS || type == Type.FOLLOWERS; } private void jumpToTop() { diff --git a/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java b/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java index 2718d3d6c..57a92f465 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java @@ -15,6 +15,7 @@ package com.keylesspalace.tusky; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -24,22 +25,44 @@ import android.support.v7.widget.Toolbar; import android.view.MenuItem; public class BlocksActivity extends BaseActivity { + enum Type { + BLOCKS, + MUTES + } + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blocks); + Type type; + Intent intent = getIntent(); + if (intent != null) { + type = (Type) intent.getSerializableExtra("type"); + } else { + type = Type.BLOCKS; + } + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar bar = getSupportActionBar(); if (bar != null) { - bar.setTitle(getString(R.string.title_blocks)); + switch (type) { + case MUTES: { bar.setTitle(getString(R.string.title_mutes)); break; } + case BLOCKS: { bar.setTitle(getString(R.string.title_blocks)); break; } + } bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayShowHomeEnabled(true); } FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - Fragment fragment = AccountFragment.newInstance(AccountFragment.Type.BLOCKS); + AccountFragment.Type fragmentType; + switch (type) { + case MUTES: { fragmentType = AccountFragment.Type.MUTES; break; } + default: + case BLOCKS: { fragmentType = AccountFragment.Type.BLOCKS; break; } + } + Fragment fragment = AccountFragment.newInstance(fragmentType); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index ef8cd678f..2a24c3628 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Bundle; import android.os.PersistableBundle; @@ -27,6 +28,7 @@ import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -41,10 +43,12 @@ import com.arlib.floatingsearchview.suggestions.SearchSuggestionsAdapter; import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion; import com.keylesspalace.tusky.entity.Account; import com.mikepenz.google_material_typeface_library.GoogleMaterial; +import com.mikepenz.iconics.typeface.GenericFont; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; +import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; @@ -268,6 +272,9 @@ public class MainActivity extends BaseActivity { } }); + Drawable muteDrawable = ContextCompat.getDrawable(this, R.drawable.ic_mute_24dp); + ThemeUtils.setDrawableTint(this, muteDrawable, R.attr.toolbar_icon_tint); + drawer = new DrawerBuilder() .withActivity(this) //.withToolbar(toolbar) @@ -277,10 +284,11 @@ public class MainActivity extends BaseActivity { .addDrawerItems( new PrimaryDrawerItem().withIdentifier(0).withName(getString(R.string.action_edit_profile)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_person), new PrimaryDrawerItem().withIdentifier(1).withName(getString(R.string.action_view_favourites)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_star), - new PrimaryDrawerItem().withIdentifier(2).withName(getString(R.string.action_view_blocks)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_block), + new PrimaryDrawerItem().withIdentifier(2).withName(getString(R.string.action_view_mutes)).withSelectable(false).withIcon(muteDrawable), + new PrimaryDrawerItem().withIdentifier(3).withName(getString(R.string.action_view_blocks)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_block), new DividerDrawerItem(), - new SecondaryDrawerItem().withIdentifier(3).withName(getString(R.string.action_view_preferences)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_settings), - new SecondaryDrawerItem().withIdentifier(4).withName(getString(R.string.action_logout)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_exit_to_app) + new SecondaryDrawerItem().withIdentifier(4).withName(getString(R.string.action_view_preferences)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_settings), + new SecondaryDrawerItem().withIdentifier(5).withName(getString(R.string.action_logout)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_exit_to_app) ) .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { @Override @@ -296,11 +304,16 @@ public class MainActivity extends BaseActivity { startActivity(intent); } else if (drawerItemIdentifier == 2) { Intent intent = new Intent(MainActivity.this, BlocksActivity.class); + intent.putExtra("type", BlocksActivity.Type.MUTES); startActivity(intent); } else if (drawerItemIdentifier == 3) { - Intent intent = new Intent(MainActivity.this, PreferencesActivity.class); + Intent intent = new Intent(MainActivity.this, BlocksActivity.class); + intent.putExtra("type", BlocksActivity.Type.BLOCKS); startActivity(intent); } else if (drawerItemIdentifier == 4) { + Intent intent = new Intent(MainActivity.this, PreferencesActivity.class); + startActivity(intent); + } else if (drawerItemIdentifier == 5) { logout(); } } diff --git a/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java b/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java new file mode 100644 index 000000000..941257799 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java @@ -0,0 +1,118 @@ +package com.keylesspalace.tusky; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.keylesspalace.tusky.entity.Account; +import com.pkmmte.view.CircularImageView; +import com.squareup.picasso.Picasso; + +import java.util.HashSet; +import java.util.Set; + +import butterknife.BindView; +import butterknife.ButterKnife; + +class MutesAdapter extends AccountAdapter { + private static final int VIEW_TYPE_MUTED_USER = 0; + private static final int VIEW_TYPE_FOOTER = 1; + + private Set unmutedAccountPositions; + + MutesAdapter(AccountActionListener accountActionListener) { + super(accountActionListener); + unmutedAccountPositions = new HashSet<>(); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + switch (viewType) { + default: + case VIEW_TYPE_MUTED_USER: { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_muted_user, parent, false); + return new MutesAdapter.MutedUserViewHolder(view); + } + case VIEW_TYPE_FOOTER: { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_footer, parent, false); + return new FooterViewHolder(view); + } + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { + if (position < accountList.size()) { + MutedUserViewHolder holder = (MutedUserViewHolder) viewHolder; + holder.setupWithAccount(accountList.get(position)); + boolean muted = !unmutedAccountPositions.contains(position); + holder.setupActionListener(accountActionListener, muted, position); + } + } + + @Override + public int getItemViewType(int position) { + if (position == accountList.size()) { + return VIEW_TYPE_FOOTER; + } else { + return VIEW_TYPE_MUTED_USER; + } + } + + void setMuted(boolean muted, int position) { + if (muted) { + unmutedAccountPositions.remove(position); + } else { + unmutedAccountPositions.add(position); + } + notifyItemChanged(position); + } + + static class MutedUserViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.muted_user_avatar) CircularImageView avatar; + @BindView(R.id.muted_user_username) TextView username; + @BindView(R.id.muted_user_display_name) TextView displayName; + @BindView(R.id.muted_user_unmute) ImageButton unmute; + + private String id; + + MutedUserViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + void setupWithAccount(Account account) { + id = account.id; + displayName.setText(account.getDisplayName()); + String format = username.getContext().getString(R.string.status_username_format); + String formattedUsername = String.format(format, account.username); + username.setText(formattedUsername); + Picasso.with(avatar.getContext()) + .load(account.avatar) + .error(R.drawable.avatar_error) + .placeholder(R.drawable.avatar_default) + .into(avatar); + } + + void setupActionListener(final AccountActionListener listener, final boolean muted, + final int position) { + unmute.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.onMute(!muted, id, position); + } + }); + avatar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.onViewAccount(id); + } + }); + } + } +} diff --git a/app/src/main/res/drawable/ic_mute_24dp.xml b/app/src/main/res/drawable/ic_mute_24dp.xml new file mode 100644 index 000000000..801dc9340 --- /dev/null +++ b/app/src/main/res/drawable/ic_mute_24dp.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_unmute_24dp.xml b/app/src/main/res/drawable/ic_unmute_24dp.xml new file mode 100644 index 000000000..7d4aadbdb --- /dev/null +++ b/app/src/main/res/drawable/ic_unmute_24dp.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/layout/item_muted_user.xml b/app/src/main/res/layout/item_muted_user.xml new file mode 100644 index 000000000..bf1d89d91 --- /dev/null +++ b/app/src/main/res/layout/item_muted_user.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d559aeec9..2b275bdd9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ Follows Followers Favourites + Muted users Blocked users \@%s @@ -75,6 +76,7 @@ Profile Preferences Favourites + Muted users Blocked users Thread Media From fcebbc2bdbdbfc27c4c7279a24394ce4de58ce65 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 21 Apr 2017 20:58:44 -0400 Subject: [PATCH 57/84] Adds ability to mute from an individual status. Also, all statuses from that user are removed from the timeline on the spot. --- .../keylesspalace/tusky/AccountFragment.java | 4 +-- .../tusky/AdapterItemRemover.java | 1 + .../tusky/NotificationsAdapter.java | 15 +++++++- .../com/keylesspalace/tusky/SFragment.java | 35 ++++++++++++------- .../keylesspalace/tusky/ThreadAdapter.java | 12 +++++++ .../keylesspalace/tusky/TimelineAdapter.java | 14 +++++++- app/src/main/res/menu/status_more.xml | 2 ++ 7 files changed, 67 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java index 6375bba7e..ecc63a34f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java @@ -271,9 +271,9 @@ public class AccountFragment extends BaseFragment implements AccountActionListen Call call; if (!mute) { - call = api.unblockAccount(id); + call = api.unmuteAccount(id); } else { - call = api.blockAccount(id); + call = api.muteAccount(id); } callList.add(call); call.enqueue(callback); diff --git a/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java b/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java index 634935ffa..aff7b0331 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java +++ b/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java @@ -17,4 +17,5 @@ package com.keylesspalace.tusky; interface AdapterItemRemover { void removeItem(int position); + void removeAllByAccountId(String accountId); } diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java index 64ecb722a..2376469b5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java @@ -34,6 +34,7 @@ import com.keylesspalace.tusky.entity.Status; import com.squareup.picasso.Picasso; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRemover { @@ -62,7 +63,7 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe } - public void setFooterState(FooterState newFooterState) { + void setFooterState(FooterState newFooterState) { FooterState oldValue = footerState; footerState = newFooterState; if (footerState != oldValue) { @@ -210,6 +211,18 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe notifyItemChanged(position); } + public void removeAllByAccountId(String id) { + for (int i = 0; i < notifications.size();) { + Notification notification = notifications.get(i); + if (id.equals(notification.account.id)) { + notifications.remove(i); + notifyItemRemoved(i); + } else { + i += 1; + } + } + } + interface NotificationActionListener { void onViewAccount(String id); } diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index b810468a5..482d3a3b4 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -37,6 +37,7 @@ import java.util.List; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.Callback; +import retrofit2.Response; /* Note from Andrew on Jan. 22, 2017: This class is a design problem for me, so I left it with an * awkward name. TimelineFragment and NotificationFragment have significant overlap but the nature @@ -163,18 +164,26 @@ public abstract class SFragment extends BaseFragment { callList.add(call); } + private void mute(String id) { + Call call = getApi().muteAccount(id); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) {} + + @Override + public void onFailure(Call call, Throwable t) {} + }); + callList.add(call); + } + private void block(String id) { Call call = getApi().blockAccount(id); call.enqueue(new Callback() { @Override - public void onResponse(Call call, retrofit2.Response response) { - - } + public void onResponse(Call call, retrofit2.Response response) {} @Override - public void onFailure(Call call, Throwable t) { - - } + public void onFailure(Call call, Throwable t) {} }); callList.add(call); } @@ -183,14 +192,10 @@ public abstract class SFragment extends BaseFragment { Call call = getApi().deleteStatus(id); call.enqueue(new Callback() { @Override - public void onResponse(Call call, retrofit2.Response response) { - - } + public void onResponse(Call call, retrofit2.Response response) {} @Override - public void onFailure(Call call, Throwable t) { - - } + public void onFailure(Call call, Throwable t) {} }); callList.add(call); } @@ -235,8 +240,14 @@ public abstract class SFragment extends BaseFragment { startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_link_to))); return true; } + case R.id.status_mute: { + mute(accountId); + adapter.removeAllByAccountId(accountId); + return true; + } case R.id.status_block: { block(accountId); + adapter.removeAllByAccountId(accountId); return true; } case R.id.status_report: { diff --git a/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java b/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java index 7af6d13f0..afa407f8e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java @@ -65,6 +65,18 @@ class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRemover { notifyItemRemoved(position); } + public void removeAllByAccountId(String accountId) { + for (int i = 0; i < statuses.size();) { + Status status = statuses.get(i); + if (accountId.equals(status.account.id)) { + statuses.remove(i); + notifyItemRemoved(i); + } else { + i += 1; + } + } + } + int setStatus(Status status) { if (statuses.size() > 0 && statuses.get(statusIndex).equals(status)) { // Do not add this status on refresh, it's already in there. diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java index a6c1367ee..d2dd0b094 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java @@ -79,7 +79,7 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover } } - public void setFooterState(FooterState newFooterState) { + void setFooterState(FooterState newFooterState) { FooterState oldValue = footerState; footerState = newFooterState; if (footerState != oldValue) { @@ -142,6 +142,18 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover notifyItemRemoved(position); } + public void removeAllByAccountId(String accountId) { + for (int i = 0; i < statuses.size();) { + Status status = statuses.get(i); + if (accountId.equals(status.account.id)) { + statuses.remove(i); + notifyItemRemoved(i); + } else { + i += 1; + } + } + } + @Nullable Status getItem(int position) { if (position >= 0 && position < statuses.size()) { diff --git a/app/src/main/res/menu/status_more.xml b/app/src/main/res/menu/status_more.xml index 48159d7bf..95581c8fd 100644 --- a/app/src/main/res/menu/status_more.xml +++ b/app/src/main/res/menu/status_more.xml @@ -12,6 +12,8 @@ android:title="@string/status_share_content"/> + Date: Fri, 21 Apr 2017 23:16:05 -0400 Subject: [PATCH 58/84] Blocking and muting now removes all statuses by that user in EVERY currently-loaded timeline. --- .../keylesspalace/tusky/AccountActivity.java | 30 +++++++++---- .../tusky/AccountPagerAdapter.java | 22 ++++++++++ .../tusky/AdapterItemRemover.java | 1 - .../com/keylesspalace/tusky/MainActivity.java | 27 +++++++----- .../tusky/NotificationsFragment.java | 21 +++------ .../com/keylesspalace/tusky/SFragment.java | 43 +++++++++++-------- .../tusky/StatusRemoveListener.java | 5 +++ .../keylesspalace/tusky/TimelineAdapter.java | 2 +- .../keylesspalace/tusky/TimelineFragment.java | 24 ++++++----- .../tusky/TimelinePagerAdapter.java | 33 +++++++++++--- 10 files changed, 137 insertions(+), 71 deletions(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java index ebf1ebd99..df7afd398 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java @@ -28,6 +28,7 @@ import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; @@ -54,7 +55,7 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -public class AccountActivity extends BaseActivity { +public class AccountActivity extends BaseActivity implements SFragment.OnUserRemovedListener { private static final String TAG = "AccountActivity"; // logging tag private String accountId; @@ -63,6 +64,7 @@ public class AccountActivity extends BaseActivity { private boolean muting = false; private boolean isSelf; private TabLayout tabLayout; + private AccountPagerAdapter pagerAdapter; private Account loadedAccount; @BindView(R.id.account_locked) ImageView accountLockedView; @@ -80,8 +82,7 @@ public class AccountActivity extends BaseActivity { accountId = intent.getStringExtra("id"); } - SharedPreferences preferences = getSharedPreferences( - getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + SharedPreferences preferences = getPrivatePreferences(); String loggedInAccountId = preferences.getString("loggedInAccountId", null); final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -142,6 +143,7 @@ public class AccountActivity extends BaseActivity { // Setup the tabs and timeline pager. AccountPagerAdapter adapter = new AccountPagerAdapter(getSupportFragmentManager(), this, accountId); + pagerAdapter = adapter; String[] pageTitles = { getString(R.string.title_statuses), getString(R.string.title_follows), @@ -165,6 +167,12 @@ public class AccountActivity extends BaseActivity { } } + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putString("accountId", accountId); + super.onSaveInstanceState(outState); + } + private void obtainAccount() { mastodonAPI.account(accountId).enqueue(new Callback() { @Override @@ -183,12 +191,6 @@ public class AccountActivity extends BaseActivity { }); } - @Override - protected void onSaveInstanceState(Bundle outState) { - outState.putString("accountId", accountId); - super.onSaveInstanceState(outState); - } - private void onObtainAccountSuccess(Account account) { loadedAccount = account; @@ -289,6 +291,16 @@ public class AccountActivity extends BaseActivity { updateButtons(); } + @Override + public void onUserRemoved(String accountId) { + for (Fragment fragment : pagerAdapter.getRegisteredFragments()) { + if (fragment instanceof StatusRemoveListener) { + StatusRemoveListener listener = (StatusRemoveListener) fragment; + listener.removePostsByUser(accountId); + } + } + } + private void updateFollowButton(FloatingActionButton button) { if (following) { button.setImageResource(R.drawable.ic_person_minus_24px); diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java b/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java index ff5000017..dd56dfad6 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java @@ -24,15 +24,20 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import java.util.ArrayList; +import java.util.List; + class AccountPagerAdapter extends FragmentPagerAdapter { private Context context; private String accountId; private String[] pageTitles; + private List registeredFragments; AccountPagerAdapter(FragmentManager manager, Context context, String accountId) { super(manager); this.context = context; this.accountId = accountId; + registeredFragments = new ArrayList<>(); } void setPageTitles(String[] titles) { @@ -73,4 +78,21 @@ class AccountPagerAdapter extends FragmentPagerAdapter { title.setText(pageTitles[position]); return view; } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + Fragment fragment = (Fragment) super.instantiateItem(container, position); + registeredFragments.add(fragment); + return fragment; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + registeredFragments.remove((Fragment) object); + super.destroyItem(container, position, object); + } + + List getRegisteredFragments() { + return registeredFragments; + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java b/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java index aff7b0331..634935ffa 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java +++ b/app/src/main/java/com/keylesspalace/tusky/AdapterItemRemover.java @@ -17,5 +17,4 @@ package com.keylesspalace.tusky; interface AdapterItemRemover { void removeItem(int position); - void removeAllByAccountId(String accountId); } diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index 2a24c3628..f42dd72ca 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -20,7 +20,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Typeface; import android.graphics.drawable.Drawable; -import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Bundle; import android.os.PersistableBundle; @@ -43,12 +42,10 @@ import com.arlib.floatingsearchview.suggestions.SearchSuggestionsAdapter; import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion; import com.keylesspalace.tusky.entity.Account; import com.mikepenz.google_material_typeface_library.GoogleMaterial; -import com.mikepenz.iconics.typeface.GenericFont; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; -import com.mikepenz.materialdrawer.icons.MaterialDrawerFont; import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; @@ -69,8 +66,8 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -public class MainActivity extends BaseActivity { - private static final String TAG = "MainActivity"; // logging tag and Volley request tag +public class MainActivity extends BaseActivity implements SFragment.OnUserRemovedListener { + private static final String TAG = "MainActivity"; // logging tag protected static int COMPOSE_RESULT = 1; private String loggedInAccountId; @@ -518,12 +515,22 @@ public class MainActivity extends BaseActivity { } @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - List fragments = getSupportFragmentManager().getFragments(); - if (fragments != null) { - for (Fragment fragment : fragments) { - fragment.onRequestPermissionsResult(requestCode, permissions, grantResults); + TimelinePagerAdapter adapter = (TimelinePagerAdapter) viewPager.getAdapter(); + for (Fragment fragment : adapter.getRegisteredFragments()) { + fragment.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + @Override + public void onUserRemoved(String accountId) { + TimelinePagerAdapter adapter = (TimelinePagerAdapter) viewPager.getAdapter(); + for (Fragment fragment : adapter.getRegisteredFragments()) { + if (fragment instanceof StatusRemoveListener) { + StatusRemoveListener listener = (StatusRemoveListener) fragment; + listener.removePostsByUser(accountId); } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java index b754e6c41..76a89c1f6 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java @@ -39,7 +39,7 @@ import retrofit2.Callback; import retrofit2.Response; public class NotificationsFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener, + SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener, NotificationsAdapter.NotificationActionListener { private static final String TAG = "Notifications"; // logging tag @@ -57,11 +57,6 @@ public class NotificationsFragment extends SFragment implements return fragment; } - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @@ -117,12 +112,6 @@ public class NotificationsFragment extends SFragment implements return rootView; } - @Override - public void onResume() { - super.onResume(); - sendFetchNotificationsRequest(); - } - @Override public void onDestroy() { super.onDestroy(); @@ -142,13 +131,11 @@ public class NotificationsFragment extends SFragment implements } private void sendFetchNotificationsRequest(final String fromId, String uptoId) { - MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; - if (fromId != null || adapter.getItemCount() <= 1) { adapter.setFooterState(NotificationsAdapter.FooterState.LOADING); } - listCall = api.notifications(fromId, uptoId, null); + listCall = mastodonAPI.notifications(fromId, uptoId, null); listCall.enqueue(new Callback>() { @Override @@ -172,6 +159,10 @@ public class NotificationsFragment extends SFragment implements sendFetchNotificationsRequest(null, null); } + public void removePostsByUser(String accountId) { + adapter.removeAllByAccountId(accountId); + } + private static boolean findNotification(List notifications, String id) { for (Notification notification : notifications) { if (notification.id.equals(id)) { diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index 482d3a3b4..3fb124b2c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -46,8 +46,14 @@ import retrofit2.Response; * overlap functionality. So, I'm momentarily leaving it and hopefully working on those will clear * up what needs to be where. */ public abstract class SFragment extends BaseFragment { + interface OnUserRemovedListener { + void onUserRemoved(String accountId); + } + protected String loggedInAccountId; protected String loggedInUsername; + protected MastodonAPI mastodonAPI; + protected OnUserRemovedListener userRemovedListener; protected static int COMPOSE_RESULT = 1; @Override @@ -60,8 +66,12 @@ public abstract class SFragment extends BaseFragment { loggedInUsername = preferences.getString("loggedInAccountUsername", null); } - public MastodonAPI getApi() { - return ((BaseActivity) getActivity()).mastodonAPI; + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + BaseActivity activity = (BaseActivity) getActivity(); + mastodonAPI = activity.mastodonAPI; + userRemovedListener = (OnUserRemovedListener) activity; } protected void reply(Status status) { @@ -84,8 +94,7 @@ public abstract class SFragment extends BaseFragment { startActivityForResult(intent, COMPOSE_RESULT); } - public void onSuccessfulStatus() { - } + public void onSuccessfulStatus() {} @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -115,16 +124,14 @@ public abstract class SFragment extends BaseFragment { } @Override - public void onFailure(Call call, Throwable t) { - - } + public void onFailure(Call call, Throwable t) {} }; Call call; if (reblog) { - call = getApi().reblogStatus(id); + call = mastodonAPI.reblogStatus(id); } else { - call = getApi().unreblogStatus(id); + call = mastodonAPI.unreblogStatus(id); } call.enqueue(cb); callList.add(call); @@ -149,23 +156,21 @@ public abstract class SFragment extends BaseFragment { } @Override - public void onFailure(Call call, Throwable t) { - - } + public void onFailure(Call call, Throwable t) {} }; Call call; if (favourite) { - call = getApi().favouriteStatus(id); + call = mastodonAPI.favouriteStatus(id); } else { - call = getApi().unfavouriteStatus(id); + call = mastodonAPI.unfavouriteStatus(id); } call.enqueue(cb); callList.add(call); } private void mute(String id) { - Call call = getApi().muteAccount(id); + Call call = mastodonAPI.muteAccount(id); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) {} @@ -174,10 +179,11 @@ public abstract class SFragment extends BaseFragment { public void onFailure(Call call, Throwable t) {} }); callList.add(call); + userRemovedListener.onUserRemoved(id); } private void block(String id) { - Call call = getApi().blockAccount(id); + Call call = mastodonAPI.blockAccount(id); call.enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) {} @@ -186,10 +192,11 @@ public abstract class SFragment extends BaseFragment { public void onFailure(Call call, Throwable t) {} }); callList.add(call); + userRemovedListener.onUserRemoved(id); } private void delete(String id) { - Call call = getApi().deleteStatus(id); + Call call = mastodonAPI.deleteStatus(id); call.enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) {} @@ -242,12 +249,10 @@ public abstract class SFragment extends BaseFragment { } case R.id.status_mute: { mute(accountId); - adapter.removeAllByAccountId(accountId); return true; } case R.id.status_block: { block(accountId); - adapter.removeAllByAccountId(accountId); return true; } case R.id.status_report: { diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java b/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java new file mode 100644 index 000000000..b662f237d --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java @@ -0,0 +1,5 @@ +package com.keylesspalace.tusky; + +interface StatusRemoveListener { + void removePostsByUser(String accountId); +} diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java index d2dd0b094..759a23579 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java @@ -142,7 +142,7 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover notifyItemRemoved(position); } - public void removeAllByAccountId(String accountId) { + void removeAllByAccountId(String accountId) { for (int i = 0; i < statuses.size();) { Status status = statuses.get(i); if (accountId.equals(status.account.id)) { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 7102764df..223f6a084 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -39,7 +39,7 @@ import retrofit2.Call; import retrofit2.Callback; public class TimelineFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener { + SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener { private static final String TAG = "Timeline"; // logging tag private Call> listCall; @@ -145,7 +145,7 @@ public class TimelineFragment extends SFragment implements /* This is delayed until onActivityCreated solely because MainActivity.composeButton isn't * guaranteed to be set until then. */ - if (followButtonPresent()) { + if (composeButtonPresent()) { /* Use a modified scroll listener that both loads more statuses as it goes, and hides * the follow button on down-scroll. */ MainActivity activity = (MainActivity) getActivity(); @@ -202,7 +202,7 @@ public class TimelineFragment extends SFragment implements return kind != Kind.TAG && kind != Kind.FAVOURITES; } - private boolean followButtonPresent() { + private boolean composeButtonPresent() { return kind != Kind.TAG && kind != Kind.FAVOURITES && kind != Kind.USER; } @@ -212,8 +212,6 @@ public class TimelineFragment extends SFragment implements } private void sendFetchTimelineRequest(@Nullable final String fromId, @Nullable String uptoId) { - MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; - if (fromId != null || adapter.getItemCount() <= 1) { adapter.setFooterState(TimelineAdapter.FooterState.LOADING); } @@ -237,27 +235,27 @@ public class TimelineFragment extends SFragment implements switch (kind) { default: case HOME: { - listCall = api.homeTimeline(fromId, uptoId, null); + listCall = mastodonAPI.homeTimeline(fromId, uptoId, null); break; } case PUBLIC_FEDERATED: { - listCall = api.publicTimeline(null, fromId, uptoId, null); + listCall = mastodonAPI.publicTimeline(null, fromId, uptoId, null); break; } case PUBLIC_LOCAL: { - listCall = api.publicTimeline(true, fromId, uptoId, null); + listCall = mastodonAPI.publicTimeline(true, fromId, uptoId, null); break; } case TAG: { - listCall = api.hashtagTimeline(hashtagOrId, null, fromId, uptoId, null); + listCall = mastodonAPI.hashtagTimeline(hashtagOrId, null, fromId, uptoId, null); break; } case USER: { - listCall = api.accountStatuses(hashtagOrId, fromId, uptoId, null); + listCall = mastodonAPI.accountStatuses(hashtagOrId, fromId, uptoId, null); break; } case FAVOURITES: { - listCall = api.favourites(fromId, uptoId, null); + listCall = mastodonAPI.favourites(fromId, uptoId, null); break; } } @@ -269,6 +267,10 @@ public class TimelineFragment extends SFragment implements sendFetchTimelineRequest(null, null); } + public void removePostsByUser(String accountId) { + adapter.removeAllByAccountId(accountId); + } + private static boolean findStatus(List statuses, String id) { for (Status status : statuses) { if (status.id.equals(id)) { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java index 2e81adc33..03dc88dc9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java @@ -20,21 +20,31 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.ViewGroup; +import java.util.ArrayList; +import java.util.List; + class TimelinePagerAdapter extends FragmentPagerAdapter { - private Fragment currentFragment; + private int currentFragmentIndex; + private List registeredFragments; TimelinePagerAdapter(FragmentManager manager) { super(manager); + currentFragmentIndex = 0; + registeredFragments = new ArrayList<>(); } - public Fragment getCurrentFragment() { - return currentFragment; + Fragment getCurrentFragment() { + return registeredFragments.get(currentFragmentIndex); + } + + List getRegisteredFragments() { + return registeredFragments; } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { - if (getCurrentFragment() != object) { - currentFragment = ((Fragment) object); + if (position != currentFragmentIndex) { + currentFragmentIndex = position; } super.setPrimaryItem(container, position, object); } @@ -69,4 +79,17 @@ class TimelinePagerAdapter extends FragmentPagerAdapter { public CharSequence getPageTitle(int position) { return null; } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + Fragment fragment = (Fragment) super.instantiateItem(container, position); + registeredFragments.add(fragment); + return fragment; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + registeredFragments.remove((Fragment) object); + super.destroyItem(container, position, object); + } } From b36ad24286b5c985aa9fb323bda45d5ce979f8f1 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 22 Apr 2017 13:13:48 +0800 Subject: [PATCH 59/84] Fix #198: Use OkHttp3Downloader by default --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 3 +- .../keylesspalace/tusky/TuskyApplication.java | 50 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java diff --git a/app/build.gradle b/app/build.gradle index 977f89adc..7624ea62c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,6 +39,8 @@ dependencies { compile 'com.android.support:design:25.3.1' compile 'com.android.support:exifinterface:25.3.1' compile 'com.squareup.picasso:picasso:2.5.2' + compile 'com.squareup.okhttp3:okhttp:3.7.0' + compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' compile 'com.pkmmte.view:circularimageview:1.1' compile 'com.github.peter9870:sparkbutton:master' compile 'com.mikhaellopez:circularfillableloaders:1.2.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c96bc01c3..ee77b8949 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,8 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:name=".TuskyApplication"> diff --git a/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java new file mode 100644 index 000000000..947b8ffe7 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java @@ -0,0 +1,50 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + +package com.keylesspalace.tusky; + +import android.app.Application; +import android.net.Uri; + +import com.squareup.picasso.Picasso; +import com.jakewharton.picasso.OkHttp3Downloader; +import okhttp3.OkHttpClient; + +public class TuskyApplication extends Application { + @Override + public void onCreate() { + // Initialize Picasso configuration + Picasso.Builder builder = new Picasso.Builder(this); + builder.downloader(new OkHttp3Downloader(new OkHttpClient())); + if (BuildConfig.DEBUG) { + builder.listener(new Picasso.Listener() { + @Override + public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { + exception.printStackTrace(); + } + }); + } + + try { + Picasso.setSingletonInstance(builder.build()); + } catch (IllegalStateException e) { + throw new RuntimeException(e); + } + + if (BuildConfig.DEBUG) { + Picasso.with(this).setLoggingEnabled(true); + } + } +} \ No newline at end of file From 90b903a1d0a1ffca219c8694299532dd470af07c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 22 Apr 2017 13:29:00 +0800 Subject: [PATCH 60/84] Let OkHttp3Downloader create an OkHttpClient by default This re-enables the local cache in default cache directory --- .../main/java/com/keylesspalace/tusky/TuskyApplication.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java index 947b8ffe7..6fc59398d 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java +++ b/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.java @@ -20,14 +20,13 @@ import android.net.Uri; import com.squareup.picasso.Picasso; import com.jakewharton.picasso.OkHttp3Downloader; -import okhttp3.OkHttpClient; public class TuskyApplication extends Application { @Override public void onCreate() { // Initialize Picasso configuration Picasso.Builder builder = new Picasso.Builder(this); - builder.downloader(new OkHttp3Downloader(new OkHttpClient())); + builder.downloader(new OkHttp3Downloader(this)); if (BuildConfig.DEBUG) { builder.listener(new Picasso.Listener() { @Override From 01997012de226677146f05a2461e3ddf2c986005 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Sat, 22 Apr 2017 02:06:19 -0400 Subject: [PATCH 61/84] Block and mute lists now remove the entries when you unmute/unblock a user, with a short popup to undo if it's unintentional. Just for clearer feedback. --- .../keylesspalace/tusky/AccountAdapter.java | 19 ++++++++ .../keylesspalace/tusky/AccountFragment.java | 43 +++++++++++++++---- .../keylesspalace/tusky/BlocksAdapter.java | 27 +++--------- .../com/keylesspalace/tusky/MutesAdapter.java | 15 +------ app/src/main/res/values/strings.xml | 3 ++ 5 files changed, 65 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java b/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java index 2773cce1f..9941d34d3 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java @@ -15,6 +15,7 @@ package com.keylesspalace.tusky; +import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import com.keylesspalace.tusky.entity.Account; @@ -64,6 +65,24 @@ abstract class AccountAdapter extends RecyclerView.Adapter { notifyItemRangeInserted(end, newAccounts.size()); } + @Nullable + Account removeItem(int position) { + if (position < 0 || position >= accountList.size()) { + return null; + } + Account account = accountList.remove(position); + notifyItemRemoved(position); + return account; + } + + void addItem(Account account, int position) { + if (position < 0 || position > accountList.size()) { + return; + } + accountList.add(position, account); + notifyItemInserted(position); + } + public Account getItem(int position) { if (position >= 0 && position < accountList.size()) { return accountList.get(position); diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java index ecc63a34f..c4c354ad0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; @@ -257,7 +258,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { - onMuteSuccess(mute, position); + onMuteSuccess(mute, id, position); } else { onMuteFailure(mute, id); } @@ -279,9 +280,22 @@ public class AccountFragment extends BaseFragment implements AccountActionListen call.enqueue(callback); } - private void onMuteSuccess(boolean muted, int position) { - MutesAdapter mutesAdapter = (MutesAdapter) adapter; - mutesAdapter.setMuted(muted, position); + private void onMuteSuccess(boolean muted, final String id, final int position) { + if (muted) { + return; + } + final MutesAdapter mutesAdapter = (MutesAdapter) adapter; + final Account unmutedUser = mutesAdapter.removeItem(position); + View.OnClickListener listener = new View.OnClickListener() { + @Override + public void onClick(View v) { + mutesAdapter.addItem(unmutedUser, position); + onMute(true, id, position); + } + }; + Snackbar.make(recyclerView, R.string.confirmation_unmuted, Snackbar.LENGTH_LONG) + .setAction(R.string.action_undo, listener) + .show(); } private void onMuteFailure(boolean mute, String id) { @@ -307,7 +321,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { - onBlockSuccess(block, position); + onBlockSuccess(block, id, position); } else { onBlockFailure(block, id); } @@ -329,9 +343,22 @@ public class AccountFragment extends BaseFragment implements AccountActionListen call.enqueue(cb); } - private void onBlockSuccess(boolean blocked, int position) { - BlocksAdapter blocksAdapter = (BlocksAdapter) adapter; - blocksAdapter.setBlocked(blocked, position); + private void onBlockSuccess(boolean blocked, final String id, final int position) { + if (blocked) { + return; + } + final BlocksAdapter blocksAdapter = (BlocksAdapter) adapter; + final Account unblockedUser = blocksAdapter.removeItem(position); + View.OnClickListener listener = new View.OnClickListener() { + @Override + public void onClick(View v) { + blocksAdapter.addItem(unblockedUser, position); + onBlock(true, id, position); + } + }; + Snackbar.make(recyclerView, R.string.confirmation_unblocked, Snackbar.LENGTH_LONG) + .setAction(R.string.action_undo, listener) + .show(); } private void onBlockFailure(boolean block, String id) { diff --git a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java index c8c6abbf7..8b00c9397 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java @@ -15,6 +15,7 @@ package com.keylesspalace.tusky; +import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -26,9 +27,6 @@ import com.keylesspalace.tusky.entity.Account; import com.pkmmte.view.CircularImageView; import com.squareup.picasso.Picasso; -import java.util.HashSet; -import java.util.Set; - import butterknife.BindView; import butterknife.ButterKnife; @@ -36,11 +34,8 @@ class BlocksAdapter extends AccountAdapter { private static final int VIEW_TYPE_BLOCKED_USER = 0; private static final int VIEW_TYPE_FOOTER = 1; - private Set unblockedAccountPositions; - BlocksAdapter(AccountActionListener accountActionListener) { super(accountActionListener); - unblockedAccountPositions = new HashSet<>(); } @Override @@ -65,8 +60,7 @@ class BlocksAdapter extends AccountAdapter { if (position < accountList.size()) { BlockedUserViewHolder holder = (BlockedUserViewHolder) viewHolder; holder.setupWithAccount(accountList.get(position)); - boolean blocked = !unblockedAccountPositions.contains(position); - holder.setupActionListener(accountActionListener, blocked, position); + holder.setupActionListener(accountActionListener, true); } } @@ -79,15 +73,6 @@ class BlocksAdapter extends AccountAdapter { } } - void setBlocked(boolean blocked, int position) { - if (blocked) { - unblockedAccountPositions.remove(position); - } else { - unblockedAccountPositions.add(position); - } - notifyItemChanged(position); - } - static class BlockedUserViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.blocked_user_avatar) CircularImageView avatar; @BindView(R.id.blocked_user_username) TextView username; @@ -114,12 +99,14 @@ class BlocksAdapter extends AccountAdapter { .into(avatar); } - void setupActionListener(final AccountActionListener listener, final boolean blocked, - final int position) { + void setupActionListener(final AccountActionListener listener, final boolean blocked) { unblock.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - listener.onBlock(!blocked, id, position); + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + listener.onBlock(!blocked, id, position); + } } }); avatar.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java b/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java index 941257799..2513cac6b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/MutesAdapter.java @@ -21,11 +21,8 @@ class MutesAdapter extends AccountAdapter { private static final int VIEW_TYPE_MUTED_USER = 0; private static final int VIEW_TYPE_FOOTER = 1; - private Set unmutedAccountPositions; - MutesAdapter(AccountActionListener accountActionListener) { super(accountActionListener); - unmutedAccountPositions = new HashSet<>(); } @Override @@ -50,8 +47,7 @@ class MutesAdapter extends AccountAdapter { if (position < accountList.size()) { MutedUserViewHolder holder = (MutedUserViewHolder) viewHolder; holder.setupWithAccount(accountList.get(position)); - boolean muted = !unmutedAccountPositions.contains(position); - holder.setupActionListener(accountActionListener, muted, position); + holder.setupActionListener(accountActionListener, true, position); } } @@ -64,15 +60,6 @@ class MutesAdapter extends AccountAdapter { } } - void setMuted(boolean muted, int position) { - if (muted) { - unmutedAccountPositions.remove(position); - } else { - unmutedAccountPositions.add(position); - } - notifyItemChanged(position); - } - static class MutedUserViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.muted_user_avatar) CircularImageView avatar; @BindView(R.id.muted_user_username) TextView username; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b275bdd9..966853bfe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -94,6 +94,7 @@ Clear Save Edit profile + Undo Share toot URL to… Share toot to… @@ -102,6 +103,8 @@ Toot! Sent! + User unblocked + User unmuted Which instance? What\'s happening? From 7c3feb7136eb77ae38797e455b3b6ddbdf37f61e Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 22 Apr 2017 10:41:49 +0200 Subject: [PATCH 62/84] fix bugs with fab showing/hiding on scroll --- .../tusky/NotificationsFragment.java | 76 +++++++++++++++---- .../keylesspalace/tusky/TimelineFragment.java | 16 +++- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java index 76a89c1f6..56afc0fd8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java @@ -19,7 +19,9 @@ import android.content.Context; import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.Nullable; +import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DividerItemDecoration; @@ -40,15 +42,17 @@ import retrofit2.Response; public class NotificationsFragment extends SFragment implements SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener, - NotificationsAdapter.NotificationActionListener { + NotificationsAdapter.NotificationActionListener, SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "Notifications"; // logging tag private SwipeRefreshLayout swipeRefreshLayout; private LinearLayoutManager layoutManager; + private RecyclerView recyclerView; private EndlessOnScrollListener scrollListener; private NotificationsAdapter adapter; private TabLayout.OnTabSelectedListener onTabSelectedListener; private Call> listCall; + private boolean hideFab; public static NotificationsFragment newInstance() { NotificationsFragment fragment = new NotificationsFragment(); @@ -60,7 +64,7 @@ public class NotificationsFragment extends SFragment implements @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_timeline, container, false); // Setup the SwipeRefreshLayout. @@ -68,7 +72,7 @@ public class NotificationsFragment extends SFragment implements swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh_layout); swipeRefreshLayout.setOnRefreshListener(this); // Setup the RecyclerView. - RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); + recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(context); recyclerView.setLayoutManager(layoutManager); @@ -78,19 +82,7 @@ public class NotificationsFragment extends SFragment implements R.drawable.status_divider_dark); divider.setDrawable(drawable); recyclerView.addItemDecoration(divider); - scrollListener = new EndlessOnScrollListener(layoutManager) { - @Override - public void onLoadMore(int page, int totalItemsCount, RecyclerView view) { - NotificationsAdapter adapter = (NotificationsAdapter) view.getAdapter(); - Notification notification = adapter.getItem(adapter.getItemCount() - 2); - if (notification != null) { - sendFetchNotificationsRequest(notification.id, null); - } else { - sendFetchNotificationsRequest(); - } - } - }; - recyclerView.addOnScrollListener(scrollListener); + adapter = new NotificationsAdapter(this, this); recyclerView.setAdapter(adapter); @@ -112,6 +104,51 @@ public class NotificationsFragment extends SFragment implements return rootView; } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + /* This is delayed until onActivityCreated solely because MainActivity.composeButton isn't + * guaranteed to be set until then. + * Use a modified scroll listener that both loads more notifications as it goes, and hides + * the compose button on down-scroll. */ + MainActivity activity = (MainActivity) getActivity(); + final FloatingActionButton composeButton = activity.composeButton; + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( + activity); + preferences.registerOnSharedPreferenceChangeListener(this); + hideFab = preferences.getBoolean("fabHide", false); + scrollListener = new EndlessOnScrollListener(layoutManager) { + @Override + public void onScrolled(RecyclerView view, int dx, int dy) { + super.onScrolled(view, dx, dy); + + if (hideFab) { + if (dy > 0 && composeButton.isShown()) { + composeButton.hide(); // hides the button if we're scrolling down + } else if (dy < 0 && !composeButton.isShown()) { + composeButton.show(); // shows it if we are scrolling up + } + } else if (!composeButton.isShown()) { + composeButton.show(); + } + } + + @Override + public void onLoadMore(int page, int totalItemsCount, RecyclerView view) { + NotificationsAdapter adapter = (NotificationsAdapter) view.getAdapter(); + Notification notification = adapter.getItem(adapter.getItemCount() - 2); + if (notification != null) { + sendFetchNotificationsRequest(notification.id, null); + } else { + sendFetchNotificationsRequest(); + } + } + }; + + recyclerView.addOnScrollListener(scrollListener); + } + @Override public void onDestroy() { super.onDestroy(); @@ -245,4 +282,11 @@ public class NotificationsFragment extends SFragment implements public void onViewAccount(String id) { super.viewAccount(id); } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if(key.equals("fabHide")) { + hideFab = sharedPreferences.getBoolean("fabHide", false); + } + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 223f6a084..6973524a9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -39,7 +39,7 @@ import retrofit2.Call; import retrofit2.Callback; public class TimelineFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener { + SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener, SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "Timeline"; // logging tag private Call> listCall; @@ -61,6 +61,7 @@ public class TimelineFragment extends SFragment implements private LinearLayoutManager layoutManager; private EndlessOnScrollListener scrollListener; private TabLayout.OnTabSelectedListener onTabSelectedListener; + private boolean hideFab; public static TimelineFragment newInstance(Kind kind) { TimelineFragment fragment = new TimelineFragment(); @@ -152,17 +153,21 @@ public class TimelineFragment extends SFragment implements final FloatingActionButton composeButton = activity.composeButton; final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( activity); + preferences.registerOnSharedPreferenceChangeListener(this); + hideFab = preferences.getBoolean("fabHide", false); scrollListener = new EndlessOnScrollListener(layoutManager) { @Override public void onScrolled(RecyclerView view, int dx, int dy) { super.onScrolled(view, dx, dy); - if (preferences.getBoolean("fabHide", false)) { + if (hideFab) { if (dy > 0 && composeButton.isShown()) { composeButton.hide(); // hides the button if we're scrolling down } else if (dy < 0 && !composeButton.isShown()) { composeButton.show(); // shows it if we are scrolling up } + } else if (!composeButton.isShown()) { + composeButton.show(); } } @@ -358,4 +363,11 @@ public class TimelineFragment extends SFragment implements } super.viewAccount(id); } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if(key.equals("fabHide")) { + hideFab = sharedPreferences.getBoolean("fabHide", false); + } + } } From 32a397904bf908599b74d838dac3320a529b4f99 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 22 Apr 2017 11:32:55 +0200 Subject: [PATCH 63/84] use material design icon for local timeline tab --- app/src/main/res/drawable/ic_local_24dp.xml | 34 +++++---------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/app/src/main/res/drawable/ic_local_24dp.xml b/app/src/main/res/drawable/ic_local_24dp.xml index 0d95dd5e1..295300743 100644 --- a/app/src/main/res/drawable/ic_local_24dp.xml +++ b/app/src/main/res/drawable/ic_local_24dp.xml @@ -1,27 +1,7 @@ - - - - - - - - + + + \ No newline at end of file From bc085f292f9a3bdbd9053dc62543ddefa1292e7a Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:03:25 +0300 Subject: [PATCH 64/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20NL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-nl/strings.xml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1d7474780..4dca1a084 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -13,6 +13,8 @@ Bestandstype kan niet worden geüpload. Bestand kan niet worden geopend. Toestemming nodig om media te kunnen lezen. + + Afbeeldingen en video\'s kunnen niet allebei aan dezelfde toot worden toegevoegd. Uploaden mislukt. Tenminste één toot moet worden gerapporteerd. @@ -87,6 +89,8 @@ Opties Menu openen Leegmaken + + Deel link van toot met… Deel toot met… @@ -99,6 +103,11 @@ Welke Mastodon-server? Wat wil je kwijt? Waarschuwingstekst + + + + + Wat is een Mastodon-server? @@ -108,10 +117,12 @@ Uploaden media wordt voltooid Uploaden… + - Openbaar + Openbaar Openbaar, maar niet op een openbare tijdlijn tonen Alleen aan volgers (en vermeldingen) tonen + Meldingen Meldingen bewerken @@ -140,5 +151,4 @@ Geblokkeerde account Deel inhoud van toot Deel link met toot - From d24774fa1754641ec6e1b47fb0d29810ef62179d Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:05:11 +0300 Subject: [PATCH 65/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20JA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-ja/strings.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3d45afad3..d8f909796 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -13,6 +13,8 @@ その形式のファイルはアップロードできません。 ファイルを開けませんでした。 メディアの読み取り許可が必要です。 + + 画像と動画を同時に投稿することはできません。 アップロードに失敗しました。 少なくとも1つの投稿を報告してください。 @@ -79,6 +81,7 @@ ブラウザで開く 決定 メディアを追加 + 共有 ミュート ミュート解除 @@ -87,6 +90,8 @@ オプション メニューを開く 消去 + + トゥートのURLを共有… トゥートを共有… @@ -99,6 +104,11 @@ どのインスタンス? 今なにしてる? 注意書き + + + + + インスタンスとは? @@ -112,10 +122,12 @@ メディアをアップロードしています アップロード中… + 全体へ公開 全体へ公開するが、公開タイムラインには表示しない フォロワーと返信先にのみに表示 + 通知 通知を設定 @@ -144,5 +156,4 @@ 非公開アカウント トゥートの内容を共有 トゥートへのリンクを共有 - From f673e81495f2a1310d25ac8e1203ec732c6c1b12 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:08:48 +0300 Subject: [PATCH 66/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20AR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-ar/strings.xml | 43 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index c06ceaf01..0e508b5b7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,14 +1,24 @@ وقع هناك خطأ. + اسم النطاق غير صالح اخفقت المصادقة مع مثيل الخادم هذا. لم يتم العثور على متصفح قابل للإستعمال. + تم رفض التصريح. + + يجب أن يكون حجم الملف أقل من 4 ميغابايت. لا يمكن رفع هذا النوع من الملفات. تعذر فتح ذاك الملف. + + + + اخفقت عملية الرفع. + + الرئيسية الاشعارات المحلية @@ -31,6 +41,7 @@ نهاية الحالات نهاية الاشعارات نهاية الحسابات + %s عزز تبويقك %s أعجب بتبويقك @@ -55,6 +66,7 @@ تبويق بَوِّق إعادة المحاولة + اخفي النص وراء تحذير موافق إلغاء @@ -69,6 +81,7 @@ إفتح في متصفح ارسل إضافة وسائط + شارك أكتم إلغاء الكتم @@ -77,8 +90,11 @@ خيارات إفتح الدرج إمسح + + - شارك رابط التبويق إلى ... + شارك رابط التبويق إلى ... + ابحث عن حسابات ... @@ -88,11 +104,31 @@ أي سيرفر ؟ ما الجديد ؟ تحذير عن المحتوى + + + + + ماذا نعني بمثيل الخادم ؟ + + + + + + + + + تتمة رفع الوسائط جاري الرفع ... + + + + + + الاشعارات تعديل الاشعارات @@ -110,6 +146,8 @@ إستخدم سمةً فاتحة اللون المتصفح إخفاء زر المتابعة أثناء تمرير الصفحة + + %s أشار إليك %1$s, %2$s, %3$s و %4$d أخرى %1$s, %2$s, و %3$s @@ -117,5 +155,6 @@ %d تفاعلات جديدة حساب مقفل - + + From e43311837298eec70b59e45094303b99a4f11efc Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:15:27 +0300 Subject: [PATCH 67/84] =?UTF-8?q?Copy=20new=20untranslated=20strings=20fro?= =?UTF-8?q?m=20EN=20=E2=86=92=20DE=20and=20re-order=20to=20match?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-de/strings.xml | 60 +++++++++++++++----------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1e81f0efd..4ab3a6a0b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,20 +1,23 @@ + + Ein Fehler ist aufgetreten. + Ungültige Domain angegeben Diese App konnte sich auf dem Server nicht authentifizieren. + Kein Webbrowser gefunden. Ein undefinierbarer Autorisierungsfehler ist aufgetreten. + Autorisierung fehlgeschlagen. + Es konnte kein Login-Token abgerufen werden. Der Beitrag ist zu lang! Die Datei muss kleiner als 4MB sein. Dieser Dateityp darf nicht hochgeladen werden. Die Datei konnte nicht geöffnet werden. Eine Leseberechtigung wird für das Hochladen der Mediendatei benötigt. + Eine Berechtigung wird zum Speichern des Mediums benötigt. + Bilder und Videos können beide nicht an den Beitrag angehängt werden. Die Mediendatei konnte nicht hochgeladen werden. Mindestens ein Beitrag muss berichtet werden. - Autorisierung fehlgeschlagen. - Ein Fehler ist aufgetreten. - Kein Webbrowser gefunden. - Es konnte kein Login-Token abgerufen werden. - Eine Berechtigung wird zum Speichern des Mediums benötigt. Start Benachrichtigungen @@ -38,6 +41,7 @@ Ende des Beitrages Ende der Benachrichtigungen Ende der Accounts + %s teilte deinen Beitrag %s favorisierte deinen Beitrag @@ -46,6 +50,10 @@ \@%s melden Irgendwelche Anmerkungen? + Antworten + Teilen + Favorisieren + Mehr Schreiben Anmelden mit Mastodon Ausloggen @@ -68,26 +76,25 @@ Einstellungen Favoriten Blockierte Nutzer + Thread + Medien Im Browser öffnen Senden Füge Medien hinzu + Teilen Stummschalten Lautschalten Erwähnen - Antworten - Teilen - Favorisieren - Mehr - Thread - Medien + NSFW Einstellungen Drawer öffnen Löschen + + - NSFW - - Teile Toot-URL zu… + Teile Toot-URL zu… + Suche Accounts… @@ -97,6 +104,11 @@ Welche Instanz? Was passiert gerade? Inhaltswarnung + + + + + Was ist eine Instanz? @@ -113,23 +125,22 @@ Öffentlich sichtbar Öffentlich sichtbar, aber nicht in der öffentlichen Timeline Nur für Follower und Erwähnte sichtbar + Benachrichtigungen + Benachrichtigungseinstellungen Push-Benachrichtigungen + Benachrichtigungen Benachrichtige mit Sound Benachrichtige mit Vibration Benachrichtige mit Licht + Benachrichtigen wenn + Ich erwähnt werde + Mir jemand folgt + Jemand meine Posts teilt + Jemandem meine Posts gefallen Aussehen Benutze helles Theme - - Benachrichtigungen - Benachrichtigungseinstellungen - Jemandem meine Posts gefallen - Benachrichtigen wenn - Mir jemand folgt - Ich erwähnt werde - - Jemand meine Posts teilt Browser Öffne Links in der App Verstecke Button bei Bildlauf @@ -141,5 +152,6 @@ %d neue Interaktionen Gesperrter Account - + + From 1a94e5337fcda603eb44bba35fee942a561a3e03 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Fri, 21 Apr 2017 11:25:26 +0300 Subject: [PATCH 68/84] Update TR translation with recently added and edited strings --- app/src/main/res/values-tr/strings.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9625d745f..24055b069 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -13,7 +13,7 @@ O biçim dosya yüklenmez. O dosya açılamadı. Medya okuma izni gerekiyor. - Permission to store media is required. + Medya kaydetmek için izin gerekiyor. Aynı iletiye kem video hem resim eklenemez. Yükleme başarsız. @@ -81,7 +81,7 @@ Tarayıcıda aç Gönder Medya ekle - Take photo + Resim çek Paylaş Sesize al Sesizden kaldır @@ -90,8 +90,8 @@ Seçenekler Çekmece aç Temizle - Save - Edit profile + Kaydet + Profili düzelt İletinin adresini paylaş… İletiyi paylaş… @@ -104,11 +104,11 @@ Hangi sunucu? Neler oluyor? İçerik uyarı - Display name - Bio + Görünen ad + Biyo - Avatar - Header + Simge + Üstlük Sunucu nedir? @@ -122,12 +122,12 @@ Medya Yükleme Bittiriliyor Yükleniyor… - Download + İndir - Herkese açık - Kerkese açık ancak sosyal çizelgesinde çıkmaz - Sadece takipçiler ve bahsedilenlere açık - Direct: Post to mentioned users only + Kamu: Herkese açık ve sosyal çizelgelerinde çıkar + Saklı: Herkese açık ancık sosyal çizelgesinde çıkmaz + Özel: Sadece takipçiler ve bahsedilenlere açık + Direkt: Sadece bahsedilen kullanıcılara açık Bildirimler Bildirimleri düzelt From e150e14c1cb46fce990dab5570ea57cee5f40132 Mon Sep 17 00:00:00 2001 From: "BOSCH, Cedric" Date: Fri, 21 Apr 2017 07:37:02 +0200 Subject: [PATCH 69/84] =?UTF-8?q?Traduction=20vers=20le=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-fr/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0a0a6ec5b..489554930 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,7 +1,7 @@ Une erreur s’est produite. - This cannot be empty. + Ce champs ne peut pas être vide Le domaine est invalide L’application n’a pu s’authentifier avec l’instance. Impossible de trouver un navigateur web. @@ -13,7 +13,7 @@ Ce type de fichier n’est pas accepté. Le fichier ne peut être ouvert. Une permission pour lire ce média est requise pour le mettre en ligne. - Permission to store media is required. + Permission d\'enregistrer le fichier requise. Impossible de mettre une vidéo et une image sur le même pouet. Ce média ne peut être mis en ligne. @@ -41,7 +41,7 @@ fin du pouet fin des notifications fin des comptes - There are no toots here so far. Pull down to refresh! + Il n\'y à pas encore de pouet ici. Glissez vers le bas pour actualiser! %s a boosté votre pouet %s a ajouté votre pouet dans ses favoris @@ -81,7 +81,7 @@ Ouvrir avec votre navigateur Envoyer Ajouter un média - Take photo + Prendre une photo Partager Rendre muet Redonner la parole @@ -90,11 +90,11 @@ Option Ouvrir le menu Nettoyer - Save - Edit profile + Sauvegarder + Modifier le profil Partager l’URL de votre pouet avec… - Share toot to… + Partager le pouet avec… Rechercher un compte… @@ -104,11 +104,11 @@ Quelle instance ? Quoi de neuf ? Contenu sensible - Display name + Afficher le nom Bio Avatar - Header + En-tête Qu’est ce qu’une instance ? @@ -121,7 +121,7 @@ Média mis en ligne avec succès Mise en ligne… - Download + Télécharger Public: Afficher dans les fils publics Non-listé: Ne pas afficher dans les fils publics @@ -153,6 +153,6 @@ %d nouvelles interactions Compte bloqué - Share content of toot - Share link to toot + Partager le conteunu du pouet + Partager le lien du pouet From 61d79ff28ef9489449a3a1638dd6346d9079d494 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Sat, 22 Apr 2017 15:22:29 +0300 Subject: [PATCH 70/84] Correct French spelling per @SkyzohKey's comment in PR review --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 489554930..c8445aa1d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -153,6 +153,6 @@ %d nouvelles interactions Compte bloqué - Partager le conteunu du pouet + Partager le contenu du pouet Partager le lien du pouet From bb2c0f83b36f45242bbbfd8d3e845ff1bafcfb21 Mon Sep 17 00:00:00 2001 From: FlameArche Date: Sat, 22 Apr 2017 22:08:21 +0900 Subject: [PATCH 71/84] Adds Japanese new translations --- app/src/main/res/values-ja/strings.xml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3d45afad3..8a98fe275 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -13,6 +13,8 @@ その形式のファイルはアップロードできません。 ファイルを開けませんでした。 メディアの読み取り許可が必要です。 + メディアの書き込み許可が必要です。 + 画像と動画を同時に投稿することはできません。 アップロードに失敗しました。 少なくとも1つの投稿を報告してください。 @@ -27,6 +29,7 @@ フォロー フォロワー お気に入り + ミュートしたユーザー ブロックしたユーザー \@%s @@ -73,12 +76,14 @@ プロフィール 設定 お気に入り + ミュートしたユーザー ブロックしたユーザー スレッド メディア ブラウザで開く 決定 メディアを追加 + 写真を撮る 共有 ミュート ミュート解除 @@ -87,6 +92,9 @@ オプション メニューを開く 消去 + 保存 + プロフィールを編集 + 取り消す トゥートのURLを共有… トゥートを共有… @@ -95,10 +103,17 @@ トゥート! 送信しました! + ブロックを解除しました + ミュートを解除しました どのインスタンス? 今なにしてる? 注意書き + 表示名 + プロフィール + + アイコン + ヘッダー インスタンスとは? @@ -112,10 +127,12 @@ メディアをアップロードしています アップロード中… + ダウンロード - 全体へ公開 - 全体へ公開するが、公開タイムラインには表示しない - フォロワーと返信先にのみに表示 + 公開:公開タイムラインに投稿する + 未収載:公開タイムラインには表示しない + 非公開:フォロワーだけに公開 + ダイレクト:返信先のユーザーだけに公開 通知 通知を設定 From d7f6525386be68228f7fe115f123764b9b2a8d0b Mon Sep 17 00:00:00 2001 From: jeroenpraat Date: Sat, 22 Apr 2017 15:41:23 +0200 Subject: [PATCH 72/84] Small fix: Improved instances example --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1d7474780..d2be8266a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -102,7 +102,7 @@ Wat is een Mastodon-server? - Het adres of domein van elke Mastodon-server kan hier worden ingevoerd, zoals mastodon.social, octodon.social, mstdn.nl en veel meer! + Het adres of domein van elke Mastodon-server kan hier worden ingevoerd, zoals mastodon.social, mastodon.cloud, octoton.social en veel meer! \n\nWanneer je nog geen account hebt, kun je de naam van de Mastodon-server waar jij je graag wil registeren invoeren, waarna je daarna daar een account kunt aanmaken.\n\nEen Mastodon-server is een computerserver waar jouw account zich bevindt, maar je kan eenvoudig mensen van andere servers volgen en met ze communiceren, alsof jullie met elkaar op dezelfde website zitten. \n\nMeer informatie kun je vinden op mastodon.social. From 74d1870a9529e7c53faffea0a9b7dedde57fa0c4 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Sun, 23 Apr 2017 17:37:59 -0400 Subject: [PATCH 73/84] fixes typo in merged fix --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d2be8266a..33c4ca130 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -102,7 +102,7 @@ Wat is een Mastodon-server? - Het adres of domein van elke Mastodon-server kan hier worden ingevoerd, zoals mastodon.social, mastodon.cloud, octoton.social en veel meer! + Het adres of domein van elke Mastodon-server kan hier worden ingevoerd, zoals mastodon.social, mastodon.cloud, octodon.social en veel meer! \n\nWanneer je nog geen account hebt, kun je de naam van de Mastodon-server waar jij je graag wil registeren invoeren, waarna je daarna daar een account kunt aanmaken.\n\nEen Mastodon-server is een computerserver waar jouw account zich bevindt, maar je kan eenvoudig mensen van andere servers volgen en met ze communiceren, alsof jullie met elkaar op dezelfde website zitten. \n\nMeer informatie kun je vinden op mastodon.social. From 6723bd82fe12cbbc6f62c1dfa24fd334c0a25fa7 Mon Sep 17 00:00:00 2001 From: Elarcis Date: Mon, 24 Apr 2017 19:07:23 +0200 Subject: [PATCH 74/84] (untested) Fixed grammatical errors in the french translation I don't have the necessary SDK for Android apps, however I was able to fix some awful grammatical errors in the french locales. Nuff said. --- app/src/main/res/values-fr/strings.xml | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c8445aa1d..06ed674d8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,9 +1,9 @@ Une erreur s’est produite. - Ce champs ne peut pas être vide + Ce champ ne peut pas être vide Le domaine est invalide - L’application n’a pu s’authentifier avec l’instance. + L’application n’a pu s’authentifier auprès de l’instance. Impossible de trouver un navigateur web. Une erreur d’autorisation inconnue s’est produite. Vous ne pouvez pas vous authentifier. @@ -13,7 +13,7 @@ Ce type de fichier n’est pas accepté. Le fichier ne peut être ouvert. Une permission pour lire ce média est requise pour le mettre en ligne. - Permission d\'enregistrer le fichier requise. + Permission d’enregistrer le fichier requise. Impossible de mettre une vidéo et une image sur le même pouet. Ce média ne peut être mis en ligne. @@ -41,7 +41,7 @@ fin du pouet fin des notifications fin des comptes - Il n\'y à pas encore de pouet ici. Glissez vers le bas pour actualiser! + Il n’y a pas encore de pouets ici. Glissez vers le bas pour actualiser ! %s a boosté votre pouet %s a ajouté votre pouet dans ses favoris @@ -73,11 +73,11 @@ Fermer Retour Profil - Préferences + Préférences Favoris Utilisateurs bloqués - Thread - Media + Fil + Média Ouvrir avec votre navigateur Envoyer Ajouter un média @@ -98,8 +98,8 @@ Rechercher un compte… - Toot! - Envoyer ! + Pouet ! + Envoyé ! Quelle instance ? Quoi de neuf ? @@ -113,9 +113,9 @@ Qu’est ce qu’une instance ? L’adresse ou le domaine d’une instance peut être entré - ici, comme mastodon.social, icosahedron.website, social.tchncs.de, et - plus (en anglais)! - \n\nSi vous n’avez pas de compte, vous pouvez entrer le nom de l’instance que vous voulez rejoindre et créer un compte ici.\n\nUne instance est l’endroit où votre compte est + ici, comme mastodon.social, icosahedron.website, social.tchncs.de, + ou autre (en anglais) ! + \n\nSi vous n’avez pas de compte, vous pouvez entrer le nom de l’instance que vous voulez rejoindre et créer un compte ici.\n\nUne instance est l’endroit où votre compte est stocké, mais vous pouvez facilement communiquer et suivre d’autres personnes sur d’autres instances bien que vous soyez sur le même site \n\nPlus d’info mastodon.social (anglais). @@ -125,8 +125,8 @@ Public: Afficher dans les fils publics Non-listé: Ne pas afficher dans les fils publics - Privé: N\'afficher que pour vos abonné⋅e⋅s - Direct: N\'afficher que pour les personnes mentionnées + Privé: N’afficher que pour vos abonné⋅e⋅s + Direct: N’afficher que pour les personnes mentionnées Notifications Modifier la notification @@ -146,7 +146,7 @@ Utiliser le navigateur intégré Cacher le bouton de suivi lors du défilement - %s vous ont mentionné⋅e + %s vous ont mentionné %1$s, %2$s, %3$s et %4$d plus %1$s, %2$s, et %3$s %1$s et %2$s @@ -155,4 +155,4 @@ Compte bloqué Partager le contenu du pouet Partager le lien du pouet - + From b6e72a94be90ae7bffddf4ce06ea135130118871 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Tue, 25 Apr 2017 07:30:57 -0400 Subject: [PATCH 75/84] Custom tabs are now used for login and links on account pages, with a fallback to the default browser if not supported. Also, fixes crashes when entering tag and threads due to me forgetting to implement the interfaces required by the code that removes posts from timelines when blocking/muting. Also fixes a small bug where for mentions of users from other instances, clicking on the mention would open the profile in the browser instead of in-app. --- .../keylesspalace/tusky/AccountActivity.java | 19 ++++-- .../com/keylesspalace/tusky/BaseFragment.java | 7 ++ .../keylesspalace/tusky/CustomTabURLSpan.java | 2 +- .../tusky/DownsizeImageTask.java | 2 + .../com/keylesspalace/tusky/LinkHelper.java | 67 +++++++++++++++++++ .../com/keylesspalace/tusky/LinkListener.java | 6 ++ .../keylesspalace/tusky/LoginActivity.java | 46 +++++++++++-- .../com/keylesspalace/tusky/SFragment.java | 4 +- .../tusky/StatusActionListener.java | 4 +- .../keylesspalace/tusky/StatusViewHolder.java | 51 +------------- .../keylesspalace/tusky/TimelineFragment.java | 5 +- .../keylesspalace/tusky/ViewTagActivity.java | 12 +++- .../tusky/ViewThreadActivity.java | 14 +++- .../tusky/ViewThreadFragment.java | 7 +- .../keylesspalace/tusky/entity/Status.java | 3 + 15 files changed, 180 insertions(+), 69 deletions(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/LinkHelper.java create mode 100644 app/src/main/java/com/keylesspalace/tusky/LinkListener.java diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java index df7afd398..63d16be66 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.java @@ -33,7 +33,6 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; -import android.text.method.LinkMovementMethod; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -206,9 +205,21 @@ public class AccountActivity extends BaseActivity implements SFragment.OnUserRem displayName.setText(account.getDisplayName()); - note.setText(account.note); - note.setLinksClickable(true); - note.setMovementMethod(LinkMovementMethod.getInstance()); + LinkHelper.setClickableText(note, account.note, null, new LinkListener() { + @Override + public void onViewTag(String tag) { + Intent intent = new Intent(AccountActivity.this, ViewTagActivity.class); + intent.putExtra("hashtag", tag); + startActivity(intent); + } + + @Override + public void onViewAccount(String id) { + Intent intent = new Intent(AccountActivity.this, AccountActivity.class); + intent.putExtra("id", id); + startActivity(intent); + } + }); if (account.locked) { accountLockedView.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseFragment.java b/app/src/main/java/com/keylesspalace/tusky/BaseFragment.java index 79569e82f..0a9dcbcf3 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BaseFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/BaseFragment.java @@ -15,6 +15,8 @@ package com.keylesspalace.tusky; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -40,4 +42,9 @@ public class BaseFragment extends Fragment { } super.onDestroy(); } + + protected SharedPreferences getPrivatePreferences() { + return getContext().getSharedPreferences( + getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/CustomTabURLSpan.java b/app/src/main/java/com/keylesspalace/tusky/CustomTabURLSpan.java index dce7d45c4..7af9a84fe 100644 --- a/app/src/main/java/com/keylesspalace/tusky/CustomTabURLSpan.java +++ b/app/src/main/java/com/keylesspalace/tusky/CustomTabURLSpan.java @@ -54,7 +54,7 @@ class CustomTabURLSpan extends URLSpan { customTabsIntent.launchUrl(context, uri); } } catch (ActivityNotFoundException e) { - android.util.Log.w("URLSpan", "Activity was not found for intent, " + customTabsIntent.toString()); + Log.w("URLSpan", "Activity was not found for intent, " + customTabsIntent.toString()); } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/DownsizeImageTask.java b/app/src/main/java/com/keylesspalace/tusky/DownsizeImageTask.java index e9fcc11a9..4e0d77db9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/DownsizeImageTask.java +++ b/app/src/main/java/com/keylesspalace/tusky/DownsizeImageTask.java @@ -21,6 +21,7 @@ import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.net.Uri; import android.os.AsyncTask; +import android.support.annotation.Nullable; import android.support.media.ExifInterface; import java.io.ByteArrayOutputStream; @@ -42,6 +43,7 @@ class DownsizeImageTask extends AsyncTask { this.listener = listener; } + @Nullable private static Bitmap reorientBitmap(Bitmap bitmap, int orientation) { Matrix matrix = new Matrix(); switch (orientation) { diff --git a/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java b/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java new file mode 100644 index 000000000..e2b2fedcf --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java @@ -0,0 +1,67 @@ +package com.keylesspalace.tusky; + +import android.preference.PreferenceManager; +import android.support.annotation.Nullable; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.URLSpan; +import android.view.View; +import android.widget.TextView; + +import com.keylesspalace.tusky.entity.Status; + +class LinkHelper { + static void setClickableText(TextView view, Spanned content, + @Nullable Status.Mention[] mentions, + final LinkListener listener) { + SpannableStringBuilder builder = new SpannableStringBuilder(content); + boolean useCustomTabs = PreferenceManager.getDefaultSharedPreferences(view.getContext()) + .getBoolean("customTabs", true); + URLSpan[] urlSpans = content.getSpans(0, content.length(), URLSpan.class); + for (URLSpan span : urlSpans) { + int start = builder.getSpanStart(span); + int end = builder.getSpanEnd(span); + int flags = builder.getSpanFlags(span); + CharSequence text = builder.subSequence(start, end); + if (text.charAt(0) == '#') { + final String tag = text.subSequence(1, text.length()).toString(); + ClickableSpan newSpan = new ClickableSpan() { + @Override + public void onClick(View widget) { + listener.onViewTag(tag); + } + }; + builder.removeSpan(span); + builder.setSpan(newSpan, start, end, flags); + } else if (text.charAt(0) == '@' && mentions != null) { + final String accountUsername = text.subSequence(1, text.length()).toString(); + String id = null; + for (Status.Mention mention : mentions) { + if (mention.localUsername.equals(accountUsername)) { + id = mention.id; + } + } + if (id != null) { + final String accountId = id; + ClickableSpan newSpan = new ClickableSpan() { + @Override + public void onClick(View widget) { + listener.onViewAccount(accountId); + } + }; + builder.removeSpan(span); + builder.setSpan(newSpan, start, end, flags); + } + } else if (useCustomTabs) { + ClickableSpan newSpan = new CustomTabURLSpan(span.getURL()); + builder.removeSpan(span); + builder.setSpan(newSpan, start, end, flags); + } + } + view.setText(builder); + view.setLinksClickable(true); + view.setMovementMethod(LinkMovementMethod.getInstance()); + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/LinkListener.java b/app/src/main/java/com/keylesspalace/tusky/LinkListener.java new file mode 100644 index 000000000..de0242bc1 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/LinkListener.java @@ -0,0 +1,6 @@ +package com.keylesspalace.tusky; + +interface LinkListener { + void onViewTag(String tag); + void onViewAccount(String id); +} diff --git a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java index 100bb01e6..3854a48e7 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java @@ -16,6 +16,7 @@ package com.keylesspalace.tusky; import android.app.AlertDialog; +import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -24,6 +25,8 @@ import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.customtabs.CustomTabsIntent; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.text.method.LinkMovementMethod; import android.view.View; @@ -224,6 +227,36 @@ public class LoginActivity extends AppCompatActivity { return s.toString(); } + private static boolean openInCustomTab(Uri uri, Context context) { + boolean lightTheme = PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean("lightTheme", false); + int toolbarColorRes; + if (lightTheme) { + toolbarColorRes = R.color.custom_tab_toolbar_light; + } else { + toolbarColorRes = R.color.custom_tab_toolbar_dark; + } + int toolbarColor = ContextCompat.getColor(context, toolbarColorRes); + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); + builder.setToolbarColor(toolbarColor); + CustomTabsIntent customTabsIntent = builder.build(); + try { + String packageName = CustomTabsHelper.getPackageNameToUse(context); + /* If we cant find a package name, it means theres no browser that supports + * Chrome Custom Tabs installed. So, we fallback to the webview */ + if (packageName == null) { + return false; + } else { + customTabsIntent.intent.setPackage(packageName); + customTabsIntent.launchUrl(context, uri); + } + } catch (ActivityNotFoundException e) { + Log.w("URLSpan", "Activity was not found for intent, " + customTabsIntent.toString()); + return false; + } + return true; + } + private void redirectUserToAuthorizeAndLogin(EditText editText) { /* To authorize this app and log in it's necessary to redirect to the domain given, * activity_login there, and the server will redirect back to the app with its response. */ @@ -235,11 +268,14 @@ public class LoginActivity extends AppCompatActivity { parameters.put("response_type", "code"); parameters.put("scope", OAUTH_SCOPES); String url = "https://" + domain + endpoint + "?" + toQueryString(parameters); - Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - if (viewIntent.resolveActivity(getPackageManager()) != null) { - startActivity(viewIntent); - } else { - editText.setError(getString(R.string.error_no_web_browser_found)); + Uri uri = Uri.parse(url); + if (!openInCustomTab(uri, this)) { + Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri); + if (viewIntent.resolveActivity(getPackageManager()) != null) { + startActivity(viewIntent); + } else { + editText.setError(getString(R.string.error_no_web_browser_found)); + } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index 3fb124b2c..3af5cce0c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -15,7 +15,6 @@ package com.keylesspalace.tusky; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -60,8 +59,7 @@ public abstract class SFragment extends BaseFragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - SharedPreferences preferences = getContext().getSharedPreferences( - getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + SharedPreferences preferences = getPrivatePreferences(); loggedInAccountId = preferences.getString("loggedInAccountId", null); loggedInUsername = preferences.getString("loggedInAccountUsername", null); } diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusActionListener.java b/app/src/main/java/com/keylesspalace/tusky/StatusActionListener.java index 9d14ed96b..1004bb824 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusActionListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusActionListener.java @@ -19,13 +19,11 @@ import android.view.View; import com.keylesspalace.tusky.entity.Status; -interface StatusActionListener { +interface StatusActionListener extends LinkListener { void onReply(int position); void onReblog(final boolean reblog, final int position); void onFavourite(final boolean favourite, final int position); void onMore(View view, final int position); void onViewMedia(String url, Status.MediaAttachment.Type type); void onViewThread(int position); - void onViewTag(String tag); - void onViewAccount(String id); } diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java index 682155287..5f260b6d4 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java @@ -102,57 +102,10 @@ class StatusViewHolder extends RecyclerView.ViewHolder { } private void setContent(Spanned content, Status.Mention[] mentions, - final StatusActionListener listener) { + StatusActionListener listener) { /* Redirect URLSpan's in the status content to the listener for viewing tag pages and * account pages. */ - SpannableStringBuilder builder = new SpannableStringBuilder(content); - boolean useCustomTabs = PreferenceManager.getDefaultSharedPreferences(container.getContext()).getBoolean("customTabs", true); - URLSpan[] urlSpans = content.getSpans(0, content.length(), URLSpan.class); - for (URLSpan span : urlSpans) { - int start = builder.getSpanStart(span); - int end = builder.getSpanEnd(span); - int flags = builder.getSpanFlags(span); - CharSequence text = builder.subSequence(start, end); - if (text.charAt(0) == '#') { - final String tag = text.subSequence(1, text.length()).toString(); - ClickableSpan newSpan = new ClickableSpan() { - @Override - public void onClick(View widget) { - listener.onViewTag(tag); - } - }; - builder.removeSpan(span); - builder.setSpan(newSpan, start, end, flags); - } else if (text.charAt(0) == '@') { - final String accountUsername = text.subSequence(1, text.length()).toString(); - String id = null; - for (Status.Mention mention: mentions) { - if (mention.username.equals(accountUsername)) { - id = mention.id; - } - } - if (id != null) { - final String accountId = id; - ClickableSpan newSpan = new ClickableSpan() { - @Override - public void onClick(View widget) { - listener.onViewAccount(accountId); - } - }; - builder.removeSpan(span); - builder.setSpan(newSpan, start, end, flags); - } - } else if (useCustomTabs) { - ClickableSpan newSpan = new CustomTabURLSpan(span.getURL()); - builder.removeSpan(span); - builder.setSpan(newSpan, start, end, flags); - } - } - // Set the contents. - this.content.setText(builder); - // Make links clickable. - this.content.setLinksClickable(true); - this.content.setMovementMethod(LinkMovementMethod.getInstance()); + LinkHelper.setClickableText(this.content, content, mentions, listener); } private void setAvatar(String url) { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 6973524a9..d23bbed3a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -39,7 +39,10 @@ import retrofit2.Call; import retrofit2.Callback; public class TimelineFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener, SharedPreferences.OnSharedPreferenceChangeListener { + SwipeRefreshLayout.OnRefreshListener, + StatusActionListener, + StatusRemoveListener, + SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "Timeline"; // logging tag private Call> listCall; diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewTagActivity.java b/app/src/main/java/com/keylesspalace/tusky/ViewTagActivity.java index 0536330c5..9bce54a14 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewTagActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewTagActivity.java @@ -26,7 +26,9 @@ import android.view.MenuItem; import butterknife.BindView; import butterknife.ButterKnife; -public class ViewTagActivity extends BaseActivity { +public class ViewTagActivity extends BaseActivity implements SFragment.OnUserRemovedListener { + private Fragment timelineFragment; + @BindView(R.id.toolbar) Toolbar toolbar; @Override @@ -51,6 +53,8 @@ public class ViewTagActivity extends BaseActivity { Fragment fragment = TimelineFragment.newInstance(TimelineFragment.Kind.TAG, hashtag); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); + + timelineFragment = fragment; } @Override @@ -63,4 +67,10 @@ public class ViewTagActivity extends BaseActivity { } return super.onOptionsItemSelected(item); } + + @Override + public void onUserRemoved(String accountId) { + StatusRemoveListener listener = (StatusRemoveListener) timelineFragment; + listener.removePostsByUser(accountId); + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewThreadActivity.java b/app/src/main/java/com/keylesspalace/tusky/ViewThreadActivity.java index cee1d2445..9dcd5efac 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewThreadActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewThreadActivity.java @@ -24,7 +24,9 @@ import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; -public class ViewThreadActivity extends BaseActivity { +public class ViewThreadActivity extends BaseActivity implements SFragment.OnUserRemovedListener { + Fragment viewThreadFragment; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -44,6 +46,8 @@ public class ViewThreadActivity extends BaseActivity { Fragment fragment = ViewThreadFragment.newInstance(id); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); + + viewThreadFragment = fragment; } @Override @@ -62,4 +66,12 @@ public class ViewThreadActivity extends BaseActivity { } return super.onOptionsItemSelected(item); } + + @Override + public void onUserRemoved(String accountId) { + if (viewThreadFragment instanceof StatusRemoveListener) { + StatusRemoveListener listener = (StatusRemoveListener) viewThreadFragment; + listener.removePostsByUser(accountId); + } + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java index 39baf8ee6..0cf476005 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java @@ -36,7 +36,7 @@ import retrofit2.Call; import retrofit2.Callback; public class ViewThreadFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener { + SwipeRefreshLayout.OnRefreshListener, StatusActionListener, StatusRemoveListener { private static final String TAG = "ViewThreadFragment"; private SwipeRefreshLayout swipeRefreshLayout; @@ -150,6 +150,11 @@ public class ViewThreadFragment extends SFragment implements } } + @Override + public void removePostsByUser(String accountId) { + adapter.removeAllByAccountId(accountId); + } + public void onRefresh() { sendStatusRequest(thisThreadsStatusId); sendThreadRequest(thisThreadsStatusId); diff --git a/app/src/main/java/com/keylesspalace/tusky/entity/Status.java b/app/src/main/java/com/keylesspalace/tusky/entity/Status.java index c793e239f..4e147358a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/entity/Status.java +++ b/app/src/main/java/com/keylesspalace/tusky/entity/Status.java @@ -146,5 +146,8 @@ public class Status { @SerializedName("acct") public String username; + + @SerializedName("username") + public String localUsername; } } From d55b3ebcd7d506bbc90501ac2d769d95997167e0 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Tue, 25 Apr 2017 18:31:27 -0400 Subject: [PATCH 76/84] Emojione shortcodes now converted to unicode in display names. closes #82, closes #129 --- .../com/keylesspalace/tusky/BaseActivity.java | 2 ++ .../keylesspalace/tusky/LoginActivity.java | 1 - .../tusky/MyFirebaseMessagingService.java | 1 + .../keylesspalace/tusky/StatusViewHolder.java | 5 ---- .../keylesspalace/tusky/StringWithEmoji.java | 16 +++++++++++++ .../tusky/StringWithEmojiTypeAdapter.java | 23 +++++++++++++++++++ .../keylesspalace/tusky/entity/Account.java | 12 +++++----- 7 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java create mode 100644 app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java index 2fa31b675..ce4cbdd72 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java @@ -32,6 +32,7 @@ import android.view.Menu; import com.google.firebase.iid.FirebaseInstanceId; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.keylesspalace.tusky.entity.Account; import java.io.IOException; @@ -120,6 +121,7 @@ public class BaseActivity extends AppCompatActivity { Gson gson = new GsonBuilder() .registerTypeAdapter(Spanned.class, new SpannedTypeAdapter()) + .registerTypeAdapter(StringWithEmoji.class, new StringWithEmojiTypeAdapter()) .create(); OkHttpClient okHttpClient = OkHttpUtils.getCompatibleClientBuilder() diff --git a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java index 3854a48e7..b85f1faaa 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java @@ -208,7 +208,6 @@ public class LoginActivity extends AppCompatActivity { } } - /** * Chain together the key-value pairs into a query string, for either appending to a URL or * as the content of an HTTP request. diff --git a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java b/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java index d278d611d..6ff4d212b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java +++ b/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java @@ -122,6 +122,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { Gson gson = new GsonBuilder() .registerTypeAdapter(Spanned.class, new SpannedTypeAdapter()) + .registerTypeAdapter(StringWithEmoji.class, new StringWithEmojiTypeAdapter()) .create(); Retrofit retrofit = new Retrofit.Builder() diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java index 5f260b6d4..6a2e431df 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java @@ -16,14 +16,9 @@ package com.keylesspalace.tusky; import android.content.Context; -import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; -import android.text.SpannableStringBuilder; import android.text.Spanned; -import android.text.method.LinkMovementMethod; -import android.text.style.ClickableSpan; -import android.text.style.URLSpan; import android.view.View; import android.widget.CompoundButton; import android.widget.ImageButton; diff --git a/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java b/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java new file mode 100644 index 000000000..76d07e9c9 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java @@ -0,0 +1,16 @@ +package com.keylesspalace.tusky; + +/** + * This is just a wrapper class for a String. + * + * It was designed to get around the limitation of a Json deserializer which only allows custom + * deserializing based on types, when special handling for a specific field was what was actually + * desired (in this case, display names). So, it was most expedient to just make up a type. + */ +public class StringWithEmoji { + public String value; + + public StringWithEmoji(String value) { + this.value = value; + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java b/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java new file mode 100644 index 000000000..e4923921a --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java @@ -0,0 +1,23 @@ +package com.keylesspalace.tusky; + +import com.emojione.Emojione; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import java.lang.reflect.Type; + +/** This is a type-based workaround to allow for shortcode conversion when loading display names. */ +class StringWithEmojiTypeAdapter implements JsonDeserializer { + @Override + public StringWithEmoji deserialize(JsonElement json, Type typeOfT, + JsonDeserializationContext context) throws JsonParseException { + String value = json.getAsString(); + if (value != null) { + return new StringWithEmoji(Emojione.shortnameToUnicode(value, false)); + } else { + return new StringWithEmoji(""); + } + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/entity/Account.java b/app/src/main/java/com/keylesspalace/tusky/entity/Account.java index d76eb7c01..e7be8e810 100644 --- a/app/src/main/java/com/keylesspalace/tusky/entity/Account.java +++ b/app/src/main/java/com/keylesspalace/tusky/entity/Account.java @@ -21,6 +21,7 @@ import android.text.Spanned; import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion; import com.google.gson.annotations.SerializedName; import com.keylesspalace.tusky.HtmlUtils; +import com.keylesspalace.tusky.StringWithEmoji; public class Account implements SearchSuggestion { public String id; @@ -32,7 +33,7 @@ public class Account implements SearchSuggestion { public String username; @SerializedName("display_name") - public String displayName; + public StringWithEmoji displayName; public Spanned note; @@ -70,11 +71,10 @@ public class Account implements SearchSuggestion { } public String getDisplayName() { - if (displayName.length() == 0) { + if (displayName.value.length() == 0) { return localUsername; } - - return displayName; + return displayName.value; } @Override @@ -92,7 +92,7 @@ public class Account implements SearchSuggestion { dest.writeString(id); dest.writeString(localUsername); dest.writeString(username); - dest.writeString(displayName); + dest.writeString(displayName.value); dest.writeString(HtmlUtils.toHtml(note)); dest.writeString(url); dest.writeString(avatar); @@ -111,7 +111,7 @@ public class Account implements SearchSuggestion { id = in.readString(); localUsername = in.readString(); username = in.readString(); - displayName = in.readString(); + displayName = new StringWithEmoji(in.readString()); note = HtmlUtils.fromHtml(in.readString()); url = in.readString(); avatar = in.readString(); From 89184bd1166013410945eb80f62771056c646304 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Wed, 26 Apr 2017 03:30:30 -0400 Subject: [PATCH 77/84] Adds CONTRIBUTING.md --- CONTRIBUTING.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..579947f55 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# Contributing + +## Getting Started +1. Fork the repository on the Github page by clicking the Fork button. This makes a fork of the project under your Github account. +2. Clone your fork to your machine. ```git clone https://github.com//Tusky``` +3. Create a new branch named after your change. ```git checkout -b your-change-name``` (```checkout``` switches to a branch, ```-b``` specifies that the branch is a new one) + +## Making Changes + +### Text +All english text that will be visible to users should be put in ```app/src/main/res/values/strings.xml```. Any text that is missing in a translation will fall back to the version in this file. Be aware that anything added to this file will need to be translated, so be very concise with wording and try to add as few things as possible. Look for existing strings to use first. If there is untranslatable text that you don't want to keep as a string constant in a java class, you can use the string resource file ```app/src/main/res/values/donottranslate.xml```. + +### Translation +Each translation has a single file that contains all of the text. A given locale's file can be found at ```app/src/main/res/values-[_]/strings.xml```. So, it could be ```values-en_US``` or ```values-es_ES```, for example. Specifically, they're the [two-letter ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and the optional [ISO 3166-1 alpha-2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2), which is used for a dialect of that particular country. + +If you're starting a translation that doesn't already exist, you can just copy the english ```strings.xml``` to a new ```values``` directory and replace the english text inside each of the `````` `````` pairs. + +Strings follow XML rules, which means that apostropes and quotation marks have to be "escaped" with a backslash like: ```shouldn\'t``` and ```\"formidable\"```. Also, formatting is ignored when shown in the application, so things like new lines have to be explicitly expressed with codes like ```\n``` for a new line. See also: [String Resources](https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling). + +Please keep the organization and ordering of each of the strings the same as in the default ```strings.xml``` file. It just helps to keep so many translation files straight and up-to-date. + +There are no icons or other resources needing localization, so it's just the text. + +### Java +For java, I generally follow this [Android Style Guide](https://source.android.com/source/code-style), which is what Android uses for their own source code. I encourage the use of optional annotations like ```@Nullable``` and ```@NotNull```. Also, if you ever make helper functions that take Android resources, annotations like ```@StringRes```, ```@DrawableRes```, and ```@AttrRes``` are helpful. They can prevent small errors, like accidentally passing an attribute id to a function that takes a drawable id, for example (both are ints). + +### Visuals +There are two themes in the app, so any visual changes should be checked with both themes to ensure they look appropriate for both. Usually, you can use existing color attributes like ```?attr/colorPrimary``` and ```?attr/textColorSecondary```. For icons and drawables, use a white drawable and tint it at runtime using ```ThemeUtils``` and specify an attribute that references different colours depending on the theme. Do not reference attributes in drawable files, because it is only supported in API levels 21+. + +### Saving +Any time you get a good chunk of work done it's good to make a commit. You can either uses Android Studio's built-in UI for doing this or running the commands: +``` +git add . +git commit -m "Describe the changes in this commit here." +``` + +## Submitting Your Changes +1. Make sure your branch is up-to-date with the ```master``` branch. Run: +``` +git fetch +git rebase origin/master +``` +It may refuse to start the rebase if there's changes that haven't been committed, so make sure you've added/committed everything. If there were changes on master to any of the parts of files you worked on, a conflict will arise when you rebase. [Resolving a merge conflict](https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line) is a good guide to help with this. After committing the resolution, you can run ```git rebase --continue``` to finish the rebase. If you want to cancel, because you make some mistake in resolving the conflict, you can always do ```git rebase --abort```. + +2. Push your local branch to your fork on Github by running ```git push origin ```. +3. Then, go to the original project page and make a pull request. Select your fork/branch and use ```master``` as the base branch. From 2ac6017fd126661c453a3a892a3f60a1f61535d0 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Wed, 26 Apr 2017 03:38:49 -0400 Subject: [PATCH 78/84] Fixes a couple of typos. --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 579947f55..c7993c9d9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,7 +15,7 @@ Each translation has a single file that contains all of the text. A given locale If you're starting a translation that doesn't already exist, you can just copy the english ```strings.xml``` to a new ```values``` directory and replace the english text inside each of the `````` `````` pairs. -Strings follow XML rules, which means that apostropes and quotation marks have to be "escaped" with a backslash like: ```shouldn\'t``` and ```\"formidable\"```. Also, formatting is ignored when shown in the application, so things like new lines have to be explicitly expressed with codes like ```\n``` for a new line. See also: [String Resources](https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling). +Strings follow XML rules, which means that apostrophes and quotation marks have to be "escaped" with a backslash like: ```shouldn\'t``` and ```\"formidable\"```. Also, formatting is ignored when shown in the application, so things like new lines have to be explicitly expressed with codes like ```\n``` for a new line. See also: [String Resources](https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling). Please keep the organization and ordering of each of the strings the same as in the default ```strings.xml``` file. It just helps to keep so many translation files straight and up-to-date. @@ -40,7 +40,7 @@ git commit -m "Describe the changes in this commit here." git fetch git rebase origin/master ``` -It may refuse to start the rebase if there's changes that haven't been committed, so make sure you've added/committed everything. If there were changes on master to any of the parts of files you worked on, a conflict will arise when you rebase. [Resolving a merge conflict](https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line) is a good guide to help with this. After committing the resolution, you can run ```git rebase --continue``` to finish the rebase. If you want to cancel, because you make some mistake in resolving the conflict, you can always do ```git rebase --abort```. +It may refuse to start the rebase if there's changes that haven't been committed, so make sure you've added and committed everything. If there were changes on master to any of the parts of files you worked on, a conflict will arise when you rebase. [Resolving a merge conflict](https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line) is a good guide to help with this. After committing the resolution, you can run ```git rebase --continue``` to finish the rebase. If you want to cancel, like if you make some mistake in resolving the conflict, you can always do ```git rebase --abort```. -2. Push your local branch to your fork on Github by running ```git push origin ```. +2. Push your local branch to your fork on Github by running ```git push origin your-change-name```. 3. Then, go to the original project page and make a pull request. Select your fork/branch and use ```master``` as the base branch. From 1aa870b069f242a2c5a72b67bd557631d4a26ef5 Mon Sep 17 00:00:00 2001 From: Conny Duck Date: Thu, 27 Apr 2017 14:47:56 +0200 Subject: [PATCH 79/84] make tabs fill whole space in landscape mode --- app/src/main/res/layout/activity_main.xml | 41 ++++++++++++----------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5da1b06e4..ec98ae770 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,7 @@ - + app:tabTextAppearance="@style/TabLayoutTextStyle"> + app:floatingSearch_searchBarMarginLeft="6dp" + app:floatingSearch_searchBarMarginRight="6dp" + app:floatingSearch_searchBarMarginTop="4dp" + app:floatingSearch_searchHint="@string/search" + app:floatingSearch_showSearchKey="false" + app:floatingSearch_suggestionsListAnimDuration="250" /> + android:visibility="visible" + app:layout_anchor="@id/tab_layout" + app:layout_anchorGravity="bottom" /> + app:srcCompat="@drawable/ic_create_24dp" /> Date: Thu, 27 Apr 2017 16:48:16 +0200 Subject: [PATCH 80/84] Very small fix Dutch strings --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2a821f5a0..ccfbe82fc 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -121,7 +121,7 @@ Openbaar Openbaar, maar niet op een openbare tijdlijn tonen - Alleen aan volgers (en vermeldingen) tonen + Alleen aan volgers tonen Meldingen From 5f6fab2b702f32db2ec4f2339ddfe7e8975962eb Mon Sep 17 00:00:00 2001 From: Vavassor Date: Thu, 27 Apr 2017 23:29:42 -0400 Subject: [PATCH 81/84] Moves Firebase notifications to a "google" build flavor and adds an "fdroid" flavor that uses polling for notifications. Also, adds a few missing license notices. --- app/build.gradle | 12 +- app/src/fdroid/AndroidManifest.xml | 12 + .../keylesspalace/tusky/MessagingService.java | 114 +++++++ app/src/google/AndroidManifest.xml | 18 + .../keylesspalace/tusky/MessagingService.java | 121 +++++++ .../tusky/MyFirebaseInstanceIdService.java | 2 +- app/src/main/AndroidManifest.xml | 14 +- .../com/keylesspalace/tusky/BaseActivity.java | 82 +++-- .../keylesspalace/tusky/BlocksAdapter.java | 1 - .../tusky/EditProfileActivity.java | 15 + .../com/keylesspalace/tusky/LinkHelper.java | 15 + .../com/keylesspalace/tusky/LinkListener.java | 15 + .../com/keylesspalace/tusky/MainActivity.java | 8 +- .../tusky/MyFirebaseMessagingService.java | 319 ------------------ .../tusky/NotificationMaker.java | 224 ++++++++++++ .../com/keylesspalace/tusky/OkHttpUtils.java | 7 +- .../tusky/SpannedTypeAdapter.java | 2 +- .../tusky/StatusRemoveListener.java | 15 + .../keylesspalace/tusky/StringWithEmoji.java | 15 + .../tusky/StringWithEmojiTypeAdapter.java | 15 + 20 files changed, 653 insertions(+), 373 deletions(-) create mode 100644 app/src/fdroid/AndroidManifest.xml create mode 100644 app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java create mode 100644 app/src/google/AndroidManifest.xml create mode 100644 app/src/google/java/com/keylesspalace/tusky/MessagingService.java rename app/src/{main => google}/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java (97%) delete mode 100644 app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java create mode 100644 app/src/main/java/com/keylesspalace/tusky/NotificationMaker.java diff --git a/app/build.gradle b/app/build.gradle index 7624ea62c..347ec31cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,14 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary true } + productFlavors { + google { + buildConfigField "boolean", "USES_PUSH_NOTIFICATIONS", "true" + } + fdroid { + buildConfigField "boolean", "USES_PUSH_NOTIFICATIONS", "false" + } + } buildTypes { release { minifyEnabled true @@ -51,8 +59,8 @@ dependencies { compile 'com.github.arimorty:floatingsearchview:2.0.3' compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0' compile 'com.jakewharton:butterknife:8.4.0' - compile 'com.google.firebase:firebase-messaging:10.0.1' - compile 'com.google.firebase:firebase-crash:10.0.1' + googleCompile 'com.google.firebase:firebase-messaging:10.0.1' + googleCompile 'com.google.firebase:firebase-crash:10.0.1' testCompile 'junit:junit:4.12' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } diff --git a/app/src/fdroid/AndroidManifest.xml b/app/src/fdroid/AndroidManifest.xml new file mode 100644 index 000000000..b7060e6e2 --- /dev/null +++ b/app/src/fdroid/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java b/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java new file mode 100644 index 000000000..f7c24c425 --- /dev/null +++ b/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java @@ -0,0 +1,114 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + +package com.keylesspalace.tusky; + +import android.app.IntentService; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.text.Spanned; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import com.keylesspalace.tusky.entity.Notification; +import java.util.List; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class MessagingService extends IntentService { + public static final int NOTIFY_ID = 6; // This is an arbitrary number. + + private MastodonAPI mastodonAPI; + + public MessagingService() { + super("Tusky Pull Notification Service"); + } + + @Override + protected void onHandleIntent(Intent intent) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( + getApplicationContext()); + boolean enabled = preferences.getBoolean("notificationsEnabled", true); + if (!enabled) { + return; + } + + createMastodonApi(); + + mastodonAPI.notifications(null, null, null).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, + Response> response) { + if (response.isSuccessful()) { + List notificationList = response.body(); + for (Notification notification : notificationList) { + NotificationMaker.make(MessagingService.this, NOTIFY_ID, notification); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) {} + }); + } + + private void createMastodonApi() { + SharedPreferences preferences = getSharedPreferences( + getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + final String domain = preferences.getString("domain", null); + final String accessToken = preferences.getString("accessToken", null); + + OkHttpClient okHttpClient = OkHttpUtils.getCompatibleClientBuilder() + .addInterceptor(new Interceptor() { + @Override + public okhttp3.Response intercept(Chain chain) throws IOException { + Request originalRequest = chain.request(); + + Request.Builder builder = originalRequest.newBuilder() + .header("Authorization", String.format("Bearer %s", accessToken)); + + Request newRequest = builder.build(); + + return chain.proceed(newRequest); + } + }) + .build(); + + Gson gson = new GsonBuilder() + .registerTypeAdapter(Spanned.class, new SpannedTypeAdapter()) + .registerTypeAdapter(StringWithEmoji.class, new StringWithEmojiTypeAdapter()) + .create(); + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://" + domain) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build(); + + mastodonAPI = retrofit.create(MastodonAPI.class); + } +} diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml new file mode 100644 index 000000000..20ecbe94c --- /dev/null +++ b/app/src/google/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/google/java/com/keylesspalace/tusky/MessagingService.java b/app/src/google/java/com/keylesspalace/tusky/MessagingService.java new file mode 100644 index 000000000..cf4e52733 --- /dev/null +++ b/app/src/google/java/com/keylesspalace/tusky/MessagingService.java @@ -0,0 +1,121 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . + * + * If you modify this Program, or any covered work, by linking or combining it with Firebase Cloud + * Messaging and Firebase Crash Reporting (or a modified version of those libraries), containing + * parts covered by the Google APIs Terms of Service, the licensors of this Program grant you + * additional permission to convey the resulting work. */ + +package com.keylesspalace.tusky; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.text.Spanned; + +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import com.keylesspalace.tusky.entity.Notification; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class MessagingService extends FirebaseMessagingService { + private MastodonAPI mastodonAPI; + private static final String TAG = "MessagingService"; + public static final int NOTIFY_ID = 666; + + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + Log.d(TAG, remoteMessage.getFrom()); + Log.d(TAG, remoteMessage.toString()); + + String notificationId = remoteMessage.getData().get("notification_id"); + + if (notificationId == null) { + Log.e(TAG, "No notification ID in payload!!"); + return; + } + + Log.d(TAG, notificationId); + + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( + getApplicationContext()); + boolean enabled = preferences.getBoolean("notificationsEnabled", true); + if (!enabled) { + return; + } + + createMastodonAPI(); + + mastodonAPI.notification(notificationId).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + NotificationMaker.make(MessagingService.this, NOTIFY_ID, response.body()); + } + } + + @Override + public void onFailure(Call call, Throwable t) {} + }); + } + + private void createMastodonAPI() { + SharedPreferences preferences = getSharedPreferences(getString(R.string.preferences_file_key), Context.MODE_PRIVATE); + final String domain = preferences.getString("domain", null); + final String accessToken = preferences.getString("accessToken", null); + + OkHttpClient okHttpClient = OkHttpUtils.getCompatibleClientBuilder() + .addInterceptor(new Interceptor() { + @Override + public okhttp3.Response intercept(Chain chain) throws IOException { + Request originalRequest = chain.request(); + + Request.Builder builder = originalRequest.newBuilder() + .header("Authorization", String.format("Bearer %s", accessToken)); + + Request newRequest = builder.build(); + + return chain.proceed(newRequest); + } + }) + .build(); + + Gson gson = new GsonBuilder() + .registerTypeAdapter(Spanned.class, new SpannedTypeAdapter()) + .registerTypeAdapter(StringWithEmoji.class, new StringWithEmojiTypeAdapter()) + .create(); + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://" + domain) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build(); + + mastodonAPI = retrofit.create(MastodonAPI.class); + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java b/app/src/google/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java similarity index 97% rename from app/src/main/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java rename to app/src/google/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java index 9e139187f..adb478795 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java +++ b/app/src/google/java/com/keylesspalace/tusky/MyFirebaseInstanceIdService.java @@ -33,7 +33,7 @@ import retrofit2.Response; import retrofit2.Retrofit; public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService { - private static final String TAG = "MyFirebaseInstanceIdService"; + private static final String TAG = "com.keylesspalace.tusky.MyFirebaseInstanceIdService"; private TuskyAPI tuskyAPI; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ee77b8949..fcf90d73a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:name=".TuskyApplication"> - + @@ -72,18 +72,6 @@ android:name="com.theartofdev.edmodo.cropper.CropImageActivity" android:theme="@style/Base.Theme.AppCompat" /> - - - - - - - - - - - - () { - @Override - public void onResponse(Call call, retrofit2.Response response) { - Log.d(TAG, "Enable push notifications response: " + response.message()); - } + if (BuildConfig.USES_PUSH_NOTIFICATIONS) { + tuskyAPI.register(getBaseUrl(), getAccessToken(), FirebaseInstanceId.getInstance().getToken()).enqueue(new Callback() { + @Override + public void onResponse(Call call, retrofit2.Response response) { + Log.d(TAG, "Enable push notifications response: " + response.message()); + } - @Override - public void onFailure(Call call, Throwable t) { - Log.d(TAG, "Enable push notifications failed: " + t.getMessage()); - } - }); + @Override + public void onFailure(Call call, Throwable t) { + Log.d(TAG, "Enable push notifications failed: " + t.getMessage()); + } + }); + } else { + // Start up the MessagingService on a repeating interval for "pull" notifications. + long checkInterval = 60 * 1000; // * 10; + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(this, MessagingService.class); + final int SERVICE_REQUEST_CODE = 8574603; // This number is arbitrary. + serviceAlarmIntent = PendingIntent.getService(this, SERVICE_REQUEST_CODE, intent, + PendingIntent.FLAG_UPDATE_CURRENT); + alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime(), checkInterval, serviceAlarmIntent); + } } protected void disablePushNotifications() { - tuskyAPI.unregister(getBaseUrl(), getAccessToken()).enqueue(new Callback() { - @Override - public void onResponse(Call call, retrofit2.Response response) { - Log.d(TAG, "Disable push notifications response: " + response.message()); - } + if (BuildConfig.USES_PUSH_NOTIFICATIONS) { + tuskyAPI.unregister(getBaseUrl(), getAccessToken()).enqueue(new Callback() { + @Override + public void onResponse(Call call, retrofit2.Response response) { + Log.d(TAG, "Disable push notifications response: " + response.message()); + } - @Override - public void onFailure(Call call, Throwable t) { - Log.d(TAG, "Disable push notifications failed: " + t.getMessage()); - } - }); + @Override + public void onFailure(Call call, Throwable t) { + Log.d(TAG, "Disable push notifications failed: " + t.getMessage()); + } + }); + } else if (serviceAlarmIntent != null) { + // Cancel the repeating call for "pull" notifications. + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + alarmManager.cancel(serviceAlarmIntent); + } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java index 8b00c9397..d052db34b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java @@ -15,7 +15,6 @@ package com.keylesspalace.tusky; -import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; diff --git a/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java b/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java index 84f06334a..f0313f946 100644 --- a/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; import android.Manifest; diff --git a/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java b/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java index e2b2fedcf..ba9a591fe 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java +++ b/app/src/main/java/com/keylesspalace/tusky/LinkHelper.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; import android.preference.PreferenceManager; diff --git a/app/src/main/java/com/keylesspalace/tusky/LinkListener.java b/app/src/main/java/com/keylesspalace/tusky/LinkListener.java index de0242bc1..9e188ae42 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LinkListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/LinkListener.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; interface LinkListener { diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index f42dd72ca..d25729a29 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -187,7 +187,11 @@ public class MainActivity extends BaseActivity implements SFragment.OnUserRemove } // Setup push notifications - if (arePushNotificationsEnabled()) enablePushNotifications(); + if (arePushNotificationsEnabled()) { + enablePushNotifications(); + } else { + disablePushNotifications(); + } composeButton = floatingBtn; } @@ -203,7 +207,7 @@ public class MainActivity extends BaseActivity implements SFragment.OnUserRemove .apply(); ((NotificationManager) (getSystemService(NOTIFICATION_SERVICE))) - .cancel(MyFirebaseMessagingService.NOTIFY_ID); + .cancel(MessagingService.NOTIFY_ID); /* After editing a profile, the profile header in the navigation drawer needs to be * refreshed */ diff --git a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java b/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java deleted file mode 100644 index 6ff4d212b..000000000 --- a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright 2017 Andrew Dawson - * - * This file is a part of Tusky. - * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 3 of the - * License, or (at your option) any later version. - * - * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even - * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. - * - * You should have received a copy of the GNU General Public License along with Tusky; if not, - * see . - * - * If you modify this Program, or any covered work, by linking or combining it with Firebase Cloud - * Messaging and Firebase Crash Reporting (or a modified version of those libraries), containing - * parts covered by the Google APIs Terms of Service, the licensors of this Program grant you - * additional permission to convey the resulting work. */ - -package com.keylesspalace.tusky; - -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.preference.PreferenceManager; -import android.provider.Settings; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.TaskStackBuilder; -import android.text.Spanned; - -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.RemoteMessage; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.keylesspalace.tusky.entity.Notification; -import com.squareup.picasso.Picasso; -import com.squareup.picasso.Target; - -import org.json.JSONArray; -import org.json.JSONException; - -import java.io.IOException; - -import okhttp3.Interceptor; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -import retrofit2.converter.gson.GsonConverterFactory; - -public class MyFirebaseMessagingService extends FirebaseMessagingService { - private MastodonAPI mastodonAPI; - private static final String TAG = "MyFirebaseMessagingService"; - public static final int NOTIFY_ID = 666; - - @Override - public void onMessageReceived(RemoteMessage remoteMessage) { - Log.d(TAG, remoteMessage.getFrom()); - Log.d(TAG, remoteMessage.toString()); - - String notificationId = remoteMessage.getData().get("notification_id"); - - if (notificationId == null) { - Log.e(TAG, "No notification ID in payload!!"); - return; - } - - Log.d(TAG, notificationId); - - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( - getApplicationContext()); - boolean enabled = preferences.getBoolean("notificationsEnabled", true); - if (!enabled) { - return; - } - - createMastodonAPI(); - - mastodonAPI.notification(notificationId).enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - buildNotification(response.body()); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - } - - private void createMastodonAPI() { - SharedPreferences preferences = getSharedPreferences(getString(R.string.preferences_file_key), Context.MODE_PRIVATE); - final String domain = preferences.getString("domain", null); - final String accessToken = preferences.getString("accessToken", null); - - OkHttpClient okHttpClient = OkHttpUtils.getCompatibleClientBuilder() - .addInterceptor(new Interceptor() { - @Override - public okhttp3.Response intercept(Chain chain) throws IOException { - Request originalRequest = chain.request(); - - Request.Builder builder = originalRequest.newBuilder() - .header("Authorization", String.format("Bearer %s", accessToken)); - - Request newRequest = builder.build(); - - return chain.proceed(newRequest); - } - }) - .build(); - - Gson gson = new GsonBuilder() - .registerTypeAdapter(Spanned.class, new SpannedTypeAdapter()) - .registerTypeAdapter(StringWithEmoji.class, new StringWithEmojiTypeAdapter()) - .create(); - - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("https://" + domain) - .client(okHttpClient) - .addConverterFactory(GsonConverterFactory.create(gson)) - .build(); - - mastodonAPI = retrofit.create(MastodonAPI.class); - } - - private String truncateWithEllipses(String string, int limit) { - if (string.length() < limit) { - return string; - } else { - return string.substring(0, limit - 3) + "..."; - } - } - - private static boolean filterNotification(SharedPreferences preferences, - Notification notification) { - switch (notification.type) { - default: - case MENTION: { - return preferences.getBoolean("notificationFilterMentions", true); - } - case FOLLOW: { - return preferences.getBoolean("notificationFilterFollows", true); - } - case REBLOG: { - return preferences.getBoolean("notificationFilterReblogs", true); - } - case FAVOURITE: { - return preferences.getBoolean("notificationFilterFavourites", true); - } - } - } - - private void buildNotification(Notification body) { - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - final SharedPreferences notificationPreferences = getApplicationContext().getSharedPreferences("Notifications", MODE_PRIVATE); - - if (!filterNotification(preferences, body)) { - return; - } - - String rawCurrentNotifications = notificationPreferences.getString("current", "[]"); - JSONArray currentNotifications; - - try { - currentNotifications = new JSONArray(rawCurrentNotifications); - } catch (JSONException e) { - currentNotifications = new JSONArray(); - } - - boolean alreadyContains = false; - - for(int i = 0; i < currentNotifications.length(); i++) { - try { - if (currentNotifications.getString(i).equals(body.account.displayName)) { - alreadyContains = true; - } - } catch (JSONException e) { - e.printStackTrace(); - } - } - - if (!alreadyContains) { - currentNotifications.put(body.account.displayName); - } - - SharedPreferences.Editor editor = notificationPreferences.edit(); - editor.putString("current", currentNotifications.toString()); - editor.commit(); - - Intent resultIntent = new Intent(this, MainActivity.class); - resultIntent.putExtra("tab_position", 1); - TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); - stackBuilder.addParentStack(MainActivity.class); - stackBuilder.addNextIntent(resultIntent); - PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); - - Intent deleteIntent = new Intent(this, NotificationClearBroadcastReceiver.class); - PendingIntent deletePendingIntent = PendingIntent.getBroadcast(this, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT); - - final NotificationCompat.Builder builder = new NotificationCompat.Builder(this) - .setSmallIcon(R.drawable.ic_notify) - .setContentIntent(resultPendingIntent) - .setDeleteIntent(deletePendingIntent) - .setDefaults(0); // So it doesn't ring twice, notify only in Target callback - - if (currentNotifications.length() == 1) { - builder.setContentTitle(titleForType(body)) - .setContentText(truncateWithEllipses(bodyForType(body), 40)); - - Target mTarget = new Target() { - @Override - public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { - builder.setLargeIcon(bitmap); - - setupPreferences(preferences, builder); - - ((NotificationManager) (getSystemService(NOTIFICATION_SERVICE))).notify(NOTIFY_ID, builder.build()); - } - - @Override - public void onBitmapFailed(Drawable errorDrawable) { - - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - - } - }; - - Picasso.with(this) - .load(body.account.avatar) - .placeholder(R.drawable.avatar_default) - .transform(new RoundedTransformation(7, 0)) - .into(mTarget); - } else { - setupPreferences(preferences, builder); - - try { - builder.setContentTitle(String.format(getString(R.string.notification_title_summary), currentNotifications.length())) - .setContentText(truncateWithEllipses(joinNames(currentNotifications), 40)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder.setVisibility(android.app.Notification.VISIBILITY_PRIVATE); - builder.setCategory(android.app.Notification.CATEGORY_SOCIAL); - } - - ((NotificationManager) (getSystemService(NOTIFICATION_SERVICE))).notify(NOTIFY_ID, builder.build()); - } - - private void setupPreferences(SharedPreferences preferences, NotificationCompat.Builder builder) { - if (preferences.getBoolean("notificationAlertSound", true)) { - builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); - } - - if (preferences.getBoolean("notificationAlertVibrate", false)) { - builder.setVibrate(new long[] { 500, 500 }); - } - - if (preferences.getBoolean("notificationAlertLight", false)) { - builder.setLights(0xFF00FF8F, 300, 1000); - } - } - - private String joinNames(JSONArray array) throws JSONException { - if (array.length() > 3) { - return String.format(getString(R.string.notification_summary_large), array.get(0), array.get(1), array.get(2), array.length() - 3); - } else if (array.length() == 3) { - return String.format(getString(R.string.notification_summary_medium), array.get(0), array.get(1), array.get(2)); - } else if (array.length() == 2) { - return String.format(getString(R.string.notification_summary_small), array.get(0), array.get(1)); - } - - return null; - } - - private String titleForType(Notification notification) { - switch (notification.type) { - case MENTION: - return String.format(getString(R.string.notification_mention_format), notification.account.getDisplayName()); - case FOLLOW: - return String.format(getString(R.string.notification_follow_format), notification.account.getDisplayName()); - case FAVOURITE: - return String.format(getString(R.string.notification_favourite_format), notification.account.getDisplayName()); - case REBLOG: - return String.format(getString(R.string.notification_reblog_format), notification.account.getDisplayName()); - } - - return null; - } - - private String bodyForType(Notification notification) { - switch (notification.type) { - case FOLLOW: - return notification.account.username; - case MENTION: - case FAVOURITE: - case REBLOG: - return notification.status.content.toString(); - } - - return null; - } -} diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationMaker.java b/app/src/main/java/com/keylesspalace/tusky/NotificationMaker.java new file mode 100644 index 000000000..8c7bfb85d --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationMaker.java @@ -0,0 +1,224 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + +package com.keylesspalace.tusky; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.preference.PreferenceManager; +import android.provider.Settings; +import android.support.annotation.Nullable; +import android.support.v4.app.NotificationCompat; +import android.support.v4.app.TaskStackBuilder; + +import com.keylesspalace.tusky.entity.Notification; +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; + +import org.json.JSONArray; +import org.json.JSONException; + +class NotificationMaker { + static void make(final Context context, final int notifyId, Notification body) { + final SharedPreferences preferences = + PreferenceManager.getDefaultSharedPreferences(context); + final SharedPreferences notificationPreferences = context.getSharedPreferences( + "Notifications", Context.MODE_PRIVATE); + + if (!filterNotification(preferences, body)) { + return; + } + + String rawCurrentNotifications = notificationPreferences.getString("current", "[]"); + JSONArray currentNotifications; + + try { + currentNotifications = new JSONArray(rawCurrentNotifications); + } catch (JSONException e) { + currentNotifications = new JSONArray(); + } + + boolean alreadyContains = false; + + for(int i = 0; i < currentNotifications.length(); i++) { + try { + if (currentNotifications.getString(i).equals(body.account.getDisplayName())) { + alreadyContains = true; + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + if (!alreadyContains) { + currentNotifications.put(body.account.getDisplayName()); + } + + notificationPreferences.edit() + .putString("current", currentNotifications.toString()) + .commit(); + + Intent resultIntent = new Intent(context, MainActivity.class); + resultIntent.putExtra("tab_position", 1); + TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); + stackBuilder.addParentStack(MainActivity.class); + stackBuilder.addNextIntent(resultIntent); + PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); + + Intent deleteIntent = new Intent(context, NotificationClearBroadcastReceiver.class); + PendingIntent deletePendingIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT); + + final NotificationCompat.Builder builder = new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_notify) + .setContentIntent(resultPendingIntent) + .setDeleteIntent(deletePendingIntent) + .setDefaults(0); // So it doesn't ring twice, notify only in Target callback + + if (currentNotifications.length() == 1) { + builder.setContentTitle(titleForType(context, body)) + .setContentText(truncateWithEllipses(bodyForType(body), 40)); + + Target mTarget = new Target() { + @Override + public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { + builder.setLargeIcon(bitmap); + + setupPreferences(preferences, builder); + + ((NotificationManager) (context.getSystemService(Context.NOTIFICATION_SERVICE))) + .notify(notifyId, builder.build()); + } + + @Override + public void onBitmapFailed(Drawable errorDrawable) {} + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) {} + }; + + Picasso.with(context) + .load(body.account.avatar) + .placeholder(R.drawable.avatar_default) + .transform(new RoundedTransformation(7, 0)) + .into(mTarget); + } else { + setupPreferences(preferences, builder); + try { + builder.setContentTitle(String.format(context.getString(R.string.notification_title_summary), currentNotifications.length())) + .setContentText(truncateWithEllipses(joinNames(context, currentNotifications), 40)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + builder.setVisibility(android.app.Notification.VISIBILITY_PRIVATE); + builder.setCategory(android.app.Notification.CATEGORY_SOCIAL); + } + + ((NotificationManager) (context.getSystemService(Context.NOTIFICATION_SERVICE))) + .notify(notifyId, builder.build()); + } + + private static boolean filterNotification(SharedPreferences preferences, + Notification notification) { + switch (notification.type) { + default: + case MENTION: { + return preferences.getBoolean("notificationFilterMentions", true); + } + case FOLLOW: { + return preferences.getBoolean("notificationFilterFollows", true); + } + case REBLOG: { + return preferences.getBoolean("notificationFilterReblogs", true); + } + case FAVOURITE: { + return preferences.getBoolean("notificationFilterFavourites", true); + } + } + } + + private static String truncateWithEllipses(String string, int limit) { + if (string.length() < limit) { + return string; + } else { + return string.substring(0, limit - 3) + "..."; + } + } + + private static void setupPreferences(SharedPreferences preferences, + NotificationCompat.Builder builder) { + if (preferences.getBoolean("notificationAlertSound", true)) { + builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); + } + + if (preferences.getBoolean("notificationAlertVibrate", false)) { + builder.setVibrate(new long[] { 500, 500 }); + } + + if (preferences.getBoolean("notificationAlertLight", false)) { + builder.setLights(0xFF00FF8F, 300, 1000); + } + } + + @Nullable + private static String joinNames(Context context, JSONArray array) throws JSONException { + if (array.length() > 3) { + return String.format(context.getString(R.string.notification_summary_large), array.get(0), array.get(1), array.get(2), array.length() - 3); + } else if (array.length() == 3) { + return String.format(context.getString(R.string.notification_summary_medium), array.get(0), array.get(1), array.get(2)); + } else if (array.length() == 2) { + return String.format(context.getString(R.string.notification_summary_small), array.get(0), array.get(1)); + } + + return null; + } + + @Nullable + private static String titleForType(Context context, Notification notification) { + switch (notification.type) { + case MENTION: + return String.format(context.getString(R.string.notification_mention_format), notification.account.getDisplayName()); + case FOLLOW: + return String.format(context.getString(R.string.notification_follow_format), notification.account.getDisplayName()); + case FAVOURITE: + return String.format(context.getString(R.string.notification_favourite_format), notification.account.getDisplayName()); + case REBLOG: + return String.format(context.getString(R.string.notification_reblog_format), notification.account.getDisplayName()); + } + return null; + } + + @Nullable + private static String bodyForType(Notification notification) { + switch (notification.type) { + case FOLLOW: + return notification.account.username; + case MENTION: + case FAVOURITE: + case REBLOG: + return notification.status.content.toString(); + } + + return null; + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/OkHttpUtils.java b/app/src/main/java/com/keylesspalace/tusky/OkHttpUtils.java index 09b086816..a821df4d8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/OkHttpUtils.java +++ b/app/src/main/java/com/keylesspalace/tusky/OkHttpUtils.java @@ -42,7 +42,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -class OkHttpUtils { +public class OkHttpUtils { static final String TAG = "OkHttpUtils"; // logging tag /** @@ -58,8 +58,7 @@ class OkHttpUtils { * TLS 1.1 and 1.2 have to be manually enabled on API levels 16-20. */ @NonNull - static OkHttpClient.Builder getCompatibleClientBuilder() { - + public static OkHttpClient.Builder getCompatibleClientBuilder() { ConnectionSpec fallback = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) .allEnabledCipherSuites() .supportsTlsExtensions(true) @@ -79,7 +78,7 @@ class OkHttpUtils { } @NonNull - static OkHttpClient getCompatibleClient() { + public static OkHttpClient getCompatibleClient() { return getCompatibleClientBuilder().build(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/SpannedTypeAdapter.java b/app/src/main/java/com/keylesspalace/tusky/SpannedTypeAdapter.java index 817d6d3f3..3b47acc3b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SpannedTypeAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/SpannedTypeAdapter.java @@ -25,7 +25,7 @@ import com.google.gson.JsonParseException; import java.lang.reflect.Type; -class SpannedTypeAdapter implements JsonDeserializer { +public class SpannedTypeAdapter implements JsonDeserializer { @Override public Spanned deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return HtmlUtils.fromHtml(Emojione.shortnameToUnicode(json.getAsString(), false)); diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java b/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java index b662f237d..23111c6ab 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusRemoveListener.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; interface StatusRemoveListener { diff --git a/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java b/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java index 76d07e9c9..cad8e8c08 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java +++ b/app/src/main/java/com/keylesspalace/tusky/StringWithEmoji.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; /** diff --git a/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java b/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java index e4923921a..ecf18bcd9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/StringWithEmojiTypeAdapter.java @@ -1,3 +1,18 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + package com.keylesspalace.tusky; import com.emojione.Emojione; From 2f27f8efdd0eed88494ebd6cde815486860867df Mon Sep 17 00:00:00 2001 From: Vavassor Date: Thu, 27 Apr 2017 23:33:43 -0400 Subject: [PATCH 82/84] Raises the check interval to a more reasonable level. --- app/src/main/java/com/keylesspalace/tusky/BaseActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java index 476e6c34f..da7ecd656 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java @@ -211,7 +211,7 @@ public class BaseActivity extends AppCompatActivity { }); } else { // Start up the MessagingService on a repeating interval for "pull" notifications. - long checkInterval = 60 * 1000; // * 10; + long checkInterval = 60 * 1000 * 5; AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, MessagingService.class); final int SERVICE_REQUEST_CODE = 8574603; // This number is arbitrary. From 41088de6be67b064cf27921c940f9fddde73421d Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 28 Apr 2017 16:41:44 -0400 Subject: [PATCH 83/84] Organizes libraries and removes a flavor-specific import (possibly unnecessary?). --- app/build.gradle | 8 +++----- .../main/java/com/keylesspalace/tusky/BaseActivity.java | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 347ec31cf..a7b9f5aeb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,17 +46,17 @@ dependencies { compile 'com.android.support:support-v13:25.3.1' compile 'com.android.support:design:25.3.1' compile 'com.android.support:exifinterface:25.3.1' + compile 'com.squareup.retrofit2:retrofit:2.2.0' + compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.squareup.okhttp3:okhttp:3.7.0' compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' compile 'com.pkmmte.view:circularimageview:1.1' compile 'com.github.peter9870:sparkbutton:master' compile 'com.mikhaellopez:circularfillableloaders:1.2.0' - compile 'com.squareup.retrofit2:retrofit:2.2.0' - compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.github.chrisbanes:PhotoView:1.3.1' compile 'com.mikepenz:google-material-typeface:3.0.1.0.original@aar' - compile 'com.github.arimorty:floatingsearchview:2.0.3' + compile 'com.github.arimorty:floatingsearchview:2.0.4' compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0' compile 'com.jakewharton:butterknife:8.4.0' googleCompile 'com.google.firebase:firebase-messaging:10.0.1' @@ -65,6 +65,4 @@ dependencies { annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } - - apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java index da7ecd656..5bbe7ba13 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java @@ -32,7 +32,6 @@ import android.text.Spanned; import android.util.TypedValue; import android.view.Menu; -import com.google.firebase.iid.FirebaseInstanceId; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -198,7 +197,8 @@ public class BaseActivity extends AppCompatActivity { protected void enablePushNotifications() { if (BuildConfig.USES_PUSH_NOTIFICATIONS) { - tuskyAPI.register(getBaseUrl(), getAccessToken(), FirebaseInstanceId.getInstance().getToken()).enqueue(new Callback() { + String token = com.google.firebase.iid.FirebaseInstanceId.getInstance().getToken(); + tuskyAPI.register(getBaseUrl(), getAccessToken(), token).enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) { Log.d(TAG, "Enable push notifications response: " + response.message()); From 7d83a9aabaebc11e74117e8a35bcdc7defc850df Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 28 Apr 2017 23:52:14 -0400 Subject: [PATCH 84/84] Follow requests list is available. Closes #222 --- .../keylesspalace/tusky/MessagingService.java | 26 +++- app/src/main/AndroidManifest.xml | 2 +- .../tusky/AccountActionListener.java | 1 + ...Activity.java => AccountListActivity.java} | 25 ++-- ...Fragment.java => AccountListFragment.java} | 81 +++++++++-- .../tusky/AccountPagerAdapter.java | 4 +- .../tusky/FollowRequestsAdapter.java | 129 ++++++++++++++++++ .../com/keylesspalace/tusky/MainActivity.java | 88 +++++++----- app/src/main/res/drawable/ic_check_24dp.xml | 14 +- .../res/drawable/ic_check_in_box_24dp.xml | 7 + app/src/main/res/drawable/ic_reject_24dp.xml | 9 ++ ...y_blocks.xml => activity_account_list.xml} | 2 +- ..._account.xml => fragment_account_list.xml} | 0 app/src/main/res/layout/item_blocked_user.xml | 3 +- .../main/res/layout/item_follow_request.xml | 80 +++++++++++ app/src/main/res/layout/item_muted_user.xml | 3 +- .../main/res/menu/edit_profile_toolbar.xml | 2 +- app/src/main/res/values/strings.xml | 4 + 18 files changed, 403 insertions(+), 77 deletions(-) rename app/src/main/java/com/keylesspalace/tusky/{BlocksActivity.java => AccountListActivity.java} (76%) rename app/src/main/java/com/keylesspalace/tusky/{AccountFragment.java => AccountListFragment.java} (82%) create mode 100644 app/src/main/java/com/keylesspalace/tusky/FollowRequestsAdapter.java create mode 100644 app/src/main/res/drawable/ic_check_in_box_24dp.xml create mode 100644 app/src/main/res/drawable/ic_reject_24dp.xml rename app/src/main/res/layout/{activity_blocks.xml => activity_account_list.xml} (90%) rename app/src/main/res/layout/{fragment_account.xml => fragment_account_list.xml} (100%) create mode 100644 app/src/main/res/layout/item_follow_request.xml diff --git a/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java b/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java index f7c24c425..01d98122d 100644 --- a/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java +++ b/app/src/fdroid/java/com/keylesspalace/tusky/MessagingService.java @@ -21,14 +21,18 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.Spanned; +import android.util.ArraySet; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.keylesspalace.tusky.entity.Notification; + +import java.util.HashSet; import java.util.List; import java.io.IOException; +import java.util.Set; import okhttp3.Interceptor; import okhttp3.OkHttpClient; @@ -64,10 +68,7 @@ public class MessagingService extends IntentService { public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) { - List notificationList = response.body(); - for (Notification notification : notificationList) { - NotificationMaker.make(MessagingService.this, NOTIFY_ID, notification); - } + onNotificationsReceived(response.body()); } } @@ -111,4 +112,21 @@ public class MessagingService extends IntentService { mastodonAPI = retrofit.create(MastodonAPI.class); } + + private void onNotificationsReceived(List notificationList) { + SharedPreferences notificationsPreferences = getSharedPreferences( + "Notifications", Context.MODE_PRIVATE); + Set currentIds = notificationsPreferences.getStringSet( + "current_ids", new HashSet()); + for (Notification notification : notificationList) { + String id = notification.id; + if (!currentIds.contains(id)) { + currentIds.add(id); + NotificationMaker.make(this, NOTIFY_ID, notification); + } + } + notificationsPreferences.edit() + .putStringSet("current_ids", currentIds) + .apply(); + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fcf90d73a..84c1b093d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -64,7 +64,7 @@ - + diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java b/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java index 5c3e49508..bca609cdf 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActionListener.java @@ -19,4 +19,5 @@ interface AccountActionListener { void onViewAccount(String id); void onMute(final boolean mute, final String id, final int position); void onBlock(final boolean block, final String id, final int position); + void onRespondToFollowRequest(final boolean accept, final String id, final int position); } diff --git a/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java b/app/src/main/java/com/keylesspalace/tusky/AccountListActivity.java similarity index 76% rename from app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java rename to app/src/main/java/com/keylesspalace/tusky/AccountListActivity.java index 57a92f465..1d1276fbc 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BlocksActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountListActivity.java @@ -24,16 +24,17 @@ import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.MenuItem; -public class BlocksActivity extends BaseActivity { +public class AccountListActivity extends BaseActivity { enum Type { BLOCKS, - MUTES + MUTES, + FOLLOW_REQUESTS, } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_blocks); + setContentView(R.layout.activity_account_list); Type type; Intent intent = getIntent(); @@ -48,21 +49,29 @@ public class BlocksActivity extends BaseActivity { ActionBar bar = getSupportActionBar(); if (bar != null) { switch (type) { - case MUTES: { bar.setTitle(getString(R.string.title_mutes)); break; } case BLOCKS: { bar.setTitle(getString(R.string.title_blocks)); break; } + case MUTES: { bar.setTitle(getString(R.string.title_mutes)); break; } + case FOLLOW_REQUESTS: { + bar.setTitle(getString(R.string.title_follow_requests)); + break; + } } bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayShowHomeEnabled(true); } FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - AccountFragment.Type fragmentType; + AccountListFragment.Type fragmentType; switch (type) { - case MUTES: { fragmentType = AccountFragment.Type.MUTES; break; } default: - case BLOCKS: { fragmentType = AccountFragment.Type.BLOCKS; break; } + case BLOCKS: { fragmentType = AccountListFragment.Type.BLOCKS; break; } + case MUTES: { fragmentType = AccountListFragment.Type.MUTES; break; } + case FOLLOW_REQUESTS: { + fragmentType = AccountListFragment.Type.FOLLOW_REQUESTS; + break; + } } - Fragment fragment = AccountFragment.newInstance(fragmentType); + Fragment fragment = AccountListFragment.newInstance(fragmentType); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java b/app/src/main/java/com/keylesspalace/tusky/AccountListFragment.java similarity index 82% rename from app/src/main/java/com/keylesspalace/tusky/AccountFragment.java rename to app/src/main/java/com/keylesspalace/tusky/AccountListFragment.java index c4c354ad0..1128602f8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountListFragment.java @@ -38,16 +38,15 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -public class AccountFragment extends BaseFragment implements AccountActionListener { - private static final String TAG = "Account"; // logging tag - - private Call> listCall; +public class AccountListFragment extends BaseFragment implements AccountActionListener { + private static final String TAG = "AccountList"; // logging tag public enum Type { FOLLOWS, FOLLOWERS, BLOCKS, MUTES, + FOLLOW_REQUESTS, } private Type type; @@ -59,17 +58,17 @@ public class AccountFragment extends BaseFragment implements AccountActionListen private TabLayout.OnTabSelectedListener onTabSelectedListener; private MastodonAPI api; - public static AccountFragment newInstance(Type type) { + public static AccountListFragment newInstance(Type type) { Bundle arguments = new Bundle(); - AccountFragment fragment = new AccountFragment(); + AccountListFragment fragment = new AccountListFragment(); arguments.putSerializable("type", type); fragment.setArguments(arguments); return fragment; } - public static AccountFragment newInstance(Type type, String accountId) { + public static AccountListFragment newInstance(Type type, String accountId) { Bundle arguments = new Bundle(); - AccountFragment fragment = new AccountFragment(); + AccountListFragment fragment = new AccountListFragment(); arguments.putSerializable("type", type); arguments.putString("accountId", accountId); fragment.setArguments(arguments); @@ -90,7 +89,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_account, container, false); + View rootView = inflater.inflate(R.layout.fragment_account_list, container, false); Context context = getContext(); recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); @@ -108,6 +107,8 @@ public class AccountFragment extends BaseFragment implements AccountActionListen adapter = new BlocksAdapter(this); } else if (type == Type.MUTES) { adapter = new MutesAdapter(this); + } else if (type == Type.FOLLOW_REQUESTS) { + adapter = new FollowRequestsAdapter(this); } else { adapter = new FollowAdapter(this); } @@ -157,12 +158,6 @@ public class AccountFragment extends BaseFragment implements AccountActionListen recyclerView.addOnScrollListener(scrollListener); } - @Override - public void onDestroy() { - super.onDestroy(); - if (listCall != null) listCall.cancel(); - } - @Override public void onDestroyView() { if (jumpToTopAllowed()) { @@ -189,6 +184,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen } }; + Call> listCall; switch (type) { default: case FOLLOWS: { @@ -207,6 +203,10 @@ public class AccountFragment extends BaseFragment implements AccountActionListen listCall = api.mutes(fromId, uptoId, null); break; } + case FOLLOW_REQUESTS: { + listCall = api.followRequests(fromId, uptoId, null); + break; + } } callList.add(listCall); listCall.enqueue(cb); @@ -239,12 +239,14 @@ public class AccountFragment extends BaseFragment implements AccountActionListen Log.e(TAG, "Fetch failure: " + exception.getMessage()); } + @Override public void onViewAccount(String id) { Intent intent = new Intent(getContext(), AccountActivity.class); intent.putExtra("id", id); startActivity(intent); } + @Override public void onMute(final boolean mute, final String id, final int position) { if (api == null) { /* If somehow an unmute button is clicked after onCreateView but before @@ -308,6 +310,7 @@ public class AccountFragment extends BaseFragment implements AccountActionListen Log.e(TAG, String.format("Failed to %s account id %s", verb, id)); } + @Override public void onBlock(final boolean block, final String id, final int position) { if (api == null) { /* If somehow an unblock button is clicked after onCreateView but before @@ -371,6 +374,54 @@ public class AccountFragment extends BaseFragment implements AccountActionListen Log.e(TAG, String.format("Failed to %s account id %s", verb, id)); } + @Override + public void onRespondToFollowRequest(final boolean accept, final String accountId, + final int position) { + if (api == null) { + /* If somehow an response button is clicked after onCreateView but before + * onActivityCreated, then this would get called with a null api object, so this eats + * that input. */ + Log.d(TAG, "MastodonAPI isn't initialised, so follow requests can't be responded to."); + return; + } + + Callback callback = new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + onRespondToFollowRequestSuccess(position); + } else { + onRespondToFollowRequestFailure(accept, accountId); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + onRespondToFollowRequestFailure(accept, accountId); + } + }; + + Call call; + if (accept) { + call = api.authorizeFollowRequest(accountId); + } else { + call = api.rejectFollowRequest(accountId); + } + callList.add(call); + call.enqueue(callback); + } + + private void onRespondToFollowRequestSuccess(int position) { + FollowRequestsAdapter followRequestsAdapter = (FollowRequestsAdapter) adapter; + followRequestsAdapter.removeItem(position); + } + + private void onRespondToFollowRequestFailure(boolean accept, String accountId) { + String verb = (accept) ? "accept" : "reject"; + String message = String.format("Failed to %s account id %s.", verb, accountId); + Log.e(TAG, message); + } + private boolean jumpToTopAllowed() { return type == Type.FOLLOWS || type == Type.FOLLOWERS; } diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java b/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java index dd56dfad6..505d89bd2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountPagerAdapter.java @@ -51,10 +51,10 @@ class AccountPagerAdapter extends FragmentPagerAdapter { return TimelineFragment.newInstance(TimelineFragment.Kind.USER, accountId); } case 1: { - return AccountFragment.newInstance(AccountFragment.Type.FOLLOWS, accountId); + return AccountListFragment.newInstance(AccountListFragment.Type.FOLLOWS, accountId); } case 2: { - return AccountFragment.newInstance(AccountFragment.Type.FOLLOWERS, accountId); + return AccountListFragment.newInstance(AccountListFragment.Type.FOLLOWERS, accountId); } default: { return null; diff --git a/app/src/main/java/com/keylesspalace/tusky/FollowRequestsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/FollowRequestsAdapter.java new file mode 100644 index 000000000..0a54b558b --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/FollowRequestsAdapter.java @@ -0,0 +1,129 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is a part of Tusky. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tusky; if not, + * see . */ + +package com.keylesspalace.tusky; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.keylesspalace.tusky.entity.Account; +import com.pkmmte.view.CircularImageView; +import com.squareup.picasso.Picasso; + +import butterknife.BindView; +import butterknife.ButterKnife; + +class FollowRequestsAdapter extends AccountAdapter { + private static final int VIEW_TYPE_FOLLOW_REQUEST = 0; + private static final int VIEW_TYPE_FOOTER = 1; + + FollowRequestsAdapter(AccountActionListener accountActionListener) { + super(accountActionListener); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + switch (viewType) { + default: + case VIEW_TYPE_FOLLOW_REQUEST: { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_follow_request, parent, false); + return new FollowRequestViewHolder(view); + } + case VIEW_TYPE_FOOTER: { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_footer, parent, false); + return new FooterViewHolder(view); + } + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { + if (position < accountList.size()) { + FollowRequestViewHolder holder = (FollowRequestViewHolder) viewHolder; + holder.setupWithAccount(accountList.get(position)); + holder.setupActionListener(accountActionListener); + } + } + + @Override + public int getItemViewType(int position) { + if (position == accountList.size()) { + return VIEW_TYPE_FOOTER; + } else { + return VIEW_TYPE_FOLLOW_REQUEST; + } + } + + static class FollowRequestViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.follow_request_avatar) CircularImageView avatar; + @BindView(R.id.follow_request_username) TextView username; + @BindView(R.id.follow_request_display_name) TextView displayName; + @BindView(R.id.follow_request_accept) ImageButton accept; + @BindView(R.id.follow_request_reject) ImageButton reject; + + private String id; + + FollowRequestViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + void setupWithAccount(Account account) { + id = account.id; + displayName.setText(account.getDisplayName()); + String format = username.getContext().getString(R.string.status_username_format); + String formattedUsername = String.format(format, account.username); + username.setText(formattedUsername); + Picasso.with(avatar.getContext()) + .load(account.avatar) + .error(R.drawable.avatar_error) + .placeholder(R.drawable.avatar_default) + .into(avatar); + } + + void setupActionListener(final AccountActionListener listener) { + accept.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + listener.onRespondToFollowRequest(true, id, position); + } + } + }); + reject.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + listener.onRespondToFollowRequest(false, id, position); + } + } + }); + avatar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.onViewAccount(id); + } + }); + } + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index d25729a29..46963e246 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -304,18 +304,22 @@ public class MainActivity extends BaseActivity implements SFragment.OnUserRemove Intent intent = new Intent(MainActivity.this, FavouritesActivity.class); startActivity(intent); } else if (drawerItemIdentifier == 2) { - Intent intent = new Intent(MainActivity.this, BlocksActivity.class); - intent.putExtra("type", BlocksActivity.Type.MUTES); + Intent intent = new Intent(MainActivity.this, AccountListActivity.class); + intent.putExtra("type", AccountListActivity.Type.MUTES); startActivity(intent); } else if (drawerItemIdentifier == 3) { - Intent intent = new Intent(MainActivity.this, BlocksActivity.class); - intent.putExtra("type", BlocksActivity.Type.BLOCKS); + Intent intent = new Intent(MainActivity.this, AccountListActivity.class); + intent.putExtra("type", AccountListActivity.Type.BLOCKS); startActivity(intent); } else if (drawerItemIdentifier == 4) { Intent intent = new Intent(MainActivity.this, PreferencesActivity.class); startActivity(intent); } else if (drawerItemIdentifier == 5) { logout(); + } else if (drawerItemIdentifier == 6) { + Intent intent = new Intent(MainActivity.this, AccountListActivity.class); + intent.putExtra("type", AccountListActivity.Type.FOLLOW_REQUESTS); + startActivity(intent); } } @@ -443,36 +447,7 @@ public class MainActivity extends BaseActivity implements SFragment.OnUserRemove onFetchUserInfoFailure(new Exception(response.message())); return; } - - headerResult.clear(); - - Account me = response.body(); - ImageView background = headerResult.getHeaderBackgroundView(); - int backgroundWidth = background.getWidth(); - int backgroundHeight = background.getHeight(); - if (backgroundWidth == 0 || backgroundHeight == 0) { - /* The header ImageView may not be layed out when the verify credentials call - * returns so measure the dimensions and use those. */ - background.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.EXACTLY); - backgroundWidth = background.getMeasuredWidth(); - backgroundHeight = background.getMeasuredHeight(); - } - - Picasso.with(MainActivity.this) - .load(me.header) - .placeholder(R.drawable.account_header_missing) - .resize(backgroundWidth, backgroundHeight) - .centerCrop() - .into(background); - - headerResult.addProfiles( - new ProfileDrawerItem() - .withName(me.getDisplayName()) - .withEmail(String.format("%s@%s", me.username, domain)) - .withIcon(me.avatar) - ); - - onFetchUserInfoSuccess(me.id, me.username); + onFetchUserInfoSuccess(response.body(), domain); } @Override @@ -482,9 +457,48 @@ public class MainActivity extends BaseActivity implements SFragment.OnUserRemove }); } - private void onFetchUserInfoSuccess(String id, String username) { - loggedInAccountId = id; - loggedInAccountUsername = username; + private void onFetchUserInfoSuccess(Account me, String domain) { + // Add the header image and avatar from the account, into the navigation drawer header. + headerResult.clear(); + + ImageView background = headerResult.getHeaderBackgroundView(); + int backgroundWidth = background.getWidth(); + int backgroundHeight = background.getHeight(); + if (backgroundWidth == 0 || backgroundHeight == 0) { + /* The header ImageView may not be layed out when the verify credentials call returns so + * measure the dimensions and use those. */ + background.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.EXACTLY); + backgroundWidth = background.getMeasuredWidth(); + backgroundHeight = background.getMeasuredHeight(); + } + + Picasso.with(MainActivity.this) + .load(me.header) + .placeholder(R.drawable.account_header_missing) + .resize(backgroundWidth, backgroundHeight) + .centerCrop() + .into(background); + + headerResult.addProfiles( + new ProfileDrawerItem() + .withName(me.getDisplayName()) + .withEmail(String.format("%s@%s", me.username, domain)) + .withIcon(me.avatar) + ); + + // Show follow requests in the menu, if this is a locked account. + if (me.locked) { + PrimaryDrawerItem followRequestsItem = new PrimaryDrawerItem() + .withIdentifier(6) + .withName(R.string.action_view_follow_requests) + .withSelectable(false) + .withIcon(GoogleMaterial.Icon.gmd_person_add); + drawer.addItemAtPosition(followRequestsItem, 3); + } + + // Update the current login information. + loggedInAccountId = me.id; + loggedInAccountUsername = me.username; getPrivatePreferences().edit() .putString("loggedInAccountId", loggedInAccountId) .putString("loggedInAccountUsername", loggedInAccountUsername) diff --git a/app/src/main/res/drawable/ic_check_24dp.xml b/app/src/main/res/drawable/ic_check_24dp.xml index f73e39df6..6541ee3e3 100644 --- a/app/src/main/res/drawable/ic_check_24dp.xml +++ b/app/src/main/res/drawable/ic_check_24dp.xml @@ -1,7 +1,9 @@ - - - + + diff --git a/app/src/main/res/drawable/ic_check_in_box_24dp.xml b/app/src/main/res/drawable/ic_check_in_box_24dp.xml new file mode 100644 index 000000000..f73e39df6 --- /dev/null +++ b/app/src/main/res/drawable/ic_check_in_box_24dp.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/drawable/ic_reject_24dp.xml b/app/src/main/res/drawable/ic_reject_24dp.xml new file mode 100644 index 000000000..d11cc5c9c --- /dev/null +++ b/app/src/main/res/drawable/ic_reject_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_blocks.xml b/app/src/main/res/layout/activity_account_list.xml similarity index 90% rename from app/src/main/res/layout/activity_blocks.xml rename to app/src/main/res/layout/activity_account_list.xml index a305a19fe..c5d72f85e 100644 --- a/app/src/main/res/layout/activity_blocks.xml +++ b/app/src/main/res/layout/activity_account_list.xml @@ -5,7 +5,7 @@ android:id="@+id/activity_view_thread" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.keylesspalace.tusky.BlocksActivity"> + tools:context="com.keylesspalace.tusky.AccountListActivity"> + android:layout_centerVertical="true" + android:contentDescription="@string/action_view_profile" /> + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_muted_user.xml b/app/src/main/res/layout/item_muted_user.xml index bf1d89d91..34cce3944 100644 --- a/app/src/main/res/layout/item_muted_user.xml +++ b/app/src/main/res/layout/item_muted_user.xml @@ -13,7 +13,8 @@ android:id="@+id/muted_user_avatar" android:layout_alignParentLeft="true" android:layout_marginRight="24dp" - android:layout_centerVertical="true"/> + android:layout_centerVertical="true" + android:contentDescription="@string/action_view_profile" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 966853bfe..95e9bae5b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,7 @@ Favourites Muted users Blocked users + Follow Requests \@%s %s boosted @@ -78,6 +79,7 @@ Favourites Muted users Blocked users + Follow Requests Thread Media Open in browser @@ -95,6 +97,8 @@ Save Edit profile Undo + Accept + Reject Share toot URL to… Share toot to… + android:title="@string/action_share"> + + + + + NSFW Options - Share toot URL to… + Share toot URL to… + Share toot to… Search accounts… @@ -137,5 +138,7 @@ %d new interactions Locked Account + Share content of toot + Share link to toot From a5c31b2477761bb744b591411621613c8afc9d67 Mon Sep 17 00:00:00 2001 From: "BOSCH, Cedric" Date: Thu, 13 Apr 2017 15:13:50 +0200 Subject: [PATCH 12/84] Traduction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traduction vers le français --- app/src/main/res/values-fr/strings.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 05fa87504..52f4eeae8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -123,5 +123,15 @@ %1$s, %2$s, et %3$s %1$s et %2$s %d nouvelles interactions + Plus + Répondre + Compte bloqué + Navigateur + Cacher le bouton de suivi lors du défilement + Modifier la notification + Media + Favori + Option + Nettoyer From b1a2761eae9b530c60bbdad15547b022cdf8ea70 Mon Sep 17 00:00:00 2001 From: "BOSCH, Cedric" Date: Fri, 14 Apr 2017 07:33:51 +0200 Subject: [PATCH 13/84] Traduction fr Ajout de "Boost" --- app/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 52f4eeae8..427ab2522 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -133,5 +133,6 @@ Favori Option Nettoyer + Boost From 3aa10233e019205412cc8a875eb9c85a9eeebdcf Mon Sep 17 00:00:00 2001 From: Dryusdan Date: Fri, 14 Apr 2017 10:06:47 +0200 Subject: [PATCH 14/84] Correct mistake and add new translation --- app/src/main/res/values-fr/strings.xml | 60 +++++++++++++++----------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 05fa87504..6e58a4192 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,8 +1,8 @@ Une erreur s\'est produite. - Le domaine est invalide - L\'application n\'a pu s\'authentifier avec l\'instance. + Le domaine n\'est pas valide + Impossible de s\'authentifier avec l\'instance. Impossible de trouver un navigateur web. Une erreur d\'authorisation inconnu s\'est produite. Vous ne pouvez pas vous authentifier. @@ -39,24 +39,24 @@ fin des notifications fin des comptes - %s à boosté votre pouet - %s à ajouter votre pouet en favoris + %s a boosté votre pouet + %s a ajouter votre pouet en favoris %s vous suit Signaler @%s Plus de commentaire ? - Écrire + Répondre Se connecter avec Mastodon Deconnexion - Follow - Unfollow + S\'abonner + Se désabonner Bloquer Débloquer Signaler Supprimer POUET - POUET! + POUET ! Ré-essayer Définir le média comme sensible Masquer le texte par une mise en garde @@ -76,21 +76,24 @@ Redonner la parole Mention NSFW + Options + Ouvrir le menu + Effacer Partager l\'URL de votre pouet avec… Rechercher un compte… - Toot! - Envoyer! + Pouet ! + Envoyer ! - Quelle instance? + Quelle instance ? Quoi de neuf ? - Contenu mis en garde + Contenu sensible Qu\'est ce qu\'une instance? - L\'adresse ou le domaine d\'une instance peut être entré + L\'adresse ou le domaine d\'une instance peut être entrée Ici, comme mastodon.social, icosahedron.website, social.tchncs.de, et plus (en anglais)! \n\nSi vous n\'avez pas de compte, Vous pouvez entrer le nom de l\'instance que vous voulez rejoindre et créer un compte ici.\n\n Une instance est l\'endroit où votre compte est @@ -98,25 +101,29 @@ \n\nPlus d\'info mastodon.social (anglais). Média uploadé avec succès - Téléversement… + Envoie... - Tout le monde peut voir - Tout le monde peut voir, mais cela ne sera pas listé sur votre timeline public - Uniquement les followers et les mentionnés peuvent voir + Afficher dans les fils publics + Ne pas afficher dans les fils publics + N’afficher que pour vos abonné⋅e⋅s Notifications + Paramètre des notifications Notifications push Alertes - Sonner pour notifier - Vibrer pour notifier - Notifier avec une LED - Me notifier quand - mentionné - suivit - mes pouets boostés - mes pouets mis en favoris + Son + Vibreur + LED + Me notifier + Quand je suis mentionné + Lorsque quelqu'un suivit + Lorsque mes pouets boostés + Lorsque mes pouets sont boosté Apparence Utiliser le thème clair + Navigateur + Utiliser le navigateur intégré + Cacher le bouton "s\'abonner" lorsque je parcours un profil %s vous ont mentionnés %1$s, %2$s, %3$s et %4$d plus @@ -124,4 +131,5 @@ %1$s et %2$s %d nouvelles interactions - + Compte bloqué + From 8a6aa19f41d1083f484f88f8b75def3334704a7b Mon Sep 17 00:00:00 2001 From: Dryusdan Date: Fri, 14 Apr 2017 10:22:08 +0200 Subject: [PATCH 15/84] Update traduction and use some #153 sentences --- app/src/main/res/values-fr/strings.xml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6e58a4192..e836309c8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -79,7 +79,12 @@ Options Ouvrir le menu Effacer - + Boost + Favoris + Média + Plus ++ Répondre + Partager l\'URL de votre pouet avec… Rechercher un compte… @@ -123,7 +128,7 @@ Utiliser le thème clair Navigateur Utiliser le navigateur intégré - Cacher le bouton "s\'abonner" lorsque je parcours un profil + Cacher le bouton "s\'abonner" lors du défillement %s vous ont mentionnés %1$s, %2$s, %3$s et %4$d plus From bb9bc42a589aa791a4fc7dcb218c89a4ea172e55 Mon Sep 17 00:00:00 2001 From: Dryusdan Date: Fri, 14 Apr 2017 10:31:21 +0200 Subject: [PATCH 16/84] mistake --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e836309c8..b1b05cbee 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -40,7 +40,7 @@ fin des comptes %s a boosté votre pouet - %s a ajouter votre pouet en favoris + %s a ajouté votre pouet en favoris %s vous suit Signaler @%s From 424968ff4f138ab208090dbf70236c20188c8428 Mon Sep 17 00:00:00 2001 From: Dryusdan Date: Fri, 14 Apr 2017 10:59:59 +0200 Subject: [PATCH 17/84] Mistake (again...) --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b1b05cbee..a177d00f8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -40,7 +40,7 @@ fin des comptes %s a boosté votre pouet - %s a ajouté votre pouet en favoris + %s a ajouté votre pouet à ses favoris %s vous suit Signaler @%s From 96c43697531150d474b94853c2fc11362018c32e Mon Sep 17 00:00:00 2001 From: goofy-bz Date: Fri, 14 Apr 2017 22:20:38 +0200 Subject: [PATCH 18/84] Update strings.xml various typo fix + changing escaping apostrophes for French typographic apostrophes which are xml compliant. --- app/src/main/res/values-fr/strings.xml | 59 +++++++++++++------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 05fa87504..6f05f1884 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,30 +1,29 @@ - - Une erreur s\'est produite. + Une erreur s’est produite. Le domaine est invalide - L\'application n\'a pu s\'authentifier avec l\'instance. + L’application n’a pu s’authentifier avec l’instance. Impossible de trouver un navigateur web. - Une erreur d\'authorisation inconnu s\'est produite. + Une erreur d’autorisation inconnue s’est produite. Vous ne pouvez pas vous authentifier. - Impossible de récupérer le jeton d\'authentification. + Impossible de récupérer le jeton d’authentification. Votre pouet est trop long! Le fichier doit faire moins de 4Mo. - Ce type de fichier n\'est pas accepté. + Ce type de fichier n’est pas accepté. Le fichier ne peut être ouvert. - Une permision pour lire ce média est requis pour l\'uploader. + Une permission pour lire ce média est requis pour le mettre en ligne. Impossible de mettre une vidéo et une image sur le même pouet. - Ce média ne peut être uploadé. + Ce média ne peut être mis en ligne. Au moins un pouet a été reporté. Accueil Notifications Local Fédéré - Thread + Fil #%s Pouets - Follows - Followers + Abonnements + Abonnés Favoris Utilisateur bloqués @@ -40,24 +39,24 @@ fin des comptes %s à boosté votre pouet - %s à ajouter votre pouet en favoris + %s a ajouté votre pouet dans ses favoris %s vous suit Signaler @%s - Plus de commentaire ? + Davantage de commentaires ? Écrire Se connecter avec Mastodon Deconnexion - Follow - Unfollow + Suivre + Ne plus suivre Bloquer Débloquer Signaler Supprimer POUET - POUET! - Ré-essayer + POUET ! + Essayer encore Définir le média comme sensible Masquer le texte par une mise en garde Ok @@ -77,28 +76,28 @@ Mention NSFW - Partager l\'URL de votre pouet avec… + Partager l’URL de votre pouet avec… Rechercher un compte… Toot! - Envoyer! + Envoyer ! - Quelle instance? + Quelle instance ? Quoi de neuf ? Contenu mis en garde - Qu\'est ce qu\'une instance? + Qu’est ce qu’une instance ? - L\'adresse ou le domaine d\'une instance peut être entré + L’adresse ou le domaine d’une instance peut être entré Ici, comme mastodon.social, icosahedron.website, social.tchncs.de, et plus (en anglais)! - \n\nSi vous n\'avez pas de compte, Vous pouvez entrer le nom de l\'instance que vous voulez rejoindre et créer un compte ici.\n\n Une instance est l\'endroit où votre compte est - stocké, mais vous pouvez facilement communiquer et suivre d\'autre personne sur d\'autre instance bien que vous soyez sur le même site - \n\nPlus d\'info mastodon.social (anglais). + \n\nSi vous n’avez pas de compte, Vous pouvez entrer le nom de l’instance que vous voulez rejoindre et créer un compte ici.\n\n Une instance est l’endroit où votre compte est + stocké, mais vous pouvez facilement communiquer et suivre d’autre personne sur d’autres instances bien que vous soyez sur le même site + \n\nPlus d’info mastodon.social (anglais). - Média uploadé avec succès - Téléversement… + Média mis en ligne avec succès + Mise en ligne… Tout le monde peut voir Tout le monde peut voir, mais cela ne sera pas listé sur votre timeline public @@ -107,18 +106,18 @@ Notifications Notifications push Alertes - Sonner pour notifier + Émettre un son pour notifier Vibrer pour notifier Notifier avec une LED Me notifier quand mentionné - suivit + suivi mes pouets boostés mes pouets mis en favoris Apparence Utiliser le thème clair - %s vous ont mentionnés + %s vous ont mentionné⋅e %1$s, %2$s, %3$s et %4$d plus %1$s, %2$s, et %3$s %1$s et %2$s From 597b696d7004a7452e14cdbf5078289340ffce93 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 15 Apr 2017 00:14:16 +0200 Subject: [PATCH 19/84] fixed German translation --- app/src/main/res/values-de/strings.xml | 45 ++++++++++++++++++-------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8804868ad..169b67bb3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -10,16 +10,22 @@ Bilder und Videos können beide nicht an den Beitrag angehängt werden. Die Mediendatei konnte nicht hochgeladen werden. Mindestens ein Beitrag muss berichtet werden. + Autorisierung fehlgeschlagen. + Ein Fehler ist aufgetreten. + Kein Webbrowser gefunden. + Es konnte kein Login-Token abgerufen werden. Start Benachrichtigungen + Lokal + Föderiert Unterhaltung #%s Beiträge Folgt Folgende Favoriten - Blockierte Nutzer + Blockierte Accounts \@%s %s teilte @@ -68,6 +74,16 @@ Stummschalten Lautschalten Erwähnen + Antworten + Teilen + Favorisieren + Mehr + Thread + Medien + Einstellungen + Drawer öffnen + Löschen + NSFW Teile Toot-URL zu… @@ -104,22 +120,23 @@ Aussehen Benutze helles Theme + Benachrichtigungen + Benachrichtigungseinstellungen + Jemandem meine Posts gefallen + Benachrichtigen wenn + Mir jemand folgt + Ich erwähnt werde + Jemand meine Posts teilt + Browser + Öffne Links in der App + Verstecke Button bei Bildlauf + %s hat dich erwähnt %1$s, %2$s, %3$s und %4$d andere %1$s, %2$s, und %3$s %1$s und %2$s %d neue Interaktionen - Lokal - Föderiert - Benachrichtigungen - Jemandem meine Posts gefallen - Benachrichtigen wenn - Mir jemand folgt - Ich erwähnt werde - Jemand meine Posts boostet - Autorisierung fehlgeschlagen. - Ein Fehler ist aufgetreten. - Kein Webbrowser gefunden. - Es konnte kein Login-Token abgerufen werden. - + Gesperrter Account + + \ No newline at end of file From 3e5eb47dcf2e39369cbefc3e6603e158334bc302 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Sat, 15 Apr 2017 11:01:18 +0100 Subject: [PATCH 20/84] Create strings.xml Preparing file to arabic translation from "en" source file. --- app/src/main/res/values-ar/strings.xml | 144 +++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 app/src/main/res/values-ar/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml new file mode 100644 index 000000000..7d053474e --- /dev/null +++ b/app/src/main/res/values-ar/strings.xml @@ -0,0 +1,144 @@ + + + An error occurred. + Invalid domain entered + Failed authenticating with that instance. + Couldn\'t find a web browser to use. + An unidentified authorization error occurred. + Authorization was denied. + Failed getting a login token. + The status is too long! + The file must be less than 4MB. + That type of file cannot be uploaded. + That file could not be opened. + Permission to read media is required. + Images and videos cannot both be attached to the same status. + The upload failed. + At least one status must be reported. + + Home + Notifications + Local + Federated + Thread + #%s + Posts + Follows + Followers + Favourites + Blocked users + + \@%s + %s boosted + Sensitive Media + Click to view + Show More + Show Less + + end of the statuses + end of the notifications + end of the accounts + + %s boosted your toot + %s favourited your toot + %s followed you + + Report @%s + Additional comments? + + Reply + Boost + Favourite + More + Compose + Login with Mastodon + Log Out + Follow + Unfollow + Block + Unblock + Report + Delete + TOOT + TOOT! + Retry + Mark media sensitive + Hide text behind warning + Ok + Cancel + Close + Back + Profile + Preferences + Favourites + Blocked users + Thread + Media + Open in browser + Submit + Add media + Share + Mute + Unmute + Mention + NSFW + Options + Open drawer + Clear + + Share toot URL to… + + Search accounts… + + Toot! + Sent! + + Which instance? + What\'s happening? + Content warning + + What\'s an instance? + + The address or domain of any instance can be entered + here, such as mastodon.social, icosahedron.website, social.tchncs.de, and + more! + \n\nIf you don\'t yet have an account, you can enter the name of the instance you\'d like to + join and create an account there.\n\nAn instance is a single place where your account is + hosted, but you can easily communicate with and follow folks on other instances as though + you were on the same site. + \n\nMore info can be found at mastodon.social. + + Finishing Media Upload + Uploading… + + Everyone can view + Everyone can view, but not on public timelines + Only followers and mentions can view + + Notifications + Edit Notifications + Push notifications + Alerts + Notify with a sound + Notify with vibration + Notify with light + Notify me when + mentioned + followed + my posts are boosted + my posts are favourited + Appearance + Use the Light Theme + Browser + Use Chrome Custom Tabs + Hide follow button while scrolling + + %s mentioned you + %1$s, %2$s, %3$s and %4$d others + %1$s, %2$s, and %3$s + %1$s and %2$s + %d new interactions + + Locked Account + + From f4109f38a84192e8f0085c4bc8fb5663deaa7f16 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Apr 2017 12:28:22 +0200 Subject: [PATCH 21/84] Allow pull-to-refresh in thread view (closes #73) --- .../keylesspalace/tusky/ThreadAdapter.java | 31 ++++++++++++++++--- .../tusky/ViewThreadFragment.java | 20 +++++++++--- .../main/res/layout/fragment_view_thread.xml | 14 ++++++--- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java b/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java index fea024558..7af6d13f0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/ThreadAdapter.java @@ -65,20 +65,43 @@ class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRemover { notifyItemRemoved(position); } - int insertStatus(Status status) { + int setStatus(Status status) { + if (statuses.size() > 0 && statuses.get(statusIndex).equals(status)) { + // Do not add this status on refresh, it's already in there. + statuses.set(statusIndex, status); + return statusIndex; + } int i = statusIndex; statuses.add(i, status); notifyItemInserted(i); return i; } - void addAncestors(List ancestors) { + void setContext(List ancestors, List descendants) { + Status mainStatus = null; + + // In case of refresh, remove old ancestors and descendants first. We'll remove all blindly, + // as we have no guarantee on their order to be the same as before + int old_size = statuses.size(); + if (old_size > 0) { + mainStatus = statuses.get(statusIndex); + statuses.clear(); + notifyItemRangeRemoved(0, old_size); + } + + // Insert newly fetched ancestors statusIndex = ancestors.size(); statuses.addAll(0, ancestors); notifyItemRangeInserted(0, statusIndex); - } - void addDescendants(List descendants) { + if (mainStatus != null) { + // In case we needed to delete everything (which is way easier than deleting + // everything except one), re-insert the remaining status here. + statuses.add(statusIndex, mainStatus); + notifyItemInserted(statusIndex); + } + + // Insert newly fetched descendants int end = statuses.size(); statuses.addAll(descendants); notifyItemRangeInserted(end, descendants.size()); diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java index 4101b44a1..67952669b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -34,9 +35,11 @@ import com.keylesspalace.tusky.entity.StatusContext; import retrofit2.Call; import retrofit2.Callback; -public class ViewThreadFragment extends SFragment implements StatusActionListener { +public class ViewThreadFragment extends SFragment implements + SwipeRefreshLayout.OnRefreshListener, StatusActionListener { private static final String TAG = "ViewThreadFragment"; + private SwipeRefreshLayout swipeRefreshLayout; private RecyclerView recyclerView; private ThreadAdapter adapter; private String thisThreadsStatusId; @@ -56,6 +59,9 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene View rootView = inflater.inflate(R.layout.fragment_view_thread, container, false); Context context = getContext(); + swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh_layout); + swipeRefreshLayout.setOnRefreshListener(this); + recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); LinearLayoutManager layoutManager = new LinearLayoutManager(context); @@ -86,7 +92,7 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene @Override public void onResponse(Call call, retrofit2.Response response) { if (response.isSuccessful()) { - int position = adapter.insertStatus(response.body()); + int position = adapter.setStatus(response.body()); recyclerView.scrollToPosition(position); } else { onThreadRequestFailure(id); @@ -109,10 +115,10 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene @Override public void onResponse(Call call, retrofit2.Response response) { if (response.isSuccessful()) { + swipeRefreshLayout.setRefreshing(false); StatusContext context = response.body(); - adapter.addAncestors(context.ancestors); - adapter.addDescendants(context.descendants); + adapter.setContext(context.ancestors, context.descendants); } else { onThreadRequestFailure(id); } @@ -128,6 +134,7 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene private void onThreadRequestFailure(final String id) { View view = getView(); + swipeRefreshLayout.setRefreshing(false); if (view != null) { Snackbar.make(view, R.string.error_generic, Snackbar.LENGTH_LONG) .setAction(R.string.action_retry, new View.OnClickListener() { @@ -143,6 +150,11 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene } } + public void onRefresh() { + sendStatusRequest(thisThreadsStatusId); + sendThreadRequest(thisThreadsStatusId); + } + public void onReply(int position) { super.reply(adapter.getItem(position)); } diff --git a/app/src/main/res/layout/fragment_view_thread.xml b/app/src/main/res/layout/fragment_view_thread.xml index 732fbb63f..3616a48f6 100644 --- a/app/src/main/res/layout/fragment_view_thread.xml +++ b/app/src/main/res/layout/fragment_view_thread.xml @@ -1,7 +1,13 @@ - \ No newline at end of file + android:layout_height="match_parent"> + + \ No newline at end of file From 13c1136e1fa406ce15467a5e0f12da2a22fe2d13 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Sat, 15 Apr 2017 16:40:37 +0100 Subject: [PATCH 22/84] Update strings.xml Localisation was made here : https://www.transifex.com/opendz/tusky-in-arabic/ --- app/src/main/res/values-ar/strings.xml | 225 +++++++++++-------------- 1 file changed, 101 insertions(+), 124 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7d053474e..c06ceaf01 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,144 +1,121 @@ - An error occurred. - Invalid domain entered - Failed authenticating with that instance. - Couldn\'t find a web browser to use. - An unidentified authorization error occurred. - Authorization was denied. - Failed getting a login token. - The status is too long! - The file must be less than 4MB. - That type of file cannot be uploaded. - That file could not be opened. - Permission to read media is required. - Images and videos cannot both be attached to the same status. - The upload failed. - At least one status must be reported. - - Home - Notifications - Local - Federated - Thread + وقع هناك خطأ. + اسم النطاق غير صالح + اخفقت المصادقة مع مثيل الخادم هذا. + لم يتم العثور على متصفح قابل للإستعمال. + تم رفض التصريح. + يجب أن يكون حجم الملف أقل من 4 ميغابايت. + لا يمكن رفع هذا النوع من الملفات. + تعذر فتح ذاك الملف. + اخفقت عملية الرفع. + الرئيسية + الاشعارات + المحلية + الفدرالية + الخيط #%s - Posts - Follows - Followers - Favourites - Blocked users + المشاركات + يتبع + المتابعون + المفضلة + المستخدمون المحظورون \@%s - %s boosted - Sensitive Media - Click to view - Show More - Show Less + %s عزز + محتوى حساس + اضغط للعرض + اعرض أكثر + اعرض أقل - end of the statuses - end of the notifications - end of the accounts + نهاية الحالات + نهاية الاشعارات + نهاية الحسابات - %s boosted your toot - %s favourited your toot - %s followed you + %s عزز تبويقك + %s أعجب بتبويقك + %s يتبعك - Report @%s - Additional comments? + أبلغ عن @%s + تعليقات إضافية ؟ - Reply - Boost - Favourite - More - Compose - Login with Mastodon - Log Out - Follow - Unfollow - Block - Unblock - Report - Delete - TOOT - TOOT! - Retry - Mark media sensitive - Hide text behind warning - Ok - Cancel - Close - Back - Profile - Preferences - Favourites - Blocked users - Thread - Media - Open in browser - Submit - Add media - Share - Mute - Unmute - Mention + أجب + عزز + تفضيل + المزيد + حرر + التسجيل بواسطة ماستدون + خروج + إتبع + إلغاء التتبع + حضر + إلغاء الحظر + أبلغ + إحذف + تبويق + بَوِّق + إعادة المحاولة + اخفي النص وراء تحذير + موافق + إلغاء + إغلاق + عودة + الملف الشخصي + التفضيلات + المفضلة + المستخدمون المحظورون + الخيط + وسائط + إفتح في متصفح + ارسل + إضافة وسائط + شارك + أكتم + إلغاء الكتم + أذكر NSFW - Options - Open drawer - Clear + خيارات + إفتح الدرج + إمسح - Share toot URL to… + شارك رابط التبويق إلى ... - Search accounts… + ابحث عن حسابات ... - Toot! - Sent! + بَوِّق + تم الإرسال ! - Which instance? - What\'s happening? - Content warning + أي سيرفر ؟ + ما الجديد ؟ + تحذير عن المحتوى - What\'s an instance? + ماذا نعني بمثيل الخادم ؟ - The address or domain of any instance can be entered - here, such as mastodon.social, icosahedron.website, social.tchncs.de, and - more! - \n\nIf you don\'t yet have an account, you can enter the name of the instance you\'d like to - join and create an account there.\n\nAn instance is a single place where your account is - hosted, but you can easily communicate with and follow folks on other instances as though - you were on the same site. - \n\nMore info can be found at mastodon.social. - - Finishing Media Upload - Uploading… + تتمة رفع الوسائط + جاري الرفع ... - Everyone can view - Everyone can view, but not on public timelines - Only followers and mentions can view + الاشعارات + تعديل الاشعارات + دفع الإخطارات + التنبيهات + إعلام بالصوت + إعلام بالاهتزار + إعلام بالضوء + أخطرني عندما + يشار إلي + يتبعني أحد + تعزز وتدفع منشوراتي + يعجب أحد ما بمنشوراتي + المظهر + إستخدم سمةً فاتحة اللون + المتصفح + إخفاء زر المتابعة أثناء تمرير الصفحة + %s أشار إليك + %1$s, %2$s, %3$s و %4$d أخرى + %1$s, %2$s, و %3$s + %1$s و %2$s + %d تفاعلات جديدة - Notifications - Edit Notifications - Push notifications - Alerts - Notify with a sound - Notify with vibration - Notify with light - Notify me when - mentioned - followed - my posts are boosted - my posts are favourited - Appearance - Use the Light Theme - Browser - Use Chrome Custom Tabs - Hide follow button while scrolling - - %s mentioned you - %1$s, %2$s, %3$s and %4$d others - %1$s, %2$s, and %3$s - %1$s and %2$s - %d new interactions - - Locked Account + حساب مقفل From ee4d0739db824efb54cd4bad952f8d5aff0da93d Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Apr 2017 17:52:21 +0200 Subject: [PATCH 23/84] Re-enable controls after failed toot --- .../keylesspalace/tusky/ComposeActivity.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java index 5be683a2f..9d68596d0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java @@ -122,6 +122,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag private ImageButton pickBtn; private Button nsfwBtn; private ProgressBar postProgress; + private ImageButton visibilityBtn; private static class QueuedMedia { enum Type { @@ -341,15 +342,12 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag floatingBtn = (Button) findViewById(R.id.floating_btn); pickBtn = (ImageButton) findViewById(R.id.compose_photo_pick); nsfwBtn = (Button) findViewById(R.id.action_toggle_nsfw); - final ImageButton visibilityBtn = (ImageButton) findViewById(R.id.action_toggle_visibility); + visibilityBtn = (ImageButton) findViewById(R.id.action_toggle_visibility); floatingBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - pickBtn.setClickable(false); - nsfwBtn.setClickable(false); - visibilityBtn.setClickable(false); - floatingBtn.setEnabled(false); + disableButtons(); postProgress.setVisibility(View.VISIBLE); sendStatus(); @@ -567,6 +565,20 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag } } + private void disableButtons() { + pickBtn.setClickable(false); + nsfwBtn.setClickable(false); + visibilityBtn.setClickable(false); + floatingBtn.setEnabled(false); + } + + private void enableButtons() { + pickBtn.setClickable(true); + nsfwBtn.setClickable(true); + visibilityBtn.setClickable(true); + floatingBtn.setEnabled(true); + } + private void setStatusVisibility(String visibility) { statusVisibility = visibility; switch (visibility) { @@ -823,6 +835,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag postProgress.setVisibility(View.INVISIBLE); textEditor.setError(getString(R.string.error_generic)); statusAlreadyInFlight = false; + enableButtons(); } private void readyStatus(final String content, final String visibility, final boolean sensitive, From d732c5d0a76621ab41fcff1799f360c97d06116d Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Apr 2017 19:25:39 +0200 Subject: [PATCH 24/84] Timeline footer improvements --- .../keylesspalace/tusky/FooterViewHolder.java | 4 ++- .../tusky/NotificationsAdapter.java | 36 +++++++++++++++++-- .../tusky/NotificationsFragment.java | 9 +++++ .../keylesspalace/tusky/TimelineAdapter.java | 35 ++++++++++++++++-- .../keylesspalace/tusky/TimelineFragment.java | 9 +++++ app/src/main/res/layout/item_footer_empty.xml | 25 +++++++++++++ app/src/main/res/layout/item_footer_end.xml | 9 +++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/layout/item_footer_empty.xml create mode 100644 app/src/main/res/layout/item_footer_end.xml diff --git a/app/src/main/java/com/keylesspalace/tusky/FooterViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/FooterViewHolder.java index 6ebe217ff..e39ca44af 100644 --- a/app/src/main/java/com/keylesspalace/tusky/FooterViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/FooterViewHolder.java @@ -23,6 +23,8 @@ class FooterViewHolder extends RecyclerView.ViewHolder { FooterViewHolder(View itemView) { super(itemView); ProgressBar progressBar = (ProgressBar) itemView.findViewById(R.id.footer_progress_bar); - progressBar.setIndeterminate(true); + if (progressBar != null) { + progressBar.setIndeterminate(true); + } } } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java index ea45b0782..64ecb722a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java @@ -42,9 +42,16 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe private static final int VIEW_TYPE_STATUS_NOTIFICATION = 2; private static final int VIEW_TYPE_FOLLOW = 3; + enum FooterState { + EMPTY, + END, + LOADING + } + private List notifications; private StatusActionListener statusListener; private NotificationActionListener notificationActionListener; + private FooterState footerState = FooterState.END; NotificationsAdapter(StatusActionListener statusListener, NotificationActionListener notificationActionListener) { @@ -54,6 +61,15 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe this.notificationActionListener = notificationActionListener; } + + public void setFooterState(FooterState newFooterState) { + FooterState oldValue = footerState; + footerState = newFooterState; + if (footerState != oldValue) { + notifyItemChanged(notifications.size()); + } + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { @@ -64,8 +80,24 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe return new StatusViewHolder(view); } case VIEW_TYPE_FOOTER: { - View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.item_footer, parent, false); + View view; + switch (footerState) { + default: + case LOADING: + view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_footer, parent, false); + break; + case END: { + view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_footer_end, parent, false); + break; + } + case EMPTY: { + view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_footer_empty, parent, false); + break; + } + } return new FooterViewHolder(view); } case VIEW_TYPE_STATUS_NOTIFICATION: { diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java index 152a67eed..b754e6c41 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java @@ -144,6 +144,10 @@ public class NotificationsFragment extends SFragment implements private void sendFetchNotificationsRequest(final String fromId, String uptoId) { MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; + if (fromId != null || adapter.getItemCount() <= 1) { + adapter.setFooterState(NotificationsAdapter.FooterState.LOADING); + } + listCall = api.notifications(fromId, uptoId, null); listCall.enqueue(new Callback>() { @@ -192,6 +196,11 @@ public class NotificationsFragment extends SFragment implements } else { adapter.update(notifications); } + if (notifications.size() == 0 && adapter.getItemCount() == 1) { + adapter.setFooterState(NotificationsAdapter.FooterState.EMPTY); + } else if (fromId != null) { + adapter.setFooterState(NotificationsAdapter.FooterState.END); + } swipeRefreshLayout.setRefreshing(false); } diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java index 8f8fc5460..a6c1367ee 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java @@ -30,8 +30,15 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover private static final int VIEW_TYPE_STATUS = 0; private static final int VIEW_TYPE_FOOTER = 1; + enum FooterState { + EMPTY, + END, + LOADING + } + private List statuses; private StatusActionListener statusListener; + private FooterState footerState = FooterState.END; TimelineAdapter(StatusActionListener statusListener) { super(); @@ -49,13 +56,37 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover return new StatusViewHolder(view); } case VIEW_TYPE_FOOTER: { - View view = LayoutInflater.from(viewGroup.getContext()) - .inflate(R.layout.item_footer, viewGroup, false); + View view; + switch (footerState) { + default: + case LOADING: + view = LayoutInflater.from(viewGroup.getContext()) + .inflate(R.layout.item_footer, viewGroup, false); + break; + case END: { + view = LayoutInflater.from(viewGroup.getContext()) + .inflate(R.layout.item_footer_end, viewGroup, false); + break; + } + case EMPTY: { + view = LayoutInflater.from(viewGroup.getContext()) + .inflate(R.layout.item_footer_empty, viewGroup, false); + break; + } + } return new FooterViewHolder(view); } } } + public void setFooterState(FooterState newFooterState) { + FooterState oldValue = footerState; + footerState = newFooterState; + if (footerState != oldValue) { + notifyItemChanged(statuses.size()); + } + } + @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (position < statuses.size()) { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 4f1b6e205..be220cfe9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -214,6 +214,10 @@ public class TimelineFragment extends SFragment implements private void sendFetchTimelineRequest(@Nullable final String fromId, @Nullable String uptoId) { MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; + if (fromId != null || adapter.getItemCount() <= 1) { + adapter.setFooterState(TimelineAdapter.FooterState.LOADING); + } + Callback> cb = new Callback>() { @Override public void onResponse(Call> call, retrofit2.Response> response) { @@ -282,6 +286,11 @@ public class TimelineFragment extends SFragment implements } else { adapter.update(statuses); } + if (statuses.size() == 0 && adapter.getItemCount() == 1) { + adapter.setFooterState(TimelineAdapter.FooterState.EMPTY); + } else if(fromId != null) { + adapter.setFooterState(TimelineAdapter.FooterState.END); + } swipeRefreshLayout.setRefreshing(false); } diff --git a/app/src/main/res/layout/item_footer_empty.xml b/app/src/main/res/layout/item_footer_empty.xml new file mode 100644 index 000000000..1c5606d22 --- /dev/null +++ b/app/src/main/res/layout/item_footer_empty.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_footer_end.xml b/app/src/main/res/layout/item_footer_end.xml new file mode 100644 index 000000000..584de324b --- /dev/null +++ b/app/src/main/res/layout/item_footer_end.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7d053474e..534693cab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,7 @@ end of the statuses end of the notifications end of the accounts + There are no toots here so far. Pull down to refresh! %s boosted your toot %s favourited your toot From fce573f1eca899f4a28811583b4dfbc072a871a0 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Apr 2017 19:44:29 +0200 Subject: [PATCH 25/84] Update thread view after sent reply (closes #74) --- .../keylesspalace/tusky/ComposeActivity.java | 2 ++ .../com/keylesspalace/tusky/MainActivity.java | 14 +++++++++++++- .../com/keylesspalace/tusky/SFragment.java | 19 ++++++++++++++++--- .../keylesspalace/tusky/TimelineFragment.java | 8 ++++++++ .../tusky/TimelinePagerAdapter.java | 15 +++++++++++++++ .../tusky/ViewThreadFragment.java | 6 ++++++ 6 files changed, 60 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java index 5be683a2f..cfd1eb6fe 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java @@ -101,6 +101,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag private static final int MEDIA_PICK_RESULT = 1; private static final int PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1; private static final int MEDIA_SIZE_UNKNOWN = -1; + private static final int COMPOSE_SUCCESS = -1; private String inReplyToId; private EditText textEditor; @@ -816,6 +817,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFrag private void onSendSuccess() { Snackbar bar = Snackbar.make(findViewById(R.id.activity_compose), getString(R.string.confirmation_send), Snackbar.LENGTH_SHORT); bar.show(); + setResult(COMPOSE_SUCCESS); finish(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index 434152697..8a2b7bc62 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -66,6 +66,7 @@ import retrofit2.Response; public class MainActivity extends BaseActivity { private static final String TAG = "MainActivity"; // logging tag and Volley request tag + protected static int COMPOSE_RESULT = 1; private String loggedInAccountId; private String loggedInAccountUsername; @@ -99,7 +100,7 @@ public class MainActivity extends BaseActivity { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), ComposeActivity.class); - startActivity(intent); + startActivityForResult(intent, COMPOSE_RESULT); } }); @@ -474,6 +475,17 @@ public class MainActivity extends BaseActivity { Log.e(TAG, "Failed to fetch user info. " + exception.getMessage()); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == COMPOSE_RESULT && resultCode == ComposeActivity.RESULT_OK) { + TimelinePagerAdapter adapter = (TimelinePagerAdapter) viewPager.getAdapter(); + if (adapter.getCurrentFragment() instanceof SFragment) { + ((SFragment) adapter.getCurrentFragment()).onSuccessfulStatus(); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + @Override public void onBackPressed() { if(drawer != null && drawer.isDrawerOpen()) { diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index f18f07f04..54d897a09 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -44,9 +44,10 @@ import retrofit2.Callback; * adapters. I feel like the profile pages and thread viewer, which I haven't made yet, will also * overlap functionality. So, I'm momentarily leaving it and hopefully working on those will clear * up what needs to be where. */ -public class SFragment extends BaseFragment { +public abstract class SFragment extends BaseFragment { protected String loggedInAccountId; protected String loggedInUsername; + protected static int COMPOSE_RESULT = 1; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -79,11 +80,23 @@ public class SFragment extends BaseFragment { intent.putExtra("reply_visibility", replyVisibility); intent.putExtra("content_warning", contentWarning); intent.putExtra("mentioned_usernames", mentionedUsernames.toArray(new String[0])); - startActivity(intent); + startActivityForResult(intent, COMPOSE_RESULT); + } + + public void onSuccessfulStatus() { + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == COMPOSE_RESULT && resultCode == ComposeActivity.RESULT_OK) { + onSuccessfulStatus(); + } else { + super.onActivityResult(requestCode, resultCode, data); + } } protected void reblog(final Status status, final boolean reblog, - final RecyclerView.Adapter adapter, final int position) { + final RecyclerView.Adapter adapter, final int position) { String id = status.getActionableId(); Callback cb = new Callback() { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 4f1b6e205..825411e8b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -299,6 +299,14 @@ public class TimelineFragment extends SFragment implements } } + @Override + public void onSuccessfulStatus() { + if (kind == Kind.HOME || kind == Kind.PUBLIC_FEDERATED || kind == Kind.PUBLIC_LOCAL) { + onRefresh(); + } + super.onSuccessfulStatus(); + } + public void onReply(int position) { super.reply(adapter.getItem(position)); } diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java index af9bc6393..2e81adc33 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelinePagerAdapter.java @@ -18,12 +18,27 @@ package com.keylesspalace.tusky; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; +import android.view.ViewGroup; class TimelinePagerAdapter extends FragmentPagerAdapter { + private Fragment currentFragment; + TimelinePagerAdapter(FragmentManager manager) { super(manager); } + public Fragment getCurrentFragment() { + return currentFragment; + } + + @Override + public void setPrimaryItem(ViewGroup container, int position, Object object) { + if (getCurrentFragment() != object) { + currentFragment = ((Fragment) object); + } + super.setPrimaryItem(container, position, object); + } + @Override public Fragment getItem(int i) { switch (i) { diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java index 67952669b..39baf8ee6 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewThreadFragment.java @@ -155,6 +155,12 @@ public class ViewThreadFragment extends SFragment implements sendThreadRequest(thisThreadsStatusId); } + @Override + public void onSuccessfulStatus() { + onRefresh(); + super.onSuccessfulStatus(); + } + public void onReply(int position) { super.reply(adapter.getItem(position)); } From 1701ef67d9a94aaa0ddd4092e9cd73624c2775a3 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Apr 2017 20:36:21 +0200 Subject: [PATCH 26/84] Margins in account tab --- app/src/main/res/layout/tab_account.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/tab_account.xml b/app/src/main/res/layout/tab_account.xml index 0f314fd45..957bbe3c4 100644 --- a/app/src/main/res/layout/tab_account.xml +++ b/app/src/main/res/layout/tab_account.xml @@ -9,6 +9,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" + android:layout_marginTop="8dp" android:layout_centerHorizontal="true" android:textAllCaps="true" android:textStyle="normal|bold" /> From 60b3d4bb97bb16e8d994f7a84a890509fae7baef Mon Sep 17 00:00:00 2001 From: in_dow Date: Mon, 17 Apr 2017 00:09:58 +0900 Subject: [PATCH 27/84] Add translation (japanese) Signed-off-by: in_dow --- app/src/main/res/values-ja/strings.xml | 142 +++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 app/src/main/res/values-ja/strings.xml diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 000000000..902fb0a37 --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,142 @@ + + + エラーが発生しました。 + 不正なドメイン名が入力されました + そのインスタンスでの認証が失敗しました + 使用するブラウザを見つけることができません。 + 未定義の認証エラーが発生しました。 + 認証は拒否されました。 + ログイントークンの取得に失敗しました。 + ステータスが非常に長い! + ファイルは4MB未満にしてください。 + このファイル種別はアップロードできません。 + このファイルは開けません。 + メディアの読み込み権限が必要です。 + 同一のステータスに画像とビデオを一緒にすることはできません。 + アップロードに失敗しました。 + 少なくとも1つのステータスを報告してください。 + + ホーム + 通知 + ローカル + 連合 + スレッド + #%s + 投稿 + フォロー + フォロワー + お気に入り + ブロックしたユーザー + + \@%s + %s 加速されました + 不適切なメディア + タップして表示 + さらに表示 + 省略表示 + + これ以降にステータスはありません + これ以降に通知はありません + これ以降にアカウントはありません + + %s があたなのトゥートをブーストしました + %s があなたのトゥートをお気に入りに追加しました + %s があなたをフォローしました + + \@%s を通報 + コメントを追加しますか? + + 返信 + ブースト + お気に入り + もっと読む + 作成 + Mastodonにログイン + ログアウト + フォロー + フォロー解除 + ブロック + ブロック解除 + 報告 + 削除 + トゥート + トゥート! + リトライ + 不適切なメディアとする + 警告のあるテキストを隠す + Ok + キャンセル + 閉じる + 戻る + プロファイル + 設定 + お気に入り + ブロックしたユーザー + スレッド + メディア + ブラウザで開く + 投稿 + メディアを追加 + 共有 + ミュート + ミュート解除 + メンション + NSFW + オプション + ドローワを開く + クリア + + トゥートURLを共通… + + アカウントを検索… + + トゥート! + 送信しました! + + どのインスタンス? + 今何してる? + コンテンツの警告 + + インスタンスって? + + インスタンスのアドレスもしくはドメインをここに入力してください。 + 例えば mastodon.social, mstdn.jp, pawoo.net, や + などです! + \n\nもしアカウントを持っていない場合は、参加したいインスタンスの名前を入力してください。\n\n + インスタンスはあなたのアカウントを単一の場所で管理(ホスト)しますが、ほかのインスタンスと同じサイトであるかのように人をフォローしたり連絡することができます。 + \n\n詳しくはmastodon.socialを見てください。 + + メディアのアップロードが完了 + アップロード中… + + すべての人が表示可能 + すべての人が表示可能だが公開タイムラインには載せない + フォロワーとメンションのみ表示可能 + + 通知 + 通知を編集 + プッシュ通知 + アラート + 音で通知 + バイブレーションで通知 + ライトで通知 + 通知する状態 + メンションがありました + フォローされた + 私の投稿がブーストされました + 私の投稿がお気に入りに追加されました + 表示 + 明るいテーマを使用 + ブラウザ + Chromeカスタムタブを使用 + スクロール中にフォローボタンを非表示 + + %s があなたにメンションを送信しました + %1$s、%2$s、%3$s と他に%4$d件 + %1$s、%2$s、と %3$s + %1$s と %2$s + %d 新しいお知らせ + + ロックされたアカウント + + From 84741c1f1bba2722754fd17a2141dbb1850076e9 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Sun, 16 Apr 2017 18:51:09 -0400 Subject: [PATCH 28/84] Adds a partial profile editor (non-working). --- app/src/main/AndroidManifest.xml | 1 + .../tusky/EditProfileActivity.java | 130 ++++++++++++++++++ .../keylesspalace/tusky/LoginActivity.java | 20 --- .../com/keylesspalace/tusky/MainActivity.java | 9 +- .../main/res/layout/activity_edit_profile.xml | 62 +++++++++ .../main/res/menu/edit_profile_toolbar.xml | 9 ++ app/src/main/res/values/strings.xml | 8 ++ 7 files changed, 213 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java create mode 100644 app/src/main/res/layout/activity_edit_profile.xml create mode 100644 app/src/main/res/menu/edit_profile_toolbar.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 62955811e..99e67606c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,6 +59,7 @@ + diff --git a/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java b/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java new file mode 100644 index 000000000..5475a0d4e --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.java @@ -0,0 +1,130 @@ +package com.keylesspalace.tusky; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.Button; +import android.widget.EditText; + +import com.keylesspalace.tusky.entity.Account; + +import butterknife.BindView; +import butterknife.ButterKnife; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class EditProfileActivity extends BaseActivity { + private static final String TAG = "EditProfileActivity"; + + @BindView(R.id.edit_profile_display_name) EditText displayNameEditText; + @BindView(R.id.edit_profile_note) EditText noteEditText; + @BindView(R.id.edit_profile_avatar) Button avatarButton; + @BindView(R.id.edit_profile_header) Button headerButton; + + private String priorDisplayName; + private String priorNote; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_edit_profile); + ButterKnife.bind(this); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(null); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } + + if (savedInstanceState != null) { + priorDisplayName = savedInstanceState.getString("priorDisplayName"); + priorNote = savedInstanceState.getString("priorNote"); + } else { + priorDisplayName = null; + priorNote = null; + } + + mastodonAPI.accountVerifyCredentials().enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (!response.isSuccessful()) { + onAccountVerifyCredentialsFailed(); + return; + } + Account me = response.body(); + priorDisplayName = me.getDisplayName(); + priorNote = me.note.toString(); + displayNameEditText.setText(priorDisplayName); + noteEditText.setText(HtmlUtils.fromHtml(priorNote)); + } + + @Override + public void onFailure(Call call, Throwable t) { + onAccountVerifyCredentialsFailed(); + } + }); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putString("priorDisplayName", priorDisplayName); + outState.putString("priorNote", priorNote); + super.onSaveInstanceState(outState); + } + + private void onAccountVerifyCredentialsFailed() { + Log.e(TAG, "The account failed to load."); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.edit_profile_toolbar, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: { + onBackPressed(); + return true; + } + case R.id.action_save: { + save(); + return true; + } + } + return super.onOptionsItemSelected(item); + } + + private void save() { + String newDisplayName = displayNameEditText.getText().toString(); + if (newDisplayName.isEmpty()) { + displayNameEditText.setError(getString(R.string.error_empty)); + return; + } + if (priorDisplayName != null && priorDisplayName.equals(newDisplayName)) { + // If it's not any different, don't patch it. + newDisplayName = null; + } + + String newNote = HtmlUtils.toHtml(noteEditText.getText()); + if (newNote.isEmpty()) { + noteEditText.setError(getString(R.string.error_empty)); + return; + } + if (priorNote != null && priorNote.equals(newNote)) { + // If it's not any different, don't patch it. + newNote = null; + } + + mastodonAPI.accountUpdateCredentials(newDisplayName, newNote, null, null); + } +} diff --git a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java index e4695dd7e..b1996d19e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java @@ -110,26 +110,6 @@ public class LoginActivity extends AppCompatActivity { textView.setMovementMethod(LinkMovementMethod.getInstance()); } }); - - // Apply any updates needed. - int versionCode = 1; - try { - versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; - } catch (PackageManager.NameNotFoundException e) { - Log.e(TAG, "The app version was not found. " + e.getMessage()); - } - if (preferences.getInt("lastUpdateVersion", 0) != versionCode) { - SharedPreferences.Editor editor = preferences.edit(); - if (versionCode == 14) { - /* This version switches the order of scheme and host in the OAuth redirect URI. - * But to fix it requires forcing the app to re-authenticate with servers. So, clear - * out the stored client id/secret pairs. The only other things that are lost are - * "rememberedVisibility", "loggedInUsername", and "loggedInAccountId". */ - editor.clear(); - } - editor.putInt("lastUpdateVersion", versionCode); - editor.apply(); - } } @Override diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index 434152697..bd4326ed2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -261,7 +261,7 @@ public class MainActivity extends BaseActivity { .withHasStableIds(true) .withSelectedItem(-1) .addDrawerItems( - new PrimaryDrawerItem().withIdentifier(0).withName(R.string.action_view_profile).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_person), + new PrimaryDrawerItem().withIdentifier(0).withName(getString(R.string.action_edit_profile)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_person), new PrimaryDrawerItem().withIdentifier(1).withName(getString(R.string.action_view_favourites)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_star), new PrimaryDrawerItem().withIdentifier(2).withName(getString(R.string.action_view_blocks)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_block), new DividerDrawerItem(), @@ -275,11 +275,8 @@ public class MainActivity extends BaseActivity { long drawerItemIdentifier = drawerItem.getIdentifier(); if (drawerItemIdentifier == 0) { - if (loggedInAccountId != null) { - Intent intent = new Intent(MainActivity.this, AccountActivity.class); - intent.putExtra("id", loggedInAccountId); - startActivity(intent); - } + Intent intent = new Intent(MainActivity.this, EditProfileActivity.class); + startActivity(intent); } else if (drawerItemIdentifier == 1) { Intent intent = new Intent(MainActivity.this, FavouritesActivity.class); startActivity(intent); diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml new file mode 100644 index 000000000..d861a91d4 --- /dev/null +++ b/app/src/main/res/layout/activity_edit_profile.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + +