Skip to content

Commit

Permalink
Main merge for 1.1.0 release (#67)
Browse files Browse the repository at this point in the history
* Fix layout for mac

* Updated login error messages with new behavior for User Login on OpenTera.

* Removed references to qt5_use_modules.

* Refs #25. Work in progress to plan future sessions.

* Refs #25. Future sessions can now be planned.

* Refs #25. Updated new session time.

* Added minimal support for Dance Service.

* Fixed bug when starting a new session and wrongly offering to continue a session, but not of the currently selected type.

* Refs #58. Initial dashboard widget

* Refs #58. Working upcoming sessions in Dashboard view.

* Refs #58. Added recent participants (based on last update date) in Dashboard

* Refs #38. Added elements that require attention in the dashboard and added tools to properly manage them.

* Closes #40. Implemented Drag & Drop behavior in ProjectNavigator.

* Refs #40. Fixed path for ProjectNavigatorTree

* Refs #59. Added DanceConfigWidget and basic integration.

* Added user token management (storage, querying, management) for calls to APIs that require such a token.

* Refactored Com Managers to add a base class (BaseComManager) to prevent duplicate codes when creating managers for different services.

* Refs #59. Work in progress to build the Dance Service config widget...

* Updated FileUploaderDialog to allow to select multiple files at once.

* Refactored file structure and created a general TransferringFile class as a basis for both uploads and downloads.

* Refs #59. Fixed bug introduced in ParticipantWidget that prevented creation of new participant.

* Refs #59. Added video upload for Dance Service Widget and reworked UI to
improve file transfers in general (uploads and downloads)

* Refs #1 Improved ParticipantWidget responsiveness when loading large
number of sessions.
Fixed issue when the "Add participant" button was not enabled when not
directly clicking on the item in the tree view.
Fixed linking error on Linux with QtWebEngine.

* Refs #59 Work in progress on DanceConfigWidget.

* Refs #59. Added session type in DanceConfigWidget. Working playlist
saving.

* Refs #1. Fixed bug where UI was hanging while loading sessions in
ParticipantWidget

* Refs #59 Allowed to add multiple times a video in a playlist, working
"cancel" button.

* Refs #59 Fixed issue when received session types when no participant
uuid

* Refs #1 Revised SessionWidget in preparation for assets integration.

* Refs #33. Added icons for various asset types.

* Refs #33. Work started on AssetsWidget to improve assets view and
management

* Refs #1. Moved operation result messages to standalone widget

* Refs #1. Added ResultMessageWidget to DanceConfigWidget

* Refs #33. Querying more informations about assets from related services.

* Refs #33. Work in progress for asset display: now properly managing the "New" button.

* Fixed crash when deleting a session with the bottom button (!)

* Refs #33. Work in progress to upload a file in the AssetsWidget

* Refs #33. New file upload to FileTransferService working

* Refs #33. Added newly created asset in AssetsWidget

* Refs #33. Asset deletion now working.

* Refs #33. Work in progress to limit the number of uploads / downloads occurring simultaneously

* Refs #33. Managed transferring files states in TransferProgressDialog

* Refs #33. Updated assets access token with new structure. Added access
token automatic refresh.

* Refs #33. Added assets download feature

* Refs #33. Added asset browser for participant

* Refs #33. Working "Download All" for all participant assets in Assets
Browser view.

* Improved software version detection

* Refs #33. Manage assets access token change while downloads are pending.

* Refs #1. Various bug fixes and user permissions adjustments (such as
allowing users to see system services but not assign them to projects).

* Building plugins only for Windows

* Refs #33. Managed downloading file in batch when the file was already existing (appended a number to the filename).

* Refs #33. Improved behavior when handling large amount of assets.

* Refs #33. Adjusted assets managements with a token per asset, improved file transfer behavior.

* Fixed unknown escape sequence warning in regexp expression used to filter
file names

* Refs #61. Work in progress to manage site-service association.

* Refs #61. Working site-service association.

* Refs #59. Moved Dance Service config tab in ProjectWidget

