S60 3rd Edition: Application Development
The S60 platform is the world's leading smartphone software platform, offering a feature-rich software base for phones with advanced data capabilities. The S60 platform supports multitasking between applications and provides the user interfaces for switching between running applications and starting new ones while others are running.
This document is targeted at application developers, content providers, system architects, specification writers, requirement managers, product managers, and those who either use the S60 platform directly or plan for applications using its features.
This document is an introduction to the S60 platform. It mainly focuses on the some of the concepts elaboration regarding S60 platform. Meanwhile, it gives a whole introduction on how to develop applications on Nokia S60 platform. Especially, the emphasis is given to the development of S60 3rd Edition, which is the latest S60 platform, and it differs a lot from its predecessors in terms of development process and platform security.
S60 platform overview
The S60 platform is the market-leading smartphone platform built on Symbian OS. It incorporates all key mobile technologies expected by increasingly sophisticated enterprise users and consumers, and it provides revenue opportunities for the full range of stakeholders in the mobile marketplace. As the S60 platform has developed, it has raised the bar on smartphone feature provision by taking the lead in developing and implementing many innovations.
S60 platform architecture
The following figure illustrates the high level of architecture of the S60 platform. The platform is based on Symbian OS but also provides additional features:
As shown in the above figure, S60 platform is based on the Symbian OS, which evolves all the time. As such, S60 platform has different editions. S60 platform has experienced 1st Edition, 2nd Edition, and the latest 3rd Edition. In each of the edition, it also introduces different feature packs, which incorporate some of the advanced features on each release.
Symbian is based on open standard, which makes the development on Symbian/S60 open for the developers. The Development for the S60 platform is backward compatible although there was a break between the 2nd Edition and the 3rd Edition, which was introduced by platform security and new compiler used in the platform.
The releases and their respective operating systems are:
- S60 1st Edition — Symbian OS v6.1.
- S60 2nd Edition — Symbian OS v7.0s.
- S60 2nd Edition, Feature Pack 1 — Symbian OS v7.0s.
- S60 2nd Edition, Feature Pack 2 — Symbian OS v8.0a.
- S60 2nd Edition, Feature Pack 3 — Symbian OS v8.1a.
- S60 3rd Edition — Symbian OS v9.1.
- S60 3rd Edition, Feature Pack 1 — Symbian OS v9.2.
- S60 3rd Edition, Feature Pack 2 — Symbian OS v9.3.
- S60 5th Edition — Symbian OS v9.4.
Before starting development, developers may refer to the Nokia Developer website (www.forum.nokia.com/documents ) to check feature details of the Symbian OS version that is incorporated in each edition or feature pack. A developer may download the document S60 3rd Edition: What's new for developers to find out the changes on S60 3rd Edition SDK and the main APIs introduced in each of the feature packs.
The Symbian OS Extensions are a set of capabilities that allow the S60 platform to interact with device hardware functions such as vibration alert, device lights, and battery charge status.
S60 platform services are the fundamental services provided by the S60 platform, these include:
- Application Framework Services — providing the basic capabilities for launching applications and servers, state persistence management, and UI components.
- UI Framework Services — providing the concrete look and feel for UI components and handling UI events.
- Graphics Services — providing capabilities for the creation of graphics and their drawing to the screen.
- Location Services — allowing the S60 platform to be aware of a device’s location.
- Web-Based Services — providing services to establish connections and interact with Web-based functionality, including browsing, file download, and messaging.
- Multimedia Services — providing the capabilities to play audio and video, as well as support for streaming and speech recognition.
- Communication Services — providing support for local and wide area communications, ranging from Bluetooth technology to voice calls.
S60 application services a set of capabilities that are used by the S60 applications and can be used by third-party developers to provide basic functionality for applications. These include “PIM Application Services,” “Messaging Application Services,” and “Browser Application Services.”
S60 Java technology services support the Java™ Platform, Micro Edition (Java™ ME) Java Technology for the Wireless Industry (JTWI) specification (JSR-185). The S60 platform support includes the Connected Limited Device Configuration (CLDC) 1.1 configuration (JSR-139) and the Mobile Information Device Profile (MIDP) 2.0 (JSR-118) extension to this configuration. In addition, some of the additional APIs are supported as well.
S60 Applications, applications available to a device’s user, include personal information manager (PIM), messaging, media applications, profiles, etc.
The S60 platform defines a UI style and APIs, but it does not mandate the screen size or input methods. Licensees are free to implement their own customized UIs. Developers must program UI applications with scalability in mind because specific UI dimensions cannot be assumed. Currently, since the introduction of Scalable UI, S60 supports 3 different screen sizes: 176x208 pixels, 240x320 pixels, 352x416 pixels, and the display can be in landscape or portrait orientation. A developer only needs to write once (taking care of the Scalable UI), then application can be applicable to different screen sizes.
For further information regarding S60, visit the following Web sites:
Key changes on S60 3rd Edition
On S60 3rd Edition, there are some big changes, and some important concepts are introduced. It is very important to understand these concepts before doing some development on S60 3rd Edition.
In short, the biggest differences between S60 2nd Edition and S60 3rd Edition are:
- ABI compiler for the ARM architecture
- Real Time Kernel (from Symbian OS v9 onwards)
- Platform security
- Symbian Signed
ABI compiler for the ARM architecture
- From S60 3rd Edition onwards, a compiler based on the Application Binary Interface (ABI) for the ARM® Architecture is used to compile applications. The ARM C/C++ ABI is an industry standard that determines how executables and shared objects work together. In adopting the ARM ABI compiler standard, the S60 platform offers improved performance for system and third-party applications through increased efficiency in memory usage and data access time. Currently, there are two compilers: GCCE and ARMV5. The GCCE compiler comes with the SDK installation, and it is totally free. The ARMV5 compiler is a commercial compiler, and a developer may find more information at ARM for pricing!
- The underlying operating system for S60 3rd Edition is Symbian OS v9.1, which features a new real-time kernel, EPOC Kernel Architecture 2 (EKA2). (EPOC was the original name for Symbian OS. The previous kernel was EKA1). The new multithreaded kernel has predictable execution times for many kernel services and reduced latency times, so it is ideal for time-critical applications such as communications and IP stacks, multimedia applications that require high bandwidth such as video streaming, and voice over IP (VoIP).
- S60 3rd Edition brings a new approach to platform security. The changes were motivated by the goal of ensuring the integrity of S60 devices so that consumers can be confident that their devices are secure, reliable, and predictable. To achieve this, access to sensitive data and device operations is controlled.
- The changes mean that developers have, with the right verification, access to a greater range of APIs. The changes also provide some protection from unwanted side effects caused by defects in applications. From a business point of view, the enhancements increase the reputation of the S60 platform as a stable, secure operating system. Platform security is fully supported in the emulator, thereby allowing developers to test how this feature will affect their applications.
- Note that “platform security” does not refer to those features that were already available in the S60 platform or that are available as third-party extensions to the platform, such as encryption, firewalls, Java MIDP security domain model, virus protection, or secure versions of communications protocols.
- Trusted Computing Base
- To enforce the security measures introduced in S60 3rd Edition, a collection of software known as the Trusted Computing Base (Trusted Computing Base (TCB)) is used. The TCB contains the kernel, the file system, and the software installer, and is responsible for ensuring that only applications with the necessary permissions and authority can be installed and are allowed to access restricted areas of the device.
- Data caging
- The goal of data caging is to control access to the file system so that data remain secure. Each application has its own private directory for its stored data that cannot be accessed by other applications (unless the application has enough capabilities). An application can access most areas of the file system outside its private directory, but there are limitations. Without an agreement with the device manufacturer, the /sys directory, which stores executable files, will be inaccessible, and the /resource directory, which contains application resources such as bitmaps, will be read-only. In order to access the specific directories, an application needs to have some capabilities. The capability requirements for each of the specific directories in the device are shown as follows:
|Directories (inc. sub directories)||Required Capabilities for:|
|Read Access||Write Access|
- The purpose of the capability model is to ensure that only trusted applications are able to use certain APIs and system resources. The consumer (that is, the person who installs the application on the device) can grant certain permissions, such as the ability to send a Short Message Service (SMS) message and to read and write user data. However, several capabilities will be available only to Symbian Signed applications.
- There are four sets of capabilities:
- Open to All — These capabilities are open to all applications; applications do not need to be Symbian Signed.
- Granted by the User at Installation Time — These capabilities (with the exception of full location information) can be granted by the user to the application on installation and are known as unsigned sandbox. Symbian Signed applications can access all these capabilities without requiring the user to grant permission.
- Granted Through Symbian Signed — These capabilities include the Granted by the User at Installation Time capabilities and an extended set that require that an application be Symbian Signed before the capabilities can be accessed.
- Granted Through the Manufacturer — These capabilities require an agreement with the device manufacturer to allow the capabilities to be granted during the Symbian Signed process.
- Different capabilities need to have different types of certificates to develop. During the development phase, a user may need to apply for different certificates for testing. A certificate can be used to sign any of the applications, which has the subset of capabilities defined in the certificate. The S60 capabilities are described in the following picture:
- Symbian signed and Tools will be introduced in the later parts of this article.
- For more details on the device features associated with each capability, see the Nokia Developer document Symbian OS: Overview to Security
- For a list of known sensitive applications that do need device manufacturer approval, see the page on sensitive applications.
The S60 platform is licensed by a number of stakeholders that have developed devices for the marketplace — Lenovo, LG Electronics, Nokia Mobile Phones, Panasonic and Samsung. The range of S60 devices is constantly changing, and detailed information on the current range of devices can be found in the Devices section of the S60 Web site and the following sites:
S60 application development
For new developers, developing on S60 3rd Edition could be difficult to some extent, and sometimes it is hard to know where to start. In this section, the development steps for the S60 3rd Edition are introduced. The steps are a little different from the previous platforms (1st and 2nd Editions) in terms of deployment onto a real device. The development on 3rd Edition is a little bit trickier than on the previous platforms. In the following, all of the relevant steps are described in detail.
Register a Nokia Developer account
- For many of the resources at the Nokia Developer website, you need to register before downloading. The registration is free, and all of the SDKs, documents, and sample codes are free to download. The Nokia Developer registration Web site is: http://www.developer.nokia.com/Profile/Join.xhtml
Install development tools
- Currently, there are a number of development tools available for developing S60 3rd Edition. They are:
- Microsoft Visual Studio .NET 2003/2005 (text maintained for historical purposes)
:You need to install the Microsoft Visual Studio .NET 2003/2005 first. Then go to the tools section of the Nokia Developer website to download Carbide.vs 2.x/Carbide.vs 3.01 (the download is free). A developer may also purchase the tool Visual Assist X to achieve better user experience.
- Metrowerks Codewarrior
- This will be a discontinued product from Nokia (Nokia owns the product), and it will be gradually phased out. It will be replaced by a new development tool called Carbide. c++. You can download the Professional, Personal, or OEM version from the tools section of the Nokia Developer website. After the installation, you have a trial period before it expires. The tool supports on-device debugging. In order to support on-device debugging, you have to install the following CodeWarrior update: CodeWarrior On-Device Debug Kit for S60 3rd Edition
- You can download the video file On-Device Debugging for Symbian OS C++ Applications from the Nokia Developer website.
- The user guide On-Device Debugging for Symbian OS Software is also available at Nokia Developer.
- Note: If you want to use the commands:
abld build winscw udeb
abld build gcce urel
- to build your application, download CodeWarrior and install it. Otherwise, the commands may not work properly. Without a license, the Codewarrior IDE may not be started; however, the commands should be working anyway! When building an application in MS-DOS box, make sure the EPOCROOT environment variable is set properly. More information regarding the EPOCROOT setting can be found in SDK help. Alternatively, without using EPOCROOT, you are recommended to use the devices command to select the needed SDK if there are several SDKs installed in the PC. You can type the following command in MS-DOS box to get more information about the devices command:
- Carbide C++ 2.x/3.x
- This is the free tool available for S60 3rd Edition development. You can freely download the tool from the Nokia Developer website at http://www.developer.nokia.com/Resources/Tools_and_downloads/Other/.
- The tool supports on-device debugging and has a wonderful UI designer inside the tools, which speeds up the development of Symbian applications. Meanwhile, for "Professional" and "OEM" version, it provides more advanced features for benchmarking and debugging.
- A video Carbide On-Device Debug Screencast is available at Nokia Developer. You can download Carbide.c++ from Nokia Developer.
- A developer may also download the C++ Developer's Library.
- A developer may follow the following steps to configure to use MS-DOS box to compile a project using command line:
- Start ==> Programs ==> Carbide.c++ 1.3 ==> Configure environment for WinsCW command line
It is recommended to install the tools before installing the S60 3rd Edition SDK since SDK installation may update some of the components in the corresponding tools.
Install S60 3rd Edition SDKs
You can download the S60 3rd Edition SDKs from http://www.developer.nokia.com/Resources/Tools_and_downloads/ (section "C++ for Symbian OS Tools and SDKs"). A number of S60 SDKs are available. You can download the following SDKs for S60 3rd Edition application development:
- 3rd Edition
- 3rd Edition, Maintenance Release
- 3rd Edition, FP1
- 3rd Edition, FP2
There is also a "3rd Edition" release, which was the first release of S60 3rd Edition. If you want to develop an application that runs on all S60 3rd Edition devices including those from FP1/FP2 onwards, it is recommended to download the maintenance SDK for development since this is a mature release and the base for all the future S60 3rd Edition SDKs (although future feature packs may introduce some advanced features).
If a developer still cannot find the S60 3rd Edition FP2 SDK after having successfully installed the S60 3rd Edition FP2 SDK and "Carbide.vs 2.0.2/Carbide.vs.3.01", please refer to the wiki article: Archived:S60 Platform SDK - Workarounds and Updates
If a developer installs 3rd Edition, FP1 SDK, it is recommended to install File:NCNList fix.zip to avoid the Application closed: ncnlist KERN-EXEC 3" panic message when emulator is launched!
For Chinese developers, there is no separate Chinese SDK although it was the case in the previous edition SDK releases. Chinese language has been integrated into the European SDK. You only need to enable it by completing the following step in your computer:
Start ==> Programs ==> S60 Developer Tools ==> 3rd Edition SDK ==> 1.1 MR ==> Languages ==> Change to Chinese
However, it seems not so straightforward to make the Chinese/other languages input method working by selecting the # key on the emulator as normally is done on the real phone.
A workaround to solve to problem is to select the ABC key (on which has a pen icon). When an editor control is shown (for example, when composing an SMS message), selecting the ABC key will show up a menu to select the wanted input method. Once the input method is selected, a developer may use mouse to select the buttons (1-9) to type in Chinese or other selected language characters.
Please be noted, once S60 3rd Edition SDK is installed, all of the future project files should be resided in the same drive as the one where S60 SDK is installed. Meanwhile, the installation path should not contain any space characters. Normally, the default installation path is accepted!
- You can install the following plug-in for the Maintenance SDK for better multimedia emulation: Extensions plug-in for S60 3rd Edition SDK for Symbian OS, for C++, MR or SDK API Plug-in
- You can also install the S60 3rd Edition: Device Management Plug-in
- A Sensor plug-in is available for the Nokia 5500 sport phone.
- Design S60 application using Open C/C++ language S60 Open C plug-in". Now, with the latest release of the Open C/C++ package, a developer may use C/C++ languages to develop their games using the RGA (Realtime Graphics and Audio APIs) software components in the package.
If the SDK installation fails, take a look at the following post on the Nokia Developer website: Can't install S60 3rd SDK. It provides a workaround solution for solving the problem. You may need to create an empty file "S60_3rd.xml", and put it into the directory where the 3rd Edition SDK installation package is unzipped.
If you install and uninstall the S60 3rd Edition maintenance SDK, the folder name of the installation will change (for example, \Symbian\9.1\S60_3rd_MR_1 or \Symbian\9.1\S60_3rd_MR_2). To remove the installation sequence number 1 or 2, you can remove the following registry from the Windows registry database in your PC before installing:
On Window 7 64 bit System, the key is located at:
If you want to build your own application using command, refer to the SDK help for more information. Sometimes, on one computer, a few SDKs are installed. To ease the effort switching from one SDK to another, use the tool environmentswitch.exe. The tool is unfortunately not available on the 3rd Edition SDK. You can find this tool in the previous SDK installation. For example,
If a developer does not have the SDK installed, please go to the link S60 3rd Edition Application Development to download it (EnvironmentSwitch.zip).
Install Java runtime environment
- Download the latest Java SDK and runtime environment from the following Web site: http://www.oracle.com/technetwork/java/index.html. Make sure all the needed paths and environment variables are correctly added to the computer environment variables using "Control Panel".
- More information on the availability of ActivePerl.
- Make sure to set the correct path of the executables in the Control Panel of your PC. Please do install the correct perl verion according to the S60 3rd Edition SDK release notes. Do not need to install the latest version of the perl. Otherwise, it may have compatibility problems. Some developers do meet the problems after installing the latest perl.
Development process for S60 3rd Edition
- The development process on S60 3rd Edition is a little different than on S60 2nd Edition due to the introduction of the platform security model on S60 3rd Edition and the new compiler used.
- The following figure describes the development process on S60 3rd Edition in a nutshell.
- The whole process is described in the document S60 3rd Edition: Tool Chain, IDEs, And Development Process
As shown in figure above, the steps can be described as follows:
You can start with an existing project by importing an .mmp file, or use the "Wizard" in the IDE tool to generate a template application. Normally, this is the recommended approach.
For those greenhorn Symbian OS C++ developers, Symbian OS C++ programming is a little bit hard to understand compared to ANSI C++ programming. A developer is recommended to read the following articles:
- Symbian OS coding conventions
- Symbian OS programming workbook
- Symbian OS client and server
- Symbian OS Platform Independent Engine Development
- S60 Platform Comparison of ANSI C++ and Symbian C++
- Symbian OS Creating Custom Controls
- Symbian OS view architecture
- Symbian OS active object and scheduler
- Scalable UI
- How do i start programming
During development phase, plan the application in advance for localization and Scalable UI since the application will possibly run on all the devices with different screen sizes and orientations. In addition, the application may support multiple languages as well. Defining the localized strings in a .loc or .rls file is always a good practice to enable good localization support. Do not define the localized strings in the source code .cpp files or in .rss file if localization support is needed. A good localization example code can be found at:
The sample code can only be found in S60 3rd Edition FP2 SDK installation, or
when porting an application from previous releases, it is very important to define the stack size in the .mmp file. On S60 3rd Edition, it needs a bigger size of stack. Normally, the stack size is defined as follows:
If not defined as above, some unknown errors may happen when the application is running.
Please be noted that the project files should be resided in the same drive as the drive where S60 3rd Edition SDK is installed. Otherwise, error may happen!
Use the build function in the IDE tool or use commands in a MS-DOS box to build the example code. For information on how to build an application, see the SDK help.
For Windows emulator, a developer may issues the following command in the group directory of the project to build a project once environment is set correctly:
abld build winscw udeb
For phone target, the following commands can be issued to build a project:
abld build gcce urel
Here, the GCCE compiler is free, and it comes with the installation of S60 3rd Edition SDK.
For some of the commercial and serious applications, if performance is of a great concern, a developer is recommended to purchase commercial RCVT (ARMV5) compiler. By using the compiler, the target code size is much smaller than the one from GCCE compiler. As such, the execution becomes faster, and performance is improved!
In some of the IDE tools (Carbide.c++ and Carbide.vs), the compiler has been seamlessly integrated into the tool, and a user just select the targets, and the targets can be easily built and signed during the compilation process if the certificate information is configured correspondingly.
You can build and run the application in the PC emulator environment. If there are no problems, the application can be deployed into a real target for testing. On S60 3rd Edition, the deployment is a little different from S60 2nd Edition, and Symbian Signed should be involved. During the development phase, you can apply for a developer certificate to sign the developed application for testing. Information on Symbian Signed and how to apply for a developer certificate will be detailed below.
You can find more information about test criteria on Symbian Signed at https://www.symbiansigned.com/app/pageapp/page/overview/testcriteria
If an application needs to be pre-installed onto a Nokia device for some business reasons, it needs to pass the Nokia test criteria. More detailed information can be found at Testing Summary 4. Signing
It is compulsory to sign all S60 applications before deploying the application onto a real device. Information about Symbian Signed and testing criteria can be found linked from Category:Symbian Signed.
For Chinese developers, it can be difficult to apply for an TrustCenter publisher ID for some reasons. Based on an agreement with Verisign, a green channel has been opened for developers based in China. More detailed information can be found at https://www.symbiansigned.com/app/pageSymbianSigned-General2006_v1_1.pdf.
5. Transferring and distributing
When the application has been officially signed, the application is ready for distribution. In the following sections, a few links are provided. Nokia NCD (Nokia Content Discover) is also available for use.
Deployment of S60 3rd Edition
When an application has been developed and fully tested in the emulator environment, the application is ready for deployment onto a real device. As described above, it is compulsory to sign every application on S60 3rd Edition before deploying it onto a real device.
- For self-signed applications, you can use makekeys one the command line to generate a key and a certificate to sign the application:
makekeys -cert -password 12345 -dname "CN=username OU=NOKIA CO=CHINA EMemail@example.com" mykey.key mycer.cer
Alternatively, you can request a Development Certificate from Symbian Signed using the process defined in User guide: Symbian Signed
Once you get both the .key and .cer file, you can use the following command to sign the application for deployment onto a real device:
signsis myapp_gcce.sis myapp_gcce.sisx mycer.cer mykey.key mypassword
where signsis is the command used to sign the application and myapp_gcce.sisx is the output signed file although the extension name does not really matter in this case. You may need to put the correct path inside the command in order to make the command executed successfully. Once an application has been signed, it can be deployed onto a real device for testing via Bluetooth or infrared.
Some IDEs provide some UI to manage the certificates and keys. Both Carbide.c++ and Qt Creator automatically self sign the application during the build phase.
A Symbian singed eLearning courseware can be found a tSymbian signed eLearning
You can find all of the latest information regarding S60 on the following Web sites:
For Chinese developers, the following Web site provides localized Chinese documents and latest news updates: http://www.developer.nokia.com.cn/
On the Nokia Developer website, you can download all the documents and sample codes for free. You can find Symbian C++ examples at http://www.developer.nokia.com/Develop/.
You can use the Nokia Developer Discussion boards to post questions, which other developers may answer. You can also search by using keywords to find out the relevant posts/threads in the discussion areas. For Chinese developers, there is a separate Chinese discussion area available for use. According to the hit-box of Nokia Developer, it is one of the most active discussion areas on the Web site.
In addition to the Web site and discussion boards, Nokia Developer also provides consultancy packages for developers all over the world. This is a fee-based service, and it is open for all developers. For more information, please contact the Nokia Developer local business development managers or technology support and consulting team.
You can get some training services from Nokia Developer as well. Nokia Developer has certified a number of trainers worldwide, and they provide professional training services for developers. More information can be found at the Training section on the Nokia Developer website.
Nokia Developer also provides a professional support service called the Nokia Developer Pro program. For full details, follow the Marketplace link in the Developers section of the Nokia Web site at http://www.nokia.com/developers.
In addition to the links listed above, there a number of other useful resources:
- Symbian coding conventions
- Symbian OS basics - workbook
- Developing platform-independent application engines for Symbian OS--module design
- S60 C++ library
- Describes the S60 C++ library and coding conventions
- This courseware is available on the Nokia Developer website for free. It has a number of packages for you to choose from.
- Describes how to port an existing S60 2nd Edition to S60 3rd Edition.
- Nokia developer training program
- Nokia certified training centers worldwide
- This is an open source area for developers. There are a number of open projects.
- A Web site for signing applications. You can apply for developer certificates and get the testing documents here.
- Nokia Developer page containing information about S60 application testing.
- A site with nice tutorials,etc .
- A site for getting supports tutorials, etc.
- Find out all of available applications on Nokia NCD (Nokia Content Discover). NCD is a client installed on Nokia devices, and it provides a way for users to find out the needed applications.
S60 3rd Edition preinstalled and preloaded applications Of course, there are a lot of useful links on the Internet, and it is impossible to list them all here.
- Chinese version of this article
- S60 3rd Edition application development resources
- S60 Platform:indentification codes
- Code snippets table for common use cases
S60 is an advanced platform in the mobile device market and it is widely used by mobile device manufacturers. It is an open platform available for third-party developers, and it keeps changing and evolving. S60 3rd Edition incorporates some new features like platform security. The development process on S60 3rd Edition is a little bit different from its predecessors (S60 2nd Edition) due to the introduction of the new platform security model.
S60 devices will be secure and available across a wide range of market segments. At the same time, the introduction of a new ARM binary interface and platform security requires developers to change their development tools and may impose additional certification requirements on some applications. The introduction of S60 3rd Edition presents developers with both opportunities and challenges. Nokia also offers developers lucrative opportunities to sell mobile content and Java Verified™ applications through Nokia Store. In addition, some applications may be chosen to be embedded in new Nokia devices.