You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Eric Norman (Jira)" <ji...@apache.org> on 2020/10/03 20:16:00 UTC

[jira] [Created] (SLING-9792) ScriptCache interaction with RhinoJavaScriptEngineFactory is not thread safe

Eric Norman created SLING-9792:
----------------------------------

             Summary: ScriptCache interaction with RhinoJavaScriptEngineFactory is not thread safe
                 Key: SLING-9792
                 URL: https://issues.apache.org/jira/browse/SLING-9792
             Project: Sling
          Issue Type: Bug
            Reporter: Eric Norman
            Assignee: Eric Norman
             Fix For: Scripting JavaScript 3.1.4


During startup, the RhinoJavaScriptEngineFactory component may become deactivated temporarily.  The ScriptCacheImpl#handleEvent (running in another thread) may concurrently attempt to get the script engine from the factory.  At this point, the deactivated factory may still be in the engine list because it hasn't been unbound from the ScriptEngineManager yet.  In that case, the RhinoJavaScriptEngineFactory#getScriptEngine call from ScriptCacheImpl#handleEvent throws a series of NullPointerExceptions related to usage of field that was nulled during the RhinoJavaScriptEngineFactory#deactivate logic.

For example:

 
{noformat}
03.10.2020 12:10:41.244 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableResource03.10.2020 12:10:41.244 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableResourcejava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.247 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableNodejava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.248 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptablePropertyjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.249 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableItemMapjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:348) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.250 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptablePrintWriterjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.251 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableVersionHistoryjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.251 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableVersionjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.252 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableCalendarjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)03.10.2020 12:10:41.253 *WARN* [EventAdminAsyncThread #2] org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory addHostObjects: Cannot prepare host object class org.apache.sling.scripting.javascript.wrapper.ScriptableMapjava.lang.NullPointerException: null at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.addHostObjects(RhinoJavaScriptEngineFactory.java:342) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getRootScope(RhinoJavaScriptEngineFactory.java:195) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory.getScriptEngine(RhinoJavaScriptEngineFactory.java:142) [org.apache.sling.scripting.javascript:3.1.3.20201003190729678] at org.apache.sling.scripting.core.impl.jsr223.SortableScriptEngineFactory.getScriptEngine(SortableScriptEngineFactory.java:120) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.sling.scripting.core.impl.ScriptCacheImpl.handleEvent(ScriptCacheImpl.java:283) [org.apache.sling.scripting.core:2.3.5.SNAPSHOT] at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:415) at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [org.apache.felix.eventadmin:1.5.0] at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [org.apache.felix.eventadmin:1.5.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) 
{noformat}
 

Expected:

RhinoJavaScriptEngineFactory#getScriptEngine should log a warning and return null if the component is no longer active.  The series of NPEs should not happen and get logged.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)