mobi.hsz.idea.gitignore package nameRunning the latest phpstorm eap and the latest version of the plugin the file colours no longer work (ignored files still show with default colours in file tree).
I feel it may actually be an issue with the identification of the ignored files rather than the colouring as the "Hide ignored files" also has no effect.
There is no exception being thrown.
I have tried disabling the setting and invalidating cache + restart, then enabling and invalidating cache + restart to no avail so it does not appear to be a project issue (also occurs over all projects).
I will note however that after invalidating the cache and restarting, during indexing for the last ~5 seconds the colours do work, but only in the last part of the indexing and they stop working again after it has completed.
Plugin:
Version: 2.1.1
IDE:
PhpStorm 2017.2.1 EAP
Build #PS-172.3968.23, built on August 26, 2017
JRE: 1.8.0_152-release-915-b11 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.8.0-59-generic
OS:
Kubuntu 64bit 16.10
Experiencing the same issues:
Version: 2.1.1
PhpStorm 2017.2.1
Build #PS-172.3544.41, built on August 2, 2017
JRE: 1.8.0_152-release-915-b6 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.8.0-37-generic
Ubuntu Minimal (XFCE) 64bit 16.10
This seems related (although possibly not identical) to #453
I was having the same issue on OS X Sierra/PHPStorm 2017.2.1 and fell back to 2.0.4 and all is as it should be. I also sent the guy some money, because I didn't realize how much I've come to depend on knowing what's being ignored!
Same issue, seriously messing with workflow.
I'm having the same issue. Also, if I have the "Enable ignored file status coloring" checked when I start PHPStorm, and then disable it, the following exception is thrown (I hope this helps):
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:903)
at java.util.ArrayList$Itr.next(ArrayList.java:853)
at mobi.hsz.idea.gitignore.settings.IgnoreSettings.notifyOnChange(IgnoreSettings.java:611)
at mobi.hsz.idea.gitignore.settings.IgnoreSettings.setIgnoredFileStatus(IgnoreSettings.java:346)
at mobi.hsz.idea.gitignore.settings.IgnoreSettingsConfigurable.apply(IgnoreSettingsConfigurable.java:123)
at com.intellij.openapi.options.newEditor.ConfigurableEditor.apply(ConfigurableEditor.java:316)
at com.intellij.openapi.options.newEditor.SettingsEditor$5.apply(SettingsEditor.java:165)
at com.intellij.openapi.options.newEditor.SettingsEditor.apply(SettingsEditor.java:315)
at com.intellij.openapi.options.newEditor.SettingsDialog.doOKAction(SettingsDialog.java:173)
at com.intellij.openapi.ui.DialogWrapper$OkAction.doAction(DialogWrapper.java:1867)
at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1828)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6541)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6306)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4897)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4719)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4719)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.awt.EventQueue$4.run(EventQueue.java:735)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
at com.intellij.ide.IdeEventQueue.g(IdeEventQueue.java:821)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:645)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1084)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:736)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:458)
at com.intellij.openapi.ui.DialogWrapper.invokeShow(DialogWrapper.java:1686)
at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1635)
at com.intellij.openapi.options.newEditor.SettingsDialog.a(SettingsDialog.java:83)
at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:86)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:151)
at com.intellij.openapi.options.newEditor.SettingsDialog.show(SettingsDialog.java:83)
at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:97)
at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:63)
at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:52)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:216)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:233)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:576)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.a(IdeKeyEventDispatcher.java:625)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:624)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.d(IdeKeyEventDispatcher.java:479)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:213)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:621)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
just installed 2017.2.2 and updated plugin. File colouring gone.
Thank you guys for the report and all the details.
I have released v2.0.0-RC2 version to the Early Access Preview repository channel with a possible solution for this issue (at least I have reproduced this issue and fix works for me).
Can you please install the newest EAP version and confirm if it resolves this problem for you?
@hsz thanks for your work.
This has partially fixed it.
We have a .gitignore that looks like this
.idea/
bower_components/
node_modules/
.DS_Store
error.log
httpdocs/*
!httpdocs/mysite/
!httpdocs/themes/
!httpdocs/silverstripe-nzpost/
!httpdocs/composer.*
!httpdocs/deploy.sh
!*.development
!*.html
!*.txt
_config.php
config.yml
We're getting no file colouring on e.g. httpdocs/siteconfig
nor on httpdocs/mysite/_config.php
But we also have another .gitignore at httpdocs/themes/default/.gitignore and it's defined ignores are greyed out successfully.
Additionally, we now have an exception being thrown.
Argument for @NotNull parameter 'collection' of com/intellij/util/containers/ContainerUtil.addAllNotNull must not be null
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'collection' of com/intellij/util/containers/ContainerUtil.addAllNotNull must not be null
at com.intellij.util.containers.ContainerUtil.addAllNotNull(ContainerUtil.java)
at mobi.hsz.idea.gitignore.lang.kind.GitLanguage.getOuterFiles(GitLanguage.java:115)
at mobi.hsz.idea.gitignore.psi.IgnoreFile.isOuter(IgnoreFile.java:156)
at mobi.hsz.idea.gitignore.reference.IgnoreReferenceSet$IgnoreReference.isOuterFile(IgnoreReferenceSet.java:287)
at mobi.hsz.idea.gitignore.reference.IgnoreReferenceSet$IgnoreReference.innerResolveInContext(IgnoreReferenceSet.java:210)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference.innerResolve(FileReference.java:146)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference$MyResolver.resolve(FileReference.java:591)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference$MyResolver.resolve(FileReference.java:585)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:188)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference.multiResolve(FileReference.java:134)
at mobi.hsz.idea.gitignore.codeInspection.IgnoreUnusedEntryInspection$1.visitEntry(IgnoreUnusedEntryInspection.java:79)
at mobi.hsz.idea.gitignore.psi.IgnoreVisitor.visitEntryFile(IgnoreVisitor.java:19)
at mobi.hsz.idea.gitignore.psi.IgnoreVisitor.visitEntryDirectory(IgnoreVisitor.java:15)
at mobi.hsz.idea.gitignore.psi.impl.IgnoreEntryDirectoryImpl.accept(IgnoreEntryDirectoryImpl.java:20)
at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:82)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:305)
at com.intellij.concurrency.ApplierCompleter.d(ApplierCompleter.java:133)
at com.intellij.concurrency.ApplierCompleter.c(ApplierCompleter.java:222)
at com.intellij.concurrency.ApplierCompleter.d(ApplierCompleter.java:151)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1154)
at com.intellij.concurrency.ApplierCompleter.b(ApplierCompleter.java:105)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:548)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:493)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
at com.intellij.concurrency.ApplierCompleter.a(ApplierCompleter.java:116)
at com.intellij.concurrency.ApplierCompleter.b(ApplierCompleter.java:96)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:142)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:249)
at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:96)
at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.pollAndExecCC(ForkJoinPool.java:1190)
at java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1879)
at java.util.concurrent.ForkJoinPool.awaitJoin(ForkJoinPool.java:2045)
at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:390)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
at java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2616)
at com.intellij.concurrency.JobLauncherImpl.invokeConcurrentlyUnderProgress(JobLauncherImpl.java:63)
at com.intellij.concurrency.JobLauncher.invokeConcurrentlyUnderProgress(JobLauncher.java:57)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:316)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.a(LocalInspectionsPass.java:226)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:132)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:83)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.b(PassExecutorService.java:438)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1160)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.d(PassExecutorService.java:431)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:548)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:493)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:430)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.c(PassExecutorService.java:406)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:142)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:249)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:404)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:165)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
PhpStorm 2017.2.2
Build #PS-172.3968.35, built on August 31, 2017
JRE: 1.8.0_152-release-915-b11 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.8.0-59-generic
.ignore Version: 2.2.0-RC2
@hailwood Thank for the quick feedback.
Can you please check v2.2.0-RC3? I've fixed everything that you've reported.
@hsz,
No worries, I'll do what I can to help.
We now have no file colours at all, and the contents of the directories that were being coloured before are now unlistable (sits there "loading...").
We also now have four different StackOverflowError exceptions being thrown.
https://gist.github.com/hailwood/5b69684ce43734c49bb01e3e61e38a8e#file-gistfile1-txt
https://gist.github.com/hailwood/5b69684ce43734c49bb01e3e61e38a8e#file-gistfile2-txt
https://gist.github.com/hailwood/5b69684ce43734c49bb01e3e61e38a8e#file-gistfile3-txt
https://gist.github.com/hailwood/5b69684ce43734c49bb01e3e61e38a8e#file-gistfile4-txt
Version: 2.2.0-RC3
I tried doing an invalidate cache & Restart to the same effect
@hailwood v2.2.0-RC4 is released
You're my hero @hsz thanks for your hard work.
I'll be donating https://www.paypal.me/hsz on payday!
I have install version 2.2.0 and it's seems to work fine but only till first restart of IDE. After restart of IDE it doesn't coloring again. If I remove the plugin and install it again it will work fine till next restart.
Please fix it.
yeah, stopped working after reboot
Yes, not working for me either in Rider 2017.2 EAP still. This is with 2.2.1-RC1. Also, every line says "entry is never used."
Confirmed. Workaround is to edit .gitignore manually, unignore some certain file or path, ignore it again, and it'll start colouring correctly again.
@leymannx That fixes the colouring inside of the .gitignore file, but not the project tree correct?
@hailwood No, actually that fixes the colouring of files in the project tree for me.
macOS 10.12.16, PHPStorm 2017.2.3, .ignore 2.2.0
@leymannx interesting. That's how it used to function for us in an older version of .gitignore (which was totally fine by us).
So I upgraded to the PhpStorm 2017.3 EAP
Build #PS-173.2099.16, built on September 7, 2017
And now it's all working for me again, including persisting after a restart.
Can anyone else confirm?
Can you please check if it's fixed with v2.2.1-RC2?
Where v2.2.1-RC2 can be downloaded?
It is available in Early Access Preview repository channel or for manual installation
I am sorry, but it didn't help.
@xpert13 Can you invalidate the cache and restart?
I tried to remove/install plugin. Few times restart phpStorm but nothing helps.
I don't know how to invalidate cache.
File > Invalidate caches / restart
I am in work now. I don't wan't to loose my local history before commit.
I'll try tomorrow.
Not works
I confirm v2.2.1 fixes the issue (after cache invalidation), thanks!
Edit: Actually it still doesn't work for files ignored by global Git ignore file.
Cache invalidation is works till first restart of IDE.
UPD: BTW I tried PhpStorm 2017.3 EAP and it's works fine even with version 2.2.0
I confirm in Rider that it does work to invalidate the cache, until you restart the IDE, then all coloring is gone again.
if you have 2 projects and do invalidate cache then coloring works only in second opened project.
Coloring isn't work anymore after I updated to PHPStrom 2017.2.4.
Seeing same issue as @ikovalyov with latest phpstorm 2017.2.4 and the latest plugin release today.
Coloring is buggy and comes and goes when multiple projects are open.
still buggy when multiple projects opened
With latest version it's even worse. Invalidate cache and restart enables colouring for few seconds and then it's gone. Not working at all now.
Yes it's still buggy, but OK when I really need it I simply cut (cmd + x) all rules from the projects .gitignore, save the file, paste everything back, save the file again, and colouring is working again for quite a while. Even when switching between projects.
lol, this "lifehack" works )
Confirmed that leymannx's workaround works with 2.3.0 and IDEA 2017.2.5
I don't have the issue anymore with plugin version 2.3.2 on PhpStorm 2017.3, even with rules from my global ignore file.
@julienfalque you're right, updated to 2017.3 and everything is OK!
Still not working for me in PyCharm 2017.3
Actually the issue still comes back randomly.
It's still the only thing that is not working on in Version 2.3.2 in PhpStorm 2017.2 on Ubuntu 16.04. Files and folders are not marked as ignored. Sometimes (but not often) a reload of the pagetree seems to help - colors are ok for a short time. Opening the next project and the colors are all default again.
Any ideas?
After a few changes connected to the performance and indexing, we have v2.6.1 available.
Can you guys please to verify it agains the issues that have been reported in this thread?
@hsz no issues here
Did we want this issue closed?
Seems to work fine except when indexation is in progress: file colouring stops working until indexation is complete. This feels weird when e.g. on a PHP project using PhpStorm I remove the _vendor_ directory and then run composer install: all ignored files that are not in the _vendor_ directory do not appear as ignored until PhpStorm finishes indexing the _vendor_ directory again. I don't know whether this can be improved but I'm being picky and I'm fine with closing this issue :)
@hailwood thank you for the confirmation.
@julienfalque This is because ignoring depends on indexed files. ;)
I'll try to improve it somehow, but I can't promise that it'll be easy to achieve.
I still having this issue.
Sometimes the workaround suggestion from comment 327782046 works, sometimes doesn't.
PhpStorm 2018.2 EAP
Build #PS-182.3569.36, built on July 4, 2018
PhpStorm EAP User
JRE: 1.8.0_144-b01 amd64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Linux 4.16.12-3-default
.ignore plugin: 2.6.2
Seems to still work fine for me
PhpStorm 2018.2 EAP
Build #PS-182.3569.36, built on July 4, 2018
PhpStorm EAP User
JRE: 1.8.0_152-release-1226-b7 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.15.0-24-generic
.ignore plugin: 2.6.2
Difference is my Kernel is one point behind yours, I'm running the jetbrains built JDK whereas you have a manually installed Oracle version, and your JRE is slightly behind mine I wonder if you attempt to switch to the Jetbrains JDK if that would fix it? Would help narrow down the issue at least.
if you attempt to switch to the Jetbrains JDK if that would fix it?
I tried the Jetbrains JDK for 5 minutes, the colour of the elements in the Project tree was all right, but I could not use it any longer, because the font antialiasing is terrible with OpenJDK.
Okay, so that helps by letting @hsz know it's an issue only on Oracle Java.
Regarding the font antialiasing, that's interesting here's what mine looks like with the openJDK (using FiraCode)

With the project tree looking like this

I'd be interested in seeing a screenshot comparison with the Oracle JDK @Sweetchuck


IntelliJ IDEA 2019.2 introduced native support for the dot-ignore files handling of Git (.gitignore), Mercurial (.hgignore), and Perforce (.p4ignore). Because of that, this issue is now obsolete.
Most helpful comment
I have install version 2.2.0 and it's seems to work fine but only till first restart of IDE. After restart of IDE it doesn't coloring again. If I remove the plugin and install it again it will work fine till next restart.
Please fix it.