Comments (5)
Some Logcat errors below
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: VolleyError com.android.volley.TimeoutError: null
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: com.android.volley.TimeoutError
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.NetworkUtility.shouldRetryException(NetworkUtility.java:162)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:145)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
05-12 22:30:52.972 1727 1727 D com.tcl.tv.util.Util: getTopPackage: org.jellyfin.androidtv
05-12 22:30:52.972 1727 1727 D com.tcl.tv.TVRootApp: checkShowDolby: mTopPackageName = org.jellyfin.androidtv
05-12 22:30:54.684 726 1788 W NotificationService: Toast already killed. pkg=org.jellyfin.androidtv token=android.os.BinderProxy@3192765
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: VolleyError com.android.volley.TimeoutError: null
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: com.android.volley.TimeoutError
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.NetworkUtility.shouldRetryException(NetworkUtility.java:162)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:145)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
05-12 22:30:52.507 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
05-12 22:30:52.972 1727 1727 D com.tcl.tv.util.Util: getTopPackage: org.jellyfin.androidtv
05-12 22:30:52.972 1727 1727 D com.tcl.tv.TVRootApp: checkShowDolby: mTopPackageName = org.jellyfin.androidtv
05-12 22:30:54.684 726 1788 W NotificationService: Toast already killed. pkg=org.jellyfin.androidtv token=android.os.BinderProxy@3192765
Another part of erros, not sure they are all there
05-12 22:32:19.520 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: VolleyError com.android.volley.TimeoutError: null
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: com.android.volley.TimeoutError
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.NetworkUtility.shouldRetryException(NetworkUtility.java:162)
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:145)
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
05-12 22:32:22.521 1580 1580 E jellyfin-apiclient: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
05-12 22:32:32.634 1580 1679 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
Logcat had this while it crashed. I think I copied it all.
05-12 22:33:48.616 975 1288 I TGuardMemoryManagerMemoryStrategy: current top app is :org.jellyfin.androidtv
05-12 22:33:48.617 975 1288 I TGuardMemoryManagerMemoryInfoManager: org.jellyfin.androidtv avgPss is 121732 predictSize is 73728
05-12 22:33:48.617 975 1288 I TGuardMemoryManagerMemoryStrategy: org.jellyfin.androidtv need memory is 0
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: HTTP request timed out
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: io.ktor.client.features.HttpRequestTimeoutException: Request timeout has expired [url=http://url/Users/f0c73868-f5a1-416d--8f04-dd338, request_timeout=30000 ms]
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at io.ktor.client.features.HttpTimeout$Feature$install$1$1$killer$1.invokeSuspend(HttpTimeout.kt:149)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
05-12 22:33:49.615 1580 1679 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
05-12 22:33:49.617 1580 1679 E BaseRowItem$refresh: org.jellyfin.sdk.api.client.exception.TimeoutException: HTTP request timed out
05-12 22:33:49.617 1580 1679 E BaseRowItem$refresh: at org.jellyfin.sdk.api.client.KtorClient.request$suspendImpl(KtorClient.kt:117)
05-12 22:33:49.617 1580 1679 E BaseRowItem$refresh: at org.jellyfin.sdk.api.client.KtorClient$request$1.invokeSuspend(Unknown Source:19)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: HTTP request timed out
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: io.ktor.client.features.HttpRequestTimeoutException: Request timeout has expired [url=http://url/Users/80c77af/Items/Resume?limit=50&fields=PrimaryImageAspectRatio&fields=Overview&fields=ItemCounts&fields=DisplayPreferencesId&fields=ChildCount&mediaTypes=Video&imageTypeLimit=1&enableTotalRecordCount=false&enableImages=true&excludeActiveSessions=false, request_timeout=30000 ms]
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at io.ktor.client.features.HttpTimeout$Feature$install$1$1$killer$1.invokeSuspend(HttpTimeout.kt:149)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
05-12 22:33:51.120 1580 1580 D org.jellyfin.sdk.api.client.KtorClient: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
05-12 22:33:51.125 1580 1580 E ACRA : ACRA caught a TimeoutException for org.jellyfin.androidtv
05-12 22:33:51.125 1580 1580 E ACRA : org.jellyfin.sdk.api.client.exception.TimeoutException: HTTP request timed out
05-12 22:33:51.125 1580 1580 E ACRA : at org.jellyfin.sdk.api.client.KtorClient.request$suspendImpl(KtorClient.kt:117)
05-12 22:33:51.125 1580 1580 E ACRA : at org.jellyfin.sdk.api.client.KtorClient$request$1.invokeSuspend(Unknown Source:19)
05-12 22:33:51.224 1580 1580 D ACRA : Finished class org.jellyfin.androidtv.ui.browsing.MainActivity
05-12 22:33:51.225 1580 1580 D ACRA : Writing crash report file /data/user/0/org.jellyfin.androidtv/app_ACRA-unapproved/2024-05-12T22:33:51.182+10:00.stacktrace
05-12 22:33:51.717 726 766 W ActivityTaskManager: Activity top resumed state loss timeout for ActivityRecord{9033da3 u0 org.jellyfin.androidtv/.ui.browsing.MainActivity t564 f}}
05-12 22:33:51.723 726 766 W ActivityTaskManager: Activity pause timeout for ActivityRecord{9033da3 u0 org.jellyfin.androidtv/.ui.browsing.MainActivity t564 f}}
05-12 22:33:54.756 726 944 W NotificationService: Toast already killed. pkg=org.jellyfin.androidtv token=android.os.BinderProxy@c7323b6
05-12 22:33:54.843 1580 1580 D ACRA : Loaded plugin from class : class org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory
05-12 22:33:54.844 1580 1580 D ACRA : reportSenderFactories : [org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory@c6ed226]
05-12 22:33:54.844 1580 1580 D ACRA : Adding reportSender : org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSender@e9b3e67
05-12 22:33:54.848 726 943 W ActivityManager: forbid bind service ComponentInfo{org.jellyfin.androidtv/org.acra.sender.JobSenderService}
05-12 22:33:54.848 726 968 W TclAppBoot: [TclAppBootManagerImpl]:TclAppBootInfo{callerPkgName = 'android',callerFlag = '786449',calleePkgName = 'org.jellyfin.androidtv',calleeComponent = 'org.jellyfin.androidtv/org.acra.sender.JobSenderService',calleeFlag = '786448',bootType = 'bind_service_form_job',broadcastAction = '',time = '1715517234848',isAutoStart = 'true',isAllow = 'false',reason = 'callee_does't_have_OP_AUTO_START_permission.',count = '1'}
05-12 22:33:54.848 726 943 D JobScheduler: Error executing JobStatus{7bd3824 #u0a86/0 org.jellyfin.androidtv/org.acra.sender.JobSenderService u=0 s=10086 TIME=none:-2ms READY}
05-12 22:33:54.849 1580 1580 D ACRA : Loaded plugin from class : class org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory
05-12 22:33:54.850 1580 1580 D ACRA : reportSenderFactories : [org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory@fc72414]
05-12 22:33:54.850 1580 1580 D ACRA : Adding reportSender : org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSender@40a4bd
05-12 22:33:55.033 726 944 I ActivityManager: Process org.jellyfin.androidtv (pid 1580) early provider death
05-12 22:33:55.033 726 944 I ActivityManager: Process org.jellyfin.androidtv (pid 1580) has died: fg BTOP
05-12 22:33:55.037 975 1083 W TGuardMemoryManagerPackageRecord: skipped save pss as zero pkg:org.jellyfin.androidtv
05-12 22:33:55.039 726 944 W InputDispatcher: Attempted to unregister already unregistered input channel '1491ecc org.jellyfin.androidtv/org.jellyfin.androidtv.ui.browsing.MainActivity (server)'
05-12 22:33:55.067 726 944 D ProcessStartManager: onStartProcess targetProcessName:org.jellyfin.androidtvapplication processName : org.jellyfin.androidtv ,type: 3 ,tbr: null
05-12 22:33:55.075 726 726 W ActivityManager: forbid bind service ComponentInfo{org.jellyfin.androidtv/org.acra.sender.JobSenderService}
05-12 22:33:55.075 726 726 D JobScheduler: Error executing JobStatus{7bd3824 #u0a86/0 org.jellyfin.androidtv/org.acra.sender.JobSenderService u=0 s=10086 TIME=none:-229ms READY}
05-12 22:33:55.081 726 968 W TclAppBoot: [TclAppBootManagerImpl]:TclAppBootInfo{callerPkgName = 'android',callerFlag = '262161',calleePkgName = 'org.jellyfin.androidtv',calleeComponent = 'org.jellyfin.androidtv/org.acra.sender.JobSenderService',calleeFlag = '0',bootType = 'bind_service_form_job',broadcastAction = '',time = '1715517235075',isAutoStart = 'true',isAllow = 'false',reason = 'callee_does't_have_OP_AUTO_START_permission.',count = '1'}
05-12 22:33:55.099 726 777 I ActivityManager: Start proc 2595:org.jellyfin.androidtv/u0a86 for content provider {org.jellyfin.androidtv/org.jellyfin.androidtv.integration.provider.ImageProvider}
05-12 22:33:55.129 3715 3715 I AvrcpMediaPlayerList: onMediaKeyEventSessionChanged: packageName=org.jellyfin.androidtv
05-12 22:33:55.129 3715 3715 W AvrcpMediaPlayerList: org.jellyfin.androidtv is already the active player
05-12 22:33:55.130 726 752 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ LISTEN id=288, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&FOREGROUND Uid: 10086 AdministratorUids: [] RequestorUid: 10086 RequestorPackageName: org.jellyfin.androidtv] ], android.os.BinderProxy@da88fcb)
05-12 22:33:55.133 3715 3715 W AvrcpMediaPlayerWrapper: The session was destroyed org.jellyfin.androidtv
05-12 22:33:55.133 3715 3715 D AvrcpMediaPlayerList: sessionUpdatedCallback(): packageName: org.jellyfin.androidtv
05-12 22:33:55.134 3715 3715 D AvrcpMediaPlayerList: Removing media player org.jellyfin.androidtv
05-12 22:33:55.134 3715 3715 D AvrcpMediaPlayerList: org.jellyfin.androidtv doesn't have a browse service. Recycle player ID.
05-12 22:33:55.181 726 726 W ActivityManager: forbid bind service ComponentInfo{org.jellyfin.androidtv/org.acra.sender.JobSenderService}
05-12 22:33:55.181 726 968 W TclAppBoot: [TclAppBootManagerImpl]:TclAppBootInfo{callerPkgName = 'android',callerFlag = '262161',calleePkgName = 'org.jellyfin.androidtv',calleeComponent = 'org.jellyfin.androidtv/org.acra.sender.JobSenderService',calleeFlag = '16',bootType = 'bind_service_form_job',broadcastAction = '',time = '1715517235181',isAutoStart = 'true',isAllow = 'false',reason = 'callee_does't_have_OP_AUTO_START_permission.',count = '1'}
05-12 22:33:55.181 726 726 D JobScheduler: Error executing JobStatus{7bd3824 #u0a86/0 org.jellyfin.androidtv/org.acra.sender.JobSenderService u=0 s=10086 TIME=none:-335ms READY}
05-12 22:33:55.265 2595 2595 I ActivityTaskManager: isPreloadSplashApp = org.jellyfin.androidtv
05-12 22:33:55.282 2595 2595 D ACRA : ACRA processName='org.jellyfin.androidtv'
05-12 22:33:55.286 2595 2595 I ACRA : ACRA is enabled for org.jellyfin.androidtv, initializing...
05-12 22:33:55.420 2595 2595 I TetheringManager: registerTetheringEventCallback:org.jellyfin.androidtv
05-12 22:33:55.478 2595 2595 I org.jellyfin.sdk.api.client.KtorClient: GET http://url/Branding/Configuration
05-12 22:33:55.510 2595 2595 D ACRA : ACRA processName='org.jellyfin.androidtv'
05-12 22:33:55.516 726 944 D BMS-BlockMonitorManagerService: attach caller is org.jellyfin.androidtv ,pid is 2595
05-12 22:33:55.532 2333 2333 W Glide : Load failed for [content://org.jellyfin.androidtv.integration.provider.ImageProvider?src=http%3A%2F%2F192.168.68.252%3A8096%2FItems%2F3f9b0f3a-ebad-e7df-c190-c92bad9f4ed0%2FImages%2FPrimary%3Fwidth%3D544%26height%3D306%26tag%3D46bec0e8f296ee3209a54d271b3e6c83%26format%3DWebp&v=0.16.10] with dimensions [384x216]
05-12 22:33:55.554 2595 2635 D ACRA : Loaded plugin from class : class org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory
05-12 22:33:55.555 2595 2635 D ACRA : reportSenderFactories : [org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory@5fe061c]
05-12 22:33:55.555 2595 2635 D ACRA : Adding reportSender : org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSender@8ad5225
05-12 22:33:55.562 726 944 W ActivityManager: forbid bind service ComponentInfo{org.jellyfin.androidtv/org.acra.sender.JobSenderService}
05-12 22:33:55.562 726 968 W TclAppBoot: [TclAppBootManagerImpl]:TclAppBootInfo{callerPkgName = 'android',callerFlag = '786449',calleePkgName = 'org.jellyfin.androidtv',calleeComponent = 'org.jellyfin.androidtv/org.acra.sender.JobSenderService',calleeFlag = '524304',bootType = 'bind_service_form_job',broadcastAction = '',time = '1715517235561',isAutoStart = 'true',isAllow = 'false',reason = 'callee_does't_have_OP_AUTO_START_permission.',count = '1'}
05-12 22:33:55.562 726 944 D JobScheduler: Error executing JobStatus{f575a9f #u0a86/0 org.jellyfin.androidtv/org.acra.sender.JobSenderService u=0 s=10086 TIME=none:-3ms READY}
05-12 22:33:55.562 2595 2635 D ACRA : Loaded plugin from class : class org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory
05-12 22:33:55.564 2595 2635 D ACRA : reportSenderFactories : [org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSenderFactory@e716ffa]
05-12 22:33:55.564 2595 2635 D ACRA : Adding reportSender : org.jellyfin.androidtv.telemetry.TelemetryService$AcraReportSender@bc709ab
05-12 22:34:01.068 2595 2652 D ProfileInstaller: Skipping profile installation for org.jellyfin.androidtv
05-12 22:34:06.022 2595 2595 W System.err: at org.jellyfin.androidtv.integration.provider.ImageProvider.writeDrawable(ImageProvider.kt:60)
05-12 22:34:06.022 2595 2595 W System.err: at org.jellyfin.androidtv.integration.provider.ImageProvider.access$writeDrawable(ImageProvider.kt:19)
05-12 22:34:06.022 2595 2595 W System.err: at org.jellyfin.androidtv.integration.provider.ImageProvider$openFile$lambda$2$$inlined$target$default$1.onError(ImageRequest.kt:1059)
05-12 22:34:16.547 726 962 D FreezeManager: before doFreeze 2595 pro org.jellyfin.androidtv
05-12 22:34:16.548 726 962 D FreezeManager: doFreeze 2595 pro org.jellyfin.androidtv res true
I notice org.jellyfin.sdk.api.client.exception.TimeoutException: HTTP request timed out
client and server not talking to each other quick enough? it's being a bit slow right now since it's scanning (didn't really happen before update). Your thoughts?@nielsvanvelzen
from jellyfin-androidtv.
The app crashed because your server is not responding, it then failed to upload the crash logs because your server is not responding.
from jellyfin-androidtv.
Can the app store the crash log for when the server responds?
from jellyfin-androidtv.
Yes it should retry when you re-open the app
from jellyfin-androidtv.
That doesn't seem to be happening.
from jellyfin-androidtv.
Related Issues (20)
- Can we add a bullet comments feature? HOT 1
- add Jellyfin as Youtube option HOT 1
- Time Sensitive Seeking
- Jellyfin app fails to start sometimes in Chromecast. Null pointer exception in logs HOT 4
- Quick connect code displayed in reverse on rtl languages HOT 5
- App shows sensitive screenshots on add user page before login has occured. HOT 2
- AndroidTV App Crashes Randomly on Playback HOT 3
- skip login for accounts with no password HOT 1
- Option for preferred login method HOT 1
- Publish Android TV client on Jio Store HOT 3
- TV doesn't support music lyrics HOT 3
- (AAC) Audio channel not supported anymore. HOT 1
- Play Movie encode in AV1 with DV not detect DV
- Occasional crash when starting Jellyfin on NVIDIA Shield Pro
- Allow changing seek duration HOT 4
- Scrubbing HOT 6
- Next Up dialog should pop up at the end credit start instead end of the whole video ie like netflix HOT 6
- Playback on Chromecast stuttering with specific titles HOT 5
- Forced (Foreign) Subtitles ignores the language preference on android tv 0.16.10 since version 10.9.2 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jellyfin-androidtv.