| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix LastState instance thread safe access
Fix LastState instance thread safe access
and update dictionary usages in app launch and resumption.
There was implemented LastStateWrapper class for providing exclusive
thread safe access to LastState instance from all places in the program.
Also passing LastState object was replaced with LastStateWrapper object
to avoid direct access to LastState instance from another components.
Thus there were a small updates in architecture of AM and TM classes.
* Fixed mocks and unit tests related to LastState class
* Add LastStateWrapper interface and LastStateWrapperPtr typedef
* Fix tests after adding LastStateWrapper interface
* Deprecate methods with changed signature
* Adapt RCConsentManager according to LastState functionality
There are some deprecated methods in LastState that are used by
RCConsentManager.
In addition, LastState::dictionary method returns reference to
dictionary no more - only copy of latter.
* Adapt AppServiceManager to new LastState usage
* Adapt transport manager to new LastState usage
* Adapt RPCPlugin to new LastState usage
* Adapt AppServiceRPCPlugin to new LastState usage
* Adapt RCRPCPlugin to new LastState usage
* Adapt SDLRPCPlugin to new LastState usage
* Adapt VehicleInfoPlugin to new LastState usage
* Adapt existing unit tests
* Fix ENABLE_LOG off build failure
* Replace old-style loops with range based
* Fix potential mutex deadlocks in resumption storage
* Add Mutable Data Accessor.
The entity that provides the thread-safe mutable access to data.
* Fix submodule issues after merge
Co-authored-by: Alexander Kutsan (GitHub) <akutsan@luxoft.com>
Co-authored-by: Yaroslav Mamykin (GitHub) <33784535+YarikMamykin@users.noreply.github.com>
Co-authored-by: Igor Gapchuk (GitHub) <41586842+IGapchuk@users.noreply.github.com>
Co-authored-by: Jacob Keeler <jacob.keeler@livioradio.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Send UPDATING state after receiving a successful SDL.PolicyUpdate response
* Restart the timeout in case SDL received BC.OnSystemRequest with type PROPRIETARY or HTTP from HMI in UPDATING state
* Fix UPDATE_NEEDED - UPDATING sequence in case of second app register
* Add unit tests
* fixup! Send UPDATING state after receiving a successful SDL.PolicyUpdate response
* fixup! Restart the timeout in case SDL received BC.OnSystemRequest with type PROPRIETARY or HTTP from HMI in UPDATING state
Co-authored-by: Yaroslav Mamykin (GitHub) <33784535+YarikMamykin@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix processing of VR only PI response
1. Added sending of UI_ClosePopUp request to HMI after
VR.PerformInteraction response.
2. Added sending response with choice_id to mobile in case of successful
VR.PerformInteraction response
* Fix adapt existing unit tests
* Add new unit tests
* fixup! Fix processing of VR only PI response
* fixup! Fix processing of VR only PI response
* fixup! Add new unit tests
* fixup! Fix processing of VR only PI response
* fixup! Add new unit tests
|
|
|
|
|
|
|
|
| |
* Delete old version of jsoncpp lib and add new like submodule, change deprecated interface for new.
* Logs output without extra special symbols
* fixup! Delete old version of jsoncpp lib and add new like submodule, change deprecated interface for new.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* SDL restores AddCommands in the order they were created
SDL generates and assigns internal_id for each AddCommand from mobile app
and restore AddCommands by this internal_id
* Fix message helper unit tests
* Fix resume controller unit tests
* Fix cmd_id in SendAddVRCommandToHMI
* fixup! SDL restores AddCommands in the order they were created
* Go to the next command if command id missing
Co-authored-by: Ira Lytvynenko (GitHub) <ILytvynenko@luxoft.com>
Co-authored-by: Yevhenii Dementieiev (GitHub) <57259850+ydementieiev@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Handle wrong message type from HMI was added
* Fixed ignored request from HMI in case of invalid data.
utils::SharedPtr replaced with std::shared_ptr for ProcessMessageFromHMI
and ProcessMessageFromMobile in rpc_handler.
New parameter "report" in HandleWrongMessageType in order to get a proper
error message in response.
Redundant log message removed from sdl_activate_app_request.
INVALID_DATA now will be sent as a response to HMI
in case of wrong parameters in the request.
Co-authored-by: Mykola Korniichuk (GitHub) <42380041+mkorniichuk@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix SDL app stream processing with non-streamable state.
For determining whether an application is allowed to stream,
SDL considered only HMI_Level.
Now streaming state is also taken into account.
Fix notifications for not streamable apps
* Fix unit tests after rename function in new inplimentation
* Minor fixes
* const parameter for StartEndStreamTimer
* Fix logging messages
* end_stream_timer shanged to SingleShot
* fix unit test for state_controller
* fixup! Minor fixes * const parameter for StartEndStreamTimer * Fix logging messages * end_stream_timer shanged to SingleShot * fix unit test for state_controller
* rename HMILevelAllowsStreaming -> HMIStateAllowsStreaming
* fixup! Fix SDL app stream processing with non-streamable state.
Co-authored-by: Yevhenii Dementieiev (GitHub) <57259850+ydementieiev@users.noreply.github.com>
|
|\
| |
| | |
Fix/sdl crash during set app icon
|
| |
| |
| |
| | |
Update SetAppIcon request according to the changes in file system
|
| |
| |
| | |
* Fix versioning appliance for vehicle data
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
App. (#2365)
* Bugfix `SDL forwards OnButtonEvent notification`
Bugfix `SDL forwards OnButtonEvent notification
of CUSTOM_BUTTON to BACKGROUND App.`
Issue number #967
* Check that SDL forwards OnButtonEvent notification of CUSTOM_BUTTON to BACKGROUND App
* fixup! Bugfix `SDL forwards OnButtonEvent notification`
Co-authored-by: Ira Lytvynenko (GitHub) <ILytvynenko@luxoft.com>
Co-authored-by: Igor Gapchuk (GitHub) <41586842+IGapchuk@users.noreply.github.com>
|
| |
| |
| |
| |
| |
| | |
In case of duplicated name of application SDL didn't increment
'count_of_rejections_duplicate_name' counter in policy db.
Added incrementing of counter.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix undefined behavior after SO cleanup
After cleanup_data() call, delete is used to deallocate
memory by pointer, however pointer still hold a value
of address of deallocated memory. By that reason SO
still have an ability to access that data what might
cause UB including core crash in the random places.
This function has been updated to set pointers to NULL
as well as smart object type to prevent accident access
to deallocated memory.
* fixup! Fix undefined behavior after SO cleanup
* Fix CSmartSchema corruption while copying
The issue is that HMICapabilities class is storing
different capability fields by raw pointer. In some
cases when one thread is trying to copy smart object
by pointer, another thread may try to set the same
field and destroys a previous one. This may cause a
half-copied smart object instance, like smart object
with the schema pointing to already destroyed schema
item. When such smart object is destroyed, we may see
a core crash or unexpected SDL behavior.
To avoid such issues, raw pointers were raplced with
shared pointers, set by swap() operation. This provide
a guarantee that object will not be destroyed while
copying by some thread.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add the new ApplicationEvent.
Add the new ApplicationEvent (kRCStatusChanged) for informing RcRPCPlugin
that OnRCStatus notification should be sent.
Split adding RcExtension to application and sending OnRCStatus notification
to the separate actions.
* Fix SDL crash during application registration.
There is an issue when SDL crashes during registration second application
in the time when already exists a registered other one application.
In the current implementation ApplicationManager during application
registering by the ApplicationManager::RegisterApplication method creates
a new instance of the application and adds it to the collection of all
registered applications. This method calls in the
RegisterAppInterfaceRequest, but all needed extensions will be added only
by the ApplicationManager::OnApplicationRegistered method during sending
RegisterAppInterface Response to the mobile.
According to the described behavior could appear case when a first
application is registered successfully and all needed application
extensions are successfully added too. The second application starts
the registration process in someone thread, but in the other one thread,
SDL receives PolicyEvent::kApplicationPolicyUpdated event and tries to
unsubscribe all applications from removed in policy table Vehicle Data
Items. All actions go on in the next sequence:
Precondition:
The first application is successfully registered and all needed
extensions are added.
The first thread:
1. The Mobile device sends RegisterAppInterfaceRequest RPC to the SDL for
registration of the second application.
2. SDL receives the RegisterAppInterfaceRequest and calls method Run.
Within method RegisterAppInterfaceRequest::Run ApplicationManager runs
3. the method RegisterApplication.
The second thread:
4. The SDL receives the PolicyEvent::kApplicationPolicyUpdated event and
forwards the event to each plugin for processing it.
5. VehicleInfoPlugin tries to unsubscribe all registered applications
from removed in policy table Vehicle Data Items.
The plugin finds the first application and unsubscribes it from all
removed Vehicle Data Items.
The plugin finds the second application and doesn't find any extensions
for the application and crashes on the DCHECK with an uninitialized
pointer to the extension.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add unit tests
* Fix subscription to app services
* fixup! Fix subscription to app services
* fixup! Add unit tests
* fixup! Add unit tests
* fixup! Fix subscription to app services
* fixup! Fix subscription to app services
* fixup! Add unit tests
* fixup! Add unit tests
* fixup! Add unit tests
|
|\
| |
| | |
Fix custom vehicle data limits
|
| | |
|
| | |
|
|/ |
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Fix revoked VD items subscription after PTU
There was found an issue that SDL still kept
subscriptions for custom vehicle data items even
for case when they were removed during PTU. By
that reason, SDL was crashing with DCHECK on
attempt to unsubscribe from non existing custom
data.
There was added missing logic of internal
unsubscribe in case some custom vehicle data
was removed by policies.
* Fix sending of UnsubscribeVehicleData
Was added a missing part of logic of subscriptions
control - cache manager was updated to keep the
vehicle data which was removed by last PTU.
Custom vehicle data manager was updated to
consider the removed vehicle data and also prepare
and send unsubscribe requests to HMI for case when
some vehicle data was removed and some application
was subscribed on it.
* fixup! Fix sending of UnsubscribeVehicleData
* fixup! Fix sending of UnsubscribeVehicleData
* fixup! Fix sending of UnsubscribeVehicleData
* fixup! Fix sending of UnsubscribeVehicleData
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Fix SDL timeout logic for RPCs with own timer
SDL must send GENERIC_ERROR to app in case HMI
does NOT respond during <DefaultTimeout>+<RPCs_internal_timeout>
for all RPCs with own timer
* Fix default timeout for HMI requests
For RPS with own timers SDL should apply default+internal timeout for mobile and HMI requests
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Replace dcheck in create window
* Update src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_window_request.cc
Co-Authored-By: Jacob Keeler <jacob.keeler@livioradio.com>
* Source capabilities from both app and hmi data
|
|/
|
|
|
|
|
|
| |
/resource_allocation_manager_tests testing binary . (#3070)
* ResourceAllocationManagerImpl Unit tests don't run
* Fix style
|
| |
|
| |
|
|
|
|
|
|
| |
* Add appServices param to HMICapabilities
* Add hmiCapabilities params
|
|
|
|
|
|
| |
* Set mandatory=false for all response params(other than resultCode and success) in the MOBILE_API
* Add moduleData key check in RCHelpers::RemoveRedundantGPSDataFromIVDataMsg
|
|
|
|
|
| |
Fix SDL does not send UnsubscribeVehicleData request to HMI after
unregister last app.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add reregister wait list accessor and fix IsApplicationSwitched in RAI
* Update CommandHolder class
After introduction CommandSource enum there was
possible to specify any different source for HMI
and mobile commands. However, CommandHolder class
logic was not updated to reflect these changes and
still working with the hardcoded values. As a result
commands factory of plugins may not able to create
commands which were suspended during device transport
switching and then restored back.
This commit contains updated CommandHolder impl which
reflects changes done and properly handles initial
command source.
* Fix affected UT
* Fix style
|
|
|
|
|
|
|
|
|
|
| |
allowMultipleAccess values (#3050)
* Restructure how the consent array is created
* Add case for handling multipleAccessAllowed=false
* Restructure how moduleIds are filtered in the forwarded HMI request and readded for the mobile_response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* move MenuLayoutsAvailable to WindowCapability
* cleanup
style script + make is_supported function const
* reverse comparables
rvalue on left side is good practice
* cleanup2
* main window can have window_id = 0
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Create function to check if user location is in module service area
* Use location consents in GetCalculatedVehicleDataConsent
* Filter(based on location) the moduleIds sent to hmi for consent
* Removed unnecessary logs
* Add checks for validating hmi_response
* Check result code for hmi response before checking allowed param
|
|
|
|
|
|
|
|
| |
* Fix MergeModuleData invalid behavior
* Rework MergeModuleData and MergeArray logic
* Add unit tests
|
|
|
|
| |
OnSystemCapabilityUpdated(REMOTE_CONTROL) (#3032)
|
|
|
|
|
|
|
|
| |
Added custom deleter for logger
Added flush logger during each handle deleting
Added deleting logger thread during destroy each plugin
This changes are necessary to avoid deadlock
during work with log4cxx.
|
|
|
|
|
|
|
|
| |
* Fix coverity issues
Fixes CIDs 203808, 203807, 203806, 203804, 203803, 203802, 203800, 203798, 203797, 203795, and 203793
* Add virtual destructor
|
| |
|
|
|
|
| |
This reverts commit 73b34832829650834ea69b3606ce8127a93ef973.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix versioning appliance for vehicle data
SDL applied SyncMsgVersion=4.5.1 in case mobile app version was < 5.0
With this commit SDL applies SyncMsgVersion respectively to mobile app
* Add unit test
* Fix existing unit tests
* fixup! Fix existing unit tests
* fixup! Fix versioning appliance for vehicle data
* fixup! Fix versioning appliance for vehicle data
* fixup! Add unit test
* fixup! Fix existing unit tests
* fixup! Add unit test
* fixup! Fix existing unit tests
* fixup! Fix versioning appliance for vehicle data
|
|
|
|
|
|
|
|
| |
* git error message processing from HMI
* Fix comments and signed-unsigned conversion
* fixup! Fix comments and signed-unsigned conversion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add new functionality to the interfaces
* Add moduleId processing to the resource allocation manager
Add GetResources function to helpers to get a list of resources
Update unit tests with moduleID param
Update command tests after updating the resource allocation manager
* Add GetAcquiredModuleTypes and ReleaseModuleType functions for policy checking
* Remove redundant SetResourceState call and fix UTs
SetResourceState is called in RCCommandRequest::on_event function so
it makes no sense to call it again RCCommandRequest::on_event
* Add moduleInfo to default capabilities
* Add ModuleId method to RCCommandRequest
Add ModuleId method to RCCommandRequest for extracting module_id from
command message.
Update all inherited commands from RCCommandRequest.
* Add ReleaseInteriorVehicleDataModule RPC
Add ReleaseInteriorVehicleDataModuleRequest.
Add ReleaseInteriorVehicleDataModuleResponse.
Update ResourceAllocationManager interface:
- add method ReleaseResource();
Update ResourceAllocationManagerImpl:
- move ReleaseResource() from private section to public for implementing
interface;
* Add GetInteriorVehicleDataConsentRequest RPC
Add GetInteriorVehicleDataConsentRequest without logic.
Add GetInteriorVehicleDataConsentResponse.
Update RCCommandFactory.
* Refactor RC capabilities checking
Create RCCapabilities manager, move all functions related to capabilities checking
from commands into it.
Move auxiliary functions to the rc_helpers.
Create mock for RC capabilities manager
Update UTs after RC capabilities manager adding
* Use range based loop for smart objects with array type
* Add ModuleId() function implementation
Add const to the ModuleType() function
Add function to get the moduleId from hmi capabilities
Process missing moduleId param in HMI response
In case if HMI doesn't provide the moduleId in response SDL will
consider such response as invalid and send generic error response to the mobile
Add moduleId to the hmi request
* Add moduleId validation by capabilities and button_name for ButtonPress
* Add moduleId validation by capabilities for GetIVD and SetIVD
Add capabilities check to the rc_command_request
* Add const to the capabilities check functions
* Add function to get list of all available resources from hmi capabilities
* Fix UTs after updating the capabilities check
Update unit tests after obtaining available resources from capabilities
* Add new HMI RPC SetGlobalProperties and save user_location of application
Update SetGlobalPropertiesRequest
- update PrepareResponseParameters method according to third new parameter
"rc_properties";
* Add new parameter to ini file
Add period for module_id consent expiring
* Update interior vehicle data caching with moduleId processing
Update unit tests that are related to caching with moduleId processing
* Add separate file for RCRpcTypes
* Add RCConsentManager
- add interface RCConsetnManager
- add implementation RCConsentManagerImpl
- add new rc constants
- add mock class for RCConsentManager
Remove all consents after RC disabling
Add checking ModuleConsent to RCCommandRequest
Add logic for GetInteriorVehicleDataConsentRequest from Mobile
Save the driver's decision when SDL sends the GIVDConsent request
* Define Grid, add functions for getting moduleServiceArea and allowMultipleAccess values
Add Seat Location capabilities checking and function for getting driver's location
Check if the user location area and the service area has something in common, or the user location is driver,
otherwise - reject the module reallocation request
Fix UTs after adding the location check
* Update SEAT module type processing
Add converting id to moduleId:
If the vehicle support at least one seat control, seat control capability includes at least two items.
1st for driver’s seat. 2nd for front passenger’s seat
* Add SetGlobalProperties Unit tests
Add Unit test for PrepareResultCodeForResponse method
Add Unit test for PrepareResultForMobileResponse method
* Add ReleaseInteriorVehicleDataModuleRequest Unit tests
* Set resource to free if SIVD request is invalid
* Add Grid Unit tests
* Add ResourceAllocationManager Unit tests
* Add MockRCHelpers.
* Add ResourceAllocationManager Unit tests
* Allocate resource after receiving successful response from HMI
Send OnRCStatus notification only in case resource allocation state was changed
* Rename function to indicate that it returns a list of module types
* Rename typedef to indicate that it defines a pair moduleType and capabilitiesStatus
* Fix functions descriptions
* Rename function to indicate that it returns data related to the module type
* Fix CheckIfModuleExistsInCapabilities function name
* Update cached consents logic for GIVDC
Behavior for cache consents has been updated
according to the following comment:
1. If accessMode=AUTO_ALLOW, return true by default
2. If accessMode=AUTO_DENY, check if another app is using the resource
a. If the resource is IN_USE, return false
b. If the resource is FREE, return true
3. If accessMode=ASK_DRIVER, check if the consent is cached
a. If it is cached, return that result
b. If it is NOT cached, then prompt the driver for consent
* Update logic for allowMultipleAccess=false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Generate policy enums from MOBILE_API
Policy manager HMI level enum reorder
* Add RPC vehicle data and endpoint_properties to sdl_preloaded_pt
Set default version of custom vehicle data mapping
* Add VehicleDataItem to policy table
SQL storage implementation for VehicleDataItems
Fix validation of double values in policy table
Change isDouble to isNumeric during validation double values
"0" should be validated as correct double value
Add validation vehicle data during PTU
Send in PT snapshot only version of custom VDI
- During snapshot generation remove vehicle data items section
- Add validation for Policy table depended on PT type
Fix wrong check for vehicle data snapshot
Allow empty vehicle data in PTU
Change max value of string for URL from 255 to INT_MAX
* Make Policy Handler forward declared to avoid high coupling
* Add vehicle_info_command_params for vehicle info plugin
Vehicle info params added to hmi commands
* Process CustomVehicleData in GetVehicleData request
* CustomVehicleDataManager implementation
* Process Custom vehicle data subscriptions
Refactored code.
Extracted CheckFrequency to separate method in class
* Check update of content of functional groups
Fixes https://github.com/smartdevicelink/sdl_core/issues/2962
Add additional check for functional group content
before OnPermissionChangeNotification.
* rename comparing functions to make more clear
their return value sense
* change variable names
* extra check for null values in HasNewGroups()
New unit test to cover changes within functional group
* Add GetPolicyConfigurationData
GetPolicyCOnfigurationData Implementation
* Add CustomVehicleData functionality for POLICY_EXTERNAL flow
Change max value url for external policy
fixes for external flow
* since unti validation for the database
* empty vehicle data validation
* Convert data_type to VehicleDataType enum value
* Validation of VehicleDataItem name and key
Introduces validation of vehicle_data_item
name and key validation:
* they should not contain spaces;
* they should not be empty or consist only spaces;
* they should not contain invalid chars like '!@#$%^&*'.
* Add engineOilLife to HMI_API
* Remove deprecated RPC GetUrls due to major version update
* Add ability to extend Smart schema with parameters
Extract SMember from CObjectSchemaItem
Add methods to ISchemaItem (Using composite pattern)
- GetMemberSchemaItem
- AddMemberSchemaItem
Add implementation of VehicleDataItemSchema class
Add appropriate unit tests
Add creation of vehicle_data items schemes on policy event
|
|
|
|
|
| |
Fixed application activation/reactivation
during resumption process
Fixed related unit tests
|