diff --git a/.idea/modules.xml b/.idea/modules.xml index 8cf04b6..1fba74d 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,8 @@ + + diff --git a/build.gradle b/build.gradle index bc69ae0..d54e459 100755 --- a/build.gradle +++ b/build.gradle @@ -30,9 +30,9 @@ allprojects { rootProject.ext { BuildTools = "27" MinSdk = 15 - TargetSdk = 26 - CompileSdk = 26 - SupportLibrary = "26.0.2" + TargetSdk = 27 + CompileSdk = 27 + SupportLibrary = "27.1.0" } } diff --git a/library/build.gradle b/library/build.gradle index 7e19dd8..3d59d5a 100755 --- a/library/build.gradle +++ b/library/build.gradle @@ -45,7 +45,7 @@ android { minSdkVersion rootProject.ext.MinSdk targetSdkVersion rootProject.ext.TargetSdk versionCode 174 - versionName "1.7.0-b5-1" + versionName "1.7.0-b5-2" vectorDrawables.useSupportLibrary = true manifestPlaceholders = [onesignal_app_id: "key", onesignal_google_project_number: "key"] @@ -94,7 +94,7 @@ dependencies { compile 'com.jakewharton:butterknife:9.0.0-SNAPSHOT' annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT' - compile 'com.squareup.okhttp3:okhttp:3.9.0' + compile 'com.squareup.okhttp3:okhttp:3.10.0' compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.1' compile 'uk.co.chrisjenx:calligraphy:2.3.0' @@ -120,14 +120,14 @@ dependencies { // OneSignal SDK implementation 'com.onesignal:OneSignal:3.+@aar' // Required for OneSignal - implementation 'com.google.android.gms:play-services-gcm:11.6.2' - implementation 'com.google.android.gms:play-services-analytics:11.6.2' + implementation 'com.google.android.gms:play-services-gcm:11.8.0' + implementation 'com.google.android.gms:play-services-analytics:11.8.0' // App Updater compile 'com.github.javiersantos:AppUpdater:2.6.3' // Google Ads - compile 'com.google.android.gms:play-services-ads:11.6.2' + compile 'com.google.android.gms:play-services-ads:11.8.0' // Material Dialogs With Additional Features compile 'com.github.javiersantos:MaterialStyledDialogs:2.1' diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/CategoriesFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/CategoriesFragment.java index 4904b5a..a4441fc 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/CategoriesFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/CategoriesFragment.java @@ -155,6 +155,9 @@ private class CategoriesLoader extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); + if (getActivity() == null) return; + if (getActivity().isFinishing()) return; + mProgress.setVisibility(View.VISIBLE); if (mAdapter != null) { diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/WallpaperSearchFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/WallpaperSearchFragment.java index 2e7d1bb..33a3bb2 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/WallpaperSearchFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/WallpaperSearchFragment.java @@ -151,14 +151,23 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public boolean onQueryTextChange(String string) { if (string.length() == 0) { clearAdapter(); + return false; + } + + if (mAsyncTask != null) { + mAsyncTask.cancel(true); } - return false; + + mAsyncTask = new WallpapersLoader(string.trim()) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + return true; } @Override public boolean onQueryTextSubmit(String string) { mSearchView.clearFocus(); - mAsyncTask = new WallpapersLoader(string.trim()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + mAsyncTask = new WallpapersLoader(string.trim()) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return true; } }); diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/CreditsFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/CreditsFragment.java index fbe383d..61c8630 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/CreditsFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/CreditsFragment.java @@ -72,10 +72,14 @@ public static void showCreditsDialog(FragmentManager fm, int type) { ft.remove(prev); } + ft.add(newInstance(type), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = CreditsFragment.newInstance(type); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @Override diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/FilterFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/FilterFragment.java index 4b8451c..bf3ff59 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/FilterFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/FilterFragment.java @@ -84,10 +84,14 @@ public static void showFilterDialog(FragmentManager fm, boolean isMuzei) { ft.remove(prev); } + ft.add(newInstance(isMuzei), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = FilterFragment.newInstance(isMuzei); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @NonNull diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/InAppBillingFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/InAppBillingFragment.java index 09e350c..b675275 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/InAppBillingFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/InAppBillingFragment.java @@ -77,10 +77,14 @@ public static void showInAppBillingDialog(@NonNull FragmentManager fm, @NonNull ft.remove(prev); } + ft.add(newInstance(key, productId), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = InAppBillingFragment.newInstance(key, productId); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @Override diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LanguagesFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LanguagesFragment.java index 52fb631..8641aee 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LanguagesFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LanguagesFragment.java @@ -66,10 +66,14 @@ public static void showLanguageChooser(@NonNull FragmentManager fm) { ft.remove(prev); } + ft.add(newInstance(), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = LanguagesFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @NonNull diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LicensesFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LicensesFragment.java index 46bcf4b..1c5cc63 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LicensesFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/LicensesFragment.java @@ -65,10 +65,14 @@ public static void showLicensesDialog(FragmentManager fm) { ft.remove(prev); } + ft.add(newInstance(), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = LicensesFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @NonNull diff --git a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/RefreshDurationFragment.java b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/RefreshDurationFragment.java index 516c404..5054d8a 100755 --- a/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/RefreshDurationFragment.java +++ b/library/src/main/java/com/dm/wallpaper/board/fragments/dialogs/RefreshDurationFragment.java @@ -76,10 +76,14 @@ public static void showRefreshDurationDialog(FragmentManager fm, int rotateTime, ft.remove(prev); } + ft.add(newInstance(rotateTime, isMinute), TAG) + .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + try { - DialogFragment dialog = RefreshDurationFragment.newInstance(rotateTime, isMinute); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) {} + ft.commit(); + } catch (IllegalStateException e) { + ft.commitAllowingStateLoss(); + } } @NonNull diff --git a/library/src/main/java/com/dm/wallpaper/board/utils/WallpaperDownloader.java b/library/src/main/java/com/dm/wallpaper/board/utils/WallpaperDownloader.java index 3baab8e..340becf 100755 --- a/library/src/main/java/com/dm/wallpaper/board/utils/WallpaperDownloader.java +++ b/library/src/main/java/com/dm/wallpaper/board/utils/WallpaperDownloader.java @@ -113,7 +113,12 @@ public void start() { DownloadManager downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); try { - downloadManager.enqueue(request); + if (downloadManager != null) { + downloadManager.enqueue(request); + return; + } + + LogUtil.e("Download: download manager is null"); } catch (IllegalArgumentException e) { LogUtil.e(Log.getStackTraceString(e)); return; diff --git a/library/src/main/res/raw/licenses.html b/library/src/main/res/raw/licenses.html index 48766ae..0f135c4 100755 --- a/library/src/main/res/raw/licenses.html +++ b/library/src/main/res/raw/licenses.html @@ -273,69 +273,5 @@ See the License for the specific language governing permissions and limitations under the License. - - -
-Copyright 2016 Javier Santos
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
- - -
-Copyright 2016 Javier Santos
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
- - -
-The MIT License (MIT)
-Copyright (c) 2016 Cüneyt Ayyıldız
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
\ No newline at end of file diff --git a/library/src/main/res/values-pl/dashboard_strings.xml b/library/src/main/res/values-pl/dashboard_strings.xml index 48435ab..46ffc8c 100755 --- a/library/src/main/res/values-pl/dashboard_strings.xml +++ b/library/src/main/res/values-pl/dashboard_strings.xml @@ -15,15 +15,24 @@ Szukaj Filtruj Zapisz na urządzeniu - Ustawienia tapety + Przytnij Tapetę + Ekran główny + Ekran blokady + Ekran główny i blokady ekranu + Sortuj według + Ostatnich + Najstarszych + Nazwy + Losowo Otwórz Zamknij Wyczyść Wspieram + Kopiuj - Menu - Tapnij tutaj lub przesuń palcem od lewej części ekranu, aby wysunąć menu + Menu nawigacyjne + Tapnij tutaj lub przesuń palcem od lewej części ekranu, aby wysunąć menu nawigacyjne Szukaj Tapnij tutaj, aby wyszukać tapety Filtruj tapety @@ -41,31 +50,40 @@ Tapnij tutaj, aby zapisać tło na swoim urządzeniu. Ustaw tapetę Tapnij tutaj, aby ustawić tło na głównym ekranie. + Tapeta w oryginalnym rozmiarze + Tapnij tutaj, aby wyświetlić podgląd tapety w oryginalnym rozmiarze - Nowa tapeta Sortuj według kategorii - Pobieranie tapety… - Tapeta o podanej nazwie %s już istnieje, chcesz ją zastąpić? - Zastąp - Utwórz nowy + Tapeta została pobrana + Pobieranie tapety … Nie można pobrać tapety - Pobieranie tapety anulowane - Tapeta pobrana do - Ładowanie tła… - Ustawianie tapety… + Ładowanie tła … + Ustawianie tapety … Tapeta ustawiona Nie można ustawić tapety Ustawianie tapety anulowane - Nie można pobrać danych z serwera - Ustaw jako tapetę - Przycięcie tapety będzie wyłączone, jeśli wybierzesz tą opcję. - Przycinanie - Odblokuj opcję przycięcia tapety, zostanie ona ustawiona zgodnie z aktualnym podglądem. Uszczypnij lub tapnij dwa razy, aby powiększyć podgląd. - Tło ekranu blokady - Ustaw tapetę na ekranie blokady oraz na ekranie głównym. - Tło ekranu blokady dostępne jedynie dla Androida Nougat %s dodano do ulubionych %s usunięto z ulubionych + Nie można pobrać danych z serwera + Nie można sprawdzić nowych tepet + Podgląd tapety w oryginalnej jakości + Ustaw tapetę + Zapisz tapetę + Przywrócono ulubione tapety + + Przeglądasz tapetę o mniejszej rozdzielczości, +która może wyglądać na rozmytą i pikselowaną. + Tapnij tą ikonkę, aby wyświetlić podgląd tapety w oryginalnym rozmiarze + Nie pokazuj ponownie + + Nazwa: %s + Autor: %s + Wymiary: %s + Format: %s + Rozmiar pliku: %s + Paleta kolorów + Kolor: %s + Kategoria Minuta Godzina @@ -94,19 +112,21 @@ Jasny lub ciemny Wybierz pomiędzy ciemnym bądź jasnym motywem Tapeta + Jakość podglądu tła + Słaba jakość + Wysoka jakość Miejsce zapisu tapet - Spróbuj najpierw pobrać chociaż jedną tapetę Język Inne - Kolorowa karta tapety Resetuj samouczek Resetowanie samouczka + Domyślne Wymagane uprawnienia do zapisywania tapet Dziękuję za dotację. Wykorzystam ją dobrze. - Sprawdzanie licencji… + Sprawdzanie licencji … Sprawdzanie licencji Licencja poprawna, dziękuję za pobranie aplikacji z Google Play. Sprawdzenie licencji się nie powiodło. Aplikacja nie została pobrana z Google Play. Nie będziesz mógł z niej korzystać. @@ -128,4 +148,21 @@ Otwórz Zamknij + Ustawienia tapety + + Nowa tapeta + Tapeta o podanej nazwie %s już istnieje, chcesz ją zastąpić? + Zastąp + Utwórz nowy + Pobieranie tapety anulowane + Tapeta pobrana do + Przycięcie tapety będzie wyłączone, jeśli wybierzesz tą opcję. + Przycinanie + Odblokuj opcję przycięcia tapety, zostanie ona ustawiona zgodnie z aktualnym podglądem. Uszczypnij lub tapnij dwa razy, aby powiększyć podgląd. + Tło ekranu blokady + Ustaw tapetę na ekranie blokady oraz na ekranie głównym. + Tło ekranu blokady dostępne jedynie dla Androida Nougat + Spróbuj najpierw pobrać chociaż jedną tapetę + Kolorowa karta tapety + Google+ diff --git a/library/src/main/res/values-tr/dashboard_strings.xml b/library/src/main/res/values-tr/dashboard_strings.xml index 2d25881..11dc21e 100755 --- a/library/src/main/res/values-tr/dashboard_strings.xml +++ b/library/src/main/res/values-tr/dashboard_strings.xml @@ -6,16 +6,32 @@ Ayarlar Hakkında Geliştiriciyi Destekle + + Uygulamayı Paylaş + Oyla & İncele Arama Filtre Cihaza Kaydet + + Duvar Kağıdını Kes + Anasayfa + Kilit Ekranı + Anasayfa & Kilit Ekranı + + Sırala + Sonuncu + Eskisi + İsim + Rasgele Kapat Temizle Bağış Yap + Kopyala + Gezinti Çekmecesi Gezinti çekmecesini açmak için buraya tıklayın veya ekranın sol tarafından kaydırın @@ -33,42 +49,76 @@ Duvar kağıdı ayarları "Duvar kağıdı ayarlarını açmak için buraya dokunun. Android Nougat'ta kilit ekranı duvar kağıdı olarak ayarlamayı veya duvar kağıdını kırpmayı etkinleştirin. " + Duvar kağıdını kaydet Daha sonra kullanmak üzere duvar kağıtlarını indirmek ve kaydetmek için buraya dokunun Duvar kağıdı olarak ayarla Duvar kağıdını ana ekran arkaplanı olarak ayarlamak için buraya dokunun + Duvar kağıdını orijinal boyutuna getir + Duvar kağıdı ortalamak için buraya dokunun + Kategoriye Göre Filtrele Duvar kağıdı indiriliyor ... Duvar kağıdı indirilemiyor + Duvar kağıdı yükleniyor ... Duvar kağıdı uygulanıyor Duvar kağıdı uygulandı Duvar kağıdı uygulanamıyor Duvar kağıdı uygulanması iptal edildi + %s favorilere eklendi %s favorilerden kaldırıldı + Sunucudan veri alınamıyor + Yeni duvar kağıtları kontrol edilemedi + + Duvar kağıdını orijinal boyutunda görüntüle Duvar kağıdını uygula + Duvar kağıdını kaydet + + Favori duvar kağıtları restore edildi + + Şu anda bulanık ve pikselli görünebilecek, daha küçük çözünürlüklü, duvar kağıdını önizliyorsunuz. + Tap this icon to previews wallpaper with original size + Tekrar gösterme + + İsim: %s + Sahip: %s + Çözünürlük: %s + Format: %s + Boyut: %s + Renk Paleti + Renk: %s + Kategori + Dakika Saat + Muzei Ayarları Kaydet Ayarlar Kaydedildi + Yenileme Süresi Her + Yalnızca Wifi Üzerinden Yenile Yalnızca cihaz Wifi üzerinden duvar kağıdı yükle + Kategori Seç Sadece seçilen kategorilerden duvar kağıdı yükle + Katkıda Bulunanlar Açık Kaynak Lisansları + Uygulama içi satın alma ürünleri yüklenemiyor + Veri & Önbellek Önbelleği Temizle @@ -76,19 +126,31 @@ Android Nougat'ta kilit ekranı duvar kağıdı olarak ayarlamayı veya duvar ka Önbellek Boyutu: %s Önbellek Silindi "Gerçekten önbelleği temizlemek istiyor musunuz? " + Tema Karanlık tema Aydınlık ve karanlık tema arasında geçiş yap + Duvar Kağıdı + Duvar Kağıdı Ön İzleme Kalitesi + Düşük Kalite + Yüksek Kalite Duvar Kağıdı Kayıt Yeri + Dil + Diğer Tanıtımı Sıfırla Tanıtım Sıfırlama + + Varsayılan + Duvar kağıdı kaydetmek için depolama izni gerekli + Bağış yaptığınız için teşekkür ediyorum. İyi işler için kullanacağım. + "Lisans kontrol ediliyor... " Lisans Kontrolü @@ -96,13 +158,16 @@ Android Nougat'ta kilit ekranı duvar kağıdı olarak ayarlamayı veya duvar ka "Lisans kontrolü başarısız, uygulamayı Play Store\'dan indirmemişsiniz. Uygulamayı kullanamazsınız. " Lisans kontrolü şu anda yapılamıyor. Lütfen, birkaç dakika sonra tekrar deneyin + \"%s\" için hiçbir sonuç bulunamadı + Çökme Raporu "Maalesef %s çöktü. Geliştiricinin sorunu çözmesine yardımcı olmak adına aşağıda rapor göndermeyi seçin. " Rapor Gönder Email İstemcisi Seçin + Wallpaper Boars Duvarkağıdı Uygulaması, Apache License 2.0 kapsamında android için açık kaynaklı duvar kağıdı uygulaması, GitHub\'da mevcut ve kullanımı ücretsizdir. Dani Mahardhika tarafından geliştirilmiştir. diff --git a/library/src/main/res/values/dashboard_languages.xml b/library/src/main/res/values/dashboard_languages.xml index dd22551..8a72cb0 100755 --- a/library/src/main/res/values/dashboard_languages.xml +++ b/library/src/main/res/values/dashboard_languages.xml @@ -6,6 +6,7 @@ English (United Kingdom) Bahasa Indonesia Bengali + Czech Dutch French German @@ -27,6 +28,7 @@ en_GB in_ID bn_IN + cs_CZ nl_NL fr_FR de_DE diff --git a/library/src/main/res/xml/dashboard_translator.xml b/library/src/main/res/xml/dashboard_translator.xml index 8732d6f..1cda1ae 100755 --- a/library/src/main/res/xml/dashboard_translator.xml +++ b/library/src/main/res/xml/dashboard_translator.xml @@ -158,4 +158,16 @@ image="https://lh3.googleusercontent.com/-oP9V50_no-E/AAAAAAAAAAI/AAAAAAAAAdg/zeWKUDW6zzw/s300-p-rw-no/photo.jpg" link="https://plus.google.com/u/1/118245545325192391591" /> + + + + \ No newline at end of file