* Refs #62. Added implementation of Device-Site management

* Refs #64. Work in progress on SessionTypeWidget.

* Refs #64. SessionTypeWidget working. Work in progress on SiteWidget and
ProjectWidget

* Refs #64. Working site-session type association and widgets.

* Refs #60. Added session type selection when creating a new project.
Correctly selected item in the project navigator when a deletion occurred.

* Refs #1. Various UI revision and bug fixes.

* Refs #62. Added missing UI to select devices for a project
Refs #1. General UI improvement.

* Refs #1. General UI improvements (including more options to create participants)

* Refs #1. Updated QMenu stylesheet

* Refs #33. Fixed issue where adding new file in session was not showing.

* Refs #66. General fixes and improvements.

* Refs #66. Various bug fixes and UI improvements, including access level issues

* Refs #66. Adjusted ConfigWidget grid size.

* Refs #66. Fixed Drag & Drop when changing participant project.

* Refs #12. Updated translations & added some screenshots.

* Update README.md

* Refs #66. Fixed compilation issue in release.

* Refs #66. Fixed delete button being disabled when not supposed to in ProjectNavigator

* Refs #66. Removed "New participant" options when creating new project

* Refs #66. Fixed issue when deleting a project / participant, and then creating new ones.

* Refs #66. Fixed Mac OS minimum version

* Update README.md

Co-authored-by: Dominic Létourneau <doumdi@gmail.com>
  • Loading branch information
SBriere and doumdi authored Mar 23, 2022
1 parent ee9f68d commit 7250762
Show file tree
Hide file tree
Showing 249 changed files with 21,048 additions and 8,147 deletions.
14 changes: 12 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
if (APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum OS X deployment version")
endif(APPLE)

project(OpenTeraPlus)

include(CTest)
Expand All @@ -12,8 +16,8 @@ cmake_policy(SET CMP0043 NEW)

# Software version
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "4")
SET(CPACK_PACKAGE_VERSION_MINOR "1")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
add_definitions(-DOPENTERAPLUS_VERSION="${CPACK_PACKAGE_VERSION}" )
add_definitions(-DOPENTERAPLUS_VERSION_MAJOR="${CPACK_PACKAGE_VERSION_MAJOR}" )
Expand All @@ -36,6 +40,12 @@ if (APPLE)
set(CMAKE_INSTALL_INCLUDEDIR OpenTeraPlus.app/Contents/Helpers)
endif(APPLE)

if (UNIX AND NOT APPLE)
# Fix QWebEngine linking issues on Linux (https://bugreports.qt.io/browse/QTBUG-80964)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
endif(UNIX)


set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_STANDARD 11)
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,23 @@ OpenTeraPlus is a client that works with [OpenTera Server](https://github.com/in
* Device configuration editing
* Services managements
* Edit configuration
* Assets managements
* View and download assets related to a session
* Video / tele rehabilitation sessions
* Create and manage video sessions, with a focus on telerehabilitation
* ... and more!

# Screenshots
Coming soon!
<table><tr>
<td><img src="docs/screenshots/LoginScreen.png" width="100" alt="Login Screen" title="Login Screen"></td>
<td><img src="docs/screenshots/ProjectNavigator.png" width="100" alt="Project Navigator" title="Project Navigator"></td>
<td><img src="docs/screenshots/Participant.png" width="100" alt="Participant Viewer" title="Participant Viewer"></td>
<td><img src="docs/screenshots/SessionLobby.png" width="100" alt="Session Lobby" title="Session Lobby"></td>
<td><img src="docs/screenshots/AdminConfig.png" width="100" alt="Admin configuration" title="Admin configuration"></td>
</tr></table>

# Video
[![OpenTera+ Clinical Telehealth Software](https://img.youtube.com/vi/4YMKSUE6xJs/maxresdefault.jpg)](https://youtu.be/4YMKSUE6xJs)

# License
OpenTeraPlus is licensed under [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html)
1 change: 0 additions & 1 deletion client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
find_package(Qt5Core REQUIRED)


add_subdirectory(resources)
add_subdirectory(src)

184 changes: 97 additions & 87 deletions client/resources/TeraClient.qrc
Original file line number Diff line number Diff line change
@@ -1,126 +1,136 @@
<RCC>
<qresource prefix="/">
<file>logos/Estrad.png</file>
<file>logos/IntRoLab.png</file>
<file>logos/logo_CDRV.png</file>
<file>status/calling.gif</file>
<file>status/connecting.gif</file>
<file>status/loading.gif</file>
<file>status/status_incomplete.png</file>
<file>status/status_notok.png</file>
<file>status/status_ok.png</file>
<file>status/warning.png</file>
<file>TeRA_Background.png</file>
<file>controls/blue_button.png</file>
<file>controls/blue_button_pressed.png</file>
<file>controls/branch_closed.png</file>
<file>controls/branch_left.png</file>
<file>controls/branch_opened.png</file>
<file>controls/branch_up.png</file>
<file>controls/check2_off.png</file>
<file>controls/check2_off_disabled.png</file>
<file>controls/check2_on.png</file>
<file>controls/check2_on_disabled.png</file>
<file>controls/check_off.png</file>
<file>controls/check_off_disabled.png</file>
<file>controls/check_on.png</file>
<file>controls/check_on_disabled.png</file>
<file>controls/green_button.png</file>
<file>controls/grey_button.png</file>
<file>controls/radio-off.png</file>
<file>controls/radio-on.png</file>
<file>controls/red_button.png</file>
<file>controls/yellow_button.png</file>
<file>defaults/OpenTeraPlus.json</file>
<file>icons/OpenTeraPlus.ico</file>
<file>icons/assets/audio.png</file>
<file>icons/assets/binary.png</file>
<file>icons/assets/database.png</file>
<file>icons/assets/document.png</file>
<file>icons/assets/encrypted.png</file>
<file>icons/assets/generic.png</file>
<file>icons/assets/graph.png</file>
<file>icons/assets/icon_source.txt</file>
<file>icons/assets/image.png</file>
<file>icons/assets/json.png</file>
<file>icons/assets/list.png</file>
<file>icons/assets/pdf.png</file>
<file>icons/assets/sensor.png</file>
<file>icons/assets/unknown.png</file>
<file>icons/assets/video.png</file>
<file>icons/assets/web.png</file>
<file>icons/assets/zip.png</file>
<file>icons/config.png</file>
<file>icons/copy.png</file>
<file>icons/dashboard.png</file>
<file>icons/data.png</file>
<file>icons/data_sensor.png</file>
<file>icons/delete.png</file>
<file>icons/delete_old.png</file>
<file>icons/details.png</file>
<file>icons/device.png</file>
<file>icons/device_installed.png</file>
<file>icons/device_installed_busy.png</file>
<file>icons/device_online.png</file>
<file>icons/device_online_busy.png</file>
<file>icons/download.png</file>
<file>icons/edit.png</file>
<file>icons/email.png</file>
<file>icons/error.png</file>
<file>icons/error2.png</file>
<file>icons/filter.png</file>
<file>icons/group.png</file>
<file>icons/group_add.png</file>
<file>icons/group_delete.png</file>
<file>icons/history.png</file>
<file>icons/info.png</file>
<file>icons/join.png</file>
<file>icons/kit.png</file>
<file>icons/leave.png</file>
<file>icons/lock.png</file>
<file>icons/log.png</file>
<file>icons/navtree.png</file>
<file>icons/new.png</file>
<file>icons/ok.png</file>
<file>icons/ok2.png</file>
<file>icons/options.png</file>
<file>icons/password.png</file>
<file>icons/patient.png</file>
<file>icons/patient_installed.png</file>
<file>icons/patient_installed_busy.png</file>
<file>icons/patient_online.png</file>
<file>icons/patient_online_busy.png</file>
<file>icons/play.png</file>
<file>icons/project-icon.png</file>
<file>icons/project.png</file>
<file>icons/random.png</file>
<file>icons/record.png</file>
<file>icons/record_stop.png</file>
<file>icons/refresh.png</file>
<file>icons/save.png</file>
<file>icons/search.png</file>
<file>icons/sensors.png</file>
<file>icons/server.png</file>
<file>icons/service.png</file>
<file>icons/session.png</file>
<file>icons/session_offline.png</file>
<file>icons/session_offline_warning.png</file>
<file>icons/session_online.png</file>
<file>icons/session_online_warning.png</file>
<file>icons/session_pause.png</file>
<file>icons/session_warning.png</file>
<file>icons/session_type.png</file>
<file>icons/site-icon.png</file>
<file>icons/site.png</file>
<file>icons/smile.png</file>
<file>icons/software_user.png</file>
<file>icons/software_user_offline_busy.png</file>
<file>icons/software_user_online.png</file>
<file>icons/software_user_online_busy.png</file>
<file>icons/stop.png</file>
<file>icons/test.png</file>
<file>icons/test_add.png</file>
<file>icons/test_lock.png</file>
<file>icons/test_unlock.png</file>
<file>icons/undo.png</file>
<file>icons/unlock.png</file>
<file>icons/upload.png</file>
<file>icons/user_info.png</file>
<file>icons/usergroup.png</file>
<file>icons/warning.png</file>
<file>TeRA_Background.png</file>
<file>icons/error.png</file>
<file>icons/ok.png</file>
<file>icons/site.png</file>
<file>icons/device.png</file>
<file>icons/project.png</file>
<file>icons/device_installed.png</file>
<file>icons/device_online.png</file>
<file>stylesheet.qss</file>
<file>icons/info.png</file>
<file>icons/navtree.png</file>
<file>icons/history.png</file>
<file>icons/config.png</file>
<file>icons/dashboard.png</file>
<file>icons/details.png</file>
<file>icons/password.png</file>
<file>icons/server.png</file>
<file>icons/email.png</file>
<file>controls/check_off.png</file>
<file>controls/check_on.png</file>
<file>controls/check2_off_disabled.png</file>
<file>controls/check2_off.png</file>
<file>controls/check2_on_disabled.png</file>
<file>controls/check2_on.png</file>
<file>controls/check_on_disabled.png</file>
<file>controls/check_off_disabled.png</file>
<file>icons/download.png</file>
<file>icons/session_type.png</file>
<file>icons/service.png</file>
<file>icons/stop.png</file>
<file>status/session_loading.gif</file>
<file>icons/software_user_online.png</file>
<file>controls/radio-off.png</file>
<file>controls/radio-on.png</file>
<file>translations/openteraplus_en.qm</file>
<file>translations/openteraplus_fr.qm</file>
<file>icons/play.png</file>
<file>icons/view_off.png</file>
<file>icons/view_on.png</file>
<file>status/status_unknown.png</file>
<file>status/status_online.png</file>
<file>status/status_offline.png</file>
<file>icons/warning.png</file>
<file>logos/Estrad.png</file>
<file>logos/IntRoLab.png</file>
<file>logos/LogoOpenTeraPlus.png</file>
<file>logos/logo_CDRV.png</file>
<file>sounds/notify_invite.wav</file>
<file>sounds/notify_offline.wav</file>
<file>sounds/notify_online.wav</file>
<file>status/calling.gif</file>
<file>status/connecting.gif</file>
<file>status/loading.gif</file>
<file>status/session_loading.gif</file>
<file>status/status_busy.png</file>
<file>icons/software_user_offline_busy.png</file>
<file>icons/software_user_online_busy.png</file>
<file>icons/device_installed_busy.png</file>
<file>icons/device_online_busy.png</file>
<file>icons/patient_installed_busy.png</file>
<file>icons/ok2.png</file>
<file>icons/join.png</file>
<file>icons/leave.png</file>
<file>icons/error2.png</file>
<file>icons/smile.png</file>
<file>defaults/OpenTeraPlus.json</file>
<file>sounds/notify_invite.wav</file>
<file>icons/random.png</file>
<file>logos/LogoOpenTeraPlus.png</file>
<file>icons/OpenTeraPlus.ico</file>
<file>icons/record.png</file>
<file>icons/record_stop.png</file>
<file>controls/green_button.png</file>
<file>controls/grey_button.png</file>
<file>controls/red_button.png</file>
<file>controls/yellow_button.png</file>
<file>controls/blue_button.png</file>
<file>controls/blue_button_pressed.png</file>
<file>status/status_incomplete.png</file>
<file>status/status_notok.png</file>
<file>status/status_offline.png</file>
<file>status/status_ok.png</file>
<file>status/status_online.png</file>
<file>status/status_unknown.png</file>
<file>status/warning.png</file>
<file>stylesheet.qss</file>
<file>icons/group_new.png</file>
<file>icons/patient_new.png</file>
<file>icons/project_new.png</file>
<file>translations/openteraplus_en.qm</file>
<file>translations/openteraplus_fr.qm</file>
</qresource>
</RCC>
Binary file added client/resources/icons/assets/audio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/binary.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/database.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/document.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/encrypted.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/generic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/graph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions client/resources/icons/assets/icon_source.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Papirus Mimetypes Icons by Papirus Development Team
https://github.com/PapirusDevelopmentTeam/papirus-icon-theme
Binary file added client/resources/icons/assets/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/json.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/list.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/pdf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/sensor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/unknown.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/video.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/web.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/resources/icons/assets/zip.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/config.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed client/resources/icons/data_sensor.png
Binary file not shown.
Binary file removed client/resources/icons/delete.png
Binary file not shown.
Binary file modified client/resources/icons/delete_old.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/device.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/device_installed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/device_installed_busy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/device_online.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/device_online_busy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/resources/icons/download.png
Binary file modified client/resources/icons/group.png
Binary file removed client/resources/icons/group_add.png
Diff not rendered.
Binary file removed client/resources/icons/group_delete.png
Diff not rendered.
Binary file added client/resources/icons/group_new.png
Binary file modified client/resources/icons/kit.png
Binary file modified client/resources/icons/log.png
Binary file modified client/resources/icons/new.png
Binary file modified client/resources/icons/options.png
Binary file modified client/resources/icons/password.png
Binary file modified client/resources/icons/patient.png
Binary file modified client/resources/icons/patient_installed.png
Binary file modified client/resources/icons/patient_installed_busy.png
Binary file added client/resources/icons/patient_new.png
Binary file modified client/resources/icons/patient_online.png
Binary file modified client/resources/icons/patient_online_busy.png
Binary file added client/resources/icons/project-icon.png
Binary file modified client/resources/icons/project.png
Binary file added client/resources/icons/project_new.png
Binary file modified client/resources/icons/save.png
Binary file modified client/resources/icons/server.png
Binary file modified client/resources/icons/service.png
Binary file removed client/resources/icons/session_offline.png
Diff not rendered.
Binary file removed client/resources/icons/session_offline_warning.png
Diff not rendered.
Binary file removed client/resources/icons/session_online.png
Diff not rendered.
Binary file removed client/resources/icons/session_online_warning.png
Diff not rendered.
Binary file removed client/resources/icons/session_pause.png
Diff not rendered.
Binary file modified client/resources/icons/session_type.png
Binary file removed client/resources/icons/session_warning.png
Diff not rendered.
Binary file added client/resources/icons/site-icon.png
Binary file modified client/resources/icons/site.png
Binary file modified client/resources/icons/software_user.png
Binary file modified client/resources/icons/software_user_installed.png
Binary file modified client/resources/icons/software_user_offline_busy.png
Binary file modified client/resources/icons/software_user_online.png
Binary file modified client/resources/icons/software_user_online_busy.png
Binary file removed client/resources/icons/test_add.png
Diff not rendered.
Binary file removed client/resources/icons/test_lock.png
Diff not rendered.
Binary file removed client/resources/icons/test_unlock.png
Diff not rendered.
Binary file added client/resources/icons/upload.png
Binary file modified client/resources/icons/usergroup.png
Loading

0 comments on commit 7250762

Please sign in to comment.